From a158fde6745a91be8add0fd997947eaa3c732208 Mon Sep 17 00:00:00 2001 From: albert Date: Sat, 29 Aug 2026 15:12:40 -0700 Subject: [PATCH 01/11] Add support for additional languages: Dutch, Turkish, Indonesian, Vietnamese, Japanese, Korean, and Simplified Chinese --- README.md | 7 + lib/l10n/app_ar.arb | 24 + lib/l10n/app_de.arb | 24 + lib/l10n/app_en.arb | 14 + lib/l10n/app_es.arb | 24 + lib/l10n/app_et.arb | 14 + lib/l10n/app_fa.arb | 24 + lib/l10n/app_fr.arb | 24 + lib/l10n/app_hi.arb | 24 + lib/l10n/app_id.arb | 1897 +++++ lib/l10n/app_it.arb | 24 + lib/l10n/app_ja.arb | 4616 ++++++++++++ lib/l10n/app_ko.arb | 1897 +++++ lib/l10n/app_nb.arb | 24 + lib/l10n/app_nl.arb | 1897 +++++ lib/l10n/app_pl.arb | 24 + lib/l10n/app_pt.arb | 24 + lib/l10n/app_ru.arb | 24 + lib/l10n/app_tr.arb | 1897 +++++ lib/l10n/app_uk.arb | 24 + lib/l10n/app_vi.arb | 4612 ++++++++++++ lib/l10n/app_zh.arb | 960 +++ lib/l10n/app_zh_CN.arb | 4612 ++++++++++++ lib/l10n/generated/app_localizations.dart | 90 + lib/l10n/generated/app_localizations_ar.dart | 21 + lib/l10n/generated/app_localizations_de.dart | 21 + lib/l10n/generated/app_localizations_en.dart | 21 + lib/l10n/generated/app_localizations_es.dart | 21 + lib/l10n/generated/app_localizations_et.dart | 21 + lib/l10n/generated/app_localizations_fa.dart | 21 + lib/l10n/generated/app_localizations_fr.dart | 21 + lib/l10n/generated/app_localizations_hi.dart | 21 + lib/l10n/generated/app_localizations_id.dart | 3519 +++++++++ lib/l10n/generated/app_localizations_it.dart | 21 + lib/l10n/generated/app_localizations_ja.dart | 3420 +++++++++ lib/l10n/generated/app_localizations_ko.dart | 3413 +++++++++ lib/l10n/generated/app_localizations_nb.dart | 21 + lib/l10n/generated/app_localizations_nl.dart | 3520 +++++++++ lib/l10n/generated/app_localizations_pl.dart | 21 + lib/l10n/generated/app_localizations_pt.dart | 21 + lib/l10n/generated/app_localizations_ru.dart | 21 + lib/l10n/generated/app_localizations_tr.dart | 3513 +++++++++ lib/l10n/generated/app_localizations_uk.dart | 21 + lib/l10n/generated/app_localizations_vi.dart | 3508 +++++++++ lib/l10n/generated/app_localizations_zh.dart | 6703 ++++++++++++++++++ lib/src/app/app_locale.dart | 10 + linux/io.busystack.busymark.desktop | 16 + linux/io.busystack.busymark.metainfo.xml | 24 + test/src/app_smoke_test.dart | 10 + test/src/localization_audit_test.dart | 87 +- 50 files changed, 50834 insertions(+), 4 deletions(-) create mode 100644 lib/l10n/app_id.arb create mode 100644 lib/l10n/app_ja.arb create mode 100644 lib/l10n/app_ko.arb create mode 100644 lib/l10n/app_nl.arb create mode 100644 lib/l10n/app_tr.arb create mode 100644 lib/l10n/app_vi.arb create mode 100644 lib/l10n/app_zh.arb create mode 100644 lib/l10n/app_zh_CN.arb create mode 100644 lib/l10n/generated/app_localizations_id.dart create mode 100644 lib/l10n/generated/app_localizations_ja.dart create mode 100644 lib/l10n/generated/app_localizations_ko.dart create mode 100644 lib/l10n/generated/app_localizations_nl.dart create mode 100644 lib/l10n/generated/app_localizations_tr.dart create mode 100644 lib/l10n/generated/app_localizations_vi.dart create mode 100644 lib/l10n/generated/app_localizations_zh.dart diff --git a/README.md b/README.md index 1059a51b..d97c3471 100644 --- a/README.md +++ b/README.md @@ -241,19 +241,26 @@ flutter test BusyMark has ARB localization files for: - Arabic (ar) +- Dutch (nl) - English (en) - Estonian (et) - French (fr) - German (de) - Hindi (hi) +- Indonesian (id) - Italian (it) +- Japanese (ja) +- Korean (ko) - Norwegian Bokmål (nb) - Persian (fa) - Polish (pl) - Portuguese (pt) - Russian (ru) +- Simplified Chinese (zh-CN) - Spanish (es) +- Turkish (tr) - Ukrainian (uk) +- Vietnamese (vi) English in `lib/l10n/app_en.arb` is the source of truth for app strings. diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index c6fb2bb3..00971072 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "اللوحة الجانبية", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 32783f27..b1b1e2bc 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Seitenbereich", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index dde84fbe..0ad39e0e 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -198,6 +198,10 @@ "@languageEnglish": {"description": "Language selector option for English."}, "languageGerman": "Deutsch", "@languageGerman": {"description": "Language selector option for German."}, + "languageDutch": "Nederlands", + "@languageDutch": {"description": "Language selector option for Dutch."}, + "languageTurkish": "Türkçe", + "@languageTurkish": {"description": "Language selector option for Turkish."}, "languageItalian": "Italiano", "@languageItalian": {"description": "Language selector option for Italian."}, "languageNorwegian": "Norsk", @@ -220,8 +224,18 @@ "@languagePersian": {"description": "Language selector option for Persian."}, "languageHindi": "हिन्दी", "@languageHindi": {"description": "Language selector option for Hindi."}, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": {"description": "Language selector option for Indonesian."}, "languageEstonian": "Eesti", "@languageEstonian": {"description": "Language selector option for Estonian."}, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": {"description": "Language selector option for Vietnamese."}, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": {"description": "Language selector option for Simplified Chinese."}, "toggleSidebar": "Sidebar panel", "@toggleSidebar": {"description": "Keyboard shortcuts label for the sidebar panel toggle."}, "topLeft": "Top left", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 1db5451b..ec93dabb 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Panel lateral", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_et.arb b/lib/l10n/app_et.arb index 1e74a2cd..ce91f347 100644 --- a/lib/l10n/app_et.arb +++ b/lib/l10n/app_et.arb @@ -180,6 +180,10 @@ "@languageEnglish": {"description": "Language selector option for English."}, "languageGerman": "Deutsch", "@languageGerman": {"description": "Language selector option for German."}, + "languageDutch": "Nederlands", + "@languageDutch": {"description": "Language selector option for Dutch."}, + "languageTurkish": "Türkçe", + "@languageTurkish": {"description": "Language selector option for Turkish."}, "languageItalian": "Italiano", "@languageItalian": {"description": "Language selector option for Italian."}, "languageNorwegian": "Norsk", @@ -202,8 +206,18 @@ "@languagePersian": {"description": "Language selector option for Persian."}, "languageHindi": "हिन्दी", "@languageHindi": {"description": "Language selector option for Hindi."}, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": {"description": "Language selector option for Indonesian."}, "languageEstonian": "Eesti", "@languageEstonian": {"description": "Language selector option for Estonian."}, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": {"description": "Language selector option for Vietnamese."}, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": {"description": "Language selector option for Simplified Chinese."}, "toggleSidebar": "Külgpaneel", "@toggleSidebar": {"description": "Keyboard shortcuts label for the sidebar panel toggle."}, "topLeft": "Ülal vasakul", diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb index 05336668..7191b2f1 100644 --- a/lib/l10n/app_fa.arb +++ b/lib/l10n/app_fa.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "پنل کناری", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 12169f1e..1fba3254 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Panneau latéral", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index 321388a5..58953cae 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "साइडबार पैनल", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb new file mode 100644 index 00000000..828de9dc --- /dev/null +++ b/lib/l10n/app_id.arb @@ -0,0 +1,1897 @@ +{ + "@@locale": "id", + "appTitle": "BusyMark", + "@appTitle": {"description":"Application name."}, + "appSubtitle": "Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside.", + "@appSubtitle": {"description":"Short application description."}, + "aboutBusyMark": "Tentang BusyMark", + "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "aboutTagline": "Markdown dan Editor Writerside", + "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "aboutLicenseLabel": "Lisensi", + "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "aboutWebsite": "Situs web", + "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "aboutSourceCode": "Kode sumber", + "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "reportIssue": "Laporkan masalah", + "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "feedbackCategory": "Kategori", + "@feedbackCategory": {"description":"Feedback category field label."}, + "feedbackChooseCategory": "Pilih kategori", + "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "feedbackCategoryProblem": "Masalah atau bug", + "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "feedbackCategoryFeature": "Permintaan fitur", + "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "feedbackCategoryPrivacySecurity": "Masalah privasi atau keamanan", + "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "feedbackCategoryUsability": "Masalah kegunaan", + "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "feedbackCategoryOther": "Lainnya", + "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "feedbackSubject": "Subjek", + "@feedbackSubject": {"description":"Feedback subject field label."}, + "feedbackMessage": "Pesan terperinci", + "@feedbackMessage": {"description":"Detailed feedback message field label."}, + "feedbackReplyEmail": "Balasan email (opsional)", + "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "feedbackIncludeTechnicalDetails": "Sertakan detail teknis", + "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "feedbackTechnicalDetailsDisclosure": "Jika diaktifkan, ini hanya menambahkan versi sistem operasi Linux dan lokal aplikasi BusyMark Anda. Tidak ada log, file, data akun, atau diagnostik lainnya yang dilampirkan.", + "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "feedbackSubmit": "Kirim", + "@feedbackSubmit": {"description":"Button that submits feedback."}, + "feedbackSubmitting": "Mengirimkan…", + "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "feedbackCategoryRequired": "Pilih kategori.", + "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "feedbackSubjectLength": "Subjek harus antara 3 dan 120 karakter.", + "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "feedbackMessageLength": "Pesan harus antara 10 dan 5.000 karakter.", + "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "feedbackReplyEmailInvalid": "Masukkan alamat email yang valid atau biarkan kolom ini kosong.", + "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "feedbackConnectionFailure": "BusyMark tidak dapat terhubung. Periksa koneksi internet Anda dan coba lagi.", + "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "feedbackTimeoutFailure": "Waktu permintaan telah habis. Coba lagi.", + "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "feedbackRateLimitedFailure": "Terlalu banyak laporan yang dikirim dari koneksi ini. Tunggu dan coba lagi.", + "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "feedbackRejectedFailure": "Server menolak laporan ini. Periksa kolom formulir dan coba lagi.", + "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "feedbackServerFailure": "Server tidak dapat menerima laporan tersebut. Coba lagi nanti.", + "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "feedbackSuccess": "Umpan balik dikirim. ID Referensi: {id}", + "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "advanced": "Lanjutan", + "@advanced": {"description":"Settings section title for advanced actions."}, + "addToGit": "Tambahkan ke Git", + "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "appearance": "Penampilan", + "@appearance": {"description":"Settings section title for appearance options."}, + "apply": "Terapkan", + "@apply": {"description":"Button label that applies a dialog change."}, + "back": "Kembali", + "@back": {"description":"Tooltip for navigating back."}, + "bottomLeft": "Kiri bawah", + "@bottomLeft": {"description":"Editing button position option."}, + "bottomRight": "Kanan bawah", + "@bottomRight": {"description":"Editing button position option."}, + "cancel": "Batal", + "@cancel": {"description":"Cancel button label."}, + "choose": "Pilih", + "@choose": {"description":"Button label for choosing a file or path."}, + "chooseLocation": "Pilih lokasi", + "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "copy": "Salin", + "@copy": {"description":"Copy command label."}, + "copyName": "Salin nama", + "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "copyFileName": "Salin nama file", + "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "copyPath": "Salin jalur", + "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "create": "Buat", + "@create": {"description":"Create action label."}, + "creating": "Membuat...", + "@creating": {"description":"Progress label while a project or topic is being created."}, + "cut": "Potong", + "@cut": {"description":"Cut command label."}, + "promoteSection": "Bagian promosi", + "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "demoteSection": "Bagian demosi", + "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "moveSectionUp": "Pindahkan bagian ke atas", + "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "moveSectionDown": "Pindahkan bagian ke bawah", + "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "confirmDeleteSectionTitle": "Hapus bagian?", + "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "confirmDeleteSectionMessage": "Hapus “{name}” dan semua konten di bagiannya? Hal ini tidak dapat dibatalkan.", + "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "darkTheme": "Gelap", + "@darkTheme": {"description":"Dark theme option."}, + "delete": "Hapus", + "@delete": {"description":"Delete command label."}, + "discard": "Membuang", + "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "editor": "Editor", + "@editor": {"description":"Editor view label."}, + "file": "File", + "@file": {"description":"Generic file kind label."}, + "fileHistory": "Riwayat File", + "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "folder": "Folder", + "@folder": {"description":"Folder kind label."}, + "insert": "Sisipkan", + "@insert": {"description":"Insert button label."}, + "keyboardShortcuts": "Pintasan keyboard", + "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "commandPalette": "Palet perintah", + "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "commandPaletteHint": "Ketikkan perintah", + "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "commandPaletteEmpty": "Tidak ada perintah yang cocok", + "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "commandUnavailableInContext": "Tidak tersedia dalam konteks editor saat ini", + "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "lightTheme": "Terang", + "@lightTheme": {"description":"Light theme option."}, + "mainMenu": "Menu utama", + "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "fullScreen": "Layar penuh", + "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "markdown": "Markdown", + "@markdown": {"description":"Markdown format label."}, + "open": "Buka", + "@open": {"description":"Open action label."}, + "openInFiles": "Buka di File", + "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "pathActions": "Tindakan jalur", + "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "outline": "Garis besar", + "@outline": {"description":"Outline sidebar tab label."}, + "overwrite": "Timpa", + "@overwrite": {"description":"Button label for overwriting a changed file."}, + "paste": "Tempel", + "@paste": {"description":"Paste command label."}, + "pasteWithoutFormatting": "Tempel tanpa memformat", + "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "reading": "Membaca", + "@reading": {"description":"Reading view label."}, + "removeFromRecent": "Hapus dari Terbaru", + "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "recent": "Terbaru", + "@recent": {"description":"Recent workspaces section title."}, + "redo": "Ulangi", + "@redo": {"description":"Redo command label."}, + "save": "Simpan", + "@save": {"description":"Save action label."}, + "search": "Cari", + "@search": {"description":"Search action label and field hint."}, + "selectAll": "Pilih semua", + "@selectAll": {"description":"Select all command label."}, + "settings": "Pengaturan", + "@settings": {"description":"Settings action label."}, + "source": "Sumber", + "@source": {"description":"Source view label."}, + "split": "Pisahkan", + "@split": {"description":"Split view label."}, + "systemTheme": "Sistem", + "@systemTheme": {"description":"System theme option."}, + "theme": "Tema", + "@theme": {"description":"Theme setting label."}, + "appLanguage": "Bahasa", + "@appLanguage": {"description":"Application language setting label."}, + "systemLanguage": "Sistem", + "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "languageEnglish": "English", + "@languageEnglish": {"description":"Language selector option for English."}, + "languageGerman": "Deutsch", + "@languageGerman": {"description":"Language selector option for German."}, + "languageDutch": "Nederlands", + "@languageDutch": {"description":"Language selector option for Dutch."}, + "languageTurkish": "Türkçe", + "@languageTurkish": {"description":"Language selector option for Turkish."}, + "languageItalian": "Italiano", + "@languageItalian": {"description":"Language selector option for Italian."}, + "languageNorwegian": "Norsk", + "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "languageFrench": "Français", + "@languageFrench": {"description":"Language selector option for French."}, + "languageRussian": "Русский", + "@languageRussian": {"description":"Language selector option for Russian."}, + "languageUkrainian": "Українська", + "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "languagePolish": "Polski", + "@languagePolish": {"description":"Language selector option for Polish."}, + "languageSpanish": "Español", + "@languageSpanish": {"description":"Language selector option for Spanish."}, + "languagePortuguese": "Português", + "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "languageArabic": "العربية", + "@languageArabic": {"description":"Language selector option for Arabic."}, + "languagePersian": "فارسی", + "@languagePersian": {"description":"Language selector option for Persian."}, + "languageHindi": "हिन्दी", + "@languageHindi": {"description":"Language selector option for Hindi."}, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "languageEstonian": "Eesti", + "@languageEstonian": {"description":"Language selector option for Estonian."}, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "languageJapanese": "日本語", + "@languageJapanese": {"description":"Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description":"Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "toggleSidebar": "Panel bilah sisi", + "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "topLeft": "Kiri atas", + "@topLeft": {"description":"Editing button position option."}, + "topRight": "Kanan atas", + "@topRight": {"description":"Editing button position option."}, + "undo": "Urungkan", + "@undo": {"description":"Undo command label."}, + "validate": "Validasi", + "@validate": {"description":"Validate action label."}, + "validation": "Validasi", + "@validation": {"description":"Settings section title for validation options."}, + "viewMode": "Modus tampilan", + "@viewMode": {"description":"Native header bar view mode control label."}, + "welcome": "Selamat datang", + "@welcome": {"description":"Welcome screen label and tooltip."}, + "writerside": "Writerside", + "@writerside": {"description":"Writerside workspace kind label."}, + "xml": "XML", + "@xml": {"description":"XML format label."}, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "fileTypeImages": "Gambar", + "@fileTypeImages": {"description":"Native file picker type label for images."}, + "openMarkdownFile": "Buka File Markdown", + "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "markdownFileExtensions": ".md atau .markdown", + "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "openFolderOrWritersideProject": "Buka Folder atau Proyek Writerside", + "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "markdownFolderOrWritersideProject": "Folder Markdown atau proyek yang kompatibel dengan Writerside", + "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "noOpenFile": "Tidak ada file yang terbuka", + "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "shortcutDeleteTreeItemDescription": "Hapus item File yang dipilih, atau hapus topik yang dipilih dari daftar isi", + "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "shortcutGroupGeneral": "Umum", + "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "shortcutNewDocument": "Buat", + "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "shortcutNewDocumentDescription": "Buat file Markdown atau proyek Writerside", + "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "shortcutOpenDescription": "Buka file Markdown, folder, atau proyek Writerside", + "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "shortcutSaveDescription": "Simpan dokumen saat ini", + "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "shortcutSearchDescription": "Cari ruang kerja saat ini", + "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "shortcutKeyboardShortcutsDescription": "Tampilkan referensi pintasan keyboard ini", + "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "shortcutMarkdownAndHtmlDescription": "Buka referensi Markdown dan HTML", + "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "shortcutSettingsDescription": "Buka pengaturan BusyMark", + "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "shortcutNextTab": "Tab berikutnya", + "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "shortcutNextTabDescription": "Pindah ke tab terbuka berikutnya", + "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "shortcutPreviousTab": "Tab sebelumnya", + "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "shortcutPreviousTabDescription": "Pindah ke tab terbuka sebelumnya", + "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "shortcutCloseTab": "Tutup tab", + "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "shortcutCloseTabDescription": "Tutup tab aktif", + "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "shortcutCloseAllTabs": "Tutup semua tab", + "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "shortcutCloseAllTabsDescription": "Tutup semua tab yang terbuka", + "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "shortcutGroupTextEditing": "Pengeditan teks", + "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "shortcutSelectAllDescription": "Dalam mode Sumber, pilih semua teks; dalam mode Editor, tekan dua kali untuk memilih setiap blok", + "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "shortcutCutDescription": "Potong teks yang dipilih", + "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "shortcutCopyDescription": "Salin teks yang dipilih", + "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "shortcutPasteDescription": "Tempel dari papan klip", + "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "shortcutPastePlainTextDescription": "Tempel teks papan klip tanpa memformat", + "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "shortcutUndoDescription": "Urungkan pengeditan terakhir", + "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "shortcutRedoDescription": "Ulangi pengeditan terakhir yang belum selesai", + "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "shortcutInsertIndentation": "Masukkan lekukan", + "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "shortcutInsertIndentationDescription": "Sisipkan lekukan pada kursor", + "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "shortcutOutdentSource": "Kurangi inden sumber", + "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "shortcutOutdentSourceDescription": "Hapus satu tingkat lekukan dalam mode Sumber", + "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "shortcutEscape": "Tutup pencarian atau hapus pilihan blok", + "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "shortcutEscapeDescription": "Tutup pencarian ruang kerja atau hapus pilihan blok dalam mode Editor", + "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "shortcutGroupFormatting": "Pemformatan", + "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "shortcutBoldDescription": "Alihkan huruf tebal pada teks yang dipilih", + "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "shortcutItalicDescription": "Alihkan huruf miring pada teks yang dipilih", + "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "shortcutUnderlineDescription": "Alihkan garis bawah pada teks yang dipilih", + "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "shortcutLinkDescription": "Sisipkan atau edit tautan", + "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "shortcutInlineCodeDescription": "Alihkan kode sebaris pada teks yang dipilih", + "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "shortcutStrikethroughDescription": "Alihkan coretan pada teks yang dipilih", + "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "shortcutGroupBlocks": "Blok", + "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "shortcutParagraphDescription": "Atur blok saat ini ke paragraf", + "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "shortcutHeading1Description": "Atur blok saat ini sebagai judul 1", + "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "shortcutHeading2Description": "Atur blok saat ini sebagai judul 2", + "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "shortcutHeading3Description": "Atur blok saat ini sebagai judul 3", + "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "shortcutHeading4Description": "Atur blok saat ini sebagai judul 4", + "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "shortcutHeading5Description": "Atur blok saat ini sebagai judul 5", + "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "shortcutHeading6Description": "Atur blok saat ini sebagai judul 6", + "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "shortcutGroupLists": "Daftar", + "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "numberedList": "Daftar bernomor", + "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "shortcutNumberedListDescription": "Alihkan pemformatan daftar bernomor", + "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "bulletedList": "Daftar berpoin", + "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "shortcutBulletedListDescription": "Alihkan pemformatan daftar berpoin", + "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "checklist": "Daftar periksa", + "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "shortcutChecklistDescription": "Alihkan pemformatan daftar periksa", + "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "shortcutGroupSidebar": "Bilah samping", + "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "sidebarViewMenu": "Tampilan bilah sisi", + "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "createMarkdownFile": "Buat File Markdown", + "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "createMarkdownFileDescription": "Mulai dokumen Markdown lokal yang belum disimpan", + "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "createWritersideProject": "Buat Proyek Writerside", + "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "createWritersideProjectDescription": "Mulai proyek lokal yang kompatibel dengan Writerside", + "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "defaultProjectName": "Dokumentasi", + "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "defaultInstanceName": "Panduan Pengguna", + "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "defaultStartTopicTitle": "Memulai", + "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "projectName": "Nama proyek", + "@projectName": {"description":"Create project dialog field label."}, + "directoryName": "Nama direktori", + "@directoryName": {"description":"Create project dialog field label."}, + "instanceName": "Nama instance", + "@instanceName": {"description":"Create project dialog field label."}, + "instanceId": "ID instance", + "@instanceId": {"description":"Create project dialog field label."}, + "startTopicTitle": "Mulai judul topik", + "@startTopicTitle": {"description":"Create project dialog field label."}, + "location": "Lokasi", + "@location": {"description":"Create dialog location section label."}, + "projectNameRequired": "Nama proyek wajib diisi.", + "@projectNameRequired": {"description":"Validation message for missing project name."}, + "directoryNameRequired": "Nama direktori wajib diisi.", + "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "useSingleSafeDirectoryName": "Gunakan satu nama direktori aman.", + "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "useLowercaseIdentifier": "Gunakan pengenal huruf kecil dengan huruf, angka, garis bawah, atau tanda hubung.", + "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "startTopicTitleRequired": "Judul topik awal wajib diisi.", + "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "createWritersideProjectFailed": "Tidak dapat membuat proyek Writerside.", + "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "settingsTitle": "Pengaturan BusyMark", + "@settingsTitle": {"description":"Settings screen title."}, + "autoSave": "Simpan otomatis", + "@autoSave": {"description":"Editor setting label for saving files automatically."}, + "autoSaveDescription": "Simpan perubahan file secara otomatis setelah jeda singkat.", + "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "wordWrap": "Pindah baris otomatis", + "@wordWrap": {"description":"Word wrap setting label."}, + "editorFontSize": "Ukuran font editor", + "@editorFontSize": {"description":"Editor font size setting label."}, + "validateOnEdit": "Validasi saat mengedit", + "@validateOnEdit": {"description":"Validation setting label."}, + "clearRecentWorkspaces": "Hapus ruang kerja terbaru", + "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "editingButtonsPosition": "Posisi tombol pengeditan", + "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "editingButtonsPositionDescription": "Pilih di mana tombol pengeditan WYSIWYG mengambang muncul.", + "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "editingButtonsDirection": "Arah tombol pengeditan", + "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "editingButtonsDirectionDescription": "Pilih apakah tombol pengeditan WYSIWYG mengambang disusun secara horizontal atau vertikal.", + "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "horizontal": "Horizontal", + "@horizontal": {"description":"Editing button direction option."}, + "vertical": "Vertikal", + "@vertical": {"description":"Editing button direction option."}, + "privacy": "Privasi", + "@privacy": {"description":"Settings section title for privacy options."}, + "allowRemoteImages": "Muat gambar jarak jauh", + "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "allowRemoteImagesDescription": "Izinkan pratinjau Markdown dan gambar editor dimuat dari URL http dan https.", + "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "clearRemoteImagePermissions": "Hapus izin gambar jarak jauh", + "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, + "clearRemoteImagePermissionsDescription": "Lupakan ruang kerja yang diizinkan memuat gambar jarak jauh.", + "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "clearGitWorkspaceTrust": "Hapus ruang kerja Git yang tepercaya", + "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "clearGitWorkspaceTrustDescription": "Tanyakan sebelum mengaktifkan fitur Git untuk ruang kerja tepercaya sebelumnya.", + "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "settingsWindowSectionTitle": "Jendela", + "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "settingsReopenWorkspaceOnStartupTitle": "Buka kembali ruang kerja sebelumnya saat startup", + "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "settingsReopenWorkspaceOnStartupDescription": "Buka ruang kerja dan tab dari sesi sebelumnya saat BusyMark dimulai.", + "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "settingsConfirmCloseWithUnsavedChangesTitle": "Konfirmasikan sebelum menutup dengan perubahan yang belum disimpan", + "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "settingsConfirmCloseWithUnsavedChangesDescription": "Tanyakan sebelum menutup BusyMark jika ada perubahan yang belum disimpan pada dokumen.", + "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "closeUnsavedChangesTitle": "Perubahan yang belum disimpan", + "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "closeUnsavedChangesSingleMessage": "Dokumen ini memiliki perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?", + "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Simpan perubahan sebelum menutup BusyMark?} =1{Ada 1 dokumen dengan perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?} other{Ada {count} dokumen dengan perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?}}", + "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "closeUnsavedChangesCancel": "Batal", + "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "closeUnsavedChangesDiscard": "Membuang", + "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "closeUnsavedChangesSave": "Simpan", + "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "currentFile": "File saat ini", + "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "unsavedChanges": "Perubahan yang belum disimpan", + "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "unsavedChangesMessage": "Anda memiliki perubahan yang belum disimpan di {fileName}. Simpan sebelum melanjutkan?", + "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "unsavedChangesMultipleMessage": "{count, plural, =1{Ada 1 dokumen dengan perubahan yang belum disimpan. Simpan sebelum melanjutkan?} other{Ada {count} dokumen dengan perubahan yang belum disimpan. Simpan sebelum melanjutkan?}}", + "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "fileChangedOnDisk": "File diubah pada disk", + "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "fileChangedOnDiskMessage": "File ini berubah pada disk sejak Anda membukanya. Timpa itu?", + "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "untitledMarkdownFileName": "Tanpa judul.md", + "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "unorderedList": "Daftar tidak berurutan", + "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "orderedList": "Daftar bernomor", + "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "taskList": "Daftar tugas", + "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "toggleTaskChecked": "Alihkan status tugas", + "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "indentListItem": "Tambah inden item daftar", + "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "outdentListItem": "Kurangi inden item daftar", + "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "blockquote": "Kutipan blok", + "@blockquote": {"description":"Blockquote command label."}, + "codeBlock": "Blok kode", + "@codeBlock": {"description":"Code block command or preview label."}, + "codeBlockLanguage": "Bahasa blok kode", + "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "image": "Gambar", + "@image": {"description":"Image command and document kind label."}, + "video": "Video", + "openVideo": "Putar video", + "pauseVideo": "Jeda video", + "videoUnavailable": "Video tidak tersedia", + "videoPreview": "Pratinjau video", + "diagnosticWritersideVideoMissingSource": "Video tidak memiliki atribut src-nya.", + "diagnosticWritersideVideoUnsupportedSource": "Sumber video tidak didukung: {source}", + "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingFile": "File video tidak ada: {source}", + "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingPreview": "Gambar pratinjau video tidak ada: {preview}", + "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "inlineImage": "Gambar sebaris", + "@inlineImage": {"description":"Inline image command label."}, + "table": "Tabel", + "@table": {"description":"Table command label."}, + "htmlBlock": "Blok HTML", + "@htmlBlock": {"description":"HTML block command label."}, + "htmlContentDefault": "Konten HTML", + "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "shortcutHtmlBlockDescription": "Sisipkan atau edit blok HTML", + "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "renderedHtml": "HTML yang dirender", + "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "editHtml": "Edit HTML", + "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "htmlSource": "Sumber HTML", + "@htmlSource": {"description":"Text field label for raw HTML source."}, + "thematicBreak": "Pemisah tematik", + "@thematicBreak": {"description":"Thematic break command label."}, + "bold": "Tebal", + "@bold": {"description":"Bold command label."}, + "italic": "Miring", + "@italic": {"description":"Italic command label."}, + "underline": "Garis bawah", + "@underline": {"description":"Underline command label."}, + "strikethrough": "Dicoret", + "@strikethrough": {"description":"Strikethrough command label."}, + "inlineCode": "Kode sebaris", + "@inlineCode": {"description":"Inline code command label."}, + "link": "Link", + "@link": {"description":"Link command and preview label."}, + "hardLineBreak": "Pemisah baris keras", + "@hardLineBreak": {"description":"Hard line break command label."}, + "textStyle": "Gaya teks", + "@textStyle": {"description":"Text style menu tooltip."}, + "paragraph": "Paragraf", + "@paragraph": {"description":"Paragraph style label."}, + "heading1": "Judul 1", + "@heading1": {"description":"Heading 1 style label."}, + "heading2": "Judul 2", + "@heading2": {"description":"Heading 2 style label."}, + "heading3": "Judul 3", + "@heading3": {"description":"Heading 3 style label."}, + "heading4": "Judul 4", + "@heading4": {"description":"Heading 4 style label."}, + "heading5": "Judul 5", + "@heading5": {"description":"Heading 5 style label."}, + "heading6": "Judul 6", + "@heading6": {"description":"Heading 6 style label."}, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "deleteTable": "Hapus tabel", + "@deleteTable": {"description":"Tooltip for deleting a table."}, + "tableColumnNumber": "Kolom {columnNumber}", + "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "insertColumnLeft": "Sisipkan kolom ke kiri", + "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "insertColumnRight": "Sisipkan kolom ke kanan", + "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "deleteColumn": "Hapus kolom", + "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "tableAlignmentUnspecified": "Perataan: Tidak ditentukan", + "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "tableAlignmentLeft": "Perataan: Kiri", + "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "tableAlignmentCenter": "Perataan: Tengah", + "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "tableAlignmentRight": "Perataan: Kanan", + "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "tableRowNumber": "Baris {rowNumber}", + "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "insertRowAbove": "Sisipkan baris di atas", + "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "insertRowBelow": "Sisipkan baris di bawah", + "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "deleteRow": "Hapus baris", + "@deleteRow": {"description":"Menu item for deleting a table row."}, + "tableHeaderHint": "Header", + "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "tableCellHint": "Sel", + "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "language": "Bahasa", + "@language": {"description":"Code block language field label."}, + "hideEditingButtons": "Sembunyikan tombol pengeditan", + "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "showEditingButtons": "Tampilkan tombol pengeditan", + "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "altText": "Teks alternatif", + "@altText": {"description":"Image alt text field label."}, + "editorPlaceholderText": "teks", + "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "editorPlaceholderCode": "kode", + "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "editorPlaceholderAltText": "teks alternatif", + "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "describeTheImage": "Jelaskan gambarnya", + "@describeTheImage": {"description":"Image alt text hint."}, + "columns": "Kolom", + "@columns": {"description":"Table dialog columns field label."}, + "rows": "Baris", + "@rows": {"description":"Table dialog rows field label."}, + "tableHeaderNumber": "Header {columnNumber}", + "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "tableCellDefault": "Sel", + "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "noImageSource": "Tidak ada sumber gambar", + "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "remoteImageBlocked": "Gambar jarak jauh diblokir", + "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "remoteImageBlockedTooltip": "Pilih apakah BusyMark dapat memuat gambar jarak jauh.", + "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "remoteImagesBlockedTitle": "Gambar jarak jauh diblokir", + "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "remoteImagesBlockedMessage": "Dokumen ini merujuk pada gambar dari internet. Memuatnya dapat mengungkapkan informasi jaringan ke host gambar.", + "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "loadRemoteImagesForWorkspace": "Muat untuk ruang kerja ini", + "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "alwaysLoadRemoteImages": "Selalu muat gambar jarak jauh", + "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "hideSidebar": "Sembunyikan panel bilah sisi", + "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "showSidebar": "Tampilkan panel bilah sisi", + "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "showPreview": "Tampilkan pratinjau", + "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "hidePreview": "Sembunyikan pratinjau", + "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "workspaceKindUnsavedMarkdown": "File Markdown yang belum disimpan", + "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "workspaceKindSingleMarkdown": "File Markdown tunggal", + "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "workspaceKindMarkdownFolder": "Folder Markdown", + "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "workspaceKindWritersideModule": "Modul Writerside", + "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "problems": "Masalah", + "@problems": {"description":"Diagnostics dialog title."}, + "diagnosticCount": "{count, plural, =0{Tidak ada diagnostik} =1{1 diagnostik} other{{count} diagnostik}}", + "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "files": "File", + "@files": {"description":"Files sidebar tab label."}, + "toc": "Daftar isi", + "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "tocActions": "Tindakan TOC", + "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "markdownUnsaved": "Markdown - belum disimpan", + "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "workspaceDetail": "{kind} - {count, plural, =1{1 file} other{{count} file}}", + "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "noFiles": "Tidak ada file", + "@noFiles": {"description":"Empty state shown when there are no files."}, + "newFile": "File baru", + "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "noWritersideToc": "Tidak ada TOC Writerside", + "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "tocSection": "Bagian daftar isi", + "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "newTopic": "Topik baru", + "@newTopic": {"description":"Create new Writerside topic action label."}, + "newChildTopic": "Topik anak baru", + "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "newSiblingTopic": "Topik saudara baru", + "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "renameTopicFile": "Ganti nama file topik", + "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "topicPlacement": "Penempatan TOC", + "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "tocRoot": "Di akar TOC", + "@tocRoot": {"description":"TOC placement option for the root level."}, + "afterSelectedTopic": "Setelah topik dipilih", + "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "insideSelectedTopic": "Di dalam topik yang dipilih", + "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "pasteAfterTopic": "Tempel setelah", + "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "pasteAsChildTopic": "Tempel sebagai anak", + "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "removeFromToc": "Hapus dari TOC", + "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "confirmRemoveFromTocTitle": "Hapus dari TOC?", + "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "confirmRemoveFromTocMessage": "Hapus {name} dari daftar isi ini? File topik akan disimpan.", + "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteTopicTitle": "Hapus file topik?", + "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "confirmDeleteTopicMessage": "Hapus {name} dan hapus dari setiap daftar isi? Hal ini tidak dapat dibatalkan.", + "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "safeDeleteTopicFile": "Hapus file topik dengan aman…", + "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "removeTocElement": "Hapus elemen TOC", + "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "reviewUsages": "Tinjau penggunaan", + "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "deleteTopicFile": "Hapus file topik", + "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "removeAction": "Hapus", + "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "topicRemovalSummary": "Hapus “{topic}” dari instance yang dipilih. File topik akan disimpan.", + "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "safeDeleteTopicSummary": "Hapus “{topic}” dan perbarui referensinya dengan aman di seluruh proyek Writerside ini.", + "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "childTopicsPromoted": "{count, plural, =1{1 topik anak akan naik satu tingkat.} other{{count} topik anak akan naik satu tingkat.}}", + "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "topicIsStartPageRemovalWarning": "Topik ini digunakan sebagai halaman awal instance. Tinjau penggunaannya dan tetapkan halaman awal lain sebelum melanjutkan.", + "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "topicUsagesCount": "Penggunaan ({count})", + "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "noBreakingTopicUsages": "Tidak ditemukan referensi yang rusak.", + "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "topicUsagesFound": "BusyMark menemukan referensi berikut untuk topik ini.", + "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "topicUsageTocElements": "elemen TOC", + "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "topicUsageStartPages": "Halaman awal", + "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "topicUsageTopicLinks": "Tautan topik", + "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, + "topicUsageIncludes": "Termasuk", + "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "usageCount": "{count, plural, =1{1 penggunaan} other{{count} penggunaan}}", + "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "refactoringOptions": "Opsi refaktor", + "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "updateUsagesAutomatically": "Perbarui penggunaan secara otomatis", + "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, + "updateUsagesAutomaticallyDescription": "Hapus referensi dan include TOC, serta pertahankan teks tautan.", + "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "manualUsageUpdatesRequired": "Beberapa penggunaan memerlukan perubahan manual sebelum pemfaktoran ulang ini.", + "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "setRedirectTo": "Alihkan ke", + "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "noRedirectDescription": "Jangan mengalihkan halaman lama yang diterbitkan.", + "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "redirectTarget": "Target pengalihan", + "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "remainingUsagesBlockRemoval": "Tinjau dan perbarui sisa penggunaan sebelum melanjutkan, atau aktifkan pembaruan otomatis bila tersedia.", + "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "usagesOfTopic": "Penggunaan {topic}", + "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "noUsagesFound": "Tidak ada penggunaan yang ditemukan", + "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "outsideSelectedInstance": "di luar instance yang dipilih", + "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "doRefactor": "Lakukan refaktor", + "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "orphanTopicTitle": "File topik tidak lagi digunakan", + "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "keepTopicFile": "Simpan file topik", + "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "orphanTopicMessage": "“{topic}” tidak lagi digunakan di mana pun dalam proyek Writerside ini. Hapus file, atau simpan untuk digunakan di tempat lain.", + "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "defaultNewTopicTitle": "Topik baru", + "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "topicTitle": "Judul topik", + "@topicTitle": {"description":"Create topic dialog field label."}, + "fileName": "Nama file", + "@fileName": {"description":"Create topic dialog field label."}, + "topicTitleRequired": "Judul topik wajib diisi.", + "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "fileNameRequired": "Nama file wajib diisi.", + "@fileNameRequired": {"description":"Validation message for missing file name."}, + "rename": "Ganti nama", + "@rename": {"description":"Rename command label."}, + "confirmDeleteFileTitle": "Hapus file?", + "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "confirmDeleteFolderTitle": "Hapus folder?", + "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "confirmDeleteFileMessage": "Hapus {name}? Hal ini tidak dapat dibatalkan.", + "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteFolderMessage": "Hapus {name} dan semua file di dalamnya? Hal ini tidak dapat dibatalkan.", + "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "useSingleSafeFileName": "Gunakan satu nama file yang aman.", + "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "useExpectedExtension": "Gunakan ekstensi {extension} untuk format yang dipilih.", + "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "useIdentifierCharacters": "Gunakan huruf, angka, garis bawah, atau tanda hubung sebelum ekstensi.", + "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "topicIdAlreadyExists": "ID Topik sudah ada.", + "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "createWritersideTopicFailed": "Tidak dapat membuat topik Writerside.", + "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "noOutline": "Tidak ada garis besar", + "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "expandKind": "Perluas {kind}", + "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "collapseKind": "Ciutkan {kind}", + "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "foldKindSection": "bagian", + "@foldKindSection": {"description":"Fold kind label for a section."}, + "foldKindList": "daftar", + "@foldKindList": {"description":"Fold kind label for a list."}, + "foldKindQuote": "kutipan", + "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "foldKindTag": "tag", + "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "sourceSearchPreviousMatch": "Kecocokan sebelumnya", + "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "sourceSearchNextMatch": "Kecocokan berikutnya", + "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "sourceSearchCaseSensitive": "Peka huruf besar-kecil", + "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "sourceSearchWholeWord": "Seluruh kata", + "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "sourceSearchRegex": "Regex", + "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "sourceSearchReplacement": "Ganti dengan", + "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, + "sourceSearchReplaceCurrent": "Ganti arus", + "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "sourceSearchReplaceAndFindNext": "Ganti dan temukan selanjutnya", + "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "sourceSearchReplaceAll": "Ganti semua", + "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "workspaceReplace": "Ganti di Ruang Kerja", + "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "reviewReplacements": "Tinjau penggantinya", + "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "applyReplacements": "Terapkan penggantinya", + "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "skippedFiles": "File yang dilewati", + "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "workspaceReplaceDirtyBuffer": "Konten editor belum disimpan", + "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "workspaceReplaceDiskContent": "Konten disk yang disimpan", + "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "selectFileMatches": "Pilih semua kecocokan {count}", + "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "workspaceReplaceApplied": "Mengganti {matches} kecocokan dalam file {files}; dilewati {skipped}.", + "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Baris baru di akhir", + "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Tidak ada baris baru di akhir", + "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "normalizeLineEndings": "Normalisasi akhir baris", + "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "mixedLineEndingsSavePrompt": "Dokumen ini berisi akhiran baris campuran. Pilih format.", + "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "workspaceReplaceMixedLineEndings": "{fileName} menggunakan akhiran baris campuran. Pilih format yang akan digunakan sebelum mengganti.", + "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "workspaceReplaceIssueOversized": "Melewatkan file berukuran besar.", + "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "workspaceReplaceIssueUnreadable": "Melewatkan file yang tidak dapat dibaca.", + "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "workspaceReplaceIssueInvalidUtf8": "Melewatkan file yang tidak valid UTF-8.", + "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "workspaceReplaceIssueTruncated": "Pratinjau pengganti terpotong.", + "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "workspaceReplaceIssueFileChanged": "Melewatkan file yang berubah setelah pratinjau.", + "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "workspaceReplaceIssueBufferChanged": "Melewati buffer editor yang berubah setelah pratinjau.", + "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "workspaceReplaceIssueNormalizationRequired": "Pilih normalisasi LF atau CRLF sebelum mengganti.", + "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "workspaceReplaceIssuePartialConflict": "Rollback terhenti karena file berubah secara bersamaan. Beberapa penggantian mungkin tetap ada; konten yang dipindahkan dipertahankan di jalur di bawah ini.", + "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "workspaceReplaceIssueApplyFailed": "Penggantian yang ditinjau tidak dapat dilakukan; tidak ada file yang diubah.", + "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "externalChangesTitle": "Perubahan eksternal — {fileName}", + "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "externalFileDeleted": "File ini telah dihapus pada disk.", + "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "externalFileChanged": "File ini diubah pada disk saat Anda memiliki hasil edit yang belum disimpan.", + "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, + "recoveredDocumentReview": "Memulihkan konten yang belum disimpan untuk {fileName}. Periksa, lalu simpan, simpan sebagai, atau buang.", + "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "compare": "Bandingkan", + "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "reloadFromDisk": "Muat ulang dari disk", + "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "keepMine": "Pertahankan milik saya", + "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "saveAs": "Simpan sebagai", + "@saveAs": {"description":"Action that saves the current document to another path."}, + "sourceSearchInvalidRegex": "Ekspresi reguler tidak valid", + "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "sourceLargeFileFeaturesPaused": "File besar: penyorotan dan pelipatan dijeda", + "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "nothingToRead": "Tidak ada yang perlu dibaca", + "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, + "admonition": "Peringatan", + "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "quote": "Kutipan", + "@quote": {"description":"Label for a neutral Writerside quote block."}, + "note": "Catatan", + "@note": {"description":"Preview label for a note admonition."}, + "tip": "Tip", + "@tip": {"description":"Preview label for a tip admonition."}, + "warning": "Peringatan", + "@warning": {"description":"Preview label for a warning admonition."}, + "tabs": "tab", + "@tabs": {"description":"Preview label for a tabs block."}, + "tab": "tab", + "@tab": {"description":"Preview label for a tab block."}, + "procedure": "Prosedur", + "@procedure": {"description":"Preview label for a procedure block."}, + "step": "Langkah", + "@step": {"description":"Preview label for a procedure step."}, + "topic": "Topik", + "@topic": {"description":"Preview label for a topic element."}, + "chapter": "Bab", + "@chapter": {"description":"Preview label for a chapter element."}, + "couldNotOpenTarget": "Tidak dapat membuka {target}", + "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "linkTargetNotFound": "Target tautan tidak ditemukan: {targetPath}", + "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "cannotOpenFileTypeInEditor": "Tidak dapat membuka jenis file ini di editor", + "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "anchorNotFound": "Jangkar tidak ditemukan: {anchor}", + "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "noProblemsFound": "Tidak ada masalah yang ditemukan", + "@noProblemsFound": {"description":"Diagnostics empty state."}, + "noResults": "Tidak ada hasil", + "@noResults": {"description":"Search empty state."}, + "searchResultLine": "{relativePath} - Baris {lineNumber}", + "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "untitledResult": "Hasil tanpa judul", + "@untitledResult": {"description":"Fallback search result title."}, + "documentKindMarkdownFile": "File Markdown", + "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "documentKindWritersideMarkdownTopic": "Topik Markdown Writerside", + "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "documentKindWritersideXmlTopic": "Topik XML Writerside", + "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "documentKindWritersideTree": "Pohon Writerside", + "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "documentKindConfigurationFile": "File konfigurasi", + "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "documentKindVariablesFile": "File variabel", + "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "documentKindCategoriesFile": "File kategori", + "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "documentKindResourceFile": "File sumber daya", + "@documentKindResourceFile": {"description":"Search result document kind label."}, + "workspaceErrorOpenFailed": "Gagal dibuka: {error}", + "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideProjectFailed": "Tidak dapat membuat proyek Writerside: {error}", + "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideTopicFailed": "Tidak dapat membuat topik Writerside: {error}", + "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCouldNotOpenFile": "Tidak dapat membuka file: {error}", + "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorChooseWhereToSaveMarkdown": "Pilih tempat untuk menyimpan file Markdown ini.", + "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "workspaceErrorSaveBlockedFileChangedOnDisk": "Penyimpanan diblokir: file diubah pada disk.", + "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "workspaceErrorSaveFailed": "Gagal menyimpan: {error}", + "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorFileOperationFailed": "Operasi file gagal: {error}", + "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorValidationFailed": "Validasi gagal: {error}", + "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceRecoveryRestored": "{count, plural, =1{1 dokumen yang belum disimpan berhasil dipulihkan. Tinjau sebelum menyimpan atau membuangnya.} other{{count} dokumen yang belum disimpan berhasil dipulihkan. Tinjau masing-masing sebelum menyimpan atau membuangnya.}}", + "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "workspaceRecoveryDamaged": "{count, plural, =1{1 catatan pemulihan yang rusak tidak dapat dipulihkan. File pemulihan asli dipertahankan untuk diperiksa.} other{{count} catatan pemulihan yang rusak tidak dapat dipulihkan. Catatan pemulihan yang valid tetap tersedia.}}", + "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "errorPathDoesNotExist": "Jalur tidak ada: {path}", + "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetDirectoryNotEmpty": "Direktori target sudah ada dan tidak kosong: {path}", + "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetPathNotDirectory": "Jalur target sudah ada dan bukan merupakan direktori: {path}", + "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "errorGeneratedFileAlreadyExists": "File yang dihasilkan sudah ada: {path}", + "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "errorParentDirectoryRequired": "Direktori induk diperlukan.", + "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "errorParentDirectoryMissing": "Direktori induk tidak ada: {path}", + "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "errorDirectoryMissing": "Direktori tidak ada: {path}", + "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "errorPathAlreadyExists": "Jalur sudah ada: {path}", + "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "errorFileNameRequired": "Nama file wajib diisi.", + "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "errorFileNameUnsafe": "Nama file harus berupa satu segmen jalur aman.", + "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "errorFileOperationInvalidTarget": "Tidak dapat memindahkan folder ke dalam folder itu sendiri.", + "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "errorFileOperationOutsideRoot": "Operasi file harus tetap berada di dalam ruang kerja.", + "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "errorFileOperationRoot": "Akar ruang kerja tidak dapat diubah dari pohon file.", + "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "errorProjectNameRequired": "Nama proyek wajib diisi.", + "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "errorDirectoryNameRequired": "Nama direktori wajib diisi.", + "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "errorDirectoryNameUnsafe": "Nama direktori harus berupa satu segmen jalur aman.", + "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "errorInstanceIdInvalid": "ID Instance harus dimulai dengan huruf kecil dan hanya berisi huruf kecil, angka, garis bawah, dan tanda hubung.", + "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "errorTopicFileInvalid": "Nama file topik harus berupa nama file Markdown tanpa pemisah jalur.", + "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "errorTopicTitleRequired": "Judul topik wajib diisi.", + "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "errorWritersideModuleRootMissing": "Root modul Writerside tidak ada: {path}", + "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideModuleNotOpen": "Modul Writerside harus terbuka untuk membuat topik.", + "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "errorWritersideInstanceTreeMissing": "Modul Writerside tidak memiliki pohon instance.", + "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "errorWritersideTreeFileMissing": "File pohon Writerside tidak ada: {path}", + "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "errorTopicIdAlreadyExists": "ID topik \"{topicId}\" sudah ada di modul bantuan ini.", + "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "errorTopicFileAlreadyExists": "File topik sudah ada: {path}", + "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "errorReferenceTopicMissing": "Topik referensi tidak ada di pohon yang dipilih: {topic}", + "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideTocNodeMissing": "Entri TOC yang dipilih sudah tidak ada lagi.", + "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "errorWritersideTocInvalidMove": "Entri TOC tidak dapat dipindahkan ke dirinya sendiri atau ke salah satu turunannya.", + "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "errorWritersideStartTopicDelete": "Topik awal {topic} tidak dapat dihapus. Pilih halaman awal lain terlebih dahulu.", + "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideSafeDeleteRequired": "Gunakan Safe Delete untuk file topik Writerside.", + "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "errorWritersideTopicUsageScanFailed": "Tidak dapat menyelesaikan pemindaian penggunaan topik. Tidak ada file yang diubah.", + "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "errorWritersideTopicUsagesRemain": "Beberapa penggunaan topik masih memerlukan perhatian. Tinjaulah sebelum melanjutkan.", + "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "errorWritersideRedirectInvalid": "Target pengalihan yang dipilih tidak valid lagi. Pilih lagi.", + "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "errorWritersideRollbackFailed": "Penghapusan topik tidak dapat dibatalkan sepenuhnya. Tinjau jalur ini sebelum melanjutkan: {paths}", + "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "errorTopicsRootUnsafe": "Akar topik harus berupa direktori relatif yang aman.", + "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "errorTopicFileNameUnsafe": "Nama file topik harus berupa segmen jalur aman tunggal.", + "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "errorTopicFileExtensionMismatch": "Ekstensi file topik harus sesuai dengan format yang dipilih ({extension}).", + "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "errorTopicFileNameInvalid": "Nama file topik hanya boleh berisi huruf, angka, garis bawah, dan tanda hubung.", + "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "errorUnknown": "Kesalahan tidak diketahui: {code}", + "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "diagnosticWorkspaceFileStatFailed": "Tidak dapat membaca metadata file: {error}", + "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceScanSkipped": "Ruang kerja besar terdeteksi. Beberapa file dilewati agar aplikasi tetap responsif.", + "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "diagnosticWorkspaceScanInspectFailed": "Tidak dapat memeriksa entri ruang kerja: {error}", + "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceFileTooLarge": "File lebih besar dari batas penguraian otomatis beta.", + "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "diagnosticWorkspaceFileReadFailed": "Tidak dapat membaca file Markdown: {error}", + "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticMarkdownAttributeMalformed": "Blok atribut judul Writerside salah format.", + "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "diagnosticMarkdownHeadingDuplicateId": "ID judul duplikat \"{id}\".", + "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTopicH1ConvertedToChapter": "Judul H1 tingkat atas tambahan diperlakukan sebagai bab.", + "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, + "diagnosticWritersideMarkdownTopicMissingTitle": "Topik Markdown Writerside tidak memiliki judul H1 atau materi depan.", + "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "diagnosticWritersideXmlTopicMissingTitle": "Judul topik XML tidak ada.", + "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "diagnosticWritersideTopicFileMissingTitle": "Topik \"{fileName}\" tidak memiliki judul.", + "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, + "diagnosticMarkdownFrontMatterMalformed": "Materi depan tidak tertutup.", + "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "diagnosticMarkdownRawHtmlUnsafe": "Elemen HTML tidak aman.", + "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "diagnosticMarkdownLinkUnresolvedTarget": "Target tautan tidak ada: {targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "diagnosticMarkdownLinkUnresolvedAnchor": "Jangkar \"{anchor}\" tidak ada.", + "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "diagnosticMarkdownImageMissingAlt": "Teks alternatif pada gambar \"{destination}\" tidak ada.", + "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticMarkdownImageMissingFile": "Gambar tidak ada: {destination}", + "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticInvalidXml": "XML tidak valid: {message}", + "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "diagnosticWritersideConfigInvalidRoot": "Root writerside.cfg harus .", + "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "diagnosticWritersideConfigMissingSnippetsSrc": "deklarasi cuplikan tidak ada src.", + "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "Deklarasi instance-groups tidak memiliki src.", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "diagnosticWritersideConfigInvalidKeymapsMode": "Mode peta kunci tidak didukung: {mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceSrc": "Deklarasi instance tidak memiliki src.", + "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg tidak mendaftarkan sebuah instance.", + "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "diagnosticWritersideTreeInvalidRoot": "Akar .tree harus .", + "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "diagnosticWritersideTreeMissingId": "Profil instance tidak memiliki id.", + "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "diagnosticWritersideTreeIdMismatch": "Batang file pohon tidak cocok dengan id instance \"{id}\".", + "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingStartPage": "Instance non-pustaka tidak memiliki halaman awal.", + "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "diagnosticWritersideStartPageMissing": "Halaman awal \"{startPage}\" tidak ada.", + "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "diagnosticWritersideTreeDuplicateTopic": "Topik \"{topic}\" muncul lebih dari sekali dalam TOC instance ini.", + "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideVariableMalformedDeclaration": "Deklarasi variabel harus mempunyai nama dan nilai.", + "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "diagnosticWritersideVariableDuplicateName": "Variabel \"{name}\" dideklarasikan lebih dari satu kali.", + "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideCategoryMissingId": "Kategori tidak memiliki id.", + "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "diagnosticWritersideCategoryDuplicateId": "Kategori \"{id}\" dideklarasikan lebih dari satu kali.", + "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideCategoryDuplicateOrder": "Pesanan kategori \"{order}\" dideklarasikan lebih dari satu kali.", + "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "diagnosticWritersideTopicInvalidRoot": "Akar .topic harus .", + "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "diagnosticWritersideTopicMissingRootId": "Topik XML tidak memiliki id root.", + "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "diagnosticWritersideTopicRootIdMismatch": "Id akar topik XML \"{id}\" harus cocok dengan nama file \"{expectedId}\".", + "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateElementId": "ID elemen \"{elementId}\" muncul lebih dari sekali.", + "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "diagnosticWritersideTopicAnchorMissingHref": " tidak ada href.", + "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "diagnosticWritersideConfigMissing": "Mode Writerside memerlukan Writerside.cfg.", + "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "Direktori konfigurasi build yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "Direktori spesifikasi API yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingSnippetsDirectory": "Direktori cuplikan yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingVarsFile": "File variabel yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingCategoriesFile": "File kategori yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "File grup instance yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceTree": "Pohon instance terdaftar \"{source}\" tidak ada.", + "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideTopicReadFailed": "Tidak dapat membaca file topik: {error}", + "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "Direktori topik default tidak ada: {relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicsDirectoryMissing": "Direktori topik yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideImagesDirectoryMissing": "Direktori gambar yang dikonfigurasi tidak ada: {relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateId": "ID elemen \"{id}\" muncul lebih dari sekali.", + "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingTopic": "TOC mereferensikan topik \"{topic}\" yang hilang.", + "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideTreeInvalidHref": "Href eksternal \"{href}\" tidak valid.", + "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "diagnosticWritersideVariableUnresolved": "Variabel \"%{name}%\" tidak dideklarasikan.", + "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideTopicLinkUnresolved": "Tautan topik \"{destination}\" tidak terselesaikan.", + "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticWritersideAnchorUnresolved": "Jangkar \"{anchor}\" tidak ada di \"{targetName}\".", + "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, + "diagnosticWritersideIncludeMissingFrom": " tidak memiliki atribut from.", + "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, + "diagnosticWritersideIncludeSourceMissing": "Sumber include \"{from}\" tidak ada.", + "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "diagnosticWritersideIncludeElementMissing": "Elemen include \"{elementId}\" tidak ada di \"{from}\".", + "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, + "diagnosticWritersideCategoryUnresolved": "Lihat juga kategori \"{ref}\" tidak dideklarasikan.", + "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "diagnosticWritersideTopicAmbiguousReference": "Referensi topik \"{reference}\" bersifat ambigu.", + "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "diagnosticUnknown": "Diagnostik tidak diketahui: {code}", + "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, + "close": "Menutup", + "@close": {"description":"Close action label."}, + "git": "Git", + "@git": {"description":"Git sidebar tab label."}, + "gitDiff": "Git diff", + "@gitDiff": {"description":"Title for the Git diff viewer."}, + "gitShowDiff": "Tunjukkan perbedaan", + "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "gitDiffHunkRange": "lama {oldRange} → baru {newRange}", + "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "gitDiffNoLines": "tidak ada baris", + "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "gitUnavailableTitle": "Git tidak tersedia", + "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "gitUnavailableMessage": "{reason, select, other{Instal Git atau konfigurasikan BusyMark untuk menggunakan executable Git yang tersedia. {reason}}}", + "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "gitTrustRequiredTitle": "Percayai ruang kerja ini untuk Git?", + "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "gitTrustRequiredMessage": "Repositori Git dapat menjalankan program melalui hook, filter, dan konfigurasi lainnya. Percayai ruang kerja ini sebelum BusyMark membaca data repositori atau mengaktifkan tindakan Git.", + "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "gitTrustWorkspace": "Percayai ruang kerja", + "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "gitNotRepositoryTitle": "Bukan repositori Git", + "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "gitNotRepositoryMessage": "Ruang kerja ini tidak berada di dalam repositori Git.", + "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "gitInitializeRepository": "Inisialisasi repositori", + "@gitInitializeRepository": {"description":"Action label for git init."}, + "gitDetachedHead": "HEAD terpisah", + "@gitDetachedHead": {"description":"Detached HEAD label."}, + "gitDetachedHeadAt": "Terpisah di {commit}", + "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "gitNoUpstream": "Tidak ada upstream", + "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "gitAheadCount": "{count, plural, =1{1 commit yang belum di-push} other{{count} commit yang belum di-push}}", + "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "gitBehindCount": "{count, plural, =1{1 commit yang perlu di-pull} other{{count} commit yang perlu di-pull}}", + "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, + "gitClean": "Bersih", + "@gitClean": {"description":"Git clean state label."}, + "gitConflicts": "Konflik", + "@gitConflicts": {"description":"Git conflicts group label."}, + "gitChanges": "Perubahan", + "@gitChanges": {"description":"Git changes view label."}, + "gitStaged": "Di-stage", + "@gitStaged": {"description":"Git staged changes group label."}, + "gitUnstaged": "Belum di-stage", + "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "gitHistory": "Riwayat", + "@gitHistory": {"description":"Git history view label."}, + "gitBranches": "Cabang", + "@gitBranches": {"description":"Git branch menu label."}, + "gitActions": "Tindakan Git", + "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "gitPull": "Pull", + "@gitPull": {"description":"Git pull action label."}, + "gitFetch": "Fetch", + "@gitFetch": {"description":"Git fetch action label."}, + "gitPush": "Push", + "@gitPush": {"description":"Git push action label."}, + "gitCommit": "Commit", + "@gitCommit": {"description":"Git commit action label."}, + "gitSelectForCommit": "Stage file", + "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "gitRemoveFromCommit": "Batalkan stage file", + "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "gitDiscard": "Kembalikan", + "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "gitOpenFile": "Buka file", + "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "gitMarkResolved": "Tandai sebagai terselesaikan", + "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "gitUntracked": "Tidak terlacak", + "@gitUntracked": {"description":"Git untracked files group label."}, + "gitCommitMessage": "Pesan komit", + "@gitCommitMessage": {"description":"Commit message field label."}, + "gitCommitSelectedFiles": "File yang dipilih", + "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "gitCommitNoSelectedFiles": "Stage setidaknya satu file sebelum melakukan commit.", + "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "gitStagedFileCount": "{count, plural, =1{1 file yang di-stage} other{{count} file yang di-stage}}", + "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "gitOutsideWorkspace": "Di luar ruang kerja", + "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "gitCommitMessageRequired": "Masukkan pesan komit.", + "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "gitCreateBranch": "Buat cabang", + "@gitCreateBranch": {"description":"Git create branch action label."}, + "gitNewBranch": "Cabang baru", + "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "gitBranchName": "Nama cabang", + "@gitBranchName": {"description":"Branch name field label."}, + "gitSwitchBranch": "Beralih", + "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "gitNoChanges": "Tidak ada perubahan", + "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "gitNoHistory": "Tidak ada sejarah", + "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "gitNoBranches": "Tidak ada cabang", + "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "gitNoDiff": "Tidak ada perbedaan untuk ditampilkan", + "@gitNoDiff": {"description":"Git diff empty state."}, + "gitBinaryFile": "File biner. BusyMark tidak merender patch biner.", + "@gitBinaryFile": {"description":"Git diff binary file message."}, + "gitBinaryFileInfo": "File biner ({size} byte). BusyMark tidak merender patch biner.", + "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "gitUnsavedChangesBanner": "Perubahan editor yang belum disimpan tidak disertakan sampai disimpan.", + "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, + "gitConfirmDiscardTitle": "Buang perubahan Git?", + "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "gitConfirmDiscardTracked": "{count, plural, =1{Semua perubahan yang di-stage dan tidak di-stage pada file terlacak yang dipilih akan dipulihkan ke HEAD.} other{Semua perubahan yang di-stage dan tidak di-stage pada file terlacak yang dipilih akan dipulihkan ke HEAD.}}", + "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardUntracked": "{count, plural, =1{File tak terlacak yang dipilih akan dihapus.} other{File tak terlacak yang dipilih akan dihapus.}}", + "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardMixed": "{count, plural, =1{File yang dipilih akan dipulihkan atau dihapus berdasarkan status Git-nya.} other{File yang dipilih akan dipulihkan atau dihapus berdasarkan status Git-nya.}}", + "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmSwitchBranchTitle": "Beralih ke {branch}?", + "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "gitConfirmSwitchBranchMessage": "BusyMark akan memuat ulang ruang kerja dari disk setelah Git berpindah cabang.", + "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "gitConfirmPushSetUpstreamTitle": "Siapkan upstream cabang?", + "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "gitConfirmPushSetUpstreamMessage": "Cabang ini tidak memiliki upstream. BusyMark dapat melakukan push {branch} dan mengatur upstream-nya saat tepat satu remote dikonfigurasi.", + "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "gitProjectHistory": "Riwayat proyek", + "@gitProjectHistory": {"description":"Project history action label."}, + "gitFileHistory": "Riwayat file", + "@gitFileHistory": {"description":"Current file history action label."}, + "gitFileHistoryRequiresOpenFile": "Riwayat file memerlukan file Markdown yang terbuka.", + "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "gitLoadMore": "Muat lebih banyak", + "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "gitChangesInCommit": "Perubahan dalam commit ini", + "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, + "gitCompareWithCurrent": "Bandingkan dengan saat ini", + "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "gitRestoreVersion": "Pulihkan versi ini", + "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "gitConfirmRestoreTitle": "Pulihkan versi file ini?", + "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "gitConfirmRestoreMessage": "BusyMark akan mengganti file working tree saat ini dengan versi commit yang dipilih. File yang dipulihkan akan tetap belum di-stage.", + "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "gitCommitActions": "Tindakan commit", + "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "gitResetCurrentBranchToHere": "Setel ulang cabang saat ini ke sini…", + "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "gitResetCurrentBranchTitle": "Setel ulang {branch} ke {commit}?", + "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitResetCurrentBranchMessage": "Ini memindahkan cabang {branch} untuk melakukan {commit}. Pilih bagaimana Git memperbarui indeks dan pohon kerja.", + "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitReset": "Reset", + "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "gitResetModeSoft": "Soft", + "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "gitResetModeSoftDescription": "Pindahkan cabang saja. Pertahankan indeks dan working tree tanpa perubahan; perbedaan dari commit yang dipilih tetap di-stage.", + "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "gitResetModeMixed": "Mixed", + "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "gitResetModeMixedDescription": "Pindahkan cabang dan reset indeks. Pertahankan working tree tanpa perubahan; perbedaan tetap belum di-stage.", + "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "gitResetModeHard": "Hard", + "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "gitResetModeHardDescription": "Pindahkan cabang dan reset indeks serta working tree. Perubahan tracked akan dibuang; file untracked yang menghalangi dapat dihapus.", + "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "gitResetModeKeep": "Keep", + "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "gitResetModeKeepDescription": "Pindahkan cabang dan reset file tracked sambil mempertahankan perubahan lokal. Git membatalkan reset jika perubahan tersebut bertentangan.", + "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "fileActions": "Tindakan file", + "@fileActions": {"description":"Tooltip for a file action menu."}, + "actions": "Tindakan", + "@actions": {"description":"Tooltip for a general action menu."}, + "gitStatusAdded": "Ditambahkan", + "@gitStatusAdded": {"description":"Git file status label."}, + "gitStatusDeleted": "Dihapus", + "@gitStatusDeleted": {"description":"Git file status label."}, + "gitStatusRenamed": "Berganti nama", + "@gitStatusRenamed": {"description":"Git file status label."}, + "gitStatusCopied": "Disalin", + "@gitStatusCopied": {"description":"Git file status label."}, + "gitStatusUntracked": "Tidak terlacak", + "@gitStatusUntracked": {"description":"Git file status label."}, + "gitStatusConflicted": "Berkonflik", + "@gitStatusConflicted": {"description":"Git file status label."}, + "gitStatusIgnored": "Diabaikan", + "@gitStatusIgnored": {"description":"Git file status label."}, + "gitStatusTypeChanged": "Jenis diubah", + "@gitStatusTypeChanged": {"description":"Git file status label."}, + "gitStatusModified": "Dimodifikasi", + "@gitStatusModified": {"description":"Git file status label."}, + "gitStatusUnknown": "Tidak dikenal", + "@gitStatusUnknown": {"description":"Git file status label."}, + "gitErrorUnavailable": "Git tidak tersedia.", + "@gitErrorUnavailable": {"description":"Git error message."}, + "gitErrorNotRepository": "Ruang kerja ini bukan repositori Git.", + "@gitErrorNotRepository": {"description":"Git error message."}, + "gitErrorUnsafePath": "BusyMark memblokir jalur Git yang tidak aman.", + "@gitErrorUnsafePath": {"description":"Git error message."}, + "gitErrorInvalidBranchName": "Masukkan nama cabang yang valid.", + "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "gitErrorNoRemote": "Tidak ada remote Git yang dikonfigurasi.", + "@gitErrorNoRemote": {"description":"Git error message."}, + "gitErrorNoUpstream": "Tidak ada upstream cabang yang dikonfigurasi.", + "@gitErrorNoUpstream": {"description":"Git error message."}, + "gitErrorMultipleRemotes": "Beberapa remote dikonfigurasi. Pilih upstream di luar versi BusyMark ini.", + "@gitErrorMultipleRemotes": {"description":"Git error message."}, + "gitErrorDirtyWorkspace": "Simpan atau buang perubahan editor BusyMark sebelum berpindah cabang.", + "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "gitErrorResetDirtyWorkspace": "Simpan atau buang perubahan editor BusyMark sebelum mengatur ulang cabang saat ini.", + "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "gitErrorRestoreStagedFile": "Batalkan stage file ini sebelum memulihkan versi historis.", + "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "gitErrorResetDetachedHead": "Periksa cabang sebelum mengatur ulangnya.", + "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "gitErrorDiverged": "Cabang telah menyimpang. Selesaikan penggabungan atau rebase di luar versi BusyMark ini.", + "@gitErrorDiverged": {"description":"Git error message."}, + "gitErrorAuthorIdentity": "Git memerlukan nama penulis dan alamat email sebelum dapat melakukan commit.", + "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "gitAuthorIdentityTitle": "Identitas Penulis Git", + "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "gitAuthorIdentityMessage": "Masukkan identitas yang harus dicatat Git saat melakukan commit. BusyMark akan menyimpannya dan mencoba kembali commit ini.", + "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "gitAuthorName": "Nama", + "@gitAuthorName": {"description":"Git commit author name field label."}, + "gitAuthorEmail": "E-mail", + "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "gitAuthorIdentityGlobal": "Gunakan untuk semua repositori", + "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "gitAuthorIdentityGlobalDescription": "Saat dipasang sebagai Snap, ini berlaku untuk repositori yang dibuka di BusyMark.", + "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "gitSaveIdentityAndCommit": "Simpan dan commit", + "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "gitErrorAuthentication": "Otentikasi Git gagal.", + "@gitErrorAuthentication": {"description":"Git error message."}, + "gitErrorNetwork": "Operasi jaringan Git gagal.", + "@gitErrorNetwork": {"description":"Git error message."}, + "gitErrorConflict": "Git melaporkan konflik yang belum terselesaikan.", + "@gitErrorConflict": {"description":"Git error message."}, + "gitErrorCommandFailed": "Perintah Git gagal.", + "@gitErrorCommandFailed": {"description":"Git error message."}, + "markdownAndHtml": "Markdown dan HTML", + "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "markdownHtmlMarkdownBlocks": "Blok Markdown", + "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "markdownHtmlMarkdownBlocksDescription": "Struktur blok didukung dalam sumber Markdown dan pratinjau.", + "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "markdownHtmlInlineFormatting": "Markdown Sebaris", + "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "markdownHtmlInlineFormattingDescription": "Pemformatan yang bisa muncul di dalam paragraf, item daftar, dan sel tabel.", + "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "markdownHtmlRawHtmlBlocks": "Blok HTML Mentah", + "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "markdownHtmlRawHtmlBlocksDescription": "Tag HTML tingkat blok yang aman dirender melalui widget pratinjau BusyMark.", + "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "markdownHtmlRawHtmlInline": "Tag Sebaris HTML Mentah", + "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "markdownHtmlRawHtmlInlineDescription": "Tag HTML sebaris aman dirender tanpa menampilkan tag literal.", + "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "markdownHtmlSafety": "Aturan Keamanan", + "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "markdownHtmlSafetyDescription": "HTML mentah diurai dan dibersihkan sebelum rendering pratinjau.", + "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "markdownHtmlHeadings": "Judul", + "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "markdownHtmlParagraphs": "Paragraf", + "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "markdownHtmlLists": "Daftar", + "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "markdownHtmlHtmlContainers": "Kontainer", + "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "markdownHtmlHtmlTextBlocks": "Blok teks", + "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "markdownHtmlHtmlFigures": "Gambar dan gambar", + "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "markdownHtmlHtmlPreformatted": "Kode yang telah diformat sebelumnya", + "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "markdownHtmlHtmlDisclosure": "Blok pengungkapan", + "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "markdownHtmlHtmlDescriptionLists": "Daftar deskripsi", + "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "markdownHtmlHtmlFormattingTags": "Memformat tag", + "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "markdownHtmlHtmlInlineCodeTags": "Tag kode sebaris", + "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "markdownHtmlHtmlNeutralInlineTags": "Tag teks semantik", + "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "markdownHtmlSanitizedPreview": "Pratinjau yang sudah disanitasi", + "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "markdownHtmlSanitizedPreviewDescription": "HTML yang diizinkan diubah menjadi blok pratinjau BusyMark, tidak dirender di browser.", + "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "markdownHtmlSourcePreserved": "Sumber dipertahankan", + "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "markdownHtmlSourcePreservedDescription": "HTML mentah yang belum diedit disimpan kembali persis seperti teks sumber.", + "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "markdownHtmlMarkdownInsideHtml": "Markdown di dalam HTML", + "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "markdownHtmlMarkdownInsideHtmlDescription": "Penanda Markdown di dalam HTML mentah dirender sebagai teks literal.", + "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "markdownHtmlBlockedContent": "Konten aktif yang diblokir", + "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "markdownHtmlBlockedContentDescription": "Skrip, gaya, bingkai, formulir, SVG, MathML, peristiwa, dan atribut tidak aman diblokir.", + "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "markdownHtmlSafeUrls": "Hanya URL aman", + "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "markdownHtmlSafeUrlsDescription": "Tautan mengizinkan URL http, https, mailto, tel, relatif, dan fragmen; skema yang tidak aman diblokir.", + "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "exportAsPdf": "Ekspor sebagai PDF", + "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "pdfExportDescription": "Pilih tata letak halaman untuk PDF yang lengkap dan sempurna.", + "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "pdfRemoteImagesNote": "Gambar jarak jauh tidak diunduh selama ekspor. Gambar lokal disertakan bila tersedia.", + "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "pdfPageSize": "Ukuran halaman", + "@pdfPageSize": {"description":"PDF export page-size setting."}, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "pdfPageSizeLetter": "Letter", + "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "pdfOrientation": "Orientasi", + "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "pdfPortrait": "Potret", + "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "pdfLandscape": "Lanskap", + "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "pdfMargins": "Margin", + "@pdfMargins": {"description":"PDF export page-margin setting."}, + "pdfMarginNarrow": "Sempit", + "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "pdfMarginNormal": "Normal", + "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "pdfMarginWide": "Lebar", + "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "pdfIncludePageNumbers": "Sertakan nomor halaman", + "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "export": "Ekspor", + "@export": {"description":"Button label that starts an export."}, + "exportingPdf": "Mengekspor PDF…", + "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "fileTypePdf": "dokumen PDF", + "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "pdfExported": "{fileName} telah diekspor.", + "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, + "pdfExportedWithWarnings": "{fileName} diekspor dengan peringatan {count}.", + "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "pdfExportUnavailable": "Komponen ekspor PDF tidak ada. Instal ulang BusyMark dan coba lagi.", + "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "pdfExportTimedOut": "Ekspor PDF memakan waktu terlalu lama dan dihentikan.", + "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "pdfExportFailed": "BusyMark tidak dapat mengekspor dokumen ini sebagai PDF.", + "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "visualizationRendering": "Merender…", + "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "visualizationStale": "Menampilkan render terakhir yang valid", + "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "visualizationShowSource": "Tampilkan sumber", + "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "visualizationShowRender": "Tampilkan render", + "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, + "visualizationFitWidth": "Sesuai dengan lebarnya", + "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "visualizationSaveImage": "Simpan gambar", + "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "visualizationCopyImage": "Salin gambar", + "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "visualizationImageCopied": "Gambar disalin", + "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "visualizationOpenApiReference": "Buka Referensi API", + "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "visualizationValid": "Valid", + "@visualizationValid": {"description":"OpenAPI validation success state."}, + "visualizationInvalid": "Tidak valid", + "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "visualizationServers": "Server", + "@visualizationServers": {"description":"OpenAPI server count label."}, + "visualizationPaths": "Path", + "@visualizationPaths": {"description":"OpenAPI path count label."}, + "visualizationOperations": "Operasi", + "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "visualizationTags": "Tag", + "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "visualizationNoOperations": "Tidak ada operasi yang cocok", + "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "visualizationSearchOperations": "Cari operasi", + "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "visualizationRenderFailed": "Visualisasi ini tidak dapat dirender.", + "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "visualizationRetry": "Coba lagi", + "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "visualizationSaved": "{fileName} disimpan", + "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "shortcutExportPdfDescription": "Ekspor dokumen aktif atau modul Writerside sebagai PDF.", + "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "instances": "Instance", + "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "newInstance": "Instance baru", + "@newInstance": {"description":"Action that creates a Writerside instance."}, + "newTocLibrary": "Pustaka TOC baru", + "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "editInstance": "Edit instance", + "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "openTocFile": "Buka file TOC", + "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "createInstance": "Buat instance", + "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "createTocLibrary": "Buat pustaka TOC", + "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "instanceContent": "Isi", + "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "instanceContentSource": "Buat dari", + "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "emptyInstance": "Instance kosong", + "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "markdownFiles": "File Markdown lokal", + "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "chooseMarkdownFolder": "Pilih folder Markdown", + "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "errorWritersideInstanceImportSourceRequired": "Pilih folder yang berisi file Markdown.", + "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "instanceAppearance": "Tampilan", + "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "instanceColor": "Warna ikon", + "@instanceColor": {"description":"Writerside instance icon-color field."}, + "instanceVersion": "Versi", + "@instanceVersion": {"description":"Writerside instance version field."}, + "instanceVersionInherited": "Versi proyek adalah {version} jika kolom ini kosong.", + "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "instanceWebPath": "Jalur web", + "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "instanceStatus": "Status", + "@instanceStatus": {"description":"Writerside instance status field."}, + "instanceStatusRelease": "Rilis", + "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "instanceStatusEap": "Akses awal", + "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "instanceStatusDeprecated": "Tidak digunakan lagi", + "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "allowSearchEngineIndexing": "Izinkan pengindeksan mesin pencari", + "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "allowSearchEngineIndexingDescription": "Izinkan mesin pencari eksternal mengindeks keluaran ini.", + "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "offlineArtifact": "Artefak offline", + "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "offlineArtifactDescription": "Gabungkan sumber daya sehingga dokumentasi yang dibuat bersifat mandiri.", + "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "instanceOutputSettings": "Pengaturan keluaran", + "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "markdownImportSource": "Sumber Markdown", + "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "markdownImportFiles": "File Markdown", + "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "selectNone": "Jangan pilih apa pun", + "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "markdownFilesFound": "Ditemukan {count} file Markdown", + "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "noMarkdownFilesFound": "Tidak ada file Markdown yang ditemukan di direktori ini.", + "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "copyReferencedMedia": "Salin media yang dirujuk", + "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "copyReferencedMediaDescription": "Salin gambar dan video lokal yang direferensikan oleh file yang dipilih sambil mempertahankan jalur relatif.", + "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "instanceIdRenameWarningTitle": "Ganti nama ID instance?", + "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "instanceIdRenameWarning": "BusyMark akan mengganti nama file .tree dan memperbarui referensi proyek Writerside dari “{oldId}” menjadi “{newId}”. Skrip publikasi tidak diubah dan harus diperbarui secara terpisah.", + "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "renameAndUpdateReferences": "Ganti nama dan perbarui referensi", + "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "tocLibraryDescription": "Pustaka TOC menyimpan bagian yang dapat digunakan kembali dan tidak menghasilkan keluarannya sendiri.", + "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "defaultTocLibraryName": "TOC yang dibagikan", + "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "instanceColorAutomatic": "Otomatis", + "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "instanceColorBlue": "Biru", + "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "instanceColorGreen": "Hijau", + "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "instanceColorOrange": "Oranye", + "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "instanceColorPurple": "Ungu", + "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "instanceColorRed": "Merah", + "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "instanceColorTeal": "Teal", + "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "instanceColorYellow": "Kuning", + "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "errorWritersideInstanceNameRequired": "Masukkan nama instance.", + "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "errorWritersideInstanceIdExists": "Sebuah instance dengan ID “{id}” sudah ada.", + "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "errorWritersideInstanceTreeExists": "Pohon instance sudah ada: {path}", + "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSourceMissing": "Direktori sumber Markdown tidak ada: {path}", + "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSelectionRequired": "Pilih setidaknya satu file Markdown untuk diimpor.", + "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "errorWritersideInstanceImportFileInvalid": "Ini bukan file Markdown yang dapat dibaca di dalam sumber yang dipilih: {path}", + "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportTargetExists": "Impor akan menimpa file proyek yang sudah ada: {path}", + "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceFilesChanged": "File instance diubah pada disk. Tinjau dan coba lagi.", + "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "errorWritersideInstanceRollbackFailed": "BusyMark tidak dapat sepenuhnya mengembalikan perubahan instance. Tinjau file ini sebelum melanjutkan: {paths}", + "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "errorWritersideInstanceLibraryImport": "Pustaka TOC tidak dapat mengimpor topik Markdown.", + "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "errorWritersideInstanceWebPathInvalid": "Jalur web harus berupa satu baris.", + "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "errorWritersideInstanceConfigurationInvalid": "Konfigurasi instance Writerside tidak valid. Perbaiki diagnosisnya dan coba lagi.", + "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "errorWritersideInstanceTemporaryFile": "BusyMark tidak dapat melakukan perubahan instance dengan aman.", + "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, + "diagnosticWritersideTreeInvalidStatus": "Status instance “{status}” tidak diketahui. Gunakan rilis, eap, atau usang.", + "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "diagnosticWritersideDuplicateInstanceId": "ID instance “{id}” digunakan oleh lebih dari satu file pohon.", + "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml harus memiliki elemen root .", + "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, + "diagnosticWritersideBuildProfilesInvalidBoolean": "Nilai {name} “{value}” harus benar atau salah.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "diagnosticWritersideBuildProfileMissingInstance": "Elemen harus menentukan ID instance.", + "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, + "diagnosticWritersideTreeInvalidInclude": "Pohon harus menentukan atribut from dan id elemen.", + "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "diagnosticWritersideTreeMissingSnippetId": "Pohon harus menentukan id.", + "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "Referensi TOC lintas instance harus menentukan ref dan in.", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "diagnosticWritersideTreeConflictingTargets": "Elemen TOC tidak dapat menargetkan lebih dari satu topik, referensi, tautan, atau pengalihan.", + "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "diagnosticWritersideTreeDuplicateElementId": "ID elemen pohon “{id}” dideklarasikan lebih dari satu kali.", + "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideInstanceGroupsInvalidRoot": "File grup instance harus memiliki elemen root .", + "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "diagnosticWritersideInstanceGroupInvalid": "Grup instance harus menentukan id dan daftar instance yang tidak kosong.", + "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "diagnosticWritersideInstanceGroupDuplicateId": "ID grup instance “{id}” dideklarasikan lebih dari satu kali.", + "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideExternalTreeInclude": "TOC menyertakan “{source}#{id}” milik modul eksternal “{origin}” dan tidak dapat diperluas di ruang kerja ini.", + "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "diagnosticWritersideTreeIncludeElementMissing": "Elemen pohon “{id}” tidak ada di pohon terdaftar “{source}”.", + "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideTreeCircularInclude": "Include tree “{source}#{id}” membuat siklus.", + "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideUnknownInstanceGroup": "Kondisi instance mereferensikan grup yang tidak diketahui “@{group}”.", + "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "diagnosticWritersideReferenceInstanceMissing": "Referensi lintas-instance menargetkan instance yang tidak diketahui “{instance}”.", + "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "diagnosticWritersideReferenceTopicMissing": "Topik “{topic}” tidak ada dalam contoh referensi “{instance}”.", + "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "download": "Unduh", + "@download": {"description":"Button label that downloads a required component."}, + "exportWritersideAsPdf": "Ekspor Writerside sebagai PDF", + "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "writersidePdfContent": "Ekspor konten", + "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "writersidePdfPage": "Halaman", + "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "exportingWritersidePdf": "Mengekspor PDF Writerside…", + "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "ai": "AI", + "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "aiLocalOllama": "Ollama lokal", + "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "aiDisabled": "Dinonaktifkan", + "@aiDisabled": {"description":"AI provider option that disables AI features."}, + "aiLocalOnlyDescription": "Pengeditan AI bersifat eksplisit. BusyMark hanya mengirimkan konteks yang ditampilkan untuk penyedia yang dipilih dan tidak pernah menerapkan proposal tanpa peninjauan.", + "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "aiProvider": "Penyedia AI", + "@aiProvider": {"description":"Label for an AI provider selection."}, + "aiDefaultProvider": "Penyedia bawaan", + "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "aiConfigureProvider": "Konfigurasikan penyedia", + "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "aiChooseProvider": "Pilih penyedia AI", + "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "aiOllamaEndpoint": "Titik akhir Ollama", + "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "aiOllamaModel": "Model Ollama", + "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "aiTestConnection": "Uji koneksi", + "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "aiTestingConnection": "Menguji…", + "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "aiConnectionReady": "Terhubung. {count} model terinstal ditemukan.", + "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "aiNoModels": "Tidak ada model yang dipilih.", + "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "aiConnectionFailed": "BusyMark tidak dapat memverifikasi pembuatan teks AI.", + "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "aiConfigureFirst": "Aktifkan penyedia AI dan verifikasi model di Pengaturan → AI.", + "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "aiEditWithAi": "Edit dengan AI", + "aiRefineWithAi": "Sempurnakan dengan AI", + "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "aiInstruction": "Petunjuk", + "aiChangeTarget": "Apa yang mungkin berubah", + "aiSharedContext": "Konteks dibagikan dengan AI", + "aiTargetSelection": "Konten yang dipilih", + "aiTargetInsertAfterBlock": "Sisipkan setelah blok saat ini", + "aiTargetCurrentBlock": "Blok saat ini", + "aiTargetCurrentSection": "Bagian saat ini", + "aiTargetCompleteDocument": "Dokumen lengkap", + "aiContextNone": "Tidak ada konteks dokumen", + "aiContextSelection": "Konten yang dipilih", + "aiContextCurrentBlock": "Blok saat ini", + "aiContextCurrentSection": "Bagian saat ini", + "aiContextCompleteDocument": "Dokumen lengkap", + "aiGenerating": "Membuat proposal…", + "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "aiProposal": "Proposal AI", + "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "aiGenerateProposal": "Hasilkan proposal", + "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "aiContextDisclosure": "Penyedia yang dipilih akan menerima {count} karakter dari konteks yang ditampilkan.", + "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "aiOriginal": "Asli", + "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "aiSuggested": "Disarankan", + "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "aiApplyProposal": "Terapkan proposal", + "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "aiTokenUsage": "{input} token masukan · {output} token keluaran", + "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "aiStaleProposal": "Dokumen berubah saat proposal ini dibuat. Jalankan aksinya lagi.", + "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "gitAiStagedChangesChanged": "Perubahan yang di-stage berubah saat pesan commit ini dibuat. Jalankan aksinya lagi.", + "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "aiViewContext": "Lihat konteks yang dikirim", + "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "aiReviewExactContent": "Tinjau konten yang sebenarnya", + "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "aiContentToChange": "Konten untuk diubah", + "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "aiContentSentToAi": "Konten dikirim ke AI", + "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "aiApiKey": "Kunci API", + "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "aiApiKeyStoredHint": "Kunci disimpan di penyimpanan kredensial sistem", + "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "aiApiKeyEnterHint": "Masukkan kunci API penyedia", + "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "aiReplaceApiKey": "Ganti kunci API", + "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "aiSaveApiKey": "Simpan kunci API dengan aman", + "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "aiRemoveApiKey": "Hapus kunci API yang disimpan", + "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "aiCredentialSaved": "Kunci API disimpan di penyimpanan kredensial sistem.", + "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "aiCredentialRemoved": "Kunci API yang disimpan telah dihapus.", + "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "aiModelRouting": "Perutean model", + "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "aiAutomaticRouting": "Otomatis berdasarkan tugas", + "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "aiFixedModelRouting": "Gunakan model yang dipilih", + "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "aiPreferredModel": "Model pilihan", + "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "aiModel": "Model", + "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "aiUsageThisMonth": "{requests} permintaan · {input} token masukan · {output} token keluaran", + "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "aiCloudConsentTitle": "Kirim konten ke {provider}?", + "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentEnable": "Aktifkan {provider}", + "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentMessage": "Hanya konten yang ditampilkan di setiap dialog tinjauan AI yang dikirim. Permintaan tidak disimpan, proposal memerlukan peninjauan, dan kunci API disimpan di penyimpanan kredensial sistem Linux.", + "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "aiCloudConsentRequired": "Konfirmasikan pembagian data {provider} di Pengaturan → AI terlebih dahulu.", + "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "aiGenerationVerified": "Pembuatan teks diverifikasi dengan {model}. Tersedia {count} model yang kompatibel.", + "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "aiColdStartObserved": "Cold start model lokal terdeteksi.", + "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "aiNoCompatibleModels": "Tidak tersedia model pembuatan teks yang kompatibel.", + "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "aiEnableProvider": "Aktifkan penyedia AI terlebih dahulu.", + "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "aiDraftCommitMessage": "Draf pesan commit", + "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "aiDrafting": "Menyusun…", + "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "aiDraftWithAi": "Draf dengan AI", + "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "generateOrUpdateMarkdownToc": "Menghasilkan/memperbarui daftar isi", + "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "markdownTocTitle": "Daftar isi", + "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "markdownTocUpdated": "Daftar isi diperbarui dengan {count} entri.", + "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "markdownTocNoHeadings": "Tambahkan setidaknya satu judul bagian sebelum membuat daftar isi.", + "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "markdownTocMalformedMarkers": "Penanda daftar isi BusyMark hilang, terduplikasi, atau rusak.", + "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "diagnosticMarkdownHeadingSkippedLevel": "Tingkat judul {level} mengikuti tingkat {previousLevel}; tinjau bagian yang bersarang.", + "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "diagnosticMarkdownLinkEmptyText": "Teks tautan kosong; berikan nama yang dapat diakses yang menjelaskan tujuannya.", + "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "diagnosticMarkdownLinkReviewText": "Tinjau apakah teks tautan “{text}” menjelaskan tujuannya dalam konteks.", + "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "diagnosticMarkdownTableEmptyHeader": "Sel header tabel harus mengidentifikasi kolomnya; lengkapi setiap header kosong.", + "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "mathRenderFailed": "Ekspresi matematika tidak dapat dirender.", + "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "inlineMath": "Matematika sebaris", + "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."}, + "displayMath": "Matematika tampilan", + "@displayMath": {"description":"Editor action that inserts a display mathematical expression."} +} diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 15ae271a..98a97b17 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Pannello laterale", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb new file mode 100644 index 00000000..f2a0c766 --- /dev/null +++ b/lib/l10n/app_ja.arb @@ -0,0 +1,4616 @@ +{ + "@@locale": "ja", + "appTitle": "BusyMark", + "@appTitle": { + "description": "Application name." + }, + "appSubtitle": "Markdown ファイルおよび Writerside 互換のドキュメントプロジェクト用エディター。", + "@appSubtitle": { + "description": "Short application description." + }, + "aboutBusyMark": "BusyMark について", + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, + "aboutTagline": "Markdown と Writerside のエディター", + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, + "aboutLicenseLabel": "ライセンス", + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, + "aboutWebsite": "ウェブサイト", + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, + "aboutSourceCode": "ソースコード", + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, + "reportIssue": "問題を報告", + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, + "feedbackCategory": "カテゴリ", + "@feedbackCategory": { + "description": "Feedback category field label." + }, + "feedbackChooseCategory": "カテゴリを選択", + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, + "feedbackCategoryProblem": "問題またはバグ", + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, + "feedbackCategoryFeature": "機能リクエスト", + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, + "feedbackCategoryPrivacySecurity": "プライバシーまたはセキュリティに関する懸念", + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, + "feedbackCategoryUsability": "使いやすさに関する懸念", + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, + "feedbackCategoryOther": "その他", + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, + "feedbackSubject": "件名", + "@feedbackSubject": { + "description": "Feedback subject field label." + }, + "feedbackMessage": "詳細なメッセージ", + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "返信用メールアドレス(任意)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, + "feedbackIncludeTechnicalDetails": "技術的な詳細を含める", + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, + "feedbackTechnicalDetailsDisclosure": "有効にすると、Linux のオペレーティングシステムのバージョンと BusyMark のアプリケーション言語のみが追加されます。ログ、ファイル、アカウントデータ、その他の診断情報は添付されません。", + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, + "feedbackSubmit": "送信", + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, + "feedbackSubmitting": "送信中…", + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, + "feedbackCategoryRequired": "カテゴリを選択してください。", + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, + "feedbackSubjectLength": "件名は 3~120 文字で入力してください。", + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, + "feedbackMessageLength": "メッセージは 10~5,000 文字で入力してください。", + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, + "feedbackReplyEmailInvalid": "有効なメールアドレスを入力するか、この項目を空欄にしてください。", + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, + "feedbackConnectionFailure": "BusyMark は接続できませんでした。インターネット接続を確認して、もう一度お試しください。", + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, + "feedbackTimeoutFailure": "リクエストがタイムアウトしました。もう一度お試しください。", + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, + "feedbackRateLimitedFailure": "この接続から送信されたレポートが多すぎます。しばらく待ってから、もう一度お試しください。", + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, + "feedbackRejectedFailure": "サーバーがこのレポートを拒否しました。フォームの項目を確認して、もう一度お試しください。", + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, + "feedbackServerFailure": "サーバーがレポートを受け付けられませんでした。後でもう一度お試しください。", + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, + "feedbackSuccess": "フィードバックを送信しました。参照 ID:{id}", + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "advanced": "詳細設定", + "@advanced": { + "description": "Settings section title for advanced actions." + }, + "addToGit": "Git に追加", + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, + "appearance": "外観", + "@appearance": { + "description": "Settings section title for appearance options." + }, + "apply": "適用", + "@apply": { + "description": "Button label that applies a dialog change." + }, + "back": "戻る", + "@back": { + "description": "Tooltip for navigating back." + }, + "bottomLeft": "左下", + "@bottomLeft": { + "description": "Editing button position option." + }, + "bottomRight": "右下", + "@bottomRight": { + "description": "Editing button position option." + }, + "cancel": "キャンセル", + "@cancel": { + "description": "Cancel button label." + }, + "choose": "選択", + "@choose": { + "description": "Button label for choosing a file or path." + }, + "chooseLocation": "場所を選択", + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, + "copy": "コピー", + "@copy": { + "description": "Copy command label." + }, + "copyName": "名前をコピー", + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, + "copyFileName": "ファイル名をコピー", + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, + "copyPath": "パスをコピー", + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, + "create": "作成", + "@create": { + "description": "Create action label." + }, + "creating": "作成中…", + "@creating": { + "description": "Progress label while a project or topic is being created." + }, + "cut": "切り取り", + "@cut": { + "description": "Cut command label." + }, + "promoteSection": "セクションのレベルを上げる", + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, + "demoteSection": "セクションのレベルを下げる", + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, + "moveSectionUp": "セクションを上へ移動", + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, + "moveSectionDown": "セクションを下へ移動", + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, + "confirmDeleteSectionTitle": "このセクションを削除しますか?", + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, + "confirmDeleteSectionMessage": "「{name}」と、そのセクション内のすべての内容を削除しますか?この操作は取り消せません。", + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "darkTheme": "ダーク", + "@darkTheme": { + "description": "Dark theme option." + }, + "delete": "削除", + "@delete": { + "description": "Delete command label." + }, + "discard": "破棄", + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, + "editor": "エディター", + "@editor": { + "description": "Editor view label." + }, + "file": "ファイル", + "@file": { + "description": "Generic file kind label." + }, + "fileHistory": "ファイル履歴", + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, + "folder": "フォルダー", + "@folder": { + "description": "Folder kind label." + }, + "insert": "挿入", + "@insert": { + "description": "Insert button label." + }, + "keyboardShortcuts": "キーボードショートカット", + "commandPalette": "コマンドパレット", + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, + "commandPaletteHint": "コマンドを入力", + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, + "commandPaletteEmpty": "一致するコマンドはありません", + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, + "commandUnavailableInContext": "現在のエディターのコンテキストでは利用できません", + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, + "lightTheme": "ライト", + "@lightTheme": { + "description": "Light theme option." + }, + "mainMenu": "メインメニュー", + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, + "fullScreen": "全画面", + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, + "markdown": "Markdown", + "@markdown": { + "description": "Markdown format label." + }, + "open": "開く", + "@open": { + "description": "Open action label." + }, + "openInFiles": "ファイルで開く", + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, + "pathActions": "パスの操作", + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, + "outline": "アウトライン", + "@outline": { + "description": "Outline sidebar tab label." + }, + "overwrite": "上書き", + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, + "paste": "貼り付け", + "@paste": { + "description": "Paste command label." + }, + "pasteWithoutFormatting": "書式なしで貼り付け", + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, + "reading": "閲覧", + "@reading": { + "description": "Reading view label." + }, + "removeFromRecent": "最近使った項目から削除", + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, + "recent": "最近使った項目", + "@recent": { + "description": "Recent workspaces section title." + }, + "redo": "やり直し", + "@redo": { + "description": "Redo command label." + }, + "save": "保存", + "@save": { + "description": "Save action label." + }, + "search": "検索", + "@search": { + "description": "Search action label and field hint." + }, + "selectAll": "すべて選択", + "@selectAll": { + "description": "Select all command label." + }, + "settings": "設定", + "@settings": { + "description": "Settings action label." + }, + "source": "ソース", + "@source": { + "description": "Source view label." + }, + "split": "分割", + "@split": { + "description": "Split view label." + }, + "systemTheme": "システム", + "@systemTheme": { + "description": "System theme option." + }, + "theme": "テーマ", + "@theme": { + "description": "Theme setting label." + }, + "appLanguage": "言語", + "@appLanguage": { + "description": "Application language setting label." + }, + "systemLanguage": "システム", + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, + "languageEnglish": "English", + "@languageEnglish": { + "description": "Language selector option for English." + }, + "languageGerman": "Deutsch", + "@languageGerman": { + "description": "Language selector option for German." + }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, + "languageItalian": "Italiano", + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, + "languageFrench": "Français", + "@languageFrench": { + "description": "Language selector option for French." + }, + "languageRussian": "Русский", + "@languageRussian": { + "description": "Language selector option for Russian." + }, + "languageUkrainian": "Українська", + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, + "languagePolish": "Polski", + "@languagePolish": { + "description": "Language selector option for Polish." + }, + "languageSpanish": "Español", + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, + "languagePortuguese": "Português", + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, + "languageArabic": "العربية", + "@languageArabic": { + "description": "Language selector option for Arabic." + }, + "languagePersian": "فارسی", + "@languagePersian": { + "description": "Language selector option for Persian." + }, + "languageHindi": "हिन्दी", + "@languageHindi": { + "description": "Language selector option for Hindi." + }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, + "languageEstonian": "Eesti", + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, + "languageKorean": "한국어", + "@languageKorean": { + "description": "Language selector option for Korean." + }, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, + "toggleSidebar": "サイドバーパネル", + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, + "topLeft": "左上", + "@topLeft": { + "description": "Editing button position option." + }, + "topRight": "右上", + "@topRight": { + "description": "Editing button position option." + }, + "undo": "元に戻す", + "@undo": { + "description": "Undo command label." + }, + "validate": "検証", + "@validate": { + "description": "Validate action label." + }, + "validation": "検証", + "@validation": { + "description": "Settings section title for validation options." + }, + "viewMode": "表示モード", + "@viewMode": { + "description": "Native header bar view mode control label." + }, + "welcome": "ようこそ", + "@welcome": { + "description": "Welcome screen label and tooltip." + }, + "writerside": "Writerside", + "@writerside": { + "description": "Writerside workspace kind label." + }, + "xml": "XML", + "@xml": { + "description": "XML format label." + }, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, + "fileTypeImages": "画像", + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, + "openMarkdownFile": "Markdown ファイルを開く", + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, + "markdownFileExtensions": ".md または .markdown", + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, + "openFolderOrWritersideProject": "フォルダーまたは Writerside プロジェクトを開く", + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, + "markdownFolderOrWritersideProject": "Markdown フォルダーまたは Writerside 互換プロジェクト", + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, + "noOpenFile": "開いているファイルはありません", + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, + "shortcutDeleteTreeItemDescription": "選択したファイル項目を削除するか、選択したトピックを目次から削除", + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, + "shortcutGroupGeneral": "全般", + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, + "shortcutNewDocument": "作成", + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, + "shortcutNewDocumentDescription": "Markdown ファイルまたは Writerside プロジェクトを作成", + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, + "shortcutOpenDescription": "Markdown ファイル、フォルダー、または Writerside プロジェクトを開く", + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, + "shortcutSaveDescription": "現在のドキュメントを保存", + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, + "shortcutSearchDescription": "現在のワークスペースを検索", + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, + "shortcutKeyboardShortcutsDescription": "このキーボードショートカット一覧を表示", + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, + "shortcutMarkdownAndHtmlDescription": "Markdown と HTML のリファレンスを開く", + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, + "shortcutSettingsDescription": "BusyMark の設定を開く", + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, + "shortcutNextTab": "次のタブ", + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, + "shortcutNextTabDescription": "次に開いているタブへ移動", + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, + "shortcutPreviousTab": "前のタブ", + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, + "shortcutPreviousTabDescription": "前に開いているタブへ移動", + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, + "shortcutCloseTab": "タブを閉じる", + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, + "shortcutCloseTabDescription": "アクティブなタブを閉じる", + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, + "shortcutCloseAllTabs": "すべてのタブを閉じる", + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, + "shortcutCloseAllTabsDescription": "開いているすべてのタブを閉じる", + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, + "shortcutGroupTextEditing": "テキスト編集", + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, + "shortcutSelectAllDescription": "ソースモードではすべてのテキストを選択し、エディターモードでは 2 回押すとすべてのブロックを選択", + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, + "shortcutCutDescription": "選択したテキストを切り取り", + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, + "shortcutCopyDescription": "選択したテキストをコピー", + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, + "shortcutPasteDescription": "クリップボードから貼り付け", + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, + "shortcutPastePlainTextDescription": "書式なしのクリップボードテキストを貼り付け", + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, + "shortcutUndoDescription": "直前の編集を元に戻す", + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, + "shortcutRedoDescription": "直前に元に戻した編集をやり直す", + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, + "shortcutInsertIndentation": "インデントを挿入", + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, + "shortcutInsertIndentationDescription": "カーソル位置にインデントを挿入", + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, + "shortcutOutdentSource": "ソースのインデントを減らす", + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, + "shortcutOutdentSourceDescription": "ソースモードでインデントを 1 レベル減らす", + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, + "shortcutEscape": "検索を閉じるか、ブロックの選択を解除", + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, + "shortcutEscapeDescription": "ワークスペース検索を閉じるか、エディターモードでブロックの選択を解除", + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, + "shortcutGroupFormatting": "書式設定", + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, + "shortcutBoldDescription": "選択したテキストの太字を切り替え", + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, + "shortcutItalicDescription": "選択したテキストの斜体を切り替え", + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, + "shortcutUnderlineDescription": "選択したテキストの下線を切り替え", + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, + "shortcutLinkDescription": "リンクを挿入または編集", + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, + "shortcutInlineCodeDescription": "選択したテキストのインラインコードを切り替え", + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, + "shortcutStrikethroughDescription": "選択したテキストの取り消し線を切り替え", + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, + "shortcutGroupBlocks": "ブロック", + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, + "shortcutParagraphDescription": "現在のブロックを段落に設定", + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, + "shortcutHeading1Description": "現在のブロックを見出し 1 に設定", + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, + "shortcutHeading2Description": "現在のブロックを見出し 2 に設定", + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, + "shortcutHeading3Description": "現在のブロックを見出し 3 に設定", + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, + "shortcutHeading4Description": "現在のブロックを見出し 4 に設定", + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, + "shortcutHeading5Description": "現在のブロックを見出し 5 に設定", + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, + "shortcutHeading6Description": "現在のブロックを見出し 6 に設定", + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, + "shortcutGroupLists": "リスト", + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, + "numberedList": "番号付きリスト", + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, + "shortcutNumberedListDescription": "番号付きリストの書式を切り替え", + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, + "bulletedList": "箇条書きリスト", + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, + "shortcutBulletedListDescription": "箇条書きリストの書式を切り替え", + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, + "checklist": "チェックリスト", + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, + "shortcutChecklistDescription": "チェックリストの書式を切り替え", + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, + "shortcutGroupSidebar": "サイドバー", + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, + "sidebarViewMenu": "サイドバーの表示", + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, + "createMarkdownFile": "Markdown ファイルを作成", + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, + "createMarkdownFileDescription": "未保存のローカル Markdown ドキュメントの作成を開始", + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, + "createWritersideProject": "Writerside プロジェクトを作成", + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, + "createWritersideProjectDescription": "ローカルの Writerside 互換プロジェクトの作成を開始", + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, + "defaultProjectName": "ドキュメント", + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, + "defaultInstanceName": "ユーザーガイド", + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, + "defaultStartTopicTitle": "はじめに", + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, + "projectName": "プロジェクト名", + "@projectName": { + "description": "Create project dialog field label." + }, + "directoryName": "ディレクトリ名", + "@directoryName": { + "description": "Create project dialog field label." + }, + "instanceName": "インスタンス名", + "@instanceName": { + "description": "Create project dialog field label." + }, + "instanceId": "インスタンス ID", + "@instanceId": { + "description": "Create project dialog field label." + }, + "startTopicTitle": "開始トピックのタイトル", + "@startTopicTitle": { + "description": "Create project dialog field label." + }, + "location": "場所", + "@location": { + "description": "Create dialog location section label." + }, + "projectNameRequired": "プロジェクト名は必須です。", + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, + "directoryNameRequired": "ディレクトリ名は必須です。", + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, + "useSingleSafeDirectoryName": "安全な単一のディレクトリ名を使用してください。", + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, + "useLowercaseIdentifier": "小文字、数字、アンダースコア、ハイフンのみを含む小文字の識別子を使用してください。", + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, + "startTopicTitleRequired": "開始トピックのタイトルは必須です。", + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, + "createWritersideProjectFailed": "Writerside プロジェクトを作成できませんでした。", + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, + "settingsTitle": "BusyMark の設定", + "@settingsTitle": { + "description": "Settings screen title." + }, + "autoSave": "自動保存", + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, + "autoSaveDescription": "短時間操作がないときにファイルの変更を自動保存", + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, + "wordWrap": "折り返し", + "@wordWrap": { + "description": "Word wrap setting label." + }, + "editorFontSize": "エディターのフォントサイズ", + "@editorFontSize": { + "description": "Editor font size setting label." + }, + "validateOnEdit": "編集時に検証", + "@validateOnEdit": { + "description": "Validation setting label." + }, + "clearRecentWorkspaces": "最近使ったワークスペースを消去", + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, + "editingButtonsPosition": "編集ボタンの位置", + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, + "editingButtonsPositionDescription": "フローティング WYSIWYG 編集ボタンを表示する位置を選択", + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, + "editingButtonsDirection": "編集ボタンの方向", + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, + "editingButtonsDirectionDescription": "フローティング WYSIWYG 編集ボタンを水平または垂直に配置するか選択", + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, + "horizontal": "水平", + "@horizontal": { + "description": "Editing button direction option." + }, + "vertical": "垂直", + "@vertical": { + "description": "Editing button direction option." + }, + "privacy": "プライバシー", + "@privacy": { + "description": "Settings section title for privacy options." + }, + "allowRemoteImages": "リモート画像を読み込む", + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, + "allowRemoteImagesDescription": "Markdown のプレビューとエディターで http および https URL の画像を読み込めるようにする", + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, + "clearRemoteImagePermissions": "リモート画像の権限を消去", + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, + "clearRemoteImagePermissionsDescription": "リモート画像の読み込みを許可したワークスペースの権限を忘れる", + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, + "clearGitWorkspaceTrust": "信頼済み Git ワークスペースを消去", + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, + "clearGitWorkspaceTrustDescription": "以前信頼したワークスペースで Git 機能を有効にする前に確認する", + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, + "settingsWindowSectionTitle": "ウィンドウ", + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, + "settingsReopenWorkspaceOnStartupTitle": "起動時に前回のワークスペースを再び開く", + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, + "settingsReopenWorkspaceOnStartupDescription": "BusyMark の起動時に前回のセッションのワークスペースとタブを開く", + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, + "settingsConfirmCloseWithUnsavedChangesTitle": "未保存の変更がある場合は閉じる前に確認", + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, + "settingsConfirmCloseWithUnsavedChangesDescription": "ドキュメントに未保存の変更がある場合、BusyMark を閉じる前に確認する", + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, + "closeUnsavedChangesTitle": "未保存の変更", + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, + "closeUnsavedChangesSingleMessage": "このドキュメントには未保存の変更があります。BusyMark を閉じる前に変更を保存しますか?", + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark を閉じる前に変更を保存しますか?} =1{未保存の変更があるドキュメントが 1 件あります。BusyMark を閉じる前に変更を保存しますか?} other{未保存の変更があるドキュメントが {count} 件あります。BusyMark を閉じる前に変更を保存しますか?}}", + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "closeUnsavedChangesCancel": "キャンセル", + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesDiscard": "破棄", + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, + "closeUnsavedChangesSave": "保存", + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, + "currentFile": "現在のファイル", + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, + "unsavedChanges": "未保存の変更", + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, + "unsavedChangesMessage": "{fileName} に未保存の変更があります。続行する前に保存しますか?", + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "unsavedChangesMultipleMessage": "{count, plural, =1{未保存の変更があるドキュメントが 1 件あります。続行する前に保存しますか?} other{未保存の変更があるドキュメントが {count} 件あります。続行する前に保存しますか?}}", + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "fileChangedOnDisk": "ディスク上でファイルが変更されました", + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, + "fileChangedOnDiskMessage": "このファイルは開いた後にディスク上で変更されています。上書きしますか?", + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, + "untitledMarkdownFileName": "無題.md", + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, + "unorderedList": "箇条書きリスト", + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, + "orderedList": "番号付きリスト", + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, + "taskList": "タスクリスト", + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, + "toggleTaskChecked": "タスクの完了状態を切り替え", + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, + "indentListItem": "リスト項目をインデント", + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, + "outdentListItem": "リスト項目のインデントを減らす", + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, + "blockquote": "引用ブロック", + "@blockquote": { + "description": "Blockquote command label." + }, + "codeBlock": "コードブロック", + "@codeBlock": { + "description": "Code block command or preview label." + }, + "codeBlockLanguage": "コードブロックの言語", + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, + "image": "画像", + "video": "動画", + "openVideo": "動画を再生", + "pauseVideo": "動画を一時停止", + "videoUnavailable": "動画を利用できません", + "videoPreview": "動画のプレビュー", + "diagnosticWritersideVideoMissingSource": "動画に src 属性がありません。", + "diagnosticWritersideVideoUnsupportedSource": "サポートされていない動画ソース:{source}", + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideVideoMissingFile": "動画ファイルが存在しません:{source}", + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideVideoMissingPreview": "動画のプレビュー画像が存在しません:{preview}", + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, + "@image": { + "description": "Image command and document kind label." + }, + "inlineImage": "インライン画像", + "@inlineImage": { + "description": "Inline image command label." + }, + "table": "表", + "@table": { + "description": "Table command label." + }, + "htmlBlock": "HTML ブロック", + "@htmlBlock": { + "description": "HTML block command label." + }, + "htmlContentDefault": "HTML コンテンツ", + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, + "shortcutHtmlBlockDescription": "HTML ブロックを挿入または編集", + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, + "renderedHtml": "レンダリングされた HTML", + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, + "editHtml": "HTML を編集", + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, + "htmlSource": "HTML ソース", + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, + "thematicBreak": "水平線", + "@thematicBreak": { + "description": "Thematic break command label." + }, + "bold": "太字", + "@bold": { + "description": "Bold command label." + }, + "italic": "斜体", + "@italic": { + "description": "Italic command label." + }, + "underline": "下線", + "@underline": { + "description": "Underline command label." + }, + "strikethrough": "取り消し線", + "@strikethrough": { + "description": "Strikethrough command label." + }, + "inlineCode": "インラインコード", + "@inlineCode": { + "description": "Inline code command label." + }, + "link": "リンク", + "@link": { + "description": "Link command and preview label." + }, + "hardLineBreak": "強制改行", + "@hardLineBreak": { + "description": "Hard line break command label." + }, + "textStyle": "テキストスタイル", + "@textStyle": { + "description": "Text style menu tooltip." + }, + "paragraph": "段落", + "@paragraph": { + "description": "Paragraph style label." + }, + "heading1": "見出し 1", + "@heading1": { + "description": "Heading 1 style label." + }, + "heading2": "見出し 2", + "@heading2": { + "description": "Heading 2 style label." + }, + "heading3": "見出し 3", + "@heading3": { + "description": "Heading 3 style label." + }, + "heading4": "見出し 4", + "@heading4": { + "description": "Heading 4 style label." + }, + "heading5": "見出し 5", + "@heading5": { + "description": "Heading 5 style label." + }, + "heading6": "見出し 6", + "@heading6": { + "description": "Heading 6 style label." + }, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "deleteTable": "表を削除", + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, + "tableColumnNumber": "列 {columnNumber}", + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "insertColumnLeft": "左に列を挿入", + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, + "insertColumnRight": "右に列を挿入", + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, + "deleteColumn": "列を削除", + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, + "tableAlignmentUnspecified": "配置:未指定", + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, + "tableAlignmentLeft": "配置:左", + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, + "tableAlignmentCenter": "配置:中央", + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, + "tableAlignmentRight": "配置:右", + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, + "tableRowNumber": "行 {rowNumber}", + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, + "insertRowAbove": "上に行を挿入", + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, + "insertRowBelow": "下に行を挿入", + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, + "deleteRow": "行を削除", + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, + "tableHeaderHint": "ヘッダー", + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, + "tableCellHint": "セル", + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, + "language": "言語", + "@language": { + "description": "Code block language field label." + }, + "hideEditingButtons": "編集ボタンを非表示", + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, + "showEditingButtons": "編集ボタンを表示", + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, + "altText": "代替テキスト", + "@altText": { + "description": "Image alt text field label." + }, + "editorPlaceholderText": "テキスト", + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, + "editorPlaceholderCode": "コード", + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, + "editorPlaceholderAltText": "代替テキスト", + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, + "describeTheImage": "画像を説明", + "@describeTheImage": { + "description": "Image alt text hint." + }, + "columns": "列", + "@columns": { + "description": "Table dialog columns field label." + }, + "rows": "行", + "@rows": { + "description": "Table dialog rows field label." + }, + "tableHeaderNumber": "ヘッダー {columnNumber}", + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "tableCellDefault": "セル", + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, + "noImageSource": "画像ソースがありません", + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, + "remoteImageBlocked": "リモート画像がブロックされています", + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, + "remoteImageBlockedTooltip": "BusyMark にリモート画像の読み込みを許可するか選択", + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, + "remoteImagesBlockedTitle": "リモート画像がブロックされています", + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, + "remoteImagesBlockedMessage": "このドキュメントはインターネット上の画像を参照しています。読み込むと、画像ホストにネットワーク情報が公開される可能性があります。", + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, + "loadRemoteImagesForWorkspace": "このワークスペースで読み込む", + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, + "alwaysLoadRemoteImages": "常にリモート画像を読み込む", + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, + "hideSidebar": "サイドバーパネルを非表示", + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, + "showSidebar": "サイドバーパネルを表示", + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, + "showPreview": "プレビューを表示", + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, + "hidePreview": "プレビューを非表示", + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, + "workspaceKindUnsavedMarkdown": "未保存の Markdown ファイル", + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, + "workspaceKindSingleMarkdown": "単一の Markdown ファイル", + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, + "workspaceKindMarkdownFolder": "Markdown フォルダー", + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, + "workspaceKindWritersideModule": "Writerside モジュール", + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, + "problems": "問題", + "@problems": { + "description": "Diagnostics dialog title." + }, + "diagnosticCount": "{count, plural, =0{診断情報はありません} =1{診断情報 1 件} other{診断情報 {count} 件}}", + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "files": "ファイル", + "@files": { + "description": "Files sidebar tab label." + }, + "toc": "目次", + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, + "tocActions": "目次の操作", + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, + "markdownUnsaved": "Markdown - 未保存", + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, + "workspaceDetail": "{kind} - {count, plural, =1{ファイル 1 件} other{ファイル {count} 件}}", + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "noFiles": "ファイルはありません", + "@noFiles": { + "description": "Empty state shown when there are no files." + }, + "newFile": "新しいファイル", + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, + "noWritersideToc": "Writerside の目次はありません", + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, + "tocSection": "目次セクション", + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, + "newTopic": "新しいトピック", + "@newTopic": { + "description": "Create new Writerside topic action label." + }, + "newChildTopic": "新しい子トピック", + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, + "newSiblingTopic": "新しい兄弟トピック", + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, + "renameTopicFile": "トピックファイルの名前を変更", + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, + "topicPlacement": "目次内の位置", + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, + "tocRoot": "目次のルート", + "@tocRoot": { + "description": "TOC placement option for the root level." + }, + "afterSelectedTopic": "選択したトピックの後", + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, + "insideSelectedTopic": "選択したトピック内", + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, + "pasteAfterTopic": "後に貼り付け", + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, + "pasteAsChildTopic": "子として貼り付け", + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, + "removeFromToc": "目次から削除", + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, + "confirmRemoveFromTocTitle": "目次から削除しますか?", + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, + "confirmRemoveFromTocMessage": "{name} をこの目次から削除しますか?トピックファイルは保持されます。", + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteTopicTitle": "トピックファイルを削除しますか?", + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, + "confirmDeleteTopicMessage": "{name} を削除し、すべての目次から削除しますか?この操作は取り消せません。", + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "safeDeleteTopicFile": "トピックファイルを安全に削除…", + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, + "removeTocElement": "目次要素を削除", + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, + "reviewUsages": "使用箇所を確認", + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, + "deleteTopicFile": "トピックファイルを削除", + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, + "removeAction": "削除", + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, + "topicRemovalSummary": "選択したインスタンスから「{topic}」を削除します。トピックファイルは保持されます。", + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "safeDeleteTopicSummary": "「{topic}」を削除し、この Writerside プロジェクト全体の参照を安全に更新します。", + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "childTopicsPromoted": "{count, plural, =1{子トピック 1 件を 1 レベル上へ移動します。} other{子トピック {count} 件を 1 レベル上へ移動します。}}", + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "topicIsStartPageRemovalWarning": "このトピックはインスタンスの開始ページとして使用されています。使用箇所を確認し、続行する前に別の開始ページを割り当ててください。", + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, + "topicUsagesCount": "使用箇所({count})", + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noBreakingTopicUsages": "リンク切れになる参照は見つかりませんでした。", + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, + "topicUsagesFound": "BusyMark はこのトピックへの次の参照を見つけました。", + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, + "topicUsageTocElements": "目次要素", + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, + "topicUsageStartPages": "開始ページ", + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, + "topicUsageTopicLinks": "トピックリンク", + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, + "topicUsageIncludes": "インクルード", + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, + "usageCount": "{count, plural, =1{使用箇所 1 件} other{使用箇所 {count} 件}}", + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "refactoringOptions": "リファクタリングのオプション", + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, + "updateUsagesAutomatically": "使用箇所を自動的に更新", + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, + "updateUsagesAutomaticallyDescription": "目次の参照とインクルードを削除し、リンクテキストを保持", + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, + "manualUsageUpdatesRequired": "このリファクタリングの前に手動で変更が必要な使用箇所があります。", + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, + "setRedirectTo": "リダイレクト先を設定", + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, + "noRedirectDescription": "以前公開されたページをリダイレクトしない", + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, + "redirectTarget": "リダイレクト先", + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, + "remainingUsagesBlockRemoval": "続行する前に残りの使用箇所を確認して更新するか、利用可能な場合は自動更新を有効にしてください。", + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, + "usagesOfTopic": "{topic} の使用箇所", + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "noUsagesFound": "使用箇所は見つかりませんでした", + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, + "outsideSelectedInstance": "選択したインスタンスの外部", + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, + "doRefactor": "リファクタリングを実行", + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, + "orphanTopicTitle": "トピックファイルは使用されていません", + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, + "keepTopicFile": "トピックファイルを保持", + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, + "orphanTopicMessage": "「{topic}」はこの Writerside プロジェクト内で使用されていません。ファイルを削除するか、別のインスタンスで使用するために保持してください。", + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "defaultNewTopicTitle": "新しいトピック", + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, + "topicTitle": "トピックのタイトル", + "@topicTitle": { + "description": "Create topic dialog field label." + }, + "fileName": "ファイル名", + "@fileName": { + "description": "Create topic dialog field label." + }, + "topicTitleRequired": "トピックのタイトルは必須です。", + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, + "fileNameRequired": "ファイル名は必須です。", + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, + "rename": "名前を変更", + "@rename": { + "description": "Rename command label." + }, + "confirmDeleteFileTitle": "ファイルを削除しますか?", + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, + "confirmDeleteFolderTitle": "フォルダーを削除しますか?", + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, + "confirmDeleteFileMessage": "{name} を削除しますか?この操作は取り消せません。", + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteFolderMessage": "{name} と、その中のすべてのファイルを削除しますか?この操作は取り消せません。", + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "useSingleSafeFileName": "安全な単一のファイル名を使用してください。", + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, + "useExpectedExtension": "選択した形式の拡張子 {extension} を使用してください。", + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "useIdentifierCharacters": "拡張子の前には、文字、数字、アンダースコア、ハイフンのみを使用してください。", + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, + "topicIdAlreadyExists": "トピック ID はすでに存在します。", + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, + "createWritersideTopicFailed": "Writerside トピックを作成できませんでした。", + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, + "noOutline": "アウトラインはありません", + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, + "expandKind": "{kind} を展開", + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "collapseKind": "{kind} を折りたたむ", + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "foldKindSection": "セクション", + "@foldKindSection": { + "description": "Fold kind label for a section." + }, + "foldKindList": "リスト", + "@foldKindList": { + "description": "Fold kind label for a list." + }, + "foldKindQuote": "引用", + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, + "foldKindTag": "タグ", + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, + "sourceSearchPreviousMatch": "前の一致", + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, + "sourceSearchNextMatch": "次の一致", + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, + "sourceSearchCaseSensitive": "大文字と小文字を区別", + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, + "sourceSearchWholeWord": "単語単位", + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, + "sourceSearchRegex": "正規表現", + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, + "sourceSearchReplacement": "置換後", + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "現在の一致を置換", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, + "sourceSearchReplaceAndFindNext": "置換して次を検索", + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, + "sourceSearchReplaceAll": "すべて置換", + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, + "workspaceReplace": "ワークスペースで置換", + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, + "reviewReplacements": "置換内容を確認", + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, + "applyReplacements": "置換を適用", + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, + "skippedFiles": "スキップしたファイル", + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, + "workspaceReplaceDirtyBuffer": "未保存のエディター内容", + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, + "workspaceReplaceDiskContent": "ディスク上の保存済み内容", + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, + "selectFileMatches": "{count} 件の一致をすべて選択", + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceReplaceApplied": "{files} 個のファイルで {matches} 件の一致を置換しました。{skipped} 件をスキップしました。", + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · 末尾に改行あり", + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · 末尾に改行なし", + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, + "normalizeLineEndings": "行末を正規化", + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, + "mixedLineEndingsSavePrompt": "このドキュメントには混在した行末があります。形式を選択してください。", + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, + "workspaceReplaceMixedLineEndings": "{fileName} には混在した行末があります。置換前に使用する形式を選択してください。", + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "workspaceReplaceIssueOversized": "サイズが大きすぎるファイルをスキップしました。", + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, + "workspaceReplaceIssueUnreadable": "読み取れないファイルをスキップしました。", + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, + "workspaceReplaceIssueInvalidUtf8": "有効な UTF-8 ではないファイルをスキップしました。", + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, + "workspaceReplaceIssueTruncated": "置換プレビューは途中で切り詰められました。", + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, + "workspaceReplaceIssueFileChanged": "プレビュー後に変更されたファイルをスキップしました。", + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, + "workspaceReplaceIssueBufferChanged": "プレビュー後に変更されたエディターバッファーをスキップしました。", + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, + "workspaceReplaceIssueNormalizationRequired": "置換前に LF または CRLF の正規化を選択してください。", + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, + "workspaceReplaceIssuePartialConflict": "ファイルが同時に変更されたため、ロールバックを停止しました。一部の置換が残っている可能性があります。置き換えられた内容は下記のパスに保存されています。", + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, + "workspaceReplaceIssueApplyFailed": "確認済みの置換をコミットできませんでした。ファイルは変更されていません。", + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, + "externalChangesTitle": "外部変更 — {fileName}", + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "externalFileDeleted": "このファイルはディスク上で削除されました。", + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, + "externalFileChanged": "未保存の編集を行っている間に、このファイルがディスク上で変更されました。", + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "{fileName} の未保存の内容を復元しました。確認してから保存、名前を付けて保存、または破棄してください。", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "compare": "比較", + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, + "reloadFromDisk": "ディスクから再読み込み", + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, + "keepMine": "自分の変更を保持", + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, + "saveAs": "名前を付けて保存", + "@saveAs": { + "description": "Action that saves the current document to another path." + }, + "sourceSearchInvalidRegex": "無効な正規表現", + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, + "sourceLargeFileFeaturesPaused": "大きなファイル:ハイライトと折りたたみを一時停止しています", + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, + "nothingToRead": "読み取るものはありません", + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, + "admonition": "注記", + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, + "quote": "引用", + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, + "note": "注記", + "@note": { + "description": "Preview label for a note admonition." + }, + "tip": "ヒント", + "@tip": { + "description": "Preview label for a tip admonition." + }, + "warning": "警告", + "@warning": { + "description": "Preview label for a warning admonition." + }, + "tabs": "タブ", + "@tabs": { + "description": "Preview label for a tabs block." + }, + "tab": "タブ", + "@tab": { + "description": "Preview label for a tab block." + }, + "procedure": "手順", + "@procedure": { + "description": "Preview label for a procedure block." + }, + "step": "ステップ", + "@step": { + "description": "Preview label for a procedure step." + }, + "topic": "トピック", + "@topic": { + "description": "Preview label for a topic element." + }, + "chapter": "章", + "@chapter": { + "description": "Preview label for a chapter element." + }, + "couldNotOpenTarget": "{target} を開けませんでした", + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, + "linkTargetNotFound": "リンク先が見つかりません:{targetPath}", + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "cannotOpenFileTypeInEditor": "このファイル形式はエディターで開けません", + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, + "anchorNotFound": "アンカーが見つかりません:{anchor}", + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "noProblemsFound": "問題は見つかりませんでした", + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, + "noResults": "結果はありません", + "@noResults": { + "description": "Search empty state." + }, + "searchResultLine": "{relativePath} - {lineNumber} 行目", + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, + "untitledResult": "無題の結果", + "@untitledResult": { + "description": "Fallback search result title." + }, + "documentKindMarkdownFile": "Markdown ファイル", + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, + "documentKindWritersideMarkdownTopic": "Writerside Markdown トピック", + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideXmlTopic": "Writerside XML トピック", + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideTree": "Writerside ツリー", + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, + "documentKindConfigurationFile": "構成ファイル", + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, + "documentKindVariablesFile": "変数ファイル", + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, + "documentKindCategoriesFile": "カテゴリファイル", + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, + "documentKindResourceFile": "リソースファイル", + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, + "workspaceErrorOpenFailed": "開くことができませんでした:{error}", + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideProjectFailed": "Writerside プロジェクトを作成できませんでした:{error}", + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideTopicFailed": "Writerside トピックを作成できませんでした:{error}", + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCouldNotOpenFile": "ファイルを開けませんでした:{error}", + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorChooseWhereToSaveMarkdown": "この Markdown ファイルの保存場所を選択してください。", + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, + "workspaceErrorSaveBlockedFileChangedOnDisk": "保存できません:ファイルがディスク上で変更されました。", + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, + "workspaceErrorSaveFailed": "保存に失敗しました:{error}", + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorFileOperationFailed": "ファイル操作に失敗しました:{error}", + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorValidationFailed": "検証に失敗しました:{error}", + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceRecoveryRestored": "{count, plural, =1{未保存のドキュメント 1 件を復元しました。保存または破棄する前に確認してください。} other{未保存のドキュメント {count} 件を復元しました。保存または破棄する前にそれぞれ確認してください。}}", + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceRecoveryDamaged": "{count, plural, =1{破損した復元レコード 1 件を復元できませんでした。元の復元ファイルは確認用に保持されています。} other{破損した復元レコード {count} 件を復元できませんでした。有効な復元レコードは引き続き利用できます。}}", + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "errorPathDoesNotExist": "パスが存在しません:{path}", + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetDirectoryNotEmpty": "対象ディレクトリはすでに存在し、空ではありません:{path}", + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetPathNotDirectory": "対象パスはすでに存在しますが、ディレクトリではありません:{path}", + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorGeneratedFileAlreadyExists": "生成されたファイルはすでに存在します:{path}", + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorParentDirectoryRequired": "親ディレクトリは必須です。", + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, + "errorParentDirectoryMissing": "親ディレクトリが存在しません:{path}", + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorDirectoryMissing": "ディレクトリが存在しません:{path}", + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorPathAlreadyExists": "パスはすでに存在します:{path}", + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorFileNameRequired": "ファイル名は必須です。", + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, + "errorFileNameUnsafe": "ファイル名は安全な単一のパスセグメントである必要があります。", + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, + "errorFileOperationInvalidTarget": "フォルダーをその中へ移動することはできません。", + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, + "errorFileOperationOutsideRoot": "ファイル操作はワークスペース内で行う必要があります。", + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, + "errorFileOperationRoot": "ファイルツリーからワークスペースのルートを変更することはできません。", + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, + "errorProjectNameRequired": "プロジェクト名は必須です。", + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, + "errorDirectoryNameRequired": "ディレクトリ名は必須です。", + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, + "errorDirectoryNameUnsafe": "ディレクトリ名は安全な単一のパスセグメントである必要があります。", + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, + "errorInstanceIdInvalid": "インスタンス ID は小文字で始まり、小文字、数字、アンダースコア、ハイフンのみを含む必要があります。", + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, + "errorTopicFileInvalid": "トピックファイル名は、パス区切り文字を含まない Markdown ファイル名である必要があります。", + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, + "errorTopicTitleRequired": "トピックのタイトルは必須です。", + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, + "errorWritersideModuleRootMissing": "Writerside モジュールのルートが存在しません:{path}", + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideModuleNotOpen": "トピックを作成するには Writerside モジュールを開く必要があります。", + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, + "errorWritersideInstanceTreeMissing": "Writerside モジュールにインスタンスツリーがありません。", + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, + "errorWritersideTreeFileMissing": "Writerside ツリーファイルが存在しません:{path}", + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTopicIdAlreadyExists": "トピック ID「{topicId}」はこのヘルプモジュールにすでに存在します。", + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, + "errorTopicFileAlreadyExists": "トピックファイルはすでに存在します:{path}", + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorReferenceTopicMissing": "選択したツリーに参照トピックがありません:{topic}", + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideTocNodeMissing": "選択した目次エントリはすでに存在しません。", + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, + "errorWritersideTocInvalidMove": "目次エントリを自分自身またはその子の中へ移動することはできません。", + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, + "errorWritersideStartTopicDelete": "開始トピック {topic} は削除できません。先に別の開始ページを選択してください。", + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideSafeDeleteRequired": "Writerside トピックファイルには「安全な削除」を使用してください。", + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, + "errorWritersideTopicUsageScanFailed": "トピックの使用箇所をスキャンできませんでした。ファイルは変更されていません。", + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, + "errorWritersideTopicUsagesRemain": "一部のトピックの使用箇所には引き続き対応が必要です。続行する前に確認してください。", + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, + "errorWritersideRedirectInvalid": "選択したリダイレクト先は無効になっています。もう一度選択してください。", + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, + "errorWritersideRollbackFailed": "トピックの削除を完全にはロールバックできませんでした。続行する前に次のパスを確認してください:{paths}", + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "errorTopicsRootUnsafe": "トピックのルートは安全な相対ディレクトリである必要があります。", + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, + "errorTopicFileNameUnsafe": "トピックファイル名は安全な単一のパスセグメントである必要があります。", + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, + "errorTopicFileExtensionMismatch": "トピックファイルの拡張子は、選択した形式({extension})と一致する必要があります。", + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "errorTopicFileNameInvalid": "トピックファイル名には、文字、数字、アンダースコア、ハイフンのみを使用できます。", + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, + "errorUnknown": "不明なエラー:{code}", + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileStatFailed": "ファイルのメタデータを読み取れませんでした:{error}", + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceScanSkipped": "大きなワークスペースが検出されました。アプリの応答性を保つため、一部のファイルをスキップしました。", + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, + "diagnosticWorkspaceScanInspectFailed": "ワークスペース項目を検査できませんでした:{error}", + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileTooLarge": "ファイルがベータ版自動解析の上限を超えています。", + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, + "diagnosticWorkspaceFileReadFailed": "Markdown ファイルを読み取れませんでした:{error}", + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticMarkdownAttributeMalformed": "Writerside の見出し属性ブロックの形式が正しくありません。", + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, + "diagnosticMarkdownHeadingDuplicateId": "見出し ID「{id}」が重複しています。", + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicH1ConvertedToChapter": "追加のトップレベル H1 見出しは章として扱われます。", + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown トピックに H1 または front matter のタイトルがありません。", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, + "diagnosticWritersideXmlTopicMissingTitle": "XML トピックにタイトルがありません。", + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, + "diagnosticWritersideTopicFileMissingTitle": "トピック「{fileName}」にタイトルがありません。", + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "diagnosticMarkdownFrontMatterMalformed": "front matter が閉じられていません。", + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, + "diagnosticMarkdownRawHtmlUnsafe": "安全でない HTML 要素です。", + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, + "diagnosticMarkdownLinkUnresolvedTarget": "リンク先が存在しません:{targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "diagnosticMarkdownLinkUnresolvedAnchor": "アンカー「{anchor}」が存在しません。", + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingAlt": "画像「{destination}」に代替テキストがありません。", + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingFile": "画像が存在しません:{destination}", + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticInvalidXml": "無効な XML:{message}", + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigInvalidRoot": "writerside.cfg のルートは である必要があります。", + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, + "diagnosticWritersideConfigMissingSnippetsSrc": "snippets 宣言に src がありません。", + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups 宣言に src がありません。", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, + "diagnosticWritersideConfigInvalidKeymapsMode": "サポートされていない keymaps モード:{mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceSrc": "instance 宣言に src がありません。", + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg にインスタンスが登録されていません。", + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, + "diagnosticWritersideTreeInvalidRoot": ".tree のルートは である必要があります。", + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, + "diagnosticWritersideTreeMissingId": "インスタンスプロファイルに id がありません。", + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, + "diagnosticWritersideTreeIdMismatch": "ツリーファイルの拡張子を除いた名前がインスタンス ID「{id}」と一致しません。", + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "ライブラリ以外のインスタンスに start-page がありません。", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, + "diagnosticWritersideStartPageMissing": "開始ページ「{startPage}」が存在しません。", + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeDuplicateTopic": "トピック「{topic}」がこのインスタンスの目次に複数回登場します。", + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableMalformedDeclaration": "変数宣言には名前と値が必要です。", + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, + "diagnosticWritersideVariableDuplicateName": "変数「{name}」が複数回宣言されています。", + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryMissingId": "カテゴリに id がありません。", + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, + "diagnosticWritersideCategoryDuplicateId": "カテゴリ「{id}」が複数回宣言されています。", + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryDuplicateOrder": "カテゴリの順序「{order}」が複数回宣言されています。", + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicInvalidRoot": ".topic のルートは である必要があります。", + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, + "diagnosticWritersideTopicMissingRootId": "XML トピックにルート id がありません。", + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, + "diagnosticWritersideTopicRootIdMismatch": "XML トピックのルート ID「{id}」はファイル名「{expectedId}」と一致する必要があります。", + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateElementId": "要素 ID「{elementId}」が複数回登場します。", + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAnchorMissingHref": " に href がありません。", + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, + "diagnosticWritersideConfigMissing": "Writerside モードには writerside.cfg が必要です。", + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "設定されたビルド構成ディレクトリがありません:{relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "設定された API 仕様ディレクトリがありません:{relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingSnippetsDirectory": "設定された snippets ディレクトリがありません:{relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingVarsFile": "設定された変数ファイルがありません:{relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingCategoriesFile": "設定されたカテゴリファイルがありません:{relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "設定されたインスタンスグループファイルがありません:{relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceTree": "登録されたインスタンスツリー「{source}」が存在しません。", + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicReadFailed": "トピックファイルを読み取れませんでした:{error}", + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "デフォルトのトピックディレクトリがありません:{relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicsDirectoryMissing": "設定されたトピックディレクトリがありません:{relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideImagesDirectoryMissing": "設定された画像ディレクトリがありません:{relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateId": "要素 ID「{id}」が複数回登場します。", + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingTopic": "目次が存在しないトピック「{topic}」を参照しています。", + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeInvalidHref": "外部 href「{href}」が無効です。", + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableUnresolved": "変数「%{name}%」が宣言されていません。", + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicLinkUnresolved": "トピックリンク「{destination}」を解決できません。", + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticWritersideAnchorUnresolved": "「{targetName}」にアンカー「{anchor}」が存在しません。", + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": " に from がありません。", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, + "diagnosticWritersideIncludeSourceMissing": "インクルードソース「{from}」が存在しません。", + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeElementMissing": "「{from}」にインクルード要素「{elementId}」が存在しません。", + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "seealso カテゴリ「{ref}」が宣言されていません。", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAmbiguousReference": "トピック参照「{reference}」があいまいです。", + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, + "diagnosticUnknown": "不明な診断情報:{code}", + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "close": "閉じる", + "@close": { + "description": "Close action label." + }, + "git": "Git", + "@git": { + "description": "Git sidebar tab label." + }, + "gitDiff": "Git の差分", + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, + "gitShowDiff": "差分を表示", + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, + "gitDiffHunkRange": "旧 {oldRange} → 新 {newRange}", + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, + "gitDiffNoLines": "行はありません", + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, + "gitUnavailableTitle": "Git を利用できません", + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, + "gitUnavailableMessage": "{reason, select, other{Git をインストールするか、利用可能な Git 実行ファイルを使用するよう BusyMark を設定してください。{reason}}}", + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, + "gitTrustRequiredTitle": "このワークスペースを信頼して Git を使用しますか?", + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, + "gitTrustRequiredMessage": "Git リポジトリでは、フック、フィルター、その他の設定を通じてプログラムを実行できます。BusyMark がリポジトリデータを読み取ったり Git 操作を有効にしたりする前に、このワークスペースを信頼してください。", + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, + "gitTrustWorkspace": "ワークスペースを信頼", + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, + "gitNotRepositoryTitle": "Git リポジトリではありません", + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, + "gitNotRepositoryMessage": "このワークスペースは Git リポジトリ内にありません。", + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, + "gitInitializeRepository": "リポジトリを初期化", + "@gitInitializeRepository": { + "description": "Action label for git init." + }, + "gitDetachedHead": "分離した HEAD", + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, + "gitDetachedHeadAt": "HEAD は {commit} で分離しています", + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, + "gitNoUpstream": "アップストリームなし", + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, + "gitAheadCount": "{count, plural, =1{未プッシュのコミット 1 件} other{未プッシュのコミット {count} 件}}", + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitBehindCount": "{count, plural, =1{プルが必要なコミット 1 件} other{プルが必要なコミット {count} 件}}", + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "クリーン", + "@gitClean": { + "description": "Git clean state label." + }, + "gitConflicts": "競合", + "@gitConflicts": { + "description": "Git conflicts group label." + }, + "gitChanges": "変更", + "@gitChanges": { + "description": "Git changes view label." + }, + "gitStaged": "ステージ済み", + "@gitStaged": { + "description": "Git staged changes group label." + }, + "gitUnstaged": "未ステージ", + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, + "gitHistory": "履歴", + "@gitHistory": { + "description": "Git history view label." + }, + "gitBranches": "ブランチ", + "@gitBranches": { + "description": "Git branch menu label." + }, + "gitActions": "Git の操作", + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, + "gitPull": "Pull", + "@gitPull": { + "description": "Git pull action label." + }, + "gitFetch": "Fetch", + "@gitFetch": { + "description": "Git fetch action label." + }, + "gitPush": "Push", + "@gitPush": { + "description": "Git push action label." + }, + "gitCommit": "Commit", + "@gitCommit": { + "description": "Git commit action label." + }, + "gitSelectForCommit": "ファイルをステージ", + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, + "gitRemoveFromCommit": "ファイルをアンステージ", + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, + "gitDiscard": "ロールバック", + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, + "gitOpenFile": "ファイルを開く", + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, + "gitMarkResolved": "解決済みとしてマーク", + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, + "gitUntracked": "未追跡", + "@gitUntracked": { + "description": "Git untracked files group label." + }, + "gitCommitMessage": "コミットメッセージ", + "@gitCommitMessage": { + "description": "Commit message field label." + }, + "gitCommitSelectedFiles": "選択したファイル", + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, + "gitCommitNoSelectedFiles": "コミットする前に、少なくとも 1 つのファイルをステージしてください。", + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, + "gitStagedFileCount": "{count, plural, =1{ステージ済みファイル 1 件} other{ステージ済みファイル {count} 件}}", + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitOutsideWorkspace": "ワークスペース外", + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, + "gitCommitMessageRequired": "コミットメッセージを入力してください。", + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, + "gitCreateBranch": "ブランチを作成", + "@gitCreateBranch": { + "description": "Git create branch action label." + }, + "gitNewBranch": "新しいブランチ", + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, + "gitBranchName": "ブランチ名", + "@gitBranchName": { + "description": "Branch name field label." + }, + "gitSwitchBranch": "切り替え", + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, + "gitNoChanges": "変更はありません", + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, + "gitNoHistory": "履歴はありません", + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, + "gitNoBranches": "ブランチはありません", + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, + "gitNoDiff": "表示する差分はありません", + "@gitNoDiff": { + "description": "Git diff empty state." + }, + "gitBinaryFile": "バイナリファイルです。BusyMark はバイナリパッチをレンダリングしません。", + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, + "gitBinaryFileInfo": "バイナリファイル({size} バイト)です。BusyMark はバイナリパッチをレンダリングしません。", + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, + "gitUnsavedChangesBanner": "保存するまで、未保存のエディターの変更は含まれません。", + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, + "gitConfirmDiscardTitle": "Git の変更を破棄しますか?", + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, + "gitConfirmDiscardTracked": "{count, plural, =1{選択した追跡対象ファイルのステージ済みおよび未ステージの変更をすべて HEAD に復元します。} other{選択した追跡対象ファイルのステージ済みおよび未ステージの変更をすべて HEAD に復元します。}}", + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmDiscardUntracked": "{count, plural, =1{選択した未追跡ファイルを削除します。} other{選択した未追跡ファイルを削除します。}}", + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmDiscardMixed": "{count, plural, =1{Git の状態に応じて、選択したファイルを復元または削除します。} other{Git の状態に応じて、選択したファイルを復元または削除します。}}", + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmSwitchBranchTitle": "{branch} に切り替えますか?", + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitConfirmSwitchBranchMessage": "Git がブランチを切り替えた後、BusyMark はディスクからワークスペースを再読み込みします。", + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, + "gitConfirmPushSetUpstreamTitle": "アップストリームブランチを設定しますか?", + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, + "gitConfirmPushSetUpstreamMessage": "このブランチにはアップストリームがありません。リモートが 1 つだけ設定されている場合、BusyMark は {branch} をプッシュしてアップストリームを設定できます。", + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitProjectHistory": "プロジェクト履歴", + "@gitProjectHistory": { + "description": "Project history action label." + }, + "gitFileHistory": "ファイル履歴", + "@gitFileHistory": { + "description": "Current file history action label." + }, + "gitFileHistoryRequiresOpenFile": "ファイル履歴を表示するには Markdown ファイルを開く必要があります。", + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, + "gitLoadMore": "さらに読み込む", + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, + "gitChangesInCommit": "このコミットの変更", + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, + "gitCompareWithCurrent": "現在の状態と比較", + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, + "gitRestoreVersion": "このバージョンを復元", + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, + "gitConfirmRestoreTitle": "このファイルのバージョンを復元しますか?", + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, + "gitConfirmRestoreMessage": "BusyMark は、現在の作業ツリーのファイルを選択したコミット済みバージョンで置き換えます。復元されたファイルは未ステージのままになります。", + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, + "gitCommitActions": "コミット操作", + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, + "gitResetCurrentBranchToHere": "現在のブランチをここにリセット…", + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, + "gitResetCurrentBranchTitle": "{branch} を {commit} にリセットしますか?", + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitResetCurrentBranchMessage": "ブランチ {branch} をコミット {commit} に移動します。Git がインデックスと作業ツリーを更新する方法を選択してください。", + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitReset": "リセット", + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, + "gitResetModeSoft": "ソフト", + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, + "gitResetModeSoftDescription": "ブランチのみを移動します。インデックスと作業ツリーは変更せず、選択したコミットとの差分をステージ済みのままにします。", + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, + "gitResetModeMixed": "ミックス", + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, + "gitResetModeMixedDescription": "ブランチを移動してインデックスをリセットします。作業ツリーは変更せず、差分を未ステージの状態にします。", + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, + "gitResetModeHard": "ハード", + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, + "gitResetModeHardDescription": "ブランチを移動してインデックスと作業ツリーをリセットします。追跡対象の変更は破棄され、妨げとなる未追跡ファイルは削除される可能性があります。", + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, + "gitResetModeKeep": "保持", + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, + "gitResetModeKeepDescription": "ローカルの変更を保持しながら、ブランチを移動して追跡対象ファイルをリセットします。変更がリセットと競合する場合、Git は中止します。", + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, + "fileActions": "ファイル操作", + "@fileActions": { + "description": "Tooltip for a file action menu." + }, + "actions": "操作", + "@actions": { + "description": "Tooltip for a general action menu." + }, + "gitStatusAdded": "追加済み", + "@gitStatusAdded": { + "description": "Git file status label." + }, + "gitStatusDeleted": "削除済み", + "@gitStatusDeleted": { + "description": "Git file status label." + }, + "gitStatusRenamed": "名前変更済み", + "@gitStatusRenamed": { + "description": "Git file status label." + }, + "gitStatusCopied": "コピー済み", + "@gitStatusCopied": { + "description": "Git file status label." + }, + "gitStatusUntracked": "未追跡", + "@gitStatusUntracked": { + "description": "Git file status label." + }, + "gitStatusConflicted": "競合あり", + "@gitStatusConflicted": { + "description": "Git file status label." + }, + "gitStatusIgnored": "無視済み", + "@gitStatusIgnored": { + "description": "Git file status label." + }, + "gitStatusTypeChanged": "種類を変更済み", + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, + "gitStatusModified": "変更済み", + "@gitStatusModified": { + "description": "Git file status label." + }, + "gitStatusUnknown": "不明", + "@gitStatusUnknown": { + "description": "Git file status label." + }, + "gitErrorUnavailable": "Git を利用できません。", + "@gitErrorUnavailable": { + "description": "Git error message." + }, + "gitErrorNotRepository": "このワークスペースは Git リポジトリではありません。", + "@gitErrorNotRepository": { + "description": "Git error message." + }, + "gitErrorUnsafePath": "BusyMark は安全でない Git パスをブロックしました。", + "@gitErrorUnsafePath": { + "description": "Git error message." + }, + "gitErrorInvalidBranchName": "有効なブランチ名を入力してください。", + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, + "gitErrorNoRemote": "Git のリモートが設定されていません。", + "@gitErrorNoRemote": { + "description": "Git error message." + }, + "gitErrorNoUpstream": "アップストリームブランチが設定されていません。", + "@gitErrorNoUpstream": { + "description": "Git error message." + }, + "gitErrorMultipleRemotes": "複数のリモートが設定されています。BusyMark の外部でアップストリームを選択してください。", + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, + "gitErrorDirtyWorkspace": "ブランチを切り替える前に、BusyMark エディターの変更を保存または破棄してください。", + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, + "gitErrorResetDirtyWorkspace": "現在のブランチをリセットする前に、BusyMark エディターの変更を保存または破棄してください。", + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, + "gitErrorRestoreStagedFile": "過去のバージョンを復元する前に、このファイルをアンステージしてください。", + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, + "gitErrorResetDetachedHead": "リセットする前にブランチをチェックアウトしてください。", + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, + "gitErrorDiverged": "ブランチが分岐しています。BusyMark の外部でマージまたはリベースの問題を解決してください。", + "@gitErrorDiverged": { + "description": "Git error message." + }, + "gitErrorAuthorIdentity": "コミットするには、Git に作成者名とメールアドレスが必要です。", + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, + "gitAuthorIdentityTitle": "Git の作成者情報", + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, + "gitAuthorIdentityMessage": "コミットに記録する Git の識別情報を入力してください。BusyMark はそれを保存して、このコミットを再試行します。", + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, + "gitAuthorName": "名前", + "@gitAuthorName": { + "description": "Git commit author name field label." + }, + "gitAuthorEmail": "メールアドレス", + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, + "gitAuthorIdentityGlobal": "すべてのリポジトリに使用", + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, + "gitAuthorIdentityGlobalDescription": "Snap としてインストールした場合、BusyMark で開いたリポジトリに適用されます。", + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, + "gitSaveIdentityAndCommit": "保存してコミット", + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, + "gitErrorAuthentication": "Git の認証に失敗しました。", + "@gitErrorAuthentication": { + "description": "Git error message." + }, + "gitErrorNetwork": "Git のネットワーク操作に失敗しました。", + "@gitErrorNetwork": { + "description": "Git error message." + }, + "gitErrorConflict": "Git から未解決の競合が報告されました。", + "@gitErrorConflict": { + "description": "Git error message." + }, + "gitErrorCommandFailed": "Git コマンドに失敗しました。", + "@gitErrorCommandFailed": { + "description": "Git error message." + }, + "markdownAndHtml": "Markdown と HTML", + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, + "markdownHtmlMarkdownBlocks": "Markdown ブロック", + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, + "markdownHtmlMarkdownBlocksDescription": "Markdown のソースとプレビューでサポートされるブロック構造", + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, + "markdownHtmlInlineFormatting": "インライン Markdown", + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, + "markdownHtmlInlineFormattingDescription": "段落、リスト項目、表のセル内で使用できる書式", + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, + "markdownHtmlRawHtmlBlocks": "生 HTML ブロック", + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlBlocksDescription": "BusyMark のプレビューウィジェットでレンダリングされる安全なブロックレベル HTML タグ", + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlInline": "生 HTML インラインタグ", + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, + "markdownHtmlRawHtmlInlineDescription": "リテラルタグを表示せずにレンダリングされる安全なインライン HTML タグ", + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, + "markdownHtmlSafety": "安全性のルール", + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, + "markdownHtmlSafetyDescription": "生 HTML はプレビューのレンダリング前に解析およびサニタイズされます。", + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, + "markdownHtmlHeadings": "見出し", + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, + "markdownHtmlParagraphs": "段落", + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, + "markdownHtmlLists": "リスト", + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, + "markdownHtmlHtmlContainers": "コンテナー", + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, + "markdownHtmlHtmlTextBlocks": "テキストブロック", + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, + "markdownHtmlHtmlFigures": "図と画像", + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, + "markdownHtmlHtmlPreformatted": "整形済みコード", + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, + "markdownHtmlHtmlDisclosure": "折りたたみブロック", + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, + "markdownHtmlHtmlDescriptionLists": "説明リスト", + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, + "markdownHtmlHtmlFormattingTags": "書式タグ", + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, + "markdownHtmlHtmlInlineCodeTags": "インラインコードタグ", + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, + "markdownHtmlHtmlNeutralInlineTags": "セマンティックテキストタグ", + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, + "markdownHtmlSanitizedPreview": "サニタイズ済みプレビュー", + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, + "markdownHtmlSanitizedPreviewDescription": "許可された HTML はブラウザーでレンダリングされず、BusyMark のプレビューブロックに変換されます。", + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, + "markdownHtmlSourcePreserved": "ソースを保持", + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, + "markdownHtmlSourcePreservedDescription": "編集されていない生 HTML はソーステキストのまま正確に保存されます。", + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, + "markdownHtmlMarkdownInsideHtml": "HTML 内の Markdown", + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, + "markdownHtmlMarkdownInsideHtmlDescription": "生 HTML 内の Markdown マーカーはリテラルテキストとしてレンダリングされます。", + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, + "markdownHtmlBlockedContent": "ブロックされたアクティブコンテンツ", + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, + "markdownHtmlBlockedContentDescription": "スクリプト、スタイル、フレーム、フォーム、SVG、MathML、イベント、安全でない属性はブロックされます。", + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, + "markdownHtmlSafeUrls": "安全な URL のみ", + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, + "markdownHtmlSafeUrlsDescription": "リンクでは http、https、mailto、tel、相対パス、フラグメント URL が許可されます。安全でないスキームはブロックされます。", + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, + "exportAsPdf": "PDF としてエクスポート", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, + "pdfExportDescription": "ページレイアウトを選択して、整った自己完結型の PDF を生成", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "エクスポート中にリモート画像はダウンロードされません。利用可能な場合はローカル画像が含まれます。", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "ページサイズ", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "向き", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "縦向き", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "横向き", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "余白", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "狭い", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "標準", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "広い", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "ページ番号を含める", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "エクスポート", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "PDF をエクスポート中…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "PDF ドキュメント", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} をエクスポートしました。", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} を {count} 件の警告付きでエクスポートしました。", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "PDF エクスポートコンポーネントがありません。BusyMark を再インストールして、もう一度お試しください。", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "PDF のエクスポートに時間がかかりすぎたため停止しました。", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark はこのドキュメントを PDF としてエクスポートできませんでした。", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, + "visualizationRendering": "レンダリング中…", + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, + "visualizationStale": "最後に有効だったレンダリング結果を表示中", + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, + "visualizationShowSource": "ソースを表示", + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, + "visualizationShowRender": "レンダリング結果を表示", + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, + "visualizationFitWidth": "幅に合わせる", + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, + "visualizationSaveImage": "画像を保存", + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, + "visualizationCopyImage": "画像をコピー", + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, + "visualizationImageCopied": "画像をコピーしました", + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, + "visualizationOpenApiReference": "API リファレンスを開く", + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, + "visualizationValid": "有効", + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, + "visualizationInvalid": "無効", + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, + "visualizationServers": "サーバー", + "@visualizationServers": { + "description": "OpenAPI server count label." + }, + "visualizationPaths": "パス", + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, + "visualizationOperations": "操作", + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, + "visualizationTags": "タグ", + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, + "visualizationNoOperations": "一致する操作はありません", + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, + "visualizationSearchOperations": "操作を検索", + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, + "visualizationRenderFailed": "この可視化をレンダリングできませんでした。", + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, + "visualizationRetry": "再試行", + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, + "visualizationSaved": "{fileName} を保存しました", + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "shortcutExportPdfDescription": "現在のドキュメントまたは Writerside モジュールを PDF としてエクスポート", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, + "instances": "インスタンス", + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, + "newInstance": "新しいインスタンス", + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, + "newTocLibrary": "新しい目次ライブラリ", + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, + "editInstance": "インスタンスを編集", + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, + "openTocFile": "目次ファイルを開く", + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, + "createInstance": "インスタンスを作成", + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, + "createTocLibrary": "目次ライブラリを作成", + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, + "instanceContent": "コンテンツ", + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, + "instanceContentSource": "作成元", + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, + "emptyInstance": "空のインスタンス", + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, + "markdownFiles": "ローカル Markdown ファイル", + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, + "chooseMarkdownFolder": "Markdown フォルダーを選択", + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, + "errorWritersideInstanceImportSourceRequired": "Markdown ファイルを含むフォルダーを選択してください。", + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, + "instanceAppearance": "外観", + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, + "instanceColor": "アイコンの色", + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, + "instanceVersion": "バージョン", + "@instanceVersion": { + "description": "Writerside instance version field." + }, + "instanceVersionInherited": "この項目が空の場合、プロジェクトのバージョンは {version} です。", + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "instanceWebPath": "ウェブパス", + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, + "instanceStatus": "ステータス", + "@instanceStatus": { + "description": "Writerside instance status field." + }, + "instanceStatusRelease": "リリース", + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, + "instanceStatusEap": "早期アクセス", + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, + "instanceStatusDeprecated": "非推奨", + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, + "allowSearchEngineIndexing": "検索エンジンによるインデックス登録を許可", + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, + "allowSearchEngineIndexingDescription": "外部検索エンジンによるこの出力のインデックス登録を許可", + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, + "offlineArtifact": "オフラインアーティファクト", + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, + "offlineArtifactDescription": "構築したドキュメントを自己完結させるためにリソースをバンドル", + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, + "instanceOutputSettings": "出力設定", + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, + "markdownImportSource": "Markdown ソース", + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, + "markdownImportFiles": "Markdown ファイル", + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, + "selectNone": "すべて選択解除", + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, + "markdownFilesFound": "Markdown ファイルが {count} 件見つかりました", + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noMarkdownFilesFound": "このディレクトリに Markdown ファイルは見つかりませんでした。", + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, + "copyReferencedMedia": "参照されたメディアをコピー", + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, + "copyReferencedMediaDescription": "選択したファイルから参照されているローカル画像と動画を、相対パスを保持したままコピー", + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, + "instanceIdRenameWarningTitle": "インスタンス ID の名前を変更しますか?", + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, + "instanceIdRenameWarning": "BusyMark は .tree ファイルの名前を変更し、Writerside プロジェクトの参照を「{oldId}」から「{newId}」に更新します。公開スクリプトは変更されないため、別途更新する必要があります。", + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, + "renameAndUpdateReferences": "名前を変更して参照を更新", + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, + "tocLibraryDescription": "目次ライブラリには再利用可能なセクションが保存され、独自の出力は生成されません。", + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, + "defaultTocLibraryName": "共有目次", + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, + "instanceColorAutomatic": "自動", + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, + "instanceColorBlue": "青", + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, + "instanceColorGreen": "緑", + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, + "instanceColorOrange": "オレンジ", + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, + "instanceColorPurple": "紫", + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, + "instanceColorRed": "赤", + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, + "instanceColorTeal": "青緑", + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, + "instanceColorYellow": "黄", + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, + "errorWritersideInstanceNameRequired": "インスタンス名を入力してください。", + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, + "errorWritersideInstanceIdExists": "ID「{id}」のインスタンスはすでに存在します。", + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "errorWritersideInstanceTreeExists": "インスタンスツリーはすでに存在します:{path}", + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportSourceMissing": "Markdown ソースディレクトリが存在しません:{path}", + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportSelectionRequired": "インポートする Markdown ファイルを少なくとも 1 つ選択してください。", + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, + "errorWritersideInstanceImportFileInvalid": "選択したソース内に読み取り可能な Markdown ファイルではないものがあります:{path}", + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportTargetExists": "インポートすると既存のプロジェクトファイルが上書きされます:{path}", + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceFilesChanged": "インスタンスのファイルがディスク上で変更されました。確認して、もう一度お試しください。", + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, + "errorWritersideInstanceRollbackFailed": "BusyMark はインスタンスの変更を完全にはロールバックできませんでした。続行する前に次のファイルを確認してください:{paths}", + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "errorWritersideInstanceLibraryImport": "目次ライブラリに Markdown トピックをインポートすることはできません。", + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, + "errorWritersideInstanceWebPathInvalid": "ウェブパスは 1 行である必要があります。", + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, + "errorWritersideInstanceConfigurationInvalid": "Writerside インスタンスの構成が無効です。診断情報を修正して、もう一度お試しください。", + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, + "errorWritersideInstanceTemporaryFile": "BusyMark はインスタンスの変更を安全にステージできませんでした。", + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, + "diagnosticWritersideTreeInvalidStatus": "不明なインスタンスステータス「{status}」です。release、eap、deprecated のいずれかを使用してください。", + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, + "diagnosticWritersideDuplicateInstanceId": "インスタンス ID「{id}」が複数のツリーファイルで使用されています。", + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml には ルート要素が必要です。", + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} の値「{value}」は true または false である必要があります。", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, + "diagnosticWritersideBuildProfileMissingInstance": " 要素にはインスタンス ID の指定が必要です。", + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, + "diagnosticWritersideTreeInvalidInclude": "ツリーの には from と element-id の両方を指定する必要があります。", + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, + "diagnosticWritersideTreeMissingSnippetId": "ツリーの には id の指定が必要です。", + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "インスタンス間の目次参照には ref と in の両方を指定する必要があります。", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, + "diagnosticWritersideTreeConflictingTargets": "目次要素が複数のトピック、参照、リンク、またはリダイレクトを対象にすることはできません。", + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, + "diagnosticWritersideTreeDuplicateElementId": "ツリー要素 ID「{id}」が複数回宣言されています。", + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideInstanceGroupsInvalidRoot": "インスタンスグループファイルには ルート要素が必要です。", + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, + "diagnosticWritersideInstanceGroupInvalid": "インスタンスグループには空でない id とインスタンスリストの指定が必要です。", + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, + "diagnosticWritersideInstanceGroupDuplicateId": "インスタンスグループ ID「{id}」が複数回宣言されています。", + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideExternalTreeInclude": "目次のインクルード「{source}#{id}」は外部モジュール「{origin}」に属しているため、このワークスペースでは展開できません。", + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeIncludeElementMissing": "登録されたツリー「{source}」にツリー要素「{id}」が存在しません。", + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeCircularInclude": "ツリーのインクルード「{source}#{id}」が循環を作成しています。", + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideUnknownInstanceGroup": "インスタンス条件が不明なグループ「@{group}」を参照しています。", + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceInstanceMissing": "インスタンス間参照が不明なインスタンス「{instance}」を対象にしています。", + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceTopicMissing": "トピック「{topic}」は参照先のインスタンス「{instance}」にありません。", + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, + "download": "ダウンロード", + "@download": { + "description": "Button label that downloads a required component." + }, + "exportWritersideAsPdf": "Writerside を PDF としてエクスポート", + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, + "writersidePdfContent": "エクスポートする内容", + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, + "writersidePdfPage": "ページ", + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, + "exportingWritersidePdf": "Writerside PDF をエクスポート中…", + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, + "ai": "AI", + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, + "aiLocalOllama": "ローカル Ollama", + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, + "aiDisabled": "無効", + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, + "aiLocalOnlyDescription": "AI による編集は明示的に実行されます。BusyMark は選択したプロバイダーに表示されたコンテキストのみを送信し、確認なしに提案を適用することはありません。", + "@aiLocalOnlyDescription": { + "description": "Privacy description for BusyMark local AI." + }, + "aiProvider": "AI プロバイダー", + "@aiProvider": { + "description": "Label for an AI provider selection." + }, + "aiDefaultProvider": "デフォルトのプロバイダー", + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, + "aiConfigureProvider": "プロバイダーを設定", + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, + "aiChooseProvider": "AI プロバイダーを選択", + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, + "aiOllamaEndpoint": "Ollama エンドポイント", + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, + "aiOllamaModel": "Ollama モデル", + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, + "aiTestConnection": "接続をテスト", + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, + "aiTestingConnection": "テスト中…", + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, + "aiConnectionReady": "接続しました。インストール済みのモデルが {count} 件見つかりました。", + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "aiNoModels": "モデルが選択されていません。", + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, + "aiConnectionFailed": "BusyMark は AI によるテキスト生成を確認できませんでした。", + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, + "aiConfigureFirst": "設定 → AI で AI プロバイダーを有効にして、モデルを確認してください。", + "aiEditWithAi": "AI で編集", + "aiRefineWithAi": "AI で改善", + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, + "aiInstruction": "指示", + "aiChangeTarget": "変更対象", + "aiSharedContext": "AI と共有するコンテキスト", + "aiTargetSelection": "選択したコンテンツ", + "aiTargetInsertAfterBlock": "現在のブロックの後に挿入", + "aiTargetCurrentBlock": "現在のブロック", + "aiTargetCurrentSection": "現在のセクション", + "aiTargetCompleteDocument": "ドキュメント全体", + "aiContextNone": "ドキュメントのコンテキストなし", + "aiContextSelection": "選択したコンテンツ", + "aiContextCurrentBlock": "現在のブロック", + "aiContextCurrentSection": "現在のセクション", + "aiContextCompleteDocument": "ドキュメント全体", + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, + "aiGenerating": "提案を生成中…", + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, + "aiProposal": "AI の提案", + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, + "aiGenerateProposal": "提案を生成", + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, + "aiContextDisclosure": "選択したプロバイダーは、表示されたコンテキストから {count} 文字を受け取ります。", + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "aiOriginal": "元の内容", + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, + "aiSuggested": "提案された内容", + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, + "aiApplyProposal": "提案を適用", + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, + "aiTokenUsage": "入力トークン:{input} · 出力トークン:{output}", + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, + "aiStaleProposal": "この提案の生成中にドキュメントが変更されました。操作をもう一度実行してください。", + "gitAiStagedChangesChanged": "コミットメッセージの生成中にステージ済みの変更が変わりました。操作をもう一度実行してください。", + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, + "aiViewContext": "送信されたコンテキストを表示", + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, + "aiReviewExactContent": "正確な内容を確認", + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, + "aiContentToChange": "変更する内容", + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, + "aiContentSentToAi": "AI に送信された内容", + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, + "aiApiKey": "API キー", + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, + "aiApiKeyStoredHint": "キーはシステムの認証情報ストアに保存されています", + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, + "aiApiKeyEnterHint": "プロバイダーの API キーを入力", + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, + "aiReplaceApiKey": "API キーを置き換え", + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, + "aiSaveApiKey": "API キーを安全に保存", + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, + "aiRemoveApiKey": "保存した API キーを削除", + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, + "aiCredentialSaved": "API キーをシステムの認証情報ストアに保存しました。", + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, + "aiCredentialRemoved": "保存した API キーを削除しました。", + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, + "aiModelRouting": "モデルのルーティング", + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, + "aiAutomaticRouting": "タスクに応じて自動選択", + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, + "aiFixedModelRouting": "選択したモデルを使用", + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, + "aiPreferredModel": "優先モデル", + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, + "aiModel": "モデル", + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, + "aiUsageThisMonth": "{requests} 件のリクエスト · 入力トークン {input} · 出力トークン {output}", + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, + "aiCloudConsentTitle": "{provider} にコンテンツを送信しますか?", + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiCloudConsentEnable": "{provider} を有効にする", + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiCloudConsentMessage": "各 AI レビューダイアログに表示された内容のみが送信されます。リクエストは状態を保持せず、提案には確認が必要です。API キーは Linux のシステム認証情報ストアに保存されます。", + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, + "aiCloudConsentRequired": "先に設定 → AI で {provider} とのデータ共有を確認してください。", + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiGenerationVerified": "{model} で生成機能を確認しました。互換性のあるモデルが {count} 件利用できます。", + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "aiColdStartObserved": "ローカルモデルのコールドスタートを検出しました。", + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, + "aiNoCompatibleModels": "互換性のあるテキスト生成モデルがありません。", + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, + "aiEnableProvider": "先に AI プロバイダーを有効にしてください。", + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, + "aiDraftCommitMessage": "コミットメッセージを下書き", + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, + "aiDrafting": "下書き中…", + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, + "aiDraftWithAi": "AI で下書き", + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, + "generateOrUpdateMarkdownToc": "目次を生成/更新", + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, + "markdownTocTitle": "目次", + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, + "markdownTocUpdated": "{count} 件の項目で目次を更新しました。", + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "markdownTocNoHeadings": "目次を生成する前に、セクション見出しを 1 つ以上追加してください。", + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, + "markdownTocMalformedMarkers": "BusyMark の目次マーカーがないか、重複しているか、順序が正しくありません。", + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, + "diagnosticMarkdownHeadingSkippedLevel": "見出しレベル {level} はレベル {previousLevel} の後に続いています。セクションの入れ子を確認してください。", + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, + "diagnosticMarkdownLinkEmptyText": "リンクテキストが空です。用途を説明するアクセシブルな名前を指定してください。", + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, + "diagnosticMarkdownLinkReviewText": "リンクテキスト「{text}」が文脈内で用途を説明しているか確認してください。", + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, + "diagnosticMarkdownTableEmptyHeader": "表のヘッダーセルは列を識別できる必要があります。空のヘッダーをすべて入力してください。", + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, + "mathRenderFailed": "数式をレンダリングできませんでした。", + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, + "inlineMath": "インライン数式", + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, + "displayMath": "ディスプレイ数式", + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + } +} diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb new file mode 100644 index 00000000..a0bddabd --- /dev/null +++ b/lib/l10n/app_ko.arb @@ -0,0 +1,1897 @@ +{ + "@@locale": "ko", + "appTitle": "BusyMark", + "@appTitle": {"description":"Application name."}, + "appSubtitle": "Markdown 파일 및 Writerside 호환 문서 프로젝트용 편집기입니다.", + "@appSubtitle": {"description":"Short application description."}, + "aboutBusyMark": "BusyMark 소개", + "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "aboutTagline": "마크다운 및 Writerside 편집기", + "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "aboutLicenseLabel": "라이선스", + "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "aboutWebsite": "웹사이트", + "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "aboutSourceCode": "소스 코드", + "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "reportIssue": "문제 신고", + "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "feedbackCategory": "범주", + "@feedbackCategory": {"description":"Feedback category field label."}, + "feedbackChooseCategory": "카테고리를 선택하세요", + "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "feedbackCategoryProblem": "문제 또는 버그", + "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "feedbackCategoryFeature": "기능 요청", + "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "feedbackCategoryPrivacySecurity": "개인 정보 보호 또는 보안 문제", + "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "feedbackCategoryUsability": "사용성 문제", + "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "feedbackCategoryOther": "기타", + "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "feedbackSubject": "제목", + "@feedbackSubject": {"description":"Feedback subject field label."}, + "feedbackMessage": "자세한 메시지", + "@feedbackMessage": {"description":"Detailed feedback message field label."}, + "feedbackReplyEmail": "이메일 답장(선택사항)", + "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "feedbackIncludeTechnicalDetails": "기술 세부정보 포함", + "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "feedbackTechnicalDetailsDisclosure": "사용 설정하면 Linux 운영 체제 버전과 BusyMark 애플리케이션 언어만 추가됩니다. 로그, 파일, 계정 데이터 또는 기타 진단 정보는 첨부되지 않습니다.", + "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "feedbackSubmit": "제출", + "@feedbackSubmit": {"description":"Button that submits feedback."}, + "feedbackSubmitting": "제출 중…", + "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "feedbackCategoryRequired": "카테고리를 선택하세요.", + "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "feedbackSubjectLength": "제목은 3~120자 사이여야 합니다.", + "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "feedbackMessageLength": "메시지는 10~5,000자 사이여야 합니다.", + "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "feedbackReplyEmailInvalid": "유효한 이메일 주소를 입력하거나 이 필드를 비워 두세요.", + "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "feedbackConnectionFailure": "BusyMark를 연결할 수 없습니다. 인터넷 연결을 확인하고 다시 시도하세요.", + "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "feedbackTimeoutFailure": "요청 시간이 초과되었습니다. 다시 시도해 보세요.", + "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "feedbackRateLimitedFailure": "이 연결에서 너무 많은 보고서가 전송되었습니다. 기다렸다가 다시 시도해 보세요.", + "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "feedbackRejectedFailure": "서버가 이 보고서를 거부했습니다. 양식 필드를 확인하고 다시 시도하세요.", + "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "feedbackServerFailure": "서버가 보고서를 승인할 수 없습니다. 나중에 다시 시도하세요.", + "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "feedbackSuccess": "피드백이 전송되었습니다. 참조 ID: {id}", + "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "advanced": "고급", + "@advanced": {"description":"Settings section title for advanced actions."}, + "addToGit": "Git에 추가", + "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "appearance": "화면 모양", + "@appearance": {"description":"Settings section title for appearance options."}, + "apply": "적용", + "@apply": {"description":"Button label that applies a dialog change."}, + "back": "뒤로", + "@back": {"description":"Tooltip for navigating back."}, + "bottomLeft": "왼쪽 하단", + "@bottomLeft": {"description":"Editing button position option."}, + "bottomRight": "오른쪽 하단", + "@bottomRight": {"description":"Editing button position option."}, + "cancel": "취소", + "@cancel": {"description":"Cancel button label."}, + "choose": "선택", + "@choose": {"description":"Button label for choosing a file or path."}, + "chooseLocation": "위치 선택", + "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "copy": "복사", + "@copy": {"description":"Copy command label."}, + "copyName": "이름 복사", + "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "copyFileName": "파일 이름 복사", + "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "copyPath": "경로 복사", + "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "create": "만들기", + "@create": {"description":"Create action label."}, + "creating": "만드는 중...", + "@creating": {"description":"Progress label while a project or topic is being created."}, + "cut": "잘라내기", + "@cut": {"description":"Cut command label."}, + "promoteSection": "섹션 수준 올리기", + "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "demoteSection": "섹션 수준 내리기", + "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "moveSectionUp": "섹션을 위로 이동", + "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "moveSectionDown": "섹션을 아래로 이동", + "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "confirmDeleteSectionTitle": "섹션을 삭제하시겠습니까?", + "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "confirmDeleteSectionMessage": "“{name}” 및 해당 섹션의 모든 콘텐츠를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "darkTheme": "어둡게", + "@darkTheme": {"description":"Dark theme option."}, + "delete": "삭제", + "@delete": {"description":"Delete command label."}, + "discard": "버리기", + "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "editor": "편집기", + "@editor": {"description":"Editor view label."}, + "file": "파일", + "@file": {"description":"Generic file kind label."}, + "fileHistory": "파일 기록", + "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "folder": "폴더", + "@folder": {"description":"Folder kind label."}, + "insert": "삽입", + "@insert": {"description":"Insert button label."}, + "keyboardShortcuts": "키보드 단축키", + "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "commandPalette": "명령 팔레트", + "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "commandPaletteHint": "명령을 입력하세요", + "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "commandPaletteEmpty": "일치하는 명령이 없습니다.", + "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "commandUnavailableInContext": "현재 편집기 컨텍스트에서는 사용할 수 없습니다.", + "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "lightTheme": "밝게", + "@lightTheme": {"description":"Light theme option."}, + "mainMenu": "메인 메뉴", + "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "fullScreen": "전체 화면", + "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "markdown": "Markdown", + "@markdown": {"description":"Markdown format label."}, + "open": "열기", + "@open": {"description":"Open action label."}, + "openInFiles": "파일에서 열기", + "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "pathActions": "경로 작업", + "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "outline": "개요", + "@outline": {"description":"Outline sidebar tab label."}, + "overwrite": "덮어쓰기", + "@overwrite": {"description":"Button label for overwriting a changed file."}, + "paste": "붙여넣기", + "@paste": {"description":"Paste command label."}, + "pasteWithoutFormatting": "서식 없이 붙여넣기", + "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "reading": "읽기", + "@reading": {"description":"Reading view label."}, + "removeFromRecent": "최근 항목에서 삭제", + "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "recent": "최근 항목", + "@recent": {"description":"Recent workspaces section title."}, + "redo": "다시 실행", + "@redo": {"description":"Redo command label."}, + "save": "저장", + "@save": {"description":"Save action label."}, + "search": "검색", + "@search": {"description":"Search action label and field hint."}, + "selectAll": "모두 선택", + "@selectAll": {"description":"Select all command label."}, + "settings": "설정", + "@settings": {"description":"Settings action label."}, + "source": "소스", + "@source": {"description":"Source view label."}, + "split": "분할", + "@split": {"description":"Split view label."}, + "systemTheme": "시스템", + "@systemTheme": {"description":"System theme option."}, + "theme": "테마", + "@theme": {"description":"Theme setting label."}, + "appLanguage": "언어", + "@appLanguage": {"description":"Application language setting label."}, + "systemLanguage": "시스템 언어", + "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "languageEnglish": "English", + "@languageEnglish": {"description":"Language selector option for English."}, + "languageGerman": "Deutsch", + "@languageGerman": {"description":"Language selector option for German."}, + "languageDutch": "Nederlands", + "@languageDutch": {"description":"Language selector option for Dutch."}, + "languageTurkish": "Türkçe", + "@languageTurkish": {"description":"Language selector option for Turkish."}, + "languageItalian": "Italiano", + "@languageItalian": {"description":"Language selector option for Italian."}, + "languageNorwegian": "Norsk", + "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "languageFrench": "Français", + "@languageFrench": {"description":"Language selector option for French."}, + "languageRussian": "Русский", + "@languageRussian": {"description":"Language selector option for Russian."}, + "languageUkrainian": "Українська", + "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "languagePolish": "Polski", + "@languagePolish": {"description":"Language selector option for Polish."}, + "languageSpanish": "Español", + "@languageSpanish": {"description":"Language selector option for Spanish."}, + "languagePortuguese": "Português", + "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "languageArabic": "العربية", + "@languageArabic": {"description":"Language selector option for Arabic."}, + "languagePersian": "فارسی", + "@languagePersian": {"description":"Language selector option for Persian."}, + "languageHindi": "हिन्दी", + "@languageHindi": {"description":"Language selector option for Hindi."}, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "languageEstonian": "Eesti", + "@languageEstonian": {"description":"Language selector option for Estonian."}, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "languageJapanese": "日本語", + "@languageJapanese": {"description":"Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description":"Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "toggleSidebar": "사이드바 패널", + "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "topLeft": "왼쪽 상단", + "@topLeft": {"description":"Editing button position option."}, + "topRight": "오른쪽 상단", + "@topRight": {"description":"Editing button position option."}, + "undo": "실행 취소", + "@undo": {"description":"Undo command label."}, + "validate": "검증", + "@validate": {"description":"Validate action label."}, + "validation": "검증", + "@validation": {"description":"Settings section title for validation options."}, + "viewMode": "보기 모드", + "@viewMode": {"description":"Native header bar view mode control label."}, + "welcome": "환영합니다", + "@welcome": {"description":"Welcome screen label and tooltip."}, + "writerside": "Writerside", + "@writerside": {"description":"Writerside workspace kind label."}, + "xml": "XML", + "@xml": {"description":"XML format label."}, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "fileTypeImages": "이미지", + "@fileTypeImages": {"description":"Native file picker type label for images."}, + "openMarkdownFile": "Markdown 파일 열기", + "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "markdownFileExtensions": ".md 또는 .markdown", + "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "openFolderOrWritersideProject": "폴더 또는 Writerside 프로젝트 열기", + "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "markdownFolderOrWritersideProject": "Markdown 폴더 또는 Writerside 호환 프로젝트", + "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "noOpenFile": "열린 파일 없음", + "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "shortcutDeleteTreeItemDescription": "선택한 파일 항목을 삭제하거나 목차에서 선택한 항목을 제거합니다.", + "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "shortcutGroupGeneral": "일반", + "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "shortcutNewDocument": "만들기", + "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "shortcutNewDocumentDescription": "Markdown 파일 또는 Writerside 프로젝트 만들기", + "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "shortcutOpenDescription": "Markdown 파일, 폴더 또는 Writerside 프로젝트 열기", + "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "shortcutSaveDescription": "현재 문서 저장", + "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "shortcutSearchDescription": "현재 작업공간 검색", + "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "shortcutKeyboardShortcutsDescription": "이 키보드 단축키 참조 표시", + "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "shortcutMarkdownAndHtmlDescription": "Markdown 및 HTML 참조 열기", + "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "shortcutSettingsDescription": "BusyMark 설정 열기", + "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "shortcutNextTab": "다음 탭", + "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "shortcutNextTabDescription": "열려 있는 다음 탭으로 이동", + "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "shortcutPreviousTab": "이전 탭", + "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "shortcutPreviousTabDescription": "이전에 열린 탭으로 이동", + "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "shortcutCloseTab": "탭 닫기", + "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "shortcutCloseTabDescription": "활성 탭 닫기", + "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "shortcutCloseAllTabs": "모든 탭 닫기", + "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "shortcutCloseAllTabsDescription": "열려 있는 탭을 모두 닫습니다.", + "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "shortcutGroupTextEditing": "텍스트 편집", + "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "shortcutSelectAllDescription": "소스 모드에서는 모든 텍스트를 선택합니다. 편집기 모드에서는 두 번 눌러 모든 블록을 선택합니다.", + "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "shortcutCutDescription": "선택한 텍스트 잘라내기", + "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "shortcutCopyDescription": "선택한 텍스트 복사", + "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "shortcutPasteDescription": "클립보드에서 붙여넣기", + "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "shortcutPastePlainTextDescription": "서식 없이 클립보드 텍스트 붙여넣기", + "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "shortcutUndoDescription": "마지막 편집 취소", + "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "shortcutRedoDescription": "마지막으로 실행 취소된 편집 다시 실행", + "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "shortcutInsertIndentation": "들여쓰기 삽입", + "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "shortcutInsertIndentationDescription": "커서에 들여쓰기 삽입", + "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "shortcutOutdentSource": "소스를 내어쓰기", + "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "shortcutOutdentSourceDescription": "소스 모드에서 들여쓰기 수준 하나 제거", + "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "shortcutEscape": "검색 닫기 또는 블록 선택 지우기", + "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "shortcutEscapeDescription": "작업공간 검색을 닫거나 편집기 모드에서 블록 선택을 취소하세요.", + "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "shortcutGroupFormatting": "서식", + "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "shortcutBoldDescription": "선택한 텍스트를 굵게 전환합니다.", + "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "shortcutItalicDescription": "선택한 텍스트에서 기울임체를 전환합니다.", + "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "shortcutUnderlineDescription": "선택한 텍스트에 밑줄을 토글합니다.", + "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "shortcutLinkDescription": "링크 삽입 또는 편집", + "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "shortcutInlineCodeDescription": "선택한 텍스트에서 인라인 코드 전환", + "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "shortcutStrikethroughDescription": "선택한 텍스트에 취소선을 토글합니다.", + "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "shortcutGroupBlocks": "블록", + "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "shortcutParagraphDescription": "현재 블록을 단락으로 설정", + "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "shortcutHeading1Description": "현재 블록을 제목 1로 설정", + "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "shortcutHeading2Description": "현재 블록을 제목 2로 설정", + "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "shortcutHeading3Description": "현재 블록을 제목 3으로 설정", + "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "shortcutHeading4Description": "현재 블록을 제목 4로 설정", + "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "shortcutHeading5Description": "현재 블록을 제목 5로 설정", + "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "shortcutHeading6Description": "현재 블록을 제목 6으로 설정", + "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "shortcutGroupLists": "목록", + "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "numberedList": "번호 매기기 목록", + "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "shortcutNumberedListDescription": "번호 매기기 목록 형식 전환", + "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "bulletedList": "글머리 기호 목록", + "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "shortcutBulletedListDescription": "글머리 기호 목록 형식 전환", + "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "checklist": "체크리스트", + "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "shortcutChecklistDescription": "체크리스트 형식 전환", + "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "shortcutGroupSidebar": "사이드바", + "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "sidebarViewMenu": "사이드바 보기", + "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "createMarkdownFile": "마크다운 파일 생성", + "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "createMarkdownFileDescription": "저장되지 않은 로컬 Markdown 문서 시작", + "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "createWritersideProject": "Writerside 프로젝트 만들기", + "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "createWritersideProjectDescription": "로컬 Writerside 호환 프로젝트 시작", + "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "defaultProjectName": "문서", + "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "defaultInstanceName": "사용자 가이드", + "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "defaultStartTopicTitle": "시작하기", + "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "projectName": "프로젝트 이름", + "@projectName": {"description":"Create project dialog field label."}, + "directoryName": "디렉토리 이름", + "@directoryName": {"description":"Create project dialog field label."}, + "instanceName": "인스턴스 이름", + "@instanceName": {"description":"Create project dialog field label."}, + "instanceId": "인스턴스 ID", + "@instanceId": {"description":"Create project dialog field label."}, + "startTopicTitle": "시작 토픽 제목", + "@startTopicTitle": {"description":"Create project dialog field label."}, + "location": "위치", + "@location": {"description":"Create dialog location section label."}, + "projectNameRequired": "프로젝트 이름이 필요합니다.", + "@projectNameRequired": {"description":"Validation message for missing project name."}, + "directoryNameRequired": "디렉터리 이름이 필요합니다.", + "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "useSingleSafeDirectoryName": "단일 안전한 디렉터리 이름을 사용하세요.", + "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "useLowercaseIdentifier": "문자, 숫자, 밑줄 또는 하이픈이 포함된 소문자 식별자를 사용하세요.", + "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "startTopicTitleRequired": "시작 토픽 제목이 필요합니다.", + "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "createWritersideProjectFailed": "Writerside 프로젝트를 생성할 수 없습니다.", + "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "settingsTitle": "BusyMark 설정", + "@settingsTitle": {"description":"Settings screen title."}, + "autoSave": "자동 저장", + "@autoSave": {"description":"Editor setting label for saving files automatically."}, + "autoSaveDescription": "짧은 유휴 지연 후에 파일 변경 사항을 자동으로 저장합니다.", + "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "wordWrap": "자동 줄 바꿈", + "@wordWrap": {"description":"Word wrap setting label."}, + "editorFontSize": "편집기 글꼴 크기", + "@editorFontSize": {"description":"Editor font size setting label."}, + "validateOnEdit": "편집할 때 검증", + "@validateOnEdit": {"description":"Validation setting label."}, + "clearRecentWorkspaces": "최근 작업공간 지우기", + "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "editingButtonsPosition": "편집 버튼 위치", + "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "editingButtonsPositionDescription": "부동 WYSIWYG 편집 버튼이 나타나는 위치를 선택합니다.", + "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "editingButtonsDirection": "편집 버튼 방향", + "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "editingButtonsDirectionDescription": "부동 WYSIWYG 편집 버튼을 수평 또는 수직으로 정렬할지 선택합니다.", + "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "horizontal": "가로", + "@horizontal": {"description":"Editing button direction option."}, + "vertical": "세로", + "@vertical": {"description":"Editing button direction option."}, + "privacy": "개인정보 보호", + "@privacy": {"description":"Settings section title for privacy options."}, + "allowRemoteImages": "원격 이미지 로드", + "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "allowRemoteImagesDescription": "Markdown 미리보기 및 편집기 이미지가 http 및 https URL에서 로드되도록 허용합니다.", + "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "clearRemoteImagePermissions": "원격 이미지 권한 초기화", + "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, + "clearRemoteImagePermissionsDescription": "원격 이미지를 로드하도록 허용된 작업공간은 잊어버리세요.", + "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "clearGitWorkspaceTrust": "신뢰할 수 있는 Git 작업공간 초기화", + "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "clearGitWorkspaceTrustDescription": "이전에 신뢰한 작업공간에서 Git 기능을 활성화하기 전에 확인하도록 설정합니다.", + "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "settingsWindowSectionTitle": "창", + "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "settingsReopenWorkspaceOnStartupTitle": "시작 시 이전 작업공간 다시 열기", + "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "settingsReopenWorkspaceOnStartupDescription": "BusyMark가 시작될 때 이전 세션의 작업공간과 탭을 엽니다.", + "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "settingsConfirmCloseWithUnsavedChangesTitle": "저장되지 않은 변경 사항이 있을 때 닫기 전에 확인", + "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "settingsConfirmCloseWithUnsavedChangesDescription": "문서에 저장되지 않은 변경 사항이 있는 경우 BusyMark를 닫기 전에 물어보세요.", + "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "closeUnsavedChangesTitle": "저장되지 않은 변경 사항", + "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "closeUnsavedChangesSingleMessage": "이 문서에는 저장되지 않은 변경사항이 있습니다. BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?", + "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?} =1{변경된 문서가 1개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?} other{변경된 문서가 {count}개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?}}", + "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "closeUnsavedChangesCancel": "취소", + "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "closeUnsavedChangesDiscard": "버리기", + "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "closeUnsavedChangesSave": "저장", + "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "currentFile": "현재 파일", + "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "unsavedChanges": "저장되지 않은 변경 사항", + "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "unsavedChangesMessage": "{fileName}에 저장되지 않은 변경사항이 있습니다. 계속하기 전에 저장하시겠습니까?", + "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "unsavedChangesMultipleMessage": "{count, plural, =1{변경된 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?} other{변경된 문서가 {count}개 있습니다. 계속하기 전에 저장하시겠습니까?}}", + "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "fileChangedOnDisk": "디스크에서 파일이 변경됨", + "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "fileChangedOnDiskMessage": "이 파일은 사용자가 연 이후 디스크에서 변경되었습니다. 덮어쓰시겠습니까?", + "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "untitledMarkdownFileName": "제목 없음.md", + "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "unorderedList": "글머리 기호 목록", + "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "orderedList": "번호 매기기 목록", + "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "taskList": "작업 목록", + "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "toggleTaskChecked": "작업 완료 상태 전환", + "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "indentListItem": "들여쓰기 목록 항목", + "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "outdentListItem": "내어쓰기 목록 항목", + "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "blockquote": "인용문", + "@blockquote": {"description":"Blockquote command label."}, + "codeBlock": "코드 블록", + "@codeBlock": {"description":"Code block command or preview label."}, + "codeBlockLanguage": "코드 블록 언어", + "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "image": "이미지", + "@image": {"description":"Image command and document kind label."}, + "video": "동영상", + "openVideo": "동영상 재생", + "pauseVideo": "동영상 일시 중지", + "videoUnavailable": "동영상을 사용할 수 없음", + "videoPreview": "동영상 미리 보기", + "diagnosticWritersideVideoMissingSource": "비디오에 src 속성이 없습니다.", + "diagnosticWritersideVideoUnsupportedSource": "지원되지 않는 비디오 소스: {source}", + "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingFile": "동영상 파일이 존재하지 않습니다: {source}", + "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingPreview": "동영상 미리보기 이미지가 존재하지 않습니다: {preview}", + "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "inlineImage": "인라인 이미지", + "@inlineImage": {"description":"Inline image command label."}, + "table": "표", + "@table": {"description":"Table command label."}, + "htmlBlock": "HTML 블록", + "@htmlBlock": {"description":"HTML block command label."}, + "htmlContentDefault": "HTML 콘텐츠", + "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "shortcutHtmlBlockDescription": "HTML 블록 삽입 또는 편집", + "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "renderedHtml": "렌더링된 HTML", + "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "editHtml": "HTML 편집", + "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "htmlSource": "HTML 소스", + "@htmlSource": {"description":"Text field label for raw HTML source."}, + "thematicBreak": "수평선", + "@thematicBreak": {"description":"Thematic break command label."}, + "bold": "굵게", + "@bold": {"description":"Bold command label."}, + "italic": "기울임꼴", + "@italic": {"description":"Italic command label."}, + "underline": "밑줄", + "@underline": {"description":"Underline command label."}, + "strikethrough": "취소선", + "@strikethrough": {"description":"Strikethrough command label."}, + "inlineCode": "인라인 코드", + "@inlineCode": {"description":"Inline code command label."}, + "link": "링크", + "@link": {"description":"Link command and preview label."}, + "hardLineBreak": "강제 줄 바꿈", + "@hardLineBreak": {"description":"Hard line break command label."}, + "textStyle": "텍스트 스타일", + "@textStyle": {"description":"Text style menu tooltip."}, + "paragraph": "단락", + "@paragraph": {"description":"Paragraph style label."}, + "heading1": "제목 1", + "@heading1": {"description":"Heading 1 style label."}, + "heading2": "제목 2", + "@heading2": {"description":"Heading 2 style label."}, + "heading3": "제목 3", + "@heading3": {"description":"Heading 3 style label."}, + "heading4": "제목 4", + "@heading4": {"description":"Heading 4 style label."}, + "heading5": "제목 5", + "@heading5": {"description":"Heading 5 style label."}, + "heading6": "제목 6", + "@heading6": {"description":"Heading 6 style label."}, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "deleteTable": "테이블 삭제", + "@deleteTable": {"description":"Tooltip for deleting a table."}, + "tableColumnNumber": "열 {columnNumber}", + "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "insertColumnLeft": "왼쪽에 열 삽입", + "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "insertColumnRight": "오른쪽에 열 삽입", + "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "deleteColumn": "열 삭제", + "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "tableAlignmentUnspecified": "정렬: 지정되지 않음", + "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "tableAlignmentLeft": "정렬: 왼쪽", + "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "tableAlignmentCenter": "정렬: 중앙", + "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "tableAlignmentRight": "정렬: 오른쪽", + "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "tableRowNumber": "행 {rowNumber}", + "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "insertRowAbove": "위에 행 삽입", + "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "insertRowBelow": "아래에 행 삽입", + "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "deleteRow": "행 삭제", + "@deleteRow": {"description":"Menu item for deleting a table row."}, + "tableHeaderHint": "헤더", + "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "tableCellHint": "셀", + "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "language": "언어", + "@language": {"description":"Code block language field label."}, + "hideEditingButtons": "편집 버튼 숨기기", + "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "showEditingButtons": "편집 버튼 표시", + "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "altText": "대체 텍스트", + "@altText": {"description":"Image alt text field label."}, + "editorPlaceholderText": "텍스트", + "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "editorPlaceholderCode": "코드", + "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "editorPlaceholderAltText": "대체 텍스트", + "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "describeTheImage": "이미지 설명", + "@describeTheImage": {"description":"Image alt text hint."}, + "columns": "열", + "@columns": {"description":"Table dialog columns field label."}, + "rows": "행", + "@rows": {"description":"Table dialog rows field label."}, + "tableHeaderNumber": "헤더 {columnNumber}", + "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "tableCellDefault": "셀", + "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "noImageSource": "이미지 소스 없음", + "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "remoteImageBlocked": "원격 이미지가 차단됨", + "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "remoteImageBlockedTooltip": "BusyMark가 원격 이미지를 로드할 수 있는지 여부를 선택합니다.", + "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "remoteImagesBlockedTitle": "원격 이미지가 차단되었습니다.", + "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "remoteImagesBlockedMessage": "이 문서는 인터넷의 이미지를 참조합니다. 이를 로드하면 이미지 호스트에 네트워크 정보가 공개될 수 있습니다.", + "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "loadRemoteImagesForWorkspace": "이 작업공간에서 로드", + "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "alwaysLoadRemoteImages": "항상 원격 이미지 로드", + "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "hideSidebar": "사이드바 패널 숨기기", + "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "showSidebar": "사이드바 패널 표시", + "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "showPreview": "미리보기 표시", + "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "hidePreview": "미리보기 숨기기", + "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "workspaceKindUnsavedMarkdown": "저장되지 않은 마크다운 파일", + "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "workspaceKindSingleMarkdown": "단일 마크다운 파일", + "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "workspaceKindMarkdownFolder": "마크다운 폴더", + "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "workspaceKindWritersideModule": "Writerside 모듈", + "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "problems": "문제", + "@problems": {"description":"Diagnostics dialog title."}, + "diagnosticCount": "{count, plural, =0{진단 없음} =1{진단 1개} other{진단 {count}개}}", + "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "files": "파일", + "@files": {"description":"Files sidebar tab label."}, + "toc": "목차", + "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "tocActions": "목차 작업", + "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "markdownUnsaved": "마크다운 - 저장되지 않음", + "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "workspaceDetail": "{kind} - {count, plural, =1{파일 1개} other{파일 {count}개}}", + "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "noFiles": "파일 없음", + "@noFiles": {"description":"Empty state shown when there are no files."}, + "newFile": "새 파일", + "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "noWritersideToc": "Writerside 목차 없음", + "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "tocSection": "목차 섹션", + "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "newTopic": "새 토픽", + "@newTopic": {"description":"Create new Writerside topic action label."}, + "newChildTopic": "새 하위 토픽", + "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "newSiblingTopic": "새 형제 토픽", + "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "renameTopicFile": "토픽 파일 이름 바꾸기", + "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "topicPlacement": "목차 배치", + "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "tocRoot": "목차 루트", + "@tocRoot": {"description":"TOC placement option for the root level."}, + "afterSelectedTopic": "선택한 토픽 뒤", + "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "insideSelectedTopic": "선택한 토픽 내부", + "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "pasteAfterTopic": "토픽 뒤에 붙여넣기", + "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "pasteAsChildTopic": "하위 토픽으로 붙여넣기", + "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "removeFromToc": "목차에서 제거", + "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "confirmRemoveFromTocTitle": "목차에서 삭제하시겠습니까?", + "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "confirmRemoveFromTocMessage": "이 목차에서 {name}을(를) 제거하시겠습니까? 토픽 파일은 유지됩니다.", + "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteTopicTitle": "토픽 파일을 삭제하시겠습니까?", + "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "confirmDeleteTopicMessage": "{name}을(를) 삭제하고 모든 목차에서 제거하시겠습니까? 이 작업은 취소할 수 없습니다.", + "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "safeDeleteTopicFile": "토픽 파일 안전 삭제…", + "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "removeTocElement": "TOC 요소 제거", + "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "reviewUsages": "사용 검토", + "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "deleteTopicFile": "토픽 파일 삭제", + "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "removeAction": "제거", + "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "topicRemovalSummary": "선택한 인스턴스에서 “{topic}”을(를) 제거합니다. 토픽 파일은 유지됩니다.", + "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "safeDeleteTopicSummary": "“{topic}”을 삭제하고 이 Writerside 프로젝트 전체에서 해당 참조를 안전하게 업데이트하세요.", + "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "childTopicsPromoted": "{count, plural, =1{하위 토픽 1개가 한 단계 위로 이동합니다.} other{하위 토픽 {count}개가 한 단계 위로 이동합니다.}}", + "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "topicIsStartPageRemovalWarning": "이 토픽은 인스턴스 시작 페이지로 사용됩니다. 계속하기 전에 사용처를 검토하고 다른 시작 페이지를 지정하세요.", + "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "topicUsagesCount": "사용처 ({count})", + "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "noBreakingTopicUsages": "깨질 수 있는 참조가 발견되지 않았습니다.", + "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "topicUsagesFound": "BusyMark에서 이 토픽에 대한 다음 참조를 찾았습니다.", + "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "topicUsageTocElements": "목차 요소", + "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "topicUsageStartPages": "시작 페이지", + "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "topicUsageTopicLinks": "토픽 링크", + "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, + "topicUsageIncludes": "포함", + "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "usageCount": "{count, plural, =1{사용처 1개} other{사용처 {count}개}}", + "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "refactoringOptions": "리팩토링 옵션", + "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "updateUsagesAutomatically": "자동으로 사용량 업데이트", + "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, + "updateUsagesAutomaticallyDescription": "목차 참조 및 포함을 제거하고 링크 텍스트를 유지합니다.", + "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "manualUsageUpdatesRequired": "일부 사용처는 이 리팩터링 전에 수동으로 변경해야 합니다.", + "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "setRedirectTo": "다음으로 리디렉션 설정", + "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "noRedirectDescription": "이전에 게시된 페이지를 리디렉션하지 마세요.", + "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "redirectTarget": "대상 리디렉션", + "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "remainingUsagesBlockRemoval": "계속하기 전에 남은 사용처를 검토하고 업데이트하거나, 가능한 경우 자동 업데이트를 활성화하세요.", + "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "usagesOfTopic": "{topic}의 사용처", + "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "noUsagesFound": "사용처를 찾을 수 없습니다.", + "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "outsideSelectedInstance": "선택한 인스턴스 외부", + "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "doRefactor": "리팩토링 수행", + "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "orphanTopicTitle": "토픽 파일이 더 이상 사용되지 않습니다.", + "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "keepTopicFile": "토픽 파일 유지", + "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "orphanTopicMessage": "\"{topic}\"은(는) 이 Writerside 프로젝트의 어느 곳에서도 더 이상 사용되지 않습니다. 파일을 삭제하거나 다른 인스턴스에서 사용할 수 있도록 보관하세요.", + "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "defaultNewTopicTitle": "새 토픽", + "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "topicTitle": "토픽 제목", + "@topicTitle": {"description":"Create topic dialog field label."}, + "fileName": "파일 이름", + "@fileName": {"description":"Create topic dialog field label."}, + "topicTitleRequired": "토픽 제목이 필요합니다.", + "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "fileNameRequired": "파일 이름은 필수입니다.", + "@fileNameRequired": {"description":"Validation message for missing file name."}, + "rename": "이름 바꾸기", + "@rename": {"description":"Rename command label."}, + "confirmDeleteFileTitle": "파일을 삭제하시겠습니까?", + "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "confirmDeleteFolderTitle": "폴더를 삭제하시겠습니까?", + "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "confirmDeleteFileMessage": "{name}을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteFolderMessage": "{name} 및 그 안의 모든 파일을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "useSingleSafeFileName": "하나의 안전한 파일 이름을 사용하십시오.", + "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "useExpectedExtension": "선택한 형식에 대해 {extension} 확장자를 사용하세요.", + "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "useIdentifierCharacters": "확장자 앞에 문자, 숫자, 밑줄 또는 하이픈을 사용하십시오.", + "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "topicIdAlreadyExists": "토픽 ID가 이미 존재합니다.", + "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "createWritersideTopicFailed": "Writerside 토픽을 생성할 수 없습니다.", + "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "noOutline": "개요 없음", + "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "expandKind": "{kind} 펼치기", + "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "collapseKind": "{kind} 접기", + "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "foldKindSection": "부분", + "@foldKindSection": {"description":"Fold kind label for a section."}, + "foldKindList": "목록", + "@foldKindList": {"description":"Fold kind label for a list."}, + "foldKindQuote": "인용하다", + "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "foldKindTag": "꼬리표", + "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "sourceSearchPreviousMatch": "이전 일치 항목", + "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "sourceSearchNextMatch": "다음 일치 항목", + "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "sourceSearchCaseSensitive": "대소문자 구분", + "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "sourceSearchWholeWord": "전체 단어", + "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "sourceSearchRegex": "정규식", + "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "sourceSearchReplacement": "다음으로 바꾸기", + "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, + "sourceSearchReplaceCurrent": "현재 항목 바꾸기", + "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "sourceSearchReplaceAndFindNext": "바꾸고 다음 찾기", + "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "sourceSearchReplaceAll": "모두 바꾸기", + "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "workspaceReplace": "작업공간에서 바꾸기", + "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "reviewReplacements": "바꾸기 결과 검토", + "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "applyReplacements": "바꾸기 적용", + "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "skippedFiles": "건너뛴 파일", + "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "workspaceReplaceDirtyBuffer": "저장되지 않은 편집기 콘텐츠", + "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "workspaceReplaceDiskContent": "저장된 디스크 내용", + "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "selectFileMatches": "{count}개 일치 항목 모두 선택", + "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "workspaceReplaceApplied": "{files}개 파일에서 {matches}개 일치 항목을 바꿨습니다. {skipped}개는 건너뛰었습니다.", + "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · 마지막 개행", + "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · 마지막 개행 없음", + "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "normalizeLineEndings": "줄 끝 표준화", + "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "mixedLineEndingsSavePrompt": "이 문서에는 혼합된 줄 끝이 포함되어 있습니다. 형식을 선택하세요.", + "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "workspaceReplaceMixedLineEndings": "{fileName}에서 줄바꿈 형식이 섞여 있습니다. 바꾸기 전에 사용할 형식을 선택하세요.", + "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "workspaceReplaceIssueOversized": "크기가 큰 파일을 건너뛰었습니다.", + "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "workspaceReplaceIssueUnreadable": "읽을 수 없는 파일을 건너뛰었습니다.", + "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "workspaceReplaceIssueInvalidUtf8": "유효한 UTF-8이 아닌 파일을 건너뛰었습니다.", + "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "workspaceReplaceIssueTruncated": "바꾸기 미리 보기가 잘렸습니다.", + "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "workspaceReplaceIssueFileChanged": "미리보기 이후에 변경된 파일을 건너뛰었습니다.", + "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "workspaceReplaceIssueBufferChanged": "미리보기 이후에 변경된 편집기 버퍼를 건너뛰었습니다.", + "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "workspaceReplaceIssueNormalizationRequired": "바꾸기 전에 LF 또는 CRLF 정규화를 선택하세요.", + "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "workspaceReplaceIssuePartialConflict": "파일이 동시에 변경되어 롤백이 중지되었습니다. 일부 바꾸기 결과가 남아 있을 수 있습니다. 기존 내용은 아래 경로에 보존되었습니다.", + "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "workspaceReplaceIssueApplyFailed": "검토한 바꾸기 결과를 커밋할 수 없습니다. 파일은 변경되지 않았습니다.", + "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "externalChangesTitle": "외부 변경 사항 — {fileName}", + "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "externalFileDeleted": "이 파일은 디스크에서 삭제되었습니다.", + "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "externalFileChanged": "저장되지 않은 수정사항이 있는 동안 이 파일이 디스크에서 변경되었습니다.", + "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, + "recoveredDocumentReview": "{fileName}의 저장되지 않은 콘텐츠를 복구했습니다. 검토한 후 저장, 다른 이름으로 저장 또는 삭제하세요.", + "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "compare": "비교", + "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "reloadFromDisk": "디스크에서 다시 불러오기", + "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "keepMine": "내 변경 사항 유지", + "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "saveAs": "다른 이름으로 저장", + "@saveAs": {"description":"Action that saves the current document to another path."}, + "sourceSearchInvalidRegex": "잘못된 정규식", + "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "sourceLargeFileFeaturesPaused": "대용량 파일: 강조 표시 및 접기가 일시 중지됩니다.", + "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "nothingToRead": "읽을 내용 없음", + "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, + "admonition": "주의 사항", + "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "quote": "인용", + "@quote": {"description":"Label for a neutral Writerside quote block."}, + "note": "참고", + "@note": {"description":"Preview label for a note admonition."}, + "tip": "팁", + "@tip": {"description":"Preview label for a tip admonition."}, + "warning": "경고", + "@warning": {"description":"Preview label for a warning admonition."}, + "tabs": "탭", + "@tabs": {"description":"Preview label for a tabs block."}, + "tab": "탭", + "@tab": {"description":"Preview label for a tab block."}, + "procedure": "절차", + "@procedure": {"description":"Preview label for a procedure block."}, + "step": "단계", + "@step": {"description":"Preview label for a procedure step."}, + "topic": "토픽", + "@topic": {"description":"Preview label for a topic element."}, + "chapter": "장", + "@chapter": {"description":"Preview label for a chapter element."}, + "couldNotOpenTarget": "{target}을(를) 열 수 없습니다.", + "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "linkTargetNotFound": "링크 대상을 찾을 수 없습니다: {targetPath}", + "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "cannotOpenFileTypeInEditor": "이 파일 형식을 편집기에서 열 수 없습니다", + "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "anchorNotFound": "앵커를 찾을 수 없음: {anchor}", + "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "noProblemsFound": "문제가 발견되지 않음", + "@noProblemsFound": {"description":"Diagnostics empty state."}, + "noResults": "결과 없음", + "@noResults": {"description":"Search empty state."}, + "searchResultLine": "{relativePath} - {lineNumber}번째 줄", + "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "untitledResult": "제목 없는 결과", + "@untitledResult": {"description":"Fallback search result title."}, + "documentKindMarkdownFile": "마크다운 파일", + "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "documentKindWritersideMarkdownTopic": "Writerside Markdown 토픽", + "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "documentKindWritersideXmlTopic": "Writerside XML 토픽", + "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "documentKindWritersideTree": "Writerside 트리", + "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "documentKindConfigurationFile": "구성 파일", + "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "documentKindVariablesFile": "변수 파일", + "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "documentKindCategoriesFile": "카테고리 파일", + "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "documentKindResourceFile": "리소스 파일", + "@documentKindResourceFile": {"description":"Search result document kind label."}, + "workspaceErrorOpenFailed": "열기 실패: {error}", + "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideProjectFailed": "Writerside 프로젝트를 생성할 수 없습니다: {error}", + "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideTopicFailed": "Writerside 토픽을 생성할 수 없습니다: {error}", + "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCouldNotOpenFile": "파일을 열 수 없습니다: {error}", + "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorChooseWhereToSaveMarkdown": "이 마크다운 파일을 저장할 위치를 선택하세요.", + "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "workspaceErrorSaveBlockedFileChangedOnDisk": "저장이 차단되었습니다. 디스크에서 파일이 변경되었습니다.", + "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "workspaceErrorSaveFailed": "저장 실패: {error}", + "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorFileOperationFailed": "파일 작업 실패: {error}", + "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorValidationFailed": "검증 실패: {error}", + "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceRecoveryRestored": "{count, plural, =1{저장되지 않은 문서 1개를 복구했습니다. 저장하거나 삭제하기 전에 검토하세요.} other{저장되지 않은 문서 {count}개를 복구했습니다. 각 문서를 저장하거나 삭제하기 전에 검토하세요.}}", + "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "workspaceRecoveryDamaged": "{count, plural, =1{손상된 복구 기록 1개를 복원하지 못했습니다. 검사를 위해 원본 복구 파일을 보존했습니다.} other{손상된 복구 기록 {count}개를 복원하지 못했습니다. 유효한 복구 기록은 계속 사용할 수 있습니다.}}", + "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "errorPathDoesNotExist": "경로가 존재하지 않습니다: {path}", + "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetDirectoryNotEmpty": "대상 디렉터리가 이미 존재하며 비어 있지 않습니다: {path}", + "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetPathNotDirectory": "대상 경로가 이미 존재하며 디렉터리가 아닙니다: {path}", + "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "errorGeneratedFileAlreadyExists": "생성된 파일이 이미 존재합니다: {path}", + "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "errorParentDirectoryRequired": "상위 디렉터리가 필요합니다.", + "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "errorParentDirectoryMissing": "상위 디렉터리가 존재하지 않습니다: {path}", + "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "errorDirectoryMissing": "디렉터리가 존재하지 않습니다: {path}", + "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "errorPathAlreadyExists": "경로가 이미 존재합니다: {path}", + "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "errorFileNameRequired": "파일 이름은 필수입니다.", + "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "errorFileNameUnsafe": "파일 이름은 단일 안전 경로 세그먼트여야 합니다.", + "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "errorFileOperationInvalidTarget": "폴더를 폴더 자체로 이동할 수 없습니다.", + "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "errorFileOperationOutsideRoot": "파일 작업은 작업공간 내부에서 수행해야 합니다.", + "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "errorFileOperationRoot": "작업공간 루트는 파일 트리에서 변경할 수 없습니다.", + "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "errorProjectNameRequired": "프로젝트 이름이 필요합니다.", + "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "errorDirectoryNameRequired": "디렉터리 이름이 필요합니다.", + "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "errorDirectoryNameUnsafe": "디렉터리 이름은 단일 안전 경로 세그먼트여야 합니다.", + "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "errorInstanceIdInvalid": "인스턴스 ID는 소문자로 시작해야 하며 소문자, 숫자, 밑줄, 하이픈만 포함할 수 있습니다.", + "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "errorTopicFileInvalid": "토픽 파일 이름은 경로 구분 기호가 없는 Markdown 파일 이름이어야 합니다.", + "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "errorTopicTitleRequired": "토픽 제목이 필요합니다.", + "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "errorWritersideModuleRootMissing": "Writerside 모듈 루트가 존재하지 않습니다: {path}", + "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideModuleNotOpen": "토픽을 생성하려면 Writerside 모듈이 열려 있어야 합니다.", + "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "errorWritersideInstanceTreeMissing": "Writerside 모듈에는 인스턴스 트리가 없습니다.", + "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "errorWritersideTreeFileMissing": "Writerside 트리 파일이 존재하지 않습니다: {path}", + "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "errorTopicIdAlreadyExists": "이 도움말 모듈에는 토픽 ID \"{topicId}\"가 이미 있습니다.", + "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "errorTopicFileAlreadyExists": "토픽 파일이 이미 존재합니다: {path}", + "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "errorReferenceTopicMissing": "선택한 트리에 참조 토픽이 없습니다: {topic}", + "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideTocNodeMissing": "선택한 목차 항목이 더 이상 존재하지 않습니다.", + "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "errorWritersideTocInvalidMove": "TOC 항목은 자체 항목이나 해당 하위 항목 중 하나로 이동할 수 없습니다.", + "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "errorWritersideStartTopicDelete": "시작 토픽 {topic}을(를) 삭제할 수 없습니다. 먼저 다른 시작 페이지를 선택하세요.", + "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideSafeDeleteRequired": "Writerside 토픽 파일에는 안전 삭제를 사용하세요.", + "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "errorWritersideTopicUsageScanFailed": "토픽 사용처 검색을 완료할 수 없습니다. 변경된 파일이 없습니다.", + "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "errorWritersideTopicUsagesRemain": "일부 토픽 사용처는 여전히 검토가 필요합니다. 계속하기 전에 확인하세요.", + "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "errorWritersideRedirectInvalid": "선택한 리디렉션 대상이 더 이상 유효하지 않습니다. 다시 선택하세요.", + "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "errorWritersideRollbackFailed": "토픽 삭제를 완전히 롤백할 수 없습니다. 계속하기 전에 다음 경로를 검토하세요. {paths}", + "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "errorTopicsRootUnsafe": "토픽 루트는 안전한 상대 디렉터리여야 합니다.", + "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "errorTopicFileNameUnsafe": "토픽 파일 이름은 안전한 단일 경로 세그먼트여야 합니다.", + "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "errorTopicFileExtensionMismatch": "토픽 파일 확장자는 선택한 형식({extension})과 일치해야 합니다.", + "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "errorTopicFileNameInvalid": "토픽 파일 이름에는 문자, 숫자, 밑줄, 하이픈만 포함해야 합니다.", + "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "errorUnknown": "알 수 없는 오류: {code}", + "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "diagnosticWorkspaceFileStatFailed": "파일 메타데이터를 읽을 수 없습니다: {error}", + "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceScanSkipped": "큰 작업공간이 감지되었습니다. 앱의 응답성을 유지하기 위해 일부 파일을 건너뛰었습니다.", + "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "diagnosticWorkspaceScanInspectFailed": "작업공간 항목을 검사할 수 없습니다: {error}", + "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceFileTooLarge": "파일이 자동 파싱 한도를 초과했습니다.", + "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "diagnosticWorkspaceFileReadFailed": "Markdown 파일을 읽을 수 없습니다: {error}", + "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticMarkdownAttributeMalformed": "잘못된 Writerside 제목 속성 블록입니다.", + "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "diagnosticMarkdownHeadingDuplicateId": "제목 ID \"{id}\"이(가) 중복되었습니다.", + "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTopicH1ConvertedToChapter": "추가 최상위 H1 제목은 장으로 처리됩니다.", + "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown 토픽에는 H1 또는 머리말 제목이 없습니다.", + "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "diagnosticWritersideXmlTopicMissingTitle": "XML 토픽에 제목이 없습니다.", + "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "diagnosticWritersideTopicFileMissingTitle": "\"{fileName}\" 토픽에 제목이 없습니다.", + "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, + "diagnosticMarkdownFrontMatterMalformed": "머리말이 닫히지 않았습니다.", + "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "diagnosticMarkdownRawHtmlUnsafe": "안전하지 않은 HTML 요소.", + "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "diagnosticMarkdownLinkUnresolvedTarget": "링크 대상이 존재하지 않습니다: {targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "diagnosticMarkdownLinkUnresolvedAnchor": "앵커 \"{anchor}\"이(가) 존재하지 않습니다.", + "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "diagnosticMarkdownImageMissingAlt": "이미지 \"{destination}\"에 대체 텍스트가 없습니다.", + "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticMarkdownImageMissingFile": "이미지가 존재하지 않습니다: {destination}", + "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticInvalidXml": "잘못된 XML: {message}", + "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "diagnosticWritersideConfigInvalidRoot": "writerside.cfg 루트는 여야 합니다.", + "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "diagnosticWritersideConfigMissingSnippetsSrc": "스니펫 선언에 src가 없습니다.", + "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "인스턴스 그룹 선언에 src가 없습니다.", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "diagnosticWritersideConfigInvalidKeymapsMode": "지원되지 않는 키맵 모드: {mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceSrc": "인스턴스 선언에 src가 없습니다.", + "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg는 인스턴스를 등록하지 않습니다.", + "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "diagnosticWritersideTreeInvalidRoot": ".tree 루트는 이어야 합니다.", + "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "diagnosticWritersideTreeMissingId": "인스턴스 프로필에 ID가 없습니다.", + "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "diagnosticWritersideTreeIdMismatch": "트리 파일의 기본 이름이 인스턴스 ID \"{id}\"와 일치하지 않습니다.", + "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingStartPage": "라이브러리가 아닌 인스턴스에 시작 페이지가 없습니다.", + "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "diagnosticWritersideStartPageMissing": "시작 페이지 \"{startPage}\"이(가) 존재하지 않습니다.", + "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "diagnosticWritersideTreeDuplicateTopic": "이 인스턴스 목차에 \"{topic}\" 토픽이 두 번 이상 나타납니다.", + "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideVariableMalformedDeclaration": "변수 선언에는 이름과 값이 있어야 합니다.", + "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "diagnosticWritersideVariableDuplicateName": "\"{name}\" 변수가 두 번 이상 선언되었습니다.", + "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideCategoryMissingId": "카테고리에 ID가 없습니다.", + "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "diagnosticWritersideCategoryDuplicateId": "카테고리 \"{id}\"이(가) 두 번 이상 선언되었습니다.", + "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideCategoryDuplicateOrder": "카테고리 순서 \"{order}\"이(가) 두 번 이상 선언되었습니다.", + "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "diagnosticWritersideTopicInvalidRoot": ".topic 루트는 이어야 합니다.", + "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "diagnosticWritersideTopicMissingRootId": "XML 토픽에 루트 ID가 없습니다.", + "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "diagnosticWritersideTopicRootIdMismatch": "XML 토픽 루트 ID \"{id}\"는 파일 이름 \"{expectedId}\"와 일치해야 합니다.", + "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateElementId": "요소 ID \"{elementId}\"이(가) 두 번 이상 나타납니다.", + "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "diagnosticWritersideTopicAnchorMissingHref": "에 href가 없습니다.", + "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "diagnosticWritersideConfigMissing": "Writerside 모드에는writerside.cfg가 필요합니다.", + "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "구성된 빌드 구성 디렉터리가 누락되었습니다: {relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "구성된 API 사양 디렉터리가 누락되었습니다: {relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingSnippetsDirectory": "구성된 스니펫 디렉터리가 누락되었습니다: {relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingVarsFile": "구성된 변수 파일이 누락되었습니다: {relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingCategoriesFile": "구성된 카테고리 파일이 누락되었습니다: {relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "구성된 인스턴스 그룹 파일이 누락되었습니다: {relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceTree": "등록된 인스턴스 트리 \"{source}\"이(가) 존재하지 않습니다.", + "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideTopicReadFailed": "토픽 파일을 읽을 수 없습니다: {error}", + "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "기본 토픽 디렉터리가 누락되었습니다: {relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicsDirectoryMissing": "구성된 토픽 디렉터리가 누락되었습니다: {relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideImagesDirectoryMissing": "구성된 이미지 디렉터리가 누락되었습니다: {relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateId": "요소 ID \"{id}\"이(가) 두 번 이상 나타납니다.", + "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingTopic": "목차에서 \"{topic}\" 토픽이 누락되었습니다.", + "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideTreeInvalidHref": "외부 href \"{href}\"이(가) 잘못되었습니다.", + "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "diagnosticWritersideVariableUnresolved": "변수 \"%{name}%\"이(가) 선언되지 않았습니다.", + "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideTopicLinkUnresolved": "토픽 링크 \"{destination}\"을 확인할 수 없습니다.", + "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticWritersideAnchorUnresolved": "\"{targetName}\" 앵커 \"{anchor}\"이(가) 존재하지 않습니다.", + "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, + "diagnosticWritersideIncludeMissingFrom": "가 누락되었습니다.", + "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, + "diagnosticWritersideIncludeSourceMissing": "포함 소스 \"{from}\"이(가) 존재하지 않습니다.", + "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "diagnosticWritersideIncludeElementMissing": "포함 요소 \"{elementId}\"이(가) \"{from}\"에 존재하지 않습니다.", + "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, + "diagnosticWritersideCategoryUnresolved": "또한 카테고리 \"{ref}\"가 선언되지 않았습니다.", + "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "diagnosticWritersideTopicAmbiguousReference": "토픽 참조 \"{reference}\"이(가) 모호합니다.", + "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "diagnosticUnknown": "알 수 없는 진단: {code}", + "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, + "close": "닫다", + "@close": {"description":"Close action label."}, + "git": "Git", + "@git": {"description":"Git sidebar tab label."}, + "gitDiff": "Git diff", + "@gitDiff": {"description":"Title for the Git diff viewer."}, + "gitShowDiff": "diff 표시", + "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "gitDiffHunkRange": "이전 {oldRange} → 새 {newRange}", + "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "gitDiffNoLines": "줄 없음", + "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "gitUnavailableTitle": "Git을 사용할 수 없음", + "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "gitUnavailableMessage": "{reason, select, other{Git을 설치하거나 BusyMark가 사용할 수 있는 Git 실행 파일을 구성하세요. {reason}}}", + "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "gitTrustRequiredTitle": "Git에 대한 이 작업공간을 신뢰하시나요?", + "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "gitTrustRequiredMessage": "Git 저장소는 후크, 필터 및 기타 구성을 통해 프로그램을 실행할 수 있습니다. BusyMark가 저장소 데이터를 읽거나 Git 작업을 활성화하기 전에 이 작업공간을 신뢰하세요.", + "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "gitTrustWorkspace": "작업공간 신뢰", + "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "gitNotRepositoryTitle": "Git 저장소가 아님", + "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "gitNotRepositoryMessage": "이 작업공간은 Git 저장소 내부에 없습니다.", + "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "gitInitializeRepository": "저장소 초기화", + "@gitInitializeRepository": {"description":"Action label for git init."}, + "gitDetachedHead": "분리된 HEAD", + "@gitDetachedHead": {"description":"Detached HEAD label."}, + "gitDetachedHeadAt": "{commit}에 분리됨", + "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "gitNoUpstream": "업스트림 없음", + "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "gitAheadCount": "{count, plural, =1{푸시하지 않은 커밋 1개} other{푸시하지 않은 커밋 {count}개}}", + "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "gitBehindCount": "{count, plural, =1{가져올 커밋 1개} other{가져올 커밋 {count}개}}", + "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, + "gitClean": "깨끗함", + "@gitClean": {"description":"Git clean state label."}, + "gitConflicts": "충돌", + "@gitConflicts": {"description":"Git conflicts group label."}, + "gitChanges": "변경 사항", + "@gitChanges": {"description":"Git changes view label."}, + "gitStaged": "스테이징됨", + "@gitStaged": {"description":"Git staged changes group label."}, + "gitUnstaged": "스테이징되지 않음", + "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "gitHistory": "기록", + "@gitHistory": {"description":"Git history view label."}, + "gitBranches": "브랜치", + "@gitBranches": {"description":"Git branch menu label."}, + "gitActions": "Git 작업", + "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "gitPull": "Pull", + "@gitPull": {"description":"Git pull action label."}, + "gitFetch": "Fetch", + "@gitFetch": {"description":"Git fetch action label."}, + "gitPush": "Push", + "@gitPush": {"description":"Git push action label."}, + "gitCommit": "Commit", + "@gitCommit": {"description":"Git commit action label."}, + "gitSelectForCommit": "파일 스테이징", + "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "gitRemoveFromCommit": "파일 스테이징 해제", + "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "gitDiscard": "롤백", + "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "gitOpenFile": "파일 열기", + "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "gitMarkResolved": "해결됨으로 표시", + "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "gitUntracked": "추적되지 않음", + "@gitUntracked": {"description":"Git untracked files group label."}, + "gitCommitMessage": "커밋 메시지", + "@gitCommitMessage": {"description":"Commit message field label."}, + "gitCommitSelectedFiles": "선택한 파일", + "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "gitCommitNoSelectedFiles": "커밋하기 전에 하나 이상의 파일을 준비하세요.", + "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "gitStagedFileCount": "{count, plural, =1{스테이징된 파일 1개} other{스테이징된 파일 {count}개}}", + "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "gitOutsideWorkspace": "작업공간 외부", + "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "gitCommitMessageRequired": "커밋 메시지를 입력하세요.", + "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "gitCreateBranch": "브랜치 만들기", + "@gitCreateBranch": {"description":"Git create branch action label."}, + "gitNewBranch": "새 브랜치", + "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "gitBranchName": "브랜치 이름", + "@gitBranchName": {"description":"Branch name field label."}, + "gitSwitchBranch": "전환", + "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "gitNoChanges": "변경 사항 없음", + "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "gitNoHistory": "기록 없음", + "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "gitNoBranches": "브랜치 없음", + "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "gitNoDiff": "표시할 diff 없음", + "@gitNoDiff": {"description":"Git diff empty state."}, + "gitBinaryFile": "바이너리 파일. BusyMark는 바이너리 패치를 렌더링하지 않습니다.", + "@gitBinaryFile": {"description":"Git diff binary file message."}, + "gitBinaryFileInfo": "바이너리 파일({size}바이트). BusyMark는 바이너리 패치를 렌더링하지 않습니다.", + "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "gitUnsavedChangesBanner": "저장되지 않은 편집기 변경 사항은 저장될 때까지 포함되지 않습니다.", + "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, + "gitConfirmDiscardTitle": "Git 변경사항을 삭제하시겠습니까?", + "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "gitConfirmDiscardTracked": "{count, plural, =1{선택한 추적 파일의 스테이징 및 비스테이징 변경 사항이 모두 HEAD로 복원됩니다.} other{선택한 추적 파일의 스테이징 및 비스테이징 변경 사항이 모두 HEAD로 복원됩니다.}}", + "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardUntracked": "{count, plural, =1{선택한 추적되지 않은 파일이 삭제됩니다.} other{선택한 추적되지 않은 파일이 삭제됩니다.}}", + "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardMixed": "{count, plural, =1{선택한 파일이 Git 상태에 따라 복원되거나 삭제됩니다.} other{선택한 파일이 Git 상태에 따라 복원되거나 삭제됩니다.}}", + "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmSwitchBranchTitle": "{branch}로 전환하시겠습니까?", + "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "gitConfirmSwitchBranchMessage": "Git에서 브랜치를 전환한 후 BusyMark가 디스크에서 작업공간을 다시 불러옵니다.", + "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "gitConfirmPushSetUpstreamTitle": "업스트림 분기를 설정하시겠습니까?", + "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "gitConfirmPushSetUpstreamMessage": "이 브랜치에는 업스트림이 없습니다. 원격 저장소가 정확히 하나 구성된 경우 BusyMark에서 {branch}를 푸시하고 업스트림을 설정할 수 있습니다.", + "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "gitProjectHistory": "프로젝트 이력", + "@gitProjectHistory": {"description":"Project history action label."}, + "gitFileHistory": "파일 기록", + "@gitFileHistory": {"description":"Current file history action label."}, + "gitFileHistoryRequiresOpenFile": "파일 기록을 사용하려면 열려 있는 Markdown 파일이 필요합니다.", + "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "gitLoadMore": "더 로드하기", + "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "gitChangesInCommit": "이 커밋의 변경 사항", + "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, + "gitCompareWithCurrent": "현재와 ​​비교", + "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "gitRestoreVersion": "이 버전을 복원하세요", + "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "gitConfirmRestoreTitle": "이 파일 버전을 복원하시겠습니까?", + "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "gitConfirmRestoreMessage": "BusyMark는 현재 작업 트리 파일을 선택한 커밋된 버전으로 대체합니다. 복원된 파일은 스테이지되지 않은 상태로 유지됩니다.", + "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "gitCommitActions": "커밋 작업", + "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "gitResetCurrentBranchToHere": "현재 분기를 여기로 재설정합니다…", + "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "gitResetCurrentBranchTitle": "{branch}을(를) {commit}(으)로 재설정하시겠습니까?", + "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitResetCurrentBranchMessage": "그러면 {branch} 분기가 {commit} 커밋으로 이동됩니다. Git이 인덱스와 작업 트리를 업데이트하는 방법을 선택하세요.", + "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitReset": "재설정", + "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "gitResetModeSoft": "소프트", + "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "gitResetModeSoftDescription": "브랜치만 이동합니다. 인덱스와 작업 트리는 변경하지 않습니다. 선택한 커밋과의 차이점은 스테이징된 상태로 유지됩니다.", + "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "gitResetModeMixed": "혼합", + "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "gitResetModeMixedDescription": "브랜치를 이동하고 인덱스를 재설정합니다. 작업 트리는 변경하지 않으며 차이점은 스테이징되지 않은 상태로 남습니다.", + "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "gitResetModeHard": "하드", + "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "gitResetModeHardDescription": "브랜치를 이동하고 인덱스와 작업 트리를 재설정합니다. 추적된 변경 사항은 삭제되며, 방해가 되는 추적되지 않은 파일은 삭제될 수 있습니다.", + "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "gitResetModeKeep": "유지", + "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "gitResetModeKeepDescription": "로컬 변경 사항을 유지하면서 분기를 이동하고 추적된 파일을 재설정합니다. 해당 변경 사항이 재설정과 충돌하면 Git이 중단됩니다.", + "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "fileActions": "파일 작업", + "@fileActions": {"description":"Tooltip for a file action menu."}, + "actions": "작업", + "@actions": {"description":"Tooltip for a general action menu."}, + "gitStatusAdded": "추가됨", + "@gitStatusAdded": {"description":"Git file status label."}, + "gitStatusDeleted": "삭제됨", + "@gitStatusDeleted": {"description":"Git file status label."}, + "gitStatusRenamed": "이름 변경됨", + "@gitStatusRenamed": {"description":"Git file status label."}, + "gitStatusCopied": "복사됨", + "@gitStatusCopied": {"description":"Git file status label."}, + "gitStatusUntracked": "추적되지 않음", + "@gitStatusUntracked": {"description":"Git file status label."}, + "gitStatusConflicted": "충돌함", + "@gitStatusConflicted": {"description":"Git file status label."}, + "gitStatusIgnored": "무시됨", + "@gitStatusIgnored": {"description":"Git file status label."}, + "gitStatusTypeChanged": "유형 변경됨", + "@gitStatusTypeChanged": {"description":"Git file status label."}, + "gitStatusModified": "수정됨", + "@gitStatusModified": {"description":"Git file status label."}, + "gitStatusUnknown": "알 수 없음", + "@gitStatusUnknown": {"description":"Git file status label."}, + "gitErrorUnavailable": "Git을 사용할 수 없습니다.", + "@gitErrorUnavailable": {"description":"Git error message."}, + "gitErrorNotRepository": "이 작업공간은 Git 저장소가 아닙니다.", + "@gitErrorNotRepository": {"description":"Git error message."}, + "gitErrorUnsafePath": "BusyMark가 안전하지 않은 Git 경로를 차단했습니다.", + "@gitErrorUnsafePath": {"description":"Git error message."}, + "gitErrorInvalidBranchName": "유효한 브랜치 이름을 입력하세요.", + "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "gitErrorNoRemote": "Git 원격이 구성되지 않았습니다.", + "@gitErrorNoRemote": {"description":"Git error message."}, + "gitErrorNoUpstream": "업스트림 분기가 구성되지 않았습니다.", + "@gitErrorNoUpstream": {"description":"Git error message."}, + "gitErrorMultipleRemotes": "여러 원격 저장소가 구성되어 있습니다. 이 BusyMark 버전 외부에서 업스트림을 선택하세요.", + "@gitErrorMultipleRemotes": {"description":"Git error message."}, + "gitErrorDirtyWorkspace": "분기를 전환하기 전에 BusyMark 편집기 변경 사항을 저장하거나 삭제하세요.", + "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "gitErrorResetDirtyWorkspace": "현재 브랜치를 재설정하기 전에 BusyMark 편집기 변경 사항을 저장하거나 버리세요.", + "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "gitErrorRestoreStagedFile": "기록 버전을 복원하기 전에 이 파일을 스테이지 해제하세요.", + "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "gitErrorResetDetachedHead": "재설정하기 전에 브랜치를 체크아웃하세요.", + "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "gitErrorDiverged": "브랜치가 분기되었습니다. 이 BusyMark 버전 외부에서 병합 또는 리베이스를 해결하세요.", + "@gitErrorDiverged": {"description":"Git error message."}, + "gitErrorAuthorIdentity": "Git을 커밋하려면 작성자 이름과 이메일 주소가 필요합니다.", + "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "gitAuthorIdentityTitle": "Git 작성자 ID", + "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "gitAuthorIdentityMessage": "Git이 커밋 시 기록해야 하는 ID를 입력하세요. BusyMark는 이를 저장하고 이 커밋을 다시 시도합니다.", + "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "gitAuthorName": "이름", + "@gitAuthorName": {"description":"Git commit author name field label."}, + "gitAuthorEmail": "이메일", + "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "gitAuthorIdentityGlobal": "모든 저장소에 사용", + "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "gitAuthorIdentityGlobalDescription": "Snap으로 설치하면 BusyMark에서 열린 저장소에 적용됩니다.", + "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "gitSaveIdentityAndCommit": "ID 저장 및 커밋", + "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "gitErrorAuthentication": "Git 인증에 실패했습니다.", + "@gitErrorAuthentication": {"description":"Git error message."}, + "gitErrorNetwork": "Git 네트워크 작업이 실패했습니다.", + "@gitErrorNetwork": {"description":"Git error message."}, + "gitErrorConflict": "Git이 해결되지 않은 충돌을 보고했습니다.", + "@gitErrorConflict": {"description":"Git error message."}, + "gitErrorCommandFailed": "Git 명령이 실패했습니다.", + "@gitErrorCommandFailed": {"description":"Git error message."}, + "markdownAndHtml": "Markdown 및 HTML", + "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "markdownHtmlMarkdownBlocks": "Markdown 블록", + "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "markdownHtmlMarkdownBlocksDescription": "Markdown 소스 및 미리보기에서 블록 구조가 지원됩니다.", + "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "markdownHtmlInlineFormatting": "인라인 Markdown", + "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "markdownHtmlInlineFormattingDescription": "단락, 목록 항목 및 표 셀 내부에 나타날 수 있는 서식입니다.", + "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "markdownHtmlRawHtmlBlocks": "원시 HTML 블록", + "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "markdownHtmlRawHtmlBlocksDescription": "BusyMark 미리보기 위젯을 통해 렌더링되는 안전한 블록 수준 HTML 태그입니다.", + "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "markdownHtmlRawHtmlInline": "원시 HTML 인라인 태그", + "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "markdownHtmlRawHtmlInlineDescription": "리터럴 태그를 표시하지 않고 렌더링되는 안전한 인라인 HTML 태그입니다.", + "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "markdownHtmlSafety": "안전 규칙", + "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "markdownHtmlSafetyDescription": "원시 HTML은 미리 보기 렌더링 전에 구문 분석되고 정리됩니다.", + "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "markdownHtmlHeadings": "제목", + "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "markdownHtmlParagraphs": "단락", + "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "markdownHtmlLists": "목록", + "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "markdownHtmlHtmlContainers": "컨테이너", + "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "markdownHtmlHtmlTextBlocks": "텍스트 블록", + "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "markdownHtmlHtmlFigures": "그림 및 이미지", + "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "markdownHtmlHtmlPreformatted": "미리 서식이 지정된 코드", + "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "markdownHtmlHtmlDisclosure": "접기 블록", + "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "markdownHtmlHtmlDescriptionLists": "설명 목록", + "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "markdownHtmlHtmlFormattingTags": "서식 태그", + "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "markdownHtmlHtmlInlineCodeTags": "인라인 코드 태그", + "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "markdownHtmlHtmlNeutralInlineTags": "의미 있는 텍스트 태그", + "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "markdownHtmlSanitizedPreview": "정리된 미리 보기", + "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "markdownHtmlSanitizedPreviewDescription": "허용된 HTML은 브라우저에서 렌더링되지 않고 BusyMark 미리보기 블록으로 변환됩니다.", + "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "markdownHtmlSourcePreserved": "소스 보존", + "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "markdownHtmlSourcePreservedDescription": "편집되지 않은 원시 HTML은 소스 텍스트와 동일하게 다시 저장됩니다.", + "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "markdownHtmlMarkdownInsideHtml": "HTML 내부의 Markdown", + "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "markdownHtmlMarkdownInsideHtmlDescription": "원시 HTML 내부의 마크다운 마커는 리터럴 텍스트로 렌더링됩니다.", + "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "markdownHtmlBlockedContent": "차단된 활성 콘텐츠", + "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "markdownHtmlBlockedContentDescription": "스크립트, 스타일, 프레임, 양식, SVG, MathML, 이벤트 및 안전하지 않은 속성이 차단됩니다.", + "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "markdownHtmlSafeUrls": "안전한 URL만 허용", + "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "markdownHtmlSafeUrlsDescription": "링크에는 http, https, mailto, tel, 상대 URL 및 프래그먼트 URL만 허용됩니다. 안전하지 않은 스킴은 차단됩니다.", + "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "exportAsPdf": "PDF로 내보내기", + "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "pdfExportDescription": "세련된 독립형 PDF를 위한 페이지 레이아웃을 선택하세요.", + "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "pdfRemoteImagesNote": "내보내기 중에는 원격 이미지가 다운로드되지 않습니다. 가능한 경우 로컬 이미지가 포함됩니다.", + "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "pdfPageSize": "페이지 크기", + "@pdfPageSize": {"description":"PDF export page-size setting."}, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "pdfPageSizeLetter": "Letter", + "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "pdfOrientation": "방향", + "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "pdfPortrait": "세로", + "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "pdfLandscape": "가로", + "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "pdfMargins": "여백", + "@pdfMargins": {"description":"PDF export page-margin setting."}, + "pdfMarginNarrow": "좁게", + "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "pdfMarginNormal": "보통", + "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "pdfMarginWide": "넓게", + "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "pdfIncludePageNumbers": "페이지 번호 포함", + "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "export": "내보내기", + "@export": {"description":"Button label that starts an export."}, + "exportingPdf": "PDF 내보내기 중…", + "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "fileTypePdf": "PDF 문서", + "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "pdfExported": "{fileName}을(를) 내보냈습니다.", + "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, + "pdfExportedWithWarnings": "{count}개의 경고와 함께 {fileName}을 내보냈습니다.", + "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "pdfExportUnavailable": "PDF 내보내기 구성 요소가 누락되었습니다. BusyMark를 다시 설치하고 다시 시도하세요.", + "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "pdfExportTimedOut": "PDF 내보내기가 너무 오래 걸려 중지되었습니다.", + "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "pdfExportFailed": "BusyMark가 이 문서를 PDF로 내보낼 수 없습니다.", + "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "visualizationRendering": "렌더링 중…", + "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "visualizationStale": "마지막으로 유효한 렌더링 표시 중", + "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "visualizationShowSource": "소스 표시", + "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "visualizationShowRender": "렌더링 표시", + "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, + "visualizationFitWidth": "너비에 맞추기", + "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "visualizationSaveImage": "이미지 저장", + "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "visualizationCopyImage": "이미지 복사", + "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "visualizationImageCopied": "이미지가 복사됨", + "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "visualizationOpenApiReference": "OpenAPI 참조 열기", + "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "visualizationValid": "유효함", + "@visualizationValid": {"description":"OpenAPI validation success state."}, + "visualizationInvalid": "유효하지 않음", + "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "visualizationServers": "서버", + "@visualizationServers": {"description":"OpenAPI server count label."}, + "visualizationPaths": "경로", + "@visualizationPaths": {"description":"OpenAPI path count label."}, + "visualizationOperations": "작업", + "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "visualizationTags": "태그", + "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "visualizationNoOperations": "일치하는 작업 없음", + "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "visualizationSearchOperations": "작업 검색", + "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "visualizationRenderFailed": "이 시각화를 렌더링할 수 없습니다.", + "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "visualizationRetry": "다시 시도", + "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "visualizationSaved": "{fileName}을(를) 저장했습니다.", + "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "shortcutExportPdfDescription": "활성 문서 또는 Writerside 모듈을 PDF로 내보냅니다.", + "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "instances": "인스턴스", + "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "newInstance": "새 인스턴스", + "@newInstance": {"description":"Action that creates a Writerside instance."}, + "newTocLibrary": "새 목차 라이브러리", + "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "editInstance": "인스턴스 편집", + "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "openTocFile": "목차 파일 열기", + "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "createInstance": "인스턴스 만들기", + "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "createTocLibrary": "목차 라이브러리 만들기", + "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "instanceContent": "콘텐츠", + "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "instanceContentSource": "생성 원본", + "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "emptyInstance": "빈 인스턴스", + "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "markdownFiles": "로컬 Markdown 파일", + "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "chooseMarkdownFolder": "Markdown 폴더 선택", + "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "errorWritersideInstanceImportSourceRequired": "Markdown 파일이 포함된 폴더를 선택합니다.", + "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "instanceAppearance": "화면 모양", + "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "instanceColor": "아이콘 색상", + "@instanceColor": {"description":"Writerside instance icon-color field."}, + "instanceVersion": "버전", + "@instanceVersion": {"description":"Writerside instance version field."}, + "instanceVersionInherited": "이 필드가 비어 있으면 프로젝트 버전은 {version}입니다.", + "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "instanceWebPath": "웹 경로", + "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "instanceStatus": "상태", + "@instanceStatus": {"description":"Writerside instance status field."}, + "instanceStatusRelease": "릴리스", + "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "instanceStatusEap": "얼리 액세스", + "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "instanceStatusDeprecated": "더 이상 사용되지 않음", + "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "allowSearchEngineIndexing": "검색 엔진 색인 생성 허용", + "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "allowSearchEngineIndexingDescription": "외부 검색 엔진이 이 출력을 색인화하도록 허용합니다.", + "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "offlineArtifact": "오프라인 아티팩트", + "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "offlineArtifactDescription": "빌드된 문서가 자체적으로 포함되도록 리소스를 번들로 묶습니다.", + "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "instanceOutputSettings": "출력 설정", + "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "markdownImportSource": "Markdown 소스", + "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "markdownImportFiles": "Markdown 파일", + "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "selectNone": "선택 안 함", + "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "markdownFilesFound": "{count}개의 마크다운 파일을 찾았습니다.", + "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "noMarkdownFilesFound": "이 디렉터리에서 Markdown 파일을 찾을 수 없습니다.", + "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "copyReferencedMedia": "참조된 미디어 복사", + "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "copyReferencedMediaDescription": "상대 경로를 유지하면서 선택한 파일이 참조하는 로컬 이미지와 비디오를 복사합니다.", + "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "instanceIdRenameWarningTitle": "인스턴스 ID의 이름을 바꾸시겠습니까?", + "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "instanceIdRenameWarning": "BusyMark는 .tree 파일의 이름을 바꾸고 Writerside 프로젝트 참조를 \"{oldId}\"에서 \"{newId}\"로 업데이트합니다. 게시 스크립트는 변경되지 않으며 별도로 업데이트해야 합니다.", + "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "renameAndUpdateReferences": "이름 변경 및 참조 업데이트", + "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "tocLibraryDescription": "TOC 라이브러리는 재사용 가능한 섹션을 저장하고 자체 출력을 생성하지 않습니다.", + "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "defaultTocLibraryName": "공유 목차", + "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "instanceColorAutomatic": "자동", + "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "instanceColorBlue": "파란색", + "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "instanceColorGreen": "녹색", + "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "instanceColorOrange": "주황색", + "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "instanceColorPurple": "보라색", + "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "instanceColorRed": "빨간색", + "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "instanceColorTeal": "청록색", + "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "instanceColorYellow": "노란색", + "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "errorWritersideInstanceNameRequired": "인스턴스 이름을 입력하세요.", + "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "errorWritersideInstanceIdExists": "ID가 \"{id}\"인 인스턴스가 이미 존재합니다.", + "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "errorWritersideInstanceTreeExists": "인스턴스 트리가 이미 존재합니다: {path}", + "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSourceMissing": "Markdown 소스 디렉터리가 존재하지 않습니다: {path}", + "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSelectionRequired": "가져올 Markdown 파일을 하나 이상 선택하세요.", + "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "errorWritersideInstanceImportFileInvalid": "선택한 소스: {path} 내에서 읽을 수 있는 Markdown 파일이 아닙니다.", + "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportTargetExists": "가져오기를 하면 기존 프로젝트 파일을 덮어쓰게 됩니다: {path}", + "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceFilesChanged": "인스턴스 파일이 디스크에서 변경되었습니다. 검토한 후 다시 시도하세요.", + "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "errorWritersideInstanceRollbackFailed": "BusyMark가 인스턴스 변경 사항을 완전히 롤백할 수 없습니다. 계속하기 전에 다음 파일을 검토하세요. {paths}", + "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "errorWritersideInstanceLibraryImport": "TOC 라이브러리는 Markdown 항목을 가져올 수 없습니다.", + "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "errorWritersideInstanceWebPathInvalid": "웹 경로는 한 줄이어야 합니다.", + "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "errorWritersideInstanceConfigurationInvalid": "Writerside 인스턴스 구성이 잘못되었습니다. 진단을 수정하고 다시 시도하십시오.", + "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "errorWritersideInstanceTemporaryFile": "BusyMark가 인스턴스 변경 사항을 안전하게 스테이징할 수 없습니다.", + "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, + "diagnosticWritersideTreeInvalidStatus": "알 수 없는 인스턴스 상태 “{status}”. 릴리스, eap 또는 더 이상 사용되지 않음을 사용하십시오.", + "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "diagnosticWritersideDuplicateInstanceId": "인스턴스 ID \"{id}\"는 둘 이상의 트리 파일에서 사용됩니다.", + "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml에는 루트 요소가 있어야 합니다.", + "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, + "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} 값 \"{value}\"은(는) true 또는 false여야 합니다.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "diagnosticWritersideBuildProfileMissingInstance": " 요소는 인스턴스 ID를 지정해야 합니다.", + "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, + "diagnosticWritersideTreeInvalidInclude": "트리 는 from과 element-id를 모두 지정해야 합니다.", + "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "diagnosticWritersideTreeMissingSnippetId": "트리 은 ID를 지정해야 합니다.", + "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "인스턴스 간 TOC 참조는 ref와 in을 모두 지정해야 합니다.", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "diagnosticWritersideTreeConflictingTargets": "목차 요소는 둘 이상의 토픽, 참조, 링크 또는 리디렉션을 대상으로 할 수 없습니다.", + "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "diagnosticWritersideTreeDuplicateElementId": "트리 요소 ID “{id}”이(가) 두 번 이상 선언되었습니다.", + "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideInstanceGroupsInvalidRoot": "인스턴스 그룹 파일에는 루트 요소가 있어야 합니다.", + "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "diagnosticWritersideInstanceGroupInvalid": "인스턴스 그룹은 비어 있지 않은 ID와 인스턴스 목록을 지정해야 합니다.", + "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "diagnosticWritersideInstanceGroupDuplicateId": "인스턴스 그룹 ID “{id}”이(가) 두 번 이상 선언되었습니다.", + "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideExternalTreeInclude": "목차 포함 “{source}#{id}”는 외부 모듈 “{origin}”에 속하며 이 작업공간에서 확장할 수 없습니다.", + "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "diagnosticWritersideTreeIncludeElementMissing": "등록된 트리 \"{source}\"에 트리 요소 \"{id}\"이(가) 존재하지 않습니다.", + "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideTreeCircularInclude": "트리 포함 “{source}#{id}”는 주기를 생성합니다.", + "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideUnknownInstanceGroup": "인스턴스 조건이 알 수 없는 그룹 \"@{group}\"을 참조합니다.", + "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "diagnosticWritersideReferenceInstanceMissing": "인스턴스 간 참조는 알 수 없는 인스턴스 “{instance}”를 대상으로 합니다.", + "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "diagnosticWritersideReferenceTopicMissing": "\"{topic}\" 토픽이 참조된 인스턴스 \"{instance}\"에 없습니다.", + "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "download": "다운로드", + "@download": {"description":"Button label that downloads a required component."}, + "exportWritersideAsPdf": "Writerside를 PDF로 내보내기", + "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "writersidePdfContent": "콘텐츠 내보내기", + "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "writersidePdfPage": "페이지", + "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "exportingWritersidePdf": "Writerside PDF를 내보내는 중…", + "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "ai": "AI", + "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "aiLocalOllama": "로컬 Ollama", + "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "aiDisabled": "사용 안 함", + "@aiDisabled": {"description":"AI provider option that disables AI features."}, + "aiLocalOnlyDescription": "AI 편집은 명시적입니다. BusyMark는 선택한 공급자에 대해 표시된 컨텍스트만 보내고 검토 없이 제안을 적용하지 않습니다.", + "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "aiProvider": "AI 제공업체", + "@aiProvider": {"description":"Label for an AI provider selection."}, + "aiDefaultProvider": "기본 공급자", + "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "aiConfigureProvider": "공급자 구성", + "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "aiChooseProvider": "AI 제공업체 선택", + "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "aiOllamaEndpoint": "Ollama 엔드포인트", + "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "aiOllamaModel": "Ollama 모델", + "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "aiTestConnection": "테스트 연결", + "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "aiTestingConnection": "테스트 중…", + "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "aiConnectionReady": "연결되었습니다. 설치된 모델 {count}개를 찾았습니다.", + "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "aiNoModels": "선택한 모델이 없습니다.", + "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "aiConnectionFailed": "BusyMark가 AI 텍스트 생성을 확인할 수 없습니다.", + "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "aiConfigureFirst": "AI 제공자를 활성화하고 설정 → AI에서 모델을 확인하세요.", + "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "aiEditWithAi": "AI로 편집", + "aiRefineWithAi": "AI로 개선", + "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "aiInstruction": "지침", + "aiChangeTarget": "무엇이 바뀔 수 있나요?", + "aiSharedContext": "AI와 컨텍스트 공유", + "aiTargetSelection": "선택한 콘텐츠", + "aiTargetInsertAfterBlock": "현재 블록 뒤에 삽입", + "aiTargetCurrentBlock": "현재 블록", + "aiTargetCurrentSection": "현재 섹션", + "aiTargetCompleteDocument": "완전한 문서", + "aiContextNone": "문서 컨텍스트 없음", + "aiContextSelection": "선택한 콘텐츠", + "aiContextCurrentBlock": "현재 블록", + "aiContextCurrentSection": "현재 섹션", + "aiContextCompleteDocument": "완전한 문서", + "aiGenerating": "제안 생성 중…", + "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "aiProposal": "AI 제안", + "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "aiGenerateProposal": "제안 생성", + "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "aiContextDisclosure": "선택한 공급자는 표시된 컨텍스트에서 {count}자를 수신합니다.", + "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "aiOriginal": "원본", + "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "aiSuggested": "제안", + "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "aiApplyProposal": "제안 적용", + "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "aiTokenUsage": "{input} 입력 토큰 · {output} 출력 토큰", + "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "aiStaleProposal": "이 제안이 생성되는 동안 문서가 변경되었습니다. 작업을 다시 실행하십시오.", + "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "gitAiStagedChangesChanged": "이 커밋 메시지가 생성되는 동안 단계적 변경 사항이 변경되었습니다. 작업을 다시 실행하십시오.", + "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "aiViewContext": "전송된 컨텍스트 보기", + "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "aiReviewExactContent": "정확한 내용을 검토하세요", + "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "aiContentToChange": "변경할 내용", + "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "aiContentSentToAi": "AI로 전송된 콘텐츠", + "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "aiApiKey": "API 키", + "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "aiApiKeyStoredHint": "키는 시스템 자격 증명 저장소에 저장됩니다.", + "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "aiApiKeyEnterHint": "공급자 API 키를 입력하세요.", + "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "aiReplaceApiKey": "API 키 교체", + "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "aiSaveApiKey": "API 키를 안전하게 저장", + "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "aiRemoveApiKey": "저장된 API 키 제거", + "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "aiCredentialSaved": "시스템 자격 증명 저장소에 저장된 API 키입니다.", + "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "aiCredentialRemoved": "저장된 API 키가 삭제되었습니다.", + "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "aiModelRouting": "모델 라우팅", + "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "aiAutomaticRouting": "작업별 자동", + "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "aiFixedModelRouting": "선택한 모델 사용", + "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "aiPreferredModel": "선호하는 모델", + "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "aiModel": "모델", + "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "aiUsageThisMonth": "{requests} 요청 · {input} 입력 토큰 · {output} 출력 토큰", + "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "aiCloudConsentTitle": "{provider}에 콘텐츠를 보내시겠습니까?", + "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentEnable": "{provider} 활성화", + "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentMessage": "각 AI 검토 대화 상자에 표시된 콘텐츠만 전송됩니다. 요청은 상태 비저장이고 제안에는 검토가 필요하며 API 키는 Linux 시스템 자격 증명 저장소에 저장됩니다.", + "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "aiCloudConsentRequired": "먼저 설정 → AI에서 {provider} 데이터 공유를 확인하세요.", + "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "aiGenerationVerified": "{model}로 생성을 확인했습니다. 호환 가능한 모델 {count}개를 사용할 수 있습니다.", + "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "aiColdStartObserved": "로컬 모델 콜드 스타트가 관찰되었습니다.", + "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "aiNoCompatibleModels": "호환 가능한 텍스트 생성 모델이 없습니다.", + "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "aiEnableProvider": "먼저 AI 제공자를 활성화하세요.", + "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "aiDraftCommitMessage": "초안 커밋 메시지", + "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "aiDrafting": "작성 중…", + "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "aiDraftWithAi": "AI를 활용한 초안", + "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "generateOrUpdateMarkdownToc": "목차 생성/업데이트", + "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "markdownTocTitle": "목차", + "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "markdownTocUpdated": "{count}개의 항목으로 목차가 업데이트되었습니다.", + "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "markdownTocNoHeadings": "목차를 생성하기 전에 하나 이상의 섹션 제목을 추가하세요.", + "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "markdownTocMalformedMarkers": "BusyMark 목차 표시가 없거나 중복되었거나 순서가 잘못되었습니다.", + "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "diagnosticMarkdownHeadingSkippedLevel": "제목 수준 {level}은(는) {previousLevel} 수준을 따릅니다. 섹션 중첩을 검토하세요.", + "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "diagnosticMarkdownLinkEmptyText": "링크 텍스트가 비어 있습니다. 목적을 설명하는 접근 가능한 이름을 제공합니다.", + "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "diagnosticMarkdownLinkReviewText": "링크 텍스트 \"{text}\"가 문맥상 목적을 설명하는지 검토하세요.", + "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "diagnosticMarkdownTableEmptyHeader": "테이블 머리글 셀은 해당 열을 식별해야 합니다. 각각의 빈 헤더를 완성하세요.", + "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "mathRenderFailed": "수학적 표현을 렌더링할 수 없습니다.", + "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "inlineMath": "인라인 수학", + "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."}, + "displayMath": "수학 표시", + "@displayMath": {"description":"Editor action that inserts a display mathematical expression."} +} diff --git a/lib/l10n/app_nb.arb b/lib/l10n/app_nb.arb index c7ffabda..498ec7ed 100644 --- a/lib/l10n/app_nb.arb +++ b/lib/l10n/app_nb.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Sidepanel", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb new file mode 100644 index 00000000..208780a8 --- /dev/null +++ b/lib/l10n/app_nl.arb @@ -0,0 +1,1897 @@ +{ + "@@locale": "nl", + "appTitle": "BusyMark", + "@appTitle": {"description":"Application name."}, + "appSubtitle": "Editor voor Markdown-bestanden en Writerside-compatibele documentatieprojecten.", + "@appSubtitle": {"description":"Short application description."}, + "aboutBusyMark": "Over BusyMark", + "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "aboutTagline": "Markdown en Writerside-editor", + "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "aboutLicenseLabel": "Licentie", + "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "aboutWebsite": "Website", + "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "aboutSourceCode": "Broncode", + "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "reportIssue": "Rapporteer een probleem", + "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "feedbackCategory": "Categorie", + "@feedbackCategory": {"description":"Feedback category field label."}, + "feedbackChooseCategory": "Kies een categorie", + "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "feedbackCategoryProblem": "Probleem of bug", + "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "feedbackCategoryFeature": "Functieverzoek", + "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "feedbackCategoryPrivacySecurity": "Privacy- of beveiligingsproblemen", + "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "feedbackCategoryUsability": "Bezorgdheid over bruikbaarheid", + "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "feedbackCategoryOther": "Overig", + "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "feedbackSubject": "Onderwerp", + "@feedbackSubject": {"description":"Feedback subject field label."}, + "feedbackMessage": "Gedetailleerd bericht", + "@feedbackMessage": {"description":"Detailed feedback message field label."}, + "feedbackReplyEmail": "E-mail beantwoorden (optioneel)", + "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "feedbackIncludeTechnicalDetails": "Voeg technische details toe", + "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "feedbackTechnicalDetailsDisclosure": "Indien ingeschakeld, voegt dit alleen uw Linux-besturingssysteemversie en de landinstelling van de BusyMark-toepassing toe. Er zijn geen logbestanden, bestanden, accountgegevens of andere diagnostische gegevens bijgevoegd.", + "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "feedbackSubmit": "Indienen", + "@feedbackSubmit": {"description":"Button that submits feedback."}, + "feedbackSubmitting": "Verzenden…", + "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "feedbackCategoryRequired": "Kies een categorie.", + "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "feedbackSubjectLength": "Het onderwerp moet tussen 3 en 120 tekens lang zijn.", + "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "feedbackMessageLength": "Het bericht moet tussen de 10 en 5.000 tekens lang zijn.", + "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "feedbackReplyEmailInvalid": "Voer een geldig e-mailadres in of laat dit veld leeg.", + "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "feedbackConnectionFailure": "BusyMark kan geen verbinding maken. Controleer uw internetverbinding en probeer het opnieuw.", + "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "feedbackTimeoutFailure": "Er is een time-out opgetreden voor het verzoek. Probeer het opnieuw.", + "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "feedbackRateLimitedFailure": "Er zijn te veel rapporten verzonden via deze verbinding. Wacht en probeer het opnieuw.", + "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "feedbackRejectedFailure": "De server heeft dit rapport afgewezen. Controleer de formuliervelden en probeer het opnieuw.", + "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "feedbackServerFailure": "De server kon het rapport niet accepteren. Probeer het later opnieuw.", + "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "feedbackSuccess": "Feedback verzonden. Referentie-ID: {id}", + "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "advanced": "Geavanceerd", + "@advanced": {"description":"Settings section title for advanced actions."}, + "addToGit": "Toevoegen aan Git", + "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "appearance": "Uiterlijk", + "@appearance": {"description":"Settings section title for appearance options."}, + "apply": "Toepassen", + "@apply": {"description":"Button label that applies a dialog change."}, + "back": "Terug", + "@back": {"description":"Tooltip for navigating back."}, + "bottomLeft": "Linksonder", + "@bottomLeft": {"description":"Editing button position option."}, + "bottomRight": "Rechtsonder", + "@bottomRight": {"description":"Editing button position option."}, + "cancel": "Annuleren", + "@cancel": {"description":"Cancel button label."}, + "choose": "Kiezen", + "@choose": {"description":"Button label for choosing a file or path."}, + "chooseLocation": "Kies locatie", + "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "copy": "Kopiëren", + "@copy": {"description":"Copy command label."}, + "copyName": "Kopieer naam", + "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "copyFileName": "Bestandsnaam kopiëren", + "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "copyPath": "Kopieer pad", + "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "create": "Maken", + "@create": {"description":"Create action label."}, + "creating": "Maken...", + "@creating": {"description":"Progress label while a project or topic is being created."}, + "cut": "Knippen", + "@cut": {"description":"Cut command label."}, + "promoteSection": "Sectie promoten", + "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "demoteSection": "Sectie degraderen", + "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "moveSectionUp": "Verplaats sectie naar boven", + "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "moveSectionDown": "Verplaats sectie naar beneden", + "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "confirmDeleteSectionTitle": "Sectie verwijderen?", + "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "confirmDeleteSectionMessage": "'{name}' en alle inhoud in de bijbehorende sectie verwijderen? Dit kan niet ongedaan worden gemaakt.", + "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "darkTheme": "Donker", + "@darkTheme": {"description":"Dark theme option."}, + "delete": "Verwijderen", + "@delete": {"description":"Delete command label."}, + "discard": "Weggooien", + "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "editor": "Editor", + "@editor": {"description":"Editor view label."}, + "file": "Bestand", + "@file": {"description":"Generic file kind label."}, + "fileHistory": "Bestandsgeschiedenis", + "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "folder": "Map", + "@folder": {"description":"Folder kind label."}, + "insert": "Invoegen", + "@insert": {"description":"Insert button label."}, + "keyboardShortcuts": "Sneltoetsen op het toetsenbord", + "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "commandPalette": "Commandopalet", + "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "commandPaletteHint": "Typ een opdracht", + "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "commandPaletteEmpty": "Geen overeenkomende opdrachten", + "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "commandUnavailableInContext": "Niet beschikbaar in de huidige editorcontext", + "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "lightTheme": "Licht", + "@lightTheme": {"description":"Light theme option."}, + "mainMenu": "Hoofdmenu", + "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "fullScreen": "Volledig scherm", + "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "markdown": "Markdown", + "@markdown": {"description":"Markdown format label."}, + "open": "Openen", + "@open": {"description":"Open action label."}, + "openInFiles": "Openen in Bestandsbeheer", + "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "pathActions": "Padacties", + "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "outline": "Overzicht", + "@outline": {"description":"Outline sidebar tab label."}, + "overwrite": "Overschrijven", + "@overwrite": {"description":"Button label for overwriting a changed file."}, + "paste": "Plakken", + "@paste": {"description":"Paste command label."}, + "pasteWithoutFormatting": "Plakken zonder opmaak", + "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "reading": "Lezen", + "@reading": {"description":"Reading view label."}, + "removeFromRecent": "Verwijderen uit recent", + "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "recent": "Recent", + "@recent": {"description":"Recent workspaces section title."}, + "redo": "Opnieuw uitvoeren", + "@redo": {"description":"Redo command label."}, + "save": "Opslaan", + "@save": {"description":"Save action label."}, + "search": "Zoeken", + "@search": {"description":"Search action label and field hint."}, + "selectAll": "Selecteer alles", + "@selectAll": {"description":"Select all command label."}, + "settings": "Instellingen", + "@settings": {"description":"Settings action label."}, + "source": "Bron", + "@source": {"description":"Source view label."}, + "split": "Splitsen", + "@split": {"description":"Split view label."}, + "systemTheme": "Systeem", + "@systemTheme": {"description":"System theme option."}, + "theme": "Thema", + "@theme": {"description":"Theme setting label."}, + "appLanguage": "Taal", + "@appLanguage": {"description":"Application language setting label."}, + "systemLanguage": "Systeem", + "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "languageEnglish": "English", + "@languageEnglish": {"description":"Language selector option for English."}, + "languageGerman": "Deutsch", + "@languageGerman": {"description":"Language selector option for German."}, + "languageDutch": "Nederlands", + "@languageDutch": {"description":"Language selector option for Dutch."}, + "languageTurkish": "Türkçe", + "@languageTurkish": {"description":"Language selector option for Turkish."}, + "languageItalian": "Italiano", + "@languageItalian": {"description":"Language selector option for Italian."}, + "languageNorwegian": "Norsk", + "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "languageFrench": "Français", + "@languageFrench": {"description":"Language selector option for French."}, + "languageRussian": "Русский", + "@languageRussian": {"description":"Language selector option for Russian."}, + "languageUkrainian": "Українська", + "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "languagePolish": "Polski", + "@languagePolish": {"description":"Language selector option for Polish."}, + "languageSpanish": "Español", + "@languageSpanish": {"description":"Language selector option for Spanish."}, + "languagePortuguese": "Português", + "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "languageArabic": "العربية", + "@languageArabic": {"description":"Language selector option for Arabic."}, + "languagePersian": "فارسی", + "@languagePersian": {"description":"Language selector option for Persian."}, + "languageHindi": "हिन्दी", + "@languageHindi": {"description":"Language selector option for Hindi."}, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "languageEstonian": "Eesti", + "@languageEstonian": {"description":"Language selector option for Estonian."}, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "languageJapanese": "日本語", + "@languageJapanese": {"description":"Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description":"Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "toggleSidebar": "Zijbalk in-/uitschakelen", + "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "topLeft": "Linksboven", + "@topLeft": {"description":"Editing button position option."}, + "topRight": "Rechtsboven", + "@topRight": {"description":"Editing button position option."}, + "undo": "Ongedaan maken", + "@undo": {"description":"Undo command label."}, + "validate": "Valideren", + "@validate": {"description":"Validate action label."}, + "validation": "Validatie", + "@validation": {"description":"Settings section title for validation options."}, + "viewMode": "Weergavemodus", + "@viewMode": {"description":"Native header bar view mode control label."}, + "welcome": "Welkom", + "@welcome": {"description":"Welcome screen label and tooltip."}, + "writerside": "Writerside", + "@writerside": {"description":"Writerside workspace kind label."}, + "xml": "XML", + "@xml": {"description":"XML format label."}, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "fileTypeImages": "Afbeeldingen", + "@fileTypeImages": {"description":"Native file picker type label for images."}, + "openMarkdownFile": "Markdown-bestand openen", + "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "markdownFileExtensions": ".md of .markdown", + "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "openFolderOrWritersideProject": "Open een map of Writerside-project", + "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "markdownFolderOrWritersideProject": "Markdown-map of Writerside-compatibel project", + "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "noOpenFile": "Geen bestand geopend", + "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "shortcutDeleteTreeItemDescription": "Verwijder het geselecteerde item uit Bestanden of verwijder het geselecteerde onderwerp uit de inhoudsopgave", + "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "shortcutGroupGeneral": "Algemeen", + "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "shortcutNewDocument": "Maken", + "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "shortcutNewDocumentDescription": "Maak een Markdown-bestand of Writerside-project", + "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "shortcutOpenDescription": "Open een Markdown-bestand, map of Writerside-project", + "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "shortcutSaveDescription": "Sla het huidige document op", + "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "shortcutSearchDescription": "Zoek in de huidige werkruimte", + "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "shortcutKeyboardShortcutsDescription": "Toon deze sneltoetsreferentie", + "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "shortcutMarkdownAndHtmlDescription": "Open de Markdown- en HTML-referentie", + "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "shortcutSettingsDescription": "Open BusyMark-instellingen", + "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "shortcutNextTab": "Volgende tabblad", + "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "shortcutNextTabDescription": "Ga naar het volgende geopende tabblad", + "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "shortcutPreviousTab": "Vorig tabblad", + "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "shortcutPreviousTabDescription": "Ga naar het vorige geopende tabblad", + "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "shortcutCloseTab": "Tabblad sluiten", + "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "shortcutCloseTabDescription": "Sluit het actieve tabblad", + "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "shortcutCloseAllTabs": "Sluit alle tabbladen", + "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "shortcutCloseAllTabsDescription": "Sluit alle geopende tabbladen", + "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "shortcutGroupTextEditing": "Tekstbewerking", + "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "shortcutSelectAllDescription": "Selecteer in de bronmodus alle tekst; druk in de Editor-modus tweemaal om elk blok te selecteren", + "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "shortcutCutDescription": "Knip de geselecteerde tekst", + "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "shortcutCopyDescription": "Kopieer de geselecteerde tekst", + "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "shortcutPasteDescription": "Plakken vanaf het klembord", + "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "shortcutPastePlainTextDescription": "Klembordtekst plakken zonder opmaak", + "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "shortcutUndoDescription": "Maak de laatste bewerking ongedaan", + "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "shortcutRedoDescription": "Voer de laatste ongedaan gemaakte bewerking opnieuw uit", + "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "shortcutInsertIndentation": "Inspringing invoegen", + "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "shortcutInsertIndentationDescription": "Voeg een inspringing toe bij de cursor", + "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "shortcutOutdentSource": "Inspringing in bron verminderen", + "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "shortcutOutdentSourceDescription": "Verwijder één inspringingsniveau in de bronmodus", + "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "shortcutEscape": "Zoeken sluiten of blokselectie wissen", + "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "shortcutEscapeDescription": "Sluit het zoeken in de werkruimte of wis een blokselectie in de Editor-modus", + "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "shortcutGroupFormatting": "Opmaak", + "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "shortcutBoldDescription": "Schakel vetgedrukt in op de geselecteerde tekst", + "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "shortcutItalicDescription": "Schakel cursief in op de geselecteerde tekst", + "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "shortcutUnderlineDescription": "Schakel het onderstrepen van de geselecteerde tekst in of uit", + "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "shortcutLinkDescription": "Een link invoegen of bewerken", + "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "shortcutInlineCodeDescription": "Schakel inlinecode voor de geselecteerde tekst in of uit", + "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "shortcutStrikethroughDescription": "Schakel doorhalen van de geselecteerde tekst in of uit", + "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "shortcutGroupBlocks": "Blokken", + "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "shortcutParagraphDescription": "Stel het huidige blok in op alinea", + "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "shortcutHeading1Description": "Stel het huidige blok in op Kop 1", + "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "shortcutHeading2Description": "Stel het huidige blok in op Kop 2", + "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "shortcutHeading3Description": "Stel het huidige blok in op Kop 3", + "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "shortcutHeading4Description": "Stel het huidige blok in op Kop 4", + "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "shortcutHeading5Description": "Stel het huidige blok in op Kop 5", + "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "shortcutHeading6Description": "Stel het huidige blok in op Kop 6", + "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "shortcutGroupLists": "Lijsten", + "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "numberedList": "Genummerde lijst", + "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "shortcutNumberedListDescription": "Schakel genummerde lijstopmaak in of uit", + "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "bulletedList": "Lijst met opsommingstekens", + "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "shortcutBulletedListDescription": "Schakel de opmaak van de lijst met opsommingstekens in of uit", + "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "checklist": "Controlelijst", + "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "shortcutChecklistDescription": "Schakel de opmaak van de checklist in of uit", + "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "shortcutGroupSidebar": "Zijbalk", + "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "sidebarViewMenu": "Zijbalkweergave", + "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "createMarkdownFile": "Markdown-bestand maken", + "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "createMarkdownFileDescription": "Start een niet-opgeslagen lokaal Markdown-document", + "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "createWritersideProject": "Maak een Writerside-project", + "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "createWritersideProjectDescription": "Start een lokaal Writerside-compatibel project", + "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "defaultProjectName": "Documentatie", + "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "defaultInstanceName": "Gebruikershandleiding", + "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "defaultStartTopicTitle": "Aan de slag", + "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "projectName": "Projectnaam", + "@projectName": {"description":"Create project dialog field label."}, + "directoryName": "Mapnaam", + "@directoryName": {"description":"Create project dialog field label."}, + "instanceName": "Instantienaam", + "@instanceName": {"description":"Create project dialog field label."}, + "instanceId": "Instantie-ID", + "@instanceId": {"description":"Create project dialog field label."}, + "startTopicTitle": "Titel van startonderwerp", + "@startTopicTitle": {"description":"Create project dialog field label."}, + "location": "Locatie", + "@location": {"description":"Create dialog location section label."}, + "projectNameRequired": "Projectnaam is vereist.", + "@projectNameRequired": {"description":"Validation message for missing project name."}, + "directoryNameRequired": "Mapnaam is vereist.", + "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "useSingleSafeDirectoryName": "Gebruik één veilige mapnaam.", + "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "useLowercaseIdentifier": "Gebruik een identificatiecode in kleine letters met letters, cijfers, onderstrepingstekens of koppeltekens.", + "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "startTopicTitleRequired": "Titel van startonderwerp is vereist.", + "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "createWritersideProjectFailed": "Kan Writerside-project niet maken.", + "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "settingsTitle": "BusyMark-instellingen", + "@settingsTitle": {"description":"Settings screen title."}, + "autoSave": "Automatisch opslaan", + "@autoSave": {"description":"Editor setting label for saving files automatically."}, + "autoSaveDescription": "Bestandswijzigingen automatisch opslaan na een korte inactieve vertraging.", + "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "wordWrap": "Regelterugloop", + "@wordWrap": {"description":"Word wrap setting label."}, + "editorFontSize": "Lettergrootte van de editor", + "@editorFontSize": {"description":"Editor font size setting label."}, + "validateOnEdit": "Valideren bij bewerken", + "@validateOnEdit": {"description":"Validation setting label."}, + "clearRecentWorkspaces": "Wis recente werkruimten", + "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "editingButtonsPosition": "Positie van knoppen bewerken", + "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "editingButtonsPositionDescription": "Kies waar de zwevende WYSIWYG-bewerkingsknoppen verschijnen.", + "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "editingButtonsDirection": "Richting van knoppen bewerken", + "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "editingButtonsDirectionDescription": "Kies of de zwevende WYSIWYG-bewerkingsknoppen horizontaal of verticaal zijn gerangschikt.", + "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "horizontal": "Horizontaal", + "@horizontal": {"description":"Editing button direction option."}, + "vertical": "Verticaal", + "@vertical": {"description":"Editing button direction option."}, + "privacy": "Privacy", + "@privacy": {"description":"Settings section title for privacy options."}, + "allowRemoteImages": "Laad externe afbeeldingen", + "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "allowRemoteImagesDescription": "Sta toe dat Markdown-voorbeelden en editorafbeeldingen worden geladen vanaf http- en https-URL's.", + "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "clearRemoteImagePermissions": "Wis machtigingen voor externe afbeeldingen", + "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, + "clearRemoteImagePermissionsDescription": "Vergeet werkruimten die externe afbeeldingen mochten laden.", + "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "clearGitWorkspaceTrust": "Wis vertrouwde Git-werkruimten", + "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "clearGitWorkspaceTrustDescription": "Vraag dit voordat u Git-functies inschakelt voor eerder vertrouwde werkruimten.", + "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "settingsWindowSectionTitle": "Raam", + "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "settingsReopenWorkspaceOnStartupTitle": "Open de vorige werkruimte opnieuw bij het opstarten", + "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "settingsReopenWorkspaceOnStartupDescription": "Open de werkruimte en tabbladen van de vorige sessie wanneer BusyMark start.", + "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "settingsConfirmCloseWithUnsavedChangesTitle": "Bevestig voordat u sluit met niet-opgeslagen wijzigingen", + "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "settingsConfirmCloseWithUnsavedChangesDescription": "Vraag dit voordat u BusyMark sluit als documenten niet-opgeslagen wijzigingen bevatten.", + "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "closeUnsavedChangesTitle": "Niet-opgeslagen wijzigingen", + "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "closeUnsavedChangesSingleMessage": "Dit document bevat niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat u BusyMark sluit?", + "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Wijzigingen opslaan voordat BusyMark wordt gesloten?} =1{1 document bevat niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat BusyMark wordt gesloten?} other{{count} documenten bevatten niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat BusyMark wordt gesloten?}}", + "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "closeUnsavedChangesCancel": "Annuleren", + "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "closeUnsavedChangesDiscard": "Weggooien", + "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "closeUnsavedChangesSave": "Opslaan", + "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "currentFile": "huidig bestand", + "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "unsavedChanges": "Niet-opgeslagen wijzigingen", + "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "unsavedChangesMessage": "Er zijn niet-opgeslagen wijzigingen in {fileName}. Sla ze op voordat je verdergaat?", + "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "unsavedChangesMultipleMessage": "{count, plural, =1{1 document bevat niet-opgeslagen wijzigingen. Sla het op voordat u doorgaat?} other{{count} documenten bevatten niet-opgeslagen wijzigingen. Sla ze op voordat u doorgaat?}}", + "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "fileChangedOnDisk": "Bestand gewijzigd op schijf", + "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "fileChangedOnDiskMessage": "Dit bestand is op schijf gewijzigd sinds u het hebt geopend. Overschrijven?", + "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "untitledMarkdownFileName": "Untitled.md", + "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "unorderedList": "Ongenummerde lijst", + "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "orderedList": "Genummerde lijst", + "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "taskList": "Takenlijst", + "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "toggleTaskChecked": "Taak als voltooid markeren", + "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "indentListItem": "Lijstitem inspringen", + "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "outdentListItem": "Lijstitem uitspringen", + "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "blockquote": "Blokcitaat", + "@blockquote": {"description":"Blockquote command label."}, + "codeBlock": "Codeblok", + "@codeBlock": {"description":"Code block command or preview label."}, + "codeBlockLanguage": "Codebloktaal", + "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "image": "Afbeelding", + "@image": {"description":"Image command and document kind label."}, + "video": "Video", + "openVideo": "Video afspelen", + "pauseVideo": "Video pauzeren", + "videoUnavailable": "Video niet beschikbaar", + "videoPreview": "Videovoorbeeld", + "diagnosticWritersideVideoMissingSource": "Video mist het kenmerk src.", + "diagnosticWritersideVideoUnsupportedSource": "Niet-ondersteunde videobron: {source}", + "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingFile": "Videobestand bestaat niet: {source}", + "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingPreview": "Videovoorbeeldafbeelding bestaat niet: {preview}", + "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "inlineImage": "Inline-afbeelding", + "@inlineImage": {"description":"Inline image command label."}, + "table": "Tabel", + "@table": {"description":"Table command label."}, + "htmlBlock": "HTML-blok", + "@htmlBlock": {"description":"HTML block command label."}, + "htmlContentDefault": "HTML-inhoud", + "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "shortcutHtmlBlockDescription": "Voeg een HTML-blok in of bewerk het", + "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "renderedHtml": "Weergegeven HTML", + "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "editHtml": "HTML bewerken", + "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "htmlSource": "HTML-bron", + "@htmlSource": {"description":"Text field label for raw HTML source."}, + "thematicBreak": "Horizontale scheidingslijn", + "@thematicBreak": {"description":"Thematic break command label."}, + "bold": "Vetgedrukt", + "@bold": {"description":"Bold command label."}, + "italic": "Cursief", + "@italic": {"description":"Italic command label."}, + "underline": "Onderstrepen", + "@underline": {"description":"Underline command label."}, + "strikethrough": "Doorhalen", + "@strikethrough": {"description":"Strikethrough command label."}, + "inlineCode": "Inline-code", + "@inlineCode": {"description":"Inline code command label."}, + "link": "Link", + "@link": {"description":"Link command and preview label."}, + "hardLineBreak": "Hard regeleinde", + "@hardLineBreak": {"description":"Hard line break command label."}, + "textStyle": "Tekststijl", + "@textStyle": {"description":"Text style menu tooltip."}, + "paragraph": "Alinea", + "@paragraph": {"description":"Paragraph style label."}, + "heading1": "Kop 1", + "@heading1": {"description":"Heading 1 style label."}, + "heading2": "Kop 2", + "@heading2": {"description":"Heading 2 style label."}, + "heading3": "Kop 3", + "@heading3": {"description":"Heading 3 style label."}, + "heading4": "Kop 4", + "@heading4": {"description":"Heading 4 style label."}, + "heading5": "Kop 5", + "@heading5": {"description":"Heading 5 style label."}, + "heading6": "Kop 6", + "@heading6": {"description":"Heading 6 style label."}, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "deleteTable": "Tabel verwijderen", + "@deleteTable": {"description":"Tooltip for deleting a table."}, + "tableColumnNumber": "Kolom {columnNumber}", + "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "insertColumnLeft": "Kolom links invoegen", + "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "insertColumnRight": "Kolom rechts invoegen", + "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "deleteColumn": "Kolom verwijderen", + "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "tableAlignmentUnspecified": "Uitlijning: niet gespecificeerd", + "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "tableAlignmentLeft": "Uitlijning: links", + "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "tableAlignmentCenter": "Uitlijning: midden", + "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "tableAlignmentRight": "Uitlijning: rechts", + "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "tableRowNumber": "Rij {rowNumber}", + "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "insertRowAbove": "Rij erboven invoegen", + "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "insertRowBelow": "Voeg rij hieronder in", + "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "deleteRow": "Rij verwijderen", + "@deleteRow": {"description":"Menu item for deleting a table row."}, + "tableHeaderHint": "Kolomkop", + "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "tableCellHint": "Cel", + "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "language": "Taal", + "@language": {"description":"Code block language field label."}, + "hideEditingButtons": "Bewerkingsknoppen verbergen", + "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "showEditingButtons": "Toon bewerkingsknoppen", + "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "altText": "Alt-tekst", + "@altText": {"description":"Image alt text field label."}, + "editorPlaceholderText": "tekst", + "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "editorPlaceholderCode": "code", + "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "editorPlaceholderAltText": "alternatieve tekst", + "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "describeTheImage": "Beschrijf de afbeelding", + "@describeTheImage": {"description":"Image alt text hint."}, + "columns": "Kolommen", + "@columns": {"description":"Table dialog columns field label."}, + "rows": "Rijen", + "@rows": {"description":"Table dialog rows field label."}, + "tableHeaderNumber": "Kolomkop {columnNumber}", + "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "tableCellDefault": "Cel", + "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "noImageSource": "Geen afbeeldingsbron", + "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "remoteImageBlocked": "Externe afbeelding geblokkeerd", + "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "remoteImageBlockedTooltip": "Kies of BusyMark externe afbeeldingen kan laden.", + "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "remoteImagesBlockedTitle": "Externe afbeeldingen worden geblokkeerd", + "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "remoteImagesBlockedMessage": "Dit document verwijst naar afbeeldingen van internet. Als u ze laadt, kan netwerkinformatie aan de afbeeldingshost worden onthuld.", + "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "loadRemoteImagesForWorkspace": "Voor deze werkruimte laden", + "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "alwaysLoadRemoteImages": "Externe afbeeldingen altijd laden", + "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "hideSidebar": "Zijbalkpaneel verbergen", + "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "showSidebar": "Zijbalkpaneel tonen", + "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "showPreview": "Voorbeeld weergeven", + "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "hidePreview": "Voorbeeld verbergen", + "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "workspaceKindUnsavedMarkdown": "Niet-opgeslagen Markdown-bestand", + "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "workspaceKindSingleMarkdown": "Eén Markdown-bestand", + "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "workspaceKindMarkdownFolder": "Markdown-map", + "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "workspaceKindWritersideModule": "Writerside-module", + "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "problems": "Problemen", + "@problems": {"description":"Diagnostics dialog title."}, + "diagnosticCount": "{count, plural, =0{Geen diagnoses} =1{1 diagnose} other{{count} diagnoses}}", + "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "files": "Bestanden", + "@files": {"description":"Files sidebar tab label."}, + "toc": "TOC", + "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "tocActions": "TOC-acties", + "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "markdownUnsaved": "Niet-opgeslagen Markdown", + "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "workspaceDetail": "{kind} - {count, plural, =1{1 bestand} other{{count} bestanden}}", + "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "noFiles": "Geen bestanden", + "@noFiles": {"description":"Empty state shown when there are no files."}, + "newFile": "Nieuw bestand", + "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "noWritersideToc": "Geen Writerside-inhoudsopgave", + "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "tocSection": "TOC-sectie", + "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "newTopic": "Nieuw onderwerp", + "@newTopic": {"description":"Create new Writerside topic action label."}, + "newChildTopic": "Nieuw onderliggend onderwerp", + "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "newSiblingTopic": "Nieuw naastliggend onderwerp", + "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "renameTopicFile": "Onderwerpbestand hernoemen", + "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "topicPlacement": "TOC-plaatsing", + "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "tocRoot": "Bij TOC-root", + "@tocRoot": {"description":"TOC placement option for the root level."}, + "afterSelectedTopic": "Na geselecteerd onderwerp", + "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "insideSelectedTopic": "Binnen geselecteerd onderwerp", + "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "pasteAfterTopic": "Na onderwerp plakken", + "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "pasteAsChildTopic": "Als onderliggend onderwerp plakken", + "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "removeFromToc": "Verwijderen uit inhoudsopgave", + "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "confirmRemoveFromTocTitle": "Verwijderen uit inhoudsopgave?", + "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "confirmRemoveFromTocMessage": "{name} verwijderen uit deze inhoudsopgave? Het onderwerpbestand wordt bewaard.", + "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteTopicTitle": "Onderwerpbestand verwijderen?", + "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "confirmDeleteTopicMessage": "{name} verwijderen en uit elke inhoudsopgave verwijderen? Dit kan niet ongedaan worden gemaakt.", + "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "safeDeleteTopicFile": "Onderwerpbestand veilig verwijderen…", + "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "removeTocElement": "TOC-element verwijderen", + "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "reviewUsages": "Gebruik controleren", + "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "deleteTopicFile": "Onderwerpbestand verwijderen", + "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "removeAction": "Verwijderen", + "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "topicRemovalSummary": "Verwijder “{topic}” uit de geselecteerde instantie. Het onderwerpbestand wordt bewaard.", + "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "safeDeleteTopicSummary": "Verwijder “{topic}” en werk de referenties veilig bij in dit Writerside-project.", + "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "childTopicsPromoted": "{count, plural, =1{1 onderliggend onderwerp wordt één niveau hoger geplaatst.} other{{count} onderliggende onderwerpen worden één niveau hoger geplaatst.}}", + "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "topicIsStartPageRemovalWarning": "Dit onderwerp wordt gebruikt als startpagina van een instantie. Controleer het gebruik ervan en wijs een andere startpagina toe voordat u verdergaat.", + "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "topicUsagesCount": "Gebruik ({count})", + "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "noBreakingTopicUsages": "Er zijn geen verwijzingen gevonden die kunnen worden verbroken.", + "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "topicUsagesFound": "BusyMark heeft de volgende verwijzingen naar dit onderwerp gevonden.", + "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "topicUsageTocElements": "TOC-elementen", + "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "topicUsageStartPages": "Startpagina's", + "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "topicUsageTopicLinks": "Onderwerplinks", + "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, + "topicUsageIncludes": "Inclusief", + "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "usageCount": "{count, plural, =1{1 gebruik} other{{count} keer gebruikt}}", + "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "refactoringOptions": "Refactoring-opties", + "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "updateUsagesAutomatically": "Gebruik automatisch bijwerken", + "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, + "updateUsagesAutomaticallyDescription": "Verwijder inhoudsopgavereferenties en -includes en behoud de linktekst.", + "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "manualUsageUpdatesRequired": "Voor sommige verwijzingen zijn handmatige wijzigingen vereist voordat deze refactoring plaatsvindt.", + "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "setRedirectTo": "Omleiding instellen naar", + "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "noRedirectDescription": "De oude, gepubliceerde pagina niet omleiden.", + "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "redirectTarget": "Omleidingsdoel", + "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "remainingUsagesBlockRemoval": "Controleer en werk de resterende verwijzingen bij voordat u doorgaat, of schakel automatische updates in als die beschikbaar zijn.", + "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "usagesOfTopic": "Gebruik van {topic}", + "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "noUsagesFound": "Geen gebruik gevonden", + "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "outsideSelectedInstance": "buiten de geselecteerde instantie", + "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "doRefactor": "Refactoring uitvoeren", + "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "orphanTopicTitle": "Onderwerpbestand wordt niet meer gebruikt", + "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "keepTopicFile": "Onderwerpbestand behouden", + "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "orphanTopicMessage": "“{topic}” wordt nergens meer gebruikt in dit Writerside-project. Verwijder het bestand of bewaar het voor gebruik in een andere instantie.", + "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "defaultNewTopicTitle": "Nieuw onderwerp", + "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "topicTitle": "Onderwerptitel", + "@topicTitle": {"description":"Create topic dialog field label."}, + "fileName": "Bestandsnaam", + "@fileName": {"description":"Create topic dialog field label."}, + "topicTitleRequired": "Onderwerptitel is vereist.", + "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "fileNameRequired": "Bestandsnaam is vereist.", + "@fileNameRequired": {"description":"Validation message for missing file name."}, + "rename": "Hernoemen", + "@rename": {"description":"Rename command label."}, + "confirmDeleteFileTitle": "Bestand verwijderen?", + "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "confirmDeleteFolderTitle": "Map verwijderen?", + "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "confirmDeleteFileMessage": "{name} verwijderen? Dit kan niet ongedaan worden gemaakt.", + "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteFolderMessage": "{name} en alle bestanden daarin verwijderen? Dit kan niet ongedaan worden gemaakt.", + "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "useSingleSafeFileName": "Gebruik één veilige bestandsnaam.", + "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "useExpectedExtension": "Gebruik de extensie {extension} voor het geselecteerde formaat.", + "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "useIdentifierCharacters": "Gebruik letters, cijfers, onderstrepingstekens of koppeltekens vóór de extensie.", + "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "topicIdAlreadyExists": "Onderwerp-ID bestaat al.", + "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "createWritersideTopicFailed": "Kan Writerside-onderwerp niet maken.", + "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "noOutline": "Geen overzicht", + "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "expandKind": "Vouw {kind} uit", + "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "collapseKind": "{kind} samenvouwen", + "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "foldKindSection": "sectie", + "@foldKindSection": {"description":"Fold kind label for a section."}, + "foldKindList": "lijst", + "@foldKindList": {"description":"Fold kind label for a list."}, + "foldKindQuote": "citaat", + "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "foldKindTag": "label", + "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "sourceSearchPreviousMatch": "Vorige overeenkomst", + "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "sourceSearchNextMatch": "Volgende overeenkomst", + "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "sourceSearchCaseSensitive": "Hoofdlettergevoelig", + "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "sourceSearchWholeWord": "Heel woord", + "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "sourceSearchRegex": "Regex", + "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "sourceSearchReplacement": "Vervangen door", + "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, + "sourceSearchReplaceCurrent": "Huidige vervangen", + "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "sourceSearchReplaceAndFindNext": "Vervangen en volgende zoeken", + "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "sourceSearchReplaceAll": "Vervang alles", + "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "workspaceReplace": "Vervangen in werkruimte", + "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "reviewReplacements": "Vervangingen controleren", + "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "applyReplacements": "Vervangingen toepassen", + "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "skippedFiles": "Overgeslagen bestanden", + "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "workspaceReplaceDirtyBuffer": "Niet-opgeslagen editorinhoud", + "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "workspaceReplaceDiskContent": "Opgeslagen schijfinhoud", + "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "selectFileMatches": "Selecteer alle {count} overeenkomsten", + "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "workspaceReplaceApplied": "{matches} overeenkomsten in {files} bestanden vervangen; {skipped} overgeslagen.", + "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Met afsluitende nieuwe regel", + "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Zonder afsluitende nieuwe regel", + "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "normalizeLineEndings": "Normaliseer regeleinden", + "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "mixedLineEndingsSavePrompt": "Dit document bevat gemengde regeleinden. Kies een formaat.", + "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "workspaceReplaceMixedLineEndings": "{fileName} gebruikt gemengde regeleinden. Kies het formaat dat u wilt gebruiken voordat u het vervangt.", + "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "workspaceReplaceIssueOversized": "Een te groot bestand overgeslagen.", + "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "workspaceReplaceIssueUnreadable": "Er is een bestand overgeslagen dat niet kon worden gelezen.", + "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "workspaceReplaceIssueInvalidUtf8": "Er is een bestand overgeslagen dat geen geldige UTF-8 is.", + "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "workspaceReplaceIssueTruncated": "Het vervangende voorbeeld is ingekort.", + "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "workspaceReplaceIssueFileChanged": "Een bestand overgeslagen dat na het voorbeeld is gewijzigd.", + "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "workspaceReplaceIssueBufferChanged": "Er is een editorbuffer overgeslagen die na het voorbeeld is gewijzigd.", + "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "workspaceReplaceIssueNormalizationRequired": "Kies LF- of CRLF-normalisatie voordat u vervangt.", + "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "workspaceReplaceIssuePartialConflict": "Het terugdraaien is gestopt omdat het bestand tegelijkertijd is gewijzigd. Er kunnen enkele vervangingen overblijven; verplaatste inhoud werd bewaard op het onderstaande pad.", + "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "workspaceReplaceIssueApplyFailed": "De herziene vervanging kon niet worden vastgelegd; er zijn geen bestanden gewijzigd.", + "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "externalChangesTitle": "Externe wijzigingen — {fileName}", + "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "externalFileDeleted": "Dit bestand is van schijf verwijderd.", + "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "externalFileChanged": "Dit bestand is op schijf gewijzigd terwijl er niet-opgeslagen bewerkingen waren.", + "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, + "recoveredDocumentReview": "Herstelde niet-opgeslagen inhoud voor {fileName}. Controleer de inhoud en sla deze op, gebruik Opslaan als of verwijder deze.", + "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "compare": "Vergelijken", + "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "reloadFromDisk": "Herladen vanaf schijf", + "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "keepMine": "Mijn versie behouden", + "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "saveAs": "Opslaan als", + "@saveAs": {"description":"Action that saves the current document to another path."}, + "sourceSearchInvalidRegex": "Ongeldige reguliere expressie", + "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "sourceLargeFileFeaturesPaused": "Groot bestand: markeren en vouwen worden gepauzeerd", + "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "nothingToRead": "Niets te lezen", + "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, + "admonition": "Vermaning", + "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "quote": "Citaat", + "@quote": {"description":"Label for a neutral Writerside quote block."}, + "note": "Opmerking", + "@note": {"description":"Preview label for a note admonition."}, + "tip": "Tip", + "@tip": {"description":"Preview label for a tip admonition."}, + "warning": "Waarschuwing", + "@warning": {"description":"Preview label for a warning admonition."}, + "tabs": "Tabbladen", + "@tabs": {"description":"Preview label for a tabs block."}, + "tab": "Tab", + "@tab": {"description":"Preview label for a tab block."}, + "procedure": "Procedure", + "@procedure": {"description":"Preview label for a procedure block."}, + "step": "Stap", + "@step": {"description":"Preview label for a procedure step."}, + "topic": "Onderwerp", + "@topic": {"description":"Preview label for a topic element."}, + "chapter": "Hoofdstuk", + "@chapter": {"description":"Preview label for a chapter element."}, + "couldNotOpenTarget": "Kon {target} niet openen", + "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "linkTargetNotFound": "Linkdoel niet gevonden: {targetPath}", + "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "cannotOpenFileTypeInEditor": "Kan dit bestandstype niet openen in de editor", + "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "anchorNotFound": "Anker niet gevonden: {anchor}", + "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "noProblemsFound": "Geen problemen gevonden", + "@noProblemsFound": {"description":"Diagnostics empty state."}, + "noResults": "Geen resultaten", + "@noResults": {"description":"Search empty state."}, + "searchResultLine": "{relativePath} - Regel {lineNumber}", + "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "untitledResult": "Naamloos resultaat", + "@untitledResult": {"description":"Fallback search result title."}, + "documentKindMarkdownFile": "Markdown-bestand", + "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "documentKindWritersideMarkdownTopic": "Writerside Markdown-onderwerp", + "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "documentKindWritersideXmlTopic": "Writerside XML-onderwerp", + "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "documentKindWritersideTree": "Writerside-tree", + "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "documentKindConfigurationFile": "Configuratiebestand", + "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "documentKindVariablesFile": "Variabelenbestand", + "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "documentKindCategoriesFile": "Categorieën bestand", + "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "documentKindResourceFile": "Bronbestand", + "@documentKindResourceFile": {"description":"Search result document kind label."}, + "workspaceErrorOpenFailed": "Openen mislukt: {error}", + "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideProjectFailed": "Kan Writerside-project niet maken: {error}", + "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideTopicFailed": "Kan Writerside-onderwerp niet maken: {error}", + "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCouldNotOpenFile": "Kan bestand niet openen: {error}", + "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorChooseWhereToSaveMarkdown": "Kies waar u dit Markdown-bestand wilt opslaan.", + "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "workspaceErrorSaveBlockedFileChangedOnDisk": "Opslaan geblokkeerd: bestand gewijzigd op schijf.", + "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "workspaceErrorSaveFailed": "Opslaan mislukt: {error}", + "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorFileOperationFailed": "Bestandsbewerking mislukt: {error}", + "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorValidationFailed": "Validatie mislukt: {error}", + "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceRecoveryRestored": "{count, plural, =1{1 niet-opgeslagen document is hersteld. Controleer het voordat u het opslaat of weggooit.} other{{count} niet-opgeslagen documenten zijn hersteld. Controleer elk document voordat u het opslaat of weggooit.}}", + "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "workspaceRecoveryDamaged": "{count, plural, =1{1 beschadigd herstelrecord kon niet worden hersteld. Het oorspronkelijke herstelbestand is bewaard voor inspectie.} other{{count} beschadigde herstelrecords konden niet worden hersteld. Geldige herstelrecords blijven beschikbaar.}}", + "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "errorPathDoesNotExist": "Pad bestaat niet: {path}", + "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetDirectoryNotEmpty": "Doelmap bestaat al en is niet leeg: {path}", + "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetPathNotDirectory": "Doelpad bestaat al en is geen map: {path}", + "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "errorGeneratedFileAlreadyExists": "Gegenereerd bestand bestaat al: {path}", + "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "errorParentDirectoryRequired": "Bovenliggende map is vereist.", + "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "errorParentDirectoryMissing": "Bovenliggende map bestaat niet: {path}", + "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "errorDirectoryMissing": "Map bestaat niet: {path}", + "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "errorPathAlreadyExists": "Pad bestaat al: {path}", + "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "errorFileNameRequired": "Bestandsnaam is vereist.", + "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "errorFileNameUnsafe": "De bestandsnaam moet uit één veilig padsegment bestaan.", + "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "errorFileOperationInvalidTarget": "Kan een map niet naar zichzelf verplaatsen.", + "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "errorFileOperationOutsideRoot": "Bestandsbewerkingen moeten binnen de werkruimte blijven.", + "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "errorFileOperationRoot": "De hoofdmap van de werkruimte kan niet worden gewijzigd vanuit de bestandsboom.", + "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "errorProjectNameRequired": "Projectnaam is vereist.", + "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "errorDirectoryNameRequired": "Mapnaam is vereist.", + "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "errorDirectoryNameUnsafe": "De mapnaam moet uit één veilig padsegment bestaan.", + "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "errorInstanceIdInvalid": "De instantie-ID moet beginnen met een kleine letter en mag alleen kleine letters, cijfers, onderstrepingstekens en koppeltekens bevatten.", + "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "errorTopicFileInvalid": "De onderwerpbestandsnaam moet een Markdown-bestandsnaam zijn zonder padscheidingstekens.", + "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "errorTopicTitleRequired": "Onderwerptitel is vereist.", + "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "errorWritersideModuleRootMissing": "De root van de Writerside-module bestaat niet: {path}", + "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideModuleNotOpen": "Er moet een Writerside-module geopend zijn om een onderwerp te kunnen maken.", + "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "errorWritersideInstanceTreeMissing": "De Writerside-module heeft geen instantieboom.", + "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "errorWritersideTreeFileMissing": "Writerside-treebestand bestaat niet: {path}", + "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "errorTopicIdAlreadyExists": "Onderwerp-ID \"{topicId}\" bestaat al in deze helpmodule.", + "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "errorTopicFileAlreadyExists": "Onderwerpbestand bestaat al: {path}", + "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "errorReferenceTopicMissing": "Referentieonderwerp is niet aanwezig in de geselecteerde boom: {topic}", + "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideTocNodeMissing": "Het geselecteerde TOC-item bestaat niet meer.", + "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "errorWritersideTocInvalidMove": "Een TOC-item kan niet naar zichzelf of naar een van zijn onderliggende items worden verplaatst.", + "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "errorWritersideStartTopicDelete": "Het startonderwerp {topic} kan niet worden verwijderd. Kies eerst een andere startpagina.", + "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideSafeDeleteRequired": "Gebruik Veilig verwijderen voor Writerside-onderwerpbestanden.", + "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "errorWritersideTopicUsageScanFailed": "Kan de onderwerpgebruikscan niet voltooien. Er zijn geen bestanden gewijzigd.", + "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "errorWritersideTopicUsagesRemain": "Sommige verwijzingen naar onderwerpen vereisen nog aandacht. Controleer ze voordat u verdergaat.", + "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "errorWritersideRedirectInvalid": "Het geselecteerde omleidingsdoel is niet langer geldig. Kies het opnieuw.", + "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "errorWritersideRollbackFailed": "Het verwijderen van het onderwerp kan niet volledig worden teruggedraaid. Bekijk deze paden voordat u verdergaat: {paths}", + "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "errorTopicsRootUnsafe": "De hoofdmap van Onderwerpen moet een veilige relatieve map zijn.", + "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "errorTopicFileNameUnsafe": "De onderwerpbestandsnaam moet uit één veilig padsegment bestaan.", + "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "errorTopicFileExtensionMismatch": "De onderwerpbestandsextensie moet overeenkomen met het geselecteerde formaat ({extension}).", + "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "errorTopicFileNameInvalid": "De bestandsnaam van het onderwerp mag alleen letters, cijfers, onderstrepingstekens en koppeltekens bevatten.", + "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "errorUnknown": "Onbekende fout: {code}", + "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "diagnosticWorkspaceFileStatFailed": "Kan de metadata van het bestand niet lezen: {error}", + "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceScanSkipped": "Grote werkruimte gedetecteerd. Sommige bestanden zijn overgeslagen om de app responsief te houden.", + "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "diagnosticWorkspaceScanInspectFailed": "Kan werkruimte-item niet inspecteren: {error}", + "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceFileTooLarge": "Bestand is groter dan de limiet voor automatisch parseren van de bèta.", + "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "diagnosticWorkspaceFileReadFailed": "Kon het Markdown-bestand niet lezen: {error}", + "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticMarkdownAttributeMalformed": "Ongeldig opgemaakt kopattribuutblok in Writerside.", + "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "diagnosticMarkdownHeadingDuplicateId": "Dubbele kop-ID \"{id}\".", + "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTopicH1ConvertedToChapter": "Extra H1-koppen op het hoogste niveau worden behandeld als hoofdstukken.", + "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown-onderwerp heeft geen H1- of voorwerktitel.", + "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "diagnosticWritersideXmlTopicMissingTitle": "XML-onderwerp mist titel.", + "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "diagnosticWritersideTopicFileMissingTitle": "Onderwerp \"{fileName}\" mist een titel.", + "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, + "diagnosticMarkdownFrontMatterMalformed": "Frontmatter is niet afgesloten.", + "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "diagnosticMarkdownRawHtmlUnsafe": "Onveilig HTML-element.", + "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "diagnosticMarkdownLinkUnresolvedTarget": "Linkdoel bestaat niet: {targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "diagnosticMarkdownLinkUnresolvedAnchor": "Anker \"{anchor}\" bestaat niet.", + "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "diagnosticMarkdownImageMissingAlt": "Afbeelding \"{destination}\" mist alt-tekst.", + "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticMarkdownImageMissingFile": "Afbeelding bestaat niet: {destination}", + "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticInvalidXml": "Ongeldige XML: {message}", + "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "diagnosticWritersideConfigInvalidRoot": "writerside.cfg root moet zijn.", + "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "diagnosticWritersideConfigMissingSnippetsSrc": "snippets-declaratie ontbreekt src.", + "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups-declaratie ontbreekt src.", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "diagnosticWritersideConfigInvalidKeymapsMode": "Niet-ondersteunde toetsenbordmodus: {mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceSrc": "Instance-declaratie ontbreekt src.", + "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg registreert geen instantie.", + "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "diagnosticWritersideTreeInvalidRoot": ".tree root moet zijn.", + "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "diagnosticWritersideTreeMissingId": "Instantieprofiel mist ID.", + "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "diagnosticWritersideTreeIdMismatch": "Boombestandsstam komt niet overeen met instantie-ID '{id}'.", + "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingStartPage": "Niet-bibliotheekinstantie mist startpagina.", + "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "diagnosticWritersideStartPageMissing": "Startpagina \"{startPage}\" bestaat niet.", + "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "diagnosticWritersideTreeDuplicateTopic": "Onderwerp \"{topic}\" komt meer dan één keer voor in de inhoudsopgave van deze instantie.", + "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideVariableMalformedDeclaration": "Variabeledeclaratie moet een naam en waarde hebben.", + "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "diagnosticWritersideVariableDuplicateName": "Variabele \"{name}\" wordt meer dan één keer gedeclareerd.", + "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideCategoryMissingId": "Categorie mist ID.", + "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "diagnosticWritersideCategoryDuplicateId": "Categorie \"{id}\" wordt meer dan één keer gedeclareerd.", + "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideCategoryDuplicateOrder": "Categorievolgorde '{order}' wordt meer dan één keer gedeclareerd.", + "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "diagnosticWritersideTopicInvalidRoot": ".topic root moet zijn.", + "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "diagnosticWritersideTopicMissingRootId": "XML-onderwerp mist root-ID.", + "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "diagnosticWritersideTopicRootIdMismatch": "XML-onderwerphoofd-id \"{id}\" moet overeenkomen met de bestandsnaam \"{expectedId}\".", + "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateElementId": "Element-ID \"{elementId}\" komt meerdere keren voor.", + "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "diagnosticWritersideTopicAnchorMissingHref": " mist href.", + "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "diagnosticWritersideConfigMissing": "Voor de Writerside-modus is writerside.cfg vereist.", + "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "De geconfigureerde build-configuratiemap ontbreekt: {relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "De geconfigureerde map met API-specificaties ontbreekt: {relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingSnippetsDirectory": "De map met geconfigureerde fragmenten ontbreekt: {relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingVarsFile": "Het geconfigureerde variabelenbestand ontbreekt: {relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingCategoriesFile": "Het geconfigureerde categorieënbestand ontbreekt: {relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "Het geconfigureerde instantiegroepenbestand ontbreekt: {relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceTree": "Geregistreerde instantiestructuur \"{source}\" bestaat niet.", + "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideTopicReadFailed": "Kan onderwerpbestand niet lezen: {error}", + "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "Standaard onderwerpenmap ontbreekt: {relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicsDirectoryMissing": "De map met geconfigureerde onderwerpen ontbreekt: {relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideImagesDirectoryMissing": "Geconfigureerde afbeeldingenmap ontbreekt: {relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateId": "Element-ID \"{id}\" komt meerdere keren voor.", + "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingTopic": "TOC-referenties ontbreken onderwerp \"{topic}\".", + "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideTreeInvalidHref": "Externe href \"{href}\" is ongeldig.", + "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "diagnosticWritersideVariableUnresolved": "Variabele \"%{name}%\" is niet gedeclareerd.", + "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideTopicLinkUnresolved": "Onderwerplink \"{destination}\" werkt niet.", + "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticWritersideAnchorUnresolved": "Anker \"{anchor}\" bestaat niet in \"{targetName}\".", + "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, + "diagnosticWritersideIncludeMissingFrom": " ontbreekt in.", + "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, + "diagnosticWritersideIncludeSourceMissing": "Bron \"{from}\" opnemen bestaat niet.", + "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "diagnosticWritersideIncludeElementMissing": "Include-element \"{elementId}\" bestaat niet in \"{from}\".", + "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, + "diagnosticWritersideCategoryUnresolved": "Zie ook categorie \"{ref}\" wordt niet gedeclareerd.", + "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "diagnosticWritersideTopicAmbiguousReference": "Onderwerpreferentie \"{reference}\" is dubbelzinnig.", + "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "diagnosticUnknown": "Onbekende diagnose: {code}", + "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, + "close": "Sluiten", + "@close": {"description":"Close action label."}, + "git": "Git", + "@git": {"description":"Git sidebar tab label."}, + "gitDiff": "Git diff", + "@gitDiff": {"description":"Title for the Git diff viewer."}, + "gitShowDiff": "Verschil tonen", + "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "gitDiffHunkRange": "oud {oldRange} → nieuw {newRange}", + "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "gitDiffNoLines": "geen regels", + "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "gitUnavailableTitle": "Git is niet beschikbaar", + "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "gitUnavailableMessage": "{reason, select, other{Installeer Git of configureer BusyMark om een beschikbaar Git-uitvoerbaar bestand te gebruiken. {reason}}}", + "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "gitTrustRequiredTitle": "Deze werkruimte vertrouwen voor Git?", + "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "gitTrustRequiredMessage": "Git-repository's kunnen programma's uitvoeren via hooks, filters en andere configuraties. Vertrouw deze werkruimte voordat BusyMark repositorygegevens leest of Git-acties inschakelt.", + "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "gitTrustWorkspace": "Werkruimte vertrouwen", + "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "gitNotRepositoryTitle": "Geen Git-repository", + "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "gitNotRepositoryMessage": "Deze werkruimte bevindt zich niet in een Git-repository.", + "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "gitInitializeRepository": "Git-opslagplaats initialiseren", + "@gitInitializeRepository": {"description":"Action label for git init."}, + "gitDetachedHead": "Losgekoppelde HEAD", + "@gitDetachedHead": {"description":"Detached HEAD label."}, + "gitDetachedHeadAt": "Vrijstaand bij {commit}", + "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "gitNoUpstream": "Geen upstream", + "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "gitAheadCount": "{count, plural, =1{1 niet-gepushte commit} other{{count} niet-gepushte commits}}", + "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "gitBehindCount": "{count, plural, =1{1 commit om te pullen} other{{count} commits om te pullen}}", + "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, + "gitClean": "Schoon", + "@gitClean": {"description":"Git clean state label."}, + "gitConflicts": "Conflicten", + "@gitConflicts": {"description":"Git conflicts group label."}, + "gitChanges": "Wijzigingen", + "@gitChanges": {"description":"Git changes view label."}, + "gitStaged": "Gestaged", + "@gitStaged": {"description":"Git staged changes group label."}, + "gitUnstaged": "Niet-gestaged", + "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "gitHistory": "Geschiedenis", + "@gitHistory": {"description":"Git history view label."}, + "gitBranches": "Takken", + "@gitBranches": {"description":"Git branch menu label."}, + "gitActions": "Git-acties", + "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "gitPull": "Pull", + "@gitPull": {"description":"Git pull action label."}, + "gitFetch": "Fetch", + "@gitFetch": {"description":"Git fetch action label."}, + "gitPush": "Push", + "@gitPush": {"description":"Git push action label."}, + "gitCommit": "Commit", + "@gitCommit": {"description":"Git commit action label."}, + "gitSelectForCommit": "Voor commit selecteren", + "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "gitRemoveFromCommit": "Bestand uit staging verwijderen", + "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "gitDiscard": "Wijzigingen verwerpen", + "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "gitOpenFile": "Bestand openen", + "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "gitMarkResolved": "Als opgelost markeren", + "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "gitUntracked": "Niet-getrackt", + "@gitUntracked": {"description":"Git untracked files group label."}, + "gitCommitMessage": "Commitbericht", + "@gitCommitMessage": {"description":"Commit message field label."}, + "gitCommitSelectedFiles": "Geselecteerde bestanden committen", + "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "gitCommitNoSelectedFiles": "Stage ten minste één bestand voordat u commit.", + "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "gitStagedFileCount": "{count, plural, =1{1 gestaged bestand} other{{count} gestagede bestanden}}", + "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "gitOutsideWorkspace": "Buiten werkruimte", + "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "gitCommitMessageRequired": "Voer een commit-bericht in.", + "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "gitCreateBranch": "Branch maken", + "@gitCreateBranch": {"description":"Git create branch action label."}, + "gitNewBranch": "Nieuwe branch", + "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "gitBranchName": "Branchnaam", + "@gitBranchName": {"description":"Branch name field label."}, + "gitSwitchBranch": "Branch wisselen", + "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "gitNoChanges": "Geen wijzigingen", + "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "gitNoHistory": "Geen geschiedenis", + "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "gitNoBranches": "Geen branches", + "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "gitNoDiff": "Geen verschil om te laten zien", + "@gitNoDiff": {"description":"Git diff empty state."}, + "gitBinaryFile": "Binair bestand. BusyMark geeft geen binaire patches weer.", + "@gitBinaryFile": {"description":"Git diff binary file message."}, + "gitBinaryFileInfo": "Binair bestand ({size} bytes). BusyMark geeft geen binaire patches weer.", + "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "gitUnsavedChangesBanner": "Niet-opgeslagen editorwijzigingen worden pas opgenomen nadat ze zijn opgeslagen.", + "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, + "gitConfirmDiscardTitle": "Git-wijzigingen negeren?", + "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "gitConfirmDiscardTracked": "{count, plural, =1{Alle gestagede en niet-gestagede wijzigingen in het geselecteerde getrackte bestand worden teruggezet naar HEAD.} other{Alle gestagede en niet-gestagede wijzigingen in de geselecteerde getrackte bestanden worden teruggezet naar HEAD.}}", + "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardUntracked": "{count, plural, =1{Het geselecteerde niet-getrackte bestand wordt verwijderd.} other{De geselecteerde niet-getrackte bestanden worden verwijderd.}}", + "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardMixed": "{count, plural, =1{Het geselecteerde bestand wordt teruggezet of verwijderd op basis van de Git-status.} other{De geselecteerde bestanden worden teruggezet of verwijderd op basis van hun Git-status.}}", + "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmSwitchBranchTitle": "Overstappen naar {branch}?", + "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "gitConfirmSwitchBranchMessage": "BusyMark laadt de werkruimte opnieuw vanaf schijf nadat Git van branch is gewisseld.", + "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "gitConfirmPushSetUpstreamTitle": "Upstream-branch instellen?", + "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "gitConfirmPushSetUpstreamMessage": "Deze branch heeft geen upstream. BusyMark kan {branch} pushen en de upstream instellen als er precies één remote is geconfigureerd.", + "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "gitProjectHistory": "Projectgeschiedenis", + "@gitProjectHistory": {"description":"Project history action label."}, + "gitFileHistory": "Bestandsgeschiedenis", + "@gitFileHistory": {"description":"Current file history action label."}, + "gitFileHistoryRequiresOpenFile": "Bestandsgeschiedenis vereist een geopend Markdown-bestand.", + "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "gitLoadMore": "Meer laden", + "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "gitChangesInCommit": "Wijzigingen in deze commit", + "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, + "gitCompareWithCurrent": "Vergelijk met actueel", + "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "gitRestoreVersion": "Herstel deze versie", + "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "gitConfirmRestoreTitle": "Deze bestandsversie herstellen?", + "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "gitConfirmRestoreMessage": "BusyMark vervangt het huidige werkboombestand door de geselecteerde vastgelegde versie. Het herstelde bestand blijft niet-gestaged.", + "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "gitCommitActions": "Commitacties", + "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "gitResetCurrentBranchToHere": "Huidige branch resetten naar hier…", + "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "gitResetCurrentBranchTitle": "Branch {branch} resetten naar {commit}?", + "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitResetCurrentBranchMessage": "Dit verplaatst branch {branch} naar commit {commit}. Kies hoe Git de index en werkboom bijwerkt.", + "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitReset": "Resetten", + "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "gitResetModeSoft": "Soft", + "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "gitResetModeSoftDescription": "Verplaats alleen de branch. Houd de index en werkboom ongewijzigd; verschillen met de geselecteerde commit blijven gestaged.", + "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "gitResetModeMixed": "Mixed", + "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "gitResetModeMixedDescription": "Verplaats de branch en reset de index. Houd de werkboom ongewijzigd; de verschillen worden niet-gestaged.", + "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "gitResetModeHard": "Hard", + "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "gitResetModeHardDescription": "Verplaats de branch en reset de index en werkboom. Wijzigingen in getrackte bestanden worden genegeerd; niet-getrackte bestanden die in de weg staan kunnen worden verwijderd.", + "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "gitResetModeKeep": "Keep", + "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "gitResetModeKeepDescription": "Verplaats de branch en reset getrackte bestanden met behoud van lokale wijzigingen. Git wordt afgebroken als deze wijzigingen in conflict komen met de reset.", + "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "fileActions": "Bestandsacties", + "@fileActions": {"description":"Tooltip for a file action menu."}, + "actions": "Acties", + "@actions": {"description":"Tooltip for a general action menu."}, + "gitStatusAdded": "Toegevoegd", + "@gitStatusAdded": {"description":"Git file status label."}, + "gitStatusDeleted": "Verwijderd", + "@gitStatusDeleted": {"description":"Git file status label."}, + "gitStatusRenamed": "Hernoemd", + "@gitStatusRenamed": {"description":"Git file status label."}, + "gitStatusCopied": "Gekopieerd", + "@gitStatusCopied": {"description":"Git file status label."}, + "gitStatusUntracked": "Niet-getrackt", + "@gitStatusUntracked": {"description":"Git file status label."}, + "gitStatusConflicted": "In conflict", + "@gitStatusConflicted": {"description":"Git file status label."}, + "gitStatusIgnored": "Genegeerd", + "@gitStatusIgnored": {"description":"Git file status label."}, + "gitStatusTypeChanged": "Soort gewijzigd", + "@gitStatusTypeChanged": {"description":"Git file status label."}, + "gitStatusModified": "Gewijzigd", + "@gitStatusModified": {"description":"Git file status label."}, + "gitStatusUnknown": "Onbekend", + "@gitStatusUnknown": {"description":"Git file status label."}, + "gitErrorUnavailable": "Git is niet beschikbaar.", + "@gitErrorUnavailable": {"description":"Git error message."}, + "gitErrorNotRepository": "Deze werkruimte is geen Git-opslagplaats.", + "@gitErrorNotRepository": {"description":"Git error message."}, + "gitErrorUnsafePath": "BusyMark heeft een onveilig Git-pad geblokkeerd.", + "@gitErrorUnsafePath": {"description":"Git error message."}, + "gitErrorInvalidBranchName": "Voer een geldige branchnaam in.", + "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "gitErrorNoRemote": "Er is geen Git-remote geconfigureerd.", + "@gitErrorNoRemote": {"description":"Git error message."}, + "gitErrorNoUpstream": "Er is geen upstream-branch geconfigureerd.", + "@gitErrorNoUpstream": {"description":"Git error message."}, + "gitErrorMultipleRemotes": "Er zijn meerdere remotes geconfigureerd. Kies een upstream buiten deze versie van BusyMark.", + "@gitErrorMultipleRemotes": {"description":"Git error message."}, + "gitErrorDirtyWorkspace": "Sla wijzigingen in de BusyMark-editor op of verwerp ze voordat u van branch wisselt.", + "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "gitErrorResetDirtyWorkspace": "Sla wijzigingen in de BusyMark-editor op of verwerp ze voordat u de huidige branch reset.", + "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "gitErrorRestoreStagedFile": "Haal dit bestand eerst uit staging voordat u een historische versie herstelt.", + "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "gitErrorResetDetachedHead": "Checkout eerst een branch voordat u deze reset.", + "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "gitErrorDiverged": "De branches zijn uiteen gelopen. Los het samenvoegen of opnieuw baseren buiten deze versie van BusyMark op.", + "@gitErrorDiverged": {"description":"Git error message."}, + "gitErrorAuthorIdentity": "Git heeft een auteursnaam en e-mailadres nodig voordat het kan committen.", + "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "gitAuthorIdentityTitle": "Git-auteuridentiteit", + "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "gitAuthorIdentityMessage": "Voer de identiteit in die Git moet vastleggen bij commits. BusyMark zal het opslaan en deze commit opnieuw proberen.", + "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "gitAuthorName": "Naam", + "@gitAuthorName": {"description":"Git commit author name field label."}, + "gitAuthorEmail": "E-mail", + "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "gitAuthorIdentityGlobal": "Gebruik voor alle opslagplaatsen", + "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "gitAuthorIdentityGlobalDescription": "Als BusyMark als Snap is geïnstalleerd, geldt dit voor alle opslagplaatsen die in BusyMark worden geopend.", + "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "gitSaveIdentityAndCommit": "Identiteit opslaan en committen", + "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "gitErrorAuthentication": "Git-authenticatie is mislukt.", + "@gitErrorAuthentication": {"description":"Git error message."}, + "gitErrorNetwork": "Git-netwerkbewerking is mislukt.", + "@gitErrorNetwork": {"description":"Git error message."}, + "gitErrorConflict": "Git rapporteerde onopgeloste conflicten.", + "@gitErrorConflict": {"description":"Git error message."}, + "gitErrorCommandFailed": "Git-opdracht is mislukt.", + "@gitErrorCommandFailed": {"description":"Git error message."}, + "markdownAndHtml": "Markdown en HTML", + "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "markdownHtmlMarkdownBlocks": "Markdown-blokken", + "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "markdownHtmlMarkdownBlocksDescription": "Blokstructuren ondersteund in Markdown-bron en preview.", + "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "markdownHtmlInlineFormatting": "Inline-opmaak", + "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "markdownHtmlInlineFormattingDescription": "Opmaak die kan verschijnen in alinea's, lijstitems en tabelcellen.", + "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "markdownHtmlRawHtmlBlocks": "Ruwe HTML-blokken", + "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "markdownHtmlRawHtmlBlocksDescription": "Veilige HTML-tags op blokniveau weergegeven via BusyMark-voorbeeldwidgets.", + "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "markdownHtmlRawHtmlInline": "Onbewerkte HTML-inlinetags", + "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "markdownHtmlRawHtmlInlineDescription": "Veilige inline HTML-tags weergegeven zonder letterlijke tags weer te geven.", + "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "markdownHtmlSafety": "Veiligheidsregels", + "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "markdownHtmlSafetyDescription": "Onbewerkte HTML wordt geparseerd en opgeschoond voordat de preview wordt weergegeven.", + "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "markdownHtmlHeadings": "Koppen", + "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "markdownHtmlParagraphs": "Paragrafen", + "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "markdownHtmlLists": "Lijsten", + "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "markdownHtmlHtmlContainers": "Containers", + "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "markdownHtmlHtmlTextBlocks": "Tekstblokken", + "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "markdownHtmlHtmlFigures": "Figuren en afbeeldingen", + "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "markdownHtmlHtmlPreformatted": "Voorgeformatteerde code", + "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "markdownHtmlHtmlDisclosure": "Openklapbare blokken", + "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "markdownHtmlHtmlDescriptionLists": "Beschrijvingslijsten", + "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "markdownHtmlHtmlFormattingTags": "Opmaaktags", + "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "markdownHtmlHtmlInlineCodeTags": "Inline codetags", + "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "markdownHtmlHtmlNeutralInlineTags": "Semantische inline-tags", + "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "markdownHtmlSanitizedPreview": "Opgeschoond voorbeeld", + "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "markdownHtmlSanitizedPreviewDescription": "Toegestane HTML wordt geconverteerd naar BusyMark-voorbeeldblokken en niet weergegeven in een browser.", + "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "markdownHtmlSourcePreserved": "Bron behouden", + "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "markdownHtmlSourcePreservedDescription": "Ruwe HTML wordt exact als brontekst opgeslagen.", + "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "markdownHtmlMarkdownInsideHtml": "Markdown binnen HTML", + "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-markeringen in onbewerkte HTML worden weergegeven als letterlijke tekst.", + "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "markdownHtmlBlockedContent": "Actieve inhoud geblokkeerd", + "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "markdownHtmlBlockedContentDescription": "Scripts, stijlen, frames, formulieren, SVG, MathML, gebeurtenissen en onveilige attributen worden geblokkeerd.", + "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "markdownHtmlSafeUrls": "Alleen veilige URL's", + "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "markdownHtmlSafeUrlsDescription": "Links staan http-, https-, mailto-, tel-, relatieve en fragment-URL's toe; onveilige schema's worden geblokkeerd.", + "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "exportAsPdf": "Exporteren als PDF", + "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "pdfExportDescription": "Kies de pagina-indeling voor een verzorgde, op zichzelf staande PDF.", + "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "pdfRemoteImagesNote": "Externe afbeeldingen worden tijdens het exporteren niet gedownload. Lokale afbeeldingen zijn inbegrepen indien beschikbaar.", + "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "pdfPageSize": "Paginagrootte", + "@pdfPageSize": {"description":"PDF export page-size setting."}, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "pdfPageSizeLetter": "Letter", + "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "pdfOrientation": "Oriëntatie", + "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "pdfPortrait": "Portret", + "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "pdfLandscape": "Landschap", + "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "pdfMargins": "Marges", + "@pdfMargins": {"description":"PDF export page-margin setting."}, + "pdfMarginNarrow": "Smal", + "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "pdfMarginNormal": "Normaal", + "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "pdfMarginWide": "Breed", + "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "pdfIncludePageNumbers": "Voeg paginanummers toe", + "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "export": "Exporteren", + "@export": {"description":"Button label that starts an export."}, + "exportingPdf": "PDF exporteren…", + "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "fileTypePdf": "PDF-document", + "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "pdfExported": "{fileName} is geëxporteerd.", + "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, + "pdfExportedWithWarnings": "{fileName} is geëxporteerd met {count} waarschuwing(en).", + "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "pdfExportUnavailable": "Het PDF-exportonderdeel ontbreekt. Installeer BusyMark opnieuw en probeer het opnieuw.", + "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "pdfExportTimedOut": "De PDF-export duurde te lang en werd gestopt.", + "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "pdfExportFailed": "BusyMark kon dit document niet als PDF exporteren.", + "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "visualizationRendering": "Renderen…", + "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "visualizationStale": "Laatste geldige weergave wordt getoond", + "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "visualizationShowSource": "Bron tonen", + "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "visualizationShowRender": "Render weergeven", + "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, + "visualizationFitWidth": "Aan breedte aanpassen", + "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "visualizationSaveImage": "Afbeelding opslaan", + "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "visualizationCopyImage": "Afbeelding kopiëren", + "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "visualizationImageCopied": "Afbeelding gekopieerd", + "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "visualizationOpenApiReference": "Open API-referentie", + "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "visualizationValid": "Geldig", + "@visualizationValid": {"description":"OpenAPI validation success state."}, + "visualizationInvalid": "Ongeldig", + "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "visualizationServers": "Servers", + "@visualizationServers": {"description":"OpenAPI server count label."}, + "visualizationPaths": "Paden", + "@visualizationPaths": {"description":"OpenAPI path count label."}, + "visualizationOperations": "Operaties", + "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "visualizationTags": "Labels", + "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "visualizationNoOperations": "Geen overeenkomende bewerkingen", + "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "visualizationSearchOperations": "Zoekbewerkingen", + "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "visualizationRenderFailed": "Deze visualisatie kon niet worden weergegeven.", + "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "visualizationRetry": "Opnieuw proberen", + "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "visualizationSaved": "{fileName} opgeslagen", + "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "shortcutExportPdfDescription": "Exporteer het actieve document of de Writerside-module als PDF.", + "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "instances": "Instanties", + "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "newInstance": "Nieuwe instantie", + "@newInstance": {"description":"Action that creates a Writerside instance."}, + "newTocLibrary": "Nieuwe TOC-bibliotheek", + "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "editInstance": "Instantie bewerken", + "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "openTocFile": "TOC-bestand openen", + "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "createInstance": "Instantie maken", + "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "createTocLibrary": "TOC-bibliotheek maken", + "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "instanceContent": "Inhoud", + "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "instanceContentSource": "Maken vanuit", + "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "emptyInstance": "Lege instantie", + "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "markdownFiles": "Lokale Markdown-bestanden", + "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "chooseMarkdownFolder": "Kies de Markdown-map", + "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "errorWritersideInstanceImportSourceRequired": "Kies een map met Markdown-bestanden.", + "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "instanceAppearance": "Uiterlijk", + "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "instanceColor": "Pictogramkleur", + "@instanceColor": {"description":"Writerside instance icon-color field."}, + "instanceVersion": "Versie", + "@instanceVersion": {"description":"Writerside instance version field."}, + "instanceVersionInherited": "De projectversie is {version} als dit veld leeg is.", + "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "instanceWebPath": "Webpad", + "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "instanceStatus": "Status", + "@instanceStatus": {"description":"Writerside instance status field."}, + "instanceStatusRelease": "Release", + "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "instanceStatusEap": "EAP", + "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "instanceStatusDeprecated": "Verouderd", + "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "allowSearchEngineIndexing": "Sta zoekmachine-indexering toe", + "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "allowSearchEngineIndexingDescription": "Laat externe zoekmachines deze uitvoer indexeren.", + "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "offlineArtifact": "Offline artefact", + "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "offlineArtifactDescription": "Bundel bronnen zodat de gebouwde documentatie op zichzelf staat.", + "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "instanceOutputSettings": "Uitvoerinstellingen", + "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "markdownImportSource": "Markdown-bron", + "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "markdownImportFiles": "Markdown-bestanden", + "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "selectNone": "Selecteer geen", + "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "markdownFilesFound": "{count} Markdown-bestand(en) gevonden", + "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "noMarkdownFilesFound": "Er zijn geen Markdown-bestanden gevonden in deze map.", + "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "copyReferencedMedia": "Kopieer de media waarnaar wordt verwezen", + "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "copyReferencedMediaDescription": "Kopieer lokale afbeeldingen en video waarnaar door de geselecteerde bestanden wordt verwezen, terwijl de relatieve paden behouden blijven.", + "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "instanceIdRenameWarningTitle": "Naam van instantie-ID wijzigen?", + "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "instanceIdRenameWarning": "BusyMark zal de naam van het .tree-bestand hernoemen en de Writerside-projectreferenties bijwerken van “{oldId}” naar “{newId}”. Publicatiescripts worden niet gewijzigd en moeten afzonderlijk worden bijgewerkt.", + "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "renameAndUpdateReferences": "Hernoem en update referenties", + "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "tocLibraryDescription": "Een TOC-bibliotheek slaat herbruikbare secties op en produceert geen eigen uitvoer.", + "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "defaultTocLibraryName": "Gedeelde inhoudsopgave", + "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "instanceColorAutomatic": "Automatisch", + "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "instanceColorBlue": "Blauw", + "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "instanceColorGreen": "Groen", + "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "instanceColorOrange": "Oranje", + "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "instanceColorPurple": "Paars", + "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "instanceColorRed": "Rood", + "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "instanceColorTeal": "Turkoois", + "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "instanceColorYellow": "Geel", + "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "errorWritersideInstanceNameRequired": "Voer een instantienaam in.", + "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "errorWritersideInstanceIdExists": "Er bestaat al een instantie met ID “{id}”.", + "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "errorWritersideInstanceTreeExists": "De instantiestructuur bestaat al: {path}", + "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSourceMissing": "De Markdown-bronmap bestaat niet: {path}", + "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSelectionRequired": "Selecteer ten minste één Markdown-bestand om te importeren.", + "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "errorWritersideInstanceImportFileInvalid": "Dit is geen leesbaar Markdown-bestand binnen de geselecteerde bron: {path}", + "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportTargetExists": "Importeren zou een bestaand projectbestand overschrijven: {path}", + "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceFilesChanged": "Instantiebestanden gewijzigd op schijf. Bekijk ze en probeer het opnieuw.", + "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "errorWritersideInstanceRollbackFailed": "BusyMark kon de wijziging aan de instantie niet volledig ongedaan maken. Controleer deze bestanden voordat u verdergaat: {paths}", + "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "errorWritersideInstanceLibraryImport": "Een inhoudsopgavebibliotheek kan geen Markdown-onderwerpen importeren.", + "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "errorWritersideInstanceWebPathInvalid": "Het webpad moet uit één segment bestaan.", + "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "errorWritersideInstanceConfigurationInvalid": "De Writerside-instantieconfiguratie is ongeldig. Corrigeer de diagnose en probeer het opnieuw.", + "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "errorWritersideInstanceTemporaryFile": "BusyMark kon de wijzigingen aan de instantie niet veilig doorvoeren.", + "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, + "diagnosticWritersideTreeInvalidStatus": "Onbekende instantiestatus '{status}'. Gebruik release, eap of deprecated.", + "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "diagnosticWritersideDuplicateInstanceId": "De instantie-ID “{id}” wordt door meer dan één boombestand gebruikt.", + "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml moet een hoofdelement hebben.", + "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, + "diagnosticWritersideBuildProfilesInvalidBoolean": "De waarde voor {name} “{value}” moet waar of onwaar zijn.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "diagnosticWritersideBuildProfileMissingInstance": "Een -element moet een instantie-ID specificeren.", + "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, + "diagnosticWritersideTreeInvalidInclude": "Een boom moet zowel from als element-id specificeren.", + "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "diagnosticWritersideTreeMissingSnippetId": "Een boom moet een ID specificeren.", + "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "Een TOC-referentie tussen meerdere instanties moet zowel ref als in specificeren.", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "diagnosticWritersideTreeConflictingTargets": "Een TOC-element kan niet meer dan één onderwerp, referentie, link of omleiding targeten.", + "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "diagnosticWritersideTreeDuplicateElementId": "Boomelement-ID “{id}” wordt meer dan één keer gedeclareerd.", + "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideInstanceGroupsInvalidRoot": "Het instantiegroepenbestand moet een hoofdelement hebben.", + "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "diagnosticWritersideInstanceGroupInvalid": "Een instantiegroep moet een niet-lege ID en lijst met instanties opgeven.", + "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "diagnosticWritersideInstanceGroupDuplicateId": "Instantiegroep-ID '{id}' wordt meer dan één keer gedeclareerd.", + "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideExternalTreeInclude": "TOC include “{source}#{id}” behoort tot de externe module “{origin}” en kan niet worden uitgebreid in deze werkruimte.", + "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "diagnosticWritersideTreeIncludeElementMissing": "Boomelement “{id}” bestaat niet in de geregistreerde boom “{source}”.", + "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideTreeCircularInclude": "Boom include “{source}#{id}” creëert een cyclus.", + "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideUnknownInstanceGroup": "Instantievoorwaarde verwijst naar onbekende groep “@{group}”.", + "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "diagnosticWritersideReferenceInstanceMissing": "Referentie voor meerdere instanties is gericht op onbekende instantie '{instance}'.", + "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "diagnosticWritersideReferenceTopicMissing": "Onderwerp “{topic}” bevindt zich niet in de instantie waarnaar wordt verwezen “{instance}”.", + "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "download": "Downloaden", + "@download": {"description":"Button label that downloads a required component."}, + "exportWritersideAsPdf": "Exporteer Writerside als PDF", + "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "writersidePdfContent": "Inhoud exporteren", + "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "writersidePdfPage": "Pagina", + "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "exportingWritersidePdf": "Writerside-PDF exporteren...", + "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "ai": "AI", + "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "aiLocalOllama": "Lokale Ollama", + "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "aiDisabled": "Uitgeschakeld", + "@aiDisabled": {"description":"AI provider option that disables AI features."}, + "aiLocalOnlyDescription": "AI-bewerking is uitsluitend lokaal. BusyMark stuurt alleen de weergegeven context naar de geselecteerde provider en past nooit een voorstel toe zonder beoordeling.", + "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "aiProvider": "AI-provider", + "@aiProvider": {"description":"Label for an AI provider selection."}, + "aiDefaultProvider": "Standaardprovider", + "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "aiConfigureProvider": "Provider configureren", + "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "aiChooseProvider": "Kies een AI-provider", + "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "aiOllamaEndpoint": "Ollama-eindpunt", + "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "aiOllamaModel": "Ollama-model", + "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "aiTestConnection": "Verbinding testen", + "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "aiTestingConnection": "Testen…", + "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "aiConnectionReady": "Verbonden. {count} geïnstalleerde modellen gevonden.", + "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "aiNoModels": "Geen model geselecteerd.", + "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "aiConnectionFailed": "BusyMark kon het genereren van AI-tekst niet verifiëren.", + "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "aiConfigureFirst": "Schakel een AI-provider in en verifieer een model in Instellingen → AI.", + "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "aiEditWithAi": "Bewerken met AI", + "aiRefineWithAi": "Verfijn met AI", + "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "aiInstruction": "Instructie", + "aiChangeTarget": "Wat kan er veranderen", + "aiSharedContext": "Context gedeeld met AI", + "aiTargetSelection": "Geselecteerde inhoud", + "aiTargetInsertAfterBlock": "Invoegen na huidig blok", + "aiTargetCurrentBlock": "Huidig blok", + "aiTargetCurrentSection": "Huidige sectie", + "aiTargetCompleteDocument": "Volledig document", + "aiContextNone": "Geen documentcontext", + "aiContextSelection": "Geselecteerde inhoud", + "aiContextCurrentBlock": "Huidig blok", + "aiContextCurrentSection": "Huidige sectie", + "aiContextCompleteDocument": "Volledig document", + "aiGenerating": "Voorstel genereren…", + "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "aiProposal": "AI-voorstel", + "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "aiGenerateProposal": "Voorstel genereren", + "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "aiContextDisclosure": "De geselecteerde provider ontvangt {count} tekens uit de weergegeven context.", + "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "aiOriginal": "Origineel", + "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "aiSuggested": "Voorgesteld", + "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "aiApplyProposal": "Voorstel toepassen", + "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "aiTokenUsage": "{input} invoertokens · {output} uitvoertokens", + "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "aiStaleProposal": "Het document is gewijzigd terwijl dit voorstel werd gegenereerd. Voer de actie opnieuw uit.", + "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "gitAiStagedChangesChanged": "De gestagede wijzigingen zijn gewijzigd terwijl dit commitbericht werd gegenereerd. Voer de actie opnieuw uit.", + "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "aiViewContext": "Verzonden context bekijken", + "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "aiReviewExactContent": "Controleer de exacte inhoud", + "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "aiContentToChange": "Te wijzigen inhoud", + "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "aiContentSentToAi": "Inhoud verzonden naar AI", + "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "aiApiKey": "API-sleutel", + "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "aiApiKeyStoredHint": "Er wordt een sleutel opgeslagen in het systeemreferentiearchief", + "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "aiApiKeyEnterHint": "Voer de API-sleutel van de provider in", + "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "aiReplaceApiKey": "Vervang de API-sleutel", + "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "aiSaveApiKey": "API-sleutel veilig opslaan", + "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "aiRemoveApiKey": "Opgeslagen API-sleutel verwijderen", + "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "aiCredentialSaved": "API-sleutel opgeslagen in het systeemreferentiesarchief.", + "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "aiCredentialRemoved": "De opgeslagen API-sleutel is verwijderd.", + "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "aiModelRouting": "Modelroutering", + "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "aiAutomaticRouting": "Automatisch per taak", + "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "aiFixedModelRouting": "Gebruik het geselecteerde model", + "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "aiPreferredModel": "Voorkeursmodel", + "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "aiModel": "Model", + "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "aiUsageThisMonth": "{requests} verzoeken · {input} invoertokens · {output} uitvoertokens", + "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "aiCloudConsentTitle": "Inhoud naar {provider} sturen?", + "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentEnable": "Schakel {provider} in", + "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentMessage": "Alleen de inhoud die in elk AI-beoordelingsdialoogvenster wordt weergegeven, wordt verzonden. Verzoeken zijn staatloos, voorstellen moeten worden beoordeeld en de API-sleutel wordt opgeslagen in het referentiearchief van het Linux-systeem.", + "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "aiCloudConsentRequired": "Bevestig eerst het delen van gegevens door {provider} in Instellingen → AI.", + "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "aiGenerationVerified": "Generatie geverifieerd met {model}. {count} compatibele model(len) beschikbaar.", + "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "aiColdStartObserved": "Er werd een lokale koude start waargenomen.", + "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "aiNoCompatibleModels": "Er is geen compatibel model voor tekstgeneratie beschikbaar.", + "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "aiEnableProvider": "Schakel eerst een AI-provider in.", + "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "aiDraftCommitMessage": "Concept commit-bericht", + "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "aiDrafting": "Opstellen…", + "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "aiDraftWithAi": "Met AI opstellen", + "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "generateOrUpdateMarkdownToc": "Inhoudsopgave genereren/bijwerken", + "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "markdownTocTitle": "Inhoudsopgave", + "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "markdownTocUpdated": "Inhoudsopgave bijgewerkt met {count} vermeldingen.", + "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "markdownTocNoHeadings": "Voeg ten minste één sectiekop toe voordat u een inhoudsopgave genereert.", + "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "markdownTocMalformedMarkers": "De BusyMark-inhoudsopgavemarkeringen ontbreken, zijn gedupliceerd of zijn niet in de juiste volgorde.", + "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "diagnosticMarkdownHeadingSkippedLevel": "Kopniveau {level} volgt niveau {previousLevel}; controleer de nesting van secties.", + "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "diagnosticMarkdownLinkEmptyText": "Linktekst is leeg. Geef een toegankelijke naam op die het doel ervan beschrijft.", + "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "diagnosticMarkdownLinkReviewText": "Controleer of de linktekst “{text}” het doel ervan in de context beschrijft.", + "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "diagnosticMarkdownTableEmptyHeader": "De cellen van de tabelkop moeten hun kolommen identificeren; voltooi elke lege kop.", + "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "mathRenderFailed": "De wiskundige uitdrukking kon niet worden weergegeven.", + "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "inlineMath": "Inline wiskunde", + "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."}, + "displayMath": "Wiskunde weergeven", + "@displayMath": {"description":"Editor action that inserts a display mathematical expression."} +} diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 66b1b99b..399adcd4 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageKorean": "한국어", + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Panel boczny", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 143dff7d..5867c6e1 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Painel lateral", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 85aec87f..2b6a490d 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Боковая панель", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb new file mode 100644 index 00000000..3575f749 --- /dev/null +++ b/lib/l10n/app_tr.arb @@ -0,0 +1,1897 @@ +{ + "@@locale": "tr", + "appTitle": "BusyMark", + "@appTitle": {"description":"Application name."}, + "appSubtitle": "Markdown dosyaları ve Writerside uyumlu dokümantasyon projeleri için düzenleyici.", + "@appSubtitle": {"description":"Short application description."}, + "aboutBusyMark": "BusyMark Hakkında", + "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "aboutTagline": "Markdown ve Writerside Düzenleyicisi", + "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "aboutLicenseLabel": "Lisans", + "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "aboutWebsite": "Web sitesi", + "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "aboutSourceCode": "Kaynak kodu", + "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "reportIssue": "Bir sorunu bildirin", + "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "feedbackCategory": "Kategori", + "@feedbackCategory": {"description":"Feedback category field label."}, + "feedbackChooseCategory": "Bir kategori seçin", + "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "feedbackCategoryProblem": "Sorun veya hata", + "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "feedbackCategoryFeature": "Özellik isteği", + "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "feedbackCategoryPrivacySecurity": "Gizlilik veya güvenlik endişesi", + "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "feedbackCategoryUsability": "Kullanılabilirlik endişesi", + "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "feedbackCategoryOther": "Diğer", + "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "feedbackSubject": "Konu", + "@feedbackSubject": {"description":"Feedback subject field label."}, + "feedbackMessage": "Ayrıntılı mesaj", + "@feedbackMessage": {"description":"Detailed feedback message field label."}, + "feedbackReplyEmail": "E-postayı yanıtla (isteğe bağlı)", + "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "feedbackIncludeTechnicalDetails": "Teknik ayrıntıları ekleyin", + "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "feedbackTechnicalDetailsDisclosure": "Etkinleştirildiğinde bu, yalnızca Linux işletim sistemi sürümünüzü ve BusyMark uygulama yerel ayarını ekler. Hiçbir günlük, dosya, hesap verisi veya başka tanılama eklenmez.", + "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "feedbackSubmit": "Gönder", + "@feedbackSubmit": {"description":"Button that submits feedback."}, + "feedbackSubmitting": "Gönderiliyor…", + "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "feedbackCategoryRequired": "Bir kategori seçin.", + "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "feedbackSubjectLength": "Konu 3 ila 120 karakter arasında olmalıdır.", + "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "feedbackMessageLength": "Mesaj 10 ila 5.000 karakter arasında olmalıdır.", + "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "feedbackReplyEmailInvalid": "Geçerli bir e-posta adresi girin veya bu alanı boş bırakın.", + "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "feedbackConnectionFailure": "BusyMark bağlanamadı. İnternet bağlantınızı kontrol edip tekrar deneyin.", + "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "feedbackTimeoutFailure": "İstek zaman aşımına uğradı. Tekrar deneyin.", + "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "feedbackRateLimitedFailure": "Bu bağlantıdan çok fazla rapor gönderildi. Bekleyin ve tekrar deneyin.", + "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "feedbackRejectedFailure": "Sunucu bu raporu reddetti. Form alanlarını kontrol edip tekrar deneyin.", + "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "feedbackServerFailure": "Sunucu raporu kabul edemedi. Daha sonra tekrar deneyin.", + "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "feedbackSuccess": "Geri bildirim gönderildi. Referans Kimliği: {id}", + "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "advanced": "Gelişmiş", + "@advanced": {"description":"Settings section title for advanced actions."}, + "addToGit": "Git'e ekle", + "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "appearance": "Görünüm", + "@appearance": {"description":"Settings section title for appearance options."}, + "apply": "Uygula", + "@apply": {"description":"Button label that applies a dialog change."}, + "back": "Geri", + "@back": {"description":"Tooltip for navigating back."}, + "bottomLeft": "Sol alt", + "@bottomLeft": {"description":"Editing button position option."}, + "bottomRight": "Sağ alt", + "@bottomRight": {"description":"Editing button position option."}, + "cancel": "İptal", + "@cancel": {"description":"Cancel button label."}, + "choose": "Seç", + "@choose": {"description":"Button label for choosing a file or path."}, + "chooseLocation": "Konum seçin", + "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "copy": "Kopyala", + "@copy": {"description":"Copy command label."}, + "copyName": "Adı kopyala", + "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "copyFileName": "Dosya adını kopyala", + "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "copyPath": "Yolu kopyala", + "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "create": "Oluştur", + "@create": {"description":"Create action label."}, + "creating": "Oluşturuluyor...", + "@creating": {"description":"Progress label while a project or topic is being created."}, + "cut": "Kes", + "@cut": {"description":"Cut command label."}, + "promoteSection": "Bölümü yükselt", + "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "demoteSection": "Bölümü düşür", + "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "moveSectionUp": "Bölümü yukarı taşı", + "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "moveSectionDown": "Bölümü aşağı taşı", + "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "confirmDeleteSectionTitle": "Bölüm silinsin mi?", + "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "confirmDeleteSectionMessage": "“{name}” ve bölümündeki tüm içerik silinsin mi? Bu geri alınamaz.", + "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "darkTheme": "Karanlık", + "@darkTheme": {"description":"Dark theme option."}, + "delete": "Sil", + "@delete": {"description":"Delete command label."}, + "discard": "Değişiklikleri yok say", + "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "editor": "Editör", + "@editor": {"description":"Editor view label."}, + "file": "Dosya", + "@file": {"description":"Generic file kind label."}, + "fileHistory": "Dosya Geçmişi", + "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "folder": "Klasör", + "@folder": {"description":"Folder kind label."}, + "insert": "Ekle", + "@insert": {"description":"Insert button label."}, + "keyboardShortcuts": "Klavye Kısayolları", + "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "commandPalette": "Komut Paleti", + "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "commandPaletteHint": "Bir komut yazın", + "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "commandPaletteEmpty": "Eşleşen komut yok", + "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "commandUnavailableInContext": "Mevcut düzenleyici bağlamında kullanılamıyor", + "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "lightTheme": "Açık", + "@lightTheme": {"description":"Light theme option."}, + "mainMenu": "Ana menü", + "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "fullScreen": "Tam ekran", + "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "markdown": "Markdown", + "@markdown": {"description":"Markdown format label."}, + "open": "Aç", + "@open": {"description":"Open action label."}, + "openInFiles": "Dosya yöneticisinde aç", + "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "pathActions": "Yol eylemleri", + "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "outline": "Anahat", + "@outline": {"description":"Outline sidebar tab label."}, + "overwrite": "Üzerine yaz", + "@overwrite": {"description":"Button label for overwriting a changed file."}, + "paste": "Yapıştır", + "@paste": {"description":"Paste command label."}, + "pasteWithoutFormatting": "Biçimlendirmeden yapıştır", + "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "reading": "Okuma", + "@reading": {"description":"Reading view label."}, + "removeFromRecent": "Son kullanılanlardan kaldır", + "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "recent": "Son", + "@recent": {"description":"Recent workspaces section title."}, + "redo": "Yinele", + "@redo": {"description":"Redo command label."}, + "save": "Kaydet", + "@save": {"description":"Save action label."}, + "search": "Ara", + "@search": {"description":"Search action label and field hint."}, + "selectAll": "Tümünü seç", + "@selectAll": {"description":"Select all command label."}, + "settings": "Ayarlar", + "@settings": {"description":"Settings action label."}, + "source": "Kaynak", + "@source": {"description":"Source view label."}, + "split": "Bölünmüş görünüm", + "@split": {"description":"Split view label."}, + "systemTheme": "Sistem", + "@systemTheme": {"description":"System theme option."}, + "theme": "Tema", + "@theme": {"description":"Theme setting label."}, + "appLanguage": "Dil", + "@appLanguage": {"description":"Application language setting label."}, + "systemLanguage": "Sistem", + "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "languageEnglish": "English", + "@languageEnglish": {"description":"Language selector option for English."}, + "languageGerman": "Deutsch", + "@languageGerman": {"description":"Language selector option for German."}, + "languageDutch": "Nederlands", + "@languageDutch": {"description":"Language selector option for Dutch."}, + "languageTurkish": "Türkçe", + "@languageTurkish": {"description":"Language selector option for Turkish."}, + "languageItalian": "Italiano", + "@languageItalian": {"description":"Language selector option for Italian."}, + "languageNorwegian": "Norsk", + "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "languageFrench": "Français", + "@languageFrench": {"description":"Language selector option for French."}, + "languageRussian": "Русский", + "@languageRussian": {"description":"Language selector option for Russian."}, + "languageUkrainian": "Українська", + "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "languagePolish": "Polski", + "@languagePolish": {"description":"Language selector option for Polish."}, + "languageSpanish": "Español", + "@languageSpanish": {"description":"Language selector option for Spanish."}, + "languagePortuguese": "Português", + "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "languageArabic": "العربية", + "@languageArabic": {"description":"Language selector option for Arabic."}, + "languagePersian": "فارسی", + "@languagePersian": {"description":"Language selector option for Persian."}, + "languageHindi": "हिन्दी", + "@languageHindi": {"description":"Language selector option for Hindi."}, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "languageEstonian": "Eesti", + "@languageEstonian": {"description":"Language selector option for Estonian."}, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "languageJapanese": "日本語", + "@languageJapanese": {"description":"Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description":"Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "toggleSidebar": "Kenar çubuğu paneli", + "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "topLeft": "Sol üst", + "@topLeft": {"description":"Editing button position option."}, + "topRight": "Sağ üst", + "@topRight": {"description":"Editing button position option."}, + "undo": "Geri al", + "@undo": {"description":"Undo command label."}, + "validate": "Doğrula", + "@validate": {"description":"Validate action label."}, + "validation": "Doğrulama", + "@validation": {"description":"Settings section title for validation options."}, + "viewMode": "Görünüm modu", + "@viewMode": {"description":"Native header bar view mode control label."}, + "welcome": "Hoş geldiniz", + "@welcome": {"description":"Welcome screen label and tooltip."}, + "writerside": "Writerside", + "@writerside": {"description":"Writerside workspace kind label."}, + "xml": "XML", + "@xml": {"description":"XML format label."}, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "fileTypeImages": "Görseller", + "@fileTypeImages": {"description":"Native file picker type label for images."}, + "openMarkdownFile": "Markdown Dosyasını Aç", + "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "markdownFileExtensions": ".md veya .markdown", + "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "openFolderOrWritersideProject": "Klasör veya Writerside projesi aç", + "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "markdownFolderOrWritersideProject": "Markdown klasörü veya Writerside uyumlu proje", + "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "noOpenFile": "Açık dosya yok", + "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "shortcutDeleteTreeItemDescription": "Seçilen Dosyalar öğesini silin veya seçilen konuyu içindekiler tablosundan kaldırın", + "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "shortcutGroupGeneral": "Genel", + "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "shortcutNewDocument": "Yeni belge", + "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "shortcutNewDocumentDescription": "Markdown dosyası veya Writerside projesi oluştur", + "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "shortcutOpenDescription": "Markdown dosyasını, klasörünü veya Writerside projesini açın", + "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "shortcutSaveDescription": "Geçerli belgeyi kaydet", + "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "shortcutSearchDescription": "Mevcut çalışma alanında arama yapın", + "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "shortcutKeyboardShortcutsDescription": "Bu klavye kısayolu referansını göster", + "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "shortcutMarkdownAndHtmlDescription": "Markdown ve HTML referansını açın", + "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "shortcutSettingsDescription": "BusyMark ayarlarını aç", + "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "shortcutNextTab": "Sonraki sekme", + "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "shortcutNextTabDescription": "Sonraki açık sekmeye git", + "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "shortcutPreviousTab": "Önceki sekme", + "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "shortcutPreviousTabDescription": "Önceki açık sekmeye git", + "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "shortcutCloseTab": "Sekmeyi kapat", + "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "shortcutCloseTabDescription": "Etkin sekmeyi kapat", + "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "shortcutCloseAllTabs": "Tüm sekmeleri kapat", + "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "shortcutCloseAllTabsDescription": "Tüm açık sekmeleri kapat", + "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "shortcutGroupTextEditing": "Metin Düzenleme", + "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "shortcutSelectAllDescription": "Kaynak modunda tüm metni seçin; Editör modunda her bloğu seçmek için iki kez basın", + "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "shortcutCutDescription": "Seçilen metni kes", + "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "shortcutCopyDescription": "Seçilen metni kopyala", + "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "shortcutPasteDescription": "Panodan yapıştır", + "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "shortcutPastePlainTextDescription": "Pano metnini biçimlendirmeden yapıştırma", + "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "shortcutUndoDescription": "Son düzenlemeyi geri al", + "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "shortcutRedoDescription": "Geri alınan son düzenlemeyi yeniden yap", + "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "shortcutInsertIndentation": "Girinti ekle", + "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "shortcutInsertIndentationDescription": "İmlecin bulunduğu yere girinti ekle", + "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "shortcutOutdentSource": "Kaynakta girintiyi azalt", + "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "shortcutOutdentSourceDescription": "Kaynak modunda bir girinti düzeyini kaldırın", + "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "shortcutEscape": "Aramayı kapat veya blok seçimini temizle", + "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "shortcutEscapeDescription": "Editör modunda çalışma alanı aramasını kapatın veya bir blok seçimini temizleyin", + "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "shortcutGroupFormatting": "Biçimlendirme", + "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "shortcutBoldDescription": "Seçili metinde kalın yazıya geçiş yap", + "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "shortcutItalicDescription": "Seçilen metinde italik özelliğini aç/kapat", + "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "shortcutUnderlineDescription": "Seçili metnin altını çizmeyi aç/kapat", + "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "shortcutLinkDescription": "Bağlantı ekleme veya düzenleme", + "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "shortcutInlineCodeDescription": "Seçilen metinde satır içi kodu değiştir", + "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "shortcutStrikethroughDescription": "Seçili metnin üstü çizili özelliğini aç/kapat", + "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "shortcutGroupBlocks": "Bloklar", + "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "shortcutParagraphDescription": "Geçerli bloğu paragrafa ayarla", + "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "shortcutHeading1Description": "Geçerli bloğu Başlık 1 olarak ayarlayın", + "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "shortcutHeading2Description": "Geçerli bloğu Başlık 2'ye ayarlayın", + "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "shortcutHeading3Description": "Geçerli bloğu Başlık 3'e ayarlayın", + "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "shortcutHeading4Description": "Geçerli bloğu Başlık 4'e ayarlayın", + "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "shortcutHeading5Description": "Geçerli bloğu Başlık 5'e ayarlayın", + "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "shortcutHeading6Description": "Geçerli bloğu Başlık 6'ya ayarlayın", + "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "shortcutGroupLists": "Listeler", + "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "numberedList": "Numaralı liste", + "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "shortcutNumberedListDescription": "Numaralı liste formatını değiştir", + "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "bulletedList": "Madde işaretli liste", + "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "shortcutBulletedListDescription": "Madde işaretli liste biçimlendirmesini değiştir", + "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "checklist": "Kontrol listesi", + "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "shortcutChecklistDescription": "Denetim listesi biçimlendirmesini değiştir", + "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "shortcutGroupSidebar": "Kenar çubuğu", + "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "sidebarViewMenu": "Kenar çubuğu görünümü", + "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "createMarkdownFile": "Markdown dosyası oluştur", + "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "createMarkdownFileDescription": "Kaydedilmemiş bir yerel Markdown belgesi başlatın", + "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "createWritersideProject": "Writerside projesi oluştur", + "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "createWritersideProjectDescription": "Yerel, Writerside uyumlu bir proje başlat", + "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "defaultProjectName": "Dokümantasyon", + "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "defaultInstanceName": "Kullanım Kılavuzu", + "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "defaultStartTopicTitle": "Başlarken", + "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "projectName": "Proje adı", + "@projectName": {"description":"Create project dialog field label."}, + "directoryName": "Klasör adı", + "@directoryName": {"description":"Create project dialog field label."}, + "instanceName": "Örnek adı", + "@instanceName": {"description":"Create project dialog field label."}, + "instanceId": "Örnek kimliği", + "@instanceId": {"description":"Create project dialog field label."}, + "startTopicTitle": "Başlangıç konusu başlığı", + "@startTopicTitle": {"description":"Create project dialog field label."}, + "location": "Konum", + "@location": {"description":"Create dialog location section label."}, + "projectNameRequired": "Proje adı gerekli.", + "@projectNameRequired": {"description":"Validation message for missing project name."}, + "directoryNameRequired": "Klasör adı gerekli.", + "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "useSingleSafeDirectoryName": "Tek bir güvenli klasör adı kullanın.", + "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "useLowercaseIdentifier": "Harfler, sayılar, alt çizgiler veya kısa çizgiler içeren küçük harfli bir tanımlayıcı kullanın.", + "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "startTopicTitleRequired": "Başlangıç konusu başlığı gerekli.", + "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "createWritersideProjectFailed": "Writerside projesi oluşturulamadı.", + "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "settingsTitle": "BusyMark Ayarları", + "@settingsTitle": {"description":"Settings screen title."}, + "autoSave": "Otomatik Kaydet", + "@autoSave": {"description":"Editor setting label for saving files automatically."}, + "autoSaveDescription": "Kısa bir bekleme gecikmesinden sonra dosya değişikliklerini otomatik olarak kaydedin.", + "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "wordWrap": "Satır kaydırma", + "@wordWrap": {"description":"Word wrap setting label."}, + "editorFontSize": "Düzenleyici yazı tipi boyutu", + "@editorFontSize": {"description":"Editor font size setting label."}, + "validateOnEdit": "Düzenlemede doğrula", + "@validateOnEdit": {"description":"Validation setting label."}, + "clearRecentWorkspaces": "Son çalışma alanlarını temizle", + "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "editingButtonsPosition": "Düğmelerin konumunu düzenleme", + "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "editingButtonsPositionDescription": "Kayan WYSIWYG düzenleme düğmelerinin nerede görüneceğini seçin.", + "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "editingButtonsDirection": "Düğmelerin yönünü düzenleme", + "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "editingButtonsDirectionDescription": "Kayan WYSIWYG düzenleme düğmelerinin yatay mı yoksa dikey mi düzenleneceğini seçin.", + "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "horizontal": "Yatay", + "@horizontal": {"description":"Editing button direction option."}, + "vertical": "Dikey", + "@vertical": {"description":"Editing button direction option."}, + "privacy": "Gizlilik", + "@privacy": {"description":"Settings section title for privacy options."}, + "allowRemoteImages": "Harici görselleri yükle", + "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "allowRemoteImagesDescription": "Markdown önizleme ve düzenleme görsellerinin http ve https URL'lerinden yüklenmesine izin verin.", + "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "clearRemoteImagePermissions": "Harici görsel izinlerini temizle", + "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, + "clearRemoteImagePermissionsDescription": "Harici görsellerin yüklenmesine izin verilen çalışma alanlarını unutun.", + "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "clearGitWorkspaceTrust": "Güvenilir Git çalışma alanlarını temizleyin", + "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "clearGitWorkspaceTrustDescription": "Daha önce güvenilen çalışma alanları için Git özelliklerini etkinleştirmeden önce sorun.", + "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "settingsWindowSectionTitle": "Pencere", + "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "settingsReopenWorkspaceOnStartupTitle": "Başlangıçta önceki çalışma alanını yeniden aç", + "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "settingsReopenWorkspaceOnStartupDescription": "BusyMark başladığında önceki oturumdaki çalışma alanını ve sekmeleri açın.", + "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "settingsConfirmCloseWithUnsavedChangesTitle": "Kaydedilmemiş değişikliklerle kapatmadan önce onaylayın", + "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "settingsConfirmCloseWithUnsavedChangesDescription": "Belgelerde kaydedilmemiş değişiklikler olduğunda BusyMark'ı kapatmadan önce sorun.", + "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "closeUnsavedChangesTitle": "Kaydedilmemiş değişiklikler", + "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "closeUnsavedChangesSingleMessage": "Bu belgede kaydedilmemiş değişiklikler var. BusyMark'ı kapatmadan önce değişiklikler kaydedilsin mi?", + "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?} =1{1 belgede kaydedilmemiş değişiklik var. BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?} other{{count} belgede kaydedilmemiş değişiklik var. BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?}}", + "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "closeUnsavedChangesCancel": "İptal etmek", + "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "closeUnsavedChangesDiscard": "At", + "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "closeUnsavedChangesSave": "Kaydet", + "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "currentFile": "geçerli dosya", + "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "unsavedChanges": "Kaydedilmemiş değişiklikler", + "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "unsavedChangesMessage": "{fileName}'te kaydedilmemiş değişiklikleriniz var. Devam etmeden önce kaydedilsin mi?", + "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "unsavedChangesMultipleMessage": "{count, plural, =1{1 belgede kaydedilmemiş değişiklik var. Devam etmeden önce kaydedilsin mi?} other{{count} belgede kaydedilmemiş değişiklik var. Devam etmeden önce kaydedilsin mi?}}", + "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "fileChangedOnDisk": "Diskteki dosya değiştirildi", + "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "fileChangedOnDiskMessage": "Bu dosya, siz onu açtığınızdan beri diskte değişti. Üzerine yazılsın mı?", + "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "untitledMarkdownFileName": "İsimsiz.md", + "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "unorderedList": "Sırasız liste", + "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "orderedList": "Sıralı liste", + "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "taskList": "Görev listesi", + "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "toggleTaskChecked": "Görevi değiştir işaretlendi", + "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "indentListItem": "Liste öğesine girinti ekle", + "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "outdentListItem": "Liste öğesinin çıkıntısı", + "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "blockquote": "Blok alıntı", + "@blockquote": {"description":"Blockquote command label."}, + "codeBlock": "Kod bloğu", + "@codeBlock": {"description":"Code block command or preview label."}, + "codeBlockLanguage": "Kod bloğu dili", + "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "image": "Resim", + "@image": {"description":"Image command and document kind label."}, + "video": "Video", + "openVideo": "Videoyu oynat", + "pauseVideo": "Videoyu duraklat", + "videoUnavailable": "Video kullanılamıyor", + "videoPreview": "Video önizlemesi", + "diagnosticWritersideVideoMissingSource": "Videonun src özelliği eksik.", + "diagnosticWritersideVideoUnsupportedSource": "Desteklenmeyen video kaynağı: {source}", + "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingFile": "Video dosyası mevcut değil: {source}", + "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideVideoMissingPreview": "Video önizleme görüntüsü mevcut değil: {preview}", + "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "inlineImage": "Satır içi resim", + "@inlineImage": {"description":"Inline image command label."}, + "table": "Tablo", + "@table": {"description":"Table command label."}, + "htmlBlock": "HTML bloğu", + "@htmlBlock": {"description":"HTML block command label."}, + "htmlContentDefault": "HTML içeriği", + "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "shortcutHtmlBlockDescription": "HTML bloğu ekleme veya düzenleme", + "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "renderedHtml": "İşlenen HTML", + "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "editHtml": "HTML'yi düzenle", + "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "htmlSource": "HTML kaynağı", + "@htmlSource": {"description":"Text field label for raw HTML source."}, + "thematicBreak": "Yatay ayraç", + "@thematicBreak": {"description":"Thematic break command label."}, + "bold": "Kalın", + "@bold": {"description":"Bold command label."}, + "italic": "İtalik", + "@italic": {"description":"Italic command label."}, + "underline": "Altı çizili", + "@underline": {"description":"Underline command label."}, + "strikethrough": "Üstü çizili", + "@strikethrough": {"description":"Strikethrough command label."}, + "inlineCode": "Satır içi kod", + "@inlineCode": {"description":"Inline code command label."}, + "link": "Bağlantı", + "@link": {"description":"Link command and preview label."}, + "hardLineBreak": "Zorunlu satır sonu", + "@hardLineBreak": {"description":"Hard line break command label."}, + "textStyle": "Metin stili", + "@textStyle": {"description":"Text style menu tooltip."}, + "paragraph": "Paragraf", + "@paragraph": {"description":"Paragraph style label."}, + "heading1": "Başlık 1", + "@heading1": {"description":"Heading 1 style label."}, + "heading2": "Başlık 2", + "@heading2": {"description":"Heading 2 style label."}, + "heading3": "Başlık 3", + "@heading3": {"description":"Heading 3 style label."}, + "heading4": "Başlık 4", + "@heading4": {"description":"Heading 4 style label."}, + "heading5": "Başlık 5", + "@heading5": {"description":"Heading 5 style label."}, + "heading6": "Başlık 6", + "@heading6": {"description":"Heading 6 style label."}, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "deleteTable": "Tabloyu sil", + "@deleteTable": {"description":"Tooltip for deleting a table."}, + "tableColumnNumber": "Sütun {columnNumber}", + "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "insertColumnLeft": "Sola sütun ekle", + "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "insertColumnRight": "Sağa sütun ekle", + "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "deleteColumn": "Sütunu sil", + "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "tableAlignmentUnspecified": "Hizalama: belirtilmemiş", + "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "tableAlignmentLeft": "Hizalama: sol", + "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "tableAlignmentCenter": "Hizalama: orta", + "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "tableAlignmentRight": "Hizalama: sağ", + "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "tableRowNumber": "Satır {rowNumber}", + "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "insertRowAbove": "Yukarıya satır ekle", + "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "insertRowBelow": "Aşağıya satır ekle", + "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "deleteRow": "Satırı sil", + "@deleteRow": {"description":"Menu item for deleting a table row."}, + "tableHeaderHint": "Sütun başlığı", + "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "tableCellHint": "Hücre", + "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "language": "Dil", + "@language": {"description":"Code block language field label."}, + "hideEditingButtons": "Düzenleme düğmelerini gizle", + "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "showEditingButtons": "Düzenleme düğmelerini göster", + "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "altText": "Alternatif metin", + "@altText": {"description":"Image alt text field label."}, + "editorPlaceholderText": "metin", + "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "editorPlaceholderCode": "kod", + "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "editorPlaceholderAltText": "alternatif metin", + "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "describeTheImage": "Resmi açıklayın", + "@describeTheImage": {"description":"Image alt text hint."}, + "columns": "Sütunlar", + "@columns": {"description":"Table dialog columns field label."}, + "rows": "Satırlar", + "@rows": {"description":"Table dialog rows field label."}, + "tableHeaderNumber": "Sütun başlığı {columnNumber}", + "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "tableCellDefault": "Hücre", + "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "noImageSource": "Resim kaynağı yok", + "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "remoteImageBlocked": "Harici görsel engellendi", + "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "remoteImageBlockedTooltip": "BusyMark'ın harici görselleri yükleyip yükleyemeyeceğini seçin.", + "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "remoteImagesBlockedTitle": "Harici görseller engellendi", + "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "remoteImagesBlockedMessage": "Bu belge internetteki görsellere başvuruyor. Bunları yüklemek ağ bilgilerini görselin barındırıldığı sunucuya açığa çıkarabilir.", + "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "loadRemoteImagesForWorkspace": "Bu çalışma alanı için yükleme", + "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "alwaysLoadRemoteImages": "Harici görselleri her zaman yükle", + "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "hideSidebar": "Kenar çubuğu panelini gizle", + "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "showSidebar": "Kenar çubuğu panelini göster", + "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "showPreview": "Önizlemeyi göster", + "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "hidePreview": "Önizlemeyi gizle", + "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "workspaceKindUnsavedMarkdown": "Kaydedilmemiş Markdown dosyası", + "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "workspaceKindSingleMarkdown": "Tek Markdown dosyası", + "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "workspaceKindMarkdownFolder": "Markdown klasörü", + "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "workspaceKindWritersideModule": "Writerside modülü", + "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "problems": "Sorunlar", + "@problems": {"description":"Diagnostics dialog title."}, + "diagnosticCount": "{count, plural, =0{Tanılama yok} =1{1 tanılama} other{{count} tanılama}}", + "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "files": "Dosyalar", + "@files": {"description":"Files sidebar tab label."}, + "toc": "İçindekiler", + "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "tocActions": "İçindekiler eylemleri", + "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "markdownUnsaved": "Kaydedilmemiş Markdown", + "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "workspaceDetail": "{kind} - {count, plural, =1{1 dosya} other{{count} dosya}}", + "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "noFiles": "Dosya yok", + "@noFiles": {"description":"Empty state shown when there are no files."}, + "newFile": "Yeni dosya", + "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "noWritersideToc": "Writerside TOC'si yok", + "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "tocSection": "İçindekiler bölümü", + "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "newTopic": "Yeni konu", + "@newTopic": {"description":"Create new Writerside topic action label."}, + "newChildTopic": "Yeni alt konu", + "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "newSiblingTopic": "Yeni kardeş konu", + "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "renameTopicFile": "Konu dosyasını yeniden adlandır", + "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "topicPlacement": "İçindekiler yerleşimi", + "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "tocRoot": "TOC kökünde", + "@tocRoot": {"description":"TOC placement option for the root level."}, + "afterSelectedTopic": "Konu seçildikten sonra", + "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "insideSelectedTopic": "Seçilen konunun içinde", + "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "pasteAfterTopic": "Sonrasına yapıştır", + "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "pasteAsChildTopic": "Alt konu olarak yapıştır", + "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "removeFromToc": "TOC'den kaldır", + "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "confirmRemoveFromTocTitle": "TOC'den kaldırılsın mı?", + "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "confirmRemoveFromTocMessage": "{name} bu içindekiler tablosundan kaldırılsın mı? Konu dosyası saklanacaktır.", + "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteTopicTitle": "Konu dosyası silinsin mi?", + "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "confirmDeleteTopicMessage": "{name} silinip tüm içindekilerden kaldırılsın mı? Bu geri alınamaz.", + "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "safeDeleteTopicFile": "Konu dosyasını güvenle sil…", + "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "removeTocElement": "TOC öğesini kaldır", + "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "reviewUsages": "Kullanımları incele", + "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "deleteTopicFile": "Konu dosyasını sil", + "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "removeAction": "Kaldır", + "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "topicRemovalSummary": "Seçili örnekten “{topic}” konusunu kaldır. Konu dosyası korunur.", + "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "safeDeleteTopicSummary": "“{topic}” konusunu sil ve bu Writerside projesindeki referanslarını güvenle güncelle.", + "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "childTopicsPromoted": "{count, plural, =1{1 alt konu bir seviye yukarı taşınacak.} other{{count} alt konu bir seviye yukarı taşınacak.}}", + "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "topicIsStartPageRemovalWarning": "Bu konu bir Writerside örneğinin başlangıç sayfası olarak kullanılıyor. Devam etmeden önce kullanımlarını inceleyin ve başka bir başlangıç sayfası atayın.", + "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "topicUsagesCount": "Kullanımlar ({count})", + "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "noBreakingTopicUsages": "Bozulacak referans bulunamadı.", + "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "topicUsagesFound": "BusyMark bu konuya yönelik aşağıdaki referansları buldu.", + "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "topicUsageTocElements": "İçindekiler öğeleri", + "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "topicUsageStartPages": "Başlangıç sayfaları", + "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "topicUsageTopicLinks": "Konu bağlantıları", + "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, + "topicUsageIncludes": "Dahil etmeler", + "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "usageCount": "{count, plural, =1{1 kullanım} other{{count} kullanım}}", + "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "refactoringOptions": "Yeniden düzenleme seçenekleri", + "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "updateUsagesAutomatically": "Kullanımları otomatik güncelle", + "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, + "updateUsagesAutomaticallyDescription": "İçindekiler referanslarını ve içeriklerini kaldırın ve bağlantı metnini koruyun.", + "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "manualUsageUpdatesRequired": "Bazı kullanımlar bu yeniden düzenleme işleminden önce el ile değişiklik yapılmasını gerektirir.", + "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "setRedirectTo": "Yönlendirme hedefi:", + "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "noRedirectDescription": "Eski yayımlanmış sayfayı yönlendirme.", + "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "redirectTarget": "Yönlendirme hedefi", + "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "remainingUsagesBlockRemoval": "Devam etmeden önce kalan kullanımları inceleyin ve güncelleyin veya mümkün olduğunda otomatik güncellemeleri etkinleştirin.", + "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "usagesOfTopic": "{topic} konusunun kullanımları", + "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "noUsagesFound": "Hiçbir kullanım bulunamadı", + "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "outsideSelectedInstance": "seçilen örneğin dışında", + "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "doRefactor": "Yeniden düzenle", + "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "orphanTopicTitle": "Konu dosyası artık kullanılmıyor", + "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "keepTopicFile": "Konu Dosyasını Sakla", + "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "orphanTopicMessage": "“{topic}” artık bu Writerside projesinin hiçbir yerinde kullanılmıyor. Dosyayı silin veya başka bir örnekte kullanmak üzere saklayın.", + "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "defaultNewTopicTitle": "Yeni konu", + "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "topicTitle": "Konu başlığı", + "@topicTitle": {"description":"Create topic dialog field label."}, + "fileName": "Dosya adı", + "@fileName": {"description":"Create topic dialog field label."}, + "topicTitleRequired": "Konu başlığı zorunludur.", + "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "fileNameRequired": "Dosya adı gerekli.", + "@fileNameRequired": {"description":"Validation message for missing file name."}, + "rename": "Yeniden adlandır", + "@rename": {"description":"Rename command label."}, + "confirmDeleteFileTitle": "Dosya silinsin mi?", + "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "confirmDeleteFolderTitle": "Klasör silinsin mi?", + "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "confirmDeleteFileMessage": "{name} silinsin mi? Bu geri alınamaz.", + "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "confirmDeleteFolderMessage": "{name} ve içindeki tüm dosyalar silinsin mi? Bu geri alınamaz.", + "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "useSingleSafeFileName": "Tek bir güvenli dosya adı kullanın.", + "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "useExpectedExtension": "Seçilen format için {extension} uzantısını kullanın.", + "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "useIdentifierCharacters": "Uzantının önünde harf, rakam, alt çizgi veya kısa çizgi kullanın.", + "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "topicIdAlreadyExists": "Konu kimliği zaten mevcut.", + "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "createWritersideTopicFailed": "Writerside konusu oluşturulamadı.", + "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "noOutline": "Anahat yok", + "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "expandKind": "{kind} öğesini genişlet", + "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "collapseKind": "{kind} öğesini daralt", + "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "foldKindSection": "bölüm", + "@foldKindSection": {"description":"Fold kind label for a section."}, + "foldKindList": "liste", + "@foldKindList": {"description":"Fold kind label for a list."}, + "foldKindQuote": "alıntı", + "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "foldKindTag": "etiket", + "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "sourceSearchPreviousMatch": "Önceki eşleşme", + "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "sourceSearchNextMatch": "Sonraki eşleşme", + "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "sourceSearchCaseSensitive": "Harfe duyarlı", + "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "sourceSearchWholeWord": "Tam sözcük", + "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "sourceSearchRegex": "Düzenli ifade", + "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "sourceSearchReplacement": "Şununla değiştir:", + "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, + "sourceSearchReplaceCurrent": "Geçerli olanı değiştir", + "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "sourceSearchReplaceAndFindNext": "Değiştir ve sonrakini bul", + "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "sourceSearchReplaceAll": "Tümünü değiştir", + "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "workspaceReplace": "Çalışma alanında değiştir", + "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "reviewReplacements": "Değiştirmeleri incele", + "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "applyReplacements": "Değişiklikleri uygula", + "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "skippedFiles": "Atlanan dosyalar", + "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "workspaceReplaceDirtyBuffer": "Kaydedilmemiş düzenleyici içeriği", + "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "workspaceReplaceDiskContent": "Kaydedilen disk içeriği", + "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "selectFileMatches": "Tüm {count} eşleşmeyi seç", + "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "workspaceReplaceApplied": "{files} dosyada {matches} eşleşme değiştirildi; {skipped} dosya atlandı.", + "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Son satır sonu var", + "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Son satır sonu yok", + "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "normalizeLineEndings": "Satır sonlarını normalleştir", + "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "mixedLineEndingsSavePrompt": "Bu belge karışık satır sonları içeriyor. Bir format seçin.", + "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "workspaceReplaceMixedLineEndings": "{fileName} karışık satır sonları kullanır. Değiştirmeden önce kullanılacak formatı seçin.", + "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "workspaceReplaceIssueOversized": "Büyük boyutlu bir dosya atlandı.", + "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "workspaceReplaceIssueUnreadable": "Okunamayan bir dosya atlandı.", + "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "workspaceReplaceIssueInvalidUtf8": "Geçerli UTF-8 olmayan bir dosya atlandı.", + "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "workspaceReplaceIssueTruncated": "Değiştirme önizlemesi kesildi.", + "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "workspaceReplaceIssueFileChanged": "Önizlemeden sonra değişen bir dosya atlandı.", + "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "workspaceReplaceIssueBufferChanged": "Önizlemeden sonra değişen düzenleyici arabelleği atlandı.", + "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "workspaceReplaceIssueNormalizationRequired": "Değiştirmeden önce LF veya CRLF normalizasyonunu seçin.", + "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "workspaceReplaceIssuePartialConflict": "Dosya aynı anda değiştiği için geri alma durduruldu. Bazı değişiklikler kalabilir; yeri değiştirilen içerik aşağıdaki yolda korundu.", + "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "workspaceReplaceIssueApplyFailed": "İncelenen değiştirme işlemi gerçekleştirilemedi; hiçbir dosya değiştirilmedi.", + "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "externalChangesTitle": "Harici değişiklikler — {fileName}", + "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "externalFileDeleted": "Bu dosya diskte silindi.", + "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "externalFileChanged": "Kaydedilmemiş düzenlemeleriniz varken bu dosya diskte değişti.", + "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, + "recoveredDocumentReview": "{fileName} için kaydedilmemiş içerik kurtarıldı. İnceleyin, ardından kaydedin, farklı kaydedin veya atın.", + "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "compare": "Karşılaştır", + "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "reloadFromDisk": "Diskten Yeniden Yükle", + "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "keepMine": "Benimkini koru", + "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "saveAs": "Farklı Kaydet", + "@saveAs": {"description":"Action that saves the current document to another path."}, + "sourceSearchInvalidRegex": "Geçersiz düzenli ifade", + "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "sourceLargeFileFeaturesPaused": "Büyük dosya: vurgulama ve katlama duraklatıldı", + "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "nothingToRead": "Okunacak bir şey yok", + "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, + "admonition": "Bilgi kutusu", + "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "quote": "Alıntı", + "@quote": {"description":"Label for a neutral Writerside quote block."}, + "note": "Not", + "@note": {"description":"Preview label for a note admonition."}, + "tip": "İpucu", + "@tip": {"description":"Preview label for a tip admonition."}, + "warning": "Uyarı", + "@warning": {"description":"Preview label for a warning admonition."}, + "tabs": "Sekmeler", + "@tabs": {"description":"Preview label for a tabs block."}, + "tab": "Sekme", + "@tab": {"description":"Preview label for a tab block."}, + "procedure": "Prosedür", + "@procedure": {"description":"Preview label for a procedure block."}, + "step": "Adım", + "@step": {"description":"Preview label for a procedure step."}, + "topic": "Konu", + "@topic": {"description":"Preview label for a topic element."}, + "chapter": "Bölüm", + "@chapter": {"description":"Preview label for a chapter element."}, + "couldNotOpenTarget": "{target} açılamadı", + "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "linkTargetNotFound": "Bağlantı hedefi bulunamadı: {targetPath}", + "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "cannotOpenFileTypeInEditor": "Bu dosya türü düzenleyicide açılamıyor", + "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "anchorNotFound": "Bağlantı bulunamadı: {anchor}", + "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "noProblemsFound": "Hiçbir sorun bulunamadı", + "@noProblemsFound": {"description":"Diagnostics empty state."}, + "noResults": "Sonuç yok", + "@noResults": {"description":"Search empty state."}, + "searchResultLine": "{relativePath} - Satır {lineNumber}", + "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "untitledResult": "Başlıksız sonuç", + "@untitledResult": {"description":"Fallback search result title."}, + "documentKindMarkdownFile": "Markdown dosyası", + "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "documentKindWritersideMarkdownTopic": "Writerside Markdown konusu", + "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "documentKindWritersideXmlTopic": "Writerside XML konusu", + "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "documentKindWritersideTree": "Writerside ağacı", + "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "documentKindConfigurationFile": "Yapılandırma dosyası", + "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "documentKindVariablesFile": "Değişkenler dosyası", + "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "documentKindCategoriesFile": "Kategoriler dosyası", + "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "documentKindResourceFile": "Kaynak dosyası", + "@documentKindResourceFile": {"description":"Search result document kind label."}, + "workspaceErrorOpenFailed": "Açma başarısız oldu: {error}", + "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideProjectFailed": "Writerside projesi oluşturulamadı: {error}", + "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCreateWritersideTopicFailed": "Writerside konusu oluşturulamadı: {error}", + "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorCouldNotOpenFile": "Dosya açılamadı: {error}", + "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorChooseWhereToSaveMarkdown": "Bu Markdown dosyasının nereye kaydedileceğini seçin.", + "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "workspaceErrorSaveBlockedFileChangedOnDisk": "Kaydetme engellendi: diskteki dosya değiştirildi.", + "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "workspaceErrorSaveFailed": "Kaydetme başarısız oldu: {error}", + "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorFileOperationFailed": "Dosya işlemi başarısız oldu: {error}", + "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceErrorValidationFailed": "Doğrulama başarısız oldu: {error}", + "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "workspaceRecoveryRestored": "{count, plural, =1{1 kaydedilmemiş belge kurtarıldı. Kaydetmeden veya silmeden önce inceleyin.} other{{count} kaydedilmemiş belge kurtarıldı. Kaydetmeden veya silmeden önce her birini inceleyin.}}", + "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "workspaceRecoveryDamaged": "{count, plural, =1{Hasarlı bir kurtarma kaydı geri yüklenemedi. Özgün kurtarma dosyası incelenmek üzere korundu.} other{{count} hasarlı kurtarma kaydı geri yüklenemedi. Geçerli kurtarma kayıtları kullanılabilir durumda.}}", + "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "errorPathDoesNotExist": "Yol mevcut değil: {path}", + "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetDirectoryNotEmpty": "Hedef dizin zaten mevcut ve boş değil: {path}", + "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "errorTargetPathNotDirectory": "Hedef yol zaten mevcut ve bir dizin değil: {path}", + "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "errorGeneratedFileAlreadyExists": "Oluşturulan dosya zaten mevcut: {path}", + "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "errorParentDirectoryRequired": "Ana dizin gerekli.", + "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "errorParentDirectoryMissing": "Ana dizin mevcut değil: {path}", + "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "errorDirectoryMissing": "Dizin mevcut değil: {path}", + "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "errorPathAlreadyExists": "Yol zaten mevcut: {path}", + "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "errorFileNameRequired": "Dosya adı gerekli.", + "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "errorFileNameUnsafe": "Dosya adı tek bir güvenli yol bölümü olmalıdır.", + "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "errorFileOperationInvalidTarget": "Bir klasör kendi içine taşınamaz.", + "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "errorFileOperationOutsideRoot": "Dosya işlemi çalışma alanının içinde kalmalıdır.", + "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "errorFileOperationRoot": "Çalışma alanı kökü dosya ağacından değiştirilemez.", + "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "errorProjectNameRequired": "Proje adı gerekli.", + "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "errorDirectoryNameRequired": "Klasör adı gerekli.", + "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "errorDirectoryNameUnsafe": "Klasör adı tek bir güvenli yol bölümü olmalıdır.", + "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "errorInstanceIdInvalid": "Örnek kimliği küçük harfle başlamalı ve yalnızca küçük harfler, sayılar, alt çizgiler ve kısa çizgiler içermelidir.", + "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "errorTopicFileInvalid": "Konu dosyası adı, yol ayırıcıları olmayan bir Markdown dosya adı olmalıdır.", + "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "errorTopicTitleRequired": "Konu başlığı zorunludur.", + "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "errorWritersideModuleRootMissing": "Writerside modül kökü mevcut değil: {path}", + "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideModuleNotOpen": "Konu oluşturmak için Writerside modülünün açık olması gerekir.", + "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "errorWritersideInstanceTreeMissing": "Writerside modülünün örnek ağacı yoktur.", + "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "errorWritersideTreeFileMissing": "Writerside ağaç dosyası mevcut değil: {path}", + "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "errorTopicIdAlreadyExists": "Konu Kimliği \"{topicId}\" bu yardım modülünde zaten mevcut.", + "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "errorTopicFileAlreadyExists": "Konu dosyası zaten mevcut: {path}", + "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "errorReferenceTopicMissing": "Referans konusu seçilen ağaçta mevcut değil: {topic}", + "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideTocNodeMissing": "Seçilen TOC girişi artık mevcut değil.", + "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "errorWritersideTocInvalidMove": "Bir TOC girişi kendisine veya alt öğelerinden birine taşınamaz.", + "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "errorWritersideStartTopicDelete": "{topic} başlangıç konusu silinemez. Önce başka bir başlangıç sayfası seçin.", + "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "errorWritersideSafeDeleteRequired": "Writerside konu dosyaları için Güvenli Silme'yi kullanın.", + "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "errorWritersideTopicUsageScanFailed": "Konu kullanımı taraması tamamlanamadı. Hiçbir dosya değiştirilmedi.", + "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "errorWritersideTopicUsagesRemain": "Bazı konu kullanımları hâlâ dikkat gerektiriyor. Devam etmeden önce bunları inceleyin.", + "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "errorWritersideRedirectInvalid": "Seçilen yönlendirme hedefi artık geçerli değil. Tekrar seçin.", + "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "errorWritersideRollbackFailed": "Konu kaldırma işlemi tamamen geri alınamadı. Devam etmeden önce şu yolları inceleyin: {paths}", + "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "errorTopicsRootUnsafe": "Konu kökü güvenli bir göreli dizin olmalıdır.", + "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "errorTopicFileNameUnsafe": "Konu dosyası adı tek bir güvenli yol bölümü olmalıdır.", + "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "errorTopicFileExtensionMismatch": "Konu dosyası uzantısı seçilen formatla ({extension}) eşleşmelidir.", + "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "errorTopicFileNameInvalid": "Konu dosyası adı yalnızca harf, rakam, alt çizgi ve kısa çizgi içermelidir.", + "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "errorUnknown": "Bilinmeyen hata: {code}", + "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "diagnosticWorkspaceFileStatFailed": "Dosya meta verileri okunamadı: {error}", + "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceScanSkipped": "Büyük çalışma alanı algılandı. Uygulamanın duyarlı kalması için bazı dosyalar atlandı.", + "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "diagnosticWorkspaceScanInspectFailed": "Çalışma alanı girişi incelenemedi: {error}", + "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWorkspaceFileTooLarge": "Dosya beta otomatik ayrıştırma sınırından daha büyük.", + "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "diagnosticWorkspaceFileReadFailed": "Markdown dosyası okunamadı: {error}", + "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "diagnosticMarkdownAttributeMalformed": "Biçimi bozuk Writerside başlık öznitelik bloğu.", + "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "diagnosticMarkdownHeadingDuplicateId": "Yinelenen başlık kimliği \"{id}\".", + "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTopicH1ConvertedToChapter": "Ek üst düzey H1 başlıkları bölümler olarak ele alınır.", + "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown konusunun H1 veya frontmatter başlığı yok.", + "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "diagnosticWritersideXmlTopicMissingTitle": "XML konusunun başlığı eksik.", + "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "diagnosticWritersideTopicFileMissingTitle": "\"{fileName}\" konusunun başlığı eksik.", + "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, + "diagnosticMarkdownFrontMatterMalformed": "Frontmatter kapatılmamış.", + "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "diagnosticMarkdownRawHtmlUnsafe": "Güvenli olmayan HTML öğesi.", + "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "diagnosticMarkdownLinkUnresolvedTarget": "Bağlantı hedefi mevcut değil: {targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "diagnosticMarkdownLinkUnresolvedAnchor": "\"{anchor}\" çapası mevcut değil.", + "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "diagnosticMarkdownImageMissingAlt": "\"{destination}\" görselinde alternatif metin eksik.", + "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticMarkdownImageMissingFile": "Resim mevcut değil: {destination}", + "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticInvalidXml": "Geçersiz XML: {message}", + "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "diagnosticWritersideConfigInvalidRoot": "writerside.cfg kökü olmalıdır.", + "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "diagnosticWritersideConfigMissingSnippetsSrc": "snippet bildiriminde src eksik.", + "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups bildiriminde src eksik.", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "diagnosticWritersideConfigInvalidKeymapsMode": "Desteklenmeyen tuş haritaları modu: {mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceSrc": "Instance bildiriminde src eksik.", + "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg bir instance kaydetmiyor.", + "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "diagnosticWritersideTreeInvalidRoot": ".tree kökü olmalıdır.", + "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "diagnosticWritersideTreeMissingId": "Instance profilinde kimlik eksik.", + "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "diagnosticWritersideTreeIdMismatch": "Ağaç dosyası kökü \"{id}\" instance kimliğiyle eşleşmiyor.", + "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingStartPage": "Kitaplık olmayan instance'ın başlangıç sayfası eksik.", + "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "diagnosticWritersideStartPageMissing": "\"{startPage}\" başlangıç sayfası mevcut değil.", + "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "diagnosticWritersideTreeDuplicateTopic": "Bu instance'ın TOC'sinde \"{topic}\" konusu birden fazla kez görünüyor.", + "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideVariableMalformedDeclaration": "Değişken bildiriminin adı ve değeri olmalıdır.", + "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "diagnosticWritersideVariableDuplicateName": "\"{name}\" değişkeni birden fazla kez bildirildi.", + "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideCategoryMissingId": "Kategorinin kimliği eksik.", + "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "diagnosticWritersideCategoryDuplicateId": "\"{id}\" kategorisi birden fazla kez bildirildi.", + "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideCategoryDuplicateOrder": "Kategori sırası \"{order}\" birden fazla kez bildirildi.", + "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "diagnosticWritersideTopicInvalidRoot": ".topic kökü olmalıdır.", + "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "diagnosticWritersideTopicMissingRootId": "XML konusunun kök kimliği eksik.", + "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "diagnosticWritersideTopicRootIdMismatch": "XML konu kök kimliği \"{id}\", \"{expectedId}\" dosya adıyla eşleşmelidir.", + "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateElementId": "Öğe kimliği \"{elementId}\" birden fazla görünüyor.", + "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "diagnosticWritersideTopicAnchorMissingHref": "'da href eksik.", + "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "diagnosticWritersideConfigMissing": "Writerside modu için writerside.cfg gereklidir.", + "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "Yapılandırılmış yapı yapılandırma dizini eksik: {relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "Yapılandırılmış API spesifikasyonları dizini eksik: {relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingSnippetsDirectory": "Yapılandırılmış snippet dizini eksik: {relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingVarsFile": "Yapılandırılmış değişkenler dosyası eksik: {relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingCategoriesFile": "Yapılandırılmış kategoriler dosyası eksik: {relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "Yapılandırılmış instance grupları dosyası eksik: {relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideConfigMissingInstanceTree": "Kayıtlı instance ağacı \"{source}\" mevcut değil.", + "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "diagnosticWritersideTopicReadFailed": "Konu dosyası okunamadı: {error}", + "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "Varsayılan konu dizini eksik: {relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicsDirectoryMissing": "Yapılandırılmış konular dizini eksik: {relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideImagesDirectoryMissing": "Yapılandırılmış görüntüler dizini eksik: {relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "diagnosticWritersideTopicDuplicateId": "Öğe kimliği \"{id}\" birden fazla görünüyor.", + "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideTreeMissingTopic": "TOC, eksik \"{topic}\" konusuna atıfta bulunuyor.", + "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "diagnosticWritersideTreeInvalidHref": "Harici href \"{href}\" geçersiz.", + "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "diagnosticWritersideVariableUnresolved": "\"%{name}%\" değişkeni bildirilmedi.", + "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "diagnosticWritersideTopicLinkUnresolved": "\"{destination}\" konu bağlantısı çözülmüyor.", + "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "diagnosticWritersideAnchorUnresolved": "\"{anchor}\" çapası \"{targetName}\"te mevcut değil.", + "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, + "diagnosticWritersideIncludeMissingFrom": " öğesi eksik.", + "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, + "diagnosticWritersideIncludeSourceMissing": "Kaynak ekle \"{from}\" mevcut değil.", + "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "diagnosticWritersideIncludeElementMissing": "\"{elementId}\" dahil etme öğesi \"{from}\"te mevcut değil.", + "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, + "diagnosticWritersideCategoryUnresolved": "Ayrıca bkz. \"{ref}\" kategorisi bildirilmedi.", + "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "diagnosticWritersideTopicAmbiguousReference": "Konu referansı \"{reference}\" belirsiz.", + "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "diagnosticUnknown": "Bilinmeyen teşhis: {code}", + "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, + "close": "Kapat", + "@close": {"description":"Close action label."}, + "git": "Git", + "@git": {"description":"Git sidebar tab label."}, + "gitDiff": "Git farkı", + "@gitDiff": {"description":"Title for the Git diff viewer."}, + "gitShowDiff": "Farkı göster", + "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "gitDiffHunkRange": "eski {oldRange} → yeni {newRange}", + "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "gitDiffNoLines": "satır yok", + "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "gitUnavailableTitle": "Git kullanılamıyor", + "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "gitUnavailableMessage": "{reason, select, other{Git'i yükleyin veya BusyMark'i kullanılabilir bir Git çalıştırılabilir dosyası kullanacak şekilde yapılandırın. {reason}}}", + "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "gitTrustRequiredTitle": "Git için bu çalışma alanına güveniyor musunuz?", + "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "gitTrustRequiredMessage": "Git depoları programları kancalar, filtreler ve diğer yapılandırmalar aracılığıyla çalıştırabilir. BusyMark depo verilerini okumadan veya Git eylemlerini etkinleştirmeden önce bu çalışma alanına güvenin.", + "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "gitTrustWorkspace": "Çalışma alanına güven", + "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "gitNotRepositoryTitle": "Git deposu değil", + "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "gitNotRepositoryMessage": "Bu çalışma alanı Git deposunun içinde değil.", + "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "gitInitializeRepository": "Git deposunu başlat", + "@gitInitializeRepository": {"description":"Action label for git init."}, + "gitDetachedHead": "Ayrık HEAD", + "@gitDetachedHead": {"description":"Detached HEAD label."}, + "gitDetachedHeadAt": "{commit}'te ayrılmış", + "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "gitNoUpstream": "Upstream yok", + "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "gitAheadCount": "{count, plural, =1{1 gönderilmemiş commit} other{{count} gönderilmemiş commit}}", + "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "gitBehindCount": "{count, plural, =1{1 çekilecek commit} other{{count} çekilecek commit}}", + "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, + "gitClean": "Temiz", + "@gitClean": {"description":"Git clean state label."}, + "gitConflicts": "Çatışmalar", + "@gitConflicts": {"description":"Git conflicts group label."}, + "gitChanges": "Değişiklikler", + "@gitChanges": {"description":"Git changes view label."}, + "gitStaged": "Stage edilmiş", + "@gitStaged": {"description":"Git staged changes group label."}, + "gitUnstaged": "Stage edilmemiş", + "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "gitHistory": "Geçmiş", + "@gitHistory": {"description":"Git history view label."}, + "gitBranches": "Dallar", + "@gitBranches": {"description":"Git branch menu label."}, + "gitActions": "Git işlemleri", + "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "gitPull": "Pull", + "@gitPull": {"description":"Git pull action label."}, + "gitFetch": "Getir", + "@gitFetch": {"description":"Git fetch action label."}, + "gitPush": "Push", + "@gitPush": {"description":"Git push action label."}, + "gitCommit": "Commit et", + "@gitCommit": {"description":"Git commit action label."}, + "gitSelectForCommit": "Commit için seç", + "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "gitRemoveFromCommit": "Commit'ten çıkar", + "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "gitDiscard": "Değişikliklerden vazgeç", + "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "gitOpenFile": "Dosyayı aç", + "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "gitMarkResolved": "Çözüldü olarak işaretle", + "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "gitUntracked": "İzlenmiyor", + "@gitUntracked": {"description":"Git untracked files group label."}, + "gitCommitMessage": "Commit mesajı", + "@gitCommitMessage": {"description":"Commit message field label."}, + "gitCommitSelectedFiles": "Seçili dosyaları commit et", + "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "gitCommitNoSelectedFiles": "Commit etmeden önce en az bir dosyayı stage edin.", + "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "gitStagedFileCount": "{count, plural, =1{1 stage edilmiş dosya} other{{count} stage edilmiş dosya}}", + "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "gitOutsideWorkspace": "Çalışma alanı dışında", + "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "gitCommitMessageRequired": "Bir commit mesajı girin.", + "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "gitCreateBranch": "Dal oluştur", + "@gitCreateBranch": {"description":"Git create branch action label."}, + "gitNewBranch": "Yeni dal", + "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "gitBranchName": "Dal adı", + "@gitBranchName": {"description":"Branch name field label."}, + "gitSwitchBranch": "Dal değiştir", + "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "gitNoChanges": "Değişiklik yok", + "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "gitNoHistory": "Geçmiş yok", + "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "gitNoBranches": "Dal yok", + "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "gitNoDiff": "Gösterilecek fark yok", + "@gitNoDiff": {"description":"Git diff empty state."}, + "gitBinaryFile": "İkili dosya. BusyMark ikili yamaları göstermez.", + "@gitBinaryFile": {"description":"Git diff binary file message."}, + "gitBinaryFileInfo": "İkili dosya ({size} bayt). BusyMark ikili yamaları göstermez.", + "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "gitUnsavedChangesBanner": "Kaydedilmemiş düzenleyici değişiklikleri kaydedilene kadar dahil edilmez.", + "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, + "gitConfirmDiscardTitle": "Git değişikliklerinden vazgeçilsin mi?", + "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "gitConfirmDiscardTracked": "{count, plural, =1{Seçili izlenen dosyadaki tüm stage edilmiş ve stage edilmemiş değişiklikler HEAD sürümüne geri yüklenecek.} other{Seçili izlenen dosyalardaki tüm stage edilmiş ve stage edilmemiş değişiklikler HEAD sürümüne geri yüklenecek.}}", + "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardUntracked": "{count, plural, =1{Seçili izlenmeyen dosya silinecek.} other{Seçili izlenmeyen dosyalar silinecek.}}", + "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmDiscardMixed": "{count, plural, =1{Seçili dosya Git durumuna göre geri yüklenecek veya silinecek.} other{Seçili dosyalar Git durumlarına göre geri yüklenecek veya silinecek.}}", + "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "gitConfirmSwitchBranchTitle": "{branch}'e geçilsin mi?", + "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "gitConfirmSwitchBranchMessage": "Git başka bir dala geçtikten sonra BusyMark çalışma alanını diskten yeniden yükleyecek.", + "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "gitConfirmPushSetUpstreamTitle": "Upstream dalı ayarlansın mı?", + "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "gitConfirmPushSetUpstreamMessage": "Bu dalın upstream'i yok. Tam olarak bir remote yapılandırılmışsa BusyMark {branch} dalını push edip upstream'i ayarlayabilir.", + "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "gitProjectHistory": "Proje Geçmişi", + "@gitProjectHistory": {"description":"Project history action label."}, + "gitFileHistory": "Dosya Geçmişi", + "@gitFileHistory": {"description":"Current file history action label."}, + "gitFileHistoryRequiresOpenFile": "Dosya Geçmişi açık bir Markdown dosyası gerektirir.", + "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "gitLoadMore": "Daha Fazla Yükle", + "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "gitChangesInCommit": "Bu commit'teki değişiklikler", + "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, + "gitCompareWithCurrent": "Mevcut sürümle karşılaştır", + "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "gitRestoreVersion": "Bu sürümü geri yükle", + "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "gitConfirmRestoreTitle": "Bu dosya sürümü geri yüklensin mi?", + "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "gitConfirmRestoreMessage": "BusyMark mevcut çalışma ağacı dosyasını seçili commit sürümüyle değiştirir. Geri yüklenen dosya stage edilmemiş durumda kalır.", + "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "gitCommitActions": "Commit işlemleri", + "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "gitResetCurrentBranchToHere": "Mevcut dalı buraya sıfırla…", + "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "gitResetCurrentBranchTitle": "{branch}, {commit}'e sıfırlansın mı?", + "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitResetCurrentBranchMessage": "Bu işlem {branch} dalını {commit} commit'ine taşır. Git'in dizini ve çalışma ağacını nasıl güncelleyeceğini seçin.", + "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "gitReset": "Sıfırla", + "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "gitResetModeSoft": "Soft", + "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "gitResetModeSoftDescription": "Yalnızca dalı taşıyın. Dizini ve çalışma ağacını değiştirmeyin; seçili commit ile arasındaki farklar stage edilmiş olarak kalır.", + "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "gitResetModeMixed": "Mixed", + "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "gitResetModeMixedDescription": "Dalı taşıyın ve dizini sıfırlayın. Çalışma ağacını değiştirmeyin; farkları stage edilmemiş durumda bırakın.", + "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "gitResetModeHard": "Hard", + "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "gitResetModeHardDescription": "Dalı taşıyın ve dizini ve çalışma ağacını sıfırlayın. İzlenen değişiklikler atılır; yolu engelleyen izlenmeyen dosyalar silinebilir.", + "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "gitResetModeKeep": "Keep", + "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "gitResetModeKeepDescription": "Yerel değişiklikleri koruyarak dalı taşıyın ve izlenen dosyaları sıfırlayın. Bu değişiklikler sıfırlamayla çakışırsa Git işlemi iptal eder.", + "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "fileActions": "Dosya eylemleri", + "@fileActions": {"description":"Tooltip for a file action menu."}, + "actions": "Eylemler", + "@actions": {"description":"Tooltip for a general action menu."}, + "gitStatusAdded": "Eklendi", + "@gitStatusAdded": {"description":"Git file status label."}, + "gitStatusDeleted": "Silindi", + "@gitStatusDeleted": {"description":"Git file status label."}, + "gitStatusRenamed": "Yeniden adlandırıldı", + "@gitStatusRenamed": {"description":"Git file status label."}, + "gitStatusCopied": "Kopyalandı", + "@gitStatusCopied": {"description":"Git file status label."}, + "gitStatusUntracked": "İzlenmiyor", + "@gitStatusUntracked": {"description":"Git file status label."}, + "gitStatusConflicted": "Çatışmalı", + "@gitStatusConflicted": {"description":"Git file status label."}, + "gitStatusIgnored": "Yoksayıldı", + "@gitStatusIgnored": {"description":"Git file status label."}, + "gitStatusTypeChanged": "Tür değiştirildi", + "@gitStatusTypeChanged": {"description":"Git file status label."}, + "gitStatusModified": "Değiştirildi", + "@gitStatusModified": {"description":"Git file status label."}, + "gitStatusUnknown": "Bilinmiyor", + "@gitStatusUnknown": {"description":"Git file status label."}, + "gitErrorUnavailable": "Git kullanılamıyor.", + "@gitErrorUnavailable": {"description":"Git error message."}, + "gitErrorNotRepository": "Bu çalışma alanı bir Git deposu değil.", + "@gitErrorNotRepository": {"description":"Git error message."}, + "gitErrorUnsafePath": "BusyMark güvenli olmayan bir Git yolunu engelledi.", + "@gitErrorUnsafePath": {"description":"Git error message."}, + "gitErrorInvalidBranchName": "Geçerli bir dal adı girin.", + "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "gitErrorNoRemote": "Git remote'u yapılandırılmamış.", + "@gitErrorNoRemote": {"description":"Git error message."}, + "gitErrorNoUpstream": "Upstream dalı yapılandırılmamış.", + "@gitErrorNoUpstream": {"description":"Git error message."}, + "gitErrorMultipleRemotes": "Birden fazla remote yapılandırılmış. Bu BusyMark sürümünün dışında bir upstream seçin.", + "@gitErrorMultipleRemotes": {"description":"Git error message."}, + "gitErrorDirtyWorkspace": "Dal değiştirmeden önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.", + "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "gitErrorResetDirtyWorkspace": "Geçerli dalı sıfırlamadan önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.", + "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "gitErrorRestoreStagedFile": "Geçmiş bir sürümü geri yüklemeden önce bu dosyayı staging'den çıkarın.", + "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "gitErrorResetDetachedHead": "Sıfırlamadan önce bir dala geçin.", + "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "gitErrorDiverged": "Dallar birbirinden ayrılmış. Birleştirme veya yeniden temellendirme işlemini bu BusyMark sürümünün dışında çözün.", + "@gitErrorDiverged": {"description":"Git error message."}, + "gitErrorAuthorIdentity": "Git'in commit atabilmesi için bir yazar adına ve e-posta adresine ihtiyacı var.", + "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "gitAuthorIdentityTitle": "Git yazar kimliği", + "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "gitAuthorIdentityMessage": "Git'in commit'lerde kullanacağı kimliği girin. BusyMark bu kimliği kaydedecek ve commit'i yeniden deneyecek.", + "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "gitAuthorName": "İsim", + "@gitAuthorName": {"description":"Git commit author name field label."}, + "gitAuthorEmail": "E-posta", + "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "gitAuthorIdentityGlobal": "Tüm depolar için kullanın", + "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "gitAuthorIdentityGlobalDescription": "BusyMark Snap olarak kurulduysa bu ayar BusyMark'ta açılan tüm depolar için geçerlidir.", + "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "gitSaveIdentityAndCommit": "Kimliği kaydet ve commit et", + "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "gitErrorAuthentication": "Git kimlik doğrulaması başarısız oldu.", + "@gitErrorAuthentication": {"description":"Git error message."}, + "gitErrorNetwork": "Git ağ işlemi başarısız oldu.", + "@gitErrorNetwork": {"description":"Git error message."}, + "gitErrorConflict": "Git çözülmemiş çakışmaları bildirdi.", + "@gitErrorConflict": {"description":"Git error message."}, + "gitErrorCommandFailed": "Git komutu başarısız oldu.", + "@gitErrorCommandFailed": {"description":"Git error message."}, + "markdownAndHtml": "Markdown ve HTML", + "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "markdownHtmlMarkdownBlocks": "Markdown blokları", + "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "markdownHtmlMarkdownBlocksDescription": "Markdown kaynağında ve önizlemesinde desteklenen blok yapıları.", + "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "markdownHtmlInlineFormatting": "Satır içi biçimlendirme", + "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "markdownHtmlInlineFormattingDescription": "Paragrafların, liste öğelerinin ve tablo hücrelerinin içinde görünebilecek biçimlendirme.", + "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "markdownHtmlRawHtmlBlocks": "Ham HTML Blokları", + "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "markdownHtmlRawHtmlBlocksDescription": "BusyMark önizleme widget'ları aracılığıyla oluşturulan güvenli blok düzeyinde HTML etiketleri.", + "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "markdownHtmlRawHtmlInline": "Ham HTML Satır İçi Etiketleri", + "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "markdownHtmlRawHtmlInlineDescription": "Gerçek etiketler gösterilmeden oluşturulan güvenli satır içi HTML etiketleri.", + "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "markdownHtmlSafety": "Güvenlik Kuralları", + "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "markdownHtmlSafetyDescription": "Ham HTML, önizleme oluşturmadan önce ayrıştırılır ve arındırılır.", + "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "markdownHtmlHeadings": "Başlıklar", + "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "markdownHtmlParagraphs": "Paragraflar", + "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "markdownHtmlLists": "Listeler", + "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "markdownHtmlHtmlContainers": "Konteynerler", + "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "markdownHtmlHtmlTextBlocks": "Metin blokları", + "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "markdownHtmlHtmlFigures": "Şekiller ve görseller", + "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "markdownHtmlHtmlPreformatted": "Önceden biçimlendirilmiş kod", + "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "markdownHtmlHtmlDisclosure": "Açıklama blokları", + "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "markdownHtmlHtmlDescriptionLists": "Açıklama listeleri", + "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "markdownHtmlHtmlFormattingTags": "Etiketleri biçimlendirme", + "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "markdownHtmlHtmlInlineCodeTags": "Satır içi kod etiketleri", + "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "markdownHtmlHtmlNeutralInlineTags": "Anlamsal metin etiketleri", + "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "markdownHtmlSanitizedPreview": "Temizlenmiş önizleme", + "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "markdownHtmlSanitizedPreviewDescription": "İzin verilen HTML, tarayıcıda oluşturulmaz, BusyMark önizleme bloklarına dönüştürülür.", + "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "markdownHtmlSourcePreserved": "Kaynak korunur", + "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "markdownHtmlSourcePreservedDescription": "Düzenlenmemiş ham HTML, tam olarak kaynak metin olarak kaydedilir.", + "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "markdownHtmlMarkdownInsideHtml": "HTML içindeki Markdown", + "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "markdownHtmlMarkdownInsideHtmlDescription": "Ham HTML içindeki Markdown işaretleri düz metin olarak görüntülenir.", + "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "markdownHtmlBlockedContent": "Engellenen etkin içerik", + "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "markdownHtmlBlockedContentDescription": "Komut dosyaları, stiller, çerçeveler, formlar, SVG, MathML, olaylar ve güvenli olmayan özellikler engellenir.", + "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "markdownHtmlSafeUrls": "Yalnızca güvenli URL'ler", + "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "markdownHtmlSafeUrlsDescription": "Bağlantılar http, https, mailto, tel, göreli ve parça URL'lerine izin verir; güvenli olmayan şemalar engellenir.", + "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "exportAsPdf": "PDF olarak dışa aktar", + "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "pdfExportDescription": "Kendi başına kullanılabilen, düzenli bir PDF için sayfa düzenini seçin.", + "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "pdfRemoteImagesNote": "Dışa aktarma sırasında harici görseller indirilmez. Varsa yerel görseller eklenir.", + "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "pdfPageSize": "Sayfa boyutu", + "@pdfPageSize": {"description":"PDF export page-size setting."}, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "pdfPageSizeLetter": "Letter boyutu", + "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "pdfOrientation": "Yönlendirme", + "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "pdfPortrait": "Portre", + "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "pdfLandscape": "Manzara", + "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "pdfMargins": "Kenar boşlukları", + "@pdfMargins": {"description":"PDF export page-margin setting."}, + "pdfMarginNarrow": "Dar", + "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "pdfMarginNormal": "Standart", + "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "pdfMarginWide": "Geniş", + "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "pdfIncludePageNumbers": "Sayfa numaralarını dahil et", + "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "export": "Dışa aktar", + "@export": {"description":"Button label that starts an export."}, + "exportingPdf": "PDF dışa aktarılıyor…", + "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "fileTypePdf": "PDF belgesi", + "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "pdfExported": "{fileName} dışa aktarıldı.", + "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, + "pdfExportedWithWarnings": "{fileName}, {count} uyarı(lar)ıyla birlikte dışa aktarıldı.", + "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "pdfExportUnavailable": "PDF dışa aktarma bileşeni eksik. BusyMark'ı yeniden yükleyin ve tekrar deneyin.", + "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "pdfExportTimedOut": "PDF dışa aktarımı çok uzun sürdü ve durduruldu.", + "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "pdfExportFailed": "BusyMark bu belgeyi PDF olarak dışa aktaramadı.", + "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "visualizationRendering": "Oluşturuluyor…", + "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "visualizationStale": "Son geçerli görünüm gösteriliyor", + "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "visualizationShowSource": "Kaynağı göster", + "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "visualizationShowRender": "Görünümü göster", + "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, + "visualizationFitWidth": "Genişliğe sığdır", + "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "visualizationSaveImage": "Görseli kaydet", + "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "visualizationCopyImage": "Görseli kopyala", + "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "visualizationImageCopied": "Resim kopyalandı", + "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "visualizationOpenApiReference": "API Referansını Aç", + "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "visualizationValid": "Geçerli", + "@visualizationValid": {"description":"OpenAPI validation success state."}, + "visualizationInvalid": "Geçersiz", + "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "visualizationServers": "Sunucular", + "@visualizationServers": {"description":"OpenAPI server count label."}, + "visualizationPaths": "Yollar", + "@visualizationPaths": {"description":"OpenAPI path count label."}, + "visualizationOperations": "Operasyonlar", + "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "visualizationTags": "Etiketler", + "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "visualizationNoOperations": "Eşleştirme işlemi yok", + "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "visualizationSearchOperations": "Arama işlemleri", + "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "visualizationRenderFailed": "Bu görselleştirme oluşturulamadı.", + "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "visualizationRetry": "Yeniden dene", + "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "visualizationSaved": "{fileName} kaydedildi", + "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "shortcutExportPdfDescription": "Etkin belgeyi veya Writerside modülünü PDF olarak dışa aktarın.", + "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "instances": "Örnekler", + "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "newInstance": "Yeni örnek", + "@newInstance": {"description":"Action that creates a Writerside instance."}, + "newTocLibrary": "Yeni TOC kitaplığı", + "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "editInstance": "Örneği düzenle", + "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "openTocFile": "TOC dosyasını aç", + "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "createInstance": "Örnek oluştur", + "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "createTocLibrary": "İçindekiler kitaplığı oluştur", + "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "instanceContent": "İçerik", + "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "instanceContentSource": "İçerik kaynağı:", + "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "emptyInstance": "Boş örnek", + "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "markdownFiles": "Yerel Markdown dosyaları", + "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "chooseMarkdownFolder": "Markdown klasörünü seçin", + "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "errorWritersideInstanceImportSourceRequired": "Markdown dosyalarını içeren bir klasör seçin.", + "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "instanceAppearance": "Görünüm", + "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "instanceColor": "Simge rengi", + "@instanceColor": {"description":"Writerside instance icon-color field."}, + "instanceVersion": "Sürüm", + "@instanceVersion": {"description":"Writerside instance version field."}, + "instanceVersionInherited": "Bu alan boş olduğunda proje sürümü {version}'tir.", + "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "instanceWebPath": "Web yolu", + "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "instanceStatus": "Durum", + "@instanceStatus": {"description":"Writerside instance status field."}, + "instanceStatusRelease": "release", + "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "instanceStatusEap": "EAP", + "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "instanceStatusDeprecated": "Kullanımdan kaldırıldı", + "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "allowSearchEngineIndexing": "Arama motoru dizine eklenmesine izin ver", + "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "allowSearchEngineIndexingDescription": "Harici arama motorlarının bu çıktıyı dizine eklemesine izin verin.", + "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "offlineArtifact": "Çevrimdışı artefakt", + "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "offlineArtifactDescription": "Kaynakları, yerleşik belgelerin bağımsız olmasını sağlayacak şekilde paketleyin.", + "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "instanceOutputSettings": "Çıktı ayarları", + "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "markdownImportSource": "Markdown kaynağı", + "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "markdownImportFiles": "Markdown dosyaları", + "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "selectNone": "Hiçbirini seçme", + "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "markdownFilesFound": "{count} Markdown dosyası/dosyaları bulundu", + "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "noMarkdownFilesFound": "Bu dizinde Markdown dosyası bulunamadı.", + "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "copyReferencedMedia": "Başvurulan medyayı kopyala", + "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "copyReferencedMediaDescription": "Göreli yolları koruyarak, seçilen dosyaların referans verdiği yerel görüntüleri ve videoları kopyalayın.", + "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "instanceIdRenameWarningTitle": "Örnek kimliği yeniden adlandırılsın mı?", + "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "instanceIdRenameWarning": "BusyMark, .tree dosyasını yeniden adlandıracak ve Writerside proje referanslarını \"{oldId}\"ten \"{newId}\"e güncelleyecektir. Yayın komut dosyaları değiştirilmez ve ayrı olarak güncellenmeleri gerekir.", + "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "renameAndUpdateReferences": "Referansları yeniden adlandırın ve güncelleyin", + "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "tocLibraryDescription": "Bir TOC kütüphanesi yeniden kullanılabilir bölümleri saklar ve kendi çıktısını üretmez.", + "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "defaultTocLibraryName": "Paylaşılan İçindekiler", + "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "instanceColorAutomatic": "Otomatik", + "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "instanceColorBlue": "Mavi", + "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "instanceColorGreen": "Yeşil", + "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "instanceColorOrange": "Turuncu", + "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "instanceColorPurple": "Mor", + "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "instanceColorRed": "Kırmızı", + "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "instanceColorTeal": "turkuaz", + "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "instanceColorYellow": "Sarı", + "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "errorWritersideInstanceNameRequired": "Bir örnek adı girin.", + "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "errorWritersideInstanceIdExists": "\"{id}\" kimliğine sahip bir örnek zaten mevcut.", + "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "errorWritersideInstanceTreeExists": "Örnek ağacı zaten mevcut: {path}", + "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSourceMissing": "Markdown kaynak dizini mevcut değil: {path}", + "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportSelectionRequired": "İçe aktarılacak en az bir Markdown dosyası seçin.", + "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "errorWritersideInstanceImportFileInvalid": "Bu, seçilen kaynağın içindeki okunabilir bir Markdown dosyası değil: {path}", + "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceImportTargetExists": "İçe aktarma, mevcut bir proje dosyasının üzerine yazılmasına neden olur: {path}", + "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "errorWritersideInstanceFilesChanged": "Örnek dosyalar diskte değiştirildi. Bunları inceleyin ve tekrar deneyin.", + "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "errorWritersideInstanceRollbackFailed": "BusyMark, örnek değişikliğini tamamen geri alamadı. Devam etmeden önce bu dosyaları inceleyin: {paths}", + "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "errorWritersideInstanceLibraryImport": "İçindekiler kitaplığı Markdown konularını içe aktaramaz.", + "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "errorWritersideInstanceWebPathInvalid": "Web yolu tek bir segmentten oluşmalıdır.", + "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "errorWritersideInstanceConfigurationInvalid": "Writerside örnek yapılandırması geçersiz. Teşhislerini düzeltip tekrar deneyin.", + "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "errorWritersideInstanceTemporaryFile": "BusyMark örnek değişikliklerini güvenli bir şekilde gerçekleştiremedi.", + "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, + "diagnosticWritersideTreeInvalidStatus": "Bilinmeyen instance durumu \"{status}\". release, eap veya deprecated kullanın.", + "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "diagnosticWritersideDuplicateInstanceId": "“{id}” örnek kimliği birden fazla ağaç dosyası tarafından kullanılıyor.", + "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml bir kök öğesine sahip olmalıdır.", + "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, + "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} değeri “{value}” doğru veya yanlış olmalıdır.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "diagnosticWritersideBuildProfileMissingInstance": "Bir öğesi bir örnek kimliği belirtmelidir.", + "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, + "diagnosticWritersideTreeInvalidInclude": "Bir ağaç hem from hem de element kimliğini belirtmelidir.", + "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "diagnosticWritersideTreeMissingSnippetId": "Bir ağaç 'i bir kimlik belirtmelidir.", + "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "Çapraz örnek TOC referansı hem ref hem de in'i belirtmelidir.", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "diagnosticWritersideTreeConflictingTargets": "Bir TOC öğesi birden fazla konuyu, referansı, bağlantıyı veya yönlendirmeyi hedefleyemez.", + "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "diagnosticWritersideTreeDuplicateElementId": "Ağaç öğesi kimliği \"{id}\" birden fazla kez bildirildi.", + "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideInstanceGroupsInvalidRoot": "Örnek grupları dosyasında bir kök öğesi bulunmalıdır.", + "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "diagnosticWritersideInstanceGroupInvalid": "Bir örnek grubunun boş olmayan bir kimlik ve örnek listesi belirtmesi gerekir.", + "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "diagnosticWritersideInstanceGroupDuplicateId": "Örnek grubu kimliği \"{id}\" birden fazla kez bildirildi.", + "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "diagnosticWritersideExternalTreeInclude": "TOC şunları içerir: “{source}#{id}”, “{origin}” harici modülüne aittir ve bu çalışma alanında genişletilemez.", + "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "diagnosticWritersideTreeIncludeElementMissing": "\"{id}\" ağaç öğesi kayıtlı \"{source}\" ağacında mevcut değil.", + "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideTreeCircularInclude": "“{source}#{id}” içeren ağaç bir döngü oluşturur.", + "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "diagnosticWritersideUnknownInstanceGroup": "Örnek koşulu, bilinmeyen \"@{group}\" grubuna referans veriyor.", + "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "diagnosticWritersideReferenceInstanceMissing": "Çapraz örnek referansı, bilinmeyen \"{instance}\" örneğini hedefliyor.", + "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "diagnosticWritersideReferenceTopicMissing": "“{topic}” konusu başvurulan “{instance}” örneğinde değil.", + "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "download": "İndirmek", + "@download": {"description":"Button label that downloads a required component."}, + "exportWritersideAsPdf": "Writerside'ı PDF olarak dışa aktar", + "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "writersidePdfContent": "İçeriği dışa aktar", + "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "writersidePdfPage": "Sayfa", + "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "exportingWritersidePdf": "Writerside PDF'si dışa aktarılıyor…", + "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "ai": "AI", + "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "aiLocalOllama": "Yerel Ollama", + "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "aiDisabled": "Devre dışı", + "@aiDisabled": {"description":"AI provider option that disables AI features."}, + "aiLocalOnlyDescription": "AI düzenlemesi yalnızca yereldir. BusyMark yalnızca seçili sağlayıcıya gösterilen bağlamı gönderir ve hiçbir öneriyi incelemeden uygulamaz.", + "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "aiProvider": "AI sağlayıcısı", + "@aiProvider": {"description":"Label for an AI provider selection."}, + "aiDefaultProvider": "Varsayılan sağlayıcı", + "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "aiConfigureProvider": "Sağlayıcıyı yapılandır", + "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "aiChooseProvider": "AI sağlayıcısını seç", + "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "aiOllamaEndpoint": "Ollama uç noktası", + "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "aiOllamaModel": "Ollama modeli", + "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "aiTestConnection": "Bağlantıyı test edin", + "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "aiTestingConnection": "Test ediliyor…", + "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "aiConnectionReady": "Bağlandı. {count} yüklü model bulundu.", + "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "aiNoModels": "Hiçbir model seçilmedi.", + "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "aiConnectionFailed": "BusyMark, AI metin oluşturma işlemini doğrulayamadı.", + "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "aiConfigureFirst": "Bir AI sağlayıcısını etkinleştirin ve Ayarlar → AI bölümünde bir modeli doğrulayın.", + "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "aiEditWithAi": "AI ile düzenle", + "aiRefineWithAi": "AI ile iyileştir", + "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "aiInstruction": "Talimat", + "aiChangeTarget": "Neler değişebilir?", + "aiSharedContext": "AI ile paylaşılan bağlam", + "aiTargetSelection": "Seçilen içerik", + "aiTargetInsertAfterBlock": "Geçerli bloktan sonra ekle", + "aiTargetCurrentBlock": "Geçerli blok", + "aiTargetCurrentSection": "Mevcut bölüm", + "aiTargetCompleteDocument": "Belgenin tamamı", + "aiContextNone": "Belge bağlamı yok", + "aiContextSelection": "Seçilen içerik", + "aiContextCurrentBlock": "Geçerli blok", + "aiContextCurrentSection": "Mevcut bölüm", + "aiContextCompleteDocument": "Belgenin tamamı", + "aiGenerating": "Teklif oluşturuluyor…", + "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "aiProposal": "AI önerisi", + "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "aiGenerateProposal": "Teklif oluştur", + "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "aiContextDisclosure": "Seçilen sağlayıcı, görüntülenen bağlamdan {count} karakterlerini alacaktır.", + "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "aiOriginal": "Orijinal", + "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "aiSuggested": "Önerilen", + "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "aiApplyProposal": "Teklifi uygula", + "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "aiTokenUsage": "{input} girdi tokenı · {output} çıktı tokenı", + "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "aiStaleProposal": "Bu teklif oluşturulurken belge değiştirildi. Eylemi yeniden çalıştırın.", + "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "gitAiStagedChangesChanged": "Bu commit mesajı oluşturulurken stage edilmiş değişiklikler değişti. İşlemi yeniden çalıştırın.", + "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "aiViewContext": "Gönderilen bağlamı görüntüle", + "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "aiReviewExactContent": "Tam içeriği incele", + "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "aiContentToChange": "Değiştirilecek içerik", + "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "aiContentSentToAi": "AI'ye gönderilen içerik", + "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "aiApiKey": "API anahtarı", + "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "aiApiKeyStoredHint": "Sistemin kimlik bilgileri deposunda bir anahtar saklanır", + "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "aiApiKeyEnterHint": "Sağlayıcının API anahtarını girin", + "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "aiReplaceApiKey": "API anahtarını değiştir", + "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "aiSaveApiKey": "API anahtarını güvenle kaydet", + "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "aiRemoveApiKey": "Kaydedilen API anahtarını kaldır", + "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "aiCredentialSaved": "API anahtarı sistem kimlik bilgileri deposuna kaydedildi.", + "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "aiCredentialRemoved": "Kaydedilen API anahtarı kaldırıldı.", + "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "aiModelRouting": "Model yönlendirme", + "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "aiAutomaticRouting": "Göreve göre otomatik", + "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "aiFixedModelRouting": "Seçilen modeli kullan", + "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "aiPreferredModel": "Tercih edilen model", + "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "aiModel": "AI modeli", + "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "aiUsageThisMonth": "{requests} istek · {input} girdi tokenı · {output} çıktı tokenı", + "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "aiCloudConsentTitle": "{provider}'e içerik gönderilsin mi?", + "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentEnable": "{provider}'i etkinleştir", + "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "aiCloudConsentMessage": "Yalnızca her AI inceleme iletişim kutusunda gösterilen içerik gönderilir. İstekler durum bilgisine sahip değildir, tekliflerin incelenmesi gerekir ve API anahtarı Linux sisteminin kimlik bilgileri deposunda saklanır.", + "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "aiCloudConsentRequired": "Önce Ayarlar → AI bölümünden {provider} ile veri paylaşımını onaylayın.", + "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "aiGenerationVerified": "Oluşturma {model} ile doğrulandı. {count} uyumlu model kullanılabilir.", + "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "aiColdStartObserved": "Yerel model için soğuk başlangıç gözlemlendi.", + "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "aiNoCompatibleModels": "Uyumlu bir metin oluşturma modeli mevcut değil.", + "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "aiEnableProvider": "Önce bir AI sağlayıcısını etkinleştirin.", + "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "aiDraftCommitMessage": "Taslak commit mesajı", + "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "aiDrafting": "Taslak hazırlanıyor…", + "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "aiDraftWithAi": "AI ile taslak oluştur", + "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "generateOrUpdateMarkdownToc": "İçindekiler tablosu oluştur/güncelle", + "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "markdownTocTitle": "İçindekiler", + "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "markdownTocUpdated": "İçindekiler tablosu {count} girişle güncellendi.", + "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "markdownTocNoHeadings": "İçindekiler tablosu oluşturmadan önce en az bir bölüm başlığı ekleyin.", + "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "markdownTocMalformedMarkers": "BusyMark içindekiler tablosu işaretçileri eksik, yinelenmiş veya hatalı.", + "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "diagnosticMarkdownHeadingSkippedLevel": "{level} başlık seviyesi {previousLevel} seviyesini takip eder; bölümün iç içe geçmesini inceleyin.", + "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "diagnosticMarkdownLinkEmptyText": "Bağlantı metni boş; amacını açıklayan erişilebilir bir ad sağlayın.", + "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "diagnosticMarkdownLinkReviewText": "“{text}” bağlantı metninin bağlamda amacını açıklayıp açıklamadığını inceleyin.", + "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "diagnosticMarkdownTableEmptyHeader": "Tablo başlığı hücreleri sütunlarını tanımlamalıdır; her boş başlığı tamamlayın.", + "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "mathRenderFailed": "Matematiksel ifade işlenemedi.", + "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "displayMath": "Blok matematik", + "@displayMath": {"description":"Editor action that inserts a display mathematical expression."}, + "inlineMath": "Satır içi matematik", + "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."} +} diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index dd4f9cbe..f8674c41 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -264,6 +264,14 @@ "@languageGerman": { "description": "Language selector option for German." }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", "@languageItalian": { "description": "Language selector option for Italian." @@ -308,10 +316,26 @@ "@languageHindi": { "description": "Language selector option for Hindi." }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", "@languageEstonian": { "description": "Language selector option for Estonian." }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Бічна панель", "@toggleSidebar": { "description": "Native header bar sidebar toggle tooltip." diff --git a/lib/l10n/app_vi.arb b/lib/l10n/app_vi.arb new file mode 100644 index 00000000..d84675a2 --- /dev/null +++ b/lib/l10n/app_vi.arb @@ -0,0 +1,4612 @@ +{ + "@@locale": "vi", + "appTitle": "BusyMark", + "@appTitle": { + "description": "Application name." + }, + "appSubtitle": "Trình biên tập tệp Markdown và các dự án tài liệu tương thích với Writerside.", + "@appSubtitle": { + "description": "Short application description." + }, + "aboutBusyMark": "Giới thiệu BusyMark", + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, + "aboutTagline": "Trình biên tập Markdown và Writerside", + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, + "aboutLicenseLabel": "Giấy phép", + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, + "aboutWebsite": "Trang web", + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, + "aboutSourceCode": "Mã nguồn", + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, + "reportIssue": "Báo cáo sự cố", + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, + "feedbackCategory": "Danh mục", + "@feedbackCategory": { + "description": "Feedback category field label." + }, + "feedbackChooseCategory": "Chọn một danh mục", + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, + "feedbackCategoryProblem": "Vấn đề hoặc lỗi", + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, + "feedbackCategoryFeature": "Đề xuất tính năng", + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, + "feedbackCategoryPrivacySecurity": "Mối lo ngại về quyền riêng tư hoặc bảo mật", + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, + "feedbackCategoryUsability": "Mối lo ngại về khả năng sử dụng", + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, + "feedbackCategoryOther": "Khác", + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, + "feedbackSubject": "Chủ đề", + "@feedbackSubject": { + "description": "Feedback subject field label." + }, + "feedbackMessage": "Nội dung chi tiết", + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "Email nhận phản hồi (tùy chọn)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, + "feedbackIncludeTechnicalDetails": "Bao gồm thông tin kỹ thuật", + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, + "feedbackTechnicalDetailsDisclosure": "Khi bật, tùy chọn này chỉ thêm phiên bản hệ điều hành Linux và ngôn ngữ của ứng dụng BusyMark. Không có nhật ký, tệp, dữ liệu tài khoản hoặc thông tin chẩn đoán nào khác được đính kèm.", + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, + "feedbackSubmit": "Gửi", + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, + "feedbackSubmitting": "Đang gửi…", + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, + "feedbackCategoryRequired": "Hãy chọn một danh mục.", + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, + "feedbackSubjectLength": "Chủ đề phải có từ 3 đến 120 ký tự.", + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, + "feedbackMessageLength": "Nội dung phải có từ 10 đến 5.000 ký tự.", + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, + "feedbackReplyEmailInvalid": "Nhập địa chỉ email hợp lệ hoặc để trống trường này.", + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, + "feedbackConnectionFailure": "BusyMark không thể kết nối. Hãy kiểm tra kết nối Internet rồi thử lại.", + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, + "feedbackTimeoutFailure": "Yêu cầu đã hết thời gian chờ. Hãy thử lại.", + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, + "feedbackRateLimitedFailure": "Quá nhiều báo cáo đã được gửi từ kết nối này. Hãy chờ rồi thử lại.", + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, + "feedbackRejectedFailure": "Máy chủ đã từ chối báo cáo này. Hãy kiểm tra các trường trong biểu mẫu rồi thử lại.", + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, + "feedbackServerFailure": "Máy chủ không thể tiếp nhận báo cáo. Hãy thử lại sau.", + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, + "feedbackSuccess": "Đã gửi phản hồi. Mã tham chiếu: {id}", + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "advanced": "Nâng cao", + "@advanced": { + "description": "Settings section title for advanced actions." + }, + "addToGit": "Thêm vào Git", + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, + "appearance": "Giao diện", + "@appearance": { + "description": "Settings section title for appearance options." + }, + "apply": "Áp dụng", + "@apply": { + "description": "Button label that applies a dialog change." + }, + "back": "Quay lại", + "@back": { + "description": "Tooltip for navigating back." + }, + "bottomLeft": "Dưới cùng bên trái", + "@bottomLeft": { + "description": "Editing button position option." + }, + "bottomRight": "Dưới cùng bên phải", + "@bottomRight": { + "description": "Editing button position option." + }, + "cancel": "Hủy", + "@cancel": { + "description": "Cancel button label." + }, + "choose": "Chọn", + "@choose": { + "description": "Button label for choosing a file or path." + }, + "chooseLocation": "Chọn vị trí", + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, + "copy": "Sao chép", + "@copy": { + "description": "Copy command label." + }, + "copyName": "Sao chép tên", + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, + "copyFileName": "Sao chép tên tệp", + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, + "copyPath": "Sao chép đường dẫn", + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, + "create": "Tạo", + "@create": { + "description": "Create action label." + }, + "creating": "Đang tạo…", + "@creating": { + "description": "Progress label while a project or topic is being created." + }, + "cut": "Cắt", + "@cut": { + "description": "Cut command label." + }, + "promoteSection": "Đưa phần lên một cấp", + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, + "demoteSection": "Đưa phần xuống một cấp", + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, + "moveSectionUp": "Di chuyển phần lên trên", + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, + "moveSectionDown": "Di chuyển phần xuống dưới", + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, + "confirmDeleteSectionTitle": "Xóa phần này?", + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, + "confirmDeleteSectionMessage": "Xóa “{name}” và toàn bộ nội dung trong phần này? Không thể hoàn tác.", + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "darkTheme": "Tối", + "@darkTheme": { + "description": "Dark theme option." + }, + "delete": "Xóa", + "@delete": { + "description": "Delete command label." + }, + "discard": "Loại bỏ", + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, + "editor": "Trình biên tập", + "@editor": { + "description": "Editor view label." + }, + "file": "Tệp", + "@file": { + "description": "Generic file kind label." + }, + "fileHistory": "Lịch sử tệp", + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, + "folder": "Thư mục", + "@folder": { + "description": "Folder kind label." + }, + "insert": "Chèn", + "@insert": { + "description": "Insert button label." + }, + "keyboardShortcuts": "Phím tắt", + "commandPalette": "Bảng lệnh", + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, + "commandPaletteHint": "Nhập lệnh", + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, + "commandPaletteEmpty": "Không có lệnh phù hợp", + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, + "commandUnavailableInContext": "Lệnh không khả dụng trong ngữ cảnh trình biên tập hiện tại", + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, + "lightTheme": "Sáng", + "@lightTheme": { + "description": "Light theme option." + }, + "mainMenu": "Menu chính", + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, + "fullScreen": "Toàn màn hình", + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, + "markdown": "Markdown", + "@markdown": { + "description": "Markdown format label." + }, + "open": "Mở", + "@open": { + "description": "Open action label." + }, + "openInFiles": "Mở trong Tệp", + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, + "pathActions": "Thao tác với đường dẫn", + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, + "outline": "Đề cương", + "@outline": { + "description": "Outline sidebar tab label." + }, + "overwrite": "Ghi đè", + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, + "paste": "Dán", + "@paste": { + "description": "Paste command label." + }, + "pasteWithoutFormatting": "Dán không định dạng", + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, + "reading": "Đọc", + "@reading": { + "description": "Reading view label." + }, + "removeFromRecent": "Xóa khỏi mục Gần đây", + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, + "recent": "Gần đây", + "@recent": { + "description": "Recent workspaces section title." + }, + "redo": "Làm lại", + "@redo": { + "description": "Redo command label." + }, + "save": "Lưu", + "@save": { + "description": "Save action label." + }, + "search": "Tìm kiếm", + "@search": { + "description": "Search action label and field hint." + }, + "selectAll": "Chọn tất cả", + "@selectAll": { + "description": "Select all command label." + }, + "settings": "Cài đặt", + "@settings": { + "description": "Settings action label." + }, + "source": "Mã nguồn", + "@source": { + "description": "Source view label." + }, + "split": "Chia đôi", + "@split": { + "description": "Split view label." + }, + "systemTheme": "Hệ thống", + "@systemTheme": { + "description": "System theme option." + }, + "theme": "Chủ đề", + "@theme": { + "description": "Theme setting label." + }, + "appLanguage": "Ngôn ngữ", + "@appLanguage": { + "description": "Application language setting label." + }, + "systemLanguage": "Hệ thống", + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, + "languageEnglish": "English", + "@languageEnglish": { + "description": "Language selector option for English." + }, + "languageGerman": "Deutsch", + "@languageGerman": { + "description": "Language selector option for German." + }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, + "languageItalian": "Italiano", + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, + "languageFrench": "Français", + "@languageFrench": { + "description": "Language selector option for French." + }, + "languageRussian": "Русский", + "@languageRussian": { + "description": "Language selector option for Russian." + }, + "languageUkrainian": "Українська", + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, + "languagePolish": "Polski", + "@languagePolish": { + "description": "Language selector option for Polish." + }, + "languageSpanish": "Español", + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, + "languagePortuguese": "Português", + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, + "languageArabic": "العربية", + "@languageArabic": { + "description": "Language selector option for Arabic." + }, + "languagePersian": "فارسی", + "@languagePersian": { + "description": "Language selector option for Persian." + }, + "languageHindi": "हिन्दी", + "@languageHindi": { + "description": "Language selector option for Hindi." + }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, + "languageEstonian": "Eesti", + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, + "toggleSidebar": "Bảng điều khiển thanh bên", + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, + "topLeft": "Trên cùng bên trái", + "@topLeft": { + "description": "Editing button position option." + }, + "topRight": "Trên cùng bên phải", + "@topRight": { + "description": "Editing button position option." + }, + "undo": "Hoàn tác", + "@undo": { + "description": "Undo command label." + }, + "validate": "Kiểm tra", + "@validate": { + "description": "Validate action label." + }, + "validation": "Xác thực", + "@validation": { + "description": "Settings section title for validation options." + }, + "viewMode": "Chế độ xem", + "@viewMode": { + "description": "Native header bar view mode control label." + }, + "welcome": "Chào mừng", + "@welcome": { + "description": "Welcome screen label and tooltip." + }, + "writerside": "Writerside", + "@writerside": { + "description": "Writerside workspace kind label." + }, + "xml": "XML", + "@xml": { + "description": "XML format label." + }, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, + "fileTypeImages": "Hình ảnh", + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, + "openMarkdownFile": "Mở tệp Markdown", + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, + "markdownFileExtensions": ".md hoặc .markdown", + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, + "openFolderOrWritersideProject": "Mở thư mục hoặc dự án Writerside", + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, + "markdownFolderOrWritersideProject": "Thư mục Markdown hoặc dự án tương thích với Writerside", + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, + "noOpenFile": "Không có tệp nào đang mở", + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, + "shortcutDeleteTreeItemDescription": "Xóa mục Tệp đã chọn hoặc xóa chủ đề đã chọn khỏi mục lục", + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, + "shortcutGroupGeneral": "Chung", + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, + "shortcutNewDocument": "Tạo", + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, + "shortcutNewDocumentDescription": "Tạo tệp Markdown hoặc dự án Writerside", + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, + "shortcutOpenDescription": "Mở tệp Markdown, thư mục hoặc dự án Writerside", + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, + "shortcutSaveDescription": "Lưu tài liệu hiện tại", + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, + "shortcutSearchDescription": "Tìm kiếm trong không gian làm việc hiện tại", + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, + "shortcutKeyboardShortcutsDescription": "Hiển thị tham chiếu phím tắt này", + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, + "shortcutMarkdownAndHtmlDescription": "Mở tham chiếu Markdown và HTML", + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, + "shortcutSettingsDescription": "Mở cài đặt BusyMark", + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, + "shortcutNextTab": "Tab tiếp theo", + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, + "shortcutNextTabDescription": "Chuyển đến tab đang mở tiếp theo", + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, + "shortcutPreviousTab": "Tab trước", + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, + "shortcutPreviousTabDescription": "Chuyển đến tab đang mở trước đó", + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, + "shortcutCloseTab": "Đóng tab", + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, + "shortcutCloseTabDescription": "Đóng tab đang hoạt động", + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, + "shortcutCloseAllTabs": "Đóng tất cả tab", + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, + "shortcutCloseAllTabsDescription": "Đóng tất cả các tab đang mở", + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, + "shortcutGroupTextEditing": "Chỉnh sửa văn bản", + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, + "shortcutSelectAllDescription": "Trong chế độ Mã nguồn, chọn toàn bộ văn bản; trong chế độ Trình biên tập, nhấn hai lần để chọn mọi khối", + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, + "shortcutCutDescription": "Cắt văn bản đã chọn", + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, + "shortcutCopyDescription": "Sao chép văn bản đã chọn", + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, + "shortcutPasteDescription": "Dán từ bảng nhớ tạm", + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, + "shortcutPastePlainTextDescription": "Dán văn bản trong bảng nhớ tạm không định dạng", + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, + "shortcutUndoDescription": "Hoàn tác chỉnh sửa gần nhất", + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, + "shortcutRedoDescription": "Làm lại chỉnh sửa vừa hoàn tác", + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, + "shortcutInsertIndentation": "Chèn thụt lề", + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, + "shortcutInsertIndentationDescription": "Chèn thụt lề tại vị trí con trỏ", + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, + "shortcutOutdentSource": "Bỏ thụt lề mã nguồn", + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, + "shortcutOutdentSourceDescription": "Xóa một cấp thụt lề trong chế độ Mã nguồn", + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, + "shortcutEscape": "Đóng tìm kiếm hoặc xóa lựa chọn khối", + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, + "shortcutEscapeDescription": "Đóng tìm kiếm trong không gian làm việc hoặc xóa lựa chọn khối trong chế độ Trình biên tập", + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, + "shortcutGroupFormatting": "Định dạng", + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, + "shortcutBoldDescription": "Bật hoặc tắt chữ đậm cho văn bản đã chọn", + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, + "shortcutItalicDescription": "Bật hoặc tắt chữ nghiêng cho văn bản đã chọn", + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, + "shortcutUnderlineDescription": "Bật hoặc tắt gạch chân cho văn bản đã chọn", + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, + "shortcutLinkDescription": "Chèn hoặc chỉnh sửa liên kết", + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, + "shortcutInlineCodeDescription": "Bật hoặc tắt mã nội tuyến cho văn bản đã chọn", + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, + "shortcutStrikethroughDescription": "Bật hoặc tắt gạch ngang cho văn bản đã chọn", + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, + "shortcutGroupBlocks": "Khối", + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, + "shortcutParagraphDescription": "Đặt khối hiện tại thành đoạn văn", + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, + "shortcutHeading1Description": "Đặt khối hiện tại thành Tiêu đề 1", + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, + "shortcutHeading2Description": "Đặt khối hiện tại thành Tiêu đề 2", + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, + "shortcutHeading3Description": "Đặt khối hiện tại thành Tiêu đề 3", + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, + "shortcutHeading4Description": "Đặt khối hiện tại thành Tiêu đề 4", + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, + "shortcutHeading5Description": "Đặt khối hiện tại thành Tiêu đề 5", + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, + "shortcutHeading6Description": "Đặt khối hiện tại thành Tiêu đề 6", + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, + "shortcutGroupLists": "Danh sách", + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, + "numberedList": "Danh sách đánh số", + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, + "shortcutNumberedListDescription": "Bật hoặc tắt định dạng danh sách đánh số", + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, + "bulletedList": "Danh sách dấu đầu dòng", + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, + "shortcutBulletedListDescription": "Bật hoặc tắt định dạng danh sách dấu đầu dòng", + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, + "checklist": "Danh sách kiểm tra", + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, + "shortcutChecklistDescription": "Bật hoặc tắt định dạng danh sách kiểm tra", + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, + "shortcutGroupSidebar": "Thanh bên", + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, + "sidebarViewMenu": "Chế độ xem thanh bên", + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, + "createMarkdownFile": "Tạo tệp Markdown", + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, + "createMarkdownFileDescription": "Bắt đầu một tài liệu Markdown cục bộ chưa lưu", + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, + "createWritersideProject": "Tạo dự án Writerside", + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, + "createWritersideProjectDescription": "Bắt đầu một dự án tương thích với Writerside trên máy", + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, + "defaultProjectName": "Tài liệu", + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, + "defaultInstanceName": "Hướng dẫn sử dụng", + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, + "defaultStartTopicTitle": "Bắt đầu", + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, + "projectName": "Tên dự án", + "@projectName": { + "description": "Create project dialog field label." + }, + "directoryName": "Tên thư mục", + "@directoryName": { + "description": "Create project dialog field label." + }, + "instanceName": "Tên phiên bản", + "@instanceName": { + "description": "Create project dialog field label." + }, + "instanceId": "ID phiên bản", + "@instanceId": { + "description": "Create project dialog field label." + }, + "startTopicTitle": "Tiêu đề chủ đề bắt đầu", + "@startTopicTitle": { + "description": "Create project dialog field label." + }, + "location": "Vị trí", + "@location": { + "description": "Create dialog location section label." + }, + "projectNameRequired": "Tên dự án là bắt buộc.", + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, + "directoryNameRequired": "Tên thư mục là bắt buộc.", + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, + "useSingleSafeDirectoryName": "Sử dụng một tên thư mục an toàn duy nhất.", + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, + "useLowercaseIdentifier": "Sử dụng mã định danh viết thường, chỉ gồm chữ cái, chữ số, dấu gạch dưới hoặc dấu gạch nối.", + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, + "startTopicTitleRequired": "Tiêu đề chủ đề bắt đầu là bắt buộc.", + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, + "createWritersideProjectFailed": "Không thể tạo dự án Writerside.", + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, + "settingsTitle": "Cài đặt BusyMark", + "@settingsTitle": { + "description": "Settings screen title." + }, + "autoSave": "Tự động lưu", + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, + "autoSaveDescription": "Tự động lưu các thay đổi của tệp sau một khoảng thời gian ngắn không hoạt động.", + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, + "wordWrap": "Tự động xuống dòng", + "@wordWrap": { + "description": "Word wrap setting label." + }, + "editorFontSize": "Cỡ chữ trình biên tập", + "@editorFontSize": { + "description": "Editor font size setting label." + }, + "validateOnEdit": "Kiểm tra khi chỉnh sửa", + "@validateOnEdit": { + "description": "Validation setting label." + }, + "clearRecentWorkspaces": "Xóa không gian làm việc gần đây", + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, + "editingButtonsPosition": "Vị trí các nút chỉnh sửa", + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, + "editingButtonsPositionDescription": "Chọn nơi hiển thị các nút chỉnh sửa WYSIWYG nổi.", + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, + "editingButtonsDirection": "Hướng của các nút chỉnh sửa", + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, + "editingButtonsDirectionDescription": "Chọn sắp xếp các nút chỉnh sửa WYSIWYG nổi theo chiều ngang hay chiều dọc.", + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, + "horizontal": "Ngang", + "@horizontal": { + "description": "Editing button direction option." + }, + "vertical": "Dọc", + "@vertical": { + "description": "Editing button direction option." + }, + "privacy": "Quyền riêng tư", + "@privacy": { + "description": "Settings section title for privacy options." + }, + "allowRemoteImages": "Tải hình ảnh từ xa", + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, + "allowRemoteImagesDescription": "Cho phép hình ảnh trong phần xem trước và trình biên tập Markdown được tải từ các URL http và https.", + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, + "clearRemoteImagePermissions": "Xóa quyền hình ảnh từ xa", + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, + "clearRemoteImagePermissionsDescription": "Quên các không gian làm việc đã được cho phép tải hình ảnh từ xa.", + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, + "clearGitWorkspaceTrust": "Xóa các không gian làm việc Git đáng tin cậy", + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, + "clearGitWorkspaceTrustDescription": "Hỏi trước khi bật các tính năng Git cho những không gian làm việc đã từng được tin cậy.", + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, + "settingsWindowSectionTitle": "Cửa sổ", + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, + "settingsReopenWorkspaceOnStartupTitle": "Mở lại không gian làm việc trước đó khi khởi động", + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, + "settingsReopenWorkspaceOnStartupDescription": "Mở không gian làm việc và các tab từ phiên trước khi BusyMark khởi động.", + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, + "settingsConfirmCloseWithUnsavedChangesTitle": "Xác nhận trước khi đóng khi có thay đổi chưa lưu", + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, + "settingsConfirmCloseWithUnsavedChangesDescription": "Hỏi trước khi đóng BusyMark nếu tài liệu có thay đổi chưa lưu.", + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, + "closeUnsavedChangesTitle": "Thay đổi chưa lưu", + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, + "closeUnsavedChangesSingleMessage": "Tài liệu này có thay đổi chưa lưu. Lưu thay đổi trước khi đóng BusyMark?", + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Lưu thay đổi trước khi đóng BusyMark?} =1{1 tài liệu có thay đổi chưa lưu. Lưu thay đổi trước khi đóng BusyMark?} other{{count} tài liệu có thay đổi chưa lưu. Lưu thay đổi trước khi đóng BusyMark?}}", + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "closeUnsavedChangesCancel": "Hủy", + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesDiscard": "Loại bỏ", + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, + "closeUnsavedChangesSave": "Lưu", + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, + "currentFile": "tệp hiện tại", + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, + "unsavedChanges": "Thay đổi chưa lưu", + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, + "unsavedChangesMessage": "Bạn có thay đổi chưa lưu trong {fileName}. Lưu trước khi tiếp tục?", + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "unsavedChangesMultipleMessage": "{count, plural, =1{1 tài liệu có thay đổi chưa lưu. Lưu tài liệu trước khi tiếp tục?} other{{count} tài liệu có thay đổi chưa lưu. Lưu các tài liệu trước khi tiếp tục?}}", + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "fileChangedOnDisk": "Tệp đã thay đổi trên đĩa", + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, + "fileChangedOnDiskMessage": "Tệp này đã thay đổi trên đĩa kể từ khi bạn mở. Ghi đè tệp?", + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, + "untitledMarkdownFileName": "Chưa có tên.md", + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, + "unorderedList": "Danh sách không có thứ tự", + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, + "orderedList": "Danh sách có thứ tự", + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, + "taskList": "Danh sách nhiệm vụ", + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, + "toggleTaskChecked": "Đánh dấu hoặc bỏ đánh dấu nhiệm vụ", + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, + "indentListItem": "Thụt lề mục danh sách", + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, + "outdentListItem": "Bỏ thụt lề mục danh sách", + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, + "blockquote": "Trích dẫn", + "@blockquote": { + "description": "Blockquote command label." + }, + "codeBlock": "Khối mã", + "@codeBlock": { + "description": "Code block command or preview label." + }, + "codeBlockLanguage": "Ngôn ngữ khối mã", + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, + "image": "Hình ảnh", + "video": "Video", + "openVideo": "Phát video", + "pauseVideo": "Tạm dừng video", + "videoUnavailable": "Video không khả dụng", + "videoPreview": "Xem trước video", + "diagnosticWritersideVideoMissingSource": "Video thiếu thuộc tính src.", + "diagnosticWritersideVideoUnsupportedSource": "Nguồn video không được hỗ trợ: {source}", + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideVideoMissingFile": "Tệp video không tồn tại: {source}", + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideVideoMissingPreview": "Hình ảnh xem trước video không tồn tại: {preview}", + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, + "@image": { + "description": "Image command and document kind label." + }, + "inlineImage": "Hình ảnh nội tuyến", + "@inlineImage": { + "description": "Inline image command label." + }, + "table": "Bảng", + "@table": { + "description": "Table command label." + }, + "htmlBlock": "Khối HTML", + "@htmlBlock": { + "description": "HTML block command label." + }, + "htmlContentDefault": "Nội dung HTML", + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, + "shortcutHtmlBlockDescription": "Chèn hoặc chỉnh sửa khối HTML", + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, + "renderedHtml": "HTML đã kết xuất", + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, + "editHtml": "Chỉnh sửa HTML", + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, + "htmlSource": "Mã nguồn HTML", + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, + "thematicBreak": "Đường phân cách", + "@thematicBreak": { + "description": "Thematic break command label." + }, + "bold": "Đậm", + "@bold": { + "description": "Bold command label." + }, + "italic": "Nghiêng", + "@italic": { + "description": "Italic command label." + }, + "underline": "Gạch chân", + "@underline": { + "description": "Underline command label." + }, + "strikethrough": "Gạch ngang", + "@strikethrough": { + "description": "Strikethrough command label." + }, + "inlineCode": "Mã nội tuyến", + "@inlineCode": { + "description": "Inline code command label." + }, + "link": "Liên kết", + "@link": { + "description": "Link command and preview label." + }, + "hardLineBreak": "Ngắt dòng cứng", + "@hardLineBreak": { + "description": "Hard line break command label." + }, + "textStyle": "Kiểu văn bản", + "@textStyle": { + "description": "Text style menu tooltip." + }, + "paragraph": "Đoạn văn", + "@paragraph": { + "description": "Paragraph style label." + }, + "heading1": "Tiêu đề 1", + "@heading1": { + "description": "Heading 1 style label." + }, + "heading2": "Tiêu đề 2", + "@heading2": { + "description": "Heading 2 style label." + }, + "heading3": "Tiêu đề 3", + "@heading3": { + "description": "Heading 3 style label." + }, + "heading4": "Tiêu đề 4", + "@heading4": { + "description": "Heading 4 style label." + }, + "heading5": "Tiêu đề 5", + "@heading5": { + "description": "Heading 5 style label." + }, + "heading6": "Tiêu đề 6", + "@heading6": { + "description": "Heading 6 style label." + }, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "deleteTable": "Xóa bảng", + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, + "tableColumnNumber": "Cột {columnNumber}", + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "insertColumnLeft": "Chèn cột bên trái", + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, + "insertColumnRight": "Chèn cột bên phải", + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, + "deleteColumn": "Xóa cột", + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, + "tableAlignmentUnspecified": "Căn chỉnh: Chưa chỉ định", + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, + "tableAlignmentLeft": "Căn chỉnh: Trái", + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, + "tableAlignmentCenter": "Căn chỉnh: Giữa", + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, + "tableAlignmentRight": "Căn chỉnh: Phải", + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, + "tableRowNumber": "Hàng {rowNumber}", + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, + "insertRowAbove": "Chèn hàng phía trên", + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, + "insertRowBelow": "Chèn hàng phía dưới", + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, + "deleteRow": "Xóa hàng", + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, + "tableHeaderHint": "Tiêu đề", + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, + "tableCellHint": "Ô", + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, + "language": "Ngôn ngữ", + "@language": { + "description": "Code block language field label." + }, + "hideEditingButtons": "Ẩn các nút chỉnh sửa", + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, + "showEditingButtons": "Hiện các nút chỉnh sửa", + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, + "altText": "Văn bản thay thế", + "@altText": { + "description": "Image alt text field label." + }, + "editorPlaceholderText": "văn bản", + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, + "editorPlaceholderCode": "mã", + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, + "editorPlaceholderAltText": "văn bản thay thế", + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, + "describeTheImage": "Mô tả hình ảnh", + "@describeTheImage": { + "description": "Image alt text hint." + }, + "columns": "Cột", + "@columns": { + "description": "Table dialog columns field label." + }, + "rows": "Hàng", + "@rows": { + "description": "Table dialog rows field label." + }, + "tableHeaderNumber": "Tiêu đề {columnNumber}", + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "tableCellDefault": "Ô", + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, + "noImageSource": "Không có nguồn hình ảnh", + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, + "remoteImageBlocked": "Hình ảnh từ xa bị chặn", + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, + "remoteImageBlockedTooltip": "Chọn xem BusyMark có thể tải hình ảnh từ xa hay không.", + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, + "remoteImagesBlockedTitle": "Hình ảnh từ xa bị chặn", + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, + "remoteImagesBlockedMessage": "Tài liệu này tham chiếu đến hình ảnh trên Internet. Việc tải chúng có thể tiết lộ thông tin mạng cho máy chủ lưu trữ hình ảnh.", + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, + "loadRemoteImagesForWorkspace": "Tải cho không gian làm việc này", + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, + "alwaysLoadRemoteImages": "Luôn tải hình ảnh từ xa", + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, + "hideSidebar": "Ẩn bảng điều khiển thanh bên", + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, + "showSidebar": "Hiện bảng điều khiển thanh bên", + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, + "showPreview": "Hiện bản xem trước", + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, + "hidePreview": "Ẩn bản xem trước", + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, + "workspaceKindUnsavedMarkdown": "Tệp Markdown chưa lưu", + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, + "workspaceKindSingleMarkdown": "Tệp Markdown đơn", + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, + "workspaceKindMarkdownFolder": "Thư mục Markdown", + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, + "workspaceKindWritersideModule": "Mô-đun Writerside", + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, + "problems": "Vấn đề", + "@problems": { + "description": "Diagnostics dialog title." + }, + "diagnosticCount": "{count, plural, =0{Không có chẩn đoán} =1{1 chẩn đoán} other{{count} chẩn đoán}}", + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "files": "Tệp", + "@files": { + "description": "Files sidebar tab label." + }, + "toc": "Mục lục", + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, + "tocActions": "Thao tác với mục lục", + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, + "markdownUnsaved": "Markdown - chưa lưu", + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, + "workspaceDetail": "{kind} - {count, plural, =1{1 tệp} other{{count} tệp}}", + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "noFiles": "Không có tệp", + "@noFiles": { + "description": "Empty state shown when there are no files." + }, + "newFile": "Tệp mới", + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, + "noWritersideToc": "Không có mục lục Writerside", + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, + "tocSection": "Phần mục lục", + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, + "newTopic": "Chủ đề mới", + "@newTopic": { + "description": "Create new Writerside topic action label." + }, + "newChildTopic": "Chủ đề con mới", + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, + "newSiblingTopic": "Chủ đề cùng cấp mới", + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, + "renameTopicFile": "Đổi tên tệp chủ đề", + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, + "topicPlacement": "Vị trí trong mục lục", + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, + "tocRoot": "Tại gốc mục lục", + "@tocRoot": { + "description": "TOC placement option for the root level." + }, + "afterSelectedTopic": "Sau chủ đề đã chọn", + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, + "insideSelectedTopic": "Bên trong chủ đề đã chọn", + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, + "pasteAfterTopic": "Dán sau chủ đề", + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, + "pasteAsChildTopic": "Dán làm chủ đề con", + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, + "removeFromToc": "Xóa khỏi mục lục", + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, + "confirmRemoveFromTocTitle": "Xóa khỏi mục lục?", + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, + "confirmRemoveFromTocMessage": "Xóa {name} khỏi mục lục này? Tệp chủ đề sẽ được giữ lại.", + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteTopicTitle": "Xóa tệp chủ đề?", + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, + "confirmDeleteTopicMessage": "Xóa {name} và xóa tệp đó khỏi mọi mục lục? Không thể hoàn tác.", + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "safeDeleteTopicFile": "Xóa an toàn tệp chủ đề…", + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, + "removeTocElement": "Xóa phần tử mục lục", + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, + "reviewUsages": "Xem lại cách sử dụng", + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, + "deleteTopicFile": "Xóa tệp chủ đề", + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, + "removeAction": "Xóa", + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, + "topicRemovalSummary": "Xóa “{topic}” khỏi phiên bản đã chọn. Tệp chủ đề sẽ được giữ lại.", + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "safeDeleteTopicSummary": "Xóa “{topic}” và cập nhật an toàn các tham chiếu đến tệp đó trong toàn bộ dự án Writerside này.", + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "childTopicsPromoted": "{count, plural, =1{1 chủ đề con sẽ được đưa lên một cấp.} other{{count} chủ đề con sẽ được đưa lên một cấp.}}", + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "topicIsStartPageRemovalWarning": "Chủ đề này đang được dùng làm trang bắt đầu của một phiên bản. Hãy xem lại cách sử dụng và chỉ định trang bắt đầu khác trước khi tiếp tục.", + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, + "topicUsagesCount": "Cách sử dụng ({count})", + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noBreakingTopicUsages": "Không tìm thấy tham chiếu nào có thể bị hỏng.", + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, + "topicUsagesFound": "BusyMark đã tìm thấy các tham chiếu sau đến chủ đề này.", + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, + "topicUsageTocElements": "Phần tử mục lục", + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, + "topicUsageStartPages": "Trang bắt đầu", + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, + "topicUsageTopicLinks": "Liên kết chủ đề", + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, + "topicUsageIncludes": "Nội dung bao gồm", + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, + "usageCount": "{count, plural, =1{1 lượt sử dụng} other{{count} lượt sử dụng}}", + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "refactoringOptions": "Tùy chọn tái cấu trúc", + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, + "updateUsagesAutomatically": "Tự động cập nhật cách sử dụng", + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, + "updateUsagesAutomaticallyDescription": "Xóa các tham chiếu mục lục và nội dung bao gồm, đồng thời giữ nguyên văn bản liên kết.", + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, + "manualUsageUpdatesRequired": "Một số cách sử dụng cần được thay đổi thủ công trước khi thực hiện tái cấu trúc này.", + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, + "setRedirectTo": "Đặt chuyển hướng đến", + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, + "noRedirectDescription": "Không chuyển hướng trang đã xuất bản cũ.", + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, + "redirectTarget": "Đích chuyển hướng", + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, + "remainingUsagesBlockRemoval": "Xem lại và cập nhật các cách sử dụng còn lại trước khi tiếp tục hoặc bật cập nhật tự động nếu có.", + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, + "usagesOfTopic": "Cách sử dụng {topic}", + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "noUsagesFound": "Không tìm thấy cách sử dụng nào", + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, + "outsideSelectedInstance": "bên ngoài phiên bản đã chọn", + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, + "doRefactor": "Tái cấu trúc", + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, + "orphanTopicTitle": "Tệp chủ đề không còn được sử dụng", + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, + "keepTopicFile": "Giữ tệp chủ đề", + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, + "orphanTopicMessage": "“{topic}” không còn được sử dụng ở đâu trong dự án Writerside này. Xóa tệp hoặc giữ lại để dùng trong phiên bản khác.", + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "defaultNewTopicTitle": "Chủ đề mới", + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, + "topicTitle": "Tiêu đề chủ đề", + "@topicTitle": { + "description": "Create topic dialog field label." + }, + "fileName": "Tên tệp", + "@fileName": { + "description": "Create topic dialog field label." + }, + "topicTitleRequired": "Tiêu đề chủ đề là bắt buộc.", + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, + "fileNameRequired": "Tên tệp là bắt buộc.", + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, + "rename": "Đổi tên", + "@rename": { + "description": "Rename command label." + }, + "confirmDeleteFileTitle": "Xóa tệp?", + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, + "confirmDeleteFolderTitle": "Xóa thư mục?", + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, + "confirmDeleteFileMessage": "Xóa {name}? Không thể hoàn tác.", + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteFolderMessage": "Xóa {name} và tất cả tệp bên trong? Không thể hoàn tác.", + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "useSingleSafeFileName": "Sử dụng một tên tệp an toàn duy nhất.", + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, + "useExpectedExtension": "Sử dụng phần mở rộng {extension} cho định dạng đã chọn.", + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "useIdentifierCharacters": "Sử dụng chữ cái, chữ số, dấu gạch dưới hoặc dấu gạch nối trước phần mở rộng.", + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, + "topicIdAlreadyExists": "ID chủ đề đã tồn tại.", + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, + "createWritersideTopicFailed": "Không thể tạo chủ đề Writerside.", + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, + "noOutline": "Không có đề cương", + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, + "expandKind": "Mở rộng {kind}", + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "collapseKind": "Thu gọn {kind}", + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "foldKindSection": "phần", + "@foldKindSection": { + "description": "Fold kind label for a section." + }, + "foldKindList": "danh sách", + "@foldKindList": { + "description": "Fold kind label for a list." + }, + "foldKindQuote": "trích dẫn", + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, + "foldKindTag": "thẻ", + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, + "sourceSearchPreviousMatch": "Kết quả khớp trước", + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, + "sourceSearchNextMatch": "Kết quả khớp tiếp theo", + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, + "sourceSearchCaseSensitive": "Phân biệt chữ hoa, chữ thường", + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, + "sourceSearchWholeWord": "Toàn bộ từ", + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, + "sourceSearchRegex": "Biểu thức chính quy", + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, + "sourceSearchReplacement": "Thay thế bằng", + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "Thay thế kết quả hiện tại", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, + "sourceSearchReplaceAndFindNext": "Thay thế và tìm tiếp", + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, + "sourceSearchReplaceAll": "Thay thế tất cả", + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, + "workspaceReplace": "Thay thế trong không gian làm việc", + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, + "reviewReplacements": "Xem lại các thay thế", + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, + "applyReplacements": "Áp dụng các thay thế", + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, + "skippedFiles": "Tệp bị bỏ qua", + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, + "workspaceReplaceDirtyBuffer": "Nội dung trình biên tập chưa lưu", + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, + "workspaceReplaceDiskContent": "Nội dung đã lưu trên đĩa", + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, + "selectFileMatches": "Chọn tất cả {count} kết quả khớp", + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceReplaceApplied": "Đã thay thế {matches} kết quả khớp trong {files} tệp; bỏ qua {skipped}.", + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Có ký tự xuống dòng ở cuối", + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Không có ký tự xuống dòng ở cuối", + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, + "normalizeLineEndings": "Chuẩn hóa kết thúc dòng", + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, + "mixedLineEndingsSavePrompt": "Tài liệu này chứa các kiểu kết thúc dòng khác nhau. Hãy chọn một định dạng.", + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, + "workspaceReplaceMixedLineEndings": "{fileName} sử dụng các kiểu kết thúc dòng khác nhau. Hãy chọn định dạng sẽ dùng trước khi thay thế.", + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "workspaceReplaceIssueOversized": "Đã bỏ qua một tệp quá lớn.", + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, + "workspaceReplaceIssueUnreadable": "Đã bỏ qua một tệp không thể đọc.", + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, + "workspaceReplaceIssueInvalidUtf8": "Đã bỏ qua một tệp không phải UTF-8 hợp lệ.", + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, + "workspaceReplaceIssueTruncated": "Bản xem trước thay thế đã bị cắt bớt.", + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, + "workspaceReplaceIssueFileChanged": "Đã bỏ qua một tệp đã thay đổi sau khi xem trước.", + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, + "workspaceReplaceIssueBufferChanged": "Đã bỏ qua một bộ đệm trình biên tập đã thay đổi sau khi xem trước.", + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, + "workspaceReplaceIssueNormalizationRequired": "Chọn chuẩn hóa LF hoặc CRLF trước khi thay thế.", + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, + "workspaceReplaceIssuePartialConflict": "Đã dừng khôi phục vì tệp bị thay đổi đồng thời. Một số thay thế có thể vẫn còn; nội dung bị di dời đã được giữ lại tại đường dẫn bên dưới.", + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, + "workspaceReplaceIssueApplyFailed": "Không thể ghi nhận thay thế đã xem lại; không có tệp nào bị thay đổi.", + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, + "externalChangesTitle": "Thay đổi bên ngoài — {fileName}", + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "externalFileDeleted": "Tệp này đã bị xóa trên đĩa.", + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, + "externalFileChanged": "Tệp này đã thay đổi trên đĩa trong khi bạn có các chỉnh sửa chưa lưu.", + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "Đã khôi phục nội dung chưa lưu cho {fileName}. Hãy kiểm tra, sau đó lưu, lưu thành hoặc loại bỏ nội dung đó.", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "compare": "So sánh", + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, + "reloadFromDisk": "Tải lại từ đĩa", + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, + "keepMine": "Giữ phiên bản của tôi", + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, + "saveAs": "Lưu thành", + "@saveAs": { + "description": "Action that saves the current document to another path." + }, + "sourceSearchInvalidRegex": "Biểu thức chính quy không hợp lệ", + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, + "sourceLargeFileFeaturesPaused": "Tệp lớn: đã tạm dừng tô sáng và thu gọn", + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, + "nothingToRead": "Không có nội dung để đọc", + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, + "admonition": "Khối lưu ý", + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, + "quote": "Trích dẫn", + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, + "note": "Ghi chú", + "@note": { + "description": "Preview label for a note admonition." + }, + "tip": "Mẹo", + "@tip": { + "description": "Preview label for a tip admonition." + }, + "warning": "Cảnh báo", + "@warning": { + "description": "Preview label for a warning admonition." + }, + "tabs": "Tab", + "@tabs": { + "description": "Preview label for a tabs block." + }, + "tab": "Tab", + "@tab": { + "description": "Preview label for a tab block." + }, + "procedure": "Quy trình", + "@procedure": { + "description": "Preview label for a procedure block." + }, + "step": "Bước", + "@step": { + "description": "Preview label for a procedure step." + }, + "topic": "Chủ đề", + "@topic": { + "description": "Preview label for a topic element." + }, + "chapter": "Chương", + "@chapter": { + "description": "Preview label for a chapter element." + }, + "couldNotOpenTarget": "Không thể mở {target}", + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, + "linkTargetNotFound": "Không tìm thấy đích liên kết: {targetPath}", + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "cannotOpenFileTypeInEditor": "Không thể mở loại tệp này trong trình biên tập", + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, + "anchorNotFound": "Không tìm thấy neo: {anchor}", + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "noProblemsFound": "Không tìm thấy vấn đề", + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, + "noResults": "Không có kết quả", + "@noResults": { + "description": "Search empty state." + }, + "searchResultLine": "{relativePath} - Dòng {lineNumber}", + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, + "untitledResult": "Kết quả chưa có tên", + "@untitledResult": { + "description": "Fallback search result title." + }, + "documentKindMarkdownFile": "Tệp Markdown", + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, + "documentKindWritersideMarkdownTopic": "Chủ đề Markdown Writerside", + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideXmlTopic": "Chủ đề XML Writerside", + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideTree": "Cây Writerside", + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, + "documentKindConfigurationFile": "Tệp cấu hình", + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, + "documentKindVariablesFile": "Tệp biến", + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, + "documentKindCategoriesFile": "Tệp danh mục", + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, + "documentKindResourceFile": "Tệp tài nguyên", + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, + "workspaceErrorOpenFailed": "Mở không thành công: {error}", + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideProjectFailed": "Không thể tạo dự án Writerside: {error}", + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideTopicFailed": "Không thể tạo chủ đề Writerside: {error}", + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCouldNotOpenFile": "Không thể mở tệp: {error}", + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorChooseWhereToSaveMarkdown": "Chọn nơi lưu tệp Markdown này.", + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, + "workspaceErrorSaveBlockedFileChangedOnDisk": "Đã chặn lưu: tệp đã thay đổi trên đĩa.", + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, + "workspaceErrorSaveFailed": "Lưu không thành công: {error}", + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorFileOperationFailed": "Thao tác với tệp không thành công: {error}", + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorValidationFailed": "Kiểm tra không thành công: {error}", + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceRecoveryRestored": "{count, plural, =1{Đã khôi phục 1 tài liệu chưa lưu. Hãy xem lại trước khi lưu hoặc loại bỏ.} other{Đã khôi phục {count} tài liệu chưa lưu. Hãy xem lại từng tài liệu trước khi lưu hoặc loại bỏ.}}", + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceRecoveryDamaged": "{count, plural, =1{Không thể khôi phục một bản ghi khôi phục bị hỏng. Tệp khôi phục gốc đã được giữ lại để kiểm tra.} other{Không thể khôi phục {count} bản ghi khôi phục bị hỏng. Các bản ghi khôi phục hợp lệ vẫn còn khả dụng.}}", + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "errorPathDoesNotExist": "Đường dẫn không tồn tại: {path}", + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetDirectoryNotEmpty": "Thư mục đích đã tồn tại và không trống: {path}", + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetPathNotDirectory": "Đường dẫn đích đã tồn tại nhưng không phải là thư mục: {path}", + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorGeneratedFileAlreadyExists": "Tệp được tạo đã tồn tại: {path}", + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorParentDirectoryRequired": "Cần có thư mục cha.", + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, + "errorParentDirectoryMissing": "Thư mục cha không tồn tại: {path}", + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorDirectoryMissing": "Thư mục không tồn tại: {path}", + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorPathAlreadyExists": "Đường dẫn đã tồn tại: {path}", + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorFileNameRequired": "Tên tệp là bắt buộc.", + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, + "errorFileNameUnsafe": "Tên tệp phải là một phần đường dẫn an toàn duy nhất.", + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, + "errorFileOperationInvalidTarget": "Không thể di chuyển thư mục vào chính nó.", + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, + "errorFileOperationOutsideRoot": "Thao tác với tệp phải nằm trong không gian làm việc.", + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, + "errorFileOperationRoot": "Không thể thay đổi thư mục gốc của không gian làm việc từ cây tệp.", + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, + "errorProjectNameRequired": "Tên dự án là bắt buộc.", + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, + "errorDirectoryNameRequired": "Tên thư mục là bắt buộc.", + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, + "errorDirectoryNameUnsafe": "Tên thư mục phải là một phần đường dẫn an toàn duy nhất.", + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, + "errorInstanceIdInvalid": "ID phiên bản phải bắt đầu bằng chữ thường và chỉ gồm chữ thường, chữ số, dấu gạch dưới và dấu gạch nối.", + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, + "errorTopicFileInvalid": "Tên tệp chủ đề phải là tên tệp Markdown không có dấu phân cách đường dẫn.", + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, + "errorTopicTitleRequired": "Tiêu đề chủ đề là bắt buộc.", + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, + "errorWritersideModuleRootMissing": "Gốc mô-đun Writerside không tồn tại: {path}", + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideModuleNotOpen": "Phải mở một mô-đun Writerside để tạo chủ đề.", + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, + "errorWritersideInstanceTreeMissing": "Mô-đun Writerside không có cây phiên bản.", + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, + "errorWritersideTreeFileMissing": "Tệp cây Writerside không tồn tại: {path}", + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTopicIdAlreadyExists": "ID chủ đề \"{topicId}\" đã tồn tại trong mô-đun trợ giúp này.", + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, + "errorTopicFileAlreadyExists": "Tệp chủ đề đã tồn tại: {path}", + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorReferenceTopicMissing": "Chủ đề tham chiếu không có trong cây đã chọn: {topic}", + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideTocNodeMissing": "Mục nhập mục lục đã chọn không còn tồn tại.", + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, + "errorWritersideTocInvalidMove": "Không thể di chuyển mục nhập mục lục vào chính nó hoặc một mục con của nó.", + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, + "errorWritersideStartTopicDelete": "Không thể xóa chủ đề bắt đầu {topic}. Hãy chọn một trang bắt đầu khác trước.", + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideSafeDeleteRequired": "Sử dụng Xóa an toàn cho các tệp chủ đề Writerside.", + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, + "errorWritersideTopicUsageScanFailed": "Không thể hoàn tất quá trình quét cách sử dụng chủ đề. Không có tệp nào bị thay đổi.", + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, + "errorWritersideTopicUsagesRemain": "Một số cách sử dụng chủ đề vẫn cần được xử lý. Hãy xem lại trước khi tiếp tục.", + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, + "errorWritersideRedirectInvalid": "Đích chuyển hướng đã chọn không còn hợp lệ. Hãy chọn lại.", + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, + "errorWritersideRollbackFailed": "Không thể khôi phục hoàn toàn việc xóa chủ đề. Hãy xem lại các đường dẫn này trước khi tiếp tục: {paths}", + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "errorTopicsRootUnsafe": "Gốc chủ đề phải là một thư mục tương đối an toàn.", + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, + "errorTopicFileNameUnsafe": "Tên tệp chủ đề phải là một phần đường dẫn an toàn duy nhất.", + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, + "errorTopicFileExtensionMismatch": "Phần mở rộng tệp chủ đề phải khớp với định dạng đã chọn ({extension}).", + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "errorTopicFileNameInvalid": "Tên tệp chủ đề chỉ được chứa chữ cái, chữ số, dấu gạch dưới và dấu gạch nối.", + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, + "errorUnknown": "Lỗi không xác định: {code}", + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileStatFailed": "Không thể đọc siêu dữ liệu tệp: {error}", + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceScanSkipped": "Đã phát hiện không gian làm việc lớn. Một số tệp đã được bỏ qua để ứng dụng vẫn phản hồi nhanh.", + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, + "diagnosticWorkspaceScanInspectFailed": "Không thể kiểm tra mục trong không gian làm việc: {error}", + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileTooLarge": "Tệp vượt quá giới hạn phân tích tự động beta.", + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, + "diagnosticWorkspaceFileReadFailed": "Không thể đọc tệp Markdown: {error}", + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticMarkdownAttributeMalformed": "Khối thuộc tính tiêu đề Writerside không đúng định dạng.", + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, + "diagnosticMarkdownHeadingDuplicateId": "ID tiêu đề bị trùng \"{id}\".", + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicH1ConvertedToChapter": "Các tiêu đề H1 cấp cao nhất bổ sung được xử lý như các chương.", + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "Chủ đề Markdown Writerside không có H1 hoặc tiêu đề trong front matter.", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, + "diagnosticWritersideXmlTopicMissingTitle": "Chủ đề XML thiếu tiêu đề.", + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, + "diagnosticWritersideTopicFileMissingTitle": "Chủ đề \"{fileName}\" thiếu tiêu đề.", + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "diagnosticMarkdownFrontMatterMalformed": "Front matter chưa được đóng.", + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, + "diagnosticMarkdownRawHtmlUnsafe": "Phần tử HTML không an toàn.", + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, + "diagnosticMarkdownLinkUnresolvedTarget": "Đích liên kết không tồn tại: {targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "diagnosticMarkdownLinkUnresolvedAnchor": "Neo \"{anchor}\" không tồn tại.", + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingAlt": "Hình ảnh \"{destination}\" thiếu văn bản thay thế.", + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingFile": "Hình ảnh không tồn tại: {destination}", + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticInvalidXml": "XML không hợp lệ: {message}", + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigInvalidRoot": "Gốc writerside.cfg phải là .", + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, + "diagnosticWritersideConfigMissingSnippetsSrc": "Khai báo snippets thiếu src.", + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "Khai báo instance-groups thiếu src.", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, + "diagnosticWritersideConfigInvalidKeymapsMode": "Chế độ keymaps không được hỗ trợ: {mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceSrc": "Khai báo instance thiếu src.", + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg không đăng ký phiên bản nào.", + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, + "diagnosticWritersideTreeInvalidRoot": "Gốc .tree phải là .", + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, + "diagnosticWritersideTreeMissingId": "Hồ sơ phiên bản thiếu id.", + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, + "diagnosticWritersideTreeIdMismatch": "Tên gốc của tệp cây không khớp với ID phiên bản \"{id}\".", + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "Phiên bản không phải thư viện thiếu start-page.", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, + "diagnosticWritersideStartPageMissing": "Trang bắt đầu \"{startPage}\" không tồn tại.", + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeDuplicateTopic": "Chủ đề \"{topic}\" xuất hiện nhiều hơn một lần trong mục lục của phiên bản này.", + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableMalformedDeclaration": "Khai báo biến phải có tên và giá trị.", + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, + "diagnosticWritersideVariableDuplicateName": "Biến \"{name}\" được khai báo nhiều hơn một lần.", + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryMissingId": "Danh mục thiếu id.", + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, + "diagnosticWritersideCategoryDuplicateId": "Danh mục \"{id}\" được khai báo nhiều hơn một lần.", + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryDuplicateOrder": "Thứ tự danh mục \"{order}\" được khai báo nhiều hơn một lần.", + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicInvalidRoot": "Gốc .topic phải là .", + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, + "diagnosticWritersideTopicMissingRootId": "Chủ đề XML thiếu id ở gốc.", + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, + "diagnosticWritersideTopicRootIdMismatch": "ID gốc của chủ đề XML \"{id}\" phải khớp với tên tệp \"{expectedId}\".", + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateElementId": "ID phần tử \"{elementId}\" xuất hiện nhiều hơn một lần.", + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAnchorMissingHref": " thiếu href.", + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, + "diagnosticWritersideConfigMissing": "Chế độ Writerside yêu cầu writerside.cfg.", + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "Thư mục cấu hình build đã định không tồn tại: {relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "Thư mục đặc tả API đã định không tồn tại: {relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingSnippetsDirectory": "Thư mục snippets đã định không tồn tại: {relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingVarsFile": "Tệp biến đã định không tồn tại: {relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingCategoriesFile": "Tệp danh mục đã định không tồn tại: {relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "Tệp nhóm phiên bản đã định không tồn tại: {relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceTree": "Cây phiên bản đã đăng ký \"{source}\" không tồn tại.", + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicReadFailed": "Không thể đọc tệp chủ đề: {error}", + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "Thư mục chủ đề mặc định không tồn tại: {relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicsDirectoryMissing": "Thư mục chủ đề đã định không tồn tại: {relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideImagesDirectoryMissing": "Thư mục hình ảnh đã định không tồn tại: {relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateId": "ID phần tử \"{id}\" xuất hiện nhiều hơn một lần.", + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingTopic": "Mục lục tham chiếu đến chủ đề còn thiếu \"{topic}\".", + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeInvalidHref": "href bên ngoài \"{href}\" không hợp lệ.", + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableUnresolved": "Biến \"%{name}%\" chưa được khai báo.", + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicLinkUnresolved": "Liên kết chủ đề \"{destination}\" không thể phân giải.", + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticWritersideAnchorUnresolved": "Neo \"{anchor}\" không tồn tại trong \"{targetName}\".", + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": " thiếu from.", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, + "diagnosticWritersideIncludeSourceMissing": "Nguồn include \"{from}\" không tồn tại.", + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeElementMissing": "Phần tử include \"{elementId}\" không tồn tại trong \"{from}\".", + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "Danh mục seealso \"{ref}\" chưa được khai báo.", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAmbiguousReference": "Tham chiếu chủ đề \"{reference}\" không rõ ràng.", + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, + "diagnosticUnknown": "Chẩn đoán không xác định: {code}", + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "close": "Đóng", + "@close": { + "description": "Close action label." + }, + "git": "Git", + "@git": { + "description": "Git sidebar tab label." + }, + "gitDiff": "Khác biệt Git", + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, + "gitShowDiff": "Hiện khác biệt", + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, + "gitDiffHunkRange": "cũ {oldRange} → mới {newRange}", + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, + "gitDiffNoLines": "không có dòng", + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, + "gitUnavailableTitle": "Git không khả dụng", + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, + "gitUnavailableMessage": "{reason, select, other{Cài đặt Git hoặc cấu hình BusyMark để sử dụng một tệp thực thi Git khả dụng. {reason}}}", + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, + "gitTrustRequiredTitle": "Tin cậy không gian làm việc này cho Git?", + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, + "gitTrustRequiredMessage": "Kho Git có thể chạy chương trình thông qua hook, bộ lọc và các cấu hình khác. Hãy tin cậy không gian làm việc này trước khi BusyMark đọc dữ liệu kho hoặc bật các thao tác Git.", + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, + "gitTrustWorkspace": "Tin cậy không gian làm việc", + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, + "gitNotRepositoryTitle": "Không phải kho Git", + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, + "gitNotRepositoryMessage": "Không gian làm việc này không nằm trong kho Git.", + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, + "gitInitializeRepository": "Khởi tạo kho", + "@gitInitializeRepository": { + "description": "Action label for git init." + }, + "gitDetachedHead": "HEAD tách rời", + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, + "gitDetachedHeadAt": "Đang tách rời tại {commit}", + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, + "gitNoUpstream": "Không có nhánh upstream", + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, + "gitAheadCount": "{count, plural, =1{1 commit chưa đẩy} other{{count} commit chưa đẩy}}", + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitBehindCount": "{count, plural, =1{1 commit cần kéo về} other{{count} commit cần kéo về}}", + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "Sạch", + "@gitClean": { + "description": "Git clean state label." + }, + "gitConflicts": "Xung đột", + "@gitConflicts": { + "description": "Git conflicts group label." + }, + "gitChanges": "Thay đổi", + "@gitChanges": { + "description": "Git changes view label." + }, + "gitStaged": "Đã đưa vào stage", + "@gitStaged": { + "description": "Git staged changes group label." + }, + "gitUnstaged": "Chưa đưa vào stage", + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, + "gitHistory": "Lịch sử", + "@gitHistory": { + "description": "Git history view label." + }, + "gitBranches": "Nhánh", + "@gitBranches": { + "description": "Git branch menu label." + }, + "gitActions": "Thao tác Git", + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, + "gitPull": "Pull", + "@gitPull": { + "description": "Git pull action label." + }, + "gitFetch": "Fetch", + "@gitFetch": { + "description": "Git fetch action label." + }, + "gitPush": "Push", + "@gitPush": { + "description": "Git push action label." + }, + "gitCommit": "Commit", + "@gitCommit": { + "description": "Git commit action label." + }, + "gitSelectForCommit": "Đưa tệp vào stage", + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, + "gitRemoveFromCommit": "Bỏ tệp khỏi stage", + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, + "gitDiscard": "Hoàn nguyên", + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, + "gitOpenFile": "Mở tệp", + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, + "gitMarkResolved": "Đánh dấu đã giải quyết", + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, + "gitUntracked": "Chưa được theo dõi", + "@gitUntracked": { + "description": "Git untracked files group label." + }, + "gitCommitMessage": "Thông điệp commit", + "@gitCommitMessage": { + "description": "Commit message field label." + }, + "gitCommitSelectedFiles": "Tệp đã chọn", + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, + "gitCommitNoSelectedFiles": "Đưa ít nhất một tệp vào stage trước khi commit.", + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, + "gitStagedFileCount": "{count, plural, =1{1 tệp đã đưa vào stage} other{{count} tệp đã đưa vào stage}}", + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitOutsideWorkspace": "Bên ngoài không gian làm việc", + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, + "gitCommitMessageRequired": "Nhập thông điệp commit.", + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, + "gitCreateBranch": "Tạo nhánh", + "@gitCreateBranch": { + "description": "Git create branch action label." + }, + "gitNewBranch": "Nhánh mới", + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, + "gitBranchName": "Tên nhánh", + "@gitBranchName": { + "description": "Branch name field label." + }, + "gitSwitchBranch": "Chuyển nhánh", + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, + "gitNoChanges": "Không có thay đổi", + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, + "gitNoHistory": "Không có lịch sử", + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, + "gitNoBranches": "Không có nhánh", + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, + "gitNoDiff": "Không có khác biệt để hiển thị", + "@gitNoDiff": { + "description": "Git diff empty state." + }, + "gitBinaryFile": "Tệp nhị phân. BusyMark không kết xuất bản vá nhị phân.", + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, + "gitBinaryFileInfo": "Tệp nhị phân ({size} byte). BusyMark không kết xuất bản vá nhị phân.", + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, + "gitUnsavedChangesBanner": "Các thay đổi trong trình biên tập chưa lưu sẽ không được đưa vào cho đến khi lưu.", + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, + "gitConfirmDiscardTitle": "Loại bỏ các thay đổi Git?", + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, + "gitConfirmDiscardTracked": "{count, plural, =1{Tất cả thay đổi đã đưa và chưa đưa vào stage trong tệp được theo dõi đã chọn sẽ được khôi phục về HEAD.} other{Tất cả thay đổi đã đưa và chưa đưa vào stage trong các tệp được theo dõi đã chọn sẽ được khôi phục về HEAD.}}", + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmDiscardUntracked": "{count, plural, =1{Tệp chưa được theo dõi đã chọn sẽ bị xóa.} other{Các tệp chưa được theo dõi đã chọn sẽ bị xóa.}}", + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmDiscardMixed": "{count, plural, =1{Tệp đã chọn sẽ được khôi phục hoặc xóa tùy theo trạng thái Git.} other{Các tệp đã chọn sẽ được khôi phục hoặc xóa tùy theo trạng thái Git.}}", + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmSwitchBranchTitle": "Chuyển sang {branch}?", + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitConfirmSwitchBranchMessage": "BusyMark sẽ tải lại không gian làm việc từ đĩa sau khi Git chuyển nhánh.", + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, + "gitConfirmPushSetUpstreamTitle": "Đặt nhánh upstream?", + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, + "gitConfirmPushSetUpstreamMessage": "Nhánh này không có upstream. BusyMark có thể push {branch} và đặt upstream cho nhánh đó khi chỉ có một remote được cấu hình.", + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitProjectHistory": "Lịch sử dự án", + "@gitProjectHistory": { + "description": "Project history action label." + }, + "gitFileHistory": "Lịch sử tệp", + "@gitFileHistory": { + "description": "Current file history action label." + }, + "gitFileHistoryRequiresOpenFile": "Lịch sử tệp yêu cầu một tệp Markdown đang mở.", + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, + "gitLoadMore": "Tải thêm", + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, + "gitChangesInCommit": "Thay đổi trong commit này", + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, + "gitCompareWithCurrent": "So sánh với hiện tại", + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, + "gitRestoreVersion": "Khôi phục phiên bản này", + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, + "gitConfirmRestoreTitle": "Khôi phục phiên bản tệp này?", + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, + "gitConfirmRestoreMessage": "BusyMark sẽ thay thế tệp trong cây làm việc hiện tại bằng phiên bản đã commit được chọn. Tệp đã khôi phục sẽ vẫn ở trạng thái chưa đưa vào stage.", + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, + "gitCommitActions": "Thao tác commit", + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, + "gitResetCurrentBranchToHere": "Đặt lại nhánh hiện tại về đây…", + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, + "gitResetCurrentBranchTitle": "Đặt lại {branch} về {commit}?", + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitResetCurrentBranchMessage": "Thao tác này sẽ đưa nhánh {branch} về commit {commit}. Chọn cách Git cập nhật index và cây làm việc.", + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitReset": "Đặt lại", + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, + "gitResetModeSoft": "Mềm", + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, + "gitResetModeSoftDescription": "Chỉ di chuyển nhánh. Giữ nguyên index và cây làm việc; các khác biệt so với commit đã chọn vẫn được đưa vào stage.", + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, + "gitResetModeMixed": "Hỗn hợp", + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, + "gitResetModeMixedDescription": "Di chuyển nhánh và đặt lại index. Giữ nguyên cây làm việc, để lại các khác biệt ở trạng thái chưa đưa vào stage.", + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, + "gitResetModeHard": "Cứng", + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, + "gitResetModeHardDescription": "Di chuyển nhánh và đặt lại index cùng cây làm việc. Các thay đổi được theo dõi sẽ bị loại bỏ; các tệp chưa được theo dõi gây cản trở có thể bị xóa.", + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, + "gitResetModeKeep": "Giữ", + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, + "gitResetModeKeepDescription": "Di chuyển nhánh và đặt lại các tệp được theo dõi nhưng giữ lại các thay đổi cục bộ. Git sẽ hủy nếu các thay đổi đó xung đột với thao tác đặt lại.", + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, + "fileActions": "Thao tác với tệp", + "@fileActions": { + "description": "Tooltip for a file action menu." + }, + "actions": "Thao tác", + "@actions": { + "description": "Tooltip for a general action menu." + }, + "gitStatusAdded": "Đã thêm", + "@gitStatusAdded": { + "description": "Git file status label." + }, + "gitStatusDeleted": "Đã xóa", + "@gitStatusDeleted": { + "description": "Git file status label." + }, + "gitStatusRenamed": "Đã đổi tên", + "@gitStatusRenamed": { + "description": "Git file status label." + }, + "gitStatusCopied": "Đã sao chép", + "@gitStatusCopied": { + "description": "Git file status label." + }, + "gitStatusUntracked": "Chưa được theo dõi", + "@gitStatusUntracked": { + "description": "Git file status label." + }, + "gitStatusConflicted": "Có xung đột", + "@gitStatusConflicted": { + "description": "Git file status label." + }, + "gitStatusIgnored": "Bị bỏ qua", + "@gitStatusIgnored": { + "description": "Git file status label." + }, + "gitStatusTypeChanged": "Đã thay đổi loại", + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, + "gitStatusModified": "Đã sửa đổi", + "@gitStatusModified": { + "description": "Git file status label." + }, + "gitStatusUnknown": "Không xác định", + "@gitStatusUnknown": { + "description": "Git file status label." + }, + "gitErrorUnavailable": "Git không khả dụng.", + "@gitErrorUnavailable": { + "description": "Git error message." + }, + "gitErrorNotRepository": "Không gian làm việc này không phải là kho Git.", + "@gitErrorNotRepository": { + "description": "Git error message." + }, + "gitErrorUnsafePath": "BusyMark đã chặn một đường dẫn Git không an toàn.", + "@gitErrorUnsafePath": { + "description": "Git error message." + }, + "gitErrorInvalidBranchName": "Nhập tên nhánh hợp lệ.", + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, + "gitErrorNoRemote": "Chưa cấu hình remote Git nào.", + "@gitErrorNoRemote": { + "description": "Git error message." + }, + "gitErrorNoUpstream": "Chưa cấu hình nhánh upstream.", + "@gitErrorNoUpstream": { + "description": "Git error message." + }, + "gitErrorMultipleRemotes": "Có nhiều remote được cấu hình. Hãy chọn upstream bên ngoài phiên bản BusyMark này.", + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, + "gitErrorDirtyWorkspace": "Lưu hoặc loại bỏ các thay đổi trong trình biên tập BusyMark trước khi chuyển nhánh.", + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, + "gitErrorResetDirtyWorkspace": "Lưu hoặc loại bỏ các thay đổi trong trình biên tập BusyMark trước khi đặt lại nhánh hiện tại.", + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, + "gitErrorRestoreStagedFile": "Bỏ tệp khỏi stage trước khi khôi phục phiên bản trong lịch sử.", + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, + "gitErrorResetDetachedHead": "Chuyển sang một nhánh trước khi đặt lại.", + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, + "gitErrorDiverged": "Nhánh đã phân kỳ. Hãy giải quyết thao tác merge hoặc rebase bên ngoài phiên bản BusyMark này.", + "@gitErrorDiverged": { + "description": "Git error message." + }, + "gitErrorAuthorIdentity": "Git cần tên và địa chỉ email tác giả trước khi có thể commit.", + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, + "gitAuthorIdentityTitle": "Danh tính tác giả Git", + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, + "gitAuthorIdentityMessage": "Nhập danh tính Git sẽ ghi vào các commit. BusyMark sẽ lưu danh tính đó và thử lại commit này.", + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, + "gitAuthorName": "Tên", + "@gitAuthorName": { + "description": "Git commit author name field label." + }, + "gitAuthorEmail": "Email", + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, + "gitAuthorIdentityGlobal": "Dùng cho tất cả kho", + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, + "gitAuthorIdentityGlobalDescription": "Khi được cài đặt dưới dạng Snap, tùy chọn này áp dụng cho các kho được mở trong BusyMark.", + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, + "gitSaveIdentityAndCommit": "Lưu và commit", + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, + "gitErrorAuthentication": "Xác thực Git không thành công.", + "@gitErrorAuthentication": { + "description": "Git error message." + }, + "gitErrorNetwork": "Thao tác mạng Git không thành công.", + "@gitErrorNetwork": { + "description": "Git error message." + }, + "gitErrorConflict": "Git báo cáo các xung đột chưa được giải quyết.", + "@gitErrorConflict": { + "description": "Git error message." + }, + "gitErrorCommandFailed": "Lệnh Git không thành công.", + "@gitErrorCommandFailed": { + "description": "Git error message." + }, + "markdownAndHtml": "Markdown và HTML", + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, + "markdownHtmlMarkdownBlocks": "Khối Markdown", + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, + "markdownHtmlMarkdownBlocksDescription": "Các cấu trúc khối được hỗ trợ trong mã nguồn và bản xem trước Markdown.", + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, + "markdownHtmlInlineFormatting": "Định dạng Markdown nội tuyến", + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, + "markdownHtmlInlineFormattingDescription": "Định dạng có thể xuất hiện trong đoạn văn, mục danh sách và ô bảng.", + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, + "markdownHtmlRawHtmlBlocks": "Khối HTML thô", + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlBlocksDescription": "Các thẻ HTML cấp khối an toàn được kết xuất thông qua các tiện ích xem trước của BusyMark.", + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlInline": "Thẻ HTML nội tuyến thô", + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, + "markdownHtmlRawHtmlInlineDescription": "Các thẻ HTML nội tuyến an toàn được kết xuất mà không hiển thị thẻ theo nghĩa đen.", + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, + "markdownHtmlSafety": "Quy tắc an toàn", + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, + "markdownHtmlSafetyDescription": "HTML thô được phân tích cú pháp và làm sạch trước khi kết xuất bản xem trước.", + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, + "markdownHtmlHeadings": "Tiêu đề", + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, + "markdownHtmlParagraphs": "Đoạn văn", + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, + "markdownHtmlLists": "Danh sách", + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, + "markdownHtmlHtmlContainers": "Vùng chứa", + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, + "markdownHtmlHtmlTextBlocks": "Khối văn bản", + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, + "markdownHtmlHtmlFigures": "Hình và hình ảnh", + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, + "markdownHtmlHtmlPreformatted": "Mã định dạng sẵn", + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, + "markdownHtmlHtmlDisclosure": "Khối mở rộng", + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, + "markdownHtmlHtmlDescriptionLists": "Danh sách mô tả", + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, + "markdownHtmlHtmlFormattingTags": "Thẻ định dạng", + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, + "markdownHtmlHtmlInlineCodeTags": "Thẻ mã nội tuyến", + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, + "markdownHtmlHtmlNeutralInlineTags": "Thẻ văn bản ngữ nghĩa", + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, + "markdownHtmlSanitizedPreview": "Bản xem trước đã làm sạch", + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, + "markdownHtmlSanitizedPreviewDescription": "HTML được cho phép được chuyển thành các khối xem trước của BusyMark, không được kết xuất trong trình duyệt.", + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, + "markdownHtmlSourcePreserved": "Giữ nguyên mã nguồn", + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, + "markdownHtmlSourcePreservedDescription": "HTML thô chưa chỉnh sửa được lưu lại chính xác như văn bản mã nguồn.", + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, + "markdownHtmlMarkdownInsideHtml": "Markdown bên trong HTML", + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, + "markdownHtmlMarkdownInsideHtmlDescription": "Các dấu Markdown bên trong HTML thô được kết xuất như văn bản theo nghĩa đen.", + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, + "markdownHtmlBlockedContent": "Nội dung hoạt động bị chặn", + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, + "markdownHtmlBlockedContentDescription": "Script, style, frame, form, SVG, MathML, sự kiện và các thuộc tính không an toàn bị chặn.", + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, + "markdownHtmlSafeUrls": "Chỉ URL an toàn", + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, + "markdownHtmlSafeUrlsDescription": "Liên kết cho phép URL http, https, mailto, tel, tương đối và fragment; các scheme không an toàn bị chặn.", + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, + "exportAsPdf": "Xuất dưới dạng PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, + "pdfExportDescription": "Chọn bố cục trang cho tệp PDF hoàn chỉnh, được trình bày chuyên nghiệp.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Hình ảnh từ xa không được tải xuống trong quá trình xuất. Hình ảnh cục bộ sẽ được đưa vào khi có thể.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Cỡ trang", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Hướng trang", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Dọc", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Ngang", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Lề", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Hẹp", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Bình thường", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Rộng", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Bao gồm số trang", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Xuất", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "Đang xuất PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "Tài liệu PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "Đã xuất {fileName}.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "Đã xuất {fileName} với {count} cảnh báo.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "Thiếu thành phần xuất PDF. Hãy cài đặt lại BusyMark và thử lại.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "Quá trình xuất PDF mất quá nhiều thời gian và đã bị dừng.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark không thể xuất tài liệu này dưới dạng PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, + "visualizationRendering": "Đang kết xuất…", + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, + "visualizationStale": "Đang hiển thị bản kết xuất hợp lệ gần nhất", + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, + "visualizationShowSource": "Hiện mã nguồn", + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, + "visualizationShowRender": "Hiện bản kết xuất", + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, + "visualizationFitWidth": "Vừa theo chiều rộng", + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, + "visualizationSaveImage": "Lưu hình ảnh", + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, + "visualizationCopyImage": "Sao chép hình ảnh", + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, + "visualizationImageCopied": "Đã sao chép hình ảnh", + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, + "visualizationOpenApiReference": "Mở tham chiếu API", + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, + "visualizationValid": "Hợp lệ", + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, + "visualizationInvalid": "Không hợp lệ", + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, + "visualizationServers": "Máy chủ", + "@visualizationServers": { + "description": "OpenAPI server count label." + }, + "visualizationPaths": "Đường dẫn", + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, + "visualizationOperations": "Thao tác", + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, + "visualizationTags": "Thẻ", + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, + "visualizationNoOperations": "Không có thao tác phù hợp", + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, + "visualizationSearchOperations": "Tìm kiếm thao tác", + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, + "visualizationRenderFailed": "Không thể kết xuất hình minh họa này.", + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, + "visualizationRetry": "Thử lại", + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, + "visualizationSaved": "Đã lưu {fileName}", + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "shortcutExportPdfDescription": "Xuất tài liệu hiện tại hoặc mô-đun Writerside dưới dạng PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, + "instances": "Các phiên bản", + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, + "newInstance": "Phiên bản mới", + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, + "newTocLibrary": "Thư viện mục lục mới", + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, + "editInstance": "Chỉnh sửa phiên bản", + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, + "openTocFile": "Mở tệp mục lục", + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, + "createInstance": "Tạo phiên bản", + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, + "createTocLibrary": "Tạo thư viện mục lục", + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, + "instanceContent": "Nội dung", + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, + "instanceContentSource": "Tạo từ", + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, + "emptyInstance": "Phiên bản trống", + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, + "markdownFiles": "Tệp Markdown cục bộ", + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, + "chooseMarkdownFolder": "Chọn thư mục Markdown", + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, + "errorWritersideInstanceImportSourceRequired": "Chọn một thư mục chứa các tệp Markdown.", + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, + "instanceAppearance": "Giao diện", + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, + "instanceColor": "Màu biểu tượng", + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, + "instanceVersion": "Phiên bản", + "@instanceVersion": { + "description": "Writerside instance version field." + }, + "instanceVersionInherited": "Phiên bản dự án là {version} khi trường này để trống.", + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "instanceWebPath": "Đường dẫn web", + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, + "instanceStatus": "Trạng thái", + "@instanceStatus": { + "description": "Writerside instance status field." + }, + "instanceStatusRelease": "Bản phát hành", + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, + "instanceStatusEap": "Truy cập sớm", + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, + "instanceStatusDeprecated": "Không còn được dùng", + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, + "allowSearchEngineIndexing": "Cho phép công cụ tìm kiếm lập chỉ mục", + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, + "allowSearchEngineIndexingDescription": "Cho phép các công cụ tìm kiếm bên ngoài lập chỉ mục đầu ra này.", + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, + "offlineArtifact": "Gói ngoại tuyến", + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, + "offlineArtifactDescription": "Đóng gói tài nguyên để tài liệu được xây dựng có thể hoạt động độc lập.", + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, + "instanceOutputSettings": "Cài đặt đầu ra", + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, + "markdownImportSource": "Nguồn Markdown", + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, + "markdownImportFiles": "Tệp Markdown", + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, + "selectNone": "Bỏ chọn tất cả", + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, + "markdownFilesFound": "Đã tìm thấy {count} tệp Markdown", + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noMarkdownFilesFound": "Không tìm thấy tệp Markdown nào trong thư mục này.", + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, + "copyReferencedMedia": "Sao chép phương tiện được tham chiếu", + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, + "copyReferencedMediaDescription": "Sao chép hình ảnh và video cục bộ được các tệp đã chọn tham chiếu, đồng thời giữ nguyên đường dẫn tương đối.", + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, + "instanceIdRenameWarningTitle": "Đổi tên ID phiên bản?", + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, + "instanceIdRenameWarning": "BusyMark sẽ đổi tên tệp .tree và cập nhật các tham chiếu dự án Writerside từ “{oldId}” thành “{newId}”. Các script xuất bản không được thay đổi và phải cập nhật riêng.", + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, + "renameAndUpdateReferences": "Đổi tên và cập nhật tham chiếu", + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, + "tocLibraryDescription": "Thư viện mục lục lưu trữ các phần có thể tái sử dụng và không tạo đầu ra riêng.", + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, + "defaultTocLibraryName": "Mục lục dùng chung", + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, + "instanceColorAutomatic": "Tự động", + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, + "instanceColorBlue": "Xanh dương", + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, + "instanceColorGreen": "Xanh lá", + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, + "instanceColorOrange": "Cam", + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, + "instanceColorPurple": "Tím", + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, + "instanceColorRed": "Đỏ", + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, + "instanceColorTeal": "Xanh mòng két", + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, + "instanceColorYellow": "Vàng", + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, + "errorWritersideInstanceNameRequired": "Nhập tên phiên bản.", + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, + "errorWritersideInstanceIdExists": "Đã có phiên bản với ID “{id}”.", + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "errorWritersideInstanceTreeExists": "Cây phiên bản đã tồn tại: {path}", + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportSourceMissing": "Thư mục nguồn Markdown không tồn tại: {path}", + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportSelectionRequired": "Chọn ít nhất một tệp Markdown để nhập.", + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, + "errorWritersideInstanceImportFileInvalid": "Đây không phải là tệp Markdown có thể đọc bên trong nguồn đã chọn: {path}", + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportTargetExists": "Việc nhập sẽ ghi đè một tệp dự án hiện có: {path}", + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceFilesChanged": "Các tệp phiên bản đã thay đổi trên đĩa. Hãy xem lại và thử lại.", + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, + "errorWritersideInstanceRollbackFailed": "BusyMark không thể khôi phục hoàn toàn thay đổi phiên bản. Hãy xem lại các tệp này trước khi tiếp tục: {paths}", + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "errorWritersideInstanceLibraryImport": "Thư viện mục lục không thể nhập các chủ đề Markdown.", + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, + "errorWritersideInstanceWebPathInvalid": "Đường dẫn web phải nằm trên một dòng duy nhất.", + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, + "errorWritersideInstanceConfigurationInvalid": "Cấu hình phiên bản Writerside không hợp lệ. Hãy sửa các chẩn đoán rồi thử lại.", + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, + "errorWritersideInstanceTemporaryFile": "BusyMark không thể đưa các thay đổi phiên bản vào stage một cách an toàn.", + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, + "diagnosticWritersideTreeInvalidStatus": "Trạng thái phiên bản không xác định “{status}”. Sử dụng release, eap hoặc deprecated.", + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, + "diagnosticWritersideDuplicateInstanceId": "ID phiên bản “{id}” được nhiều tệp cây sử dụng.", + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml phải có phần tử gốc .", + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "Giá trị {name} “{value}” phải là true hoặc false.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, + "diagnosticWritersideBuildProfileMissingInstance": "Phần tử phải chỉ định ID phiên bản.", + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, + "diagnosticWritersideTreeInvalidInclude": " trong cây phải chỉ định cả from và element-id.", + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, + "diagnosticWritersideTreeMissingSnippetId": " trong cây phải chỉ định id.", + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "Tham chiếu mục lục giữa các phiên bản phải chỉ định cả ref và in.", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, + "diagnosticWritersideTreeConflictingTargets": "Một phần tử mục lục không thể nhắm đến nhiều hơn một chủ đề, tham chiếu, liên kết hoặc chuyển hướng.", + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, + "diagnosticWritersideTreeDuplicateElementId": "ID phần tử cây “{id}” được khai báo nhiều hơn một lần.", + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideInstanceGroupsInvalidRoot": "Tệp nhóm phiên bản phải có phần tử gốc .", + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, + "diagnosticWritersideInstanceGroupInvalid": "Một nhóm phiên bản phải chỉ định id không trống và danh sách phiên bản.", + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, + "diagnosticWritersideInstanceGroupDuplicateId": "ID nhóm phiên bản “{id}” được khai báo nhiều hơn một lần.", + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideExternalTreeInclude": "Include mục lục “{source}#{id}” thuộc mô-đun bên ngoài “{origin}” và không thể mở rộng trong không gian làm việc này.", + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeIncludeElementMissing": "Phần tử cây “{id}” không tồn tại trong cây đã đăng ký “{source}”.", + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeCircularInclude": "Include cây “{source}#{id}” tạo ra một vòng lặp.", + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideUnknownInstanceGroup": "Điều kiện phiên bản tham chiếu đến nhóm không xác định “@{group}”.", + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceInstanceMissing": "Tham chiếu giữa các phiên bản nhắm đến phiên bản không xác định “{instance}”.", + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceTopicMissing": "Chủ đề “{topic}” không nằm trong phiên bản được tham chiếu “{instance}”.", + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, + "download": "Tải xuống", + "@download": { + "description": "Button label that downloads a required component." + }, + "exportWritersideAsPdf": "Xuất Writerside dưới dạng PDF", + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, + "writersidePdfContent": "Nội dung xuất", + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, + "writersidePdfPage": "Trang", + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, + "exportingWritersidePdf": "Đang xuất PDF Writerside…", + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, + "ai": "AI", + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, + "aiLocalOllama": "Ollama cục bộ", + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, + "aiDisabled": "Đã tắt", + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, + "aiLocalOnlyDescription": "Chỉnh sửa bằng AI chỉ được thực hiện theo yêu cầu rõ ràng. BusyMark chỉ gửi ngữ cảnh được hiển thị cho nhà cung cấp đã chọn và không bao giờ áp dụng đề xuất khi chưa xem lại.", + "@aiLocalOnlyDescription": { + "description": "Privacy description for BusyMark local AI." + }, + "aiProvider": "Nhà cung cấp AI", + "@aiProvider": { + "description": "Label for an AI provider selection." + }, + "aiDefaultProvider": "Nhà cung cấp mặc định", + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, + "aiConfigureProvider": "Cấu hình nhà cung cấp", + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, + "aiChooseProvider": "Chọn nhà cung cấp AI", + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, + "aiOllamaEndpoint": "Điểm cuối Ollama", + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, + "aiOllamaModel": "Mô hình Ollama", + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, + "aiTestConnection": "Kiểm tra kết nối", + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, + "aiTestingConnection": "Đang kiểm tra…", + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, + "aiConnectionReady": "Đã kết nối. Tìm thấy {count} mô hình đã cài đặt.", + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "aiNoModels": "Chưa chọn mô hình nào.", + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, + "aiConnectionFailed": "BusyMark không thể xác minh việc tạo văn bản bằng AI.", + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, + "aiConfigureFirst": "Bật một nhà cung cấp AI và xác minh mô hình trong Cài đặt → AI.", + "aiEditWithAi": "Chỉnh sửa bằng AI", + "aiRefineWithAi": "Tinh chỉnh bằng AI", + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, + "aiInstruction": "Hướng dẫn", + "aiChangeTarget": "Có thể thay đổi gì", + "aiSharedContext": "Ngữ cảnh được chia sẻ với AI", + "aiTargetSelection": "Nội dung đã chọn", + "aiTargetInsertAfterBlock": "Chèn sau khối hiện tại", + "aiTargetCurrentBlock": "Khối hiện tại", + "aiTargetCurrentSection": "Phần hiện tại", + "aiTargetCompleteDocument": "Toàn bộ tài liệu", + "aiContextNone": "Không có ngữ cảnh tài liệu", + "aiContextSelection": "Nội dung đã chọn", + "aiContextCurrentBlock": "Khối hiện tại", + "aiContextCurrentSection": "Phần hiện tại", + "aiContextCompleteDocument": "Toàn bộ tài liệu", + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, + "aiGenerating": "Đang tạo đề xuất…", + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, + "aiProposal": "Đề xuất của AI", + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, + "aiGenerateProposal": "Tạo đề xuất", + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, + "aiContextDisclosure": "Nhà cung cấp đã chọn sẽ nhận {count} ký tự từ ngữ cảnh được hiển thị.", + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "aiOriginal": "Bản gốc", + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, + "aiSuggested": "Đề xuất", + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, + "aiApplyProposal": "Áp dụng đề xuất", + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, + "aiTokenUsage": "{input} token đầu vào · {output} token đầu ra", + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, + "aiStaleProposal": "Tài liệu đã thay đổi trong khi đề xuất này được tạo. Hãy thực hiện lại thao tác.", + "gitAiStagedChangesChanged": "Các thay đổi trong stage đã thay đổi trong khi thông điệp commit này được tạo. Hãy thực hiện lại thao tác.", + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, + "aiViewContext": "Xem ngữ cảnh đã gửi", + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, + "aiReviewExactContent": "Xem lại nội dung chính xác", + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, + "aiContentToChange": "Nội dung cần thay đổi", + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, + "aiContentSentToAi": "Nội dung đã gửi cho AI", + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, + "aiApiKey": "Khóa API", + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, + "aiApiKeyStoredHint": "Khóa đã được lưu trong kho thông tin xác thực của hệ thống", + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, + "aiApiKeyEnterHint": "Nhập khóa API của nhà cung cấp", + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, + "aiReplaceApiKey": "Thay thế khóa API", + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, + "aiSaveApiKey": "Lưu an toàn khóa API", + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, + "aiRemoveApiKey": "Xóa khóa API đã lưu", + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, + "aiCredentialSaved": "Đã lưu khóa API trong kho thông tin xác thực của hệ thống.", + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, + "aiCredentialRemoved": "Đã xóa khóa API đã lưu.", + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, + "aiModelRouting": "Định tuyến mô hình", + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, + "aiAutomaticRouting": "Tự động theo tác vụ", + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, + "aiFixedModelRouting": "Sử dụng mô hình đã chọn", + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, + "aiPreferredModel": "Mô hình ưu tiên", + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, + "aiModel": "Mô hình", + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, + "aiUsageThisMonth": "{requests} yêu cầu · {input} token đầu vào · {output} token đầu ra", + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, + "aiCloudConsentTitle": "Gửi nội dung đến {provider}?", + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiCloudConsentEnable": "Bật {provider}", + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiCloudConsentMessage": "Chỉ nội dung hiển thị trong mỗi hộp thoại xem lại AI được gửi đi. Yêu cầu không được lưu trạng thái, đề xuất cần được xem lại và khóa API được lưu trong kho thông tin xác thực hệ thống Linux.", + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, + "aiCloudConsentRequired": "Trước tiên, hãy xác nhận việc chia sẻ dữ liệu với {provider} trong Cài đặt → AI.", + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiGenerationVerified": "Đã xác minh việc tạo bằng {model}. Có sẵn {count} mô hình tương thích.", + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "aiColdStartObserved": "Đã phát hiện khởi động nguội của mô hình cục bộ.", + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, + "aiNoCompatibleModels": "Không có mô hình tạo văn bản tương thích nào khả dụng.", + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, + "aiEnableProvider": "Trước tiên, hãy bật một nhà cung cấp AI.", + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, + "aiDraftCommitMessage": "Soạn thông điệp commit", + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, + "aiDrafting": "Đang soạn…", + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, + "aiDraftWithAi": "Soạn bằng AI", + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, + "generateOrUpdateMarkdownToc": "Tạo/cập nhật mục lục", + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, + "markdownTocTitle": "Mục lục", + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, + "markdownTocUpdated": "Đã cập nhật mục lục với {count} mục.", + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "markdownTocNoHeadings": "Thêm ít nhất một tiêu đề phần trước khi tạo mục lục.", + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, + "markdownTocMalformedMarkers": "Các dấu đánh dấu mục lục BusyMark bị thiếu, trùng lặp hoặc không đúng thứ tự.", + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, + "diagnosticMarkdownHeadingSkippedLevel": "Tiêu đề cấp {level} theo sau cấp {previousLevel}; hãy xem lại cấu trúc lồng ghép của các phần.", + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, + "diagnosticMarkdownLinkEmptyText": "Văn bản liên kết trống; hãy cung cấp tên có khả năng truy cập mô tả mục đích của liên kết.", + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, + "diagnosticMarkdownLinkReviewText": "Xem lại liệu văn bản liên kết “{text}” có mô tả mục đích của liên kết trong ngữ cảnh hay không.", + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, + "diagnosticMarkdownTableEmptyHeader": "Các ô tiêu đề bảng phải xác định cột của chúng; hãy hoàn thành từng tiêu đề trống.", + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, + "mathRenderFailed": "Không thể kết xuất biểu thức toán học.", + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, + "inlineMath": "Toán nội tuyến", + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, + "displayMath": "Toán hiển thị", + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + } +} diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb new file mode 100644 index 00000000..ce1effb4 --- /dev/null +++ b/lib/l10n/app_zh.arb @@ -0,0 +1,960 @@ +{ + "@@locale": "zh", + "appTitle": "BusyMark", + "appSubtitle": "Markdown 文件和兼容 Writerside 的文档项目编辑器。", + "aboutBusyMark": "关于 BusyMark", + "aboutTagline": "Markdown 和 Writerside 编辑器", + "aboutLicenseLabel": "许可证", + "aboutLicenseName": "Apache License 2.0", + "aboutWebsite": "网站", + "aboutSourceCode": "源代码", + "reportIssue": "报告问题", + "feedbackCategory": "类别", + "feedbackChooseCategory": "选择类别", + "feedbackCategoryProblem": "问题或错误", + "feedbackCategoryFeature": "功能请求", + "feedbackCategoryPrivacySecurity": "隐私或安全问题", + "feedbackCategoryUsability": "可用性问题", + "feedbackCategoryOther": "其他", + "feedbackSubject": "主题", + "feedbackMessage": "详细信息", + "feedbackReplyEmail": "回复邮箱(可选)", + "feedbackIncludeTechnicalDetails": "包含技术详细信息", + "feedbackTechnicalDetailsDisclosure": "启用后,此选项仅会添加您的 Linux 操作系统版本和 BusyMark 应用语言。不会附加日志、文件、账户数据或其他诊断信息。", + "feedbackSubmit": "提交", + "feedbackSubmitting": "正在提交…", + "feedbackCategoryRequired": "请选择类别。", + "feedbackSubjectLength": "主题必须包含 3 到 120 个字符。", + "feedbackMessageLength": "信息必须包含 10 到 5,000 个字符。", + "feedbackReplyEmailInvalid": "请输入有效的邮箱地址,或将此字段留空。", + "feedbackConnectionFailure": "BusyMark 无法连接。请检查网络连接后重试。", + "feedbackTimeoutFailure": "请求超时。请重试。", + "feedbackRateLimitedFailure": "此连接发送的报告过多。请稍候再试。", + "feedbackRejectedFailure": "服务器拒绝了此报告。请检查表单字段后重试。", + "feedbackServerFailure": "服务器无法接收此报告。请稍后重试。", + "feedbackSuccess": "反馈已发送。参考 ID:{id}", + "advanced": "高级", + "addToGit": "添加到 Git", + "appearance": "外观", + "apply": "应用", + "back": "返回", + "bottomLeft": "左下", + "bottomRight": "右下", + "cancel": "取消", + "choose": "选择", + "chooseLocation": "选择位置", + "copy": "复制", + "copyName": "复制名称", + "copyFileName": "复制文件名", + "copyPath": "复制路径", + "create": "创建", + "creating": "正在创建…", + "cut": "剪切", + "promoteSection": "提升节级别", + "demoteSection": "降低节级别", + "moveSectionUp": "上移节", + "moveSectionDown": "下移节", + "confirmDeleteSectionTitle": "删除此节?", + "confirmDeleteSectionMessage": "删除“{name}”及其节中的全部内容?此操作无法撤销。", + "darkTheme": "深色", + "delete": "删除", + "discard": "放弃", + "editor": "编辑器", + "file": "文件", + "fileHistory": "文件历史记录", + "folder": "文件夹", + "insert": "插入", + "keyboardShortcuts": "键盘快捷键", + "commandPalette": "命令面板", + "commandPaletteHint": "输入命令", + "commandPaletteEmpty": "没有匹配的命令", + "commandUnavailableInContext": "当前编辑器上下文中无法使用此命令", + "lightTheme": "浅色", + "mainMenu": "主菜单", + "fullScreen": "全屏", + "markdown": "Markdown", + "open": "打开", + "openInFiles": "在文件中打开", + "pathActions": "路径操作", + "outline": "大纲", + "overwrite": "覆盖", + "paste": "粘贴", + "pasteWithoutFormatting": "粘贴为无格式文本", + "reading": "阅读", + "removeFromRecent": "从最近使用记录中移除", + "recent": "最近使用", + "redo": "重做", + "save": "保存", + "search": "搜索", + "selectAll": "全选", + "settings": "设置", + "source": "源代码", + "split": "拆分", + "systemTheme": "系统", + "theme": "主题", + "appLanguage": "语言", + "systemLanguage": "系统", + "languageEnglish": "English", + "languageGerman": "Deutsch", + "languageDutch": "Nederlands", + "languageTurkish": "Türkçe", + "languageItalian": "Italiano", + "languageNorwegian": "Norsk", + "languageFrench": "Français", + "languageRussian": "Русский", + "languageUkrainian": "Українська", + "languagePolish": "Polski", + "languageSpanish": "Español", + "languagePortuguese": "Português", + "languageArabic": "العربية", + "languagePersian": "فارسی", + "languageHindi": "हिन्दी", + "languageIndonesian": "Bahasa Indonesia", + "languageEstonian": "Eesti", + "languageVietnamese": "Tiếng Việt", + "languageJapanese": "日本語", + "languageKorean": "한국어", + "languageSimplifiedChinese": "简体中文", + "toggleSidebar": "侧边栏面板", + "topLeft": "左上", + "topRight": "右上", + "undo": "撤销", + "validate": "验证", + "validation": "验证", + "viewMode": "视图模式", + "welcome": "欢迎", + "writerside": "Writerside", + "xml": "XML", + "fileTypeMarkdown": "Markdown", + "fileTypeImages": "图像", + "openMarkdownFile": "打开 Markdown 文件", + "markdownFileExtensions": ".md 或 .markdown", + "openFolderOrWritersideProject": "打开文件夹或 Writerside 项目", + "markdownFolderOrWritersideProject": "Markdown 文件夹或兼容 Writerside 的项目", + "noOpenFile": "没有打开的文件", + "shortcutDeleteTreeItemDescription": "删除选中的文件项,或从目录中移除选中的主题", + "shortcutGroupGeneral": "常规", + "shortcutNewDocument": "创建", + "shortcutNewDocumentDescription": "创建 Markdown 文件或 Writerside 项目", + "shortcutOpenDescription": "打开 Markdown 文件、文件夹或 Writerside 项目", + "shortcutSaveDescription": "保存当前文档", + "shortcutSearchDescription": "搜索当前工作区", + "shortcutKeyboardShortcutsDescription": "显示此键盘快捷键参考", + "shortcutMarkdownAndHtmlDescription": "打开 Markdown 和 HTML 参考", + "shortcutSettingsDescription": "打开 BusyMark 设置", + "shortcutNextTab": "下一个标签页", + "shortcutNextTabDescription": "移至下一个打开的标签页", + "shortcutPreviousTab": "上一个标签页", + "shortcutPreviousTabDescription": "移至上一个打开的标签页", + "shortcutCloseTab": "关闭标签页", + "shortcutCloseTabDescription": "关闭当前标签页", + "shortcutCloseAllTabs": "关闭所有标签页", + "shortcutCloseAllTabsDescription": "关闭所有打开的标签页", + "shortcutGroupTextEditing": "文本编辑", + "shortcutSelectAllDescription": "在源代码模式下选择全部文本;在编辑器模式下按两次以选择所有块", + "shortcutCutDescription": "剪切选中的文本", + "shortcutCopyDescription": "复制选中的文本", + "shortcutPasteDescription": "从剪贴板粘贴", + "shortcutPastePlainTextDescription": "粘贴剪贴板中的无格式文本", + "shortcutUndoDescription": "撤销上次编辑", + "shortcutRedoDescription": "重做上次撤销的编辑", + "shortcutInsertIndentation": "插入缩进", + "shortcutInsertIndentationDescription": "在光标处插入缩进", + "shortcutOutdentSource": "减少源代码缩进", + "shortcutOutdentSourceDescription": "在源代码模式下减少一级缩进", + "shortcutEscape": "关闭搜索或清除块选择", + "shortcutEscapeDescription": "关闭工作区搜索,或在编辑器模式下清除块选择", + "shortcutGroupFormatting": "格式", + "shortcutBoldDescription": "切换选中文本的粗体", + "shortcutItalicDescription": "切换选中文本的斜体", + "shortcutUnderlineDescription": "切换选中文本的下划线", + "shortcutLinkDescription": "插入或编辑链接", + "shortcutInlineCodeDescription": "切换选中文本的行内代码格式", + "shortcutStrikethroughDescription": "切换选中文本的删除线", + "shortcutGroupBlocks": "块", + "shortcutParagraphDescription": "将当前块设为段落", + "shortcutHeading1Description": "将当前块设为标题 1", + "shortcutHeading2Description": "将当前块设为标题 2", + "shortcutHeading3Description": "将当前块设为标题 3", + "shortcutHeading4Description": "将当前块设为标题 4", + "shortcutHeading5Description": "将当前块设为标题 5", + "shortcutHeading6Description": "将当前块设为标题 6", + "shortcutGroupLists": "列表", + "numberedList": "编号列表", + "shortcutNumberedListDescription": "切换编号列表格式", + "bulletedList": "项目符号列表", + "shortcutBulletedListDescription": "切换项目符号列表格式", + "checklist": "检查清单", + "shortcutChecklistDescription": "切换检查清单格式", + "shortcutGroupSidebar": "侧边栏", + "sidebarViewMenu": "侧边栏视图", + "createMarkdownFile": "创建 Markdown 文件", + "createMarkdownFileDescription": "开始创建未保存的本地 Markdown 文档", + "createWritersideProject": "创建 Writerside 项目", + "createWritersideProjectDescription": "开始创建本地兼容 Writerside 的项目", + "defaultProjectName": "文档", + "defaultInstanceName": "用户指南", + "defaultStartTopicTitle": "开始使用", + "projectName": "项目名称", + "directoryName": "目录名称", + "instanceName": "实例名称", + "instanceId": "实例 ID", + "startTopicTitle": "起始主题标题", + "location": "位置", + "projectNameRequired": "项目名称为必填项。", + "directoryNameRequired": "目录名称为必填项。", + "useSingleSafeDirectoryName": "使用单一且安全的目录名称。", + "useLowercaseIdentifier": "使用仅包含小写字母、数字、下划线或连字符的小写标识符。", + "startTopicTitleRequired": "起始主题标题为必填项。", + "createWritersideProjectFailed": "无法创建 Writerside 项目。", + "settingsTitle": "BusyMark 设置", + "autoSave": "自动保存", + "autoSaveDescription": "在短暂空闲后自动保存文件更改。", + "wordWrap": "自动换行", + "editorFontSize": "编辑器字体大小", + "validateOnEdit": "编辑时验证", + "clearRecentWorkspaces": "清除最近使用的工作区", + "editingButtonsPosition": "编辑按钮位置", + "editingButtonsPositionDescription": "选择浮动 WYSIWYG 编辑按钮的显示位置。", + "editingButtonsDirection": "编辑按钮方向", + "editingButtonsDirectionDescription": "选择水平或垂直排列浮动 WYSIWYG 编辑按钮。", + "horizontal": "水平", + "vertical": "垂直", + "privacy": "隐私", + "allowRemoteImages": "加载远程图像", + "allowRemoteImagesDescription": "允许 Markdown 预览和编辑器从 http 和 https URL 加载图像。", + "clearRemoteImagePermissions": "清除远程图像权限", + "clearRemoteImagePermissionsDescription": "忘记已获准加载远程图像的工作区。", + "clearGitWorkspaceTrust": "清除受信任的 Git 工作区", + "clearGitWorkspaceTrustDescription": "为之前受信任的工作区启用 Git 功能前先进行询问。", + "settingsWindowSectionTitle": "窗口", + "settingsReopenWorkspaceOnStartupTitle": "启动时重新打开上次的工作区", + "settingsReopenWorkspaceOnStartupDescription": "BusyMark 启动时打开上次会话中的工作区和标签页。", + "settingsConfirmCloseWithUnsavedChangesTitle": "有未保存更改时关闭前进行确认", + "settingsConfirmCloseWithUnsavedChangesDescription": "文档有未保存更改时,关闭 BusyMark 前先进行询问。", + "closeUnsavedChangesTitle": "未保存的更改", + "closeUnsavedChangesSingleMessage": "此文档有未保存的更改。关闭 BusyMark 前保存更改?", + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{关闭 BusyMark 前保存更改?} =1{有 1 个文档包含未保存的更改。关闭 BusyMark 前保存更改?} other{有 {count} 个文档包含未保存的更改。关闭 BusyMark 前保存更改?}}", + "closeUnsavedChangesCancel": "取消", + "closeUnsavedChangesDiscard": "放弃", + "closeUnsavedChangesSave": "保存", + "currentFile": "当前文件", + "unsavedChanges": "未保存的更改", + "unsavedChangesMessage": "{fileName} 中有未保存的更改。继续前保存这些更改?", + "unsavedChangesMultipleMessage": "{count, plural, =1{有 1 个文档包含未保存的更改。继续前保存它?} other{有 {count} 个文档包含未保存的更改。继续前保存它们?}}", + "fileChangedOnDisk": "文件已在磁盘上更改", + "fileChangedOnDiskMessage": "自打开此文件后,它已在磁盘上发生更改。覆盖它?", + "untitledMarkdownFileName": "未命名.md", + "unorderedList": "无序列表", + "orderedList": "有序列表", + "taskList": "任务列表", + "toggleTaskChecked": "切换任务选中状态", + "indentListItem": "增加列表项缩进", + "outdentListItem": "减少列表项缩进", + "blockquote": "引用块", + "codeBlock": "代码块", + "codeBlockLanguage": "代码块语言", + "image": "图像", + "video": "视频", + "openVideo": "播放视频", + "pauseVideo": "暂停视频", + "videoUnavailable": "视频不可用", + "videoPreview": "视频预览", + "diagnosticWritersideVideoMissingSource": "视频缺少 src 属性。", + "diagnosticWritersideVideoUnsupportedSource": "不支持的视频源:{source}", + "diagnosticWritersideVideoMissingFile": "视频文件不存在:{source}", + "diagnosticWritersideVideoMissingPreview": "视频预览图像不存在:{preview}", + "inlineImage": "行内图像", + "table": "表格", + "htmlBlock": "HTML 块", + "htmlContentDefault": "HTML 内容", + "shortcutHtmlBlockDescription": "插入或编辑 HTML 块", + "renderedHtml": "已渲染的 HTML", + "editHtml": "编辑 HTML", + "htmlSource": "HTML 源代码", + "thematicBreak": "分隔线", + "bold": "粗体", + "italic": "斜体", + "underline": "下划线", + "strikethrough": "删除线", + "inlineCode": "行内代码", + "link": "链接", + "hardLineBreak": "硬换行", + "textStyle": "文本样式", + "paragraph": "段落", + "heading1": "标题 1", + "heading2": "标题 2", + "heading3": "标题 3", + "heading4": "标题 4", + "heading5": "标题 5", + "heading6": "标题 6", + "headingLevelAbbreviation": "H{level}", + "deleteTable": "删除表格", + "tableColumnNumber": "列 {columnNumber}", + "insertColumnLeft": "在左侧插入列", + "insertColumnRight": "在右侧插入列", + "deleteColumn": "删除列", + "tableAlignmentUnspecified": "对齐方式:未指定", + "tableAlignmentLeft": "对齐方式:左对齐", + "tableAlignmentCenter": "对齐方式:居中", + "tableAlignmentRight": "对齐方式:右对齐", + "tableRowNumber": "行 {rowNumber}", + "insertRowAbove": "在上方插入行", + "insertRowBelow": "在下方插入行", + "deleteRow": "删除行", + "tableHeaderHint": "标题", + "tableCellHint": "单元格", + "language": "语言", + "hideEditingButtons": "隐藏编辑按钮", + "showEditingButtons": "显示编辑按钮", + "altText": "替代文本", + "editorPlaceholderText": "文本", + "editorPlaceholderCode": "代码", + "editorPlaceholderAltText": "替代文本", + "describeTheImage": "描述图像", + "columns": "列", + "rows": "行", + "tableHeaderNumber": "标题 {columnNumber}", + "tableCellDefault": "单元格", + "noImageSource": "没有图像源", + "remoteImageBlocked": "远程图像已阻止", + "remoteImageBlockedTooltip": "选择是否允许 BusyMark 加载远程图像。", + "remoteImagesBlockedTitle": "远程图像已阻止", + "remoteImagesBlockedMessage": "本文档引用了来自互联网的图像。加载这些图像可能会向图像托管方泄露网络信息。", + "loadRemoteImagesForWorkspace": "为此工作区加载", + "alwaysLoadRemoteImages": "始终加载远程图像", + "hideSidebar": "隐藏侧边栏面板", + "showSidebar": "显示侧边栏面板", + "showPreview": "显示预览", + "hidePreview": "隐藏预览", + "workspaceKindUnsavedMarkdown": "未保存的 Markdown 文件", + "workspaceKindSingleMarkdown": "单个 Markdown 文件", + "workspaceKindMarkdownFolder": "Markdown 文件夹", + "workspaceKindWritersideModule": "Writerside 模块", + "problems": "问题", + "diagnosticCount": "{count, plural, =0{没有诊断信息} =1{1 条诊断信息} other{{count} 条诊断信息}}", + "files": "文件", + "toc": "目录", + "tocActions": "目录操作", + "markdownUnsaved": "Markdown - 未保存", + "workspaceDetail": "{kind} - {count, plural, =1{1 个文件} other{{count} 个文件}}", + "noFiles": "没有文件", + "newFile": "新建文件", + "noWritersideToc": "没有 Writerside 目录", + "tocSection": "目录节", + "newTopic": "新建主题", + "newChildTopic": "新建子主题", + "newSiblingTopic": "新建同级主题", + "renameTopicFile": "重命名主题文件", + "topicPlacement": "目录位置", + "tocRoot": "位于目录根级别", + "afterSelectedTopic": "位于选中主题之后", + "insideSelectedTopic": "位于选中主题内", + "pasteAfterTopic": "粘贴到主题之后", + "pasteAsChildTopic": "粘贴为子主题", + "removeFromToc": "从目录中移除", + "confirmRemoveFromTocTitle": "从目录中移除?", + "confirmRemoveFromTocMessage": "从此目录中移除 {name}?主题文件将被保留。", + "confirmDeleteTopicTitle": "删除主题文件?", + "confirmDeleteTopicMessage": "删除 {name} 并从每个目录中移除它?此操作无法撤销。", + "safeDeleteTopicFile": "安全删除主题文件…", + "removeTocElement": "移除目录元素", + "reviewUsages": "查看使用情况", + "deleteTopicFile": "删除主题文件", + "removeAction": "移除", + "topicRemovalSummary": "从选中的实例中移除“{topic}”。主题文件将被保留。", + "safeDeleteTopicSummary": "删除“{topic}”,并在整个 Writerside 项目中安全更新其引用。", + "childTopicsPromoted": "{count, plural, =1{1 个子主题将上移一级。} other{{count} 个子主题将上移一级。}}", + "topicIsStartPageRemovalWarning": "此主题被用作实例的起始页。请查看其使用情况,并在继续前指定其他起始页。", + "topicUsagesCount": "使用情况({count})", + "noBreakingTopicUsages": "未找到会导致引用失效的引用。", + "topicUsagesFound": "BusyMark 找到了以下对该主题的引用。", + "topicUsageTocElements": "目录元素", + "topicUsageStartPages": "起始页", + "topicUsageTopicLinks": "主题链接", + "topicUsageIncludes": "包含项", + "usageCount": "{count, plural, =1{1 次使用} other{{count} 次使用}}", + "refactoringOptions": "重构选项", + "updateUsagesAutomatically": "自动更新使用情况", + "updateUsagesAutomaticallyDescription": "移除目录引用和包含项,同时保留链接文本。", + "manualUsageUpdatesRequired": "执行此重构前,某些使用情况需要手动更改。", + "setRedirectTo": "设置重定向到", + "noRedirectDescription": "不重定向旧的已发布页面。", + "redirectTarget": "重定向目标", + "remainingUsagesBlockRemoval": "请在继续前查看并更新剩余的使用情况,或在可用时启用自动更新。", + "usagesOfTopic": "{topic} 的使用情况", + "noUsagesFound": "未找到使用情况", + "outsideSelectedInstance": "在选中的实例之外", + "doRefactor": "执行重构", + "orphanTopicTitle": "主题文件已不再使用", + "keepTopicFile": "保留主题文件", + "orphanTopicMessage": "“{topic}”在此 Writerside 项目中已不再使用。删除该文件,或保留它以供其他实例使用。", + "defaultNewTopicTitle": "新主题", + "topicTitle": "主题标题", + "fileName": "文件名", + "topicTitleRequired": "主题标题为必填项。", + "fileNameRequired": "文件名为必填项。", + "rename": "重命名", + "confirmDeleteFileTitle": "删除文件?", + "confirmDeleteFolderTitle": "删除文件夹?", + "confirmDeleteFileMessage": "删除 {name}?此操作无法撤销。", + "confirmDeleteFolderMessage": "删除 {name} 及其中的所有文件?此操作无法撤销。", + "useSingleSafeFileName": "使用单一且安全的文件名。", + "useExpectedExtension": "为选中的格式使用 {extension} 扩展名。", + "useIdentifierCharacters": "在扩展名之前仅使用字母、数字、下划线或连字符。", + "topicIdAlreadyExists": "主题 ID 已存在。", + "createWritersideTopicFailed": "无法创建 Writerside 主题。", + "noOutline": "没有大纲", + "expandKind": "展开 {kind}", + "collapseKind": "折叠 {kind}", + "foldKindSection": "节", + "foldKindList": "列表", + "foldKindQuote": "引用", + "foldKindTag": "标签", + "sourceSearchPreviousMatch": "上一个匹配项", + "sourceSearchNextMatch": "下一个匹配项", + "sourceSearchCaseSensitive": "区分大小写", + "sourceSearchWholeWord": "全字匹配", + "sourceSearchRegex": "正则表达式", + "sourceSearchReplacement": "替换为", + "sourceSearchReplaceCurrent": "替换当前匹配项", + "sourceSearchReplaceAndFindNext": "替换并查找下一个", + "sourceSearchReplaceAll": "全部替换", + "workspaceReplace": "在工作区中替换", + "reviewReplacements": "查看替换内容", + "applyReplacements": "应用替换", + "skippedFiles": "跳过的文件", + "workspaceReplaceDirtyBuffer": "未保存的编辑器内容", + "workspaceReplaceDiskContent": "磁盘上的已保存内容", + "selectFileMatches": "选择全部 {count} 个匹配项", + "workspaceReplaceApplied": "已在 {files} 个文件中替换 {matches} 个匹配项;跳过 {skipped} 个。", + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · 末尾有换行符", + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · 末尾无换行符", + "normalizeLineEndings": "规范化行尾", + "mixedLineEndingsSavePrompt": "此文档包含混合的行尾格式。请选择一种格式。", + "workspaceReplaceMixedLineEndings": "{fileName} 使用混合的行尾格式。请在替换前选择要使用的格式。", + "workspaceReplaceIssueOversized": "已跳过过大的文件。", + "workspaceReplaceIssueUnreadable": "已跳过无法读取的文件。", + "workspaceReplaceIssueInvalidUtf8": "已跳过不是有效 UTF-8 的文件。", + "workspaceReplaceIssueTruncated": "替换预览已被截断。", + "workspaceReplaceIssueFileChanged": "已跳过预览后发生变化的文件。", + "workspaceReplaceIssueBufferChanged": "已跳过预览后发生变化的编辑器缓冲区。", + "workspaceReplaceIssueNormalizationRequired": "请在替换前选择 LF 或 CRLF 规范化。", + "workspaceReplaceIssuePartialConflict": "由于文件同时发生了变化,回滚已停止。部分替换可能仍然存在;被移出的内容已保留在下方路径中。", + "workspaceReplaceIssueApplyFailed": "无法提交经过审查的替换;没有文件发生更改。", + "externalChangesTitle": "外部更改 — {fileName}", + "externalFileDeleted": "此文件已从磁盘删除。", + "externalFileChanged": "在您有未保存编辑时,此文件已在磁盘上发生变化。", + "recoveredDocumentReview": "已恢复 {fileName} 的未保存内容。请检查后保存、另存为或放弃。", + "compare": "比较", + "reloadFromDisk": "从磁盘重新加载", + "keepMine": "保留我的版本", + "saveAs": "另存为", + "sourceSearchInvalidRegex": "无效的正则表达式", + "sourceLargeFileFeaturesPaused": "大文件:已暂停语法突出显示和折叠", + "nothingToRead": "没有可读取的内容", + "admonition": "提示块", + "quote": "引用", + "note": "备注", + "tip": "提示", + "warning": "警告", + "tabs": "标签页", + "tab": "标签页", + "procedure": "操作步骤", + "step": "步骤", + "topic": "主题", + "chapter": "章节", + "couldNotOpenTarget": "无法打开 {target}", + "linkTargetNotFound": "找不到链接目标:{targetPath}", + "cannotOpenFileTypeInEditor": "无法在编辑器中打开此文件类型", + "anchorNotFound": "找不到锚点:{anchor}", + "noProblemsFound": "未发现问题", + "noResults": "无结果", + "searchResultLine": "{relativePath} - 第 {lineNumber} 行", + "untitledResult": "未命名结果", + "documentKindMarkdownFile": "Markdown 文件", + "documentKindWritersideMarkdownTopic": "Writerside Markdown 主题", + "documentKindWritersideXmlTopic": "Writerside XML 主题", + "documentKindWritersideTree": "Writerside 树", + "documentKindConfigurationFile": "配置文件", + "documentKindVariablesFile": "变量文件", + "documentKindCategoriesFile": "类别文件", + "documentKindResourceFile": "资源文件", + "workspaceErrorOpenFailed": "打开失败:{error}", + "workspaceErrorCreateWritersideProjectFailed": "无法创建 Writerside 项目:{error}", + "workspaceErrorCreateWritersideTopicFailed": "无法创建 Writerside 主题:{error}", + "workspaceErrorCouldNotOpenFile": "无法打开文件:{error}", + "workspaceErrorChooseWhereToSaveMarkdown": "选择保存此 Markdown 文件的位置。", + "workspaceErrorSaveBlockedFileChangedOnDisk": "保存已阻止:文件已在磁盘上发生变化。", + "workspaceErrorSaveFailed": "保存失败:{error}", + "workspaceErrorFileOperationFailed": "文件操作失败:{error}", + "workspaceErrorValidationFailed": "验证失败:{error}", + "workspaceRecoveryRestored": "{count, plural, =1{已恢复 1 个未保存的文档。请在保存或放弃前进行检查。} other{已恢复 {count} 个未保存的文档。请在保存或放弃前逐一检查。}}", + "workspaceRecoveryDamaged": "{count, plural, =1{无法恢复一条损坏的恢复记录。原始恢复文件已保留以供检查。} other{无法恢复 {count} 条损坏的恢复记录。有效的恢复记录仍可用。}}", + "errorPathDoesNotExist": "路径不存在:{path}", + "errorTargetDirectoryNotEmpty": "目标目录已存在且不为空:{path}", + "errorTargetPathNotDirectory": "目标路径已存在但不是目录:{path}", + "errorGeneratedFileAlreadyExists": "生成的文件已存在:{path}", + "errorParentDirectoryRequired": "必须指定父目录。", + "errorParentDirectoryMissing": "父目录不存在:{path}", + "errorDirectoryMissing": "目录不存在:{path}", + "errorPathAlreadyExists": "路径已存在:{path}", + "errorFileNameRequired": "文件名为必填项。", + "errorFileNameUnsafe": "文件名必须是单一且安全的路径段。", + "errorFileOperationInvalidTarget": "无法将文件夹移动到其自身中。", + "errorFileOperationOutsideRoot": "文件操作必须在工作区内进行。", + "errorFileOperationRoot": "无法从文件树更改工作区根目录。", + "errorProjectNameRequired": "项目名称为必填项。", + "errorDirectoryNameRequired": "目录名称为必填项。", + "errorDirectoryNameUnsafe": "目录名称必须是单一且安全的路径段。", + "errorInstanceIdInvalid": "实例 ID 必须以小写字母开头,且只能包含小写字母、数字、下划线和连字符。", + "errorTopicFileInvalid": "主题文件名必须是没有路径分隔符的 Markdown 文件名。", + "errorTopicTitleRequired": "主题标题为必填项。", + "errorWritersideModuleRootMissing": "Writerside 模块根目录不存在:{path}", + "errorWritersideModuleNotOpen": "必须打开 Writerside 模块才能创建主题。", + "errorWritersideInstanceTreeMissing": "Writerside 模块没有实例树。", + "errorWritersideTreeFileMissing": "Writerside 树文件不存在:{path}", + "errorTopicIdAlreadyExists": "主题 ID \"{topicId}\" 已存在于此帮助模块中。", + "errorTopicFileAlreadyExists": "主题文件已存在:{path}", + "errorReferenceTopicMissing": "选中的树中不存在引用主题:{topic}", + "errorWritersideTocNodeMissing": "选中的目录项已不存在。", + "errorWritersideTocInvalidMove": "目录项无法移动到自身或其子项中。", + "errorWritersideStartTopicDelete": "无法删除起始主题 {topic}。请先选择其他起始页。", + "errorWritersideSafeDeleteRequired": "请对 Writerside 主题文件使用安全删除。", + "errorWritersideTopicUsageScanFailed": "无法完成主题使用情况扫描。没有文件发生更改。", + "errorWritersideTopicUsagesRemain": "某些主题使用情况仍需处理。请先查看后再继续。", + "errorWritersideRedirectInvalid": "选中的重定向目标已无效。请重新选择。", + "errorWritersideRollbackFailed": "无法完全回滚主题移除。请在继续前查看这些路径:{paths}", + "errorTopicsRootUnsafe": "主题根目录必须是安全的相对目录。", + "errorTopicFileNameUnsafe": "主题文件名必须是单一且安全的路径段。", + "errorTopicFileExtensionMismatch": "主题文件扩展名必须与选中的格式匹配({extension})。", + "errorTopicFileNameInvalid": "主题文件名只能包含字母、数字、下划线和连字符。", + "errorUnknown": "未知错误:{code}", + "diagnosticWorkspaceFileStatFailed": "无法读取文件元数据:{error}", + "diagnosticWorkspaceScanSkipped": "检测到大型工作区。为保持应用响应速度,已跳过部分文件。", + "diagnosticWorkspaceScanInspectFailed": "无法检查工作区项:{error}", + "diagnosticWorkspaceFileTooLarge": "文件超过 beta 自动解析限制。", + "diagnosticWorkspaceFileReadFailed": "无法读取 Markdown 文件:{error}", + "diagnosticMarkdownAttributeMalformed": "Writerside 标题属性块格式错误。", + "diagnosticMarkdownHeadingDuplicateId": "标题 ID“{id}”重复。", + "diagnosticWritersideTopicH1ConvertedToChapter": "额外的顶级 H1 标题将被视为章节。", + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown 主题没有 H1 或 front matter 标题。", + "diagnosticWritersideXmlTopicMissingTitle": "XML 主题缺少标题。", + "diagnosticWritersideTopicFileMissingTitle": "主题“{fileName}”缺少标题。", + "diagnosticMarkdownFrontMatterMalformed": "front matter 未闭合。", + "diagnosticMarkdownRawHtmlUnsafe": "不安全的 HTML 元素。", + "diagnosticMarkdownLinkUnresolvedTarget": "链接目标不存在:{targetPath}", + "diagnosticMarkdownLinkUnresolvedAnchor": "锚点“{anchor}”不存在。", + "diagnosticMarkdownImageMissingAlt": "图像“{destination}”缺少替代文本。", + "diagnosticMarkdownImageMissingFile": "图像不存在:{destination}", + "diagnosticInvalidXml": "无效的 XML:{message}", + "diagnosticWritersideConfigInvalidRoot": "writerside.cfg 根元素必须是 。", + "diagnosticWritersideConfigMissingSnippetsSrc": "snippets 声明缺少 src。", + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups 声明缺少 src。", + "diagnosticWritersideConfigInvalidKeymapsMode": "不支持的 keymaps 模式:{mode}", + "diagnosticWritersideConfigMissingInstanceSrc": "instance 声明缺少 src。", + "diagnosticWritersideConfigMissingInstance": "writerside.cfg 未注册实例。", + "diagnosticWritersideTreeInvalidRoot": ".tree 根元素必须是 。", + "diagnosticWritersideTreeMissingId": "实例配置文件缺少 id。", + "diagnosticWritersideTreeIdMismatch": "树文件名(不含扩展名)与实例 ID“{id}”不匹配。", + "diagnosticWritersideTreeMissingStartPage": "非库实例缺少 start-page。", + "diagnosticWritersideStartPageMissing": "起始页“{startPage}”不存在。", + "diagnosticWritersideTreeDuplicateTopic": "主题“{topic}”在此实例目录中出现多次。", + "diagnosticWritersideVariableMalformedDeclaration": "变量声明必须包含名称和值。", + "diagnosticWritersideVariableDuplicateName": "变量“{name}”被声明了多次。", + "diagnosticWritersideCategoryMissingId": "类别缺少 id。", + "diagnosticWritersideCategoryDuplicateId": "类别“{id}”被声明了多次。", + "diagnosticWritersideCategoryDuplicateOrder": "类别顺序“{order}”被声明了多次。", + "diagnosticWritersideTopicInvalidRoot": ".topic 根元素必须是 。", + "diagnosticWritersideTopicMissingRootId": "XML 主题缺少根 id。", + "diagnosticWritersideTopicRootIdMismatch": "XML 主题根 ID“{id}”必须与文件名“{expectedId}”匹配。", + "diagnosticWritersideTopicDuplicateElementId": "元素 ID“{elementId}”出现多次。", + "diagnosticWritersideTopicAnchorMissingHref": " 缺少 href。", + "diagnosticWritersideConfigMissing": "Writerside 模式需要 writerside.cfg。", + "diagnosticWritersideConfigMissingBuildConfigDirectory": "配置的构建配置目录不存在:{relativePath}", + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "配置的 API 规范目录不存在:{relativePath}", + "diagnosticWritersideConfigMissingSnippetsDirectory": "配置的 snippets 目录不存在:{relativePath}", + "diagnosticWritersideConfigMissingVarsFile": "配置的变量文件不存在:{relativePath}", + "diagnosticWritersideConfigMissingCategoriesFile": "配置的类别文件不存在:{relativePath}", + "diagnosticWritersideConfigMissingInstanceGroupsFile": "配置的实例组文件不存在:{relativePath}", + "diagnosticWritersideConfigMissingInstanceTree": "已注册的实例树“{source}”不存在。", + "diagnosticWritersideTopicReadFailed": "无法读取主题文件:{error}", + "diagnosticWritersideDefaultTopicsDirectoryMissing": "默认主题目录不存在:{relativePath}", + "diagnosticWritersideTopicsDirectoryMissing": "配置的主题目录不存在:{relativePath}", + "diagnosticWritersideImagesDirectoryMissing": "配置的图像目录不存在:{relativePath}", + "diagnosticWritersideTopicDuplicateId": "元素 ID“{id}”出现多次。", + "diagnosticWritersideTreeMissingTopic": "目录引用了缺失的主题“{topic}”。", + "diagnosticWritersideTreeInvalidHref": "外部 href“{href}”无效。", + "diagnosticWritersideVariableUnresolved": "变量“%{name}%”未声明。", + "diagnosticWritersideTopicLinkUnresolved": "主题链接“{destination}”无法解析。", + "diagnosticWritersideAnchorUnresolved": "“{targetName}”中不存在锚点“{anchor}”。", + "diagnosticWritersideIncludeMissingFrom": " 缺少 from。", + "diagnosticWritersideIncludeSourceMissing": "包含源“{from}”不存在。", + "diagnosticWritersideIncludeElementMissing": "“{from}”中不存在包含元素“{elementId}”。", + "diagnosticWritersideCategoryUnresolved": "seealso 类别“{ref}”未声明。", + "diagnosticWritersideTopicAmbiguousReference": "主题引用“{reference}”不明确。", + "diagnosticUnknown": "未知诊断信息:{code}", + "close": "关闭", + "git": "Git", + "gitDiff": "Git 差异", + "gitShowDiff": "显示差异", + "gitDiffHunkRange": "旧 {oldRange} → 新 {newRange}", + "gitDiffNoLines": "无行", + "gitUnavailableTitle": "Git 不可用", + "gitUnavailableMessage": "{reason, select, other{安装 Git,或配置 BusyMark 以使用可用的 Git 可执行文件。{reason}}}", + "gitTrustRequiredTitle": "信任此工作区以使用 Git?", + "gitTrustRequiredMessage": "Git 存储库可以通过 hook、过滤器和其他配置运行程序。在 BusyMark 读取存储库数据或启用 Git 操作前,请先信任此工作区。", + "gitTrustWorkspace": "信任工作区", + "gitNotRepositoryTitle": "不是 Git 存储库", + "gitNotRepositoryMessage": "此工作区不在 Git 存储库中。", + "gitInitializeRepository": "初始化存储库", + "gitDetachedHead": "分离的 HEAD", + "gitDetachedHeadAt": "分离于 {commit}", + "gitNoUpstream": "没有上游分支", + "gitAheadCount": "{count, plural, =1{1 个未推送的提交} other{{count} 个未推送的提交}}", + "gitBehindCount": "{count, plural, =1{1 个待拉取的提交} other{{count} 个待拉取的提交}}", + "gitClean": "干净", + "gitConflicts": "冲突", + "gitChanges": "更改", + "gitStaged": "已暂存", + "gitUnstaged": "未暂存", + "gitHistory": "历史记录", + "gitBranches": "分支", + "gitActions": "Git 操作", + "gitPull": "Pull", + "gitFetch": "Fetch", + "gitPush": "Push", + "gitCommit": "Commit", + "gitSelectForCommit": "暂存文件", + "gitRemoveFromCommit": "取消暂存文件", + "gitDiscard": "还原", + "gitOpenFile": "打开文件", + "gitMarkResolved": "标记为已解决", + "gitUntracked": "未跟踪", + "gitCommitMessage": "提交消息", + "gitCommitSelectedFiles": "选中的文件", + "gitCommitNoSelectedFiles": "提交前至少暂存一个文件。", + "gitStagedFileCount": "{count, plural, =1{1 个已暂存文件} other{{count} 个已暂存文件}}", + "gitOutsideWorkspace": "工作区之外", + "gitCommitMessageRequired": "请输入提交消息。", + "gitCreateBranch": "创建分支", + "gitNewBranch": "新分支", + "gitBranchName": "分支名称", + "gitSwitchBranch": "切换", + "gitNoChanges": "没有更改", + "gitNoHistory": "没有历史记录", + "gitNoBranches": "没有分支", + "gitNoDiff": "没有可显示的差异", + "gitBinaryFile": "二进制文件。BusyMark 不渲染二进制补丁。", + "gitBinaryFileInfo": "二进制文件({size} 字节)。BusyMark 不渲染二进制补丁。", + "gitUnsavedChangesBanner": "保存前不会包含未保存的编辑器更改。", + "gitConfirmDiscardTitle": "放弃 Git 更改?", + "gitConfirmDiscardTracked": "{count, plural, =1{选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。} other{选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。}}", + "gitConfirmDiscardUntracked": "{count, plural, =1{选中的未跟踪文件将被删除。} other{选中的未跟踪文件将被删除。}}", + "gitConfirmDiscardMixed": "{count, plural, =1{将根据其 Git 状态还原或删除选中的文件。} other{将根据其 Git 状态还原或删除选中的文件。}}", + "gitConfirmSwitchBranchTitle": "切换到 {branch}?", + "gitConfirmSwitchBranchMessage": "Git 切换分支后,BusyMark 将从磁盘重新加载工作区。", + "gitConfirmPushSetUpstreamTitle": "设置上游分支?", + "gitConfirmPushSetUpstreamMessage": "此分支没有上游分支。当只配置了一个远程仓库时,BusyMark 可以推送 {branch} 并设置其上游分支。", + "gitProjectHistory": "项目历史记录", + "gitFileHistory": "文件历史记录", + "gitFileHistoryRequiresOpenFile": "文件历史记录需要打开的 Markdown 文件。", + "gitLoadMore": "加载更多", + "gitChangesInCommit": "此提交中的更改", + "gitCompareWithCurrent": "与当前版本比较", + "gitRestoreVersion": "还原此版本", + "gitConfirmRestoreTitle": "还原此文件版本?", + "gitConfirmRestoreMessage": "BusyMark 将使用选中的已提交版本替换当前工作树中的文件。还原后的文件将保持未暂存状态。", + "gitCommitActions": "提交操作", + "gitResetCurrentBranchToHere": "将当前分支重置到此处…", + "gitResetCurrentBranchTitle": "将 {branch} 重置到 {commit}?", + "gitResetCurrentBranchMessage": "这会将分支 {branch} 移动到提交 {commit}。请选择 Git 更新索引和工作树的方式。", + "gitReset": "重置", + "gitResetModeSoft": "软", + "gitResetModeSoftDescription": "仅移动分支。保持索引和工作树不变;与选中提交之间的差异仍会保持暂存状态。", + "gitResetModeMixed": "混合", + "gitResetModeMixedDescription": "移动分支并重置索引。保持工作树不变,使差异处于未暂存状态。", + "gitResetModeHard": "硬", + "gitResetModeHardDescription": "移动分支并重置索引和工作树。已跟踪的更改将被放弃;造成阻碍的未跟踪文件可能会被删除。", + "gitResetModeKeep": "保留", + "gitResetModeKeepDescription": "移动分支并重置已跟踪文件,同时保留本地更改。如果这些更改与重置冲突,Git 将中止操作。", + "gitAdditionsDeletions": "+{additions} -{deletions}", + "fileActions": "文件操作", + "actions": "操作", + "gitStatusAdded": "已添加", + "gitStatusDeleted": "已删除", + "gitStatusRenamed": "已重命名", + "gitStatusCopied": "已复制", + "gitStatusUntracked": "未跟踪", + "gitStatusConflicted": "有冲突", + "gitStatusIgnored": "已忽略", + "gitStatusTypeChanged": "类型已更改", + "gitStatusModified": "已修改", + "gitStatusUnknown": "未知", + "gitErrorUnavailable": "Git 不可用。", + "gitErrorNotRepository": "此工作区不是 Git 存储库。", + "gitErrorUnsafePath": "BusyMark 阻止了不安全的 Git 路径。", + "gitErrorInvalidBranchName": "请输入有效的分支名称。", + "gitErrorNoRemote": "未配置 Git 远程仓库。", + "gitErrorNoUpstream": "未配置上游分支。", + "gitErrorMultipleRemotes": "配置了多个远程仓库。请在此 BusyMark 版本之外选择上游分支。", + "gitErrorDirtyWorkspace": "切换分支前,请保存或放弃 BusyMark 编辑器中的更改。", + "gitErrorResetDirtyWorkspace": "重置当前分支前,请保存或放弃 BusyMark 编辑器中的更改。", + "gitErrorRestoreStagedFile": "还原历史版本前,请取消暂存此文件。", + "gitErrorResetDetachedHead": "重置前请先检出一个分支。", + "gitErrorDiverged": "分支已发生分歧。请在此 BusyMark 版本之外解决合并或变基问题。", + "gitErrorAuthorIdentity": "Git 需要作者姓名和邮箱地址才能提交。", + "gitAuthorIdentityTitle": "Git 作者身份", + "gitAuthorIdentityMessage": "请输入 Git 应记录在提交中的身份信息。BusyMark 将保存它并重试此次提交。", + "gitAuthorName": "姓名", + "gitAuthorEmail": "Email", + "gitAuthorIdentityGlobal": "用于所有存储库", + "gitAuthorIdentityGlobalDescription": "作为 Snap 安装时,此设置适用于在 BusyMark 中打开的存储库。", + "gitSaveIdentityAndCommit": "保存并提交", + "gitErrorAuthentication": "Git 身份验证失败。", + "gitErrorNetwork": "Git 网络操作失败。", + "gitErrorConflict": "Git 报告存在未解决的冲突。", + "gitErrorCommandFailed": "Git 命令失败。", + "markdownAndHtml": "Markdown 和 HTML", + "markdownHtmlMarkdownBlocks": "Markdown 块", + "markdownHtmlMarkdownBlocksDescription": "Markdown 源代码和预览中支持的块结构。", + "markdownHtmlInlineFormatting": "行内 Markdown", + "markdownHtmlInlineFormattingDescription": "可出现在段落、列表项和表格单元格中的格式。", + "markdownHtmlRawHtmlBlocks": "原始 HTML 块", + "markdownHtmlRawHtmlBlocksDescription": "通过 BusyMark 预览组件渲染的安全块级 HTML 标签。", + "markdownHtmlRawHtmlInline": "原始 HTML 行内标签", + "markdownHtmlRawHtmlInlineDescription": "安全的行内 HTML 标签,渲染时不会显示字面标签。", + "markdownHtmlSafety": "安全规则", + "markdownHtmlSafetyDescription": "原始 HTML 会在预览前进行解析和清理。", + "markdownHtmlHeadings": "标题", + "markdownHtmlParagraphs": "段落", + "markdownHtmlLists": "列表", + "markdownHtmlHtmlContainers": "容器", + "markdownHtmlHtmlTextBlocks": "文本块", + "markdownHtmlHtmlFigures": "图和图像", + "markdownHtmlHtmlPreformatted": "预格式化代码", + "markdownHtmlHtmlDisclosure": "折叠块", + "markdownHtmlHtmlDescriptionLists": "描述列表", + "markdownHtmlHtmlFormattingTags": "格式标签", + "markdownHtmlHtmlInlineCodeTags": "行内代码标签", + "markdownHtmlHtmlNeutralInlineTags": "语义文本标签", + "markdownHtmlSanitizedPreview": "已清理的预览", + "markdownHtmlSanitizedPreviewDescription": "允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。", + "markdownHtmlSourcePreserved": "保留源代码", + "markdownHtmlSourcePreservedDescription": "未经编辑的原始 HTML 会按源文本原样保存。", + "markdownHtmlMarkdownInsideHtml": "HTML 内的 Markdown", + "markdownHtmlMarkdownInsideHtmlDescription": "原始 HTML 内的 Markdown 标记会按字面文本渲染。", + "markdownHtmlBlockedContent": "被阻止的活动内容", + "markdownHtmlBlockedContentDescription": "脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。", + "markdownHtmlSafeUrls": "仅允许安全 URL", + "markdownHtmlSafeUrlsDescription": "链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。", + "exportAsPdf": "导出为 PDF", + "pdfExportDescription": "选择页面布局,生成精美且自包含的 PDF。", + "pdfRemoteImagesNote": "导出过程中不会下载远程图像。有可用的本地图像时将包含它们。", + "pdfPageSize": "页面大小", + "pdfPageSizeA4": "A4", + "pdfPageSizeLetter": "Letter", + "pdfOrientation": "方向", + "pdfPortrait": "纵向", + "pdfLandscape": "横向", + "pdfMargins": "页边距", + "pdfMarginNarrow": "窄", + "pdfMarginNormal": "普通", + "pdfMarginWide": "宽", + "pdfIncludePageNumbers": "包含页码", + "export": "导出", + "exportingPdf": "正在导出 PDF…", + "fileTypePdf": "PDF 文档", + "pdfExported": "已导出 {fileName}。", + "pdfExportedWithWarnings": "已导出 {fileName},包含 {count} 条警告。", + "pdfExportUnavailable": "缺少 PDF 导出组件。请重新安装 BusyMark 后重试。", + "pdfExportTimedOut": "PDF 导出耗时过长,已停止。", + "pdfExportFailed": "BusyMark 无法将此文档导出为 PDF。", + "visualizationRendering": "正在渲染…", + "visualizationStale": "正在显示上次有效的渲染结果", + "visualizationShowSource": "显示源代码", + "visualizationShowRender": "显示渲染结果", + "visualizationFitWidth": "适应宽度", + "visualizationSaveImage": "保存图像", + "visualizationCopyImage": "复制图像", + "visualizationImageCopied": "图像已复制", + "visualizationOpenApiReference": "打开 API 参考", + "visualizationValid": "有效", + "visualizationInvalid": "无效", + "visualizationServers": "服务器", + "visualizationPaths": "路径", + "visualizationOperations": "操作", + "visualizationTags": "标签", + "visualizationNoOperations": "没有匹配的操作", + "visualizationSearchOperations": "搜索操作", + "visualizationRenderFailed": "无法渲染此可视化内容。", + "visualizationRetry": "重试", + "visualizationSaved": "已保存 {fileName}", + "shortcutExportPdfDescription": "将当前文档或 Writerside 模块导出为 PDF。", + "instances": "实例", + "newInstance": "新建实例", + "newTocLibrary": "新建目录库", + "editInstance": "编辑实例", + "openTocFile": "打开目录文件", + "createInstance": "创建实例", + "createTocLibrary": "创建目录库", + "instanceContent": "内容", + "instanceContentSource": "创建来源", + "emptyInstance": "空实例", + "markdownFiles": "本地 Markdown 文件", + "chooseMarkdownFolder": "选择 Markdown 文件夹", + "errorWritersideInstanceImportSourceRequired": "选择包含 Markdown 文件的文件夹。", + "instanceAppearance": "外观", + "instanceColor": "图标颜色", + "instanceVersion": "版本", + "instanceVersionInherited": "此字段为空时,项目版本为 {version}。", + "instanceWebPath": "Web 路径", + "instanceStatus": "状态", + "instanceStatusRelease": "发布", + "instanceStatusEap": "抢先体验", + "instanceStatusDeprecated": "已弃用", + "allowSearchEngineIndexing": "允许搜索引擎建立索引", + "allowSearchEngineIndexingDescription": "允许外部搜索引擎为此输出建立索引。", + "offlineArtifact": "离线构件", + "offlineArtifactDescription": "捆绑资源,使构建的文档可以自包含。", + "instanceOutputSettings": "输出设置", + "markdownImportSource": "Markdown 源", + "markdownImportFiles": "Markdown 文件", + "selectNone": "全部取消选择", + "markdownFilesFound": "找到 {count} 个 Markdown 文件", + "noMarkdownFilesFound": "在此目录中未找到 Markdown 文件。", + "copyReferencedMedia": "复制引用的媒体", + "copyReferencedMediaDescription": "复制选中文件引用的本地图像和视频,同时保留相对路径。", + "instanceIdRenameWarningTitle": "重命名实例 ID?", + "instanceIdRenameWarning": "BusyMark 将重命名 .tree 文件,并将 Writerside 项目引用从“{oldId}”更新为“{newId}”。发布脚本不会更改,必须单独更新。", + "renameAndUpdateReferences": "重命名并更新引用", + "tocLibraryDescription": "目录库用于存储可复用的节,不会生成自己的输出。", + "defaultTocLibraryName": "共享目录", + "instanceColorAutomatic": "自动", + "instanceColorBlue": "蓝色", + "instanceColorGreen": "绿色", + "instanceColorOrange": "橙色", + "instanceColorPurple": "紫色", + "instanceColorRed": "红色", + "instanceColorTeal": "青绿色", + "instanceColorYellow": "黄色", + "errorWritersideInstanceNameRequired": "请输入实例名称。", + "errorWritersideInstanceIdExists": "已存在 ID 为“{id}”的实例。", + "errorWritersideInstanceTreeExists": "实例树已存在:{path}", + "errorWritersideInstanceImportSourceMissing": "Markdown 源目录不存在:{path}", + "errorWritersideInstanceImportSelectionRequired": "请选择至少一个 Markdown 文件进行导入。", + "errorWritersideInstanceImportFileInvalid": "选中的源中有一个不是可读取的 Markdown 文件:{path}", + "errorWritersideInstanceImportTargetExists": "导入将覆盖现有项目文件:{path}", + "errorWritersideInstanceFilesChanged": "实例文件已在磁盘上发生变化。请查看后重试。", + "errorWritersideInstanceRollbackFailed": "BusyMark 无法完全回滚实例更改。请在继续前查看这些文件:{paths}", + "errorWritersideInstanceLibraryImport": "目录库无法导入 Markdown 主题。", + "errorWritersideInstanceWebPathInvalid": "Web 路径必须为单行文本。", + "errorWritersideInstanceConfigurationInvalid": "Writerside 实例配置无效。请修正其诊断信息后重试。", + "errorWritersideInstanceTemporaryFile": "BusyMark 无法安全暂存实例更改。", + "diagnosticWritersideTreeInvalidStatus": "未知的实例状态“{status}”。请使用 release、eap 或 deprecated。", + "diagnosticWritersideDuplicateInstanceId": "实例 ID“{id}”被多个树文件使用。", + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml 必须包含 根元素。", + "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} 值“{value}”必须为 true 或 false。", + "diagnosticWritersideBuildProfileMissingInstance": " 元素必须指定实例 ID。", + "diagnosticWritersideTreeInvalidInclude": "树中的 必须同时指定 from 和 element-id。", + "diagnosticWritersideTreeMissingSnippetId": "树中的 必须指定 id。", + "diagnosticWritersideTreeInvalidCrossInstanceReference": "跨实例目录引用必须同时指定 ref 和 in。", + "diagnosticWritersideTreeConflictingTargets": "目录元素不能同时指向多个主题、引用、链接或重定向。", + "diagnosticWritersideTreeDuplicateElementId": "树元素 ID“{id}”被声明了多次。", + "diagnosticWritersideInstanceGroupsInvalidRoot": "实例组文件必须包含 根元素。", + "diagnosticWritersideInstanceGroupInvalid": "实例组必须指定非空 ID 和实例列表。", + "diagnosticWritersideInstanceGroupDuplicateId": "实例组 ID“{id}”被声明了多次。", + "diagnosticWritersideExternalTreeInclude": "目录包含项“{source}#{id}”属于外部模块“{origin}”,无法在此工作区中展开。", + "diagnosticWritersideTreeIncludeElementMissing": "已注册树“{source}”中不存在树元素“{id}”。", + "diagnosticWritersideTreeCircularInclude": "树包含项“{source}#{id}”创建了循环。", + "diagnosticWritersideUnknownInstanceGroup": "实例条件引用了未知组“@{group}”。", + "diagnosticWritersideReferenceInstanceMissing": "跨实例引用指向未知实例“{instance}”。", + "diagnosticWritersideReferenceTopicMissing": "主题“{topic}”不在被引用的实例“{instance}”中。", + "download": "下载", + "exportWritersideAsPdf": "将 Writerside 导出为 PDF", + "writersidePdfContent": "导出内容", + "writersidePdfPage": "页面", + "exportingWritersidePdf": "正在导出 Writerside PDF…", + "ai": "AI", + "aiLocalOllama": "本地 Ollama", + "aiDisabled": "已禁用", + "aiLocalOnlyDescription": "AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。", + "aiProvider": "AI 提供商", + "aiDefaultProvider": "默认提供商", + "aiConfigureProvider": "配置提供商", + "aiChooseProvider": "选择 AI 提供商", + "aiOllamaEndpoint": "Ollama 端点", + "aiOllamaModel": "Ollama 模型", + "aiTestConnection": "测试连接", + "aiTestingConnection": "正在测试…", + "aiConnectionReady": "已连接。找到 {count} 个已安装模型。", + "aiNoModels": "未选择模型。", + "aiConnectionFailed": "BusyMark 无法验证 AI 文本生成。", + "aiConfigureFirst": "请先在设置 → AI 中启用 AI 提供商并验证模型。", + "aiEditWithAi": "使用 AI 编辑", + "aiRefineWithAi": "使用 AI 优化", + "aiInstruction": "指令", + "aiChangeTarget": "可更改内容", + "aiSharedContext": "与 AI 共享的上下文", + "aiTargetSelection": "选中的内容", + "aiTargetInsertAfterBlock": "插入到当前块之后", + "aiTargetCurrentBlock": "当前块", + "aiTargetCurrentSection": "当前节", + "aiTargetCompleteDocument": "完整文档", + "aiContextNone": "没有文档上下文", + "aiContextSelection": "选中的内容", + "aiContextCurrentBlock": "当前块", + "aiContextCurrentSection": "当前节", + "aiContextCompleteDocument": "完整文档", + "aiGenerating": "正在生成建议…", + "aiProposal": "AI 建议", + "aiGenerateProposal": "生成建议", + "aiContextDisclosure": "所选提供商将接收显示上下文中的 {count} 个字符。", + "aiOriginal": "原始内容", + "aiSuggested": "建议内容", + "aiApplyProposal": "应用建议", + "aiTokenUsage": "输入 token:{input} · 输出 token:{output}", + "aiStaleProposal": "生成此建议期间文档发生了变化。请重新执行操作。", + "gitAiStagedChangesChanged": "生成此提交消息期间,已暂存的更改发生了变化。请重新执行操作。", + "aiViewContext": "查看已发送的上下文", + "aiReviewExactContent": "查看确切内容", + "aiContentToChange": "要更改的内容", + "aiContentSentToAi": "发送给 AI 的内容", + "aiApiKey": "API 密钥", + "aiApiKeyStoredHint": "密钥已存储在系统凭据存储中", + "aiApiKeyEnterHint": "输入提供商 API 密钥", + "aiReplaceApiKey": "替换 API 密钥", + "aiSaveApiKey": "安全保存 API 密钥", + "aiRemoveApiKey": "移除已保存的 API 密钥", + "aiCredentialSaved": "API 密钥已保存到系统凭据存储中。", + "aiCredentialRemoved": "已移除保存的 API 密钥。", + "aiModelRouting": "模型路由", + "aiAutomaticRouting": "按任务自动选择", + "aiFixedModelRouting": "使用选中的模型", + "aiPreferredModel": "首选模型", + "aiModel": "模型", + "aiUsageThisMonth": "{requests} 个请求 · {input} 个输入 token · {output} 个输出 token", + "aiCloudConsentTitle": "将内容发送给 {provider}?", + "aiCloudConsentEnable": "启用 {provider}", + "aiCloudConsentMessage": "只会发送每个 AI 审核对话框中显示的内容。请求不保存状态,建议需要审核,API 密钥存储在 Linux 系统凭据存储中。", + "aiCloudConsentRequired": "请先在设置 → AI 中确认与 {provider} 共享数据。", + "aiGenerationVerified": "已通过 {model} 验证生成能力。有 {count} 个兼容模型可用。", + "aiColdStartObserved": "检测到本地模型冷启动。", + "aiNoCompatibleModels": "没有可用的兼容文本生成模型。", + "aiEnableProvider": "请先启用 AI 提供商。", + "aiDraftCommitMessage": "起草提交消息", + "aiDrafting": "正在起草…", + "aiDraftWithAi": "使用 AI 起草", + "generateOrUpdateMarkdownToc": "生成/更新目录", + "markdownTocTitle": "目录", + "markdownTocUpdated": "目录已更新,包含 {count} 个条目。", + "markdownTocNoHeadings": "请先添加至少一个节标题,再生成目录。", + "markdownTocMalformedMarkers": "BusyMark 目录标记缺失、重复或顺序错误。", + "diagnosticMarkdownHeadingSkippedLevel": "标题级别 {level} 跟在级别 {previousLevel} 之后;请检查节的嵌套结构。", + "diagnosticMarkdownLinkEmptyText": "链接文本为空;请提供能描述其用途的可访问名称。", + "diagnosticMarkdownLinkReviewText": "请检查链接文本“{text}”是否在上下文中描述了其用途。", + "diagnosticMarkdownTableEmptyHeader": "表头单元格必须标识其列;请补全每个空表头。", + "mathRenderFailed": "无法渲染数学表达式。", + "inlineMath": "行内数学", + "displayMath": "显示数学" +} diff --git a/lib/l10n/app_zh_CN.arb b/lib/l10n/app_zh_CN.arb new file mode 100644 index 00000000..48a8d688 --- /dev/null +++ b/lib/l10n/app_zh_CN.arb @@ -0,0 +1,4612 @@ +{ + "@@locale": "zh_CN", + "appTitle": "BusyMark", + "@appTitle": { + "description": "Application name." + }, + "appSubtitle": "Markdown 文件和兼容 Writerside 的文档项目编辑器。", + "@appSubtitle": { + "description": "Short application description." + }, + "aboutBusyMark": "关于 BusyMark", + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, + "aboutTagline": "Markdown 和 Writerside 编辑器", + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, + "aboutLicenseLabel": "许可证", + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, + "aboutWebsite": "网站", + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, + "aboutSourceCode": "源代码", + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, + "reportIssue": "报告问题", + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, + "feedbackCategory": "类别", + "@feedbackCategory": { + "description": "Feedback category field label." + }, + "feedbackChooseCategory": "选择类别", + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, + "feedbackCategoryProblem": "问题或错误", + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, + "feedbackCategoryFeature": "功能请求", + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, + "feedbackCategoryPrivacySecurity": "隐私或安全问题", + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, + "feedbackCategoryUsability": "可用性问题", + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, + "feedbackCategoryOther": "其他", + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, + "feedbackSubject": "主题", + "@feedbackSubject": { + "description": "Feedback subject field label." + }, + "feedbackMessage": "详细信息", + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "回复邮箱(可选)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, + "feedbackIncludeTechnicalDetails": "包含技术详细信息", + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, + "feedbackTechnicalDetailsDisclosure": "启用后,此选项仅会添加您的 Linux 操作系统版本和 BusyMark 应用语言。不会附加日志、文件、账户数据或其他诊断信息。", + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, + "feedbackSubmit": "提交", + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, + "feedbackSubmitting": "正在提交…", + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, + "feedbackCategoryRequired": "请选择类别。", + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, + "feedbackSubjectLength": "主题必须包含 3 到 120 个字符。", + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, + "feedbackMessageLength": "信息必须包含 10 到 5,000 个字符。", + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, + "feedbackReplyEmailInvalid": "请输入有效的邮箱地址,或将此字段留空。", + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, + "feedbackConnectionFailure": "BusyMark 无法连接。请检查网络连接后重试。", + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, + "feedbackTimeoutFailure": "请求超时。请重试。", + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, + "feedbackRateLimitedFailure": "此连接发送的报告过多。请稍候再试。", + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, + "feedbackRejectedFailure": "服务器拒绝了此报告。请检查表单字段后重试。", + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, + "feedbackServerFailure": "服务器无法接收此报告。请稍后重试。", + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, + "feedbackSuccess": "反馈已发送。参考 ID:{id}", + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "advanced": "高级", + "@advanced": { + "description": "Settings section title for advanced actions." + }, + "addToGit": "添加到 Git", + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, + "appearance": "外观", + "@appearance": { + "description": "Settings section title for appearance options." + }, + "apply": "应用", + "@apply": { + "description": "Button label that applies a dialog change." + }, + "back": "返回", + "@back": { + "description": "Tooltip for navigating back." + }, + "bottomLeft": "左下", + "@bottomLeft": { + "description": "Editing button position option." + }, + "bottomRight": "右下", + "@bottomRight": { + "description": "Editing button position option." + }, + "cancel": "取消", + "@cancel": { + "description": "Cancel button label." + }, + "choose": "选择", + "@choose": { + "description": "Button label for choosing a file or path." + }, + "chooseLocation": "选择位置", + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, + "copy": "复制", + "@copy": { + "description": "Copy command label." + }, + "copyName": "复制名称", + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, + "copyFileName": "复制文件名", + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, + "copyPath": "复制路径", + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, + "create": "创建", + "@create": { + "description": "Create action label." + }, + "creating": "正在创建…", + "@creating": { + "description": "Progress label while a project or topic is being created." + }, + "cut": "剪切", + "@cut": { + "description": "Cut command label." + }, + "promoteSection": "提升节级别", + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, + "demoteSection": "降低节级别", + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, + "moveSectionUp": "上移节", + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, + "moveSectionDown": "下移节", + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, + "confirmDeleteSectionTitle": "删除此节?", + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, + "confirmDeleteSectionMessage": "删除“{name}”及其节中的全部内容?此操作无法撤销。", + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "darkTheme": "深色", + "@darkTheme": { + "description": "Dark theme option." + }, + "delete": "删除", + "@delete": { + "description": "Delete command label." + }, + "discard": "放弃", + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, + "editor": "编辑器", + "@editor": { + "description": "Editor view label." + }, + "file": "文件", + "@file": { + "description": "Generic file kind label." + }, + "fileHistory": "文件历史记录", + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, + "folder": "文件夹", + "@folder": { + "description": "Folder kind label." + }, + "insert": "插入", + "@insert": { + "description": "Insert button label." + }, + "keyboardShortcuts": "键盘快捷键", + "commandPalette": "命令面板", + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, + "commandPaletteHint": "输入命令", + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, + "commandPaletteEmpty": "没有匹配的命令", + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, + "commandUnavailableInContext": "当前编辑器上下文中无法使用此命令", + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, + "lightTheme": "浅色", + "@lightTheme": { + "description": "Light theme option." + }, + "mainMenu": "主菜单", + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, + "fullScreen": "全屏", + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, + "markdown": "Markdown", + "@markdown": { + "description": "Markdown format label." + }, + "open": "打开", + "@open": { + "description": "Open action label." + }, + "openInFiles": "在文件中打开", + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, + "pathActions": "路径操作", + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, + "outline": "大纲", + "@outline": { + "description": "Outline sidebar tab label." + }, + "overwrite": "覆盖", + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, + "paste": "粘贴", + "@paste": { + "description": "Paste command label." + }, + "pasteWithoutFormatting": "粘贴为无格式文本", + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, + "reading": "阅读", + "@reading": { + "description": "Reading view label." + }, + "removeFromRecent": "从最近使用记录中移除", + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, + "recent": "最近使用", + "@recent": { + "description": "Recent workspaces section title." + }, + "redo": "重做", + "@redo": { + "description": "Redo command label." + }, + "save": "保存", + "@save": { + "description": "Save action label." + }, + "search": "搜索", + "@search": { + "description": "Search action label and field hint." + }, + "selectAll": "全选", + "@selectAll": { + "description": "Select all command label." + }, + "settings": "设置", + "@settings": { + "description": "Settings action label." + }, + "source": "源代码", + "@source": { + "description": "Source view label." + }, + "split": "拆分", + "@split": { + "description": "Split view label." + }, + "systemTheme": "系统", + "@systemTheme": { + "description": "System theme option." + }, + "theme": "主题", + "@theme": { + "description": "Theme setting label." + }, + "appLanguage": "语言", + "@appLanguage": { + "description": "Application language setting label." + }, + "systemLanguage": "系统", + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, + "languageEnglish": "English", + "@languageEnglish": { + "description": "Language selector option for English." + }, + "languageGerman": "Deutsch", + "@languageGerman": { + "description": "Language selector option for German." + }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, + "languageItalian": "Italiano", + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, + "languageFrench": "Français", + "@languageFrench": { + "description": "Language selector option for French." + }, + "languageRussian": "Русский", + "@languageRussian": { + "description": "Language selector option for Russian." + }, + "languageUkrainian": "Українська", + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, + "languagePolish": "Polski", + "@languagePolish": { + "description": "Language selector option for Polish." + }, + "languageSpanish": "Español", + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, + "languagePortuguese": "Português", + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, + "languageArabic": "العربية", + "@languageArabic": { + "description": "Language selector option for Arabic." + }, + "languagePersian": "فارسی", + "@languagePersian": { + "description": "Language selector option for Persian." + }, + "languageHindi": "हिन्दी", + "@languageHindi": { + "description": "Language selector option for Hindi." + }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, + "languageEstonian": "Eesti", + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": {"description": "Language selector option for Japanese."}, + "languageKorean": "한국어", + "@languageKorean": {"description": "Language selector option for Korean."}, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, + "toggleSidebar": "侧边栏面板", + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, + "topLeft": "左上", + "@topLeft": { + "description": "Editing button position option." + }, + "topRight": "右上", + "@topRight": { + "description": "Editing button position option." + }, + "undo": "撤销", + "@undo": { + "description": "Undo command label." + }, + "validate": "验证", + "@validate": { + "description": "Validate action label." + }, + "validation": "验证", + "@validation": { + "description": "Settings section title for validation options." + }, + "viewMode": "视图模式", + "@viewMode": { + "description": "Native header bar view mode control label." + }, + "welcome": "欢迎", + "@welcome": { + "description": "Welcome screen label and tooltip." + }, + "writerside": "Writerside", + "@writerside": { + "description": "Writerside workspace kind label." + }, + "xml": "XML", + "@xml": { + "description": "XML format label." + }, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, + "fileTypeImages": "图像", + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, + "openMarkdownFile": "打开 Markdown 文件", + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, + "markdownFileExtensions": ".md 或 .markdown", + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, + "openFolderOrWritersideProject": "打开文件夹或 Writerside 项目", + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, + "markdownFolderOrWritersideProject": "Markdown 文件夹或兼容 Writerside 的项目", + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, + "noOpenFile": "没有打开的文件", + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, + "shortcutDeleteTreeItemDescription": "删除选中的文件项,或从目录中移除选中的主题", + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, + "shortcutGroupGeneral": "常规", + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, + "shortcutNewDocument": "创建", + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, + "shortcutNewDocumentDescription": "创建 Markdown 文件或 Writerside 项目", + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, + "shortcutOpenDescription": "打开 Markdown 文件、文件夹或 Writerside 项目", + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, + "shortcutSaveDescription": "保存当前文档", + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, + "shortcutSearchDescription": "搜索当前工作区", + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, + "shortcutKeyboardShortcutsDescription": "显示此键盘快捷键参考", + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, + "shortcutMarkdownAndHtmlDescription": "打开 Markdown 和 HTML 参考", + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, + "shortcutSettingsDescription": "打开 BusyMark 设置", + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, + "shortcutNextTab": "下一个标签页", + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, + "shortcutNextTabDescription": "移至下一个打开的标签页", + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, + "shortcutPreviousTab": "上一个标签页", + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, + "shortcutPreviousTabDescription": "移至上一个打开的标签页", + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, + "shortcutCloseTab": "关闭标签页", + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, + "shortcutCloseTabDescription": "关闭当前标签页", + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, + "shortcutCloseAllTabs": "关闭所有标签页", + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, + "shortcutCloseAllTabsDescription": "关闭所有打开的标签页", + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, + "shortcutGroupTextEditing": "文本编辑", + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, + "shortcutSelectAllDescription": "在源代码模式下选择全部文本;在编辑器模式下按两次以选择所有块", + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, + "shortcutCutDescription": "剪切选中的文本", + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, + "shortcutCopyDescription": "复制选中的文本", + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, + "shortcutPasteDescription": "从剪贴板粘贴", + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, + "shortcutPastePlainTextDescription": "粘贴剪贴板中的无格式文本", + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, + "shortcutUndoDescription": "撤销上次编辑", + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, + "shortcutRedoDescription": "重做上次撤销的编辑", + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, + "shortcutInsertIndentation": "插入缩进", + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, + "shortcutInsertIndentationDescription": "在光标处插入缩进", + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, + "shortcutOutdentSource": "减少源代码缩进", + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, + "shortcutOutdentSourceDescription": "在源代码模式下减少一级缩进", + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, + "shortcutEscape": "关闭搜索或清除块选择", + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, + "shortcutEscapeDescription": "关闭工作区搜索,或在编辑器模式下清除块选择", + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, + "shortcutGroupFormatting": "格式", + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, + "shortcutBoldDescription": "切换选中文本的粗体", + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, + "shortcutItalicDescription": "切换选中文本的斜体", + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, + "shortcutUnderlineDescription": "切换选中文本的下划线", + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, + "shortcutLinkDescription": "插入或编辑链接", + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, + "shortcutInlineCodeDescription": "切换选中文本的行内代码格式", + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, + "shortcutStrikethroughDescription": "切换选中文本的删除线", + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, + "shortcutGroupBlocks": "块", + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, + "shortcutParagraphDescription": "将当前块设为段落", + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, + "shortcutHeading1Description": "将当前块设为标题 1", + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, + "shortcutHeading2Description": "将当前块设为标题 2", + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, + "shortcutHeading3Description": "将当前块设为标题 3", + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, + "shortcutHeading4Description": "将当前块设为标题 4", + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, + "shortcutHeading5Description": "将当前块设为标题 5", + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, + "shortcutHeading6Description": "将当前块设为标题 6", + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, + "shortcutGroupLists": "列表", + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, + "numberedList": "编号列表", + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, + "shortcutNumberedListDescription": "切换编号列表格式", + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, + "bulletedList": "项目符号列表", + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, + "shortcutBulletedListDescription": "切换项目符号列表格式", + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, + "checklist": "检查清单", + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, + "shortcutChecklistDescription": "切换检查清单格式", + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, + "shortcutGroupSidebar": "侧边栏", + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, + "sidebarViewMenu": "侧边栏视图", + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, + "createMarkdownFile": "创建 Markdown 文件", + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, + "createMarkdownFileDescription": "开始创建未保存的本地 Markdown 文档", + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, + "createWritersideProject": "创建 Writerside 项目", + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, + "createWritersideProjectDescription": "开始创建本地兼容 Writerside 的项目", + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, + "defaultProjectName": "文档", + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, + "defaultInstanceName": "用户指南", + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, + "defaultStartTopicTitle": "开始使用", + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, + "projectName": "项目名称", + "@projectName": { + "description": "Create project dialog field label." + }, + "directoryName": "目录名称", + "@directoryName": { + "description": "Create project dialog field label." + }, + "instanceName": "实例名称", + "@instanceName": { + "description": "Create project dialog field label." + }, + "instanceId": "实例 ID", + "@instanceId": { + "description": "Create project dialog field label." + }, + "startTopicTitle": "起始主题标题", + "@startTopicTitle": { + "description": "Create project dialog field label." + }, + "location": "位置", + "@location": { + "description": "Create dialog location section label." + }, + "projectNameRequired": "项目名称为必填项。", + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, + "directoryNameRequired": "目录名称为必填项。", + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, + "useSingleSafeDirectoryName": "使用单一且安全的目录名称。", + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, + "useLowercaseIdentifier": "使用仅包含小写字母、数字、下划线或连字符的小写标识符。", + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, + "startTopicTitleRequired": "起始主题标题为必填项。", + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, + "createWritersideProjectFailed": "无法创建 Writerside 项目。", + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, + "settingsTitle": "BusyMark 设置", + "@settingsTitle": { + "description": "Settings screen title." + }, + "autoSave": "自动保存", + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, + "autoSaveDescription": "在短暂空闲后自动保存文件更改。", + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, + "wordWrap": "自动换行", + "@wordWrap": { + "description": "Word wrap setting label." + }, + "editorFontSize": "编辑器字体大小", + "@editorFontSize": { + "description": "Editor font size setting label." + }, + "validateOnEdit": "编辑时验证", + "@validateOnEdit": { + "description": "Validation setting label." + }, + "clearRecentWorkspaces": "清除最近使用的工作区", + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, + "editingButtonsPosition": "编辑按钮位置", + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, + "editingButtonsPositionDescription": "选择浮动 WYSIWYG 编辑按钮的显示位置。", + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, + "editingButtonsDirection": "编辑按钮方向", + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, + "editingButtonsDirectionDescription": "选择水平或垂直排列浮动 WYSIWYG 编辑按钮。", + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, + "horizontal": "水平", + "@horizontal": { + "description": "Editing button direction option." + }, + "vertical": "垂直", + "@vertical": { + "description": "Editing button direction option." + }, + "privacy": "隐私", + "@privacy": { + "description": "Settings section title for privacy options." + }, + "allowRemoteImages": "加载远程图像", + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, + "allowRemoteImagesDescription": "允许 Markdown 预览和编辑器从 http 和 https URL 加载图像。", + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, + "clearRemoteImagePermissions": "清除远程图像权限", + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, + "clearRemoteImagePermissionsDescription": "忘记已获准加载远程图像的工作区。", + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, + "clearGitWorkspaceTrust": "清除受信任的 Git 工作区", + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, + "clearGitWorkspaceTrustDescription": "为之前受信任的工作区启用 Git 功能前先进行询问。", + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, + "settingsWindowSectionTitle": "窗口", + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, + "settingsReopenWorkspaceOnStartupTitle": "启动时重新打开上次的工作区", + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, + "settingsReopenWorkspaceOnStartupDescription": "BusyMark 启动时打开上次会话中的工作区和标签页。", + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, + "settingsConfirmCloseWithUnsavedChangesTitle": "有未保存更改时关闭前进行确认", + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, + "settingsConfirmCloseWithUnsavedChangesDescription": "文档有未保存更改时,关闭 BusyMark 前先进行询问。", + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, + "closeUnsavedChangesTitle": "未保存的更改", + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, + "closeUnsavedChangesSingleMessage": "此文档有未保存的更改。关闭 BusyMark 前保存更改?", + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{关闭 BusyMark 前保存更改?} =1{有 1 个文档包含未保存的更改。关闭 BusyMark 前保存更改?} other{有 {count} 个文档包含未保存的更改。关闭 BusyMark 前保存更改?}}", + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "closeUnsavedChangesCancel": "取消", + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesDiscard": "放弃", + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, + "closeUnsavedChangesSave": "保存", + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, + "currentFile": "当前文件", + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, + "unsavedChanges": "未保存的更改", + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, + "unsavedChangesMessage": "{fileName} 中有未保存的更改。继续前保存这些更改?", + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "unsavedChangesMultipleMessage": "{count, plural, =1{有 1 个文档包含未保存的更改。继续前保存它?} other{有 {count} 个文档包含未保存的更改。继续前保存它们?}}", + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "fileChangedOnDisk": "文件已在磁盘上更改", + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, + "fileChangedOnDiskMessage": "自打开此文件后,它已在磁盘上发生更改。覆盖它?", + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, + "untitledMarkdownFileName": "未命名.md", + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, + "unorderedList": "无序列表", + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, + "orderedList": "有序列表", + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, + "taskList": "任务列表", + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, + "toggleTaskChecked": "切换任务选中状态", + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, + "indentListItem": "增加列表项缩进", + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, + "outdentListItem": "减少列表项缩进", + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, + "blockquote": "引用块", + "@blockquote": { + "description": "Blockquote command label." + }, + "codeBlock": "代码块", + "@codeBlock": { + "description": "Code block command or preview label." + }, + "codeBlockLanguage": "代码块语言", + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, + "image": "图像", + "video": "视频", + "openVideo": "播放视频", + "pauseVideo": "暂停视频", + "videoUnavailable": "视频不可用", + "videoPreview": "视频预览", + "diagnosticWritersideVideoMissingSource": "视频缺少 src 属性。", + "diagnosticWritersideVideoUnsupportedSource": "不支持的视频源:{source}", + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideVideoMissingFile": "视频文件不存在:{source}", + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideVideoMissingPreview": "视频预览图像不存在:{preview}", + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, + "@image": { + "description": "Image command and document kind label." + }, + "inlineImage": "行内图像", + "@inlineImage": { + "description": "Inline image command label." + }, + "table": "表格", + "@table": { + "description": "Table command label." + }, + "htmlBlock": "HTML 块", + "@htmlBlock": { + "description": "HTML block command label." + }, + "htmlContentDefault": "HTML 内容", + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, + "shortcutHtmlBlockDescription": "插入或编辑 HTML 块", + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, + "renderedHtml": "已渲染的 HTML", + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, + "editHtml": "编辑 HTML", + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, + "htmlSource": "HTML 源代码", + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, + "thematicBreak": "分隔线", + "@thematicBreak": { + "description": "Thematic break command label." + }, + "bold": "粗体", + "@bold": { + "description": "Bold command label." + }, + "italic": "斜体", + "@italic": { + "description": "Italic command label." + }, + "underline": "下划线", + "@underline": { + "description": "Underline command label." + }, + "strikethrough": "删除线", + "@strikethrough": { + "description": "Strikethrough command label." + }, + "inlineCode": "行内代码", + "@inlineCode": { + "description": "Inline code command label." + }, + "link": "链接", + "@link": { + "description": "Link command and preview label." + }, + "hardLineBreak": "硬换行", + "@hardLineBreak": { + "description": "Hard line break command label." + }, + "textStyle": "文本样式", + "@textStyle": { + "description": "Text style menu tooltip." + }, + "paragraph": "段落", + "@paragraph": { + "description": "Paragraph style label." + }, + "heading1": "标题 1", + "@heading1": { + "description": "Heading 1 style label." + }, + "heading2": "标题 2", + "@heading2": { + "description": "Heading 2 style label." + }, + "heading3": "标题 3", + "@heading3": { + "description": "Heading 3 style label." + }, + "heading4": "标题 4", + "@heading4": { + "description": "Heading 4 style label." + }, + "heading5": "标题 5", + "@heading5": { + "description": "Heading 5 style label." + }, + "heading6": "标题 6", + "@heading6": { + "description": "Heading 6 style label." + }, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "deleteTable": "删除表格", + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, + "tableColumnNumber": "列 {columnNumber}", + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "insertColumnLeft": "在左侧插入列", + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, + "insertColumnRight": "在右侧插入列", + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, + "deleteColumn": "删除列", + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, + "tableAlignmentUnspecified": "对齐方式:未指定", + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, + "tableAlignmentLeft": "对齐方式:左对齐", + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, + "tableAlignmentCenter": "对齐方式:居中", + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, + "tableAlignmentRight": "对齐方式:右对齐", + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, + "tableRowNumber": "行 {rowNumber}", + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, + "insertRowAbove": "在上方插入行", + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, + "insertRowBelow": "在下方插入行", + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, + "deleteRow": "删除行", + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, + "tableHeaderHint": "标题", + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, + "tableCellHint": "单元格", + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, + "language": "语言", + "@language": { + "description": "Code block language field label." + }, + "hideEditingButtons": "隐藏编辑按钮", + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, + "showEditingButtons": "显示编辑按钮", + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, + "altText": "替代文本", + "@altText": { + "description": "Image alt text field label." + }, + "editorPlaceholderText": "文本", + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, + "editorPlaceholderCode": "代码", + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, + "editorPlaceholderAltText": "替代文本", + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, + "describeTheImage": "描述图像", + "@describeTheImage": { + "description": "Image alt text hint." + }, + "columns": "列", + "@columns": { + "description": "Table dialog columns field label." + }, + "rows": "行", + "@rows": { + "description": "Table dialog rows field label." + }, + "tableHeaderNumber": "标题 {columnNumber}", + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "tableCellDefault": "单元格", + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, + "noImageSource": "没有图像源", + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, + "remoteImageBlocked": "远程图像已阻止", + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, + "remoteImageBlockedTooltip": "选择是否允许 BusyMark 加载远程图像。", + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, + "remoteImagesBlockedTitle": "远程图像已阻止", + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, + "remoteImagesBlockedMessage": "本文档引用了来自互联网的图像。加载这些图像可能会向图像托管方泄露网络信息。", + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, + "loadRemoteImagesForWorkspace": "为此工作区加载", + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, + "alwaysLoadRemoteImages": "始终加载远程图像", + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, + "hideSidebar": "隐藏侧边栏面板", + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, + "showSidebar": "显示侧边栏面板", + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, + "showPreview": "显示预览", + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, + "hidePreview": "隐藏预览", + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, + "workspaceKindUnsavedMarkdown": "未保存的 Markdown 文件", + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, + "workspaceKindSingleMarkdown": "单个 Markdown 文件", + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, + "workspaceKindMarkdownFolder": "Markdown 文件夹", + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, + "workspaceKindWritersideModule": "Writerside 模块", + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, + "problems": "问题", + "@problems": { + "description": "Diagnostics dialog title." + }, + "diagnosticCount": "{count, plural, =0{没有诊断信息} =1{1 条诊断信息} other{{count} 条诊断信息}}", + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "files": "文件", + "@files": { + "description": "Files sidebar tab label." + }, + "toc": "目录", + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, + "tocActions": "目录操作", + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, + "markdownUnsaved": "Markdown - 未保存", + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, + "workspaceDetail": "{kind} - {count, plural, =1{1 个文件} other{{count} 个文件}}", + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "noFiles": "没有文件", + "@noFiles": { + "description": "Empty state shown when there are no files." + }, + "newFile": "新建文件", + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, + "noWritersideToc": "没有 Writerside 目录", + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, + "tocSection": "目录节", + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, + "newTopic": "新建主题", + "@newTopic": { + "description": "Create new Writerside topic action label." + }, + "newChildTopic": "新建子主题", + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, + "newSiblingTopic": "新建同级主题", + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, + "renameTopicFile": "重命名主题文件", + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, + "topicPlacement": "目录位置", + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, + "tocRoot": "位于目录根级别", + "@tocRoot": { + "description": "TOC placement option for the root level." + }, + "afterSelectedTopic": "位于选中主题之后", + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, + "insideSelectedTopic": "位于选中主题内", + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, + "pasteAfterTopic": "粘贴到主题之后", + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, + "pasteAsChildTopic": "粘贴为子主题", + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, + "removeFromToc": "从目录中移除", + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, + "confirmRemoveFromTocTitle": "从目录中移除?", + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, + "confirmRemoveFromTocMessage": "从此目录中移除 {name}?主题文件将被保留。", + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteTopicTitle": "删除主题文件?", + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, + "confirmDeleteTopicMessage": "删除 {name} 并从每个目录中移除它?此操作无法撤销。", + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "safeDeleteTopicFile": "安全删除主题文件…", + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, + "removeTocElement": "移除目录元素", + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, + "reviewUsages": "查看使用情况", + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, + "deleteTopicFile": "删除主题文件", + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, + "removeAction": "移除", + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, + "topicRemovalSummary": "从选中的实例中移除“{topic}”。主题文件将被保留。", + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "safeDeleteTopicSummary": "删除“{topic}”,并在整个 Writerside 项目中安全更新其引用。", + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "childTopicsPromoted": "{count, plural, =1{1 个子主题将上移一级。} other{{count} 个子主题将上移一级。}}", + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "topicIsStartPageRemovalWarning": "此主题被用作实例的起始页。请查看其使用情况,并在继续前指定其他起始页。", + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, + "topicUsagesCount": "使用情况({count})", + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noBreakingTopicUsages": "未找到会导致引用失效的引用。", + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, + "topicUsagesFound": "BusyMark 找到了以下对该主题的引用。", + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, + "topicUsageTocElements": "目录元素", + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, + "topicUsageStartPages": "起始页", + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, + "topicUsageTopicLinks": "主题链接", + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, + "topicUsageIncludes": "包含项", + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, + "usageCount": "{count, plural, =1{1 次使用} other{{count} 次使用}}", + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "refactoringOptions": "重构选项", + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, + "updateUsagesAutomatically": "自动更新使用情况", + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, + "updateUsagesAutomaticallyDescription": "移除目录引用和包含项,同时保留链接文本。", + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, + "manualUsageUpdatesRequired": "执行此重构前,某些使用情况需要手动更改。", + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, + "setRedirectTo": "设置重定向到", + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, + "noRedirectDescription": "不重定向旧的已发布页面。", + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, + "redirectTarget": "重定向目标", + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, + "remainingUsagesBlockRemoval": "请在继续前查看并更新剩余的使用情况,或在可用时启用自动更新。", + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, + "usagesOfTopic": "{topic} 的使用情况", + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "noUsagesFound": "未找到使用情况", + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, + "outsideSelectedInstance": "在选中的实例之外", + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, + "doRefactor": "执行重构", + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, + "orphanTopicTitle": "主题文件已不再使用", + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, + "keepTopicFile": "保留主题文件", + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, + "orphanTopicMessage": "“{topic}”在此 Writerside 项目中已不再使用。删除该文件,或保留它以供其他实例使用。", + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "defaultNewTopicTitle": "新主题", + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, + "topicTitle": "主题标题", + "@topicTitle": { + "description": "Create topic dialog field label." + }, + "fileName": "文件名", + "@fileName": { + "description": "Create topic dialog field label." + }, + "topicTitleRequired": "主题标题为必填项。", + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, + "fileNameRequired": "文件名为必填项。", + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, + "rename": "重命名", + "@rename": { + "description": "Rename command label." + }, + "confirmDeleteFileTitle": "删除文件?", + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, + "confirmDeleteFolderTitle": "删除文件夹?", + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, + "confirmDeleteFileMessage": "删除 {name}?此操作无法撤销。", + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteFolderMessage": "删除 {name} 及其中的所有文件?此操作无法撤销。", + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "useSingleSafeFileName": "使用单一且安全的文件名。", + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, + "useExpectedExtension": "为选中的格式使用 {extension} 扩展名。", + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "useIdentifierCharacters": "在扩展名之前仅使用字母、数字、下划线或连字符。", + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, + "topicIdAlreadyExists": "主题 ID 已存在。", + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, + "createWritersideTopicFailed": "无法创建 Writerside 主题。", + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, + "noOutline": "没有大纲", + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, + "expandKind": "展开 {kind}", + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "collapseKind": "折叠 {kind}", + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "foldKindSection": "节", + "@foldKindSection": { + "description": "Fold kind label for a section." + }, + "foldKindList": "列表", + "@foldKindList": { + "description": "Fold kind label for a list." + }, + "foldKindQuote": "引用", + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, + "foldKindTag": "标签", + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, + "sourceSearchPreviousMatch": "上一个匹配项", + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, + "sourceSearchNextMatch": "下一个匹配项", + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, + "sourceSearchCaseSensitive": "区分大小写", + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, + "sourceSearchWholeWord": "全字匹配", + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, + "sourceSearchRegex": "正则表达式", + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, + "sourceSearchReplacement": "替换为", + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "替换当前匹配项", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, + "sourceSearchReplaceAndFindNext": "替换并查找下一个", + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, + "sourceSearchReplaceAll": "全部替换", + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, + "workspaceReplace": "在工作区中替换", + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, + "reviewReplacements": "查看替换内容", + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, + "applyReplacements": "应用替换", + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, + "skippedFiles": "跳过的文件", + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, + "workspaceReplaceDirtyBuffer": "未保存的编辑器内容", + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, + "workspaceReplaceDiskContent": "磁盘上的已保存内容", + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, + "selectFileMatches": "选择全部 {count} 个匹配项", + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceReplaceApplied": "已在 {files} 个文件中替换 {matches} 个匹配项;跳过 {skipped} 个。", + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · 末尾有换行符", + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · 末尾无换行符", + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, + "normalizeLineEndings": "规范化行尾", + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, + "mixedLineEndingsSavePrompt": "此文档包含混合的行尾格式。请选择一种格式。", + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, + "workspaceReplaceMixedLineEndings": "{fileName} 使用混合的行尾格式。请在替换前选择要使用的格式。", + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "workspaceReplaceIssueOversized": "已跳过过大的文件。", + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, + "workspaceReplaceIssueUnreadable": "已跳过无法读取的文件。", + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, + "workspaceReplaceIssueInvalidUtf8": "已跳过不是有效 UTF-8 的文件。", + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, + "workspaceReplaceIssueTruncated": "替换预览已被截断。", + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, + "workspaceReplaceIssueFileChanged": "已跳过预览后发生变化的文件。", + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, + "workspaceReplaceIssueBufferChanged": "已跳过预览后发生变化的编辑器缓冲区。", + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, + "workspaceReplaceIssueNormalizationRequired": "请在替换前选择 LF 或 CRLF 规范化。", + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, + "workspaceReplaceIssuePartialConflict": "由于文件同时发生了变化,回滚已停止。部分替换可能仍然存在;被移出的内容已保留在下方路径中。", + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, + "workspaceReplaceIssueApplyFailed": "无法提交经过审查的替换;没有文件发生更改。", + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, + "externalChangesTitle": "外部更改 — {fileName}", + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "externalFileDeleted": "此文件已从磁盘删除。", + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, + "externalFileChanged": "在您有未保存编辑时,此文件已在磁盘上发生变化。", + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "已恢复 {fileName} 的未保存内容。请检查后保存、另存为或放弃。", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "compare": "比较", + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, + "reloadFromDisk": "从磁盘重新加载", + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, + "keepMine": "保留我的版本", + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, + "saveAs": "另存为", + "@saveAs": { + "description": "Action that saves the current document to another path." + }, + "sourceSearchInvalidRegex": "无效的正则表达式", + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, + "sourceLargeFileFeaturesPaused": "大文件:已暂停语法突出显示和折叠", + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, + "nothingToRead": "没有可读取的内容", + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, + "admonition": "提示块", + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, + "quote": "引用", + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, + "note": "备注", + "@note": { + "description": "Preview label for a note admonition." + }, + "tip": "提示", + "@tip": { + "description": "Preview label for a tip admonition." + }, + "warning": "警告", + "@warning": { + "description": "Preview label for a warning admonition." + }, + "tabs": "标签页", + "@tabs": { + "description": "Preview label for a tabs block." + }, + "tab": "标签页", + "@tab": { + "description": "Preview label for a tab block." + }, + "procedure": "操作步骤", + "@procedure": { + "description": "Preview label for a procedure block." + }, + "step": "步骤", + "@step": { + "description": "Preview label for a procedure step." + }, + "topic": "主题", + "@topic": { + "description": "Preview label for a topic element." + }, + "chapter": "章节", + "@chapter": { + "description": "Preview label for a chapter element." + }, + "couldNotOpenTarget": "无法打开 {target}", + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, + "linkTargetNotFound": "找不到链接目标:{targetPath}", + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "cannotOpenFileTypeInEditor": "无法在编辑器中打开此文件类型", + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, + "anchorNotFound": "找不到锚点:{anchor}", + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "noProblemsFound": "未发现问题", + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, + "noResults": "无结果", + "@noResults": { + "description": "Search empty state." + }, + "searchResultLine": "{relativePath} - 第 {lineNumber} 行", + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, + "untitledResult": "未命名结果", + "@untitledResult": { + "description": "Fallback search result title." + }, + "documentKindMarkdownFile": "Markdown 文件", + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, + "documentKindWritersideMarkdownTopic": "Writerside Markdown 主题", + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideXmlTopic": "Writerside XML 主题", + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideTree": "Writerside 树", + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, + "documentKindConfigurationFile": "配置文件", + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, + "documentKindVariablesFile": "变量文件", + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, + "documentKindCategoriesFile": "类别文件", + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, + "documentKindResourceFile": "资源文件", + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, + "workspaceErrorOpenFailed": "打开失败:{error}", + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideProjectFailed": "无法创建 Writerside 项目:{error}", + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideTopicFailed": "无法创建 Writerside 主题:{error}", + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCouldNotOpenFile": "无法打开文件:{error}", + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorChooseWhereToSaveMarkdown": "选择保存此 Markdown 文件的位置。", + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, + "workspaceErrorSaveBlockedFileChangedOnDisk": "保存已阻止:文件已在磁盘上发生变化。", + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, + "workspaceErrorSaveFailed": "保存失败:{error}", + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorFileOperationFailed": "文件操作失败:{error}", + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorValidationFailed": "验证失败:{error}", + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceRecoveryRestored": "{count, plural, =1{已恢复 1 个未保存的文档。请在保存或放弃前进行检查。} other{已恢复 {count} 个未保存的文档。请在保存或放弃前逐一检查。}}", + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceRecoveryDamaged": "{count, plural, =1{无法恢复一条损坏的恢复记录。原始恢复文件已保留以供检查。} other{无法恢复 {count} 条损坏的恢复记录。有效的恢复记录仍可用。}}", + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "errorPathDoesNotExist": "路径不存在:{path}", + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetDirectoryNotEmpty": "目标目录已存在且不为空:{path}", + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetPathNotDirectory": "目标路径已存在但不是目录:{path}", + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorGeneratedFileAlreadyExists": "生成的文件已存在:{path}", + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorParentDirectoryRequired": "必须指定父目录。", + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, + "errorParentDirectoryMissing": "父目录不存在:{path}", + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorDirectoryMissing": "目录不存在:{path}", + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorPathAlreadyExists": "路径已存在:{path}", + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorFileNameRequired": "文件名为必填项。", + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, + "errorFileNameUnsafe": "文件名必须是单一且安全的路径段。", + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, + "errorFileOperationInvalidTarget": "无法将文件夹移动到其自身中。", + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, + "errorFileOperationOutsideRoot": "文件操作必须在工作区内进行。", + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, + "errorFileOperationRoot": "无法从文件树更改工作区根目录。", + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, + "errorProjectNameRequired": "项目名称为必填项。", + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, + "errorDirectoryNameRequired": "目录名称为必填项。", + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, + "errorDirectoryNameUnsafe": "目录名称必须是单一且安全的路径段。", + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, + "errorInstanceIdInvalid": "实例 ID 必须以小写字母开头,且只能包含小写字母、数字、下划线和连字符。", + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, + "errorTopicFileInvalid": "主题文件名必须是没有路径分隔符的 Markdown 文件名。", + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, + "errorTopicTitleRequired": "主题标题为必填项。", + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, + "errorWritersideModuleRootMissing": "Writerside 模块根目录不存在:{path}", + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideModuleNotOpen": "必须打开 Writerside 模块才能创建主题。", + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, + "errorWritersideInstanceTreeMissing": "Writerside 模块没有实例树。", + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, + "errorWritersideTreeFileMissing": "Writerside 树文件不存在:{path}", + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTopicIdAlreadyExists": "主题 ID \"{topicId}\" 已存在于此帮助模块中。", + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, + "errorTopicFileAlreadyExists": "主题文件已存在:{path}", + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorReferenceTopicMissing": "选中的树中不存在引用主题:{topic}", + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideTocNodeMissing": "选中的目录项已不存在。", + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, + "errorWritersideTocInvalidMove": "目录项无法移动到自身或其子项中。", + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, + "errorWritersideStartTopicDelete": "无法删除起始主题 {topic}。请先选择其他起始页。", + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideSafeDeleteRequired": "请对 Writerside 主题文件使用安全删除。", + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, + "errorWritersideTopicUsageScanFailed": "无法完成主题使用情况扫描。没有文件发生更改。", + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, + "errorWritersideTopicUsagesRemain": "某些主题使用情况仍需处理。请先查看后再继续。", + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, + "errorWritersideRedirectInvalid": "选中的重定向目标已无效。请重新选择。", + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, + "errorWritersideRollbackFailed": "无法完全回滚主题移除。请在继续前查看这些路径:{paths}", + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "errorTopicsRootUnsafe": "主题根目录必须是安全的相对目录。", + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, + "errorTopicFileNameUnsafe": "主题文件名必须是单一且安全的路径段。", + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, + "errorTopicFileExtensionMismatch": "主题文件扩展名必须与选中的格式匹配({extension})。", + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "errorTopicFileNameInvalid": "主题文件名只能包含字母、数字、下划线和连字符。", + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, + "errorUnknown": "未知错误:{code}", + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileStatFailed": "无法读取文件元数据:{error}", + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceScanSkipped": "检测到大型工作区。为保持应用响应速度,已跳过部分文件。", + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, + "diagnosticWorkspaceScanInspectFailed": "无法检查工作区项:{error}", + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileTooLarge": "文件超过 beta 自动解析限制。", + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, + "diagnosticWorkspaceFileReadFailed": "无法读取 Markdown 文件:{error}", + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticMarkdownAttributeMalformed": "Writerside 标题属性块格式错误。", + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, + "diagnosticMarkdownHeadingDuplicateId": "标题 ID“{id}”重复。", + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicH1ConvertedToChapter": "额外的顶级 H1 标题将被视为章节。", + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown 主题没有 H1 或 front matter 标题。", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, + "diagnosticWritersideXmlTopicMissingTitle": "XML 主题缺少标题。", + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, + "diagnosticWritersideTopicFileMissingTitle": "主题“{fileName}”缺少标题。", + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "diagnosticMarkdownFrontMatterMalformed": "front matter 未闭合。", + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, + "diagnosticMarkdownRawHtmlUnsafe": "不安全的 HTML 元素。", + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, + "diagnosticMarkdownLinkUnresolvedTarget": "链接目标不存在:{targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "diagnosticMarkdownLinkUnresolvedAnchor": "锚点“{anchor}”不存在。", + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingAlt": "图像“{destination}”缺少替代文本。", + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingFile": "图像不存在:{destination}", + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticInvalidXml": "无效的 XML:{message}", + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigInvalidRoot": "writerside.cfg 根元素必须是 。", + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, + "diagnosticWritersideConfigMissingSnippetsSrc": "snippets 声明缺少 src。", + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups 声明缺少 src。", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, + "diagnosticWritersideConfigInvalidKeymapsMode": "不支持的 keymaps 模式:{mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceSrc": "instance 声明缺少 src。", + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, + "diagnosticWritersideConfigMissingInstance": "writerside.cfg 未注册实例。", + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, + "diagnosticWritersideTreeInvalidRoot": ".tree 根元素必须是 。", + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, + "diagnosticWritersideTreeMissingId": "实例配置文件缺少 id。", + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, + "diagnosticWritersideTreeIdMismatch": "树文件名(不含扩展名)与实例 ID“{id}”不匹配。", + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "非库实例缺少 start-page。", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, + "diagnosticWritersideStartPageMissing": "起始页“{startPage}”不存在。", + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeDuplicateTopic": "主题“{topic}”在此实例目录中出现多次。", + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableMalformedDeclaration": "变量声明必须包含名称和值。", + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, + "diagnosticWritersideVariableDuplicateName": "变量“{name}”被声明了多次。", + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryMissingId": "类别缺少 id。", + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, + "diagnosticWritersideCategoryDuplicateId": "类别“{id}”被声明了多次。", + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryDuplicateOrder": "类别顺序“{order}”被声明了多次。", + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicInvalidRoot": ".topic 根元素必须是 。", + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, + "diagnosticWritersideTopicMissingRootId": "XML 主题缺少根 id。", + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, + "diagnosticWritersideTopicRootIdMismatch": "XML 主题根 ID“{id}”必须与文件名“{expectedId}”匹配。", + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateElementId": "元素 ID“{elementId}”出现多次。", + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAnchorMissingHref": " 缺少 href。", + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, + "diagnosticWritersideConfigMissing": "Writerside 模式需要 writerside.cfg。", + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "配置的构建配置目录不存在:{relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "配置的 API 规范目录不存在:{relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingSnippetsDirectory": "配置的 snippets 目录不存在:{relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingVarsFile": "配置的变量文件不存在:{relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingCategoriesFile": "配置的类别文件不存在:{relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "配置的实例组文件不存在:{relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceTree": "已注册的实例树“{source}”不存在。", + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicReadFailed": "无法读取主题文件:{error}", + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "默认主题目录不存在:{relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicsDirectoryMissing": "配置的主题目录不存在:{relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideImagesDirectoryMissing": "配置的图像目录不存在:{relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateId": "元素 ID“{id}”出现多次。", + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingTopic": "目录引用了缺失的主题“{topic}”。", + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeInvalidHref": "外部 href“{href}”无效。", + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableUnresolved": "变量“%{name}%”未声明。", + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicLinkUnresolved": "主题链接“{destination}”无法解析。", + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticWritersideAnchorUnresolved": "“{targetName}”中不存在锚点“{anchor}”。", + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": " 缺少 from。", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, + "diagnosticWritersideIncludeSourceMissing": "包含源“{from}”不存在。", + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeElementMissing": "“{from}”中不存在包含元素“{elementId}”。", + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "seealso 类别“{ref}”未声明。", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAmbiguousReference": "主题引用“{reference}”不明确。", + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, + "diagnosticUnknown": "未知诊断信息:{code}", + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "close": "关闭", + "@close": { + "description": "Close action label." + }, + "git": "Git", + "@git": { + "description": "Git sidebar tab label." + }, + "gitDiff": "Git 差异", + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, + "gitShowDiff": "显示差异", + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, + "gitDiffHunkRange": "旧 {oldRange} → 新 {newRange}", + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, + "gitDiffNoLines": "无行", + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, + "gitUnavailableTitle": "Git 不可用", + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, + "gitUnavailableMessage": "{reason, select, other{安装 Git,或配置 BusyMark 以使用可用的 Git 可执行文件。{reason}}}", + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, + "gitTrustRequiredTitle": "信任此工作区以使用 Git?", + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, + "gitTrustRequiredMessage": "Git 存储库可以通过 hook、过滤器和其他配置运行程序。在 BusyMark 读取存储库数据或启用 Git 操作前,请先信任此工作区。", + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, + "gitTrustWorkspace": "信任工作区", + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, + "gitNotRepositoryTitle": "不是 Git 存储库", + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, + "gitNotRepositoryMessage": "此工作区不在 Git 存储库中。", + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, + "gitInitializeRepository": "初始化存储库", + "@gitInitializeRepository": { + "description": "Action label for git init." + }, + "gitDetachedHead": "分离的 HEAD", + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, + "gitDetachedHeadAt": "分离于 {commit}", + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, + "gitNoUpstream": "没有上游分支", + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, + "gitAheadCount": "{count, plural, =1{1 个未推送的提交} other{{count} 个未推送的提交}}", + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitBehindCount": "{count, plural, =1{1 个待拉取的提交} other{{count} 个待拉取的提交}}", + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "干净", + "@gitClean": { + "description": "Git clean state label." + }, + "gitConflicts": "冲突", + "@gitConflicts": { + "description": "Git conflicts group label." + }, + "gitChanges": "更改", + "@gitChanges": { + "description": "Git changes view label." + }, + "gitStaged": "已暂存", + "@gitStaged": { + "description": "Git staged changes group label." + }, + "gitUnstaged": "未暂存", + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, + "gitHistory": "历史记录", + "@gitHistory": { + "description": "Git history view label." + }, + "gitBranches": "分支", + "@gitBranches": { + "description": "Git branch menu label." + }, + "gitActions": "Git 操作", + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, + "gitPull": "Pull", + "@gitPull": { + "description": "Git pull action label." + }, + "gitFetch": "Fetch", + "@gitFetch": { + "description": "Git fetch action label." + }, + "gitPush": "Push", + "@gitPush": { + "description": "Git push action label." + }, + "gitCommit": "Commit", + "@gitCommit": { + "description": "Git commit action label." + }, + "gitSelectForCommit": "暂存文件", + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, + "gitRemoveFromCommit": "取消暂存文件", + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, + "gitDiscard": "还原", + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, + "gitOpenFile": "打开文件", + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, + "gitMarkResolved": "标记为已解决", + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, + "gitUntracked": "未跟踪", + "@gitUntracked": { + "description": "Git untracked files group label." + }, + "gitCommitMessage": "提交消息", + "@gitCommitMessage": { + "description": "Commit message field label." + }, + "gitCommitSelectedFiles": "选中的文件", + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, + "gitCommitNoSelectedFiles": "提交前至少暂存一个文件。", + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, + "gitStagedFileCount": "{count, plural, =1{1 个已暂存文件} other{{count} 个已暂存文件}}", + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitOutsideWorkspace": "工作区之外", + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, + "gitCommitMessageRequired": "请输入提交消息。", + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, + "gitCreateBranch": "创建分支", + "@gitCreateBranch": { + "description": "Git create branch action label." + }, + "gitNewBranch": "新分支", + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, + "gitBranchName": "分支名称", + "@gitBranchName": { + "description": "Branch name field label." + }, + "gitSwitchBranch": "切换", + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, + "gitNoChanges": "没有更改", + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, + "gitNoHistory": "没有历史记录", + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, + "gitNoBranches": "没有分支", + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, + "gitNoDiff": "没有可显示的差异", + "@gitNoDiff": { + "description": "Git diff empty state." + }, + "gitBinaryFile": "二进制文件。BusyMark 不渲染二进制补丁。", + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, + "gitBinaryFileInfo": "二进制文件({size} 字节)。BusyMark 不渲染二进制补丁。", + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, + "gitUnsavedChangesBanner": "保存前不会包含未保存的编辑器更改。", + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, + "gitConfirmDiscardTitle": "放弃 Git 更改?", + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, + "gitConfirmDiscardTracked": "{count, plural, =1{选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。} other{选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。}}", + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmDiscardUntracked": "{count, plural, =1{选中的未跟踪文件将被删除。} other{选中的未跟踪文件将被删除。}}", + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmDiscardMixed": "{count, plural, =1{将根据其 Git 状态还原或删除选中的文件。} other{将根据其 Git 状态还原或删除选中的文件。}}", + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitConfirmSwitchBranchTitle": "切换到 {branch}?", + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitConfirmSwitchBranchMessage": "Git 切换分支后,BusyMark 将从磁盘重新加载工作区。", + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, + "gitConfirmPushSetUpstreamTitle": "设置上游分支?", + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, + "gitConfirmPushSetUpstreamMessage": "此分支没有上游分支。当只配置了一个远程仓库时,BusyMark 可以推送 {branch} 并设置其上游分支。", + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitProjectHistory": "项目历史记录", + "@gitProjectHistory": { + "description": "Project history action label." + }, + "gitFileHistory": "文件历史记录", + "@gitFileHistory": { + "description": "Current file history action label." + }, + "gitFileHistoryRequiresOpenFile": "文件历史记录需要打开的 Markdown 文件。", + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, + "gitLoadMore": "加载更多", + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, + "gitChangesInCommit": "此提交中的更改", + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, + "gitCompareWithCurrent": "与当前版本比较", + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, + "gitRestoreVersion": "还原此版本", + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, + "gitConfirmRestoreTitle": "还原此文件版本?", + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, + "gitConfirmRestoreMessage": "BusyMark 将使用选中的已提交版本替换当前工作树中的文件。还原后的文件将保持未暂存状态。", + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, + "gitCommitActions": "提交操作", + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, + "gitResetCurrentBranchToHere": "将当前分支重置到此处…", + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, + "gitResetCurrentBranchTitle": "将 {branch} 重置到 {commit}?", + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitResetCurrentBranchMessage": "这会将分支 {branch} 移动到提交 {commit}。请选择 Git 更新索引和工作树的方式。", + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitReset": "重置", + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, + "gitResetModeSoft": "软", + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, + "gitResetModeSoftDescription": "仅移动分支。保持索引和工作树不变;与选中提交之间的差异仍会保持暂存状态。", + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, + "gitResetModeMixed": "混合", + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, + "gitResetModeMixedDescription": "移动分支并重置索引。保持工作树不变,使差异处于未暂存状态。", + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, + "gitResetModeHard": "硬", + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, + "gitResetModeHardDescription": "移动分支并重置索引和工作树。已跟踪的更改将被放弃;造成阻碍的未跟踪文件可能会被删除。", + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, + "gitResetModeKeep": "保留", + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, + "gitResetModeKeepDescription": "移动分支并重置已跟踪文件,同时保留本地更改。如果这些更改与重置冲突,Git 将中止操作。", + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, + "gitAdditionsDeletions": "+{additions} -{deletions}", + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, + "fileActions": "文件操作", + "@fileActions": { + "description": "Tooltip for a file action menu." + }, + "actions": "操作", + "@actions": { + "description": "Tooltip for a general action menu." + }, + "gitStatusAdded": "已添加", + "@gitStatusAdded": { + "description": "Git file status label." + }, + "gitStatusDeleted": "已删除", + "@gitStatusDeleted": { + "description": "Git file status label." + }, + "gitStatusRenamed": "已重命名", + "@gitStatusRenamed": { + "description": "Git file status label." + }, + "gitStatusCopied": "已复制", + "@gitStatusCopied": { + "description": "Git file status label." + }, + "gitStatusUntracked": "未跟踪", + "@gitStatusUntracked": { + "description": "Git file status label." + }, + "gitStatusConflicted": "有冲突", + "@gitStatusConflicted": { + "description": "Git file status label." + }, + "gitStatusIgnored": "已忽略", + "@gitStatusIgnored": { + "description": "Git file status label." + }, + "gitStatusTypeChanged": "类型已更改", + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, + "gitStatusModified": "已修改", + "@gitStatusModified": { + "description": "Git file status label." + }, + "gitStatusUnknown": "未知", + "@gitStatusUnknown": { + "description": "Git file status label." + }, + "gitErrorUnavailable": "Git 不可用。", + "@gitErrorUnavailable": { + "description": "Git error message." + }, + "gitErrorNotRepository": "此工作区不是 Git 存储库。", + "@gitErrorNotRepository": { + "description": "Git error message." + }, + "gitErrorUnsafePath": "BusyMark 阻止了不安全的 Git 路径。", + "@gitErrorUnsafePath": { + "description": "Git error message." + }, + "gitErrorInvalidBranchName": "请输入有效的分支名称。", + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, + "gitErrorNoRemote": "未配置 Git 远程仓库。", + "@gitErrorNoRemote": { + "description": "Git error message." + }, + "gitErrorNoUpstream": "未配置上游分支。", + "@gitErrorNoUpstream": { + "description": "Git error message." + }, + "gitErrorMultipleRemotes": "配置了多个远程仓库。请在此 BusyMark 版本之外选择上游分支。", + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, + "gitErrorDirtyWorkspace": "切换分支前,请保存或放弃 BusyMark 编辑器中的更改。", + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, + "gitErrorResetDirtyWorkspace": "重置当前分支前,请保存或放弃 BusyMark 编辑器中的更改。", + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, + "gitErrorRestoreStagedFile": "还原历史版本前,请取消暂存此文件。", + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, + "gitErrorResetDetachedHead": "重置前请先检出一个分支。", + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, + "gitErrorDiverged": "分支已发生分歧。请在此 BusyMark 版本之外解决合并或变基问题。", + "@gitErrorDiverged": { + "description": "Git error message." + }, + "gitErrorAuthorIdentity": "Git 需要作者姓名和邮箱地址才能提交。", + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, + "gitAuthorIdentityTitle": "Git 作者身份", + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, + "gitAuthorIdentityMessage": "请输入 Git 应记录在提交中的身份信息。BusyMark 将保存它并重试此次提交。", + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, + "gitAuthorName": "姓名", + "@gitAuthorName": { + "description": "Git commit author name field label." + }, + "gitAuthorEmail": "Email", + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, + "gitAuthorIdentityGlobal": "用于所有存储库", + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, + "gitAuthorIdentityGlobalDescription": "作为 Snap 安装时,此设置适用于在 BusyMark 中打开的存储库。", + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, + "gitSaveIdentityAndCommit": "保存并提交", + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, + "gitErrorAuthentication": "Git 身份验证失败。", + "@gitErrorAuthentication": { + "description": "Git error message." + }, + "gitErrorNetwork": "Git 网络操作失败。", + "@gitErrorNetwork": { + "description": "Git error message." + }, + "gitErrorConflict": "Git 报告存在未解决的冲突。", + "@gitErrorConflict": { + "description": "Git error message." + }, + "gitErrorCommandFailed": "Git 命令失败。", + "@gitErrorCommandFailed": { + "description": "Git error message." + }, + "markdownAndHtml": "Markdown 和 HTML", + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, + "markdownHtmlMarkdownBlocks": "Markdown 块", + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, + "markdownHtmlMarkdownBlocksDescription": "Markdown 源代码和预览中支持的块结构。", + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, + "markdownHtmlInlineFormatting": "行内 Markdown", + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, + "markdownHtmlInlineFormattingDescription": "可出现在段落、列表项和表格单元格中的格式。", + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, + "markdownHtmlRawHtmlBlocks": "原始 HTML 块", + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlBlocksDescription": "通过 BusyMark 预览组件渲染的安全块级 HTML 标签。", + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlInline": "原始 HTML 行内标签", + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, + "markdownHtmlRawHtmlInlineDescription": "安全的行内 HTML 标签,渲染时不会显示字面标签。", + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, + "markdownHtmlSafety": "安全规则", + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, + "markdownHtmlSafetyDescription": "原始 HTML 会在预览前进行解析和清理。", + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, + "markdownHtmlHeadings": "标题", + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, + "markdownHtmlParagraphs": "段落", + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, + "markdownHtmlLists": "列表", + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, + "markdownHtmlHtmlContainers": "容器", + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, + "markdownHtmlHtmlTextBlocks": "文本块", + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, + "markdownHtmlHtmlFigures": "图和图像", + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, + "markdownHtmlHtmlPreformatted": "预格式化代码", + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, + "markdownHtmlHtmlDisclosure": "折叠块", + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, + "markdownHtmlHtmlDescriptionLists": "描述列表", + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, + "markdownHtmlHtmlFormattingTags": "格式标签", + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, + "markdownHtmlHtmlInlineCodeTags": "行内代码标签", + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, + "markdownHtmlHtmlNeutralInlineTags": "语义文本标签", + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, + "markdownHtmlSanitizedPreview": "已清理的预览", + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, + "markdownHtmlSanitizedPreviewDescription": "允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。", + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, + "markdownHtmlSourcePreserved": "保留源代码", + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, + "markdownHtmlSourcePreservedDescription": "未经编辑的原始 HTML 会按源文本原样保存。", + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, + "markdownHtmlMarkdownInsideHtml": "HTML 内的 Markdown", + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, + "markdownHtmlMarkdownInsideHtmlDescription": "原始 HTML 内的 Markdown 标记会按字面文本渲染。", + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, + "markdownHtmlBlockedContent": "被阻止的活动内容", + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, + "markdownHtmlBlockedContentDescription": "脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。", + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, + "markdownHtmlSafeUrls": "仅允许安全 URL", + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, + "markdownHtmlSafeUrlsDescription": "链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。", + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, + "exportAsPdf": "导出为 PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, + "pdfExportDescription": "选择页面布局,生成精美且自包含的 PDF。", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "导出过程中不会下载远程图像。有可用的本地图像时将包含它们。", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "页面大小", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "方向", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "纵向", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "横向", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "页边距", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "窄", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "普通", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "宽", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "包含页码", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "导出", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "正在导出 PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "PDF 文档", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "已导出 {fileName}。", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "已导出 {fileName},包含 {count} 条警告。", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "缺少 PDF 导出组件。请重新安装 BusyMark 后重试。", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "PDF 导出耗时过长,已停止。", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark 无法将此文档导出为 PDF。", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, + "visualizationRendering": "正在渲染…", + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, + "visualizationStale": "正在显示上次有效的渲染结果", + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, + "visualizationShowSource": "显示源代码", + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, + "visualizationShowRender": "显示渲染结果", + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, + "visualizationFitWidth": "适应宽度", + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, + "visualizationSaveImage": "保存图像", + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, + "visualizationCopyImage": "复制图像", + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, + "visualizationImageCopied": "图像已复制", + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, + "visualizationOpenApiReference": "打开 API 参考", + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, + "visualizationValid": "有效", + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, + "visualizationInvalid": "无效", + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, + "visualizationServers": "服务器", + "@visualizationServers": { + "description": "OpenAPI server count label." + }, + "visualizationPaths": "路径", + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, + "visualizationOperations": "操作", + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, + "visualizationTags": "标签", + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, + "visualizationNoOperations": "没有匹配的操作", + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, + "visualizationSearchOperations": "搜索操作", + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, + "visualizationRenderFailed": "无法渲染此可视化内容。", + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, + "visualizationRetry": "重试", + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, + "visualizationSaved": "已保存 {fileName}", + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "shortcutExportPdfDescription": "将当前文档或 Writerside 模块导出为 PDF。", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, + "instances": "实例", + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, + "newInstance": "新建实例", + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, + "newTocLibrary": "新建目录库", + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, + "editInstance": "编辑实例", + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, + "openTocFile": "打开目录文件", + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, + "createInstance": "创建实例", + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, + "createTocLibrary": "创建目录库", + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, + "instanceContent": "内容", + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, + "instanceContentSource": "创建来源", + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, + "emptyInstance": "空实例", + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, + "markdownFiles": "本地 Markdown 文件", + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, + "chooseMarkdownFolder": "选择 Markdown 文件夹", + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, + "errorWritersideInstanceImportSourceRequired": "选择包含 Markdown 文件的文件夹。", + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, + "instanceAppearance": "外观", + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, + "instanceColor": "图标颜色", + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, + "instanceVersion": "版本", + "@instanceVersion": { + "description": "Writerside instance version field." + }, + "instanceVersionInherited": "此字段为空时,项目版本为 {version}。", + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "instanceWebPath": "Web 路径", + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, + "instanceStatus": "状态", + "@instanceStatus": { + "description": "Writerside instance status field." + }, + "instanceStatusRelease": "发布", + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, + "instanceStatusEap": "抢先体验", + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, + "instanceStatusDeprecated": "已弃用", + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, + "allowSearchEngineIndexing": "允许搜索引擎建立索引", + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, + "allowSearchEngineIndexingDescription": "允许外部搜索引擎为此输出建立索引。", + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, + "offlineArtifact": "离线构件", + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, + "offlineArtifactDescription": "捆绑资源,使构建的文档可以自包含。", + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, + "instanceOutputSettings": "输出设置", + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, + "markdownImportSource": "Markdown 源", + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, + "markdownImportFiles": "Markdown 文件", + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, + "selectNone": "全部取消选择", + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, + "markdownFilesFound": "找到 {count} 个 Markdown 文件", + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noMarkdownFilesFound": "在此目录中未找到 Markdown 文件。", + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, + "copyReferencedMedia": "复制引用的媒体", + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, + "copyReferencedMediaDescription": "复制选中文件引用的本地图像和视频,同时保留相对路径。", + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, + "instanceIdRenameWarningTitle": "重命名实例 ID?", + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, + "instanceIdRenameWarning": "BusyMark 将重命名 .tree 文件,并将 Writerside 项目引用从“{oldId}”更新为“{newId}”。发布脚本不会更改,必须单独更新。", + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, + "renameAndUpdateReferences": "重命名并更新引用", + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, + "tocLibraryDescription": "目录库用于存储可复用的节,不会生成自己的输出。", + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, + "defaultTocLibraryName": "共享目录", + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, + "instanceColorAutomatic": "自动", + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, + "instanceColorBlue": "蓝色", + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, + "instanceColorGreen": "绿色", + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, + "instanceColorOrange": "橙色", + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, + "instanceColorPurple": "紫色", + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, + "instanceColorRed": "红色", + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, + "instanceColorTeal": "青绿色", + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, + "instanceColorYellow": "黄色", + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, + "errorWritersideInstanceNameRequired": "请输入实例名称。", + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, + "errorWritersideInstanceIdExists": "已存在 ID 为“{id}”的实例。", + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "errorWritersideInstanceTreeExists": "实例树已存在:{path}", + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportSourceMissing": "Markdown 源目录不存在:{path}", + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportSelectionRequired": "请选择至少一个 Markdown 文件进行导入。", + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, + "errorWritersideInstanceImportFileInvalid": "选中的源中有一个不是可读取的 Markdown 文件:{path}", + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceImportTargetExists": "导入将覆盖现有项目文件:{path}", + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideInstanceFilesChanged": "实例文件已在磁盘上发生变化。请查看后重试。", + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, + "errorWritersideInstanceRollbackFailed": "BusyMark 无法完全回滚实例更改。请在继续前查看这些文件:{paths}", + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "errorWritersideInstanceLibraryImport": "目录库无法导入 Markdown 主题。", + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, + "errorWritersideInstanceWebPathInvalid": "Web 路径必须为单行文本。", + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, + "errorWritersideInstanceConfigurationInvalid": "Writerside 实例配置无效。请修正其诊断信息后重试。", + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, + "errorWritersideInstanceTemporaryFile": "BusyMark 无法安全暂存实例更改。", + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, + "diagnosticWritersideTreeInvalidStatus": "未知的实例状态“{status}”。请使用 release、eap 或 deprecated。", + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, + "diagnosticWritersideDuplicateInstanceId": "实例 ID“{id}”被多个树文件使用。", + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml 必须包含 根元素。", + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} 值“{value}”必须为 true 或 false。", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, + "diagnosticWritersideBuildProfileMissingInstance": " 元素必须指定实例 ID。", + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, + "diagnosticWritersideTreeInvalidInclude": "树中的 必须同时指定 from 和 element-id。", + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, + "diagnosticWritersideTreeMissingSnippetId": "树中的 必须指定 id。", + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, + "diagnosticWritersideTreeInvalidCrossInstanceReference": "跨实例目录引用必须同时指定 ref 和 in。", + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, + "diagnosticWritersideTreeConflictingTargets": "目录元素不能同时指向多个主题、引用、链接或重定向。", + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, + "diagnosticWritersideTreeDuplicateElementId": "树元素 ID“{id}”被声明了多次。", + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideInstanceGroupsInvalidRoot": "实例组文件必须包含 根元素。", + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, + "diagnosticWritersideInstanceGroupInvalid": "实例组必须指定非空 ID 和实例列表。", + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, + "diagnosticWritersideInstanceGroupDuplicateId": "实例组 ID“{id}”被声明了多次。", + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideExternalTreeInclude": "目录包含项“{source}#{id}”属于外部模块“{origin}”,无法在此工作区中展开。", + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeIncludeElementMissing": "已注册树“{source}”中不存在树元素“{id}”。", + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeCircularInclude": "树包含项“{source}#{id}”创建了循环。", + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideUnknownInstanceGroup": "实例条件引用了未知组“@{group}”。", + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceInstanceMissing": "跨实例引用指向未知实例“{instance}”。", + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceTopicMissing": "主题“{topic}”不在被引用的实例“{instance}”中。", + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, + "download": "下载", + "@download": { + "description": "Button label that downloads a required component." + }, + "exportWritersideAsPdf": "将 Writerside 导出为 PDF", + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, + "writersidePdfContent": "导出内容", + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, + "writersidePdfPage": "页面", + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, + "exportingWritersidePdf": "正在导出 Writerside PDF…", + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, + "ai": "AI", + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, + "aiLocalOllama": "本地 Ollama", + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, + "aiDisabled": "已禁用", + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, + "aiLocalOnlyDescription": "AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。", + "@aiLocalOnlyDescription": { + "description": "Privacy description for BusyMark local AI." + }, + "aiProvider": "AI 提供商", + "@aiProvider": { + "description": "Label for an AI provider selection." + }, + "aiDefaultProvider": "默认提供商", + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, + "aiConfigureProvider": "配置提供商", + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, + "aiChooseProvider": "选择 AI 提供商", + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, + "aiOllamaEndpoint": "Ollama 端点", + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, + "aiOllamaModel": "Ollama 模型", + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, + "aiTestConnection": "测试连接", + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, + "aiTestingConnection": "正在测试…", + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, + "aiConnectionReady": "已连接。找到 {count} 个已安装模型。", + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "aiNoModels": "未选择模型。", + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, + "aiConnectionFailed": "BusyMark 无法验证 AI 文本生成。", + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, + "aiConfigureFirst": "请先在设置 → AI 中启用 AI 提供商并验证模型。", + "aiEditWithAi": "使用 AI 编辑", + "aiRefineWithAi": "使用 AI 优化", + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, + "aiInstruction": "指令", + "aiChangeTarget": "可更改内容", + "aiSharedContext": "与 AI 共享的上下文", + "aiTargetSelection": "选中的内容", + "aiTargetInsertAfterBlock": "插入到当前块之后", + "aiTargetCurrentBlock": "当前块", + "aiTargetCurrentSection": "当前节", + "aiTargetCompleteDocument": "完整文档", + "aiContextNone": "没有文档上下文", + "aiContextSelection": "选中的内容", + "aiContextCurrentBlock": "当前块", + "aiContextCurrentSection": "当前节", + "aiContextCompleteDocument": "完整文档", + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, + "aiGenerating": "正在生成建议…", + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, + "aiProposal": "AI 建议", + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, + "aiGenerateProposal": "生成建议", + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, + "aiContextDisclosure": "所选提供商将接收显示上下文中的 {count} 个字符。", + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "aiOriginal": "原始内容", + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, + "aiSuggested": "建议内容", + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, + "aiApplyProposal": "应用建议", + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, + "aiTokenUsage": "输入 token:{input} · 输出 token:{output}", + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, + "aiStaleProposal": "生成此建议期间文档发生了变化。请重新执行操作。", + "gitAiStagedChangesChanged": "生成此提交消息期间,已暂存的更改发生了变化。请重新执行操作。", + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, + "aiViewContext": "查看已发送的上下文", + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, + "aiReviewExactContent": "查看确切内容", + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, + "aiContentToChange": "要更改的内容", + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, + "aiContentSentToAi": "发送给 AI 的内容", + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, + "aiApiKey": "API 密钥", + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, + "aiApiKeyStoredHint": "密钥已存储在系统凭据存储中", + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, + "aiApiKeyEnterHint": "输入提供商 API 密钥", + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, + "aiReplaceApiKey": "替换 API 密钥", + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, + "aiSaveApiKey": "安全保存 API 密钥", + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, + "aiRemoveApiKey": "移除已保存的 API 密钥", + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, + "aiCredentialSaved": "API 密钥已保存到系统凭据存储中。", + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, + "aiCredentialRemoved": "已移除保存的 API 密钥。", + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, + "aiModelRouting": "模型路由", + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, + "aiAutomaticRouting": "按任务自动选择", + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, + "aiFixedModelRouting": "使用选中的模型", + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, + "aiPreferredModel": "首选模型", + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, + "aiModel": "模型", + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, + "aiUsageThisMonth": "{requests} 个请求 · {input} 个输入 token · {output} 个输出 token", + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, + "aiCloudConsentTitle": "将内容发送给 {provider}?", + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiCloudConsentEnable": "启用 {provider}", + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiCloudConsentMessage": "只会发送每个 AI 审核对话框中显示的内容。请求不保存状态,建议需要审核,API 密钥存储在 Linux 系统凭据存储中。", + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, + "aiCloudConsentRequired": "请先在设置 → AI 中确认与 {provider} 共享数据。", + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "aiGenerationVerified": "已通过 {model} 验证生成能力。有 {count} 个兼容模型可用。", + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "aiColdStartObserved": "检测到本地模型冷启动。", + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, + "aiNoCompatibleModels": "没有可用的兼容文本生成模型。", + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, + "aiEnableProvider": "请先启用 AI 提供商。", + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, + "aiDraftCommitMessage": "起草提交消息", + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, + "aiDrafting": "正在起草…", + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, + "aiDraftWithAi": "使用 AI 起草", + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, + "generateOrUpdateMarkdownToc": "生成/更新目录", + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, + "markdownTocTitle": "目录", + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, + "markdownTocUpdated": "目录已更新,包含 {count} 个条目。", + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "markdownTocNoHeadings": "请先添加至少一个节标题,再生成目录。", + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, + "markdownTocMalformedMarkers": "BusyMark 目录标记缺失、重复或顺序错误。", + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, + "diagnosticMarkdownHeadingSkippedLevel": "标题级别 {level} 跟在级别 {previousLevel} 之后;请检查节的嵌套结构。", + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, + "diagnosticMarkdownLinkEmptyText": "链接文本为空;请提供能描述其用途的可访问名称。", + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, + "diagnosticMarkdownLinkReviewText": "请检查链接文本“{text}”是否在上下文中描述了其用途。", + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, + "diagnosticMarkdownTableEmptyHeader": "表头单元格必须标识其列;请补全每个空表头。", + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, + "mathRenderFailed": "无法渲染数学表达式。", + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, + "inlineMath": "行内数学", + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, + "displayMath": "显示数学", + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + } +} diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index ed78ce18..8ff8f1b2 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -14,12 +14,19 @@ import 'app_localizations_et.dart'; import 'app_localizations_fa.dart'; import 'app_localizations_fr.dart'; import 'app_localizations_hi.dart'; +import 'app_localizations_id.dart'; import 'app_localizations_it.dart'; +import 'app_localizations_ja.dart'; +import 'app_localizations_ko.dart'; import 'app_localizations_nb.dart'; +import 'app_localizations_nl.dart'; import 'app_localizations_pl.dart'; import 'app_localizations_pt.dart'; import 'app_localizations_ru.dart'; +import 'app_localizations_tr.dart'; import 'app_localizations_uk.dart'; +import 'app_localizations_vi.dart'; +import 'app_localizations_zh.dart'; // ignore_for_file: type=lint @@ -115,12 +122,20 @@ abstract class AppLocalizations { Locale('fa'), Locale('fr'), Locale('hi'), + Locale('id'), Locale('it'), + Locale('ja'), + Locale('ko'), Locale('nb'), + Locale('nl'), Locale('pl'), Locale('pt'), Locale('ru'), + Locale('tr'), Locale('uk'), + Locale('vi'), + Locale('zh'), + Locale('zh', 'CN'), ]; /// Application name. @@ -699,6 +714,18 @@ abstract class AppLocalizations { /// **'Deutsch'** String get languageGerman; + /// Language selector option for Dutch. + /// + /// In en, this message translates to: + /// **'Nederlands'** + String get languageDutch; + + /// Language selector option for Turkish. + /// + /// In en, this message translates to: + /// **'Türkçe'** + String get languageTurkish; + /// Language selector option for Italian. /// /// In en, this message translates to: @@ -765,12 +792,42 @@ abstract class AppLocalizations { /// **'हिन्दी'** String get languageHindi; + /// Language selector option for Indonesian. + /// + /// In en, this message translates to: + /// **'Bahasa Indonesia'** + String get languageIndonesian; + /// Language selector option for Estonian. /// /// In en, this message translates to: /// **'Eesti'** String get languageEstonian; + /// Language selector option for Vietnamese. + /// + /// In en, this message translates to: + /// **'Tiếng Việt'** + String get languageVietnamese; + + /// Language selector option for Japanese. + /// + /// In en, this message translates to: + /// **'日本語'** + String get languageJapanese; + + /// Language selector option for Korean. + /// + /// In en, this message translates to: + /// **'한국어'** + String get languageKorean; + + /// Language selector option for Simplified Chinese. + /// + /// In en, this message translates to: + /// **'简体中文'** + String get languageSimplifiedChinese; + /// Keyboard shortcuts label for the sidebar panel toggle. /// /// In en, this message translates to: @@ -5867,12 +5924,19 @@ class _AppLocalizationsDelegate 'fa', 'fr', 'hi', + 'id', 'it', + 'ja', + 'ko', 'nb', + 'nl', 'pl', 'pt', 'ru', + 'tr', 'uk', + 'vi', + 'zh', ].contains(locale.languageCode); @override @@ -5880,6 +5944,18 @@ class _AppLocalizationsDelegate } AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when language+country codes are specified. + switch (locale.languageCode) { + case 'zh': + { + switch (locale.countryCode) { + case 'CN': + return AppLocalizationsZhCn(); + } + break; + } + } + // Lookup logic when only language code is specified. switch (locale.languageCode) { case 'ar': @@ -5898,18 +5974,32 @@ AppLocalizations lookupAppLocalizations(Locale locale) { return AppLocalizationsFr(); case 'hi': return AppLocalizationsHi(); + case 'id': + return AppLocalizationsId(); case 'it': return AppLocalizationsIt(); + case 'ja': + return AppLocalizationsJa(); + case 'ko': + return AppLocalizationsKo(); case 'nb': return AppLocalizationsNb(); + case 'nl': + return AppLocalizationsNl(); case 'pl': return AppLocalizationsPl(); case 'pt': return AppLocalizationsPt(); case 'ru': return AppLocalizationsRu(); + case 'tr': + return AppLocalizationsTr(); case 'uk': return AppLocalizationsUk(); + case 'vi': + return AppLocalizationsVi(); + case 'zh': + return AppLocalizationsZh(); } throw FlutterError( diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index 4f5004fa..feda322f 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -311,6 +311,12 @@ class AppLocalizationsAr extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -344,9 +350,24 @@ class AppLocalizationsAr extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'اللوحة الجانبية'; diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 2d7f4266..d1133e45 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -315,6 +315,12 @@ class AppLocalizationsDe extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -348,9 +354,24 @@ class AppLocalizationsDe extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Seitenbereich'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index a1b49f89..a420b7b4 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -312,6 +312,12 @@ class AppLocalizationsEn extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -345,9 +351,24 @@ class AppLocalizationsEn extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Sidebar panel'; diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index cd8aa4a6..2a38369e 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -314,6 +314,12 @@ class AppLocalizationsEs extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -347,9 +353,24 @@ class AppLocalizationsEs extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Panel lateral'; diff --git a/lib/l10n/generated/app_localizations_et.dart b/lib/l10n/generated/app_localizations_et.dart index 3d48e009..489202e0 100644 --- a/lib/l10n/generated/app_localizations_et.dart +++ b/lib/l10n/generated/app_localizations_et.dart @@ -311,6 +311,12 @@ class AppLocalizationsEt extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -344,9 +350,24 @@ class AppLocalizationsEt extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Külgpaneel'; diff --git a/lib/l10n/generated/app_localizations_fa.dart b/lib/l10n/generated/app_localizations_fa.dart index f40cff47..9c00a0c5 100644 --- a/lib/l10n/generated/app_localizations_fa.dart +++ b/lib/l10n/generated/app_localizations_fa.dart @@ -311,6 +311,12 @@ class AppLocalizationsFa extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -344,9 +350,24 @@ class AppLocalizationsFa extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'پنل کناری'; diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 3a266bcd..6516475f 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -314,6 +314,12 @@ class AppLocalizationsFr extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -347,9 +353,24 @@ class AppLocalizationsFr extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Panneau latéral'; diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart index 981636bf..9a85b54a 100644 --- a/lib/l10n/generated/app_localizations_hi.dart +++ b/lib/l10n/generated/app_localizations_hi.dart @@ -313,6 +313,12 @@ class AppLocalizationsHi extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -346,9 +352,24 @@ class AppLocalizationsHi extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'साइडबार पैनल'; diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart new file mode 100644 index 00000000..58c98395 --- /dev/null +++ b/lib/l10n/generated/app_localizations_id.dart @@ -0,0 +1,3519 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Indonesian (`id`). +class AppLocalizationsId extends AppLocalizations { + AppLocalizationsId([String locale = 'id']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => + 'Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside.'; + + @override + String get aboutBusyMark => 'Tentang BusyMark'; + + @override + String get aboutTagline => 'Markdown dan Editor Writerside'; + + @override + String get aboutLicenseLabel => 'Lisensi'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => 'Situs web'; + + @override + String get aboutSourceCode => 'Kode sumber'; + + @override + String get reportIssue => 'Laporkan masalah'; + + @override + String get feedbackCategory => 'Kategori'; + + @override + String get feedbackChooseCategory => 'Pilih kategori'; + + @override + String get feedbackCategoryProblem => 'Masalah atau bug'; + + @override + String get feedbackCategoryFeature => 'Permintaan fitur'; + + @override + String get feedbackCategoryPrivacySecurity => 'Masalah privasi atau keamanan'; + + @override + String get feedbackCategoryUsability => 'Masalah kegunaan'; + + @override + String get feedbackCategoryOther => 'Lainnya'; + + @override + String get feedbackSubject => 'Subjek'; + + @override + String get feedbackMessage => 'Pesan terperinci'; + + @override + String get feedbackReplyEmail => 'Balasan email (opsional)'; + + @override + String get feedbackIncludeTechnicalDetails => 'Sertakan detail teknis'; + + @override + String get feedbackTechnicalDetailsDisclosure => + 'Jika diaktifkan, ini hanya menambahkan versi sistem operasi Linux dan lokal aplikasi BusyMark Anda. Tidak ada log, file, data akun, atau diagnostik lainnya yang dilampirkan.'; + + @override + String get feedbackSubmit => 'Kirim'; + + @override + String get feedbackSubmitting => 'Mengirimkan…'; + + @override + String get feedbackCategoryRequired => 'Pilih kategori.'; + + @override + String get feedbackSubjectLength => 'Subjek harus antara 3 dan 120 karakter.'; + + @override + String get feedbackMessageLength => + 'Pesan harus antara 10 dan 5.000 karakter.'; + + @override + String get feedbackReplyEmailInvalid => + 'Masukkan alamat email yang valid atau biarkan kolom ini kosong.'; + + @override + String get feedbackConnectionFailure => + 'BusyMark tidak dapat terhubung. Periksa koneksi internet Anda dan coba lagi.'; + + @override + String get feedbackTimeoutFailure => + 'Waktu permintaan telah habis. Coba lagi.'; + + @override + String get feedbackRateLimitedFailure => + 'Terlalu banyak laporan yang dikirim dari koneksi ini. Tunggu dan coba lagi.'; + + @override + String get feedbackRejectedFailure => + 'Server menolak laporan ini. Periksa kolom formulir dan coba lagi.'; + + @override + String get feedbackServerFailure => + 'Server tidak dapat menerima laporan tersebut. Coba lagi nanti.'; + + @override + String feedbackSuccess(String id) { + return 'Umpan balik dikirim. ID Referensi: $id'; + } + + @override + String get advanced => 'Lanjutan'; + + @override + String get addToGit => 'Tambahkan ke Git'; + + @override + String get appearance => 'Penampilan'; + + @override + String get apply => 'Terapkan'; + + @override + String get back => 'Kembali'; + + @override + String get bottomLeft => 'Kiri bawah'; + + @override + String get bottomRight => 'Kanan bawah'; + + @override + String get cancel => 'Batal'; + + @override + String get choose => 'Pilih'; + + @override + String get chooseLocation => 'Pilih lokasi'; + + @override + String get copy => 'Salin'; + + @override + String get copyName => 'Salin nama'; + + @override + String get copyFileName => 'Salin nama file'; + + @override + String get copyPath => 'Salin jalur'; + + @override + String get create => 'Buat'; + + @override + String get creating => 'Membuat...'; + + @override + String get cut => 'Potong'; + + @override + String get promoteSection => 'Bagian promosi'; + + @override + String get demoteSection => 'Bagian demosi'; + + @override + String get moveSectionUp => 'Pindahkan bagian ke atas'; + + @override + String get moveSectionDown => 'Pindahkan bagian ke bawah'; + + @override + String get confirmDeleteSectionTitle => 'Hapus bagian?'; + + @override + String confirmDeleteSectionMessage(String name) { + return 'Hapus “$name” dan semua konten di bagiannya? Hal ini tidak dapat dibatalkan.'; + } + + @override + String get darkTheme => 'Gelap'; + + @override + String get delete => 'Hapus'; + + @override + String get discard => 'Membuang'; + + @override + String get editor => 'Editor'; + + @override + String get file => 'File'; + + @override + String get fileHistory => 'Riwayat File'; + + @override + String get folder => 'Folder'; + + @override + String get insert => 'Sisipkan'; + + @override + String get keyboardShortcuts => 'Pintasan keyboard'; + + @override + String get commandPalette => 'Palet perintah'; + + @override + String get commandPaletteHint => 'Ketikkan perintah'; + + @override + String get commandPaletteEmpty => 'Tidak ada perintah yang cocok'; + + @override + String get commandUnavailableInContext => + 'Tidak tersedia dalam konteks editor saat ini'; + + @override + String get lightTheme => 'Terang'; + + @override + String get mainMenu => 'Menu utama'; + + @override + String get fullScreen => 'Layar penuh'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => 'Buka'; + + @override + String get openInFiles => 'Buka di File'; + + @override + String get pathActions => 'Tindakan jalur'; + + @override + String get outline => 'Garis besar'; + + @override + String get overwrite => 'Timpa'; + + @override + String get paste => 'Tempel'; + + @override + String get pasteWithoutFormatting => 'Tempel tanpa memformat'; + + @override + String get reading => 'Membaca'; + + @override + String get removeFromRecent => 'Hapus dari Terbaru'; + + @override + String get recent => 'Terbaru'; + + @override + String get redo => 'Ulangi'; + + @override + String get save => 'Simpan'; + + @override + String get search => 'Cari'; + + @override + String get selectAll => 'Pilih semua'; + + @override + String get settings => 'Pengaturan'; + + @override + String get source => 'Sumber'; + + @override + String get split => 'Pisahkan'; + + @override + String get systemTheme => 'Sistem'; + + @override + String get theme => 'Tema'; + + @override + String get appLanguage => 'Bahasa'; + + @override + String get systemLanguage => 'Sistem'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => 'Panel bilah sisi'; + + @override + String get topLeft => 'Kiri atas'; + + @override + String get topRight => 'Kanan atas'; + + @override + String get undo => 'Urungkan'; + + @override + String get validate => 'Validasi'; + + @override + String get validation => 'Validasi'; + + @override + String get viewMode => 'Modus tampilan'; + + @override + String get welcome => 'Selamat datang'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => 'Gambar'; + + @override + String get openMarkdownFile => 'Buka File Markdown'; + + @override + String get markdownFileExtensions => '.md atau .markdown'; + + @override + String get openFolderOrWritersideProject => + 'Buka Folder atau Proyek Writerside'; + + @override + String get markdownFolderOrWritersideProject => + 'Folder Markdown atau proyek yang kompatibel dengan Writerside'; + + @override + String get noOpenFile => 'Tidak ada file yang terbuka'; + + @override + String get shortcutDeleteTreeItemDescription => + 'Hapus item File yang dipilih, atau hapus topik yang dipilih dari daftar isi'; + + @override + String get shortcutGroupGeneral => 'Umum'; + + @override + String get shortcutNewDocument => 'Buat'; + + @override + String get shortcutNewDocumentDescription => + 'Buat file Markdown atau proyek Writerside'; + + @override + String get shortcutOpenDescription => + 'Buka file Markdown, folder, atau proyek Writerside'; + + @override + String get shortcutSaveDescription => 'Simpan dokumen saat ini'; + + @override + String get shortcutSearchDescription => 'Cari ruang kerja saat ini'; + + @override + String get shortcutKeyboardShortcutsDescription => + 'Tampilkan referensi pintasan keyboard ini'; + + @override + String get shortcutMarkdownAndHtmlDescription => + 'Buka referensi Markdown dan HTML'; + + @override + String get shortcutSettingsDescription => 'Buka pengaturan BusyMark'; + + @override + String get shortcutNextTab => 'Tab berikutnya'; + + @override + String get shortcutNextTabDescription => 'Pindah ke tab terbuka berikutnya'; + + @override + String get shortcutPreviousTab => 'Tab sebelumnya'; + + @override + String get shortcutPreviousTabDescription => + 'Pindah ke tab terbuka sebelumnya'; + + @override + String get shortcutCloseTab => 'Tutup tab'; + + @override + String get shortcutCloseTabDescription => 'Tutup tab aktif'; + + @override + String get shortcutCloseAllTabs => 'Tutup semua tab'; + + @override + String get shortcutCloseAllTabsDescription => 'Tutup semua tab yang terbuka'; + + @override + String get shortcutGroupTextEditing => 'Pengeditan teks'; + + @override + String get shortcutSelectAllDescription => + 'Dalam mode Sumber, pilih semua teks; dalam mode Editor, tekan dua kali untuk memilih setiap blok'; + + @override + String get shortcutCutDescription => 'Potong teks yang dipilih'; + + @override + String get shortcutCopyDescription => 'Salin teks yang dipilih'; + + @override + String get shortcutPasteDescription => 'Tempel dari papan klip'; + + @override + String get shortcutPastePlainTextDescription => + 'Tempel teks papan klip tanpa memformat'; + + @override + String get shortcutUndoDescription => 'Urungkan pengeditan terakhir'; + + @override + String get shortcutRedoDescription => + 'Ulangi pengeditan terakhir yang belum selesai'; + + @override + String get shortcutInsertIndentation => 'Masukkan lekukan'; + + @override + String get shortcutInsertIndentationDescription => + 'Sisipkan lekukan pada kursor'; + + @override + String get shortcutOutdentSource => 'Kurangi inden sumber'; + + @override + String get shortcutOutdentSourceDescription => + 'Hapus satu tingkat lekukan dalam mode Sumber'; + + @override + String get shortcutEscape => 'Tutup pencarian atau hapus pilihan blok'; + + @override + String get shortcutEscapeDescription => + 'Tutup pencarian ruang kerja atau hapus pilihan blok dalam mode Editor'; + + @override + String get shortcutGroupFormatting => 'Pemformatan'; + + @override + String get shortcutBoldDescription => + 'Alihkan huruf tebal pada teks yang dipilih'; + + @override + String get shortcutItalicDescription => + 'Alihkan huruf miring pada teks yang dipilih'; + + @override + String get shortcutUnderlineDescription => + 'Alihkan garis bawah pada teks yang dipilih'; + + @override + String get shortcutLinkDescription => 'Sisipkan atau edit tautan'; + + @override + String get shortcutInlineCodeDescription => + 'Alihkan kode sebaris pada teks yang dipilih'; + + @override + String get shortcutStrikethroughDescription => + 'Alihkan coretan pada teks yang dipilih'; + + @override + String get shortcutGroupBlocks => 'Blok'; + + @override + String get shortcutParagraphDescription => 'Atur blok saat ini ke paragraf'; + + @override + String get shortcutHeading1Description => + 'Atur blok saat ini sebagai judul 1'; + + @override + String get shortcutHeading2Description => + 'Atur blok saat ini sebagai judul 2'; + + @override + String get shortcutHeading3Description => + 'Atur blok saat ini sebagai judul 3'; + + @override + String get shortcutHeading4Description => + 'Atur blok saat ini sebagai judul 4'; + + @override + String get shortcutHeading5Description => + 'Atur blok saat ini sebagai judul 5'; + + @override + String get shortcutHeading6Description => + 'Atur blok saat ini sebagai judul 6'; + + @override + String get shortcutGroupLists => 'Daftar'; + + @override + String get numberedList => 'Daftar bernomor'; + + @override + String get shortcutNumberedListDescription => + 'Alihkan pemformatan daftar bernomor'; + + @override + String get bulletedList => 'Daftar berpoin'; + + @override + String get shortcutBulletedListDescription => + 'Alihkan pemformatan daftar berpoin'; + + @override + String get checklist => 'Daftar periksa'; + + @override + String get shortcutChecklistDescription => + 'Alihkan pemformatan daftar periksa'; + + @override + String get shortcutGroupSidebar => 'Bilah samping'; + + @override + String get sidebarViewMenu => 'Tampilan bilah sisi'; + + @override + String get createMarkdownFile => 'Buat File Markdown'; + + @override + String get createMarkdownFileDescription => + 'Mulai dokumen Markdown lokal yang belum disimpan'; + + @override + String get createWritersideProject => 'Buat Proyek Writerside'; + + @override + String get createWritersideProjectDescription => + 'Mulai proyek lokal yang kompatibel dengan Writerside'; + + @override + String get defaultProjectName => 'Dokumentasi'; + + @override + String get defaultInstanceName => 'Panduan Pengguna'; + + @override + String get defaultStartTopicTitle => 'Memulai'; + + @override + String get projectName => 'Nama proyek'; + + @override + String get directoryName => 'Nama direktori'; + + @override + String get instanceName => 'Nama instance'; + + @override + String get instanceId => 'ID instance'; + + @override + String get startTopicTitle => 'Mulai judul topik'; + + @override + String get location => 'Lokasi'; + + @override + String get projectNameRequired => 'Nama proyek wajib diisi.'; + + @override + String get directoryNameRequired => 'Nama direktori wajib diisi.'; + + @override + String get useSingleSafeDirectoryName => 'Gunakan satu nama direktori aman.'; + + @override + String get useLowercaseIdentifier => + 'Gunakan pengenal huruf kecil dengan huruf, angka, garis bawah, atau tanda hubung.'; + + @override + String get startTopicTitleRequired => 'Judul topik awal wajib diisi.'; + + @override + String get createWritersideProjectFailed => + 'Tidak dapat membuat proyek Writerside.'; + + @override + String get settingsTitle => 'Pengaturan BusyMark'; + + @override + String get autoSave => 'Simpan otomatis'; + + @override + String get autoSaveDescription => + 'Simpan perubahan file secara otomatis setelah jeda singkat.'; + + @override + String get wordWrap => 'Pindah baris otomatis'; + + @override + String get editorFontSize => 'Ukuran font editor'; + + @override + String get validateOnEdit => 'Validasi saat mengedit'; + + @override + String get clearRecentWorkspaces => 'Hapus ruang kerja terbaru'; + + @override + String get editingButtonsPosition => 'Posisi tombol pengeditan'; + + @override + String get editingButtonsPositionDescription => + 'Pilih di mana tombol pengeditan WYSIWYG mengambang muncul.'; + + @override + String get editingButtonsDirection => 'Arah tombol pengeditan'; + + @override + String get editingButtonsDirectionDescription => + 'Pilih apakah tombol pengeditan WYSIWYG mengambang disusun secara horizontal atau vertikal.'; + + @override + String get horizontal => 'Horizontal'; + + @override + String get vertical => 'Vertikal'; + + @override + String get privacy => 'Privasi'; + + @override + String get allowRemoteImages => 'Muat gambar jarak jauh'; + + @override + String get allowRemoteImagesDescription => + 'Izinkan pratinjau Markdown dan gambar editor dimuat dari URL http dan https.'; + + @override + String get clearRemoteImagePermissions => 'Hapus izin gambar jarak jauh'; + + @override + String get clearRemoteImagePermissionsDescription => + 'Lupakan ruang kerja yang diizinkan memuat gambar jarak jauh.'; + + @override + String get clearGitWorkspaceTrust => 'Hapus ruang kerja Git yang tepercaya'; + + @override + String get clearGitWorkspaceTrustDescription => + 'Tanyakan sebelum mengaktifkan fitur Git untuk ruang kerja tepercaya sebelumnya.'; + + @override + String get settingsWindowSectionTitle => 'Jendela'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => + 'Buka kembali ruang kerja sebelumnya saat startup'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'Buka ruang kerja dan tab dari sesi sebelumnya saat BusyMark dimulai.'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + 'Konfirmasikan sebelum menutup dengan perubahan yang belum disimpan'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + 'Tanyakan sebelum menutup BusyMark jika ada perubahan yang belum disimpan pada dokumen.'; + + @override + String get closeUnsavedChangesTitle => 'Perubahan yang belum disimpan'; + + @override + String get closeUnsavedChangesSingleMessage => + 'Dokumen ini memiliki perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Ada $count dokumen dengan perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?', + one: + 'Ada 1 dokumen dengan perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?', + zero: 'Simpan perubahan sebelum menutup BusyMark?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => 'Batal'; + + @override + String get closeUnsavedChangesDiscard => 'Membuang'; + + @override + String get closeUnsavedChangesSave => 'Simpan'; + + @override + String get currentFile => 'File saat ini'; + + @override + String get unsavedChanges => 'Perubahan yang belum disimpan'; + + @override + String unsavedChangesMessage(String fileName) { + return 'Anda memiliki perubahan yang belum disimpan di $fileName. Simpan sebelum melanjutkan?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Ada $count dokumen dengan perubahan yang belum disimpan. Simpan sebelum melanjutkan?', + one: + 'Ada 1 dokumen dengan perubahan yang belum disimpan. Simpan sebelum melanjutkan?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => 'File diubah pada disk'; + + @override + String get fileChangedOnDiskMessage => + 'File ini berubah pada disk sejak Anda membukanya. Timpa itu?'; + + @override + String get untitledMarkdownFileName => 'Tanpa judul.md'; + + @override + String get unorderedList => 'Daftar tidak berurutan'; + + @override + String get orderedList => 'Daftar bernomor'; + + @override + String get taskList => 'Daftar tugas'; + + @override + String get toggleTaskChecked => 'Alihkan status tugas'; + + @override + String get indentListItem => 'Tambah inden item daftar'; + + @override + String get outdentListItem => 'Kurangi inden item daftar'; + + @override + String get blockquote => 'Kutipan blok'; + + @override + String get codeBlock => 'Blok kode'; + + @override + String get codeBlockLanguage => 'Bahasa blok kode'; + + @override + String get image => 'Gambar'; + + @override + String get video => 'Video'; + + @override + String get openVideo => 'Putar video'; + + @override + String get pauseVideo => 'Jeda video'; + + @override + String get videoUnavailable => 'Video tidak tersedia'; + + @override + String get videoPreview => 'Pratinjau video'; + + @override + String get diagnosticWritersideVideoMissingSource => + 'Video tidak memiliki atribut src-nya.'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return 'Sumber video tidak didukung: $source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return 'File video tidak ada: $source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return 'Gambar pratinjau video tidak ada: $preview'; + } + + @override + String get inlineImage => 'Gambar sebaris'; + + @override + String get table => 'Tabel'; + + @override + String get htmlBlock => 'Blok HTML'; + + @override + String get htmlContentDefault => 'Konten HTML'; + + @override + String get shortcutHtmlBlockDescription => 'Sisipkan atau edit blok HTML'; + + @override + String get renderedHtml => 'HTML yang dirender'; + + @override + String get editHtml => 'Edit HTML'; + + @override + String get htmlSource => 'Sumber HTML'; + + @override + String get thematicBreak => 'Pemisah tematik'; + + @override + String get bold => 'Tebal'; + + @override + String get italic => 'Miring'; + + @override + String get underline => 'Garis bawah'; + + @override + String get strikethrough => 'Dicoret'; + + @override + String get inlineCode => 'Kode sebaris'; + + @override + String get link => 'Link'; + + @override + String get hardLineBreak => 'Pemisah baris keras'; + + @override + String get textStyle => 'Gaya teks'; + + @override + String get paragraph => 'Paragraf'; + + @override + String get heading1 => 'Judul 1'; + + @override + String get heading2 => 'Judul 2'; + + @override + String get heading3 => 'Judul 3'; + + @override + String get heading4 => 'Judul 4'; + + @override + String get heading5 => 'Judul 5'; + + @override + String get heading6 => 'Judul 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => 'Hapus tabel'; + + @override + String tableColumnNumber(int columnNumber) { + return 'Kolom $columnNumber'; + } + + @override + String get insertColumnLeft => 'Sisipkan kolom ke kiri'; + + @override + String get insertColumnRight => 'Sisipkan kolom ke kanan'; + + @override + String get deleteColumn => 'Hapus kolom'; + + @override + String get tableAlignmentUnspecified => 'Perataan: Tidak ditentukan'; + + @override + String get tableAlignmentLeft => 'Perataan: Kiri'; + + @override + String get tableAlignmentCenter => 'Perataan: Tengah'; + + @override + String get tableAlignmentRight => 'Perataan: Kanan'; + + @override + String tableRowNumber(int rowNumber) { + return 'Baris $rowNumber'; + } + + @override + String get insertRowAbove => 'Sisipkan baris di atas'; + + @override + String get insertRowBelow => 'Sisipkan baris di bawah'; + + @override + String get deleteRow => 'Hapus baris'; + + @override + String get tableHeaderHint => 'Header'; + + @override + String get tableCellHint => 'Sel'; + + @override + String get language => 'Bahasa'; + + @override + String get hideEditingButtons => 'Sembunyikan tombol pengeditan'; + + @override + String get showEditingButtons => 'Tampilkan tombol pengeditan'; + + @override + String get altText => 'Teks alternatif'; + + @override + String get editorPlaceholderText => 'teks'; + + @override + String get editorPlaceholderCode => 'kode'; + + @override + String get editorPlaceholderAltText => 'teks alternatif'; + + @override + String get describeTheImage => 'Jelaskan gambarnya'; + + @override + String get columns => 'Kolom'; + + @override + String get rows => 'Baris'; + + @override + String tableHeaderNumber(int columnNumber) { + return 'Header $columnNumber'; + } + + @override + String get tableCellDefault => 'Sel'; + + @override + String get noImageSource => 'Tidak ada sumber gambar'; + + @override + String get remoteImageBlocked => 'Gambar jarak jauh diblokir'; + + @override + String get remoteImageBlockedTooltip => + 'Pilih apakah BusyMark dapat memuat gambar jarak jauh.'; + + @override + String get remoteImagesBlockedTitle => 'Gambar jarak jauh diblokir'; + + @override + String get remoteImagesBlockedMessage => + 'Dokumen ini merujuk pada gambar dari internet. Memuatnya dapat mengungkapkan informasi jaringan ke host gambar.'; + + @override + String get loadRemoteImagesForWorkspace => 'Muat untuk ruang kerja ini'; + + @override + String get alwaysLoadRemoteImages => 'Selalu muat gambar jarak jauh'; + + @override + String get hideSidebar => 'Sembunyikan panel bilah sisi'; + + @override + String get showSidebar => 'Tampilkan panel bilah sisi'; + + @override + String get showPreview => 'Tampilkan pratinjau'; + + @override + String get hidePreview => 'Sembunyikan pratinjau'; + + @override + String get workspaceKindUnsavedMarkdown => + 'File Markdown yang belum disimpan'; + + @override + String get workspaceKindSingleMarkdown => 'File Markdown tunggal'; + + @override + String get workspaceKindMarkdownFolder => 'Folder Markdown'; + + @override + String get workspaceKindWritersideModule => 'Modul Writerside'; + + @override + String get problems => 'Masalah'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count diagnostik', + one: '1 diagnostik', + zero: 'Tidak ada diagnostik', + ); + return '$_temp0'; + } + + @override + String get files => 'File'; + + @override + String get toc => 'Daftar isi'; + + @override + String get tocActions => 'Tindakan TOC'; + + @override + String get markdownUnsaved => 'Markdown - belum disimpan'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count file', + one: '1 file', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => 'Tidak ada file'; + + @override + String get newFile => 'File baru'; + + @override + String get noWritersideToc => 'Tidak ada TOC Writerside'; + + @override + String get tocSection => 'Bagian daftar isi'; + + @override + String get newTopic => 'Topik baru'; + + @override + String get newChildTopic => 'Topik anak baru'; + + @override + String get newSiblingTopic => 'Topik saudara baru'; + + @override + String get renameTopicFile => 'Ganti nama file topik'; + + @override + String get topicPlacement => 'Penempatan TOC'; + + @override + String get tocRoot => 'Di akar TOC'; + + @override + String get afterSelectedTopic => 'Setelah topik dipilih'; + + @override + String get insideSelectedTopic => 'Di dalam topik yang dipilih'; + + @override + String get pasteAfterTopic => 'Tempel setelah'; + + @override + String get pasteAsChildTopic => 'Tempel sebagai anak'; + + @override + String get removeFromToc => 'Hapus dari TOC'; + + @override + String get confirmRemoveFromTocTitle => 'Hapus dari TOC?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return 'Hapus $name dari daftar isi ini? File topik akan disimpan.'; + } + + @override + String get confirmDeleteTopicTitle => 'Hapus file topik?'; + + @override + String confirmDeleteTopicMessage(String name) { + return 'Hapus $name dan hapus dari setiap daftar isi? Hal ini tidak dapat dibatalkan.'; + } + + @override + String get safeDeleteTopicFile => 'Hapus file topik dengan aman…'; + + @override + String get removeTocElement => 'Hapus elemen TOC'; + + @override + String get reviewUsages => 'Tinjau penggunaan'; + + @override + String get deleteTopicFile => 'Hapus file topik'; + + @override + String get removeAction => 'Hapus'; + + @override + String topicRemovalSummary(String topic) { + return 'Hapus “$topic” dari instance yang dipilih. File topik akan disimpan.'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return 'Hapus “$topic” dan perbarui referensinya dengan aman di seluruh proyek Writerside ini.'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count topik anak akan naik satu tingkat.', + one: '1 topik anak akan naik satu tingkat.', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + 'Topik ini digunakan sebagai halaman awal instance. Tinjau penggunaannya dan tetapkan halaman awal lain sebelum melanjutkan.'; + + @override + String topicUsagesCount(int count) { + return 'Penggunaan ($count)'; + } + + @override + String get noBreakingTopicUsages => 'Tidak ditemukan referensi yang rusak.'; + + @override + String get topicUsagesFound => + 'BusyMark menemukan referensi berikut untuk topik ini.'; + + @override + String get topicUsageTocElements => 'elemen TOC'; + + @override + String get topicUsageStartPages => 'Halaman awal'; + + @override + String get topicUsageTopicLinks => 'Tautan topik'; + + @override + String get topicUsageIncludes => 'Termasuk'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count penggunaan', + one: '1 penggunaan', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => 'Opsi refaktor'; + + @override + String get updateUsagesAutomatically => 'Perbarui penggunaan secara otomatis'; + + @override + String get updateUsagesAutomaticallyDescription => + 'Hapus referensi dan include TOC, serta pertahankan teks tautan.'; + + @override + String get manualUsageUpdatesRequired => + 'Beberapa penggunaan memerlukan perubahan manual sebelum pemfaktoran ulang ini.'; + + @override + String get setRedirectTo => 'Alihkan ke'; + + @override + String get noRedirectDescription => + 'Jangan mengalihkan halaman lama yang diterbitkan.'; + + @override + String get redirectTarget => 'Target pengalihan'; + + @override + String get remainingUsagesBlockRemoval => + 'Tinjau dan perbarui sisa penggunaan sebelum melanjutkan, atau aktifkan pembaruan otomatis bila tersedia.'; + + @override + String usagesOfTopic(String topic) { + return 'Penggunaan $topic'; + } + + @override + String get noUsagesFound => 'Tidak ada penggunaan yang ditemukan'; + + @override + String get outsideSelectedInstance => 'di luar instance yang dipilih'; + + @override + String get doRefactor => 'Lakukan refaktor'; + + @override + String get orphanTopicTitle => 'File topik tidak lagi digunakan'; + + @override + String get keepTopicFile => 'Simpan file topik'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic” tidak lagi digunakan di mana pun dalam proyek Writerside ini. Hapus file, atau simpan untuk digunakan di tempat lain.'; + } + + @override + String get defaultNewTopicTitle => 'Topik baru'; + + @override + String get topicTitle => 'Judul topik'; + + @override + String get fileName => 'Nama file'; + + @override + String get topicTitleRequired => 'Judul topik wajib diisi.'; + + @override + String get fileNameRequired => 'Nama file wajib diisi.'; + + @override + String get rename => 'Ganti nama'; + + @override + String get confirmDeleteFileTitle => 'Hapus file?'; + + @override + String get confirmDeleteFolderTitle => 'Hapus folder?'; + + @override + String confirmDeleteFileMessage(String name) { + return 'Hapus $name? Hal ini tidak dapat dibatalkan.'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return 'Hapus $name dan semua file di dalamnya? Hal ini tidak dapat dibatalkan.'; + } + + @override + String get useSingleSafeFileName => 'Gunakan satu nama file yang aman.'; + + @override + String useExpectedExtension(String extension) { + return 'Gunakan ekstensi $extension untuk format yang dipilih.'; + } + + @override + String get useIdentifierCharacters => + 'Gunakan huruf, angka, garis bawah, atau tanda hubung sebelum ekstensi.'; + + @override + String get topicIdAlreadyExists => 'ID Topik sudah ada.'; + + @override + String get createWritersideTopicFailed => + 'Tidak dapat membuat topik Writerside.'; + + @override + String get noOutline => 'Tidak ada garis besar'; + + @override + String expandKind(String kind) { + return 'Perluas $kind'; + } + + @override + String collapseKind(String kind) { + return 'Ciutkan $kind'; + } + + @override + String get foldKindSection => 'bagian'; + + @override + String get foldKindList => 'daftar'; + + @override + String get foldKindQuote => 'kutipan'; + + @override + String get foldKindTag => 'tag'; + + @override + String get sourceSearchPreviousMatch => 'Kecocokan sebelumnya'; + + @override + String get sourceSearchNextMatch => 'Kecocokan berikutnya'; + + @override + String get sourceSearchCaseSensitive => 'Peka huruf besar-kecil'; + + @override + String get sourceSearchWholeWord => 'Seluruh kata'; + + @override + String get sourceSearchRegex => 'Regex'; + + @override + String get sourceSearchReplacement => 'Ganti dengan'; + + @override + String get sourceSearchReplaceCurrent => 'Ganti arus'; + + @override + String get sourceSearchReplaceAndFindNext => 'Ganti dan temukan selanjutnya'; + + @override + String get sourceSearchReplaceAll => 'Ganti semua'; + + @override + String get workspaceReplace => 'Ganti di Ruang Kerja'; + + @override + String get reviewReplacements => 'Tinjau penggantinya'; + + @override + String get applyReplacements => 'Terapkan penggantinya'; + + @override + String get skippedFiles => 'File yang dilewati'; + + @override + String get workspaceReplaceDirtyBuffer => 'Konten editor belum disimpan'; + + @override + String get workspaceReplaceDiskContent => 'Konten disk yang disimpan'; + + @override + String selectFileMatches(int count) { + return 'Pilih semua kecocokan $count'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return 'Mengganti $matches kecocokan dalam file $files; dilewati $skipped.'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Baris baru di akhir'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Tidak ada baris baru di akhir'; + } + + @override + String get normalizeLineEndings => 'Normalisasi akhir baris'; + + @override + String get mixedLineEndingsSavePrompt => + 'Dokumen ini berisi akhiran baris campuran. Pilih format.'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName menggunakan akhiran baris campuran. Pilih format yang akan digunakan sebelum mengganti.'; + } + + @override + String get workspaceReplaceIssueOversized => + 'Melewatkan file berukuran besar.'; + + @override + String get workspaceReplaceIssueUnreadable => + 'Melewatkan file yang tidak dapat dibaca.'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => + 'Melewatkan file yang tidak valid UTF-8.'; + + @override + String get workspaceReplaceIssueTruncated => 'Pratinjau pengganti terpotong.'; + + @override + String get workspaceReplaceIssueFileChanged => + 'Melewatkan file yang berubah setelah pratinjau.'; + + @override + String get workspaceReplaceIssueBufferChanged => + 'Melewati buffer editor yang berubah setelah pratinjau.'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + 'Pilih normalisasi LF atau CRLF sebelum mengganti.'; + + @override + String get workspaceReplaceIssuePartialConflict => + 'Rollback terhenti karena file berubah secara bersamaan. Beberapa penggantian mungkin tetap ada; konten yang dipindahkan dipertahankan di jalur di bawah ini.'; + + @override + String get workspaceReplaceIssueApplyFailed => + 'Penggantian yang ditinjau tidak dapat dilakukan; tidak ada file yang diubah.'; + + @override + String externalChangesTitle(String fileName) { + return 'Perubahan eksternal — $fileName'; + } + + @override + String get externalFileDeleted => 'File ini telah dihapus pada disk.'; + + @override + String get externalFileChanged => + 'File ini diubah pada disk saat Anda memiliki hasil edit yang belum disimpan.'; + + @override + String recoveredDocumentReview(String fileName) { + return 'Memulihkan konten yang belum disimpan untuk $fileName. Periksa, lalu simpan, simpan sebagai, atau buang.'; + } + + @override + String get compare => 'Bandingkan'; + + @override + String get reloadFromDisk => 'Muat ulang dari disk'; + + @override + String get keepMine => 'Pertahankan milik saya'; + + @override + String get saveAs => 'Simpan sebagai'; + + @override + String get sourceSearchInvalidRegex => 'Ekspresi reguler tidak valid'; + + @override + String get sourceLargeFileFeaturesPaused => + 'File besar: penyorotan dan pelipatan dijeda'; + + @override + String get nothingToRead => 'Tidak ada yang perlu dibaca'; + + @override + String get admonition => 'Peringatan'; + + @override + String get quote => 'Kutipan'; + + @override + String get note => 'Catatan'; + + @override + String get tip => 'Tip'; + + @override + String get warning => 'Peringatan'; + + @override + String get tabs => 'tab'; + + @override + String get tab => 'tab'; + + @override + String get procedure => 'Prosedur'; + + @override + String get step => 'Langkah'; + + @override + String get topic => 'Topik'; + + @override + String get chapter => 'Bab'; + + @override + String couldNotOpenTarget(String target) { + return 'Tidak dapat membuka $target'; + } + + @override + String linkTargetNotFound(String targetPath) { + return 'Target tautan tidak ditemukan: $targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => + 'Tidak dapat membuka jenis file ini di editor'; + + @override + String anchorNotFound(String anchor) { + return 'Jangkar tidak ditemukan: $anchor'; + } + + @override + String get noProblemsFound => 'Tidak ada masalah yang ditemukan'; + + @override + String get noResults => 'Tidak ada hasil'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - Baris $lineNumber'; + } + + @override + String get untitledResult => 'Hasil tanpa judul'; + + @override + String get documentKindMarkdownFile => 'File Markdown'; + + @override + String get documentKindWritersideMarkdownTopic => 'Topik Markdown Writerside'; + + @override + String get documentKindWritersideXmlTopic => 'Topik XML Writerside'; + + @override + String get documentKindWritersideTree => 'Pohon Writerside'; + + @override + String get documentKindConfigurationFile => 'File konfigurasi'; + + @override + String get documentKindVariablesFile => 'File variabel'; + + @override + String get documentKindCategoriesFile => 'File kategori'; + + @override + String get documentKindResourceFile => 'File sumber daya'; + + @override + String workspaceErrorOpenFailed(String error) { + return 'Gagal dibuka: $error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Tidak dapat membuat proyek Writerside: $error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Tidak dapat membuat topik Writerside: $error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return 'Tidak dapat membuka file: $error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + 'Pilih tempat untuk menyimpan file Markdown ini.'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + 'Penyimpanan diblokir: file diubah pada disk.'; + + @override + String workspaceErrorSaveFailed(String error) { + return 'Gagal menyimpan: $error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return 'Operasi file gagal: $error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return 'Validasi gagal: $error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count dokumen yang belum disimpan berhasil dipulihkan. Tinjau masing-masing sebelum menyimpan atau membuangnya.', + one: + '1 dokumen yang belum disimpan berhasil dipulihkan. Tinjau sebelum menyimpan atau membuangnya.', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count catatan pemulihan yang rusak tidak dapat dipulihkan. Catatan pemulihan yang valid tetap tersedia.', + one: + '1 catatan pemulihan yang rusak tidak dapat dipulihkan. File pemulihan asli dipertahankan untuk diperiksa.', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return 'Jalur tidak ada: $path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return 'Direktori target sudah ada dan tidak kosong: $path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return 'Jalur target sudah ada dan bukan merupakan direktori: $path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return 'File yang dihasilkan sudah ada: $path'; + } + + @override + String get errorParentDirectoryRequired => 'Direktori induk diperlukan.'; + + @override + String errorParentDirectoryMissing(String path) { + return 'Direktori induk tidak ada: $path'; + } + + @override + String errorDirectoryMissing(String path) { + return 'Direktori tidak ada: $path'; + } + + @override + String errorPathAlreadyExists(String path) { + return 'Jalur sudah ada: $path'; + } + + @override + String get errorFileNameRequired => 'Nama file wajib diisi.'; + + @override + String get errorFileNameUnsafe => + 'Nama file harus berupa satu segmen jalur aman.'; + + @override + String get errorFileOperationInvalidTarget => + 'Tidak dapat memindahkan folder ke dalam folder itu sendiri.'; + + @override + String get errorFileOperationOutsideRoot => + 'Operasi file harus tetap berada di dalam ruang kerja.'; + + @override + String get errorFileOperationRoot => + 'Akar ruang kerja tidak dapat diubah dari pohon file.'; + + @override + String get errorProjectNameRequired => 'Nama proyek wajib diisi.'; + + @override + String get errorDirectoryNameRequired => 'Nama direktori wajib diisi.'; + + @override + String get errorDirectoryNameUnsafe => + 'Nama direktori harus berupa satu segmen jalur aman.'; + + @override + String get errorInstanceIdInvalid => + 'ID Instance harus dimulai dengan huruf kecil dan hanya berisi huruf kecil, angka, garis bawah, dan tanda hubung.'; + + @override + String get errorTopicFileInvalid => + 'Nama file topik harus berupa nama file Markdown tanpa pemisah jalur.'; + + @override + String get errorTopicTitleRequired => 'Judul topik wajib diisi.'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Root modul Writerside tidak ada: $path'; + } + + @override + String get errorWritersideModuleNotOpen => + 'Modul Writerside harus terbuka untuk membuat topik.'; + + @override + String get errorWritersideInstanceTreeMissing => + 'Modul Writerside tidak memiliki pohon instance.'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'File pohon Writerside tidak ada: $path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return 'ID topik \"$topicId\" sudah ada di modul bantuan ini.'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return 'File topik sudah ada: $path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return 'Topik referensi tidak ada di pohon yang dipilih: $topic'; + } + + @override + String get errorWritersideTocNodeMissing => + 'Entri TOC yang dipilih sudah tidak ada lagi.'; + + @override + String get errorWritersideTocInvalidMove => + 'Entri TOC tidak dapat dipindahkan ke dirinya sendiri atau ke salah satu turunannya.'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return 'Topik awal $topic tidak dapat dihapus. Pilih halaman awal lain terlebih dahulu.'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Gunakan Safe Delete untuk file topik Writerside.'; + + @override + String get errorWritersideTopicUsageScanFailed => + 'Tidak dapat menyelesaikan pemindaian penggunaan topik. Tidak ada file yang diubah.'; + + @override + String get errorWritersideTopicUsagesRemain => + 'Beberapa penggunaan topik masih memerlukan perhatian. Tinjaulah sebelum melanjutkan.'; + + @override + String get errorWritersideRedirectInvalid => + 'Target pengalihan yang dipilih tidak valid lagi. Pilih lagi.'; + + @override + String errorWritersideRollbackFailed(String paths) { + return 'Penghapusan topik tidak dapat dibatalkan sepenuhnya. Tinjau jalur ini sebelum melanjutkan: $paths'; + } + + @override + String get errorTopicsRootUnsafe => + 'Akar topik harus berupa direktori relatif yang aman.'; + + @override + String get errorTopicFileNameUnsafe => + 'Nama file topik harus berupa segmen jalur aman tunggal.'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return 'Ekstensi file topik harus sesuai dengan format yang dipilih ($extension).'; + } + + @override + String get errorTopicFileNameInvalid => + 'Nama file topik hanya boleh berisi huruf, angka, garis bawah, dan tanda hubung.'; + + @override + String errorUnknown(String code) { + return 'Kesalahan tidak diketahui: $code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return 'Tidak dapat membaca metadata file: $error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + 'Ruang kerja besar terdeteksi. Beberapa file dilewati agar aplikasi tetap responsif.'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return 'Tidak dapat memeriksa entri ruang kerja: $error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => + 'File lebih besar dari batas penguraian otomatis beta.'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Tidak dapat membaca file Markdown: $error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + 'Blok atribut judul Writerside salah format.'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return 'ID judul duplikat \"$id\".'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + 'Judul H1 tingkat atas tambahan diperlakukan sebagai bab.'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Topik Markdown Writerside tidak memiliki judul H1 atau materi depan.'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => + 'Judul topik XML tidak ada.'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return 'Topik \"$fileName\" tidak memiliki judul.'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => + 'Materi depan tidak tertutup.'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => 'Elemen HTML tidak aman.'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return 'Target tautan tidak ada: $targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return 'Jangkar \"$anchor\" tidak ada.'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return 'Teks alternatif pada gambar \"$destination\" tidak ada.'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return 'Gambar tidak ada: $destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return 'XML tidak valid: $message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'Root writerside.cfg harus .'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'deklarasi cuplikan tidak ada src.'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'Deklarasi instance-groups tidak memiliki src.'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return 'Mode peta kunci tidak didukung: $mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'Deklarasi instance tidak memiliki src.'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg tidak mendaftarkan sebuah instance.'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + 'Akar .tree harus .'; + + @override + String get diagnosticWritersideTreeMissingId => + 'Profil instance tidak memiliki id.'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return 'Batang file pohon tidak cocok dengan id instance \"$id\".'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + 'Instance non-pustaka tidak memiliki halaman awal.'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return 'Halaman awal \"$startPage\" tidak ada.'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return 'Topik \"$topic\" muncul lebih dari sekali dalam TOC instance ini.'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + 'Deklarasi variabel harus mempunyai nama dan nilai.'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return 'Variabel \"$name\" dideklarasikan lebih dari satu kali.'; + } + + @override + String get diagnosticWritersideCategoryMissingId => + 'Kategori tidak memiliki id.'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return 'Kategori \"$id\" dideklarasikan lebih dari satu kali.'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return 'Pesanan kategori \"$order\" dideklarasikan lebih dari satu kali.'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + 'Akar .topic harus .'; + + @override + String get diagnosticWritersideTopicMissingRootId => + 'Topik XML tidak memiliki id root.'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'Id akar topik XML \"$id\" harus cocok dengan nama file \"$expectedId\".'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return 'ID elemen \"$elementId\" muncul lebih dari sekali.'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => + ' tidak ada href.'; + + @override + String get diagnosticWritersideConfigMissing => + 'Mode Writerside memerlukan Writerside.cfg.'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return 'Direktori konfigurasi build yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return 'Direktori spesifikasi API yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return 'Direktori cuplikan yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return 'File variabel yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return 'File kategori yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return 'File grup instance yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return 'Pohon instance terdaftar \"$source\" tidak ada.'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return 'Tidak dapat membaca file topik: $error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return 'Direktori topik default tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return 'Direktori topik yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return 'Direktori gambar yang dikonfigurasi tidak ada: $relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return 'ID elemen \"$id\" muncul lebih dari sekali.'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return 'TOC mereferensikan topik \"$topic\" yang hilang.'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return 'Href eksternal \"$href\" tidak valid.'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return 'Variabel \"%$name%\" tidak dideklarasikan.'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return 'Tautan topik \"$destination\" tidak terselesaikan.'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return 'Jangkar \"$anchor\" tidak ada di \"$targetName\".'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => + ' tidak memiliki atribut from.'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return 'Sumber include \"$from\" tidak ada.'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return 'Elemen include \"$elementId\" tidak ada di \"$from\".'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'Lihat juga kategori \"$ref\" tidak dideklarasikan.'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return 'Referensi topik \"$reference\" bersifat ambigu.'; + } + + @override + String diagnosticUnknown(String code) { + return 'Diagnostik tidak diketahui: $code'; + } + + @override + String get close => 'Menutup'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git diff'; + + @override + String get gitShowDiff => 'Tunjukkan perbedaan'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return 'lama $oldRange → baru $newRange'; + } + + @override + String get gitDiffNoLines => 'tidak ada baris'; + + @override + String get gitUnavailableTitle => 'Git tidak tersedia'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': + 'Instal Git atau konfigurasikan BusyMark untuk menggunakan executable Git yang tersedia. $reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => 'Percayai ruang kerja ini untuk Git?'; + + @override + String get gitTrustRequiredMessage => + 'Repositori Git dapat menjalankan program melalui hook, filter, dan konfigurasi lainnya. Percayai ruang kerja ini sebelum BusyMark membaca data repositori atau mengaktifkan tindakan Git.'; + + @override + String get gitTrustWorkspace => 'Percayai ruang kerja'; + + @override + String get gitNotRepositoryTitle => 'Bukan repositori Git'; + + @override + String get gitNotRepositoryMessage => + 'Ruang kerja ini tidak berada di dalam repositori Git.'; + + @override + String get gitInitializeRepository => 'Inisialisasi repositori'; + + @override + String get gitDetachedHead => 'HEAD terpisah'; + + @override + String gitDetachedHeadAt(String commit) { + return 'Terpisah di $commit'; + } + + @override + String get gitNoUpstream => 'Tidak ada upstream'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count commit yang belum di-push', + one: '1 commit yang belum di-push', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count commit yang perlu di-pull', + one: '1 commit yang perlu di-pull', + ); + return '$_temp0'; + } + + @override + String get gitClean => 'Bersih'; + + @override + String get gitConflicts => 'Konflik'; + + @override + String get gitChanges => 'Perubahan'; + + @override + String get gitStaged => 'Di-stage'; + + @override + String get gitUnstaged => 'Belum di-stage'; + + @override + String get gitHistory => 'Riwayat'; + + @override + String get gitBranches => 'Cabang'; + + @override + String get gitActions => 'Tindakan Git'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => 'Stage file'; + + @override + String get gitRemoveFromCommit => 'Batalkan stage file'; + + @override + String get gitDiscard => 'Kembalikan'; + + @override + String get gitOpenFile => 'Buka file'; + + @override + String get gitMarkResolved => 'Tandai sebagai terselesaikan'; + + @override + String get gitUntracked => 'Tidak terlacak'; + + @override + String get gitCommitMessage => 'Pesan komit'; + + @override + String get gitCommitSelectedFiles => 'File yang dipilih'; + + @override + String get gitCommitNoSelectedFiles => + 'Stage setidaknya satu file sebelum melakukan commit.'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count file yang di-stage', + one: '1 file yang di-stage', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => 'Di luar ruang kerja'; + + @override + String get gitCommitMessageRequired => 'Masukkan pesan komit.'; + + @override + String get gitCreateBranch => 'Buat cabang'; + + @override + String get gitNewBranch => 'Cabang baru'; + + @override + String get gitBranchName => 'Nama cabang'; + + @override + String get gitSwitchBranch => 'Beralih'; + + @override + String get gitNoChanges => 'Tidak ada perubahan'; + + @override + String get gitNoHistory => 'Tidak ada sejarah'; + + @override + String get gitNoBranches => 'Tidak ada cabang'; + + @override + String get gitNoDiff => 'Tidak ada perbedaan untuk ditampilkan'; + + @override + String get gitBinaryFile => + 'File biner. BusyMark tidak merender patch biner.'; + + @override + String gitBinaryFileInfo(int size) { + return 'File biner ($size byte). BusyMark tidak merender patch biner.'; + } + + @override + String get gitUnsavedChangesBanner => + 'Perubahan editor yang belum disimpan tidak disertakan sampai disimpan.'; + + @override + String get gitConfirmDiscardTitle => 'Buang perubahan Git?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Semua perubahan yang di-stage dan tidak di-stage pada file terlacak yang dipilih akan dipulihkan ke HEAD.', + one: + 'Semua perubahan yang di-stage dan tidak di-stage pada file terlacak yang dipilih akan dipulihkan ke HEAD.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'File tak terlacak yang dipilih akan dihapus.', + one: 'File tak terlacak yang dipilih akan dihapus.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'File yang dipilih akan dipulihkan atau dihapus berdasarkan status Git-nya.', + one: + 'File yang dipilih akan dipulihkan atau dihapus berdasarkan status Git-nya.', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return 'Beralih ke $branch?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'BusyMark akan memuat ulang ruang kerja dari disk setelah Git berpindah cabang.'; + + @override + String get gitConfirmPushSetUpstreamTitle => 'Siapkan upstream cabang?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return 'Cabang ini tidak memiliki upstream. BusyMark dapat melakukan push $branch dan mengatur upstream-nya saat tepat satu remote dikonfigurasi.'; + } + + @override + String get gitProjectHistory => 'Riwayat proyek'; + + @override + String get gitFileHistory => 'Riwayat file'; + + @override + String get gitFileHistoryRequiresOpenFile => + 'Riwayat file memerlukan file Markdown yang terbuka.'; + + @override + String get gitLoadMore => 'Muat lebih banyak'; + + @override + String get gitChangesInCommit => 'Perubahan dalam commit ini'; + + @override + String get gitCompareWithCurrent => 'Bandingkan dengan saat ini'; + + @override + String get gitRestoreVersion => 'Pulihkan versi ini'; + + @override + String get gitConfirmRestoreTitle => 'Pulihkan versi file ini?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark akan mengganti file working tree saat ini dengan versi commit yang dipilih. File yang dipulihkan akan tetap belum di-stage.'; + + @override + String get gitCommitActions => 'Tindakan commit'; + + @override + String get gitResetCurrentBranchToHere => + 'Setel ulang cabang saat ini ke sini…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return 'Setel ulang $branch ke $commit?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return 'Ini memindahkan cabang $branch untuk melakukan $commit. Pilih bagaimana Git memperbarui indeks dan pohon kerja.'; + } + + @override + String get gitReset => 'Reset'; + + @override + String get gitResetModeSoft => 'Soft'; + + @override + String get gitResetModeSoftDescription => + 'Pindahkan cabang saja. Pertahankan indeks dan working tree tanpa perubahan; perbedaan dari commit yang dipilih tetap di-stage.'; + + @override + String get gitResetModeMixed => 'Mixed'; + + @override + String get gitResetModeMixedDescription => + 'Pindahkan cabang dan reset indeks. Pertahankan working tree tanpa perubahan; perbedaan tetap belum di-stage.'; + + @override + String get gitResetModeHard => 'Hard'; + + @override + String get gitResetModeHardDescription => + 'Pindahkan cabang dan reset indeks serta working tree. Perubahan tracked akan dibuang; file untracked yang menghalangi dapat dihapus.'; + + @override + String get gitResetModeKeep => 'Keep'; + + @override + String get gitResetModeKeepDescription => + 'Pindahkan cabang dan reset file tracked sambil mempertahankan perubahan lokal. Git membatalkan reset jika perubahan tersebut bertentangan.'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => 'Tindakan file'; + + @override + String get actions => 'Tindakan'; + + @override + String get gitStatusAdded => 'Ditambahkan'; + + @override + String get gitStatusDeleted => 'Dihapus'; + + @override + String get gitStatusRenamed => 'Berganti nama'; + + @override + String get gitStatusCopied => 'Disalin'; + + @override + String get gitStatusUntracked => 'Tidak terlacak'; + + @override + String get gitStatusConflicted => 'Berkonflik'; + + @override + String get gitStatusIgnored => 'Diabaikan'; + + @override + String get gitStatusTypeChanged => 'Jenis diubah'; + + @override + String get gitStatusModified => 'Dimodifikasi'; + + @override + String get gitStatusUnknown => 'Tidak dikenal'; + + @override + String get gitErrorUnavailable => 'Git tidak tersedia.'; + + @override + String get gitErrorNotRepository => 'Ruang kerja ini bukan repositori Git.'; + + @override + String get gitErrorUnsafePath => + 'BusyMark memblokir jalur Git yang tidak aman.'; + + @override + String get gitErrorInvalidBranchName => 'Masukkan nama cabang yang valid.'; + + @override + String get gitErrorNoRemote => 'Tidak ada remote Git yang dikonfigurasi.'; + + @override + String get gitErrorNoUpstream => + 'Tidak ada upstream cabang yang dikonfigurasi.'; + + @override + String get gitErrorMultipleRemotes => + 'Beberapa remote dikonfigurasi. Pilih upstream di luar versi BusyMark ini.'; + + @override + String get gitErrorDirtyWorkspace => + 'Simpan atau buang perubahan editor BusyMark sebelum berpindah cabang.'; + + @override + String get gitErrorResetDirtyWorkspace => + 'Simpan atau buang perubahan editor BusyMark sebelum mengatur ulang cabang saat ini.'; + + @override + String get gitErrorRestoreStagedFile => + 'Batalkan stage file ini sebelum memulihkan versi historis.'; + + @override + String get gitErrorResetDetachedHead => + 'Periksa cabang sebelum mengatur ulangnya.'; + + @override + String get gitErrorDiverged => + 'Cabang telah menyimpang. Selesaikan penggabungan atau rebase di luar versi BusyMark ini.'; + + @override + String get gitErrorAuthorIdentity => + 'Git memerlukan nama penulis dan alamat email sebelum dapat melakukan commit.'; + + @override + String get gitAuthorIdentityTitle => 'Identitas Penulis Git'; + + @override + String get gitAuthorIdentityMessage => + 'Masukkan identitas yang harus dicatat Git saat melakukan commit. BusyMark akan menyimpannya dan mencoba kembali commit ini.'; + + @override + String get gitAuthorName => 'Nama'; + + @override + String get gitAuthorEmail => 'E-mail'; + + @override + String get gitAuthorIdentityGlobal => 'Gunakan untuk semua repositori'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'Saat dipasang sebagai Snap, ini berlaku untuk repositori yang dibuka di BusyMark.'; + + @override + String get gitSaveIdentityAndCommit => 'Simpan dan commit'; + + @override + String get gitErrorAuthentication => 'Otentikasi Git gagal.'; + + @override + String get gitErrorNetwork => 'Operasi jaringan Git gagal.'; + + @override + String get gitErrorConflict => + 'Git melaporkan konflik yang belum terselesaikan.'; + + @override + String get gitErrorCommandFailed => 'Perintah Git gagal.'; + + @override + String get markdownAndHtml => 'Markdown dan HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Blok Markdown'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Struktur blok didukung dalam sumber Markdown dan pratinjau.'; + + @override + String get markdownHtmlInlineFormatting => 'Markdown Sebaris'; + + @override + String get markdownHtmlInlineFormattingDescription => + 'Pemformatan yang bisa muncul di dalam paragraf, item daftar, dan sel tabel.'; + + @override + String get markdownHtmlRawHtmlBlocks => 'Blok HTML Mentah'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'Tag HTML tingkat blok yang aman dirender melalui widget pratinjau BusyMark.'; + + @override + String get markdownHtmlRawHtmlInline => 'Tag Sebaris HTML Mentah'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + 'Tag HTML sebaris aman dirender tanpa menampilkan tag literal.'; + + @override + String get markdownHtmlSafety => 'Aturan Keamanan'; + + @override + String get markdownHtmlSafetyDescription => + 'HTML mentah diurai dan dibersihkan sebelum rendering pratinjau.'; + + @override + String get markdownHtmlHeadings => 'Judul'; + + @override + String get markdownHtmlParagraphs => 'Paragraf'; + + @override + String get markdownHtmlLists => 'Daftar'; + + @override + String get markdownHtmlHtmlContainers => 'Kontainer'; + + @override + String get markdownHtmlHtmlTextBlocks => 'Blok teks'; + + @override + String get markdownHtmlHtmlFigures => 'Gambar dan gambar'; + + @override + String get markdownHtmlHtmlPreformatted => + 'Kode yang telah diformat sebelumnya'; + + @override + String get markdownHtmlHtmlDisclosure => 'Blok pengungkapan'; + + @override + String get markdownHtmlHtmlDescriptionLists => 'Daftar deskripsi'; + + @override + String get markdownHtmlHtmlFormattingTags => 'Memformat tag'; + + @override + String get markdownHtmlHtmlInlineCodeTags => 'Tag kode sebaris'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => 'Tag teks semantik'; + + @override + String get markdownHtmlSanitizedPreview => 'Pratinjau yang sudah disanitasi'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + 'HTML yang diizinkan diubah menjadi blok pratinjau BusyMark, tidak dirender di browser.'; + + @override + String get markdownHtmlSourcePreserved => 'Sumber dipertahankan'; + + @override + String get markdownHtmlSourcePreservedDescription => + 'HTML mentah yang belum diedit disimpan kembali persis seperti teks sumber.'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'Markdown di dalam HTML'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + 'Penanda Markdown di dalam HTML mentah dirender sebagai teks literal.'; + + @override + String get markdownHtmlBlockedContent => 'Konten aktif yang diblokir'; + + @override + String get markdownHtmlBlockedContentDescription => + 'Skrip, gaya, bingkai, formulir, SVG, MathML, peristiwa, dan atribut tidak aman diblokir.'; + + @override + String get markdownHtmlSafeUrls => 'Hanya URL aman'; + + @override + String get markdownHtmlSafeUrlsDescription => + 'Tautan mengizinkan URL http, https, mailto, tel, relatif, dan fragmen; skema yang tidak aman diblokir.'; + + @override + String get exportAsPdf => 'Ekspor sebagai PDF'; + + @override + String get pdfExportDescription => + 'Pilih tata letak halaman untuk PDF yang lengkap dan sempurna.'; + + @override + String get pdfRemoteImagesNote => + 'Gambar jarak jauh tidak diunduh selama ekspor. Gambar lokal disertakan bila tersedia.'; + + @override + String get pdfPageSize => 'Ukuran halaman'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => 'Orientasi'; + + @override + String get pdfPortrait => 'Potret'; + + @override + String get pdfLandscape => 'Lanskap'; + + @override + String get pdfMargins => 'Margin'; + + @override + String get pdfMarginNarrow => 'Sempit'; + + @override + String get pdfMarginNormal => 'Normal'; + + @override + String get pdfMarginWide => 'Lebar'; + + @override + String get pdfIncludePageNumbers => 'Sertakan nomor halaman'; + + @override + String get export => 'Ekspor'; + + @override + String get exportingPdf => 'Mengekspor PDF…'; + + @override + String get fileTypePdf => 'dokumen PDF'; + + @override + String pdfExported(String fileName) { + return '$fileName telah diekspor.'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '$fileName diekspor dengan peringatan $count.'; + } + + @override + String get pdfExportUnavailable => + 'Komponen ekspor PDF tidak ada. Instal ulang BusyMark dan coba lagi.'; + + @override + String get pdfExportTimedOut => + 'Ekspor PDF memakan waktu terlalu lama dan dihentikan.'; + + @override + String get pdfExportFailed => + 'BusyMark tidak dapat mengekspor dokumen ini sebagai PDF.'; + + @override + String get visualizationRendering => 'Merender…'; + + @override + String get visualizationStale => 'Menampilkan render terakhir yang valid'; + + @override + String get visualizationShowSource => 'Tampilkan sumber'; + + @override + String get visualizationShowRender => 'Tampilkan render'; + + @override + String get visualizationFitWidth => 'Sesuai dengan lebarnya'; + + @override + String get visualizationSaveImage => 'Simpan gambar'; + + @override + String get visualizationCopyImage => 'Salin gambar'; + + @override + String get visualizationImageCopied => 'Gambar disalin'; + + @override + String get visualizationOpenApiReference => 'Buka Referensi API'; + + @override + String get visualizationValid => 'Valid'; + + @override + String get visualizationInvalid => 'Tidak valid'; + + @override + String get visualizationServers => 'Server'; + + @override + String get visualizationPaths => 'Path'; + + @override + String get visualizationOperations => 'Operasi'; + + @override + String get visualizationTags => 'Tag'; + + @override + String get visualizationNoOperations => 'Tidak ada operasi yang cocok'; + + @override + String get visualizationSearchOperations => 'Cari operasi'; + + @override + String get visualizationRenderFailed => + 'Visualisasi ini tidak dapat dirender.'; + + @override + String get visualizationRetry => 'Coba lagi'; + + @override + String visualizationSaved(String fileName) { + return '$fileName disimpan'; + } + + @override + String get shortcutExportPdfDescription => + 'Ekspor dokumen aktif atau modul Writerside sebagai PDF.'; + + @override + String get instances => 'Instance'; + + @override + String get newInstance => 'Instance baru'; + + @override + String get newTocLibrary => 'Pustaka TOC baru'; + + @override + String get editInstance => 'Edit instance'; + + @override + String get openTocFile => 'Buka file TOC'; + + @override + String get createInstance => 'Buat instance'; + + @override + String get createTocLibrary => 'Buat pustaka TOC'; + + @override + String get instanceContent => 'Isi'; + + @override + String get instanceContentSource => 'Buat dari'; + + @override + String get emptyInstance => 'Instance kosong'; + + @override + String get markdownFiles => 'File Markdown lokal'; + + @override + String get chooseMarkdownFolder => 'Pilih folder Markdown'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Pilih folder yang berisi file Markdown.'; + + @override + String get instanceAppearance => 'Tampilan'; + + @override + String get instanceColor => 'Warna ikon'; + + @override + String get instanceVersion => 'Versi'; + + @override + String instanceVersionInherited(String version) { + return 'Versi proyek adalah $version jika kolom ini kosong.'; + } + + @override + String get instanceWebPath => 'Jalur web'; + + @override + String get instanceStatus => 'Status'; + + @override + String get instanceStatusRelease => 'Rilis'; + + @override + String get instanceStatusEap => 'Akses awal'; + + @override + String get instanceStatusDeprecated => 'Tidak digunakan lagi'; + + @override + String get allowSearchEngineIndexing => 'Izinkan pengindeksan mesin pencari'; + + @override + String get allowSearchEngineIndexingDescription => + 'Izinkan mesin pencari eksternal mengindeks keluaran ini.'; + + @override + String get offlineArtifact => 'Artefak offline'; + + @override + String get offlineArtifactDescription => + 'Gabungkan sumber daya sehingga dokumentasi yang dibuat bersifat mandiri.'; + + @override + String get instanceOutputSettings => 'Pengaturan keluaran'; + + @override + String get markdownImportSource => 'Sumber Markdown'; + + @override + String get markdownImportFiles => 'File Markdown'; + + @override + String get selectNone => 'Jangan pilih apa pun'; + + @override + String markdownFilesFound(int count) { + return 'Ditemukan $count file Markdown'; + } + + @override + String get noMarkdownFilesFound => + 'Tidak ada file Markdown yang ditemukan di direktori ini.'; + + @override + String get copyReferencedMedia => 'Salin media yang dirujuk'; + + @override + String get copyReferencedMediaDescription => + 'Salin gambar dan video lokal yang direferensikan oleh file yang dipilih sambil mempertahankan jalur relatif.'; + + @override + String get instanceIdRenameWarningTitle => 'Ganti nama ID instance?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark akan mengganti nama file .tree dan memperbarui referensi proyek Writerside dari “$oldId” menjadi “$newId”. Skrip publikasi tidak diubah dan harus diperbarui secara terpisah.'; + } + + @override + String get renameAndUpdateReferences => 'Ganti nama dan perbarui referensi'; + + @override + String get tocLibraryDescription => + 'Pustaka TOC menyimpan bagian yang dapat digunakan kembali dan tidak menghasilkan keluarannya sendiri.'; + + @override + String get defaultTocLibraryName => 'TOC yang dibagikan'; + + @override + String get instanceColorAutomatic => 'Otomatis'; + + @override + String get instanceColorBlue => 'Biru'; + + @override + String get instanceColorGreen => 'Hijau'; + + @override + String get instanceColorOrange => 'Oranye'; + + @override + String get instanceColorPurple => 'Ungu'; + + @override + String get instanceColorRed => 'Merah'; + + @override + String get instanceColorTeal => 'Teal'; + + @override + String get instanceColorYellow => 'Kuning'; + + @override + String get errorWritersideInstanceNameRequired => 'Masukkan nama instance.'; + + @override + String errorWritersideInstanceIdExists(String id) { + return 'Sebuah instance dengan ID “$id” sudah ada.'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return 'Pohon instance sudah ada: $path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Direktori sumber Markdown tidak ada: $path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + 'Pilih setidaknya satu file Markdown untuk diimpor.'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return 'Ini bukan file Markdown yang dapat dibaca di dalam sumber yang dipilih: $path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return 'Impor akan menimpa file proyek yang sudah ada: $path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + 'File instance diubah pada disk. Tinjau dan coba lagi.'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark tidak dapat sepenuhnya mengembalikan perubahan instance. Tinjau file ini sebelum melanjutkan: $paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + 'Pustaka TOC tidak dapat mengimpor topik Markdown.'; + + @override + String get errorWritersideInstanceWebPathInvalid => + 'Jalur web harus berupa satu baris.'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Konfigurasi instance Writerside tidak valid. Perbaiki diagnosisnya dan coba lagi.'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark tidak dapat melakukan perubahan instance dengan aman.'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return 'Status instance “$status” tidak diketahui. Gunakan rilis, eap, atau usang.'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return 'ID instance “$id” digunakan oleh lebih dari satu file pohon.'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml harus memiliki elemen root .'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return 'Nilai $name “$value” harus benar atau salah.'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + 'Elemen harus menentukan ID instance.'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + 'Pohon harus menentukan atribut from dan id elemen.'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + 'Pohon harus menentukan id.'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + 'Referensi TOC lintas instance harus menentukan ref dan in.'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + 'Elemen TOC tidak dapat menargetkan lebih dari satu topik, referensi, tautan, atau pengalihan.'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return 'ID elemen pohon “$id” dideklarasikan lebih dari satu kali.'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + 'File grup instance harus memiliki elemen root .'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + 'Grup instance harus menentukan id dan daftar instance yang tidak kosong.'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return 'ID grup instance “$id” dideklarasikan lebih dari satu kali.'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return 'TOC menyertakan “$source#$id” milik modul eksternal “$origin” dan tidak dapat diperluas di ruang kerja ini.'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return 'Elemen pohon “$id” tidak ada di pohon terdaftar “$source”.'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return 'Include tree “$source#$id” membuat siklus.'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return 'Kondisi instance mereferensikan grup yang tidak diketahui “@$group”.'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return 'Referensi lintas-instance menargetkan instance yang tidak diketahui “$instance”.'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return 'Topik “$topic” tidak ada dalam contoh referensi “$instance”.'; + } + + @override + String get download => 'Unduh'; + + @override + String get exportWritersideAsPdf => 'Ekspor Writerside sebagai PDF'; + + @override + String get writersidePdfContent => 'Ekspor konten'; + + @override + String get writersidePdfPage => 'Halaman'; + + @override + String get exportingWritersidePdf => 'Mengekspor PDF Writerside…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => 'Ollama lokal'; + + @override + String get aiDisabled => 'Dinonaktifkan'; + + @override + String get aiLocalOnlyDescription => + 'Pengeditan AI bersifat eksplisit. BusyMark hanya mengirimkan konteks yang ditampilkan untuk penyedia yang dipilih dan tidak pernah menerapkan proposal tanpa peninjauan.'; + + @override + String get aiProvider => 'Penyedia AI'; + + @override + String get aiDefaultProvider => 'Penyedia bawaan'; + + @override + String get aiConfigureProvider => 'Konfigurasikan penyedia'; + + @override + String get aiChooseProvider => 'Pilih penyedia AI'; + + @override + String get aiOllamaEndpoint => 'Titik akhir Ollama'; + + @override + String get aiOllamaModel => 'Model Ollama'; + + @override + String get aiTestConnection => 'Uji koneksi'; + + @override + String get aiTestingConnection => 'Menguji…'; + + @override + String aiConnectionReady(int count) { + return 'Terhubung. $count model terinstal ditemukan.'; + } + + @override + String get aiNoModels => 'Tidak ada model yang dipilih.'; + + @override + String get aiConnectionFailed => + 'BusyMark tidak dapat memverifikasi pembuatan teks AI.'; + + @override + String get aiConfigureFirst => + 'Aktifkan penyedia AI dan verifikasi model di Pengaturan → AI.'; + + @override + String get aiEditWithAi => 'Edit dengan AI'; + + @override + String get aiRefineWithAi => 'Sempurnakan dengan AI'; + + @override + String get aiInstruction => 'Petunjuk'; + + @override + String get aiChangeTarget => 'Apa yang mungkin berubah'; + + @override + String get aiSharedContext => 'Konteks dibagikan dengan AI'; + + @override + String get aiTargetSelection => 'Konten yang dipilih'; + + @override + String get aiTargetInsertAfterBlock => 'Sisipkan setelah blok saat ini'; + + @override + String get aiTargetCurrentBlock => 'Blok saat ini'; + + @override + String get aiTargetCurrentSection => 'Bagian saat ini'; + + @override + String get aiTargetCompleteDocument => 'Dokumen lengkap'; + + @override + String get aiContextNone => 'Tidak ada konteks dokumen'; + + @override + String get aiContextSelection => 'Konten yang dipilih'; + + @override + String get aiContextCurrentBlock => 'Blok saat ini'; + + @override + String get aiContextCurrentSection => 'Bagian saat ini'; + + @override + String get aiContextCompleteDocument => 'Dokumen lengkap'; + + @override + String get aiGenerating => 'Membuat proposal…'; + + @override + String get aiProposal => 'Proposal AI'; + + @override + String get aiGenerateProposal => 'Hasilkan proposal'; + + @override + String aiContextDisclosure(int count) { + return 'Penyedia yang dipilih akan menerima $count karakter dari konteks yang ditampilkan.'; + } + + @override + String get aiOriginal => 'Asli'; + + @override + String get aiSuggested => 'Disarankan'; + + @override + String get aiApplyProposal => 'Terapkan proposal'; + + @override + String aiTokenUsage(int input, int output) { + return '$input token masukan · $output token keluaran'; + } + + @override + String get aiStaleProposal => + 'Dokumen berubah saat proposal ini dibuat. Jalankan aksinya lagi.'; + + @override + String get gitAiStagedChangesChanged => + 'Perubahan yang di-stage berubah saat pesan commit ini dibuat. Jalankan aksinya lagi.'; + + @override + String get aiViewContext => 'Lihat konteks yang dikirim'; + + @override + String get aiReviewExactContent => 'Tinjau konten yang sebenarnya'; + + @override + String get aiContentToChange => 'Konten untuk diubah'; + + @override + String get aiContentSentToAi => 'Konten dikirim ke AI'; + + @override + String get aiApiKey => 'Kunci API'; + + @override + String get aiApiKeyStoredHint => + 'Kunci disimpan di penyimpanan kredensial sistem'; + + @override + String get aiApiKeyEnterHint => 'Masukkan kunci API penyedia'; + + @override + String get aiReplaceApiKey => 'Ganti kunci API'; + + @override + String get aiSaveApiKey => 'Simpan kunci API dengan aman'; + + @override + String get aiRemoveApiKey => 'Hapus kunci API yang disimpan'; + + @override + String get aiCredentialSaved => + 'Kunci API disimpan di penyimpanan kredensial sistem.'; + + @override + String get aiCredentialRemoved => 'Kunci API yang disimpan telah dihapus.'; + + @override + String get aiModelRouting => 'Perutean model'; + + @override + String get aiAutomaticRouting => 'Otomatis berdasarkan tugas'; + + @override + String get aiFixedModelRouting => 'Gunakan model yang dipilih'; + + @override + String get aiPreferredModel => 'Model pilihan'; + + @override + String get aiModel => 'Model'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests permintaan · $input token masukan · $output token keluaran'; + } + + @override + String aiCloudConsentTitle(String provider) { + return 'Kirim konten ke $provider?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return 'Aktifkan $provider'; + } + + @override + String get aiCloudConsentMessage => + 'Hanya konten yang ditampilkan di setiap dialog tinjauan AI yang dikirim. Permintaan tidak disimpan, proposal memerlukan peninjauan, dan kunci API disimpan di penyimpanan kredensial sistem Linux.'; + + @override + String aiCloudConsentRequired(String provider) { + return 'Konfirmasikan pembagian data $provider di Pengaturan → AI terlebih dahulu.'; + } + + @override + String aiGenerationVerified(String model, int count) { + return 'Pembuatan teks diverifikasi dengan $model. Tersedia $count model yang kompatibel.'; + } + + @override + String get aiColdStartObserved => 'Cold start model lokal terdeteksi.'; + + @override + String get aiNoCompatibleModels => + 'Tidak tersedia model pembuatan teks yang kompatibel.'; + + @override + String get aiEnableProvider => 'Aktifkan penyedia AI terlebih dahulu.'; + + @override + String get aiDraftCommitMessage => 'Draf pesan commit'; + + @override + String get aiDrafting => 'Menyusun…'; + + @override + String get aiDraftWithAi => 'Draf dengan AI'; + + @override + String get generateOrUpdateMarkdownToc => + 'Menghasilkan/memperbarui daftar isi'; + + @override + String get markdownTocTitle => 'Daftar isi'; + + @override + String markdownTocUpdated(int count) { + return 'Daftar isi diperbarui dengan $count entri.'; + } + + @override + String get markdownTocNoHeadings => + 'Tambahkan setidaknya satu judul bagian sebelum membuat daftar isi.'; + + @override + String get markdownTocMalformedMarkers => + 'Penanda daftar isi BusyMark hilang, terduplikasi, atau rusak.'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return 'Tingkat judul $level mengikuti tingkat $previousLevel; tinjau bagian yang bersarang.'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + 'Teks tautan kosong; berikan nama yang dapat diakses yang menjelaskan tujuannya.'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return 'Tinjau apakah teks tautan “$text” menjelaskan tujuannya dalam konteks.'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + 'Sel header tabel harus mengidentifikasi kolomnya; lengkapi setiap header kosong.'; + + @override + String get mathRenderFailed => 'Ekspresi matematika tidak dapat dirender.'; + + @override + String get inlineMath => 'Matematika sebaris'; + + @override + String get displayMath => 'Matematika tampilan'; +} diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 8e735241..abf9f362 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -313,6 +313,12 @@ class AppLocalizationsIt extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -346,9 +352,24 @@ class AppLocalizationsIt extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Pannello laterale'; diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart new file mode 100644 index 00000000..ff632d9b --- /dev/null +++ b/lib/l10n/generated/app_localizations_ja.dart @@ -0,0 +1,3420 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Japanese (`ja`). +class AppLocalizationsJa extends AppLocalizations { + AppLocalizationsJa([String locale = 'ja']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => + 'Markdown ファイルおよび Writerside 互換のドキュメントプロジェクト用エディター。'; + + @override + String get aboutBusyMark => 'BusyMark について'; + + @override + String get aboutTagline => 'Markdown と Writerside のエディター'; + + @override + String get aboutLicenseLabel => 'ライセンス'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => 'ウェブサイト'; + + @override + String get aboutSourceCode => 'ソースコード'; + + @override + String get reportIssue => '問題を報告'; + + @override + String get feedbackCategory => 'カテゴリ'; + + @override + String get feedbackChooseCategory => 'カテゴリを選択'; + + @override + String get feedbackCategoryProblem => '問題またはバグ'; + + @override + String get feedbackCategoryFeature => '機能リクエスト'; + + @override + String get feedbackCategoryPrivacySecurity => 'プライバシーまたはセキュリティに関する懸念'; + + @override + String get feedbackCategoryUsability => '使いやすさに関する懸念'; + + @override + String get feedbackCategoryOther => 'その他'; + + @override + String get feedbackSubject => '件名'; + + @override + String get feedbackMessage => '詳細なメッセージ'; + + @override + String get feedbackReplyEmail => '返信用メールアドレス(任意)'; + + @override + String get feedbackIncludeTechnicalDetails => '技術的な詳細を含める'; + + @override + String get feedbackTechnicalDetailsDisclosure => + '有効にすると、Linux のオペレーティングシステムのバージョンと BusyMark のアプリケーション言語のみが追加されます。ログ、ファイル、アカウントデータ、その他の診断情報は添付されません。'; + + @override + String get feedbackSubmit => '送信'; + + @override + String get feedbackSubmitting => '送信中…'; + + @override + String get feedbackCategoryRequired => 'カテゴリを選択してください。'; + + @override + String get feedbackSubjectLength => '件名は 3~120 文字で入力してください。'; + + @override + String get feedbackMessageLength => 'メッセージは 10~5,000 文字で入力してください。'; + + @override + String get feedbackReplyEmailInvalid => '有効なメールアドレスを入力するか、この項目を空欄にしてください。'; + + @override + String get feedbackConnectionFailure => + 'BusyMark は接続できませんでした。インターネット接続を確認して、もう一度お試しください。'; + + @override + String get feedbackTimeoutFailure => 'リクエストがタイムアウトしました。もう一度お試しください。'; + + @override + String get feedbackRateLimitedFailure => + 'この接続から送信されたレポートが多すぎます。しばらく待ってから、もう一度お試しください。'; + + @override + String get feedbackRejectedFailure => + 'サーバーがこのレポートを拒否しました。フォームの項目を確認して、もう一度お試しください。'; + + @override + String get feedbackServerFailure => 'サーバーがレポートを受け付けられませんでした。後でもう一度お試しください。'; + + @override + String feedbackSuccess(String id) { + return 'フィードバックを送信しました。参照 ID:$id'; + } + + @override + String get advanced => '詳細設定'; + + @override + String get addToGit => 'Git に追加'; + + @override + String get appearance => '外観'; + + @override + String get apply => '適用'; + + @override + String get back => '戻る'; + + @override + String get bottomLeft => '左下'; + + @override + String get bottomRight => '右下'; + + @override + String get cancel => 'キャンセル'; + + @override + String get choose => '選択'; + + @override + String get chooseLocation => '場所を選択'; + + @override + String get copy => 'コピー'; + + @override + String get copyName => '名前をコピー'; + + @override + String get copyFileName => 'ファイル名をコピー'; + + @override + String get copyPath => 'パスをコピー'; + + @override + String get create => '作成'; + + @override + String get creating => '作成中…'; + + @override + String get cut => '切り取り'; + + @override + String get promoteSection => 'セクションのレベルを上げる'; + + @override + String get demoteSection => 'セクションのレベルを下げる'; + + @override + String get moveSectionUp => 'セクションを上へ移動'; + + @override + String get moveSectionDown => 'セクションを下へ移動'; + + @override + String get confirmDeleteSectionTitle => 'このセクションを削除しますか?'; + + @override + String confirmDeleteSectionMessage(String name) { + return '「$name」と、そのセクション内のすべての内容を削除しますか?この操作は取り消せません。'; + } + + @override + String get darkTheme => 'ダーク'; + + @override + String get delete => '削除'; + + @override + String get discard => '破棄'; + + @override + String get editor => 'エディター'; + + @override + String get file => 'ファイル'; + + @override + String get fileHistory => 'ファイル履歴'; + + @override + String get folder => 'フォルダー'; + + @override + String get insert => '挿入'; + + @override + String get keyboardShortcuts => 'キーボードショートカット'; + + @override + String get commandPalette => 'コマンドパレット'; + + @override + String get commandPaletteHint => 'コマンドを入力'; + + @override + String get commandPaletteEmpty => '一致するコマンドはありません'; + + @override + String get commandUnavailableInContext => '現在のエディターのコンテキストでは利用できません'; + + @override + String get lightTheme => 'ライト'; + + @override + String get mainMenu => 'メインメニュー'; + + @override + String get fullScreen => '全画面'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => '開く'; + + @override + String get openInFiles => 'ファイルで開く'; + + @override + String get pathActions => 'パスの操作'; + + @override + String get outline => 'アウトライン'; + + @override + String get overwrite => '上書き'; + + @override + String get paste => '貼り付け'; + + @override + String get pasteWithoutFormatting => '書式なしで貼り付け'; + + @override + String get reading => '閲覧'; + + @override + String get removeFromRecent => '最近使った項目から削除'; + + @override + String get recent => '最近使った項目'; + + @override + String get redo => 'やり直し'; + + @override + String get save => '保存'; + + @override + String get search => '検索'; + + @override + String get selectAll => 'すべて選択'; + + @override + String get settings => '設定'; + + @override + String get source => 'ソース'; + + @override + String get split => '分割'; + + @override + String get systemTheme => 'システム'; + + @override + String get theme => 'テーマ'; + + @override + String get appLanguage => '言語'; + + @override + String get systemLanguage => 'システム'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => 'サイドバーパネル'; + + @override + String get topLeft => '左上'; + + @override + String get topRight => '右上'; + + @override + String get undo => '元に戻す'; + + @override + String get validate => '検証'; + + @override + String get validation => '検証'; + + @override + String get viewMode => '表示モード'; + + @override + String get welcome => 'ようこそ'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => '画像'; + + @override + String get openMarkdownFile => 'Markdown ファイルを開く'; + + @override + String get markdownFileExtensions => '.md または .markdown'; + + @override + String get openFolderOrWritersideProject => 'フォルダーまたは Writerside プロジェクトを開く'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown フォルダーまたは Writerside 互換プロジェクト'; + + @override + String get noOpenFile => '開いているファイルはありません'; + + @override + String get shortcutDeleteTreeItemDescription => + '選択したファイル項目を削除するか、選択したトピックを目次から削除'; + + @override + String get shortcutGroupGeneral => '全般'; + + @override + String get shortcutNewDocument => '作成'; + + @override + String get shortcutNewDocumentDescription => + 'Markdown ファイルまたは Writerside プロジェクトを作成'; + + @override + String get shortcutOpenDescription => + 'Markdown ファイル、フォルダー、または Writerside プロジェクトを開く'; + + @override + String get shortcutSaveDescription => '現在のドキュメントを保存'; + + @override + String get shortcutSearchDescription => '現在のワークスペースを検索'; + + @override + String get shortcutKeyboardShortcutsDescription => 'このキーボードショートカット一覧を表示'; + + @override + String get shortcutMarkdownAndHtmlDescription => 'Markdown と HTML のリファレンスを開く'; + + @override + String get shortcutSettingsDescription => 'BusyMark の設定を開く'; + + @override + String get shortcutNextTab => '次のタブ'; + + @override + String get shortcutNextTabDescription => '次に開いているタブへ移動'; + + @override + String get shortcutPreviousTab => '前のタブ'; + + @override + String get shortcutPreviousTabDescription => '前に開いているタブへ移動'; + + @override + String get shortcutCloseTab => 'タブを閉じる'; + + @override + String get shortcutCloseTabDescription => 'アクティブなタブを閉じる'; + + @override + String get shortcutCloseAllTabs => 'すべてのタブを閉じる'; + + @override + String get shortcutCloseAllTabsDescription => '開いているすべてのタブを閉じる'; + + @override + String get shortcutGroupTextEditing => 'テキスト編集'; + + @override + String get shortcutSelectAllDescription => + 'ソースモードではすべてのテキストを選択し、エディターモードでは 2 回押すとすべてのブロックを選択'; + + @override + String get shortcutCutDescription => '選択したテキストを切り取り'; + + @override + String get shortcutCopyDescription => '選択したテキストをコピー'; + + @override + String get shortcutPasteDescription => 'クリップボードから貼り付け'; + + @override + String get shortcutPastePlainTextDescription => '書式なしのクリップボードテキストを貼り付け'; + + @override + String get shortcutUndoDescription => '直前の編集を元に戻す'; + + @override + String get shortcutRedoDescription => '直前に元に戻した編集をやり直す'; + + @override + String get shortcutInsertIndentation => 'インデントを挿入'; + + @override + String get shortcutInsertIndentationDescription => 'カーソル位置にインデントを挿入'; + + @override + String get shortcutOutdentSource => 'ソースのインデントを減らす'; + + @override + String get shortcutOutdentSourceDescription => 'ソースモードでインデントを 1 レベル減らす'; + + @override + String get shortcutEscape => '検索を閉じるか、ブロックの選択を解除'; + + @override + String get shortcutEscapeDescription => 'ワークスペース検索を閉じるか、エディターモードでブロックの選択を解除'; + + @override + String get shortcutGroupFormatting => '書式設定'; + + @override + String get shortcutBoldDescription => '選択したテキストの太字を切り替え'; + + @override + String get shortcutItalicDescription => '選択したテキストの斜体を切り替え'; + + @override + String get shortcutUnderlineDescription => '選択したテキストの下線を切り替え'; + + @override + String get shortcutLinkDescription => 'リンクを挿入または編集'; + + @override + String get shortcutInlineCodeDescription => '選択したテキストのインラインコードを切り替え'; + + @override + String get shortcutStrikethroughDescription => '選択したテキストの取り消し線を切り替え'; + + @override + String get shortcutGroupBlocks => 'ブロック'; + + @override + String get shortcutParagraphDescription => '現在のブロックを段落に設定'; + + @override + String get shortcutHeading1Description => '現在のブロックを見出し 1 に設定'; + + @override + String get shortcutHeading2Description => '現在のブロックを見出し 2 に設定'; + + @override + String get shortcutHeading3Description => '現在のブロックを見出し 3 に設定'; + + @override + String get shortcutHeading4Description => '現在のブロックを見出し 4 に設定'; + + @override + String get shortcutHeading5Description => '現在のブロックを見出し 5 に設定'; + + @override + String get shortcutHeading6Description => '現在のブロックを見出し 6 に設定'; + + @override + String get shortcutGroupLists => 'リスト'; + + @override + String get numberedList => '番号付きリスト'; + + @override + String get shortcutNumberedListDescription => '番号付きリストの書式を切り替え'; + + @override + String get bulletedList => '箇条書きリスト'; + + @override + String get shortcutBulletedListDescription => '箇条書きリストの書式を切り替え'; + + @override + String get checklist => 'チェックリスト'; + + @override + String get shortcutChecklistDescription => 'チェックリストの書式を切り替え'; + + @override + String get shortcutGroupSidebar => 'サイドバー'; + + @override + String get sidebarViewMenu => 'サイドバーの表示'; + + @override + String get createMarkdownFile => 'Markdown ファイルを作成'; + + @override + String get createMarkdownFileDescription => '未保存のローカル Markdown ドキュメントの作成を開始'; + + @override + String get createWritersideProject => 'Writerside プロジェクトを作成'; + + @override + String get createWritersideProjectDescription => + 'ローカルの Writerside 互換プロジェクトの作成を開始'; + + @override + String get defaultProjectName => 'ドキュメント'; + + @override + String get defaultInstanceName => 'ユーザーガイド'; + + @override + String get defaultStartTopicTitle => 'はじめに'; + + @override + String get projectName => 'プロジェクト名'; + + @override + String get directoryName => 'ディレクトリ名'; + + @override + String get instanceName => 'インスタンス名'; + + @override + String get instanceId => 'インスタンス ID'; + + @override + String get startTopicTitle => '開始トピックのタイトル'; + + @override + String get location => '場所'; + + @override + String get projectNameRequired => 'プロジェクト名は必須です。'; + + @override + String get directoryNameRequired => 'ディレクトリ名は必須です。'; + + @override + String get useSingleSafeDirectoryName => '安全な単一のディレクトリ名を使用してください。'; + + @override + String get useLowercaseIdentifier => + '小文字、数字、アンダースコア、ハイフンのみを含む小文字の識別子を使用してください。'; + + @override + String get startTopicTitleRequired => '開始トピックのタイトルは必須です。'; + + @override + String get createWritersideProjectFailed => 'Writerside プロジェクトを作成できませんでした。'; + + @override + String get settingsTitle => 'BusyMark の設定'; + + @override + String get autoSave => '自動保存'; + + @override + String get autoSaveDescription => '短時間操作がないときにファイルの変更を自動保存'; + + @override + String get wordWrap => '折り返し'; + + @override + String get editorFontSize => 'エディターのフォントサイズ'; + + @override + String get validateOnEdit => '編集時に検証'; + + @override + String get clearRecentWorkspaces => '最近使ったワークスペースを消去'; + + @override + String get editingButtonsPosition => '編集ボタンの位置'; + + @override + String get editingButtonsPositionDescription => + 'フローティング WYSIWYG 編集ボタンを表示する位置を選択'; + + @override + String get editingButtonsDirection => '編集ボタンの方向'; + + @override + String get editingButtonsDirectionDescription => + 'フローティング WYSIWYG 編集ボタンを水平または垂直に配置するか選択'; + + @override + String get horizontal => '水平'; + + @override + String get vertical => '垂直'; + + @override + String get privacy => 'プライバシー'; + + @override + String get allowRemoteImages => 'リモート画像を読み込む'; + + @override + String get allowRemoteImagesDescription => + 'Markdown のプレビューとエディターで http および https URL の画像を読み込めるようにする'; + + @override + String get clearRemoteImagePermissions => 'リモート画像の権限を消去'; + + @override + String get clearRemoteImagePermissionsDescription => + 'リモート画像の読み込みを許可したワークスペースの権限を忘れる'; + + @override + String get clearGitWorkspaceTrust => '信頼済み Git ワークスペースを消去'; + + @override + String get clearGitWorkspaceTrustDescription => + '以前信頼したワークスペースで Git 機能を有効にする前に確認する'; + + @override + String get settingsWindowSectionTitle => 'ウィンドウ'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => '起動時に前回のワークスペースを再び開く'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'BusyMark の起動時に前回のセッションのワークスペースとタブを開く'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + '未保存の変更がある場合は閉じる前に確認'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + 'ドキュメントに未保存の変更がある場合、BusyMark を閉じる前に確認する'; + + @override + String get closeUnsavedChangesTitle => '未保存の変更'; + + @override + String get closeUnsavedChangesSingleMessage => + 'このドキュメントには未保存の変更があります。BusyMark を閉じる前に変更を保存しますか?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '未保存の変更があるドキュメントが $count 件あります。BusyMark を閉じる前に変更を保存しますか?', + one: '未保存の変更があるドキュメントが 1 件あります。BusyMark を閉じる前に変更を保存しますか?', + zero: 'BusyMark を閉じる前に変更を保存しますか?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => 'キャンセル'; + + @override + String get closeUnsavedChangesDiscard => '破棄'; + + @override + String get closeUnsavedChangesSave => '保存'; + + @override + String get currentFile => '現在のファイル'; + + @override + String get unsavedChanges => '未保存の変更'; + + @override + String unsavedChangesMessage(String fileName) { + return '$fileName に未保存の変更があります。続行する前に保存しますか?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '未保存の変更があるドキュメントが $count 件あります。続行する前に保存しますか?', + one: '未保存の変更があるドキュメントが 1 件あります。続行する前に保存しますか?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => 'ディスク上でファイルが変更されました'; + + @override + String get fileChangedOnDiskMessage => 'このファイルは開いた後にディスク上で変更されています。上書きしますか?'; + + @override + String get untitledMarkdownFileName => '無題.md'; + + @override + String get unorderedList => '箇条書きリスト'; + + @override + String get orderedList => '番号付きリスト'; + + @override + String get taskList => 'タスクリスト'; + + @override + String get toggleTaskChecked => 'タスクの完了状態を切り替え'; + + @override + String get indentListItem => 'リスト項目をインデント'; + + @override + String get outdentListItem => 'リスト項目のインデントを減らす'; + + @override + String get blockquote => '引用ブロック'; + + @override + String get codeBlock => 'コードブロック'; + + @override + String get codeBlockLanguage => 'コードブロックの言語'; + + @override + String get image => '画像'; + + @override + String get video => '動画'; + + @override + String get openVideo => '動画を再生'; + + @override + String get pauseVideo => '動画を一時停止'; + + @override + String get videoUnavailable => '動画を利用できません'; + + @override + String get videoPreview => '動画のプレビュー'; + + @override + String get diagnosticWritersideVideoMissingSource => '動画に src 属性がありません。'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return 'サポートされていない動画ソース:$source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return '動画ファイルが存在しません:$source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return '動画のプレビュー画像が存在しません:$preview'; + } + + @override + String get inlineImage => 'インライン画像'; + + @override + String get table => '表'; + + @override + String get htmlBlock => 'HTML ブロック'; + + @override + String get htmlContentDefault => 'HTML コンテンツ'; + + @override + String get shortcutHtmlBlockDescription => 'HTML ブロックを挿入または編集'; + + @override + String get renderedHtml => 'レンダリングされた HTML'; + + @override + String get editHtml => 'HTML を編集'; + + @override + String get htmlSource => 'HTML ソース'; + + @override + String get thematicBreak => '水平線'; + + @override + String get bold => '太字'; + + @override + String get italic => '斜体'; + + @override + String get underline => '下線'; + + @override + String get strikethrough => '取り消し線'; + + @override + String get inlineCode => 'インラインコード'; + + @override + String get link => 'リンク'; + + @override + String get hardLineBreak => '強制改行'; + + @override + String get textStyle => 'テキストスタイル'; + + @override + String get paragraph => '段落'; + + @override + String get heading1 => '見出し 1'; + + @override + String get heading2 => '見出し 2'; + + @override + String get heading3 => '見出し 3'; + + @override + String get heading4 => '見出し 4'; + + @override + String get heading5 => '見出し 5'; + + @override + String get heading6 => '見出し 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => '表を削除'; + + @override + String tableColumnNumber(int columnNumber) { + return '列 $columnNumber'; + } + + @override + String get insertColumnLeft => '左に列を挿入'; + + @override + String get insertColumnRight => '右に列を挿入'; + + @override + String get deleteColumn => '列を削除'; + + @override + String get tableAlignmentUnspecified => '配置:未指定'; + + @override + String get tableAlignmentLeft => '配置:左'; + + @override + String get tableAlignmentCenter => '配置:中央'; + + @override + String get tableAlignmentRight => '配置:右'; + + @override + String tableRowNumber(int rowNumber) { + return '行 $rowNumber'; + } + + @override + String get insertRowAbove => '上に行を挿入'; + + @override + String get insertRowBelow => '下に行を挿入'; + + @override + String get deleteRow => '行を削除'; + + @override + String get tableHeaderHint => 'ヘッダー'; + + @override + String get tableCellHint => 'セル'; + + @override + String get language => '言語'; + + @override + String get hideEditingButtons => '編集ボタンを非表示'; + + @override + String get showEditingButtons => '編集ボタンを表示'; + + @override + String get altText => '代替テキスト'; + + @override + String get editorPlaceholderText => 'テキスト'; + + @override + String get editorPlaceholderCode => 'コード'; + + @override + String get editorPlaceholderAltText => '代替テキスト'; + + @override + String get describeTheImage => '画像を説明'; + + @override + String get columns => '列'; + + @override + String get rows => '行'; + + @override + String tableHeaderNumber(int columnNumber) { + return 'ヘッダー $columnNumber'; + } + + @override + String get tableCellDefault => 'セル'; + + @override + String get noImageSource => '画像ソースがありません'; + + @override + String get remoteImageBlocked => 'リモート画像がブロックされています'; + + @override + String get remoteImageBlockedTooltip => 'BusyMark にリモート画像の読み込みを許可するか選択'; + + @override + String get remoteImagesBlockedTitle => 'リモート画像がブロックされています'; + + @override + String get remoteImagesBlockedMessage => + 'このドキュメントはインターネット上の画像を参照しています。読み込むと、画像ホストにネットワーク情報が公開される可能性があります。'; + + @override + String get loadRemoteImagesForWorkspace => 'このワークスペースで読み込む'; + + @override + String get alwaysLoadRemoteImages => '常にリモート画像を読み込む'; + + @override + String get hideSidebar => 'サイドバーパネルを非表示'; + + @override + String get showSidebar => 'サイドバーパネルを表示'; + + @override + String get showPreview => 'プレビューを表示'; + + @override + String get hidePreview => 'プレビューを非表示'; + + @override + String get workspaceKindUnsavedMarkdown => '未保存の Markdown ファイル'; + + @override + String get workspaceKindSingleMarkdown => '単一の Markdown ファイル'; + + @override + String get workspaceKindMarkdownFolder => 'Markdown フォルダー'; + + @override + String get workspaceKindWritersideModule => 'Writerside モジュール'; + + @override + String get problems => '問題'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '診断情報 $count 件', + one: '診断情報 1 件', + zero: '診断情報はありません', + ); + return '$_temp0'; + } + + @override + String get files => 'ファイル'; + + @override + String get toc => '目次'; + + @override + String get tocActions => '目次の操作'; + + @override + String get markdownUnsaved => 'Markdown - 未保存'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ファイル $count 件', + one: 'ファイル 1 件', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => 'ファイルはありません'; + + @override + String get newFile => '新しいファイル'; + + @override + String get noWritersideToc => 'Writerside の目次はありません'; + + @override + String get tocSection => '目次セクション'; + + @override + String get newTopic => '新しいトピック'; + + @override + String get newChildTopic => '新しい子トピック'; + + @override + String get newSiblingTopic => '新しい兄弟トピック'; + + @override + String get renameTopicFile => 'トピックファイルの名前を変更'; + + @override + String get topicPlacement => '目次内の位置'; + + @override + String get tocRoot => '目次のルート'; + + @override + String get afterSelectedTopic => '選択したトピックの後'; + + @override + String get insideSelectedTopic => '選択したトピック内'; + + @override + String get pasteAfterTopic => '後に貼り付け'; + + @override + String get pasteAsChildTopic => '子として貼り付け'; + + @override + String get removeFromToc => '目次から削除'; + + @override + String get confirmRemoveFromTocTitle => '目次から削除しますか?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return '$name をこの目次から削除しますか?トピックファイルは保持されます。'; + } + + @override + String get confirmDeleteTopicTitle => 'トピックファイルを削除しますか?'; + + @override + String confirmDeleteTopicMessage(String name) { + return '$name を削除し、すべての目次から削除しますか?この操作は取り消せません。'; + } + + @override + String get safeDeleteTopicFile => 'トピックファイルを安全に削除…'; + + @override + String get removeTocElement => '目次要素を削除'; + + @override + String get reviewUsages => '使用箇所を確認'; + + @override + String get deleteTopicFile => 'トピックファイルを削除'; + + @override + String get removeAction => '削除'; + + @override + String topicRemovalSummary(String topic) { + return '選択したインスタンスから「$topic」を削除します。トピックファイルは保持されます。'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return '「$topic」を削除し、この Writerside プロジェクト全体の参照を安全に更新します。'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '子トピック $count 件を 1 レベル上へ移動します。', + one: '子トピック 1 件を 1 レベル上へ移動します。', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + 'このトピックはインスタンスの開始ページとして使用されています。使用箇所を確認し、続行する前に別の開始ページを割り当ててください。'; + + @override + String topicUsagesCount(int count) { + return '使用箇所($count)'; + } + + @override + String get noBreakingTopicUsages => 'リンク切れになる参照は見つかりませんでした。'; + + @override + String get topicUsagesFound => 'BusyMark はこのトピックへの次の参照を見つけました。'; + + @override + String get topicUsageTocElements => '目次要素'; + + @override + String get topicUsageStartPages => '開始ページ'; + + @override + String get topicUsageTopicLinks => 'トピックリンク'; + + @override + String get topicUsageIncludes => 'インクルード'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '使用箇所 $count 件', + one: '使用箇所 1 件', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => 'リファクタリングのオプション'; + + @override + String get updateUsagesAutomatically => '使用箇所を自動的に更新'; + + @override + String get updateUsagesAutomaticallyDescription => + '目次の参照とインクルードを削除し、リンクテキストを保持'; + + @override + String get manualUsageUpdatesRequired => 'このリファクタリングの前に手動で変更が必要な使用箇所があります。'; + + @override + String get setRedirectTo => 'リダイレクト先を設定'; + + @override + String get noRedirectDescription => '以前公開されたページをリダイレクトしない'; + + @override + String get redirectTarget => 'リダイレクト先'; + + @override + String get remainingUsagesBlockRemoval => + '続行する前に残りの使用箇所を確認して更新するか、利用可能な場合は自動更新を有効にしてください。'; + + @override + String usagesOfTopic(String topic) { + return '$topic の使用箇所'; + } + + @override + String get noUsagesFound => '使用箇所は見つかりませんでした'; + + @override + String get outsideSelectedInstance => '選択したインスタンスの外部'; + + @override + String get doRefactor => 'リファクタリングを実行'; + + @override + String get orphanTopicTitle => 'トピックファイルは使用されていません'; + + @override + String get keepTopicFile => 'トピックファイルを保持'; + + @override + String orphanTopicMessage(String topic) { + return '「$topic」はこの Writerside プロジェクト内で使用されていません。ファイルを削除するか、別のインスタンスで使用するために保持してください。'; + } + + @override + String get defaultNewTopicTitle => '新しいトピック'; + + @override + String get topicTitle => 'トピックのタイトル'; + + @override + String get fileName => 'ファイル名'; + + @override + String get topicTitleRequired => 'トピックのタイトルは必須です。'; + + @override + String get fileNameRequired => 'ファイル名は必須です。'; + + @override + String get rename => '名前を変更'; + + @override + String get confirmDeleteFileTitle => 'ファイルを削除しますか?'; + + @override + String get confirmDeleteFolderTitle => 'フォルダーを削除しますか?'; + + @override + String confirmDeleteFileMessage(String name) { + return '$name を削除しますか?この操作は取り消せません。'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return '$name と、その中のすべてのファイルを削除しますか?この操作は取り消せません。'; + } + + @override + String get useSingleSafeFileName => '安全な単一のファイル名を使用してください。'; + + @override + String useExpectedExtension(String extension) { + return '選択した形式の拡張子 $extension を使用してください。'; + } + + @override + String get useIdentifierCharacters => + '拡張子の前には、文字、数字、アンダースコア、ハイフンのみを使用してください。'; + + @override + String get topicIdAlreadyExists => 'トピック ID はすでに存在します。'; + + @override + String get createWritersideTopicFailed => 'Writerside トピックを作成できませんでした。'; + + @override + String get noOutline => 'アウトラインはありません'; + + @override + String expandKind(String kind) { + return '$kind を展開'; + } + + @override + String collapseKind(String kind) { + return '$kind を折りたたむ'; + } + + @override + String get foldKindSection => 'セクション'; + + @override + String get foldKindList => 'リスト'; + + @override + String get foldKindQuote => '引用'; + + @override + String get foldKindTag => 'タグ'; + + @override + String get sourceSearchPreviousMatch => '前の一致'; + + @override + String get sourceSearchNextMatch => '次の一致'; + + @override + String get sourceSearchCaseSensitive => '大文字と小文字を区別'; + + @override + String get sourceSearchWholeWord => '単語単位'; + + @override + String get sourceSearchRegex => '正規表現'; + + @override + String get sourceSearchReplacement => '置換後'; + + @override + String get sourceSearchReplaceCurrent => '現在の一致を置換'; + + @override + String get sourceSearchReplaceAndFindNext => '置換して次を検索'; + + @override + String get sourceSearchReplaceAll => 'すべて置換'; + + @override + String get workspaceReplace => 'ワークスペースで置換'; + + @override + String get reviewReplacements => '置換内容を確認'; + + @override + String get applyReplacements => '置換を適用'; + + @override + String get skippedFiles => 'スキップしたファイル'; + + @override + String get workspaceReplaceDirtyBuffer => '未保存のエディター内容'; + + @override + String get workspaceReplaceDiskContent => 'ディスク上の保存済み内容'; + + @override + String selectFileMatches(int count) { + return '$count 件の一致をすべて選択'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return '$files 個のファイルで $matches 件の一致を置換しました。$skipped 件をスキップしました。'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 末尾に改行あり'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 末尾に改行なし'; + } + + @override + String get normalizeLineEndings => '行末を正規化'; + + @override + String get mixedLineEndingsSavePrompt => 'このドキュメントには混在した行末があります。形式を選択してください。'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName には混在した行末があります。置換前に使用する形式を選択してください。'; + } + + @override + String get workspaceReplaceIssueOversized => 'サイズが大きすぎるファイルをスキップしました。'; + + @override + String get workspaceReplaceIssueUnreadable => '読み取れないファイルをスキップしました。'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => '有効な UTF-8 ではないファイルをスキップしました。'; + + @override + String get workspaceReplaceIssueTruncated => '置換プレビューは途中で切り詰められました。'; + + @override + String get workspaceReplaceIssueFileChanged => 'プレビュー後に変更されたファイルをスキップしました。'; + + @override + String get workspaceReplaceIssueBufferChanged => + 'プレビュー後に変更されたエディターバッファーをスキップしました。'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + '置換前に LF または CRLF の正規化を選択してください。'; + + @override + String get workspaceReplaceIssuePartialConflict => + 'ファイルが同時に変更されたため、ロールバックを停止しました。一部の置換が残っている可能性があります。置き換えられた内容は下記のパスに保存されています。'; + + @override + String get workspaceReplaceIssueApplyFailed => + '確認済みの置換をコミットできませんでした。ファイルは変更されていません。'; + + @override + String externalChangesTitle(String fileName) { + return '外部変更 — $fileName'; + } + + @override + String get externalFileDeleted => 'このファイルはディスク上で削除されました。'; + + @override + String get externalFileChanged => '未保存の編集を行っている間に、このファイルがディスク上で変更されました。'; + + @override + String recoveredDocumentReview(String fileName) { + return '$fileName の未保存の内容を復元しました。確認してから保存、名前を付けて保存、または破棄してください。'; + } + + @override + String get compare => '比較'; + + @override + String get reloadFromDisk => 'ディスクから再読み込み'; + + @override + String get keepMine => '自分の変更を保持'; + + @override + String get saveAs => '名前を付けて保存'; + + @override + String get sourceSearchInvalidRegex => '無効な正規表現'; + + @override + String get sourceLargeFileFeaturesPaused => '大きなファイル:ハイライトと折りたたみを一時停止しています'; + + @override + String get nothingToRead => '読み取るものはありません'; + + @override + String get admonition => '注記'; + + @override + String get quote => '引用'; + + @override + String get note => '注記'; + + @override + String get tip => 'ヒント'; + + @override + String get warning => '警告'; + + @override + String get tabs => 'タブ'; + + @override + String get tab => 'タブ'; + + @override + String get procedure => '手順'; + + @override + String get step => 'ステップ'; + + @override + String get topic => 'トピック'; + + @override + String get chapter => '章'; + + @override + String couldNotOpenTarget(String target) { + return '$target を開けませんでした'; + } + + @override + String linkTargetNotFound(String targetPath) { + return 'リンク先が見つかりません:$targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => 'このファイル形式はエディターで開けません'; + + @override + String anchorNotFound(String anchor) { + return 'アンカーが見つかりません:$anchor'; + } + + @override + String get noProblemsFound => '問題は見つかりませんでした'; + + @override + String get noResults => '結果はありません'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - $lineNumber 行目'; + } + + @override + String get untitledResult => '無題の結果'; + + @override + String get documentKindMarkdownFile => 'Markdown ファイル'; + + @override + String get documentKindWritersideMarkdownTopic => 'Writerside Markdown トピック'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML トピック'; + + @override + String get documentKindWritersideTree => 'Writerside ツリー'; + + @override + String get documentKindConfigurationFile => '構成ファイル'; + + @override + String get documentKindVariablesFile => '変数ファイル'; + + @override + String get documentKindCategoriesFile => 'カテゴリファイル'; + + @override + String get documentKindResourceFile => 'リソースファイル'; + + @override + String workspaceErrorOpenFailed(String error) { + return '開くことができませんでした:$error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Writerside プロジェクトを作成できませんでした:$error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Writerside トピックを作成できませんでした:$error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return 'ファイルを開けませんでした:$error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + 'この Markdown ファイルの保存場所を選択してください。'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + '保存できません:ファイルがディスク上で変更されました。'; + + @override + String workspaceErrorSaveFailed(String error) { + return '保存に失敗しました:$error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return 'ファイル操作に失敗しました:$error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return '検証に失敗しました:$error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '未保存のドキュメント $count 件を復元しました。保存または破棄する前にそれぞれ確認してください。', + one: '未保存のドキュメント 1 件を復元しました。保存または破棄する前に確認してください。', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '破損した復元レコード $count 件を復元できませんでした。有効な復元レコードは引き続き利用できます。', + one: '破損した復元レコード 1 件を復元できませんでした。元の復元ファイルは確認用に保持されています。', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return 'パスが存在しません:$path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return '対象ディレクトリはすでに存在し、空ではありません:$path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return '対象パスはすでに存在しますが、ディレクトリではありません:$path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return '生成されたファイルはすでに存在します:$path'; + } + + @override + String get errorParentDirectoryRequired => '親ディレクトリは必須です。'; + + @override + String errorParentDirectoryMissing(String path) { + return '親ディレクトリが存在しません:$path'; + } + + @override + String errorDirectoryMissing(String path) { + return 'ディレクトリが存在しません:$path'; + } + + @override + String errorPathAlreadyExists(String path) { + return 'パスはすでに存在します:$path'; + } + + @override + String get errorFileNameRequired => 'ファイル名は必須です。'; + + @override + String get errorFileNameUnsafe => 'ファイル名は安全な単一のパスセグメントである必要があります。'; + + @override + String get errorFileOperationInvalidTarget => 'フォルダーをその中へ移動することはできません。'; + + @override + String get errorFileOperationOutsideRoot => 'ファイル操作はワークスペース内で行う必要があります。'; + + @override + String get errorFileOperationRoot => 'ファイルツリーからワークスペースのルートを変更することはできません。'; + + @override + String get errorProjectNameRequired => 'プロジェクト名は必須です。'; + + @override + String get errorDirectoryNameRequired => 'ディレクトリ名は必須です。'; + + @override + String get errorDirectoryNameUnsafe => 'ディレクトリ名は安全な単一のパスセグメントである必要があります。'; + + @override + String get errorInstanceIdInvalid => + 'インスタンス ID は小文字で始まり、小文字、数字、アンダースコア、ハイフンのみを含む必要があります。'; + + @override + String get errorTopicFileInvalid => + 'トピックファイル名は、パス区切り文字を含まない Markdown ファイル名である必要があります。'; + + @override + String get errorTopicTitleRequired => 'トピックのタイトルは必須です。'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Writerside モジュールのルートが存在しません:$path'; + } + + @override + String get errorWritersideModuleNotOpen => + 'トピックを作成するには Writerside モジュールを開く必要があります。'; + + @override + String get errorWritersideInstanceTreeMissing => + 'Writerside モジュールにインスタンスツリーがありません。'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside ツリーファイルが存在しません:$path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return 'トピック ID「$topicId」はこのヘルプモジュールにすでに存在します。'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return 'トピックファイルはすでに存在します:$path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return '選択したツリーに参照トピックがありません:$topic'; + } + + @override + String get errorWritersideTocNodeMissing => '選択した目次エントリはすでに存在しません。'; + + @override + String get errorWritersideTocInvalidMove => + '目次エントリを自分自身またはその子の中へ移動することはできません。'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return '開始トピック $topic は削除できません。先に別の開始ページを選択してください。'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Writerside トピックファイルには「安全な削除」を使用してください。'; + + @override + String get errorWritersideTopicUsageScanFailed => + 'トピックの使用箇所をスキャンできませんでした。ファイルは変更されていません。'; + + @override + String get errorWritersideTopicUsagesRemain => + '一部のトピックの使用箇所には引き続き対応が必要です。続行する前に確認してください。'; + + @override + String get errorWritersideRedirectInvalid => + '選択したリダイレクト先は無効になっています。もう一度選択してください。'; + + @override + String errorWritersideRollbackFailed(String paths) { + return 'トピックの削除を完全にはロールバックできませんでした。続行する前に次のパスを確認してください:$paths'; + } + + @override + String get errorTopicsRootUnsafe => 'トピックのルートは安全な相対ディレクトリである必要があります。'; + + @override + String get errorTopicFileNameUnsafe => 'トピックファイル名は安全な単一のパスセグメントである必要があります。'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return 'トピックファイルの拡張子は、選択した形式($extension)と一致する必要があります。'; + } + + @override + String get errorTopicFileNameInvalid => + 'トピックファイル名には、文字、数字、アンダースコア、ハイフンのみを使用できます。'; + + @override + String errorUnknown(String code) { + return '不明なエラー:$code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return 'ファイルのメタデータを読み取れませんでした:$error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + '大きなワークスペースが検出されました。アプリの応答性を保つため、一部のファイルをスキップしました。'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return 'ワークスペース項目を検査できませんでした:$error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => 'ファイルがベータ版自動解析の上限を超えています。'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Markdown ファイルを読み取れませんでした:$error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + 'Writerside の見出し属性ブロックの形式が正しくありません。'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return '見出し ID「$id」が重複しています。'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + '追加のトップレベル H1 見出しは章として扱われます。'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown トピックに H1 または front matter のタイトルがありません。'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => 'XML トピックにタイトルがありません。'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return 'トピック「$fileName」にタイトルがありません。'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => + 'front matter が閉じられていません。'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => '安全でない HTML 要素です。'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return 'リンク先が存在しません:$targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return 'アンカー「$anchor」が存在しません。'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return '画像「$destination」に代替テキストがありません。'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return '画像が存在しません:$destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return '無効な XML:$message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg のルートは である必要があります。'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'snippets 宣言に src がありません。'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'instance-groups 宣言に src がありません。'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return 'サポートされていない keymaps モード:$mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'instance 宣言に src がありません。'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg にインスタンスが登録されていません。'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree のルートは である必要があります。'; + + @override + String get diagnosticWritersideTreeMissingId => 'インスタンスプロファイルに id がありません。'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return 'ツリーファイルの拡張子を除いた名前がインスタンス ID「$id」と一致しません。'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + 'ライブラリ以外のインスタンスに start-page がありません。'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return '開始ページ「$startPage」が存在しません。'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return 'トピック「$topic」がこのインスタンスの目次に複数回登場します。'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + '変数宣言には名前と値が必要です。'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return '変数「$name」が複数回宣言されています。'; + } + + @override + String get diagnosticWritersideCategoryMissingId => 'カテゴリに id がありません。'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return 'カテゴリ「$id」が複数回宣言されています。'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return 'カテゴリの順序「$order」が複数回宣言されています。'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + '.topic のルートは である必要があります。'; + + @override + String get diagnosticWritersideTopicMissingRootId => + 'XML トピックにルート id がありません。'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML トピックのルート ID「$id」はファイル名「$expectedId」と一致する必要があります。'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return '要素 ID「$elementId」が複数回登場します。'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => ' に href がありません。'; + + @override + String get diagnosticWritersideConfigMissing => + 'Writerside モードには writerside.cfg が必要です。'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return '設定されたビルド構成ディレクトリがありません:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return '設定された API 仕様ディレクトリがありません:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return '設定された snippets ディレクトリがありません:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return '設定された変数ファイルがありません:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return '設定されたカテゴリファイルがありません:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return '設定されたインスタンスグループファイルがありません:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return '登録されたインスタンスツリー「$source」が存在しません。'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return 'トピックファイルを読み取れませんでした:$error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return 'デフォルトのトピックディレクトリがありません:$relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return '設定されたトピックディレクトリがありません:$relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return '設定された画像ディレクトリがありません:$relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return '要素 ID「$id」が複数回登場します。'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return '目次が存在しないトピック「$topic」を参照しています。'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return '外部 href「$href」が無効です。'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return '変数「%$name%」が宣言されていません。'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return 'トピックリンク「$destination」を解決できません。'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return '「$targetName」にアンカー「$anchor」が存在しません。'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => + ' に from がありません。'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return 'インクルードソース「$from」が存在しません。'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return '「$from」にインクルード要素「$elementId」が存在しません。'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'seealso カテゴリ「$ref」が宣言されていません。'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return 'トピック参照「$reference」があいまいです。'; + } + + @override + String diagnosticUnknown(String code) { + return '不明な診断情報:$code'; + } + + @override + String get close => '閉じる'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git の差分'; + + @override + String get gitShowDiff => '差分を表示'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return '旧 $oldRange → 新 $newRange'; + } + + @override + String get gitDiffNoLines => '行はありません'; + + @override + String get gitUnavailableTitle => 'Git を利用できません'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': + 'Git をインストールするか、利用可能な Git 実行ファイルを使用するよう BusyMark を設定してください。$reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => 'このワークスペースを信頼して Git を使用しますか?'; + + @override + String get gitTrustRequiredMessage => + 'Git リポジトリでは、フック、フィルター、その他の設定を通じてプログラムを実行できます。BusyMark がリポジトリデータを読み取ったり Git 操作を有効にしたりする前に、このワークスペースを信頼してください。'; + + @override + String get gitTrustWorkspace => 'ワークスペースを信頼'; + + @override + String get gitNotRepositoryTitle => 'Git リポジトリではありません'; + + @override + String get gitNotRepositoryMessage => 'このワークスペースは Git リポジトリ内にありません。'; + + @override + String get gitInitializeRepository => 'リポジトリを初期化'; + + @override + String get gitDetachedHead => '分離した HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return 'HEAD は $commit で分離しています'; + } + + @override + String get gitNoUpstream => 'アップストリームなし'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '未プッシュのコミット $count 件', + one: '未プッシュのコミット 1 件', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'プルが必要なコミット $count 件', + one: 'プルが必要なコミット 1 件', + ); + return '$_temp0'; + } + + @override + String get gitClean => 'クリーン'; + + @override + String get gitConflicts => '競合'; + + @override + String get gitChanges => '変更'; + + @override + String get gitStaged => 'ステージ済み'; + + @override + String get gitUnstaged => '未ステージ'; + + @override + String get gitHistory => '履歴'; + + @override + String get gitBranches => 'ブランチ'; + + @override + String get gitActions => 'Git の操作'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => 'ファイルをステージ'; + + @override + String get gitRemoveFromCommit => 'ファイルをアンステージ'; + + @override + String get gitDiscard => 'ロールバック'; + + @override + String get gitOpenFile => 'ファイルを開く'; + + @override + String get gitMarkResolved => '解決済みとしてマーク'; + + @override + String get gitUntracked => '未追跡'; + + @override + String get gitCommitMessage => 'コミットメッセージ'; + + @override + String get gitCommitSelectedFiles => '選択したファイル'; + + @override + String get gitCommitNoSelectedFiles => 'コミットする前に、少なくとも 1 つのファイルをステージしてください。'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'ステージ済みファイル $count 件', + one: 'ステージ済みファイル 1 件', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => 'ワークスペース外'; + + @override + String get gitCommitMessageRequired => 'コミットメッセージを入力してください。'; + + @override + String get gitCreateBranch => 'ブランチを作成'; + + @override + String get gitNewBranch => '新しいブランチ'; + + @override + String get gitBranchName => 'ブランチ名'; + + @override + String get gitSwitchBranch => '切り替え'; + + @override + String get gitNoChanges => '変更はありません'; + + @override + String get gitNoHistory => '履歴はありません'; + + @override + String get gitNoBranches => 'ブランチはありません'; + + @override + String get gitNoDiff => '表示する差分はありません'; + + @override + String get gitBinaryFile => 'バイナリファイルです。BusyMark はバイナリパッチをレンダリングしません。'; + + @override + String gitBinaryFileInfo(int size) { + return 'バイナリファイル($size バイト)です。BusyMark はバイナリパッチをレンダリングしません。'; + } + + @override + String get gitUnsavedChangesBanner => '保存するまで、未保存のエディターの変更は含まれません。'; + + @override + String get gitConfirmDiscardTitle => 'Git の変更を破棄しますか?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '選択した追跡対象ファイルのステージ済みおよび未ステージの変更をすべて HEAD に復元します。', + one: '選択した追跡対象ファイルのステージ済みおよび未ステージの変更をすべて HEAD に復元します。', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '選択した未追跡ファイルを削除します。', + one: '選択した未追跡ファイルを削除します。', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Git の状態に応じて、選択したファイルを復元または削除します。', + one: 'Git の状態に応じて、選択したファイルを復元または削除します。', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return '$branch に切り替えますか?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'Git がブランチを切り替えた後、BusyMark はディスクからワークスペースを再読み込みします。'; + + @override + String get gitConfirmPushSetUpstreamTitle => 'アップストリームブランチを設定しますか?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return 'このブランチにはアップストリームがありません。リモートが 1 つだけ設定されている場合、BusyMark は $branch をプッシュしてアップストリームを設定できます。'; + } + + @override + String get gitProjectHistory => 'プロジェクト履歴'; + + @override + String get gitFileHistory => 'ファイル履歴'; + + @override + String get gitFileHistoryRequiresOpenFile => + 'ファイル履歴を表示するには Markdown ファイルを開く必要があります。'; + + @override + String get gitLoadMore => 'さらに読み込む'; + + @override + String get gitChangesInCommit => 'このコミットの変更'; + + @override + String get gitCompareWithCurrent => '現在の状態と比較'; + + @override + String get gitRestoreVersion => 'このバージョンを復元'; + + @override + String get gitConfirmRestoreTitle => 'このファイルのバージョンを復元しますか?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark は、現在の作業ツリーのファイルを選択したコミット済みバージョンで置き換えます。復元されたファイルは未ステージのままになります。'; + + @override + String get gitCommitActions => 'コミット操作'; + + @override + String get gitResetCurrentBranchToHere => '現在のブランチをここにリセット…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return '$branch を $commit にリセットしますか?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return 'ブランチ $branch をコミット $commit に移動します。Git がインデックスと作業ツリーを更新する方法を選択してください。'; + } + + @override + String get gitReset => 'リセット'; + + @override + String get gitResetModeSoft => 'ソフト'; + + @override + String get gitResetModeSoftDescription => + 'ブランチのみを移動します。インデックスと作業ツリーは変更せず、選択したコミットとの差分をステージ済みのままにします。'; + + @override + String get gitResetModeMixed => 'ミックス'; + + @override + String get gitResetModeMixedDescription => + 'ブランチを移動してインデックスをリセットします。作業ツリーは変更せず、差分を未ステージの状態にします。'; + + @override + String get gitResetModeHard => 'ハード'; + + @override + String get gitResetModeHardDescription => + 'ブランチを移動してインデックスと作業ツリーをリセットします。追跡対象の変更は破棄され、妨げとなる未追跡ファイルは削除される可能性があります。'; + + @override + String get gitResetModeKeep => '保持'; + + @override + String get gitResetModeKeepDescription => + 'ローカルの変更を保持しながら、ブランチを移動して追跡対象ファイルをリセットします。変更がリセットと競合する場合、Git は中止します。'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => 'ファイル操作'; + + @override + String get actions => '操作'; + + @override + String get gitStatusAdded => '追加済み'; + + @override + String get gitStatusDeleted => '削除済み'; + + @override + String get gitStatusRenamed => '名前変更済み'; + + @override + String get gitStatusCopied => 'コピー済み'; + + @override + String get gitStatusUntracked => '未追跡'; + + @override + String get gitStatusConflicted => '競合あり'; + + @override + String get gitStatusIgnored => '無視済み'; + + @override + String get gitStatusTypeChanged => '種類を変更済み'; + + @override + String get gitStatusModified => '変更済み'; + + @override + String get gitStatusUnknown => '不明'; + + @override + String get gitErrorUnavailable => 'Git を利用できません。'; + + @override + String get gitErrorNotRepository => 'このワークスペースは Git リポジトリではありません。'; + + @override + String get gitErrorUnsafePath => 'BusyMark は安全でない Git パスをブロックしました。'; + + @override + String get gitErrorInvalidBranchName => '有効なブランチ名を入力してください。'; + + @override + String get gitErrorNoRemote => 'Git のリモートが設定されていません。'; + + @override + String get gitErrorNoUpstream => 'アップストリームブランチが設定されていません。'; + + @override + String get gitErrorMultipleRemotes => + '複数のリモートが設定されています。BusyMark の外部でアップストリームを選択してください。'; + + @override + String get gitErrorDirtyWorkspace => + 'ブランチを切り替える前に、BusyMark エディターの変更を保存または破棄してください。'; + + @override + String get gitErrorResetDirtyWorkspace => + '現在のブランチをリセットする前に、BusyMark エディターの変更を保存または破棄してください。'; + + @override + String get gitErrorRestoreStagedFile => + '過去のバージョンを復元する前に、このファイルをアンステージしてください。'; + + @override + String get gitErrorResetDetachedHead => 'リセットする前にブランチをチェックアウトしてください。'; + + @override + String get gitErrorDiverged => + 'ブランチが分岐しています。BusyMark の外部でマージまたはリベースの問題を解決してください。'; + + @override + String get gitErrorAuthorIdentity => 'コミットするには、Git に作成者名とメールアドレスが必要です。'; + + @override + String get gitAuthorIdentityTitle => 'Git の作成者情報'; + + @override + String get gitAuthorIdentityMessage => + 'コミットに記録する Git の識別情報を入力してください。BusyMark はそれを保存して、このコミットを再試行します。'; + + @override + String get gitAuthorName => '名前'; + + @override + String get gitAuthorEmail => 'メールアドレス'; + + @override + String get gitAuthorIdentityGlobal => 'すべてのリポジトリに使用'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'Snap としてインストールした場合、BusyMark で開いたリポジトリに適用されます。'; + + @override + String get gitSaveIdentityAndCommit => '保存してコミット'; + + @override + String get gitErrorAuthentication => 'Git の認証に失敗しました。'; + + @override + String get gitErrorNetwork => 'Git のネットワーク操作に失敗しました。'; + + @override + String get gitErrorConflict => 'Git から未解決の競合が報告されました。'; + + @override + String get gitErrorCommandFailed => 'Git コマンドに失敗しました。'; + + @override + String get markdownAndHtml => 'Markdown と HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown ブロック'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Markdown のソースとプレビューでサポートされるブロック構造'; + + @override + String get markdownHtmlInlineFormatting => 'インライン Markdown'; + + @override + String get markdownHtmlInlineFormattingDescription => + '段落、リスト項目、表のセル内で使用できる書式'; + + @override + String get markdownHtmlRawHtmlBlocks => '生 HTML ブロック'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'BusyMark のプレビューウィジェットでレンダリングされる安全なブロックレベル HTML タグ'; + + @override + String get markdownHtmlRawHtmlInline => '生 HTML インラインタグ'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + 'リテラルタグを表示せずにレンダリングされる安全なインライン HTML タグ'; + + @override + String get markdownHtmlSafety => '安全性のルール'; + + @override + String get markdownHtmlSafetyDescription => + '生 HTML はプレビューのレンダリング前に解析およびサニタイズされます。'; + + @override + String get markdownHtmlHeadings => '見出し'; + + @override + String get markdownHtmlParagraphs => '段落'; + + @override + String get markdownHtmlLists => 'リスト'; + + @override + String get markdownHtmlHtmlContainers => 'コンテナー'; + + @override + String get markdownHtmlHtmlTextBlocks => 'テキストブロック'; + + @override + String get markdownHtmlHtmlFigures => '図と画像'; + + @override + String get markdownHtmlHtmlPreformatted => '整形済みコード'; + + @override + String get markdownHtmlHtmlDisclosure => '折りたたみブロック'; + + @override + String get markdownHtmlHtmlDescriptionLists => '説明リスト'; + + @override + String get markdownHtmlHtmlFormattingTags => '書式タグ'; + + @override + String get markdownHtmlHtmlInlineCodeTags => 'インラインコードタグ'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => 'セマンティックテキストタグ'; + + @override + String get markdownHtmlSanitizedPreview => 'サニタイズ済みプレビュー'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + '許可された HTML はブラウザーでレンダリングされず、BusyMark のプレビューブロックに変換されます。'; + + @override + String get markdownHtmlSourcePreserved => 'ソースを保持'; + + @override + String get markdownHtmlSourcePreservedDescription => + '編集されていない生 HTML はソーステキストのまま正確に保存されます。'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'HTML 内の Markdown'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + '生 HTML 内の Markdown マーカーはリテラルテキストとしてレンダリングされます。'; + + @override + String get markdownHtmlBlockedContent => 'ブロックされたアクティブコンテンツ'; + + @override + String get markdownHtmlBlockedContentDescription => + 'スクリプト、スタイル、フレーム、フォーム、SVG、MathML、イベント、安全でない属性はブロックされます。'; + + @override + String get markdownHtmlSafeUrls => '安全な URL のみ'; + + @override + String get markdownHtmlSafeUrlsDescription => + 'リンクでは http、https、mailto、tel、相対パス、フラグメント URL が許可されます。安全でないスキームはブロックされます。'; + + @override + String get exportAsPdf => 'PDF としてエクスポート'; + + @override + String get pdfExportDescription => 'ページレイアウトを選択して、整った自己完結型の PDF を生成'; + + @override + String get pdfRemoteImagesNote => + 'エクスポート中にリモート画像はダウンロードされません。利用可能な場合はローカル画像が含まれます。'; + + @override + String get pdfPageSize => 'ページサイズ'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => '向き'; + + @override + String get pdfPortrait => '縦向き'; + + @override + String get pdfLandscape => '横向き'; + + @override + String get pdfMargins => '余白'; + + @override + String get pdfMarginNarrow => '狭い'; + + @override + String get pdfMarginNormal => '標準'; + + @override + String get pdfMarginWide => '広い'; + + @override + String get pdfIncludePageNumbers => 'ページ番号を含める'; + + @override + String get export => 'エクスポート'; + + @override + String get exportingPdf => 'PDF をエクスポート中…'; + + @override + String get fileTypePdf => 'PDF ドキュメント'; + + @override + String pdfExported(String fileName) { + return '$fileName をエクスポートしました。'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '$fileName を $count 件の警告付きでエクスポートしました。'; + } + + @override + String get pdfExportUnavailable => + 'PDF エクスポートコンポーネントがありません。BusyMark を再インストールして、もう一度お試しください。'; + + @override + String get pdfExportTimedOut => 'PDF のエクスポートに時間がかかりすぎたため停止しました。'; + + @override + String get pdfExportFailed => 'BusyMark はこのドキュメントを PDF としてエクスポートできませんでした。'; + + @override + String get visualizationRendering => 'レンダリング中…'; + + @override + String get visualizationStale => '最後に有効だったレンダリング結果を表示中'; + + @override + String get visualizationShowSource => 'ソースを表示'; + + @override + String get visualizationShowRender => 'レンダリング結果を表示'; + + @override + String get visualizationFitWidth => '幅に合わせる'; + + @override + String get visualizationSaveImage => '画像を保存'; + + @override + String get visualizationCopyImage => '画像をコピー'; + + @override + String get visualizationImageCopied => '画像をコピーしました'; + + @override + String get visualizationOpenApiReference => 'API リファレンスを開く'; + + @override + String get visualizationValid => '有効'; + + @override + String get visualizationInvalid => '無効'; + + @override + String get visualizationServers => 'サーバー'; + + @override + String get visualizationPaths => 'パス'; + + @override + String get visualizationOperations => '操作'; + + @override + String get visualizationTags => 'タグ'; + + @override + String get visualizationNoOperations => '一致する操作はありません'; + + @override + String get visualizationSearchOperations => '操作を検索'; + + @override + String get visualizationRenderFailed => 'この可視化をレンダリングできませんでした。'; + + @override + String get visualizationRetry => '再試行'; + + @override + String visualizationSaved(String fileName) { + return '$fileName を保存しました'; + } + + @override + String get shortcutExportPdfDescription => + '現在のドキュメントまたは Writerside モジュールを PDF としてエクスポート'; + + @override + String get instances => 'インスタンス'; + + @override + String get newInstance => '新しいインスタンス'; + + @override + String get newTocLibrary => '新しい目次ライブラリ'; + + @override + String get editInstance => 'インスタンスを編集'; + + @override + String get openTocFile => '目次ファイルを開く'; + + @override + String get createInstance => 'インスタンスを作成'; + + @override + String get createTocLibrary => '目次ライブラリを作成'; + + @override + String get instanceContent => 'コンテンツ'; + + @override + String get instanceContentSource => '作成元'; + + @override + String get emptyInstance => '空のインスタンス'; + + @override + String get markdownFiles => 'ローカル Markdown ファイル'; + + @override + String get chooseMarkdownFolder => 'Markdown フォルダーを選択'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Markdown ファイルを含むフォルダーを選択してください。'; + + @override + String get instanceAppearance => '外観'; + + @override + String get instanceColor => 'アイコンの色'; + + @override + String get instanceVersion => 'バージョン'; + + @override + String instanceVersionInherited(String version) { + return 'この項目が空の場合、プロジェクトのバージョンは $version です。'; + } + + @override + String get instanceWebPath => 'ウェブパス'; + + @override + String get instanceStatus => 'ステータス'; + + @override + String get instanceStatusRelease => 'リリース'; + + @override + String get instanceStatusEap => '早期アクセス'; + + @override + String get instanceStatusDeprecated => '非推奨'; + + @override + String get allowSearchEngineIndexing => '検索エンジンによるインデックス登録を許可'; + + @override + String get allowSearchEngineIndexingDescription => + '外部検索エンジンによるこの出力のインデックス登録を許可'; + + @override + String get offlineArtifact => 'オフラインアーティファクト'; + + @override + String get offlineArtifactDescription => '構築したドキュメントを自己完結させるためにリソースをバンドル'; + + @override + String get instanceOutputSettings => '出力設定'; + + @override + String get markdownImportSource => 'Markdown ソース'; + + @override + String get markdownImportFiles => 'Markdown ファイル'; + + @override + String get selectNone => 'すべて選択解除'; + + @override + String markdownFilesFound(int count) { + return 'Markdown ファイルが $count 件見つかりました'; + } + + @override + String get noMarkdownFilesFound => 'このディレクトリに Markdown ファイルは見つかりませんでした。'; + + @override + String get copyReferencedMedia => '参照されたメディアをコピー'; + + @override + String get copyReferencedMediaDescription => + '選択したファイルから参照されているローカル画像と動画を、相対パスを保持したままコピー'; + + @override + String get instanceIdRenameWarningTitle => 'インスタンス ID の名前を変更しますか?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark は .tree ファイルの名前を変更し、Writerside プロジェクトの参照を「$oldId」から「$newId」に更新します。公開スクリプトは変更されないため、別途更新する必要があります。'; + } + + @override + String get renameAndUpdateReferences => '名前を変更して参照を更新'; + + @override + String get tocLibraryDescription => + '目次ライブラリには再利用可能なセクションが保存され、独自の出力は生成されません。'; + + @override + String get defaultTocLibraryName => '共有目次'; + + @override + String get instanceColorAutomatic => '自動'; + + @override + String get instanceColorBlue => '青'; + + @override + String get instanceColorGreen => '緑'; + + @override + String get instanceColorOrange => 'オレンジ'; + + @override + String get instanceColorPurple => '紫'; + + @override + String get instanceColorRed => '赤'; + + @override + String get instanceColorTeal => '青緑'; + + @override + String get instanceColorYellow => '黄'; + + @override + String get errorWritersideInstanceNameRequired => 'インスタンス名を入力してください。'; + + @override + String errorWritersideInstanceIdExists(String id) { + return 'ID「$id」のインスタンスはすでに存在します。'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return 'インスタンスツリーはすでに存在します:$path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Markdown ソースディレクトリが存在しません:$path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + 'インポートする Markdown ファイルを少なくとも 1 つ選択してください。'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return '選択したソース内に読み取り可能な Markdown ファイルではないものがあります:$path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return 'インポートすると既存のプロジェクトファイルが上書きされます:$path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + 'インスタンスのファイルがディスク上で変更されました。確認して、もう一度お試しください。'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark はインスタンスの変更を完全にはロールバックできませんでした。続行する前に次のファイルを確認してください:$paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + '目次ライブラリに Markdown トピックをインポートすることはできません。'; + + @override + String get errorWritersideInstanceWebPathInvalid => 'ウェブパスは 1 行である必要があります。'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Writerside インスタンスの構成が無効です。診断情報を修正して、もう一度お試しください。'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark はインスタンスの変更を安全にステージできませんでした。'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return '不明なインスタンスステータス「$status」です。release、eap、deprecated のいずれかを使用してください。'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return 'インスタンス ID「$id」が複数のツリーファイルで使用されています。'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml には ルート要素が必要です。'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return '$name の値「$value」は true または false である必要があります。'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + ' 要素にはインスタンス ID の指定が必要です。'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + 'ツリーの には from と element-id の両方を指定する必要があります。'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + 'ツリーの には id の指定が必要です。'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + 'インスタンス間の目次参照には ref と in の両方を指定する必要があります。'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + '目次要素が複数のトピック、参照、リンク、またはリダイレクトを対象にすることはできません。'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return 'ツリー要素 ID「$id」が複数回宣言されています。'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + 'インスタンスグループファイルには ルート要素が必要です。'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + 'インスタンスグループには空でない id とインスタンスリストの指定が必要です。'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return 'インスタンスグループ ID「$id」が複数回宣言されています。'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return '目次のインクルード「$source#$id」は外部モジュール「$origin」に属しているため、このワークスペースでは展開できません。'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return '登録されたツリー「$source」にツリー要素「$id」が存在しません。'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return 'ツリーのインクルード「$source#$id」が循環を作成しています。'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return 'インスタンス条件が不明なグループ「@$group」を参照しています。'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return 'インスタンス間参照が不明なインスタンス「$instance」を対象にしています。'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return 'トピック「$topic」は参照先のインスタンス「$instance」にありません。'; + } + + @override + String get download => 'ダウンロード'; + + @override + String get exportWritersideAsPdf => 'Writerside を PDF としてエクスポート'; + + @override + String get writersidePdfContent => 'エクスポートする内容'; + + @override + String get writersidePdfPage => 'ページ'; + + @override + String get exportingWritersidePdf => 'Writerside PDF をエクスポート中…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => 'ローカル Ollama'; + + @override + String get aiDisabled => '無効'; + + @override + String get aiLocalOnlyDescription => + 'AI による編集は明示的に実行されます。BusyMark は選択したプロバイダーに表示されたコンテキストのみを送信し、確認なしに提案を適用することはありません。'; + + @override + String get aiProvider => 'AI プロバイダー'; + + @override + String get aiDefaultProvider => 'デフォルトのプロバイダー'; + + @override + String get aiConfigureProvider => 'プロバイダーを設定'; + + @override + String get aiChooseProvider => 'AI プロバイダーを選択'; + + @override + String get aiOllamaEndpoint => 'Ollama エンドポイント'; + + @override + String get aiOllamaModel => 'Ollama モデル'; + + @override + String get aiTestConnection => '接続をテスト'; + + @override + String get aiTestingConnection => 'テスト中…'; + + @override + String aiConnectionReady(int count) { + return '接続しました。インストール済みのモデルが $count 件見つかりました。'; + } + + @override + String get aiNoModels => 'モデルが選択されていません。'; + + @override + String get aiConnectionFailed => 'BusyMark は AI によるテキスト生成を確認できませんでした。'; + + @override + String get aiConfigureFirst => '設定 → AI で AI プロバイダーを有効にして、モデルを確認してください。'; + + @override + String get aiEditWithAi => 'AI で編集'; + + @override + String get aiRefineWithAi => 'AI で改善'; + + @override + String get aiInstruction => '指示'; + + @override + String get aiChangeTarget => '変更対象'; + + @override + String get aiSharedContext => 'AI と共有するコンテキスト'; + + @override + String get aiTargetSelection => '選択したコンテンツ'; + + @override + String get aiTargetInsertAfterBlock => '現在のブロックの後に挿入'; + + @override + String get aiTargetCurrentBlock => '現在のブロック'; + + @override + String get aiTargetCurrentSection => '現在のセクション'; + + @override + String get aiTargetCompleteDocument => 'ドキュメント全体'; + + @override + String get aiContextNone => 'ドキュメントのコンテキストなし'; + + @override + String get aiContextSelection => '選択したコンテンツ'; + + @override + String get aiContextCurrentBlock => '現在のブロック'; + + @override + String get aiContextCurrentSection => '現在のセクション'; + + @override + String get aiContextCompleteDocument => 'ドキュメント全体'; + + @override + String get aiGenerating => '提案を生成中…'; + + @override + String get aiProposal => 'AI の提案'; + + @override + String get aiGenerateProposal => '提案を生成'; + + @override + String aiContextDisclosure(int count) { + return '選択したプロバイダーは、表示されたコンテキストから $count 文字を受け取ります。'; + } + + @override + String get aiOriginal => '元の内容'; + + @override + String get aiSuggested => '提案された内容'; + + @override + String get aiApplyProposal => '提案を適用'; + + @override + String aiTokenUsage(int input, int output) { + return '入力トークン:$input · 出力トークン:$output'; + } + + @override + String get aiStaleProposal => 'この提案の生成中にドキュメントが変更されました。操作をもう一度実行してください。'; + + @override + String get gitAiStagedChangesChanged => + 'コミットメッセージの生成中にステージ済みの変更が変わりました。操作をもう一度実行してください。'; + + @override + String get aiViewContext => '送信されたコンテキストを表示'; + + @override + String get aiReviewExactContent => '正確な内容を確認'; + + @override + String get aiContentToChange => '変更する内容'; + + @override + String get aiContentSentToAi => 'AI に送信された内容'; + + @override + String get aiApiKey => 'API キー'; + + @override + String get aiApiKeyStoredHint => 'キーはシステムの認証情報ストアに保存されています'; + + @override + String get aiApiKeyEnterHint => 'プロバイダーの API キーを入力'; + + @override + String get aiReplaceApiKey => 'API キーを置き換え'; + + @override + String get aiSaveApiKey => 'API キーを安全に保存'; + + @override + String get aiRemoveApiKey => '保存した API キーを削除'; + + @override + String get aiCredentialSaved => 'API キーをシステムの認証情報ストアに保存しました。'; + + @override + String get aiCredentialRemoved => '保存した API キーを削除しました。'; + + @override + String get aiModelRouting => 'モデルのルーティング'; + + @override + String get aiAutomaticRouting => 'タスクに応じて自動選択'; + + @override + String get aiFixedModelRouting => '選択したモデルを使用'; + + @override + String get aiPreferredModel => '優先モデル'; + + @override + String get aiModel => 'モデル'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests 件のリクエスト · 入力トークン $input · 出力トークン $output'; + } + + @override + String aiCloudConsentTitle(String provider) { + return '$provider にコンテンツを送信しますか?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return '$provider を有効にする'; + } + + @override + String get aiCloudConsentMessage => + '各 AI レビューダイアログに表示された内容のみが送信されます。リクエストは状態を保持せず、提案には確認が必要です。API キーは Linux のシステム認証情報ストアに保存されます。'; + + @override + String aiCloudConsentRequired(String provider) { + return '先に設定 → AI で $provider とのデータ共有を確認してください。'; + } + + @override + String aiGenerationVerified(String model, int count) { + return '$model で生成機能を確認しました。互換性のあるモデルが $count 件利用できます。'; + } + + @override + String get aiColdStartObserved => 'ローカルモデルのコールドスタートを検出しました。'; + + @override + String get aiNoCompatibleModels => '互換性のあるテキスト生成モデルがありません。'; + + @override + String get aiEnableProvider => '先に AI プロバイダーを有効にしてください。'; + + @override + String get aiDraftCommitMessage => 'コミットメッセージを下書き'; + + @override + String get aiDrafting => '下書き中…'; + + @override + String get aiDraftWithAi => 'AI で下書き'; + + @override + String get generateOrUpdateMarkdownToc => '目次を生成/更新'; + + @override + String get markdownTocTitle => '目次'; + + @override + String markdownTocUpdated(int count) { + return '$count 件の項目で目次を更新しました。'; + } + + @override + String get markdownTocNoHeadings => '目次を生成する前に、セクション見出しを 1 つ以上追加してください。'; + + @override + String get markdownTocMalformedMarkers => + 'BusyMark の目次マーカーがないか、重複しているか、順序が正しくありません。'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return '見出しレベル $level はレベル $previousLevel の後に続いています。セクションの入れ子を確認してください。'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + 'リンクテキストが空です。用途を説明するアクセシブルな名前を指定してください。'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return 'リンクテキスト「$text」が文脈内で用途を説明しているか確認してください。'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + '表のヘッダーセルは列を識別できる必要があります。空のヘッダーをすべて入力してください。'; + + @override + String get mathRenderFailed => '数式をレンダリングできませんでした。'; + + @override + String get inlineMath => 'インライン数式'; + + @override + String get displayMath => 'ディスプレイ数式'; +} diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart new file mode 100644 index 00000000..3eaf05ea --- /dev/null +++ b/lib/l10n/generated/app_localizations_ko.dart @@ -0,0 +1,3413 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Korean (`ko`). +class AppLocalizationsKo extends AppLocalizations { + AppLocalizationsKo([String locale = 'ko']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => 'Markdown 파일 및 Writerside 호환 문서 프로젝트용 편집기입니다.'; + + @override + String get aboutBusyMark => 'BusyMark 소개'; + + @override + String get aboutTagline => '마크다운 및 Writerside 편집기'; + + @override + String get aboutLicenseLabel => '라이선스'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => '웹사이트'; + + @override + String get aboutSourceCode => '소스 코드'; + + @override + String get reportIssue => '문제 신고'; + + @override + String get feedbackCategory => '범주'; + + @override + String get feedbackChooseCategory => '카테고리를 선택하세요'; + + @override + String get feedbackCategoryProblem => '문제 또는 버그'; + + @override + String get feedbackCategoryFeature => '기능 요청'; + + @override + String get feedbackCategoryPrivacySecurity => '개인 정보 보호 또는 보안 문제'; + + @override + String get feedbackCategoryUsability => '사용성 문제'; + + @override + String get feedbackCategoryOther => '기타'; + + @override + String get feedbackSubject => '제목'; + + @override + String get feedbackMessage => '자세한 메시지'; + + @override + String get feedbackReplyEmail => '이메일 답장(선택사항)'; + + @override + String get feedbackIncludeTechnicalDetails => '기술 세부정보 포함'; + + @override + String get feedbackTechnicalDetailsDisclosure => + '사용 설정하면 Linux 운영 체제 버전과 BusyMark 애플리케이션 언어만 추가됩니다. 로그, 파일, 계정 데이터 또는 기타 진단 정보는 첨부되지 않습니다.'; + + @override + String get feedbackSubmit => '제출'; + + @override + String get feedbackSubmitting => '제출 중…'; + + @override + String get feedbackCategoryRequired => '카테고리를 선택하세요.'; + + @override + String get feedbackSubjectLength => '제목은 3~120자 사이여야 합니다.'; + + @override + String get feedbackMessageLength => '메시지는 10~5,000자 사이여야 합니다.'; + + @override + String get feedbackReplyEmailInvalid => '유효한 이메일 주소를 입력하거나 이 필드를 비워 두세요.'; + + @override + String get feedbackConnectionFailure => + 'BusyMark를 연결할 수 없습니다. 인터넷 연결을 확인하고 다시 시도하세요.'; + + @override + String get feedbackTimeoutFailure => '요청 시간이 초과되었습니다. 다시 시도해 보세요.'; + + @override + String get feedbackRateLimitedFailure => + '이 연결에서 너무 많은 보고서가 전송되었습니다. 기다렸다가 다시 시도해 보세요.'; + + @override + String get feedbackRejectedFailure => + '서버가 이 보고서를 거부했습니다. 양식 필드를 확인하고 다시 시도하세요.'; + + @override + String get feedbackServerFailure => '서버가 보고서를 승인할 수 없습니다. 나중에 다시 시도하세요.'; + + @override + String feedbackSuccess(String id) { + return '피드백이 전송되었습니다. 참조 ID: $id'; + } + + @override + String get advanced => '고급'; + + @override + String get addToGit => 'Git에 추가'; + + @override + String get appearance => '화면 모양'; + + @override + String get apply => '적용'; + + @override + String get back => '뒤로'; + + @override + String get bottomLeft => '왼쪽 하단'; + + @override + String get bottomRight => '오른쪽 하단'; + + @override + String get cancel => '취소'; + + @override + String get choose => '선택'; + + @override + String get chooseLocation => '위치 선택'; + + @override + String get copy => '복사'; + + @override + String get copyName => '이름 복사'; + + @override + String get copyFileName => '파일 이름 복사'; + + @override + String get copyPath => '경로 복사'; + + @override + String get create => '만들기'; + + @override + String get creating => '만드는 중...'; + + @override + String get cut => '잘라내기'; + + @override + String get promoteSection => '섹션 수준 올리기'; + + @override + String get demoteSection => '섹션 수준 내리기'; + + @override + String get moveSectionUp => '섹션을 위로 이동'; + + @override + String get moveSectionDown => '섹션을 아래로 이동'; + + @override + String get confirmDeleteSectionTitle => '섹션을 삭제하시겠습니까?'; + + @override + String confirmDeleteSectionMessage(String name) { + return '“$name” 및 해당 섹션의 모든 콘텐츠를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.'; + } + + @override + String get darkTheme => '어둡게'; + + @override + String get delete => '삭제'; + + @override + String get discard => '버리기'; + + @override + String get editor => '편집기'; + + @override + String get file => '파일'; + + @override + String get fileHistory => '파일 기록'; + + @override + String get folder => '폴더'; + + @override + String get insert => '삽입'; + + @override + String get keyboardShortcuts => '키보드 단축키'; + + @override + String get commandPalette => '명령 팔레트'; + + @override + String get commandPaletteHint => '명령을 입력하세요'; + + @override + String get commandPaletteEmpty => '일치하는 명령이 없습니다.'; + + @override + String get commandUnavailableInContext => '현재 편집기 컨텍스트에서는 사용할 수 없습니다.'; + + @override + String get lightTheme => '밝게'; + + @override + String get mainMenu => '메인 메뉴'; + + @override + String get fullScreen => '전체 화면'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => '열기'; + + @override + String get openInFiles => '파일에서 열기'; + + @override + String get pathActions => '경로 작업'; + + @override + String get outline => '개요'; + + @override + String get overwrite => '덮어쓰기'; + + @override + String get paste => '붙여넣기'; + + @override + String get pasteWithoutFormatting => '서식 없이 붙여넣기'; + + @override + String get reading => '읽기'; + + @override + String get removeFromRecent => '최근 항목에서 삭제'; + + @override + String get recent => '최근 항목'; + + @override + String get redo => '다시 실행'; + + @override + String get save => '저장'; + + @override + String get search => '검색'; + + @override + String get selectAll => '모두 선택'; + + @override + String get settings => '설정'; + + @override + String get source => '소스'; + + @override + String get split => '분할'; + + @override + String get systemTheme => '시스템'; + + @override + String get theme => '테마'; + + @override + String get appLanguage => '언어'; + + @override + String get systemLanguage => '시스템 언어'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => '사이드바 패널'; + + @override + String get topLeft => '왼쪽 상단'; + + @override + String get topRight => '오른쪽 상단'; + + @override + String get undo => '실행 취소'; + + @override + String get validate => '검증'; + + @override + String get validation => '검증'; + + @override + String get viewMode => '보기 모드'; + + @override + String get welcome => '환영합니다'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => '이미지'; + + @override + String get openMarkdownFile => 'Markdown 파일 열기'; + + @override + String get markdownFileExtensions => '.md 또는 .markdown'; + + @override + String get openFolderOrWritersideProject => '폴더 또는 Writerside 프로젝트 열기'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown 폴더 또는 Writerside 호환 프로젝트'; + + @override + String get noOpenFile => '열린 파일 없음'; + + @override + String get shortcutDeleteTreeItemDescription => + '선택한 파일 항목을 삭제하거나 목차에서 선택한 항목을 제거합니다.'; + + @override + String get shortcutGroupGeneral => '일반'; + + @override + String get shortcutNewDocument => '만들기'; + + @override + String get shortcutNewDocumentDescription => + 'Markdown 파일 또는 Writerside 프로젝트 만들기'; + + @override + String get shortcutOpenDescription => 'Markdown 파일, 폴더 또는 Writerside 프로젝트 열기'; + + @override + String get shortcutSaveDescription => '현재 문서 저장'; + + @override + String get shortcutSearchDescription => '현재 작업공간 검색'; + + @override + String get shortcutKeyboardShortcutsDescription => '이 키보드 단축키 참조 표시'; + + @override + String get shortcutMarkdownAndHtmlDescription => 'Markdown 및 HTML 참조 열기'; + + @override + String get shortcutSettingsDescription => 'BusyMark 설정 열기'; + + @override + String get shortcutNextTab => '다음 탭'; + + @override + String get shortcutNextTabDescription => '열려 있는 다음 탭으로 이동'; + + @override + String get shortcutPreviousTab => '이전 탭'; + + @override + String get shortcutPreviousTabDescription => '이전에 열린 탭으로 이동'; + + @override + String get shortcutCloseTab => '탭 닫기'; + + @override + String get shortcutCloseTabDescription => '활성 탭 닫기'; + + @override + String get shortcutCloseAllTabs => '모든 탭 닫기'; + + @override + String get shortcutCloseAllTabsDescription => '열려 있는 탭을 모두 닫습니다.'; + + @override + String get shortcutGroupTextEditing => '텍스트 편집'; + + @override + String get shortcutSelectAllDescription => + '소스 모드에서는 모든 텍스트를 선택합니다. 편집기 모드에서는 두 번 눌러 모든 블록을 선택합니다.'; + + @override + String get shortcutCutDescription => '선택한 텍스트 잘라내기'; + + @override + String get shortcutCopyDescription => '선택한 텍스트 복사'; + + @override + String get shortcutPasteDescription => '클립보드에서 붙여넣기'; + + @override + String get shortcutPastePlainTextDescription => '서식 없이 클립보드 텍스트 붙여넣기'; + + @override + String get shortcutUndoDescription => '마지막 편집 취소'; + + @override + String get shortcutRedoDescription => '마지막으로 실행 취소된 편집 다시 실행'; + + @override + String get shortcutInsertIndentation => '들여쓰기 삽입'; + + @override + String get shortcutInsertIndentationDescription => '커서에 들여쓰기 삽입'; + + @override + String get shortcutOutdentSource => '소스를 내어쓰기'; + + @override + String get shortcutOutdentSourceDescription => '소스 모드에서 들여쓰기 수준 하나 제거'; + + @override + String get shortcutEscape => '검색 닫기 또는 블록 선택 지우기'; + + @override + String get shortcutEscapeDescription => '작업공간 검색을 닫거나 편집기 모드에서 블록 선택을 취소하세요.'; + + @override + String get shortcutGroupFormatting => '서식'; + + @override + String get shortcutBoldDescription => '선택한 텍스트를 굵게 전환합니다.'; + + @override + String get shortcutItalicDescription => '선택한 텍스트에서 기울임체를 전환합니다.'; + + @override + String get shortcutUnderlineDescription => '선택한 텍스트에 밑줄을 토글합니다.'; + + @override + String get shortcutLinkDescription => '링크 삽입 또는 편집'; + + @override + String get shortcutInlineCodeDescription => '선택한 텍스트에서 인라인 코드 전환'; + + @override + String get shortcutStrikethroughDescription => '선택한 텍스트에 취소선을 토글합니다.'; + + @override + String get shortcutGroupBlocks => '블록'; + + @override + String get shortcutParagraphDescription => '현재 블록을 단락으로 설정'; + + @override + String get shortcutHeading1Description => '현재 블록을 제목 1로 설정'; + + @override + String get shortcutHeading2Description => '현재 블록을 제목 2로 설정'; + + @override + String get shortcutHeading3Description => '현재 블록을 제목 3으로 설정'; + + @override + String get shortcutHeading4Description => '현재 블록을 제목 4로 설정'; + + @override + String get shortcutHeading5Description => '현재 블록을 제목 5로 설정'; + + @override + String get shortcutHeading6Description => '현재 블록을 제목 6으로 설정'; + + @override + String get shortcutGroupLists => '목록'; + + @override + String get numberedList => '번호 매기기 목록'; + + @override + String get shortcutNumberedListDescription => '번호 매기기 목록 형식 전환'; + + @override + String get bulletedList => '글머리 기호 목록'; + + @override + String get shortcutBulletedListDescription => '글머리 기호 목록 형식 전환'; + + @override + String get checklist => '체크리스트'; + + @override + String get shortcutChecklistDescription => '체크리스트 형식 전환'; + + @override + String get shortcutGroupSidebar => '사이드바'; + + @override + String get sidebarViewMenu => '사이드바 보기'; + + @override + String get createMarkdownFile => '마크다운 파일 생성'; + + @override + String get createMarkdownFileDescription => '저장되지 않은 로컬 Markdown 문서 시작'; + + @override + String get createWritersideProject => 'Writerside 프로젝트 만들기'; + + @override + String get createWritersideProjectDescription => '로컬 Writerside 호환 프로젝트 시작'; + + @override + String get defaultProjectName => '문서'; + + @override + String get defaultInstanceName => '사용자 가이드'; + + @override + String get defaultStartTopicTitle => '시작하기'; + + @override + String get projectName => '프로젝트 이름'; + + @override + String get directoryName => '디렉토리 이름'; + + @override + String get instanceName => '인스턴스 이름'; + + @override + String get instanceId => '인스턴스 ID'; + + @override + String get startTopicTitle => '시작 토픽 제목'; + + @override + String get location => '위치'; + + @override + String get projectNameRequired => '프로젝트 이름이 필요합니다.'; + + @override + String get directoryNameRequired => '디렉터리 이름이 필요합니다.'; + + @override + String get useSingleSafeDirectoryName => '단일 안전한 디렉터리 이름을 사용하세요.'; + + @override + String get useLowercaseIdentifier => '문자, 숫자, 밑줄 또는 하이픈이 포함된 소문자 식별자를 사용하세요.'; + + @override + String get startTopicTitleRequired => '시작 토픽 제목이 필요합니다.'; + + @override + String get createWritersideProjectFailed => 'Writerside 프로젝트를 생성할 수 없습니다.'; + + @override + String get settingsTitle => 'BusyMark 설정'; + + @override + String get autoSave => '자동 저장'; + + @override + String get autoSaveDescription => '짧은 유휴 지연 후에 파일 변경 사항을 자동으로 저장합니다.'; + + @override + String get wordWrap => '자동 줄 바꿈'; + + @override + String get editorFontSize => '편집기 글꼴 크기'; + + @override + String get validateOnEdit => '편집할 때 검증'; + + @override + String get clearRecentWorkspaces => '최근 작업공간 지우기'; + + @override + String get editingButtonsPosition => '편집 버튼 위치'; + + @override + String get editingButtonsPositionDescription => + '부동 WYSIWYG 편집 버튼이 나타나는 위치를 선택합니다.'; + + @override + String get editingButtonsDirection => '편집 버튼 방향'; + + @override + String get editingButtonsDirectionDescription => + '부동 WYSIWYG 편집 버튼을 수평 또는 수직으로 정렬할지 선택합니다.'; + + @override + String get horizontal => '가로'; + + @override + String get vertical => '세로'; + + @override + String get privacy => '개인정보 보호'; + + @override + String get allowRemoteImages => '원격 이미지 로드'; + + @override + String get allowRemoteImagesDescription => + 'Markdown 미리보기 및 편집기 이미지가 http 및 https URL에서 로드되도록 허용합니다.'; + + @override + String get clearRemoteImagePermissions => '원격 이미지 권한 초기화'; + + @override + String get clearRemoteImagePermissionsDescription => + '원격 이미지를 로드하도록 허용된 작업공간은 잊어버리세요.'; + + @override + String get clearGitWorkspaceTrust => '신뢰할 수 있는 Git 작업공간 초기화'; + + @override + String get clearGitWorkspaceTrustDescription => + '이전에 신뢰한 작업공간에서 Git 기능을 활성화하기 전에 확인하도록 설정합니다.'; + + @override + String get settingsWindowSectionTitle => '창'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => '시작 시 이전 작업공간 다시 열기'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'BusyMark가 시작될 때 이전 세션의 작업공간과 탭을 엽니다.'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + '저장되지 않은 변경 사항이 있을 때 닫기 전에 확인'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + '문서에 저장되지 않은 변경 사항이 있는 경우 BusyMark를 닫기 전에 물어보세요.'; + + @override + String get closeUnsavedChangesTitle => '저장되지 않은 변경 사항'; + + @override + String get closeUnsavedChangesSingleMessage => + '이 문서에는 저장되지 않은 변경사항이 있습니다. BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '변경된 문서가 $count개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?', + one: '변경된 문서가 1개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?', + zero: 'BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => '취소'; + + @override + String get closeUnsavedChangesDiscard => '버리기'; + + @override + String get closeUnsavedChangesSave => '저장'; + + @override + String get currentFile => '현재 파일'; + + @override + String get unsavedChanges => '저장되지 않은 변경 사항'; + + @override + String unsavedChangesMessage(String fileName) { + return '$fileName에 저장되지 않은 변경사항이 있습니다. 계속하기 전에 저장하시겠습니까?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '변경된 문서가 $count개 있습니다. 계속하기 전에 저장하시겠습니까?', + one: '변경된 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => '디스크에서 파일이 변경됨'; + + @override + String get fileChangedOnDiskMessage => + '이 파일은 사용자가 연 이후 디스크에서 변경되었습니다. 덮어쓰시겠습니까?'; + + @override + String get untitledMarkdownFileName => '제목 없음.md'; + + @override + String get unorderedList => '글머리 기호 목록'; + + @override + String get orderedList => '번호 매기기 목록'; + + @override + String get taskList => '작업 목록'; + + @override + String get toggleTaskChecked => '작업 완료 상태 전환'; + + @override + String get indentListItem => '들여쓰기 목록 항목'; + + @override + String get outdentListItem => '내어쓰기 목록 항목'; + + @override + String get blockquote => '인용문'; + + @override + String get codeBlock => '코드 블록'; + + @override + String get codeBlockLanguage => '코드 블록 언어'; + + @override + String get image => '이미지'; + + @override + String get video => '동영상'; + + @override + String get openVideo => '동영상 재생'; + + @override + String get pauseVideo => '동영상 일시 중지'; + + @override + String get videoUnavailable => '동영상을 사용할 수 없음'; + + @override + String get videoPreview => '동영상 미리 보기'; + + @override + String get diagnosticWritersideVideoMissingSource => '비디오에 src 속성이 없습니다.'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return '지원되지 않는 비디오 소스: $source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return '동영상 파일이 존재하지 않습니다: $source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return '동영상 미리보기 이미지가 존재하지 않습니다: $preview'; + } + + @override + String get inlineImage => '인라인 이미지'; + + @override + String get table => '표'; + + @override + String get htmlBlock => 'HTML 블록'; + + @override + String get htmlContentDefault => 'HTML 콘텐츠'; + + @override + String get shortcutHtmlBlockDescription => 'HTML 블록 삽입 또는 편집'; + + @override + String get renderedHtml => '렌더링된 HTML'; + + @override + String get editHtml => 'HTML 편집'; + + @override + String get htmlSource => 'HTML 소스'; + + @override + String get thematicBreak => '수평선'; + + @override + String get bold => '굵게'; + + @override + String get italic => '기울임꼴'; + + @override + String get underline => '밑줄'; + + @override + String get strikethrough => '취소선'; + + @override + String get inlineCode => '인라인 코드'; + + @override + String get link => '링크'; + + @override + String get hardLineBreak => '강제 줄 바꿈'; + + @override + String get textStyle => '텍스트 스타일'; + + @override + String get paragraph => '단락'; + + @override + String get heading1 => '제목 1'; + + @override + String get heading2 => '제목 2'; + + @override + String get heading3 => '제목 3'; + + @override + String get heading4 => '제목 4'; + + @override + String get heading5 => '제목 5'; + + @override + String get heading6 => '제목 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => '테이블 삭제'; + + @override + String tableColumnNumber(int columnNumber) { + return '열 $columnNumber'; + } + + @override + String get insertColumnLeft => '왼쪽에 열 삽입'; + + @override + String get insertColumnRight => '오른쪽에 열 삽입'; + + @override + String get deleteColumn => '열 삭제'; + + @override + String get tableAlignmentUnspecified => '정렬: 지정되지 않음'; + + @override + String get tableAlignmentLeft => '정렬: 왼쪽'; + + @override + String get tableAlignmentCenter => '정렬: 중앙'; + + @override + String get tableAlignmentRight => '정렬: 오른쪽'; + + @override + String tableRowNumber(int rowNumber) { + return '행 $rowNumber'; + } + + @override + String get insertRowAbove => '위에 행 삽입'; + + @override + String get insertRowBelow => '아래에 행 삽입'; + + @override + String get deleteRow => '행 삭제'; + + @override + String get tableHeaderHint => '헤더'; + + @override + String get tableCellHint => '셀'; + + @override + String get language => '언어'; + + @override + String get hideEditingButtons => '편집 버튼 숨기기'; + + @override + String get showEditingButtons => '편집 버튼 표시'; + + @override + String get altText => '대체 텍스트'; + + @override + String get editorPlaceholderText => '텍스트'; + + @override + String get editorPlaceholderCode => '코드'; + + @override + String get editorPlaceholderAltText => '대체 텍스트'; + + @override + String get describeTheImage => '이미지 설명'; + + @override + String get columns => '열'; + + @override + String get rows => '행'; + + @override + String tableHeaderNumber(int columnNumber) { + return '헤더 $columnNumber'; + } + + @override + String get tableCellDefault => '셀'; + + @override + String get noImageSource => '이미지 소스 없음'; + + @override + String get remoteImageBlocked => '원격 이미지가 차단됨'; + + @override + String get remoteImageBlockedTooltip => + 'BusyMark가 원격 이미지를 로드할 수 있는지 여부를 선택합니다.'; + + @override + String get remoteImagesBlockedTitle => '원격 이미지가 차단되었습니다.'; + + @override + String get remoteImagesBlockedMessage => + '이 문서는 인터넷의 이미지를 참조합니다. 이를 로드하면 이미지 호스트에 네트워크 정보가 공개될 수 있습니다.'; + + @override + String get loadRemoteImagesForWorkspace => '이 작업공간에서 로드'; + + @override + String get alwaysLoadRemoteImages => '항상 원격 이미지 로드'; + + @override + String get hideSidebar => '사이드바 패널 숨기기'; + + @override + String get showSidebar => '사이드바 패널 표시'; + + @override + String get showPreview => '미리보기 표시'; + + @override + String get hidePreview => '미리보기 숨기기'; + + @override + String get workspaceKindUnsavedMarkdown => '저장되지 않은 마크다운 파일'; + + @override + String get workspaceKindSingleMarkdown => '단일 마크다운 파일'; + + @override + String get workspaceKindMarkdownFolder => '마크다운 폴더'; + + @override + String get workspaceKindWritersideModule => 'Writerside 모듈'; + + @override + String get problems => '문제'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '진단 $count개', + one: '진단 1개', + zero: '진단 없음', + ); + return '$_temp0'; + } + + @override + String get files => '파일'; + + @override + String get toc => '목차'; + + @override + String get tocActions => '목차 작업'; + + @override + String get markdownUnsaved => '마크다운 - 저장되지 않음'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '파일 $count개', + one: '파일 1개', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => '파일 없음'; + + @override + String get newFile => '새 파일'; + + @override + String get noWritersideToc => 'Writerside 목차 없음'; + + @override + String get tocSection => '목차 섹션'; + + @override + String get newTopic => '새 토픽'; + + @override + String get newChildTopic => '새 하위 토픽'; + + @override + String get newSiblingTopic => '새 형제 토픽'; + + @override + String get renameTopicFile => '토픽 파일 이름 바꾸기'; + + @override + String get topicPlacement => '목차 배치'; + + @override + String get tocRoot => '목차 루트'; + + @override + String get afterSelectedTopic => '선택한 토픽 뒤'; + + @override + String get insideSelectedTopic => '선택한 토픽 내부'; + + @override + String get pasteAfterTopic => '토픽 뒤에 붙여넣기'; + + @override + String get pasteAsChildTopic => '하위 토픽으로 붙여넣기'; + + @override + String get removeFromToc => '목차에서 제거'; + + @override + String get confirmRemoveFromTocTitle => '목차에서 삭제하시겠습니까?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return '이 목차에서 $name을(를) 제거하시겠습니까? 토픽 파일은 유지됩니다.'; + } + + @override + String get confirmDeleteTopicTitle => '토픽 파일을 삭제하시겠습니까?'; + + @override + String confirmDeleteTopicMessage(String name) { + return '$name을(를) 삭제하고 모든 목차에서 제거하시겠습니까? 이 작업은 취소할 수 없습니다.'; + } + + @override + String get safeDeleteTopicFile => '토픽 파일 안전 삭제…'; + + @override + String get removeTocElement => 'TOC 요소 제거'; + + @override + String get reviewUsages => '사용 검토'; + + @override + String get deleteTopicFile => '토픽 파일 삭제'; + + @override + String get removeAction => '제거'; + + @override + String topicRemovalSummary(String topic) { + return '선택한 인스턴스에서 “$topic”을(를) 제거합니다. 토픽 파일은 유지됩니다.'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return '“$topic”을 삭제하고 이 Writerside 프로젝트 전체에서 해당 참조를 안전하게 업데이트하세요.'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '하위 토픽 $count개가 한 단계 위로 이동합니다.', + one: '하위 토픽 1개가 한 단계 위로 이동합니다.', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + '이 토픽은 인스턴스 시작 페이지로 사용됩니다. 계속하기 전에 사용처를 검토하고 다른 시작 페이지를 지정하세요.'; + + @override + String topicUsagesCount(int count) { + return '사용처 ($count)'; + } + + @override + String get noBreakingTopicUsages => '깨질 수 있는 참조가 발견되지 않았습니다.'; + + @override + String get topicUsagesFound => 'BusyMark에서 이 토픽에 대한 다음 참조를 찾았습니다.'; + + @override + String get topicUsageTocElements => '목차 요소'; + + @override + String get topicUsageStartPages => '시작 페이지'; + + @override + String get topicUsageTopicLinks => '토픽 링크'; + + @override + String get topicUsageIncludes => '포함'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '사용처 $count개', + one: '사용처 1개', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => '리팩토링 옵션'; + + @override + String get updateUsagesAutomatically => '자동으로 사용량 업데이트'; + + @override + String get updateUsagesAutomaticallyDescription => + '목차 참조 및 포함을 제거하고 링크 텍스트를 유지합니다.'; + + @override + String get manualUsageUpdatesRequired => '일부 사용처는 이 리팩터링 전에 수동으로 변경해야 합니다.'; + + @override + String get setRedirectTo => '다음으로 리디렉션 설정'; + + @override + String get noRedirectDescription => '이전에 게시된 페이지를 리디렉션하지 마세요.'; + + @override + String get redirectTarget => '대상 리디렉션'; + + @override + String get remainingUsagesBlockRemoval => + '계속하기 전에 남은 사용처를 검토하고 업데이트하거나, 가능한 경우 자동 업데이트를 활성화하세요.'; + + @override + String usagesOfTopic(String topic) { + return '$topic의 사용처'; + } + + @override + String get noUsagesFound => '사용처를 찾을 수 없습니다.'; + + @override + String get outsideSelectedInstance => '선택한 인스턴스 외부'; + + @override + String get doRefactor => '리팩토링 수행'; + + @override + String get orphanTopicTitle => '토픽 파일이 더 이상 사용되지 않습니다.'; + + @override + String get keepTopicFile => '토픽 파일 유지'; + + @override + String orphanTopicMessage(String topic) { + return '\"$topic\"은(는) 이 Writerside 프로젝트의 어느 곳에서도 더 이상 사용되지 않습니다. 파일을 삭제하거나 다른 인스턴스에서 사용할 수 있도록 보관하세요.'; + } + + @override + String get defaultNewTopicTitle => '새 토픽'; + + @override + String get topicTitle => '토픽 제목'; + + @override + String get fileName => '파일 이름'; + + @override + String get topicTitleRequired => '토픽 제목이 필요합니다.'; + + @override + String get fileNameRequired => '파일 이름은 필수입니다.'; + + @override + String get rename => '이름 바꾸기'; + + @override + String get confirmDeleteFileTitle => '파일을 삭제하시겠습니까?'; + + @override + String get confirmDeleteFolderTitle => '폴더를 삭제하시겠습니까?'; + + @override + String confirmDeleteFileMessage(String name) { + return '$name을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return '$name 및 그 안의 모든 파일을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.'; + } + + @override + String get useSingleSafeFileName => '하나의 안전한 파일 이름을 사용하십시오.'; + + @override + String useExpectedExtension(String extension) { + return '선택한 형식에 대해 $extension 확장자를 사용하세요.'; + } + + @override + String get useIdentifierCharacters => '확장자 앞에 문자, 숫자, 밑줄 또는 하이픈을 사용하십시오.'; + + @override + String get topicIdAlreadyExists => '토픽 ID가 이미 존재합니다.'; + + @override + String get createWritersideTopicFailed => 'Writerside 토픽을 생성할 수 없습니다.'; + + @override + String get noOutline => '개요 없음'; + + @override + String expandKind(String kind) { + return '$kind 펼치기'; + } + + @override + String collapseKind(String kind) { + return '$kind 접기'; + } + + @override + String get foldKindSection => '부분'; + + @override + String get foldKindList => '목록'; + + @override + String get foldKindQuote => '인용하다'; + + @override + String get foldKindTag => '꼬리표'; + + @override + String get sourceSearchPreviousMatch => '이전 일치 항목'; + + @override + String get sourceSearchNextMatch => '다음 일치 항목'; + + @override + String get sourceSearchCaseSensitive => '대소문자 구분'; + + @override + String get sourceSearchWholeWord => '전체 단어'; + + @override + String get sourceSearchRegex => '정규식'; + + @override + String get sourceSearchReplacement => '다음으로 바꾸기'; + + @override + String get sourceSearchReplaceCurrent => '현재 항목 바꾸기'; + + @override + String get sourceSearchReplaceAndFindNext => '바꾸고 다음 찾기'; + + @override + String get sourceSearchReplaceAll => '모두 바꾸기'; + + @override + String get workspaceReplace => '작업공간에서 바꾸기'; + + @override + String get reviewReplacements => '바꾸기 결과 검토'; + + @override + String get applyReplacements => '바꾸기 적용'; + + @override + String get skippedFiles => '건너뛴 파일'; + + @override + String get workspaceReplaceDirtyBuffer => '저장되지 않은 편집기 콘텐츠'; + + @override + String get workspaceReplaceDiskContent => '저장된 디스크 내용'; + + @override + String selectFileMatches(int count) { + return '$count개 일치 항목 모두 선택'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return '$files개 파일에서 $matches개 일치 항목을 바꿨습니다. $skipped개는 건너뛰었습니다.'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 마지막 개행'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 마지막 개행 없음'; + } + + @override + String get normalizeLineEndings => '줄 끝 표준화'; + + @override + String get mixedLineEndingsSavePrompt => + '이 문서에는 혼합된 줄 끝이 포함되어 있습니다. 형식을 선택하세요.'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName에서 줄바꿈 형식이 섞여 있습니다. 바꾸기 전에 사용할 형식을 선택하세요.'; + } + + @override + String get workspaceReplaceIssueOversized => '크기가 큰 파일을 건너뛰었습니다.'; + + @override + String get workspaceReplaceIssueUnreadable => '읽을 수 없는 파일을 건너뛰었습니다.'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => '유효한 UTF-8이 아닌 파일을 건너뛰었습니다.'; + + @override + String get workspaceReplaceIssueTruncated => '바꾸기 미리 보기가 잘렸습니다.'; + + @override + String get workspaceReplaceIssueFileChanged => '미리보기 이후에 변경된 파일을 건너뛰었습니다.'; + + @override + String get workspaceReplaceIssueBufferChanged => + '미리보기 이후에 변경된 편집기 버퍼를 건너뛰었습니다.'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + '바꾸기 전에 LF 또는 CRLF 정규화를 선택하세요.'; + + @override + String get workspaceReplaceIssuePartialConflict => + '파일이 동시에 변경되어 롤백이 중지되었습니다. 일부 바꾸기 결과가 남아 있을 수 있습니다. 기존 내용은 아래 경로에 보존되었습니다.'; + + @override + String get workspaceReplaceIssueApplyFailed => + '검토한 바꾸기 결과를 커밋할 수 없습니다. 파일은 변경되지 않았습니다.'; + + @override + String externalChangesTitle(String fileName) { + return '외부 변경 사항 — $fileName'; + } + + @override + String get externalFileDeleted => '이 파일은 디스크에서 삭제되었습니다.'; + + @override + String get externalFileChanged => '저장되지 않은 수정사항이 있는 동안 이 파일이 디스크에서 변경되었습니다.'; + + @override + String recoveredDocumentReview(String fileName) { + return '$fileName의 저장되지 않은 콘텐츠를 복구했습니다. 검토한 후 저장, 다른 이름으로 저장 또는 삭제하세요.'; + } + + @override + String get compare => '비교'; + + @override + String get reloadFromDisk => '디스크에서 다시 불러오기'; + + @override + String get keepMine => '내 변경 사항 유지'; + + @override + String get saveAs => '다른 이름으로 저장'; + + @override + String get sourceSearchInvalidRegex => '잘못된 정규식'; + + @override + String get sourceLargeFileFeaturesPaused => '대용량 파일: 강조 표시 및 접기가 일시 중지됩니다.'; + + @override + String get nothingToRead => '읽을 내용 없음'; + + @override + String get admonition => '주의 사항'; + + @override + String get quote => '인용'; + + @override + String get note => '참고'; + + @override + String get tip => '팁'; + + @override + String get warning => '경고'; + + @override + String get tabs => '탭'; + + @override + String get tab => '탭'; + + @override + String get procedure => '절차'; + + @override + String get step => '단계'; + + @override + String get topic => '토픽'; + + @override + String get chapter => '장'; + + @override + String couldNotOpenTarget(String target) { + return '$target을(를) 열 수 없습니다.'; + } + + @override + String linkTargetNotFound(String targetPath) { + return '링크 대상을 찾을 수 없습니다: $targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => '이 파일 형식을 편집기에서 열 수 없습니다'; + + @override + String anchorNotFound(String anchor) { + return '앵커를 찾을 수 없음: $anchor'; + } + + @override + String get noProblemsFound => '문제가 발견되지 않음'; + + @override + String get noResults => '결과 없음'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - $lineNumber번째 줄'; + } + + @override + String get untitledResult => '제목 없는 결과'; + + @override + String get documentKindMarkdownFile => '마크다운 파일'; + + @override + String get documentKindWritersideMarkdownTopic => 'Writerside Markdown 토픽'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML 토픽'; + + @override + String get documentKindWritersideTree => 'Writerside 트리'; + + @override + String get documentKindConfigurationFile => '구성 파일'; + + @override + String get documentKindVariablesFile => '변수 파일'; + + @override + String get documentKindCategoriesFile => '카테고리 파일'; + + @override + String get documentKindResourceFile => '리소스 파일'; + + @override + String workspaceErrorOpenFailed(String error) { + return '열기 실패: $error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Writerside 프로젝트를 생성할 수 없습니다: $error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Writerside 토픽을 생성할 수 없습니다: $error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return '파일을 열 수 없습니다: $error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + '이 마크다운 파일을 저장할 위치를 선택하세요.'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + '저장이 차단되었습니다. 디스크에서 파일이 변경되었습니다.'; + + @override + String workspaceErrorSaveFailed(String error) { + return '저장 실패: $error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return '파일 작업 실패: $error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return '검증 실패: $error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '저장되지 않은 문서 $count개를 복구했습니다. 각 문서를 저장하거나 삭제하기 전에 검토하세요.', + one: '저장되지 않은 문서 1개를 복구했습니다. 저장하거나 삭제하기 전에 검토하세요.', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '손상된 복구 기록 $count개를 복원하지 못했습니다. 유효한 복구 기록은 계속 사용할 수 있습니다.', + one: '손상된 복구 기록 1개를 복원하지 못했습니다. 검사를 위해 원본 복구 파일을 보존했습니다.', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return '경로가 존재하지 않습니다: $path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return '대상 디렉터리가 이미 존재하며 비어 있지 않습니다: $path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return '대상 경로가 이미 존재하며 디렉터리가 아닙니다: $path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return '생성된 파일이 이미 존재합니다: $path'; + } + + @override + String get errorParentDirectoryRequired => '상위 디렉터리가 필요합니다.'; + + @override + String errorParentDirectoryMissing(String path) { + return '상위 디렉터리가 존재하지 않습니다: $path'; + } + + @override + String errorDirectoryMissing(String path) { + return '디렉터리가 존재하지 않습니다: $path'; + } + + @override + String errorPathAlreadyExists(String path) { + return '경로가 이미 존재합니다: $path'; + } + + @override + String get errorFileNameRequired => '파일 이름은 필수입니다.'; + + @override + String get errorFileNameUnsafe => '파일 이름은 단일 안전 경로 세그먼트여야 합니다.'; + + @override + String get errorFileOperationInvalidTarget => '폴더를 폴더 자체로 이동할 수 없습니다.'; + + @override + String get errorFileOperationOutsideRoot => '파일 작업은 작업공간 내부에서 수행해야 합니다.'; + + @override + String get errorFileOperationRoot => '작업공간 루트는 파일 트리에서 변경할 수 없습니다.'; + + @override + String get errorProjectNameRequired => '프로젝트 이름이 필요합니다.'; + + @override + String get errorDirectoryNameRequired => '디렉터리 이름이 필요합니다.'; + + @override + String get errorDirectoryNameUnsafe => '디렉터리 이름은 단일 안전 경로 세그먼트여야 합니다.'; + + @override + String get errorInstanceIdInvalid => + '인스턴스 ID는 소문자로 시작해야 하며 소문자, 숫자, 밑줄, 하이픈만 포함할 수 있습니다.'; + + @override + String get errorTopicFileInvalid => + '토픽 파일 이름은 경로 구분 기호가 없는 Markdown 파일 이름이어야 합니다.'; + + @override + String get errorTopicTitleRequired => '토픽 제목이 필요합니다.'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Writerside 모듈 루트가 존재하지 않습니다: $path'; + } + + @override + String get errorWritersideModuleNotOpen => + '토픽을 생성하려면 Writerside 모듈이 열려 있어야 합니다.'; + + @override + String get errorWritersideInstanceTreeMissing => + 'Writerside 모듈에는 인스턴스 트리가 없습니다.'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside 트리 파일이 존재하지 않습니다: $path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return '이 도움말 모듈에는 토픽 ID \"$topicId\"가 이미 있습니다.'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return '토픽 파일이 이미 존재합니다: $path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return '선택한 트리에 참조 토픽이 없습니다: $topic'; + } + + @override + String get errorWritersideTocNodeMissing => '선택한 목차 항목이 더 이상 존재하지 않습니다.'; + + @override + String get errorWritersideTocInvalidMove => + 'TOC 항목은 자체 항목이나 해당 하위 항목 중 하나로 이동할 수 없습니다.'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return '시작 토픽 $topic을(를) 삭제할 수 없습니다. 먼저 다른 시작 페이지를 선택하세요.'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Writerside 토픽 파일에는 안전 삭제를 사용하세요.'; + + @override + String get errorWritersideTopicUsageScanFailed => + '토픽 사용처 검색을 완료할 수 없습니다. 변경된 파일이 없습니다.'; + + @override + String get errorWritersideTopicUsagesRemain => + '일부 토픽 사용처는 여전히 검토가 필요합니다. 계속하기 전에 확인하세요.'; + + @override + String get errorWritersideRedirectInvalid => + '선택한 리디렉션 대상이 더 이상 유효하지 않습니다. 다시 선택하세요.'; + + @override + String errorWritersideRollbackFailed(String paths) { + return '토픽 삭제를 완전히 롤백할 수 없습니다. 계속하기 전에 다음 경로를 검토하세요. $paths'; + } + + @override + String get errorTopicsRootUnsafe => '토픽 루트는 안전한 상대 디렉터리여야 합니다.'; + + @override + String get errorTopicFileNameUnsafe => '토픽 파일 이름은 안전한 단일 경로 세그먼트여야 합니다.'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return '토픽 파일 확장자는 선택한 형식($extension)과 일치해야 합니다.'; + } + + @override + String get errorTopicFileNameInvalid => + '토픽 파일 이름에는 문자, 숫자, 밑줄, 하이픈만 포함해야 합니다.'; + + @override + String errorUnknown(String code) { + return '알 수 없는 오류: $code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return '파일 메타데이터를 읽을 수 없습니다: $error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + '큰 작업공간이 감지되었습니다. 앱의 응답성을 유지하기 위해 일부 파일을 건너뛰었습니다.'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return '작업공간 항목을 검사할 수 없습니다: $error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => '파일이 자동 파싱 한도를 초과했습니다.'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Markdown 파일을 읽을 수 없습니다: $error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + '잘못된 Writerside 제목 속성 블록입니다.'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return '제목 ID \"$id\"이(가) 중복되었습니다.'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + '추가 최상위 H1 제목은 장으로 처리됩니다.'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown 토픽에는 H1 또는 머리말 제목이 없습니다.'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => 'XML 토픽에 제목이 없습니다.'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return '\"$fileName\" 토픽에 제목이 없습니다.'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => '머리말이 닫히지 않았습니다.'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => '안전하지 않은 HTML 요소.'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return '링크 대상이 존재하지 않습니다: $targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return '앵커 \"$anchor\"이(가) 존재하지 않습니다.'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return '이미지 \"$destination\"에 대체 텍스트가 없습니다.'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return '이미지가 존재하지 않습니다: $destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return '잘못된 XML: $message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg 루트는 여야 합니다.'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + '스니펫 선언에 src가 없습니다.'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + '인스턴스 그룹 선언에 src가 없습니다.'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return '지원되지 않는 키맵 모드: $mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + '인스턴스 선언에 src가 없습니다.'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg는 인스턴스를 등록하지 않습니다.'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree 루트는 이어야 합니다.'; + + @override + String get diagnosticWritersideTreeMissingId => '인스턴스 프로필에 ID가 없습니다.'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return '트리 파일의 기본 이름이 인스턴스 ID \"$id\"와 일치하지 않습니다.'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + '라이브러리가 아닌 인스턴스에 시작 페이지가 없습니다.'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return '시작 페이지 \"$startPage\"이(가) 존재하지 않습니다.'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return '이 인스턴스 목차에 \"$topic\" 토픽이 두 번 이상 나타납니다.'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + '변수 선언에는 이름과 값이 있어야 합니다.'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return '\"$name\" 변수가 두 번 이상 선언되었습니다.'; + } + + @override + String get diagnosticWritersideCategoryMissingId => '카테고리에 ID가 없습니다.'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return '카테고리 \"$id\"이(가) 두 번 이상 선언되었습니다.'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return '카테고리 순서 \"$order\"이(가) 두 번 이상 선언되었습니다.'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + '.topic 루트는 이어야 합니다.'; + + @override + String get diagnosticWritersideTopicMissingRootId => 'XML 토픽에 루트 ID가 없습니다.'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML 토픽 루트 ID \"$id\"는 파일 이름 \"$expectedId\"와 일치해야 합니다.'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return '요소 ID \"$elementId\"이(가) 두 번 이상 나타납니다.'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => '에 href가 없습니다.'; + + @override + String get diagnosticWritersideConfigMissing => + 'Writerside 모드에는writerside.cfg가 필요합니다.'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return '구성된 빌드 구성 디렉터리가 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return '구성된 API 사양 디렉터리가 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return '구성된 스니펫 디렉터리가 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return '구성된 변수 파일이 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return '구성된 카테고리 파일이 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return '구성된 인스턴스 그룹 파일이 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return '등록된 인스턴스 트리 \"$source\"이(가) 존재하지 않습니다.'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return '토픽 파일을 읽을 수 없습니다: $error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return '기본 토픽 디렉터리가 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return '구성된 토픽 디렉터리가 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return '구성된 이미지 디렉터리가 누락되었습니다: $relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return '요소 ID \"$id\"이(가) 두 번 이상 나타납니다.'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return '목차에서 \"$topic\" 토픽이 누락되었습니다.'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return '외부 href \"$href\"이(가) 잘못되었습니다.'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return '변수 \"%$name%\"이(가) 선언되지 않았습니다.'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return '토픽 링크 \"$destination\"을 확인할 수 없습니다.'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return '\"$targetName\" 앵커 \"$anchor\"이(가) 존재하지 않습니다.'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => '가 누락되었습니다.'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return '포함 소스 \"$from\"이(가) 존재하지 않습니다.'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return '포함 요소 \"$elementId\"이(가) \"$from\"에 존재하지 않습니다.'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return '또한 카테고리 \"$ref\"가 선언되지 않았습니다.'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return '토픽 참조 \"$reference\"이(가) 모호합니다.'; + } + + @override + String diagnosticUnknown(String code) { + return '알 수 없는 진단: $code'; + } + + @override + String get close => '닫다'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git diff'; + + @override + String get gitShowDiff => 'diff 표시'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return '이전 $oldRange → 새 $newRange'; + } + + @override + String get gitDiffNoLines => '줄 없음'; + + @override + String get gitUnavailableTitle => 'Git을 사용할 수 없음'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': 'Git을 설치하거나 BusyMark가 사용할 수 있는 Git 실행 파일을 구성하세요. $reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => 'Git에 대한 이 작업공간을 신뢰하시나요?'; + + @override + String get gitTrustRequiredMessage => + 'Git 저장소는 후크, 필터 및 기타 구성을 통해 프로그램을 실행할 수 있습니다. BusyMark가 저장소 데이터를 읽거나 Git 작업을 활성화하기 전에 이 작업공간을 신뢰하세요.'; + + @override + String get gitTrustWorkspace => '작업공간 신뢰'; + + @override + String get gitNotRepositoryTitle => 'Git 저장소가 아님'; + + @override + String get gitNotRepositoryMessage => '이 작업공간은 Git 저장소 내부에 없습니다.'; + + @override + String get gitInitializeRepository => '저장소 초기화'; + + @override + String get gitDetachedHead => '분리된 HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return '$commit에 분리됨'; + } + + @override + String get gitNoUpstream => '업스트림 없음'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '푸시하지 않은 커밋 $count개', + one: '푸시하지 않은 커밋 1개', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '가져올 커밋 $count개', + one: '가져올 커밋 1개', + ); + return '$_temp0'; + } + + @override + String get gitClean => '깨끗함'; + + @override + String get gitConflicts => '충돌'; + + @override + String get gitChanges => '변경 사항'; + + @override + String get gitStaged => '스테이징됨'; + + @override + String get gitUnstaged => '스테이징되지 않음'; + + @override + String get gitHistory => '기록'; + + @override + String get gitBranches => '브랜치'; + + @override + String get gitActions => 'Git 작업'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => '파일 스테이징'; + + @override + String get gitRemoveFromCommit => '파일 스테이징 해제'; + + @override + String get gitDiscard => '롤백'; + + @override + String get gitOpenFile => '파일 열기'; + + @override + String get gitMarkResolved => '해결됨으로 표시'; + + @override + String get gitUntracked => '추적되지 않음'; + + @override + String get gitCommitMessage => '커밋 메시지'; + + @override + String get gitCommitSelectedFiles => '선택한 파일'; + + @override + String get gitCommitNoSelectedFiles => '커밋하기 전에 하나 이상의 파일을 준비하세요.'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '스테이징된 파일 $count개', + one: '스테이징된 파일 1개', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => '작업공간 외부'; + + @override + String get gitCommitMessageRequired => '커밋 메시지를 입력하세요.'; + + @override + String get gitCreateBranch => '브랜치 만들기'; + + @override + String get gitNewBranch => '새 브랜치'; + + @override + String get gitBranchName => '브랜치 이름'; + + @override + String get gitSwitchBranch => '전환'; + + @override + String get gitNoChanges => '변경 사항 없음'; + + @override + String get gitNoHistory => '기록 없음'; + + @override + String get gitNoBranches => '브랜치 없음'; + + @override + String get gitNoDiff => '표시할 diff 없음'; + + @override + String get gitBinaryFile => '바이너리 파일. BusyMark는 바이너리 패치를 렌더링하지 않습니다.'; + + @override + String gitBinaryFileInfo(int size) { + return '바이너리 파일($size바이트). BusyMark는 바이너리 패치를 렌더링하지 않습니다.'; + } + + @override + String get gitUnsavedChangesBanner => '저장되지 않은 편집기 변경 사항은 저장될 때까지 포함되지 않습니다.'; + + @override + String get gitConfirmDiscardTitle => 'Git 변경사항을 삭제하시겠습니까?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '선택한 추적 파일의 스테이징 및 비스테이징 변경 사항이 모두 HEAD로 복원됩니다.', + one: '선택한 추적 파일의 스테이징 및 비스테이징 변경 사항이 모두 HEAD로 복원됩니다.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '선택한 추적되지 않은 파일이 삭제됩니다.', + one: '선택한 추적되지 않은 파일이 삭제됩니다.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '선택한 파일이 Git 상태에 따라 복원되거나 삭제됩니다.', + one: '선택한 파일이 Git 상태에 따라 복원되거나 삭제됩니다.', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return '$branch로 전환하시겠습니까?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'Git에서 브랜치를 전환한 후 BusyMark가 디스크에서 작업공간을 다시 불러옵니다.'; + + @override + String get gitConfirmPushSetUpstreamTitle => '업스트림 분기를 설정하시겠습니까?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return '이 브랜치에는 업스트림이 없습니다. 원격 저장소가 정확히 하나 구성된 경우 BusyMark에서 $branch를 푸시하고 업스트림을 설정할 수 있습니다.'; + } + + @override + String get gitProjectHistory => '프로젝트 이력'; + + @override + String get gitFileHistory => '파일 기록'; + + @override + String get gitFileHistoryRequiresOpenFile => + '파일 기록을 사용하려면 열려 있는 Markdown 파일이 필요합니다.'; + + @override + String get gitLoadMore => '더 로드하기'; + + @override + String get gitChangesInCommit => '이 커밋의 변경 사항'; + + @override + String get gitCompareWithCurrent => '현재와 ​​비교'; + + @override + String get gitRestoreVersion => '이 버전을 복원하세요'; + + @override + String get gitConfirmRestoreTitle => '이 파일 버전을 복원하시겠습니까?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark는 현재 작업 트리 파일을 선택한 커밋된 버전으로 대체합니다. 복원된 파일은 스테이지되지 않은 상태로 유지됩니다.'; + + @override + String get gitCommitActions => '커밋 작업'; + + @override + String get gitResetCurrentBranchToHere => '현재 분기를 여기로 재설정합니다…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return '$branch을(를) $commit(으)로 재설정하시겠습니까?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return '그러면 $branch 분기가 $commit 커밋으로 이동됩니다. Git이 인덱스와 작업 트리를 업데이트하는 방법을 선택하세요.'; + } + + @override + String get gitReset => '재설정'; + + @override + String get gitResetModeSoft => '소프트'; + + @override + String get gitResetModeSoftDescription => + '브랜치만 이동합니다. 인덱스와 작업 트리는 변경하지 않습니다. 선택한 커밋과의 차이점은 스테이징된 상태로 유지됩니다.'; + + @override + String get gitResetModeMixed => '혼합'; + + @override + String get gitResetModeMixedDescription => + '브랜치를 이동하고 인덱스를 재설정합니다. 작업 트리는 변경하지 않으며 차이점은 스테이징되지 않은 상태로 남습니다.'; + + @override + String get gitResetModeHard => '하드'; + + @override + String get gitResetModeHardDescription => + '브랜치를 이동하고 인덱스와 작업 트리를 재설정합니다. 추적된 변경 사항은 삭제되며, 방해가 되는 추적되지 않은 파일은 삭제될 수 있습니다.'; + + @override + String get gitResetModeKeep => '유지'; + + @override + String get gitResetModeKeepDescription => + '로컬 변경 사항을 유지하면서 분기를 이동하고 추적된 파일을 재설정합니다. 해당 변경 사항이 재설정과 충돌하면 Git이 중단됩니다.'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => '파일 작업'; + + @override + String get actions => '작업'; + + @override + String get gitStatusAdded => '추가됨'; + + @override + String get gitStatusDeleted => '삭제됨'; + + @override + String get gitStatusRenamed => '이름 변경됨'; + + @override + String get gitStatusCopied => '복사됨'; + + @override + String get gitStatusUntracked => '추적되지 않음'; + + @override + String get gitStatusConflicted => '충돌함'; + + @override + String get gitStatusIgnored => '무시됨'; + + @override + String get gitStatusTypeChanged => '유형 변경됨'; + + @override + String get gitStatusModified => '수정됨'; + + @override + String get gitStatusUnknown => '알 수 없음'; + + @override + String get gitErrorUnavailable => 'Git을 사용할 수 없습니다.'; + + @override + String get gitErrorNotRepository => '이 작업공간은 Git 저장소가 아닙니다.'; + + @override + String get gitErrorUnsafePath => 'BusyMark가 안전하지 않은 Git 경로를 차단했습니다.'; + + @override + String get gitErrorInvalidBranchName => '유효한 브랜치 이름을 입력하세요.'; + + @override + String get gitErrorNoRemote => 'Git 원격이 구성되지 않았습니다.'; + + @override + String get gitErrorNoUpstream => '업스트림 분기가 구성되지 않았습니다.'; + + @override + String get gitErrorMultipleRemotes => + '여러 원격 저장소가 구성되어 있습니다. 이 BusyMark 버전 외부에서 업스트림을 선택하세요.'; + + @override + String get gitErrorDirtyWorkspace => + '분기를 전환하기 전에 BusyMark 편집기 변경 사항을 저장하거나 삭제하세요.'; + + @override + String get gitErrorResetDirtyWorkspace => + '현재 브랜치를 재설정하기 전에 BusyMark 편집기 변경 사항을 저장하거나 버리세요.'; + + @override + String get gitErrorRestoreStagedFile => '기록 버전을 복원하기 전에 이 파일을 스테이지 해제하세요.'; + + @override + String get gitErrorResetDetachedHead => '재설정하기 전에 브랜치를 체크아웃하세요.'; + + @override + String get gitErrorDiverged => + '브랜치가 분기되었습니다. 이 BusyMark 버전 외부에서 병합 또는 리베이스를 해결하세요.'; + + @override + String get gitErrorAuthorIdentity => 'Git을 커밋하려면 작성자 이름과 이메일 주소가 필요합니다.'; + + @override + String get gitAuthorIdentityTitle => 'Git 작성자 ID'; + + @override + String get gitAuthorIdentityMessage => + 'Git이 커밋 시 기록해야 하는 ID를 입력하세요. BusyMark는 이를 저장하고 이 커밋을 다시 시도합니다.'; + + @override + String get gitAuthorName => '이름'; + + @override + String get gitAuthorEmail => '이메일'; + + @override + String get gitAuthorIdentityGlobal => '모든 저장소에 사용'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'Snap으로 설치하면 BusyMark에서 열린 저장소에 적용됩니다.'; + + @override + String get gitSaveIdentityAndCommit => 'ID 저장 및 커밋'; + + @override + String get gitErrorAuthentication => 'Git 인증에 실패했습니다.'; + + @override + String get gitErrorNetwork => 'Git 네트워크 작업이 실패했습니다.'; + + @override + String get gitErrorConflict => 'Git이 해결되지 않은 충돌을 보고했습니다.'; + + @override + String get gitErrorCommandFailed => 'Git 명령이 실패했습니다.'; + + @override + String get markdownAndHtml => 'Markdown 및 HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown 블록'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Markdown 소스 및 미리보기에서 블록 구조가 지원됩니다.'; + + @override + String get markdownHtmlInlineFormatting => '인라인 Markdown'; + + @override + String get markdownHtmlInlineFormattingDescription => + '단락, 목록 항목 및 표 셀 내부에 나타날 수 있는 서식입니다.'; + + @override + String get markdownHtmlRawHtmlBlocks => '원시 HTML 블록'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'BusyMark 미리보기 위젯을 통해 렌더링되는 안전한 블록 수준 HTML 태그입니다.'; + + @override + String get markdownHtmlRawHtmlInline => '원시 HTML 인라인 태그'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + '리터럴 태그를 표시하지 않고 렌더링되는 안전한 인라인 HTML 태그입니다.'; + + @override + String get markdownHtmlSafety => '안전 규칙'; + + @override + String get markdownHtmlSafetyDescription => + '원시 HTML은 미리 보기 렌더링 전에 구문 분석되고 정리됩니다.'; + + @override + String get markdownHtmlHeadings => '제목'; + + @override + String get markdownHtmlParagraphs => '단락'; + + @override + String get markdownHtmlLists => '목록'; + + @override + String get markdownHtmlHtmlContainers => '컨테이너'; + + @override + String get markdownHtmlHtmlTextBlocks => '텍스트 블록'; + + @override + String get markdownHtmlHtmlFigures => '그림 및 이미지'; + + @override + String get markdownHtmlHtmlPreformatted => '미리 서식이 지정된 코드'; + + @override + String get markdownHtmlHtmlDisclosure => '접기 블록'; + + @override + String get markdownHtmlHtmlDescriptionLists => '설명 목록'; + + @override + String get markdownHtmlHtmlFormattingTags => '서식 태그'; + + @override + String get markdownHtmlHtmlInlineCodeTags => '인라인 코드 태그'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => '의미 있는 텍스트 태그'; + + @override + String get markdownHtmlSanitizedPreview => '정리된 미리 보기'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + '허용된 HTML은 브라우저에서 렌더링되지 않고 BusyMark 미리보기 블록으로 변환됩니다.'; + + @override + String get markdownHtmlSourcePreserved => '소스 보존'; + + @override + String get markdownHtmlSourcePreservedDescription => + '편집되지 않은 원시 HTML은 소스 텍스트와 동일하게 다시 저장됩니다.'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'HTML 내부의 Markdown'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + '원시 HTML 내부의 마크다운 마커는 리터럴 텍스트로 렌더링됩니다.'; + + @override + String get markdownHtmlBlockedContent => '차단된 활성 콘텐츠'; + + @override + String get markdownHtmlBlockedContentDescription => + '스크립트, 스타일, 프레임, 양식, SVG, MathML, 이벤트 및 안전하지 않은 속성이 차단됩니다.'; + + @override + String get markdownHtmlSafeUrls => '안전한 URL만 허용'; + + @override + String get markdownHtmlSafeUrlsDescription => + '링크에는 http, https, mailto, tel, 상대 URL 및 프래그먼트 URL만 허용됩니다. 안전하지 않은 스킴은 차단됩니다.'; + + @override + String get exportAsPdf => 'PDF로 내보내기'; + + @override + String get pdfExportDescription => '세련된 독립형 PDF를 위한 페이지 레이아웃을 선택하세요.'; + + @override + String get pdfRemoteImagesNote => + '내보내기 중에는 원격 이미지가 다운로드되지 않습니다. 가능한 경우 로컬 이미지가 포함됩니다.'; + + @override + String get pdfPageSize => '페이지 크기'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => '방향'; + + @override + String get pdfPortrait => '세로'; + + @override + String get pdfLandscape => '가로'; + + @override + String get pdfMargins => '여백'; + + @override + String get pdfMarginNarrow => '좁게'; + + @override + String get pdfMarginNormal => '보통'; + + @override + String get pdfMarginWide => '넓게'; + + @override + String get pdfIncludePageNumbers => '페이지 번호 포함'; + + @override + String get export => '내보내기'; + + @override + String get exportingPdf => 'PDF 내보내기 중…'; + + @override + String get fileTypePdf => 'PDF 문서'; + + @override + String pdfExported(String fileName) { + return '$fileName을(를) 내보냈습니다.'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '$count개의 경고와 함께 $fileName을 내보냈습니다.'; + } + + @override + String get pdfExportUnavailable => + 'PDF 내보내기 구성 요소가 누락되었습니다. BusyMark를 다시 설치하고 다시 시도하세요.'; + + @override + String get pdfExportTimedOut => 'PDF 내보내기가 너무 오래 걸려 중지되었습니다.'; + + @override + String get pdfExportFailed => 'BusyMark가 이 문서를 PDF로 내보낼 수 없습니다.'; + + @override + String get visualizationRendering => '렌더링 중…'; + + @override + String get visualizationStale => '마지막으로 유효한 렌더링 표시 중'; + + @override + String get visualizationShowSource => '소스 표시'; + + @override + String get visualizationShowRender => '렌더링 표시'; + + @override + String get visualizationFitWidth => '너비에 맞추기'; + + @override + String get visualizationSaveImage => '이미지 저장'; + + @override + String get visualizationCopyImage => '이미지 복사'; + + @override + String get visualizationImageCopied => '이미지가 복사됨'; + + @override + String get visualizationOpenApiReference => 'OpenAPI 참조 열기'; + + @override + String get visualizationValid => '유효함'; + + @override + String get visualizationInvalid => '유효하지 않음'; + + @override + String get visualizationServers => '서버'; + + @override + String get visualizationPaths => '경로'; + + @override + String get visualizationOperations => '작업'; + + @override + String get visualizationTags => '태그'; + + @override + String get visualizationNoOperations => '일치하는 작업 없음'; + + @override + String get visualizationSearchOperations => '작업 검색'; + + @override + String get visualizationRenderFailed => '이 시각화를 렌더링할 수 없습니다.'; + + @override + String get visualizationRetry => '다시 시도'; + + @override + String visualizationSaved(String fileName) { + return '$fileName을(를) 저장했습니다.'; + } + + @override + String get shortcutExportPdfDescription => + '활성 문서 또는 Writerside 모듈을 PDF로 내보냅니다.'; + + @override + String get instances => '인스턴스'; + + @override + String get newInstance => '새 인스턴스'; + + @override + String get newTocLibrary => '새 목차 라이브러리'; + + @override + String get editInstance => '인스턴스 편집'; + + @override + String get openTocFile => '목차 파일 열기'; + + @override + String get createInstance => '인스턴스 만들기'; + + @override + String get createTocLibrary => '목차 라이브러리 만들기'; + + @override + String get instanceContent => '콘텐츠'; + + @override + String get instanceContentSource => '생성 원본'; + + @override + String get emptyInstance => '빈 인스턴스'; + + @override + String get markdownFiles => '로컬 Markdown 파일'; + + @override + String get chooseMarkdownFolder => 'Markdown 폴더 선택'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Markdown 파일이 포함된 폴더를 선택합니다.'; + + @override + String get instanceAppearance => '화면 모양'; + + @override + String get instanceColor => '아이콘 색상'; + + @override + String get instanceVersion => '버전'; + + @override + String instanceVersionInherited(String version) { + return '이 필드가 비어 있으면 프로젝트 버전은 $version입니다.'; + } + + @override + String get instanceWebPath => '웹 경로'; + + @override + String get instanceStatus => '상태'; + + @override + String get instanceStatusRelease => '릴리스'; + + @override + String get instanceStatusEap => '얼리 액세스'; + + @override + String get instanceStatusDeprecated => '더 이상 사용되지 않음'; + + @override + String get allowSearchEngineIndexing => '검색 엔진 색인 생성 허용'; + + @override + String get allowSearchEngineIndexingDescription => + '외부 검색 엔진이 이 출력을 색인화하도록 허용합니다.'; + + @override + String get offlineArtifact => '오프라인 아티팩트'; + + @override + String get offlineArtifactDescription => '빌드된 문서가 자체적으로 포함되도록 리소스를 번들로 묶습니다.'; + + @override + String get instanceOutputSettings => '출력 설정'; + + @override + String get markdownImportSource => 'Markdown 소스'; + + @override + String get markdownImportFiles => 'Markdown 파일'; + + @override + String get selectNone => '선택 안 함'; + + @override + String markdownFilesFound(int count) { + return '$count개의 마크다운 파일을 찾았습니다.'; + } + + @override + String get noMarkdownFilesFound => '이 디렉터리에서 Markdown 파일을 찾을 수 없습니다.'; + + @override + String get copyReferencedMedia => '참조된 미디어 복사'; + + @override + String get copyReferencedMediaDescription => + '상대 경로를 유지하면서 선택한 파일이 참조하는 로컬 이미지와 비디오를 복사합니다.'; + + @override + String get instanceIdRenameWarningTitle => '인스턴스 ID의 이름을 바꾸시겠습니까?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark는 .tree 파일의 이름을 바꾸고 Writerside 프로젝트 참조를 \"$oldId\"에서 \"$newId\"로 업데이트합니다. 게시 스크립트는 변경되지 않으며 별도로 업데이트해야 합니다.'; + } + + @override + String get renameAndUpdateReferences => '이름 변경 및 참조 업데이트'; + + @override + String get tocLibraryDescription => + 'TOC 라이브러리는 재사용 가능한 섹션을 저장하고 자체 출력을 생성하지 않습니다.'; + + @override + String get defaultTocLibraryName => '공유 목차'; + + @override + String get instanceColorAutomatic => '자동'; + + @override + String get instanceColorBlue => '파란색'; + + @override + String get instanceColorGreen => '녹색'; + + @override + String get instanceColorOrange => '주황색'; + + @override + String get instanceColorPurple => '보라색'; + + @override + String get instanceColorRed => '빨간색'; + + @override + String get instanceColorTeal => '청록색'; + + @override + String get instanceColorYellow => '노란색'; + + @override + String get errorWritersideInstanceNameRequired => '인스턴스 이름을 입력하세요.'; + + @override + String errorWritersideInstanceIdExists(String id) { + return 'ID가 \"$id\"인 인스턴스가 이미 존재합니다.'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return '인스턴스 트리가 이미 존재합니다: $path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Markdown 소스 디렉터리가 존재하지 않습니다: $path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + '가져올 Markdown 파일을 하나 이상 선택하세요.'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return '선택한 소스: $path 내에서 읽을 수 있는 Markdown 파일이 아닙니다.'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return '가져오기를 하면 기존 프로젝트 파일을 덮어쓰게 됩니다: $path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + '인스턴스 파일이 디스크에서 변경되었습니다. 검토한 후 다시 시도하세요.'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark가 인스턴스 변경 사항을 완전히 롤백할 수 없습니다. 계속하기 전에 다음 파일을 검토하세요. $paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + 'TOC 라이브러리는 Markdown 항목을 가져올 수 없습니다.'; + + @override + String get errorWritersideInstanceWebPathInvalid => '웹 경로는 한 줄이어야 합니다.'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Writerside 인스턴스 구성이 잘못되었습니다. 진단을 수정하고 다시 시도하십시오.'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark가 인스턴스 변경 사항을 안전하게 스테이징할 수 없습니다.'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return '알 수 없는 인스턴스 상태 “$status”. 릴리스, eap 또는 더 이상 사용되지 않음을 사용하십시오.'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return '인스턴스 ID \"$id\"는 둘 이상의 트리 파일에서 사용됩니다.'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml에는 루트 요소가 있어야 합니다.'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return '$name 값 \"$value\"은(는) true 또는 false여야 합니다.'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + ' 요소는 인스턴스 ID를 지정해야 합니다.'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + '트리 는 from과 element-id를 모두 지정해야 합니다.'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + '트리 은 ID를 지정해야 합니다.'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + '인스턴스 간 TOC 참조는 ref와 in을 모두 지정해야 합니다.'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + '목차 요소는 둘 이상의 토픽, 참조, 링크 또는 리디렉션을 대상으로 할 수 없습니다.'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return '트리 요소 ID “$id”이(가) 두 번 이상 선언되었습니다.'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + '인스턴스 그룹 파일에는 루트 요소가 있어야 합니다.'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + '인스턴스 그룹은 비어 있지 않은 ID와 인스턴스 목록을 지정해야 합니다.'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return '인스턴스 그룹 ID “$id”이(가) 두 번 이상 선언되었습니다.'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return '목차 포함 “$source#$id”는 외부 모듈 “$origin”에 속하며 이 작업공간에서 확장할 수 없습니다.'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return '등록된 트리 \"$source\"에 트리 요소 \"$id\"이(가) 존재하지 않습니다.'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return '트리 포함 “$source#$id”는 주기를 생성합니다.'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return '인스턴스 조건이 알 수 없는 그룹 \"@$group\"을 참조합니다.'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return '인스턴스 간 참조는 알 수 없는 인스턴스 “$instance”를 대상으로 합니다.'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return '\"$topic\" 토픽이 참조된 인스턴스 \"$instance\"에 없습니다.'; + } + + @override + String get download => '다운로드'; + + @override + String get exportWritersideAsPdf => 'Writerside를 PDF로 내보내기'; + + @override + String get writersidePdfContent => '콘텐츠 내보내기'; + + @override + String get writersidePdfPage => '페이지'; + + @override + String get exportingWritersidePdf => 'Writerside PDF를 내보내는 중…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => '로컬 Ollama'; + + @override + String get aiDisabled => '사용 안 함'; + + @override + String get aiLocalOnlyDescription => + 'AI 편집은 명시적입니다. BusyMark는 선택한 공급자에 대해 표시된 컨텍스트만 보내고 검토 없이 제안을 적용하지 않습니다.'; + + @override + String get aiProvider => 'AI 제공업체'; + + @override + String get aiDefaultProvider => '기본 공급자'; + + @override + String get aiConfigureProvider => '공급자 구성'; + + @override + String get aiChooseProvider => 'AI 제공업체 선택'; + + @override + String get aiOllamaEndpoint => 'Ollama 엔드포인트'; + + @override + String get aiOllamaModel => 'Ollama 모델'; + + @override + String get aiTestConnection => '테스트 연결'; + + @override + String get aiTestingConnection => '테스트 중…'; + + @override + String aiConnectionReady(int count) { + return '연결되었습니다. 설치된 모델 $count개를 찾았습니다.'; + } + + @override + String get aiNoModels => '선택한 모델이 없습니다.'; + + @override + String get aiConnectionFailed => 'BusyMark가 AI 텍스트 생성을 확인할 수 없습니다.'; + + @override + String get aiConfigureFirst => 'AI 제공자를 활성화하고 설정 → AI에서 모델을 확인하세요.'; + + @override + String get aiEditWithAi => 'AI로 편집'; + + @override + String get aiRefineWithAi => 'AI로 개선'; + + @override + String get aiInstruction => '지침'; + + @override + String get aiChangeTarget => '무엇이 바뀔 수 있나요?'; + + @override + String get aiSharedContext => 'AI와 컨텍스트 공유'; + + @override + String get aiTargetSelection => '선택한 콘텐츠'; + + @override + String get aiTargetInsertAfterBlock => '현재 블록 뒤에 삽입'; + + @override + String get aiTargetCurrentBlock => '현재 블록'; + + @override + String get aiTargetCurrentSection => '현재 섹션'; + + @override + String get aiTargetCompleteDocument => '완전한 문서'; + + @override + String get aiContextNone => '문서 컨텍스트 없음'; + + @override + String get aiContextSelection => '선택한 콘텐츠'; + + @override + String get aiContextCurrentBlock => '현재 블록'; + + @override + String get aiContextCurrentSection => '현재 섹션'; + + @override + String get aiContextCompleteDocument => '완전한 문서'; + + @override + String get aiGenerating => '제안 생성 중…'; + + @override + String get aiProposal => 'AI 제안'; + + @override + String get aiGenerateProposal => '제안 생성'; + + @override + String aiContextDisclosure(int count) { + return '선택한 공급자는 표시된 컨텍스트에서 $count자를 수신합니다.'; + } + + @override + String get aiOriginal => '원본'; + + @override + String get aiSuggested => '제안'; + + @override + String get aiApplyProposal => '제안 적용'; + + @override + String aiTokenUsage(int input, int output) { + return '$input 입력 토큰 · $output 출력 토큰'; + } + + @override + String get aiStaleProposal => '이 제안이 생성되는 동안 문서가 변경되었습니다. 작업을 다시 실행하십시오.'; + + @override + String get gitAiStagedChangesChanged => + '이 커밋 메시지가 생성되는 동안 단계적 변경 사항이 변경되었습니다. 작업을 다시 실행하십시오.'; + + @override + String get aiViewContext => '전송된 컨텍스트 보기'; + + @override + String get aiReviewExactContent => '정확한 내용을 검토하세요'; + + @override + String get aiContentToChange => '변경할 내용'; + + @override + String get aiContentSentToAi => 'AI로 전송된 콘텐츠'; + + @override + String get aiApiKey => 'API 키'; + + @override + String get aiApiKeyStoredHint => '키는 시스템 자격 증명 저장소에 저장됩니다.'; + + @override + String get aiApiKeyEnterHint => '공급자 API 키를 입력하세요.'; + + @override + String get aiReplaceApiKey => 'API 키 교체'; + + @override + String get aiSaveApiKey => 'API 키를 안전하게 저장'; + + @override + String get aiRemoveApiKey => '저장된 API 키 제거'; + + @override + String get aiCredentialSaved => '시스템 자격 증명 저장소에 저장된 API 키입니다.'; + + @override + String get aiCredentialRemoved => '저장된 API 키가 삭제되었습니다.'; + + @override + String get aiModelRouting => '모델 라우팅'; + + @override + String get aiAutomaticRouting => '작업별 자동'; + + @override + String get aiFixedModelRouting => '선택한 모델 사용'; + + @override + String get aiPreferredModel => '선호하는 모델'; + + @override + String get aiModel => '모델'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests 요청 · $input 입력 토큰 · $output 출력 토큰'; + } + + @override + String aiCloudConsentTitle(String provider) { + return '$provider에 콘텐츠를 보내시겠습니까?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return '$provider 활성화'; + } + + @override + String get aiCloudConsentMessage => + '각 AI 검토 대화 상자에 표시된 콘텐츠만 전송됩니다. 요청은 상태 비저장이고 제안에는 검토가 필요하며 API 키는 Linux 시스템 자격 증명 저장소에 저장됩니다.'; + + @override + String aiCloudConsentRequired(String provider) { + return '먼저 설정 → AI에서 $provider 데이터 공유를 확인하세요.'; + } + + @override + String aiGenerationVerified(String model, int count) { + return '$model로 생성을 확인했습니다. 호환 가능한 모델 $count개를 사용할 수 있습니다.'; + } + + @override + String get aiColdStartObserved => '로컬 모델 콜드 스타트가 관찰되었습니다.'; + + @override + String get aiNoCompatibleModels => '호환 가능한 텍스트 생성 모델이 없습니다.'; + + @override + String get aiEnableProvider => '먼저 AI 제공자를 활성화하세요.'; + + @override + String get aiDraftCommitMessage => '초안 커밋 메시지'; + + @override + String get aiDrafting => '작성 중…'; + + @override + String get aiDraftWithAi => 'AI를 활용한 초안'; + + @override + String get generateOrUpdateMarkdownToc => '목차 생성/업데이트'; + + @override + String get markdownTocTitle => '목차'; + + @override + String markdownTocUpdated(int count) { + return '$count개의 항목으로 목차가 업데이트되었습니다.'; + } + + @override + String get markdownTocNoHeadings => '목차를 생성하기 전에 하나 이상의 섹션 제목을 추가하세요.'; + + @override + String get markdownTocMalformedMarkers => + 'BusyMark 목차 표시가 없거나 중복되었거나 순서가 잘못되었습니다.'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return '제목 수준 $level은(는) $previousLevel 수준을 따릅니다. 섹션 중첩을 검토하세요.'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + '링크 텍스트가 비어 있습니다. 목적을 설명하는 접근 가능한 이름을 제공합니다.'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return '링크 텍스트 \"$text\"가 문맥상 목적을 설명하는지 검토하세요.'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + '테이블 머리글 셀은 해당 열을 식별해야 합니다. 각각의 빈 헤더를 완성하세요.'; + + @override + String get mathRenderFailed => '수학적 표현을 렌더링할 수 없습니다.'; + + @override + String get inlineMath => '인라인 수학'; + + @override + String get displayMath => '수학 표시'; +} diff --git a/lib/l10n/generated/app_localizations_nb.dart b/lib/l10n/generated/app_localizations_nb.dart index 85d30020..9d3f3fa8 100644 --- a/lib/l10n/generated/app_localizations_nb.dart +++ b/lib/l10n/generated/app_localizations_nb.dart @@ -314,6 +314,12 @@ class AppLocalizationsNb extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -347,9 +353,24 @@ class AppLocalizationsNb extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Sidepanel'; diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart new file mode 100644 index 00000000..6d2577f4 --- /dev/null +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -0,0 +1,3520 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Dutch Flemish (`nl`). +class AppLocalizationsNl extends AppLocalizations { + AppLocalizationsNl([String locale = 'nl']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => + 'Editor voor Markdown-bestanden en Writerside-compatibele documentatieprojecten.'; + + @override + String get aboutBusyMark => 'Over BusyMark'; + + @override + String get aboutTagline => 'Markdown en Writerside-editor'; + + @override + String get aboutLicenseLabel => 'Licentie'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => 'Website'; + + @override + String get aboutSourceCode => 'Broncode'; + + @override + String get reportIssue => 'Rapporteer een probleem'; + + @override + String get feedbackCategory => 'Categorie'; + + @override + String get feedbackChooseCategory => 'Kies een categorie'; + + @override + String get feedbackCategoryProblem => 'Probleem of bug'; + + @override + String get feedbackCategoryFeature => 'Functieverzoek'; + + @override + String get feedbackCategoryPrivacySecurity => + 'Privacy- of beveiligingsproblemen'; + + @override + String get feedbackCategoryUsability => 'Bezorgdheid over bruikbaarheid'; + + @override + String get feedbackCategoryOther => 'Overig'; + + @override + String get feedbackSubject => 'Onderwerp'; + + @override + String get feedbackMessage => 'Gedetailleerd bericht'; + + @override + String get feedbackReplyEmail => 'E-mail beantwoorden (optioneel)'; + + @override + String get feedbackIncludeTechnicalDetails => 'Voeg technische details toe'; + + @override + String get feedbackTechnicalDetailsDisclosure => + 'Indien ingeschakeld, voegt dit alleen uw Linux-besturingssysteemversie en de landinstelling van de BusyMark-toepassing toe. Er zijn geen logbestanden, bestanden, accountgegevens of andere diagnostische gegevens bijgevoegd.'; + + @override + String get feedbackSubmit => 'Indienen'; + + @override + String get feedbackSubmitting => 'Verzenden…'; + + @override + String get feedbackCategoryRequired => 'Kies een categorie.'; + + @override + String get feedbackSubjectLength => + 'Het onderwerp moet tussen 3 en 120 tekens lang zijn.'; + + @override + String get feedbackMessageLength => + 'Het bericht moet tussen de 10 en 5.000 tekens lang zijn.'; + + @override + String get feedbackReplyEmailInvalid => + 'Voer een geldig e-mailadres in of laat dit veld leeg.'; + + @override + String get feedbackConnectionFailure => + 'BusyMark kan geen verbinding maken. Controleer uw internetverbinding en probeer het opnieuw.'; + + @override + String get feedbackTimeoutFailure => + 'Er is een time-out opgetreden voor het verzoek. Probeer het opnieuw.'; + + @override + String get feedbackRateLimitedFailure => + 'Er zijn te veel rapporten verzonden via deze verbinding. Wacht en probeer het opnieuw.'; + + @override + String get feedbackRejectedFailure => + 'De server heeft dit rapport afgewezen. Controleer de formuliervelden en probeer het opnieuw.'; + + @override + String get feedbackServerFailure => + 'De server kon het rapport niet accepteren. Probeer het later opnieuw.'; + + @override + String feedbackSuccess(String id) { + return 'Feedback verzonden. Referentie-ID: $id'; + } + + @override + String get advanced => 'Geavanceerd'; + + @override + String get addToGit => 'Toevoegen aan Git'; + + @override + String get appearance => 'Uiterlijk'; + + @override + String get apply => 'Toepassen'; + + @override + String get back => 'Terug'; + + @override + String get bottomLeft => 'Linksonder'; + + @override + String get bottomRight => 'Rechtsonder'; + + @override + String get cancel => 'Annuleren'; + + @override + String get choose => 'Kiezen'; + + @override + String get chooseLocation => 'Kies locatie'; + + @override + String get copy => 'Kopiëren'; + + @override + String get copyName => 'Kopieer naam'; + + @override + String get copyFileName => 'Bestandsnaam kopiëren'; + + @override + String get copyPath => 'Kopieer pad'; + + @override + String get create => 'Maken'; + + @override + String get creating => 'Maken...'; + + @override + String get cut => 'Knippen'; + + @override + String get promoteSection => 'Sectie promoten'; + + @override + String get demoteSection => 'Sectie degraderen'; + + @override + String get moveSectionUp => 'Verplaats sectie naar boven'; + + @override + String get moveSectionDown => 'Verplaats sectie naar beneden'; + + @override + String get confirmDeleteSectionTitle => 'Sectie verwijderen?'; + + @override + String confirmDeleteSectionMessage(String name) { + return '\'$name\' en alle inhoud in de bijbehorende sectie verwijderen? Dit kan niet ongedaan worden gemaakt.'; + } + + @override + String get darkTheme => 'Donker'; + + @override + String get delete => 'Verwijderen'; + + @override + String get discard => 'Weggooien'; + + @override + String get editor => 'Editor'; + + @override + String get file => 'Bestand'; + + @override + String get fileHistory => 'Bestandsgeschiedenis'; + + @override + String get folder => 'Map'; + + @override + String get insert => 'Invoegen'; + + @override + String get keyboardShortcuts => 'Sneltoetsen op het toetsenbord'; + + @override + String get commandPalette => 'Commandopalet'; + + @override + String get commandPaletteHint => 'Typ een opdracht'; + + @override + String get commandPaletteEmpty => 'Geen overeenkomende opdrachten'; + + @override + String get commandUnavailableInContext => + 'Niet beschikbaar in de huidige editorcontext'; + + @override + String get lightTheme => 'Licht'; + + @override + String get mainMenu => 'Hoofdmenu'; + + @override + String get fullScreen => 'Volledig scherm'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => 'Openen'; + + @override + String get openInFiles => 'Openen in Bestandsbeheer'; + + @override + String get pathActions => 'Padacties'; + + @override + String get outline => 'Overzicht'; + + @override + String get overwrite => 'Overschrijven'; + + @override + String get paste => 'Plakken'; + + @override + String get pasteWithoutFormatting => 'Plakken zonder opmaak'; + + @override + String get reading => 'Lezen'; + + @override + String get removeFromRecent => 'Verwijderen uit recent'; + + @override + String get recent => 'Recent'; + + @override + String get redo => 'Opnieuw uitvoeren'; + + @override + String get save => 'Opslaan'; + + @override + String get search => 'Zoeken'; + + @override + String get selectAll => 'Selecteer alles'; + + @override + String get settings => 'Instellingen'; + + @override + String get source => 'Bron'; + + @override + String get split => 'Splitsen'; + + @override + String get systemTheme => 'Systeem'; + + @override + String get theme => 'Thema'; + + @override + String get appLanguage => 'Taal'; + + @override + String get systemLanguage => 'Systeem'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => 'Zijbalk in-/uitschakelen'; + + @override + String get topLeft => 'Linksboven'; + + @override + String get topRight => 'Rechtsboven'; + + @override + String get undo => 'Ongedaan maken'; + + @override + String get validate => 'Valideren'; + + @override + String get validation => 'Validatie'; + + @override + String get viewMode => 'Weergavemodus'; + + @override + String get welcome => 'Welkom'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => 'Afbeeldingen'; + + @override + String get openMarkdownFile => 'Markdown-bestand openen'; + + @override + String get markdownFileExtensions => '.md of .markdown'; + + @override + String get openFolderOrWritersideProject => + 'Open een map of Writerside-project'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown-map of Writerside-compatibel project'; + + @override + String get noOpenFile => 'Geen bestand geopend'; + + @override + String get shortcutDeleteTreeItemDescription => + 'Verwijder het geselecteerde item uit Bestanden of verwijder het geselecteerde onderwerp uit de inhoudsopgave'; + + @override + String get shortcutGroupGeneral => 'Algemeen'; + + @override + String get shortcutNewDocument => 'Maken'; + + @override + String get shortcutNewDocumentDescription => + 'Maak een Markdown-bestand of Writerside-project'; + + @override + String get shortcutOpenDescription => + 'Open een Markdown-bestand, map of Writerside-project'; + + @override + String get shortcutSaveDescription => 'Sla het huidige document op'; + + @override + String get shortcutSearchDescription => 'Zoek in de huidige werkruimte'; + + @override + String get shortcutKeyboardShortcutsDescription => + 'Toon deze sneltoetsreferentie'; + + @override + String get shortcutMarkdownAndHtmlDescription => + 'Open de Markdown- en HTML-referentie'; + + @override + String get shortcutSettingsDescription => 'Open BusyMark-instellingen'; + + @override + String get shortcutNextTab => 'Volgende tabblad'; + + @override + String get shortcutNextTabDescription => + 'Ga naar het volgende geopende tabblad'; + + @override + String get shortcutPreviousTab => 'Vorig tabblad'; + + @override + String get shortcutPreviousTabDescription => + 'Ga naar het vorige geopende tabblad'; + + @override + String get shortcutCloseTab => 'Tabblad sluiten'; + + @override + String get shortcutCloseTabDescription => 'Sluit het actieve tabblad'; + + @override + String get shortcutCloseAllTabs => 'Sluit alle tabbladen'; + + @override + String get shortcutCloseAllTabsDescription => 'Sluit alle geopende tabbladen'; + + @override + String get shortcutGroupTextEditing => 'Tekstbewerking'; + + @override + String get shortcutSelectAllDescription => + 'Selecteer in de bronmodus alle tekst; druk in de Editor-modus tweemaal om elk blok te selecteren'; + + @override + String get shortcutCutDescription => 'Knip de geselecteerde tekst'; + + @override + String get shortcutCopyDescription => 'Kopieer de geselecteerde tekst'; + + @override + String get shortcutPasteDescription => 'Plakken vanaf het klembord'; + + @override + String get shortcutPastePlainTextDescription => + 'Klembordtekst plakken zonder opmaak'; + + @override + String get shortcutUndoDescription => 'Maak de laatste bewerking ongedaan'; + + @override + String get shortcutRedoDescription => + 'Voer de laatste ongedaan gemaakte bewerking opnieuw uit'; + + @override + String get shortcutInsertIndentation => 'Inspringing invoegen'; + + @override + String get shortcutInsertIndentationDescription => + 'Voeg een inspringing toe bij de cursor'; + + @override + String get shortcutOutdentSource => 'Inspringing in bron verminderen'; + + @override + String get shortcutOutdentSourceDescription => + 'Verwijder één inspringingsniveau in de bronmodus'; + + @override + String get shortcutEscape => 'Zoeken sluiten of blokselectie wissen'; + + @override + String get shortcutEscapeDescription => + 'Sluit het zoeken in de werkruimte of wis een blokselectie in de Editor-modus'; + + @override + String get shortcutGroupFormatting => 'Opmaak'; + + @override + String get shortcutBoldDescription => + 'Schakel vetgedrukt in op de geselecteerde tekst'; + + @override + String get shortcutItalicDescription => + 'Schakel cursief in op de geselecteerde tekst'; + + @override + String get shortcutUnderlineDescription => + 'Schakel het onderstrepen van de geselecteerde tekst in of uit'; + + @override + String get shortcutLinkDescription => 'Een link invoegen of bewerken'; + + @override + String get shortcutInlineCodeDescription => + 'Schakel inlinecode voor de geselecteerde tekst in of uit'; + + @override + String get shortcutStrikethroughDescription => + 'Schakel doorhalen van de geselecteerde tekst in of uit'; + + @override + String get shortcutGroupBlocks => 'Blokken'; + + @override + String get shortcutParagraphDescription => + 'Stel het huidige blok in op alinea'; + + @override + String get shortcutHeading1Description => 'Stel het huidige blok in op Kop 1'; + + @override + String get shortcutHeading2Description => 'Stel het huidige blok in op Kop 2'; + + @override + String get shortcutHeading3Description => 'Stel het huidige blok in op Kop 3'; + + @override + String get shortcutHeading4Description => 'Stel het huidige blok in op Kop 4'; + + @override + String get shortcutHeading5Description => 'Stel het huidige blok in op Kop 5'; + + @override + String get shortcutHeading6Description => 'Stel het huidige blok in op Kop 6'; + + @override + String get shortcutGroupLists => 'Lijsten'; + + @override + String get numberedList => 'Genummerde lijst'; + + @override + String get shortcutNumberedListDescription => + 'Schakel genummerde lijstopmaak in of uit'; + + @override + String get bulletedList => 'Lijst met opsommingstekens'; + + @override + String get shortcutBulletedListDescription => + 'Schakel de opmaak van de lijst met opsommingstekens in of uit'; + + @override + String get checklist => 'Controlelijst'; + + @override + String get shortcutChecklistDescription => + 'Schakel de opmaak van de checklist in of uit'; + + @override + String get shortcutGroupSidebar => 'Zijbalk'; + + @override + String get sidebarViewMenu => 'Zijbalkweergave'; + + @override + String get createMarkdownFile => 'Markdown-bestand maken'; + + @override + String get createMarkdownFileDescription => + 'Start een niet-opgeslagen lokaal Markdown-document'; + + @override + String get createWritersideProject => 'Maak een Writerside-project'; + + @override + String get createWritersideProjectDescription => + 'Start een lokaal Writerside-compatibel project'; + + @override + String get defaultProjectName => 'Documentatie'; + + @override + String get defaultInstanceName => 'Gebruikershandleiding'; + + @override + String get defaultStartTopicTitle => 'Aan de slag'; + + @override + String get projectName => 'Projectnaam'; + + @override + String get directoryName => 'Mapnaam'; + + @override + String get instanceName => 'Instantienaam'; + + @override + String get instanceId => 'Instantie-ID'; + + @override + String get startTopicTitle => 'Titel van startonderwerp'; + + @override + String get location => 'Locatie'; + + @override + String get projectNameRequired => 'Projectnaam is vereist.'; + + @override + String get directoryNameRequired => 'Mapnaam is vereist.'; + + @override + String get useSingleSafeDirectoryName => 'Gebruik één veilige mapnaam.'; + + @override + String get useLowercaseIdentifier => + 'Gebruik een identificatiecode in kleine letters met letters, cijfers, onderstrepingstekens of koppeltekens.'; + + @override + String get startTopicTitleRequired => 'Titel van startonderwerp is vereist.'; + + @override + String get createWritersideProjectFailed => + 'Kan Writerside-project niet maken.'; + + @override + String get settingsTitle => 'BusyMark-instellingen'; + + @override + String get autoSave => 'Automatisch opslaan'; + + @override + String get autoSaveDescription => + 'Bestandswijzigingen automatisch opslaan na een korte inactieve vertraging.'; + + @override + String get wordWrap => 'Regelterugloop'; + + @override + String get editorFontSize => 'Lettergrootte van de editor'; + + @override + String get validateOnEdit => 'Valideren bij bewerken'; + + @override + String get clearRecentWorkspaces => 'Wis recente werkruimten'; + + @override + String get editingButtonsPosition => 'Positie van knoppen bewerken'; + + @override + String get editingButtonsPositionDescription => + 'Kies waar de zwevende WYSIWYG-bewerkingsknoppen verschijnen.'; + + @override + String get editingButtonsDirection => 'Richting van knoppen bewerken'; + + @override + String get editingButtonsDirectionDescription => + 'Kies of de zwevende WYSIWYG-bewerkingsknoppen horizontaal of verticaal zijn gerangschikt.'; + + @override + String get horizontal => 'Horizontaal'; + + @override + String get vertical => 'Verticaal'; + + @override + String get privacy => 'Privacy'; + + @override + String get allowRemoteImages => 'Laad externe afbeeldingen'; + + @override + String get allowRemoteImagesDescription => + 'Sta toe dat Markdown-voorbeelden en editorafbeeldingen worden geladen vanaf http- en https-URL\'s.'; + + @override + String get clearRemoteImagePermissions => + 'Wis machtigingen voor externe afbeeldingen'; + + @override + String get clearRemoteImagePermissionsDescription => + 'Vergeet werkruimten die externe afbeeldingen mochten laden.'; + + @override + String get clearGitWorkspaceTrust => 'Wis vertrouwde Git-werkruimten'; + + @override + String get clearGitWorkspaceTrustDescription => + 'Vraag dit voordat u Git-functies inschakelt voor eerder vertrouwde werkruimten.'; + + @override + String get settingsWindowSectionTitle => 'Raam'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => + 'Open de vorige werkruimte opnieuw bij het opstarten'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'Open de werkruimte en tabbladen van de vorige sessie wanneer BusyMark start.'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + 'Bevestig voordat u sluit met niet-opgeslagen wijzigingen'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + 'Vraag dit voordat u BusyMark sluit als documenten niet-opgeslagen wijzigingen bevatten.'; + + @override + String get closeUnsavedChangesTitle => 'Niet-opgeslagen wijzigingen'; + + @override + String get closeUnsavedChangesSingleMessage => + 'Dit document bevat niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat u BusyMark sluit?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documenten bevatten niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat BusyMark wordt gesloten?', + one: + '1 document bevat niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat BusyMark wordt gesloten?', + zero: 'Wijzigingen opslaan voordat BusyMark wordt gesloten?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => 'Annuleren'; + + @override + String get closeUnsavedChangesDiscard => 'Weggooien'; + + @override + String get closeUnsavedChangesSave => 'Opslaan'; + + @override + String get currentFile => 'huidig bestand'; + + @override + String get unsavedChanges => 'Niet-opgeslagen wijzigingen'; + + @override + String unsavedChangesMessage(String fileName) { + return 'Er zijn niet-opgeslagen wijzigingen in $fileName. Sla ze op voordat je verdergaat?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documenten bevatten niet-opgeslagen wijzigingen. Sla ze op voordat u doorgaat?', + one: + '1 document bevat niet-opgeslagen wijzigingen. Sla het op voordat u doorgaat?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => 'Bestand gewijzigd op schijf'; + + @override + String get fileChangedOnDiskMessage => + 'Dit bestand is op schijf gewijzigd sinds u het hebt geopend. Overschrijven?'; + + @override + String get untitledMarkdownFileName => 'Untitled.md'; + + @override + String get unorderedList => 'Ongenummerde lijst'; + + @override + String get orderedList => 'Genummerde lijst'; + + @override + String get taskList => 'Takenlijst'; + + @override + String get toggleTaskChecked => 'Taak als voltooid markeren'; + + @override + String get indentListItem => 'Lijstitem inspringen'; + + @override + String get outdentListItem => 'Lijstitem uitspringen'; + + @override + String get blockquote => 'Blokcitaat'; + + @override + String get codeBlock => 'Codeblok'; + + @override + String get codeBlockLanguage => 'Codebloktaal'; + + @override + String get image => 'Afbeelding'; + + @override + String get video => 'Video'; + + @override + String get openVideo => 'Video afspelen'; + + @override + String get pauseVideo => 'Video pauzeren'; + + @override + String get videoUnavailable => 'Video niet beschikbaar'; + + @override + String get videoPreview => 'Videovoorbeeld'; + + @override + String get diagnosticWritersideVideoMissingSource => + 'Video mist het kenmerk src.'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return 'Niet-ondersteunde videobron: $source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return 'Videobestand bestaat niet: $source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return 'Videovoorbeeldafbeelding bestaat niet: $preview'; + } + + @override + String get inlineImage => 'Inline-afbeelding'; + + @override + String get table => 'Tabel'; + + @override + String get htmlBlock => 'HTML-blok'; + + @override + String get htmlContentDefault => 'HTML-inhoud'; + + @override + String get shortcutHtmlBlockDescription => + 'Voeg een HTML-blok in of bewerk het'; + + @override + String get renderedHtml => 'Weergegeven HTML'; + + @override + String get editHtml => 'HTML bewerken'; + + @override + String get htmlSource => 'HTML-bron'; + + @override + String get thematicBreak => 'Horizontale scheidingslijn'; + + @override + String get bold => 'Vetgedrukt'; + + @override + String get italic => 'Cursief'; + + @override + String get underline => 'Onderstrepen'; + + @override + String get strikethrough => 'Doorhalen'; + + @override + String get inlineCode => 'Inline-code'; + + @override + String get link => 'Link'; + + @override + String get hardLineBreak => 'Hard regeleinde'; + + @override + String get textStyle => 'Tekststijl'; + + @override + String get paragraph => 'Alinea'; + + @override + String get heading1 => 'Kop 1'; + + @override + String get heading2 => 'Kop 2'; + + @override + String get heading3 => 'Kop 3'; + + @override + String get heading4 => 'Kop 4'; + + @override + String get heading5 => 'Kop 5'; + + @override + String get heading6 => 'Kop 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => 'Tabel verwijderen'; + + @override + String tableColumnNumber(int columnNumber) { + return 'Kolom $columnNumber'; + } + + @override + String get insertColumnLeft => 'Kolom links invoegen'; + + @override + String get insertColumnRight => 'Kolom rechts invoegen'; + + @override + String get deleteColumn => 'Kolom verwijderen'; + + @override + String get tableAlignmentUnspecified => 'Uitlijning: niet gespecificeerd'; + + @override + String get tableAlignmentLeft => 'Uitlijning: links'; + + @override + String get tableAlignmentCenter => 'Uitlijning: midden'; + + @override + String get tableAlignmentRight => 'Uitlijning: rechts'; + + @override + String tableRowNumber(int rowNumber) { + return 'Rij $rowNumber'; + } + + @override + String get insertRowAbove => 'Rij erboven invoegen'; + + @override + String get insertRowBelow => 'Voeg rij hieronder in'; + + @override + String get deleteRow => 'Rij verwijderen'; + + @override + String get tableHeaderHint => 'Kolomkop'; + + @override + String get tableCellHint => 'Cel'; + + @override + String get language => 'Taal'; + + @override + String get hideEditingButtons => 'Bewerkingsknoppen verbergen'; + + @override + String get showEditingButtons => 'Toon bewerkingsknoppen'; + + @override + String get altText => 'Alt-tekst'; + + @override + String get editorPlaceholderText => 'tekst'; + + @override + String get editorPlaceholderCode => 'code'; + + @override + String get editorPlaceholderAltText => 'alternatieve tekst'; + + @override + String get describeTheImage => 'Beschrijf de afbeelding'; + + @override + String get columns => 'Kolommen'; + + @override + String get rows => 'Rijen'; + + @override + String tableHeaderNumber(int columnNumber) { + return 'Kolomkop $columnNumber'; + } + + @override + String get tableCellDefault => 'Cel'; + + @override + String get noImageSource => 'Geen afbeeldingsbron'; + + @override + String get remoteImageBlocked => 'Externe afbeelding geblokkeerd'; + + @override + String get remoteImageBlockedTooltip => + 'Kies of BusyMark externe afbeeldingen kan laden.'; + + @override + String get remoteImagesBlockedTitle => + 'Externe afbeeldingen worden geblokkeerd'; + + @override + String get remoteImagesBlockedMessage => + 'Dit document verwijst naar afbeeldingen van internet. Als u ze laadt, kan netwerkinformatie aan de afbeeldingshost worden onthuld.'; + + @override + String get loadRemoteImagesForWorkspace => 'Voor deze werkruimte laden'; + + @override + String get alwaysLoadRemoteImages => 'Externe afbeeldingen altijd laden'; + + @override + String get hideSidebar => 'Zijbalkpaneel verbergen'; + + @override + String get showSidebar => 'Zijbalkpaneel tonen'; + + @override + String get showPreview => 'Voorbeeld weergeven'; + + @override + String get hidePreview => 'Voorbeeld verbergen'; + + @override + String get workspaceKindUnsavedMarkdown => 'Niet-opgeslagen Markdown-bestand'; + + @override + String get workspaceKindSingleMarkdown => 'Eén Markdown-bestand'; + + @override + String get workspaceKindMarkdownFolder => 'Markdown-map'; + + @override + String get workspaceKindWritersideModule => 'Writerside-module'; + + @override + String get problems => 'Problemen'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count diagnoses', + one: '1 diagnose', + zero: 'Geen diagnoses', + ); + return '$_temp0'; + } + + @override + String get files => 'Bestanden'; + + @override + String get toc => 'TOC'; + + @override + String get tocActions => 'TOC-acties'; + + @override + String get markdownUnsaved => 'Niet-opgeslagen Markdown'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count bestanden', + one: '1 bestand', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => 'Geen bestanden'; + + @override + String get newFile => 'Nieuw bestand'; + + @override + String get noWritersideToc => 'Geen Writerside-inhoudsopgave'; + + @override + String get tocSection => 'TOC-sectie'; + + @override + String get newTopic => 'Nieuw onderwerp'; + + @override + String get newChildTopic => 'Nieuw onderliggend onderwerp'; + + @override + String get newSiblingTopic => 'Nieuw naastliggend onderwerp'; + + @override + String get renameTopicFile => 'Onderwerpbestand hernoemen'; + + @override + String get topicPlacement => 'TOC-plaatsing'; + + @override + String get tocRoot => 'Bij TOC-root'; + + @override + String get afterSelectedTopic => 'Na geselecteerd onderwerp'; + + @override + String get insideSelectedTopic => 'Binnen geselecteerd onderwerp'; + + @override + String get pasteAfterTopic => 'Na onderwerp plakken'; + + @override + String get pasteAsChildTopic => 'Als onderliggend onderwerp plakken'; + + @override + String get removeFromToc => 'Verwijderen uit inhoudsopgave'; + + @override + String get confirmRemoveFromTocTitle => 'Verwijderen uit inhoudsopgave?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return '$name verwijderen uit deze inhoudsopgave? Het onderwerpbestand wordt bewaard.'; + } + + @override + String get confirmDeleteTopicTitle => 'Onderwerpbestand verwijderen?'; + + @override + String confirmDeleteTopicMessage(String name) { + return '$name verwijderen en uit elke inhoudsopgave verwijderen? Dit kan niet ongedaan worden gemaakt.'; + } + + @override + String get safeDeleteTopicFile => 'Onderwerpbestand veilig verwijderen…'; + + @override + String get removeTocElement => 'TOC-element verwijderen'; + + @override + String get reviewUsages => 'Gebruik controleren'; + + @override + String get deleteTopicFile => 'Onderwerpbestand verwijderen'; + + @override + String get removeAction => 'Verwijderen'; + + @override + String topicRemovalSummary(String topic) { + return 'Verwijder “$topic” uit de geselecteerde instantie. Het onderwerpbestand wordt bewaard.'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return 'Verwijder “$topic” en werk de referenties veilig bij in dit Writerside-project.'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count onderliggende onderwerpen worden één niveau hoger geplaatst.', + one: '1 onderliggend onderwerp wordt één niveau hoger geplaatst.', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + 'Dit onderwerp wordt gebruikt als startpagina van een instantie. Controleer het gebruik ervan en wijs een andere startpagina toe voordat u verdergaat.'; + + @override + String topicUsagesCount(int count) { + return 'Gebruik ($count)'; + } + + @override + String get noBreakingTopicUsages => + 'Er zijn geen verwijzingen gevonden die kunnen worden verbroken.'; + + @override + String get topicUsagesFound => + 'BusyMark heeft de volgende verwijzingen naar dit onderwerp gevonden.'; + + @override + String get topicUsageTocElements => 'TOC-elementen'; + + @override + String get topicUsageStartPages => 'Startpagina\'s'; + + @override + String get topicUsageTopicLinks => 'Onderwerplinks'; + + @override + String get topicUsageIncludes => 'Inclusief'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count keer gebruikt', + one: '1 gebruik', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => 'Refactoring-opties'; + + @override + String get updateUsagesAutomatically => 'Gebruik automatisch bijwerken'; + + @override + String get updateUsagesAutomaticallyDescription => + 'Verwijder inhoudsopgavereferenties en -includes en behoud de linktekst.'; + + @override + String get manualUsageUpdatesRequired => + 'Voor sommige verwijzingen zijn handmatige wijzigingen vereist voordat deze refactoring plaatsvindt.'; + + @override + String get setRedirectTo => 'Omleiding instellen naar'; + + @override + String get noRedirectDescription => + 'De oude, gepubliceerde pagina niet omleiden.'; + + @override + String get redirectTarget => 'Omleidingsdoel'; + + @override + String get remainingUsagesBlockRemoval => + 'Controleer en werk de resterende verwijzingen bij voordat u doorgaat, of schakel automatische updates in als die beschikbaar zijn.'; + + @override + String usagesOfTopic(String topic) { + return 'Gebruik van $topic'; + } + + @override + String get noUsagesFound => 'Geen gebruik gevonden'; + + @override + String get outsideSelectedInstance => 'buiten de geselecteerde instantie'; + + @override + String get doRefactor => 'Refactoring uitvoeren'; + + @override + String get orphanTopicTitle => 'Onderwerpbestand wordt niet meer gebruikt'; + + @override + String get keepTopicFile => 'Onderwerpbestand behouden'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic” wordt nergens meer gebruikt in dit Writerside-project. Verwijder het bestand of bewaar het voor gebruik in een andere instantie.'; + } + + @override + String get defaultNewTopicTitle => 'Nieuw onderwerp'; + + @override + String get topicTitle => 'Onderwerptitel'; + + @override + String get fileName => 'Bestandsnaam'; + + @override + String get topicTitleRequired => 'Onderwerptitel is vereist.'; + + @override + String get fileNameRequired => 'Bestandsnaam is vereist.'; + + @override + String get rename => 'Hernoemen'; + + @override + String get confirmDeleteFileTitle => 'Bestand verwijderen?'; + + @override + String get confirmDeleteFolderTitle => 'Map verwijderen?'; + + @override + String confirmDeleteFileMessage(String name) { + return '$name verwijderen? Dit kan niet ongedaan worden gemaakt.'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return '$name en alle bestanden daarin verwijderen? Dit kan niet ongedaan worden gemaakt.'; + } + + @override + String get useSingleSafeFileName => 'Gebruik één veilige bestandsnaam.'; + + @override + String useExpectedExtension(String extension) { + return 'Gebruik de extensie $extension voor het geselecteerde formaat.'; + } + + @override + String get useIdentifierCharacters => + 'Gebruik letters, cijfers, onderstrepingstekens of koppeltekens vóór de extensie.'; + + @override + String get topicIdAlreadyExists => 'Onderwerp-ID bestaat al.'; + + @override + String get createWritersideTopicFailed => + 'Kan Writerside-onderwerp niet maken.'; + + @override + String get noOutline => 'Geen overzicht'; + + @override + String expandKind(String kind) { + return 'Vouw $kind uit'; + } + + @override + String collapseKind(String kind) { + return '$kind samenvouwen'; + } + + @override + String get foldKindSection => 'sectie'; + + @override + String get foldKindList => 'lijst'; + + @override + String get foldKindQuote => 'citaat'; + + @override + String get foldKindTag => 'label'; + + @override + String get sourceSearchPreviousMatch => 'Vorige overeenkomst'; + + @override + String get sourceSearchNextMatch => 'Volgende overeenkomst'; + + @override + String get sourceSearchCaseSensitive => 'Hoofdlettergevoelig'; + + @override + String get sourceSearchWholeWord => 'Heel woord'; + + @override + String get sourceSearchRegex => 'Regex'; + + @override + String get sourceSearchReplacement => 'Vervangen door'; + + @override + String get sourceSearchReplaceCurrent => 'Huidige vervangen'; + + @override + String get sourceSearchReplaceAndFindNext => 'Vervangen en volgende zoeken'; + + @override + String get sourceSearchReplaceAll => 'Vervang alles'; + + @override + String get workspaceReplace => 'Vervangen in werkruimte'; + + @override + String get reviewReplacements => 'Vervangingen controleren'; + + @override + String get applyReplacements => 'Vervangingen toepassen'; + + @override + String get skippedFiles => 'Overgeslagen bestanden'; + + @override + String get workspaceReplaceDirtyBuffer => 'Niet-opgeslagen editorinhoud'; + + @override + String get workspaceReplaceDiskContent => 'Opgeslagen schijfinhoud'; + + @override + String selectFileMatches(int count) { + return 'Selecteer alle $count overeenkomsten'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return '$matches overeenkomsten in $files bestanden vervangen; $skipped overgeslagen.'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Met afsluitende nieuwe regel'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Zonder afsluitende nieuwe regel'; + } + + @override + String get normalizeLineEndings => 'Normaliseer regeleinden'; + + @override + String get mixedLineEndingsSavePrompt => + 'Dit document bevat gemengde regeleinden. Kies een formaat.'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName gebruikt gemengde regeleinden. Kies het formaat dat u wilt gebruiken voordat u het vervangt.'; + } + + @override + String get workspaceReplaceIssueOversized => + 'Een te groot bestand overgeslagen.'; + + @override + String get workspaceReplaceIssueUnreadable => + 'Er is een bestand overgeslagen dat niet kon worden gelezen.'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => + 'Er is een bestand overgeslagen dat geen geldige UTF-8 is.'; + + @override + String get workspaceReplaceIssueTruncated => + 'Het vervangende voorbeeld is ingekort.'; + + @override + String get workspaceReplaceIssueFileChanged => + 'Een bestand overgeslagen dat na het voorbeeld is gewijzigd.'; + + @override + String get workspaceReplaceIssueBufferChanged => + 'Er is een editorbuffer overgeslagen die na het voorbeeld is gewijzigd.'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + 'Kies LF- of CRLF-normalisatie voordat u vervangt.'; + + @override + String get workspaceReplaceIssuePartialConflict => + 'Het terugdraaien is gestopt omdat het bestand tegelijkertijd is gewijzigd. Er kunnen enkele vervangingen overblijven; verplaatste inhoud werd bewaard op het onderstaande pad.'; + + @override + String get workspaceReplaceIssueApplyFailed => + 'De herziene vervanging kon niet worden vastgelegd; er zijn geen bestanden gewijzigd.'; + + @override + String externalChangesTitle(String fileName) { + return 'Externe wijzigingen — $fileName'; + } + + @override + String get externalFileDeleted => 'Dit bestand is van schijf verwijderd.'; + + @override + String get externalFileChanged => + 'Dit bestand is op schijf gewijzigd terwijl er niet-opgeslagen bewerkingen waren.'; + + @override + String recoveredDocumentReview(String fileName) { + return 'Herstelde niet-opgeslagen inhoud voor $fileName. Controleer de inhoud en sla deze op, gebruik Opslaan als of verwijder deze.'; + } + + @override + String get compare => 'Vergelijken'; + + @override + String get reloadFromDisk => 'Herladen vanaf schijf'; + + @override + String get keepMine => 'Mijn versie behouden'; + + @override + String get saveAs => 'Opslaan als'; + + @override + String get sourceSearchInvalidRegex => 'Ongeldige reguliere expressie'; + + @override + String get sourceLargeFileFeaturesPaused => + 'Groot bestand: markeren en vouwen worden gepauzeerd'; + + @override + String get nothingToRead => 'Niets te lezen'; + + @override + String get admonition => 'Vermaning'; + + @override + String get quote => 'Citaat'; + + @override + String get note => 'Opmerking'; + + @override + String get tip => 'Tip'; + + @override + String get warning => 'Waarschuwing'; + + @override + String get tabs => 'Tabbladen'; + + @override + String get tab => 'Tab'; + + @override + String get procedure => 'Procedure'; + + @override + String get step => 'Stap'; + + @override + String get topic => 'Onderwerp'; + + @override + String get chapter => 'Hoofdstuk'; + + @override + String couldNotOpenTarget(String target) { + return 'Kon $target niet openen'; + } + + @override + String linkTargetNotFound(String targetPath) { + return 'Linkdoel niet gevonden: $targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => + 'Kan dit bestandstype niet openen in de editor'; + + @override + String anchorNotFound(String anchor) { + return 'Anker niet gevonden: $anchor'; + } + + @override + String get noProblemsFound => 'Geen problemen gevonden'; + + @override + String get noResults => 'Geen resultaten'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - Regel $lineNumber'; + } + + @override + String get untitledResult => 'Naamloos resultaat'; + + @override + String get documentKindMarkdownFile => 'Markdown-bestand'; + + @override + String get documentKindWritersideMarkdownTopic => + 'Writerside Markdown-onderwerp'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML-onderwerp'; + + @override + String get documentKindWritersideTree => 'Writerside-tree'; + + @override + String get documentKindConfigurationFile => 'Configuratiebestand'; + + @override + String get documentKindVariablesFile => 'Variabelenbestand'; + + @override + String get documentKindCategoriesFile => 'Categorieën bestand'; + + @override + String get documentKindResourceFile => 'Bronbestand'; + + @override + String workspaceErrorOpenFailed(String error) { + return 'Openen mislukt: $error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Kan Writerside-project niet maken: $error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Kan Writerside-onderwerp niet maken: $error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return 'Kan bestand niet openen: $error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + 'Kies waar u dit Markdown-bestand wilt opslaan.'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + 'Opslaan geblokkeerd: bestand gewijzigd op schijf.'; + + @override + String workspaceErrorSaveFailed(String error) { + return 'Opslaan mislukt: $error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return 'Bestandsbewerking mislukt: $error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return 'Validatie mislukt: $error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count niet-opgeslagen documenten zijn hersteld. Controleer elk document voordat u het opslaat of weggooit.', + one: + '1 niet-opgeslagen document is hersteld. Controleer het voordat u het opslaat of weggooit.', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count beschadigde herstelrecords konden niet worden hersteld. Geldige herstelrecords blijven beschikbaar.', + one: + '1 beschadigd herstelrecord kon niet worden hersteld. Het oorspronkelijke herstelbestand is bewaard voor inspectie.', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return 'Pad bestaat niet: $path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return 'Doelmap bestaat al en is niet leeg: $path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return 'Doelpad bestaat al en is geen map: $path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return 'Gegenereerd bestand bestaat al: $path'; + } + + @override + String get errorParentDirectoryRequired => 'Bovenliggende map is vereist.'; + + @override + String errorParentDirectoryMissing(String path) { + return 'Bovenliggende map bestaat niet: $path'; + } + + @override + String errorDirectoryMissing(String path) { + return 'Map bestaat niet: $path'; + } + + @override + String errorPathAlreadyExists(String path) { + return 'Pad bestaat al: $path'; + } + + @override + String get errorFileNameRequired => 'Bestandsnaam is vereist.'; + + @override + String get errorFileNameUnsafe => + 'De bestandsnaam moet uit één veilig padsegment bestaan.'; + + @override + String get errorFileOperationInvalidTarget => + 'Kan een map niet naar zichzelf verplaatsen.'; + + @override + String get errorFileOperationOutsideRoot => + 'Bestandsbewerkingen moeten binnen de werkruimte blijven.'; + + @override + String get errorFileOperationRoot => + 'De hoofdmap van de werkruimte kan niet worden gewijzigd vanuit de bestandsboom.'; + + @override + String get errorProjectNameRequired => 'Projectnaam is vereist.'; + + @override + String get errorDirectoryNameRequired => 'Mapnaam is vereist.'; + + @override + String get errorDirectoryNameUnsafe => + 'De mapnaam moet uit één veilig padsegment bestaan.'; + + @override + String get errorInstanceIdInvalid => + 'De instantie-ID moet beginnen met een kleine letter en mag alleen kleine letters, cijfers, onderstrepingstekens en koppeltekens bevatten.'; + + @override + String get errorTopicFileInvalid => + 'De onderwerpbestandsnaam moet een Markdown-bestandsnaam zijn zonder padscheidingstekens.'; + + @override + String get errorTopicTitleRequired => 'Onderwerptitel is vereist.'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'De root van de Writerside-module bestaat niet: $path'; + } + + @override + String get errorWritersideModuleNotOpen => + 'Er moet een Writerside-module geopend zijn om een onderwerp te kunnen maken.'; + + @override + String get errorWritersideInstanceTreeMissing => + 'De Writerside-module heeft geen instantieboom.'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside-treebestand bestaat niet: $path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return 'Onderwerp-ID \"$topicId\" bestaat al in deze helpmodule.'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return 'Onderwerpbestand bestaat al: $path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return 'Referentieonderwerp is niet aanwezig in de geselecteerde boom: $topic'; + } + + @override + String get errorWritersideTocNodeMissing => + 'Het geselecteerde TOC-item bestaat niet meer.'; + + @override + String get errorWritersideTocInvalidMove => + 'Een TOC-item kan niet naar zichzelf of naar een van zijn onderliggende items worden verplaatst.'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return 'Het startonderwerp $topic kan niet worden verwijderd. Kies eerst een andere startpagina.'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Gebruik Veilig verwijderen voor Writerside-onderwerpbestanden.'; + + @override + String get errorWritersideTopicUsageScanFailed => + 'Kan de onderwerpgebruikscan niet voltooien. Er zijn geen bestanden gewijzigd.'; + + @override + String get errorWritersideTopicUsagesRemain => + 'Sommige verwijzingen naar onderwerpen vereisen nog aandacht. Controleer ze voordat u verdergaat.'; + + @override + String get errorWritersideRedirectInvalid => + 'Het geselecteerde omleidingsdoel is niet langer geldig. Kies het opnieuw.'; + + @override + String errorWritersideRollbackFailed(String paths) { + return 'Het verwijderen van het onderwerp kan niet volledig worden teruggedraaid. Bekijk deze paden voordat u verdergaat: $paths'; + } + + @override + String get errorTopicsRootUnsafe => + 'De hoofdmap van Onderwerpen moet een veilige relatieve map zijn.'; + + @override + String get errorTopicFileNameUnsafe => + 'De onderwerpbestandsnaam moet uit één veilig padsegment bestaan.'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return 'De onderwerpbestandsextensie moet overeenkomen met het geselecteerde formaat ($extension).'; + } + + @override + String get errorTopicFileNameInvalid => + 'De bestandsnaam van het onderwerp mag alleen letters, cijfers, onderstrepingstekens en koppeltekens bevatten.'; + + @override + String errorUnknown(String code) { + return 'Onbekende fout: $code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return 'Kan de metadata van het bestand niet lezen: $error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + 'Grote werkruimte gedetecteerd. Sommige bestanden zijn overgeslagen om de app responsief te houden.'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return 'Kan werkruimte-item niet inspecteren: $error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => + 'Bestand is groter dan de limiet voor automatisch parseren van de bèta.'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Kon het Markdown-bestand niet lezen: $error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + 'Ongeldig opgemaakt kopattribuutblok in Writerside.'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return 'Dubbele kop-ID \"$id\".'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + 'Extra H1-koppen op het hoogste niveau worden behandeld als hoofdstukken.'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown-onderwerp heeft geen H1- of voorwerktitel.'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => + 'XML-onderwerp mist titel.'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return 'Onderwerp \"$fileName\" mist een titel.'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => + 'Frontmatter is niet afgesloten.'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => 'Onveilig HTML-element.'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return 'Linkdoel bestaat niet: $targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return 'Anker \"$anchor\" bestaat niet.'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return 'Afbeelding \"$destination\" mist alt-tekst.'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return 'Afbeelding bestaat niet: $destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return 'Ongeldige XML: $message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg root moet zijn.'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'snippets-declaratie ontbreekt src.'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'instance-groups-declaratie ontbreekt src.'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return 'Niet-ondersteunde toetsenbordmodus: $mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'Instance-declaratie ontbreekt src.'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg registreert geen instantie.'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree root moet zijn.'; + + @override + String get diagnosticWritersideTreeMissingId => 'Instantieprofiel mist ID.'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return 'Boombestandsstam komt niet overeen met instantie-ID \'$id\'.'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + 'Niet-bibliotheekinstantie mist startpagina.'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return 'Startpagina \"$startPage\" bestaat niet.'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return 'Onderwerp \"$topic\" komt meer dan één keer voor in de inhoudsopgave van deze instantie.'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + 'Variabeledeclaratie moet een naam en waarde hebben.'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return 'Variabele \"$name\" wordt meer dan één keer gedeclareerd.'; + } + + @override + String get diagnosticWritersideCategoryMissingId => 'Categorie mist ID.'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return 'Categorie \"$id\" wordt meer dan één keer gedeclareerd.'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return 'Categorievolgorde \'$order\' wordt meer dan één keer gedeclareerd.'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + '.topic root moet zijn.'; + + @override + String get diagnosticWritersideTopicMissingRootId => + 'XML-onderwerp mist root-ID.'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML-onderwerphoofd-id \"$id\" moet overeenkomen met de bestandsnaam \"$expectedId\".'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return 'Element-ID \"$elementId\" komt meerdere keren voor.'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => ' mist href.'; + + @override + String get diagnosticWritersideConfigMissing => + 'Voor de Writerside-modus is writerside.cfg vereist.'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return 'De geconfigureerde build-configuratiemap ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return 'De geconfigureerde map met API-specificaties ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return 'De map met geconfigureerde fragmenten ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return 'Het geconfigureerde variabelenbestand ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return 'Het geconfigureerde categorieënbestand ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return 'Het geconfigureerde instantiegroepenbestand ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return 'Geregistreerde instantiestructuur \"$source\" bestaat niet.'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return 'Kan onderwerpbestand niet lezen: $error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return 'Standaard onderwerpenmap ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return 'De map met geconfigureerde onderwerpen ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return 'Geconfigureerde afbeeldingenmap ontbreekt: $relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return 'Element-ID \"$id\" komt meerdere keren voor.'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return 'TOC-referenties ontbreken onderwerp \"$topic\".'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return 'Externe href \"$href\" is ongeldig.'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return 'Variabele \"%$name%\" is niet gedeclareerd.'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return 'Onderwerplink \"$destination\" werkt niet.'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return 'Anker \"$anchor\" bestaat niet in \"$targetName\".'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => + ' ontbreekt in.'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return 'Bron \"$from\" opnemen bestaat niet.'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return 'Include-element \"$elementId\" bestaat niet in \"$from\".'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'Zie ook categorie \"$ref\" wordt niet gedeclareerd.'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return 'Onderwerpreferentie \"$reference\" is dubbelzinnig.'; + } + + @override + String diagnosticUnknown(String code) { + return 'Onbekende diagnose: $code'; + } + + @override + String get close => 'Sluiten'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git diff'; + + @override + String get gitShowDiff => 'Verschil tonen'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return 'oud $oldRange → nieuw $newRange'; + } + + @override + String get gitDiffNoLines => 'geen regels'; + + @override + String get gitUnavailableTitle => 'Git is niet beschikbaar'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': + 'Installeer Git of configureer BusyMark om een beschikbaar Git-uitvoerbaar bestand te gebruiken. $reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => 'Deze werkruimte vertrouwen voor Git?'; + + @override + String get gitTrustRequiredMessage => + 'Git-repository\'s kunnen programma\'s uitvoeren via hooks, filters en andere configuraties. Vertrouw deze werkruimte voordat BusyMark repositorygegevens leest of Git-acties inschakelt.'; + + @override + String get gitTrustWorkspace => 'Werkruimte vertrouwen'; + + @override + String get gitNotRepositoryTitle => 'Geen Git-repository'; + + @override + String get gitNotRepositoryMessage => + 'Deze werkruimte bevindt zich niet in een Git-repository.'; + + @override + String get gitInitializeRepository => 'Git-opslagplaats initialiseren'; + + @override + String get gitDetachedHead => 'Losgekoppelde HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return 'Vrijstaand bij $commit'; + } + + @override + String get gitNoUpstream => 'Geen upstream'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count niet-gepushte commits', + one: '1 niet-gepushte commit', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count commits om te pullen', + one: '1 commit om te pullen', + ); + return '$_temp0'; + } + + @override + String get gitClean => 'Schoon'; + + @override + String get gitConflicts => 'Conflicten'; + + @override + String get gitChanges => 'Wijzigingen'; + + @override + String get gitStaged => 'Gestaged'; + + @override + String get gitUnstaged => 'Niet-gestaged'; + + @override + String get gitHistory => 'Geschiedenis'; + + @override + String get gitBranches => 'Takken'; + + @override + String get gitActions => 'Git-acties'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => 'Voor commit selecteren'; + + @override + String get gitRemoveFromCommit => 'Bestand uit staging verwijderen'; + + @override + String get gitDiscard => 'Wijzigingen verwerpen'; + + @override + String get gitOpenFile => 'Bestand openen'; + + @override + String get gitMarkResolved => 'Als opgelost markeren'; + + @override + String get gitUntracked => 'Niet-getrackt'; + + @override + String get gitCommitMessage => 'Commitbericht'; + + @override + String get gitCommitSelectedFiles => 'Geselecteerde bestanden committen'; + + @override + String get gitCommitNoSelectedFiles => + 'Stage ten minste één bestand voordat u commit.'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count gestagede bestanden', + one: '1 gestaged bestand', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => 'Buiten werkruimte'; + + @override + String get gitCommitMessageRequired => 'Voer een commit-bericht in.'; + + @override + String get gitCreateBranch => 'Branch maken'; + + @override + String get gitNewBranch => 'Nieuwe branch'; + + @override + String get gitBranchName => 'Branchnaam'; + + @override + String get gitSwitchBranch => 'Branch wisselen'; + + @override + String get gitNoChanges => 'Geen wijzigingen'; + + @override + String get gitNoHistory => 'Geen geschiedenis'; + + @override + String get gitNoBranches => 'Geen branches'; + + @override + String get gitNoDiff => 'Geen verschil om te laten zien'; + + @override + String get gitBinaryFile => + 'Binair bestand. BusyMark geeft geen binaire patches weer.'; + + @override + String gitBinaryFileInfo(int size) { + return 'Binair bestand ($size bytes). BusyMark geeft geen binaire patches weer.'; + } + + @override + String get gitUnsavedChangesBanner => + 'Niet-opgeslagen editorwijzigingen worden pas opgenomen nadat ze zijn opgeslagen.'; + + @override + String get gitConfirmDiscardTitle => 'Git-wijzigingen negeren?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Alle gestagede en niet-gestagede wijzigingen in de geselecteerde getrackte bestanden worden teruggezet naar HEAD.', + one: + 'Alle gestagede en niet-gestagede wijzigingen in het geselecteerde getrackte bestand worden teruggezet naar HEAD.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'De geselecteerde niet-getrackte bestanden worden verwijderd.', + one: 'Het geselecteerde niet-getrackte bestand wordt verwijderd.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'De geselecteerde bestanden worden teruggezet of verwijderd op basis van hun Git-status.', + one: + 'Het geselecteerde bestand wordt teruggezet of verwijderd op basis van de Git-status.', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return 'Overstappen naar $branch?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'BusyMark laadt de werkruimte opnieuw vanaf schijf nadat Git van branch is gewisseld.'; + + @override + String get gitConfirmPushSetUpstreamTitle => 'Upstream-branch instellen?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return 'Deze branch heeft geen upstream. BusyMark kan $branch pushen en de upstream instellen als er precies één remote is geconfigureerd.'; + } + + @override + String get gitProjectHistory => 'Projectgeschiedenis'; + + @override + String get gitFileHistory => 'Bestandsgeschiedenis'; + + @override + String get gitFileHistoryRequiresOpenFile => + 'Bestandsgeschiedenis vereist een geopend Markdown-bestand.'; + + @override + String get gitLoadMore => 'Meer laden'; + + @override + String get gitChangesInCommit => 'Wijzigingen in deze commit'; + + @override + String get gitCompareWithCurrent => 'Vergelijk met actueel'; + + @override + String get gitRestoreVersion => 'Herstel deze versie'; + + @override + String get gitConfirmRestoreTitle => 'Deze bestandsversie herstellen?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark vervangt het huidige werkboombestand door de geselecteerde vastgelegde versie. Het herstelde bestand blijft niet-gestaged.'; + + @override + String get gitCommitActions => 'Commitacties'; + + @override + String get gitResetCurrentBranchToHere => + 'Huidige branch resetten naar hier…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return 'Branch $branch resetten naar $commit?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return 'Dit verplaatst branch $branch naar commit $commit. Kies hoe Git de index en werkboom bijwerkt.'; + } + + @override + String get gitReset => 'Resetten'; + + @override + String get gitResetModeSoft => 'Soft'; + + @override + String get gitResetModeSoftDescription => + 'Verplaats alleen de branch. Houd de index en werkboom ongewijzigd; verschillen met de geselecteerde commit blijven gestaged.'; + + @override + String get gitResetModeMixed => 'Mixed'; + + @override + String get gitResetModeMixedDescription => + 'Verplaats de branch en reset de index. Houd de werkboom ongewijzigd; de verschillen worden niet-gestaged.'; + + @override + String get gitResetModeHard => 'Hard'; + + @override + String get gitResetModeHardDescription => + 'Verplaats de branch en reset de index en werkboom. Wijzigingen in getrackte bestanden worden genegeerd; niet-getrackte bestanden die in de weg staan kunnen worden verwijderd.'; + + @override + String get gitResetModeKeep => 'Keep'; + + @override + String get gitResetModeKeepDescription => + 'Verplaats de branch en reset getrackte bestanden met behoud van lokale wijzigingen. Git wordt afgebroken als deze wijzigingen in conflict komen met de reset.'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => 'Bestandsacties'; + + @override + String get actions => 'Acties'; + + @override + String get gitStatusAdded => 'Toegevoegd'; + + @override + String get gitStatusDeleted => 'Verwijderd'; + + @override + String get gitStatusRenamed => 'Hernoemd'; + + @override + String get gitStatusCopied => 'Gekopieerd'; + + @override + String get gitStatusUntracked => 'Niet-getrackt'; + + @override + String get gitStatusConflicted => 'In conflict'; + + @override + String get gitStatusIgnored => 'Genegeerd'; + + @override + String get gitStatusTypeChanged => 'Soort gewijzigd'; + + @override + String get gitStatusModified => 'Gewijzigd'; + + @override + String get gitStatusUnknown => 'Onbekend'; + + @override + String get gitErrorUnavailable => 'Git is niet beschikbaar.'; + + @override + String get gitErrorNotRepository => + 'Deze werkruimte is geen Git-opslagplaats.'; + + @override + String get gitErrorUnsafePath => + 'BusyMark heeft een onveilig Git-pad geblokkeerd.'; + + @override + String get gitErrorInvalidBranchName => 'Voer een geldige branchnaam in.'; + + @override + String get gitErrorNoRemote => 'Er is geen Git-remote geconfigureerd.'; + + @override + String get gitErrorNoUpstream => 'Er is geen upstream-branch geconfigureerd.'; + + @override + String get gitErrorMultipleRemotes => + 'Er zijn meerdere remotes geconfigureerd. Kies een upstream buiten deze versie van BusyMark.'; + + @override + String get gitErrorDirtyWorkspace => + 'Sla wijzigingen in de BusyMark-editor op of verwerp ze voordat u van branch wisselt.'; + + @override + String get gitErrorResetDirtyWorkspace => + 'Sla wijzigingen in de BusyMark-editor op of verwerp ze voordat u de huidige branch reset.'; + + @override + String get gitErrorRestoreStagedFile => + 'Haal dit bestand eerst uit staging voordat u een historische versie herstelt.'; + + @override + String get gitErrorResetDetachedHead => + 'Checkout eerst een branch voordat u deze reset.'; + + @override + String get gitErrorDiverged => + 'De branches zijn uiteen gelopen. Los het samenvoegen of opnieuw baseren buiten deze versie van BusyMark op.'; + + @override + String get gitErrorAuthorIdentity => + 'Git heeft een auteursnaam en e-mailadres nodig voordat het kan committen.'; + + @override + String get gitAuthorIdentityTitle => 'Git-auteuridentiteit'; + + @override + String get gitAuthorIdentityMessage => + 'Voer de identiteit in die Git moet vastleggen bij commits. BusyMark zal het opslaan en deze commit opnieuw proberen.'; + + @override + String get gitAuthorName => 'Naam'; + + @override + String get gitAuthorEmail => 'E-mail'; + + @override + String get gitAuthorIdentityGlobal => 'Gebruik voor alle opslagplaatsen'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'Als BusyMark als Snap is geïnstalleerd, geldt dit voor alle opslagplaatsen die in BusyMark worden geopend.'; + + @override + String get gitSaveIdentityAndCommit => 'Identiteit opslaan en committen'; + + @override + String get gitErrorAuthentication => 'Git-authenticatie is mislukt.'; + + @override + String get gitErrorNetwork => 'Git-netwerkbewerking is mislukt.'; + + @override + String get gitErrorConflict => 'Git rapporteerde onopgeloste conflicten.'; + + @override + String get gitErrorCommandFailed => 'Git-opdracht is mislukt.'; + + @override + String get markdownAndHtml => 'Markdown en HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown-blokken'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Blokstructuren ondersteund in Markdown-bron en preview.'; + + @override + String get markdownHtmlInlineFormatting => 'Inline-opmaak'; + + @override + String get markdownHtmlInlineFormattingDescription => + 'Opmaak die kan verschijnen in alinea\'s, lijstitems en tabelcellen.'; + + @override + String get markdownHtmlRawHtmlBlocks => 'Ruwe HTML-blokken'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'Veilige HTML-tags op blokniveau weergegeven via BusyMark-voorbeeldwidgets.'; + + @override + String get markdownHtmlRawHtmlInline => 'Onbewerkte HTML-inlinetags'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + 'Veilige inline HTML-tags weergegeven zonder letterlijke tags weer te geven.'; + + @override + String get markdownHtmlSafety => 'Veiligheidsregels'; + + @override + String get markdownHtmlSafetyDescription => + 'Onbewerkte HTML wordt geparseerd en opgeschoond voordat de preview wordt weergegeven.'; + + @override + String get markdownHtmlHeadings => 'Koppen'; + + @override + String get markdownHtmlParagraphs => 'Paragrafen'; + + @override + String get markdownHtmlLists => 'Lijsten'; + + @override + String get markdownHtmlHtmlContainers => 'Containers'; + + @override + String get markdownHtmlHtmlTextBlocks => 'Tekstblokken'; + + @override + String get markdownHtmlHtmlFigures => 'Figuren en afbeeldingen'; + + @override + String get markdownHtmlHtmlPreformatted => 'Voorgeformatteerde code'; + + @override + String get markdownHtmlHtmlDisclosure => 'Openklapbare blokken'; + + @override + String get markdownHtmlHtmlDescriptionLists => 'Beschrijvingslijsten'; + + @override + String get markdownHtmlHtmlFormattingTags => 'Opmaaktags'; + + @override + String get markdownHtmlHtmlInlineCodeTags => 'Inline codetags'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => 'Semantische inline-tags'; + + @override + String get markdownHtmlSanitizedPreview => 'Opgeschoond voorbeeld'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + 'Toegestane HTML wordt geconverteerd naar BusyMark-voorbeeldblokken en niet weergegeven in een browser.'; + + @override + String get markdownHtmlSourcePreserved => 'Bron behouden'; + + @override + String get markdownHtmlSourcePreservedDescription => + 'Ruwe HTML wordt exact als brontekst opgeslagen.'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'Markdown binnen HTML'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + 'Markdown-markeringen in onbewerkte HTML worden weergegeven als letterlijke tekst.'; + + @override + String get markdownHtmlBlockedContent => 'Actieve inhoud geblokkeerd'; + + @override + String get markdownHtmlBlockedContentDescription => + 'Scripts, stijlen, frames, formulieren, SVG, MathML, gebeurtenissen en onveilige attributen worden geblokkeerd.'; + + @override + String get markdownHtmlSafeUrls => 'Alleen veilige URL\'s'; + + @override + String get markdownHtmlSafeUrlsDescription => + 'Links staan http-, https-, mailto-, tel-, relatieve en fragment-URL\'s toe; onveilige schema\'s worden geblokkeerd.'; + + @override + String get exportAsPdf => 'Exporteren als PDF'; + + @override + String get pdfExportDescription => + 'Kies de pagina-indeling voor een verzorgde, op zichzelf staande PDF.'; + + @override + String get pdfRemoteImagesNote => + 'Externe afbeeldingen worden tijdens het exporteren niet gedownload. Lokale afbeeldingen zijn inbegrepen indien beschikbaar.'; + + @override + String get pdfPageSize => 'Paginagrootte'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => 'Oriëntatie'; + + @override + String get pdfPortrait => 'Portret'; + + @override + String get pdfLandscape => 'Landschap'; + + @override + String get pdfMargins => 'Marges'; + + @override + String get pdfMarginNarrow => 'Smal'; + + @override + String get pdfMarginNormal => 'Normaal'; + + @override + String get pdfMarginWide => 'Breed'; + + @override + String get pdfIncludePageNumbers => 'Voeg paginanummers toe'; + + @override + String get export => 'Exporteren'; + + @override + String get exportingPdf => 'PDF exporteren…'; + + @override + String get fileTypePdf => 'PDF-document'; + + @override + String pdfExported(String fileName) { + return '$fileName is geëxporteerd.'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '$fileName is geëxporteerd met $count waarschuwing(en).'; + } + + @override + String get pdfExportUnavailable => + 'Het PDF-exportonderdeel ontbreekt. Installeer BusyMark opnieuw en probeer het opnieuw.'; + + @override + String get pdfExportTimedOut => + 'De PDF-export duurde te lang en werd gestopt.'; + + @override + String get pdfExportFailed => + 'BusyMark kon dit document niet als PDF exporteren.'; + + @override + String get visualizationRendering => 'Renderen…'; + + @override + String get visualizationStale => 'Laatste geldige weergave wordt getoond'; + + @override + String get visualizationShowSource => 'Bron tonen'; + + @override + String get visualizationShowRender => 'Render weergeven'; + + @override + String get visualizationFitWidth => 'Aan breedte aanpassen'; + + @override + String get visualizationSaveImage => 'Afbeelding opslaan'; + + @override + String get visualizationCopyImage => 'Afbeelding kopiëren'; + + @override + String get visualizationImageCopied => 'Afbeelding gekopieerd'; + + @override + String get visualizationOpenApiReference => 'Open API-referentie'; + + @override + String get visualizationValid => 'Geldig'; + + @override + String get visualizationInvalid => 'Ongeldig'; + + @override + String get visualizationServers => 'Servers'; + + @override + String get visualizationPaths => 'Paden'; + + @override + String get visualizationOperations => 'Operaties'; + + @override + String get visualizationTags => 'Labels'; + + @override + String get visualizationNoOperations => 'Geen overeenkomende bewerkingen'; + + @override + String get visualizationSearchOperations => 'Zoekbewerkingen'; + + @override + String get visualizationRenderFailed => + 'Deze visualisatie kon niet worden weergegeven.'; + + @override + String get visualizationRetry => 'Opnieuw proberen'; + + @override + String visualizationSaved(String fileName) { + return '$fileName opgeslagen'; + } + + @override + String get shortcutExportPdfDescription => + 'Exporteer het actieve document of de Writerside-module als PDF.'; + + @override + String get instances => 'Instanties'; + + @override + String get newInstance => 'Nieuwe instantie'; + + @override + String get newTocLibrary => 'Nieuwe TOC-bibliotheek'; + + @override + String get editInstance => 'Instantie bewerken'; + + @override + String get openTocFile => 'TOC-bestand openen'; + + @override + String get createInstance => 'Instantie maken'; + + @override + String get createTocLibrary => 'TOC-bibliotheek maken'; + + @override + String get instanceContent => 'Inhoud'; + + @override + String get instanceContentSource => 'Maken vanuit'; + + @override + String get emptyInstance => 'Lege instantie'; + + @override + String get markdownFiles => 'Lokale Markdown-bestanden'; + + @override + String get chooseMarkdownFolder => 'Kies de Markdown-map'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Kies een map met Markdown-bestanden.'; + + @override + String get instanceAppearance => 'Uiterlijk'; + + @override + String get instanceColor => 'Pictogramkleur'; + + @override + String get instanceVersion => 'Versie'; + + @override + String instanceVersionInherited(String version) { + return 'De projectversie is $version als dit veld leeg is.'; + } + + @override + String get instanceWebPath => 'Webpad'; + + @override + String get instanceStatus => 'Status'; + + @override + String get instanceStatusRelease => 'Release'; + + @override + String get instanceStatusEap => 'EAP'; + + @override + String get instanceStatusDeprecated => 'Verouderd'; + + @override + String get allowSearchEngineIndexing => 'Sta zoekmachine-indexering toe'; + + @override + String get allowSearchEngineIndexingDescription => + 'Laat externe zoekmachines deze uitvoer indexeren.'; + + @override + String get offlineArtifact => 'Offline artefact'; + + @override + String get offlineArtifactDescription => + 'Bundel bronnen zodat de gebouwde documentatie op zichzelf staat.'; + + @override + String get instanceOutputSettings => 'Uitvoerinstellingen'; + + @override + String get markdownImportSource => 'Markdown-bron'; + + @override + String get markdownImportFiles => 'Markdown-bestanden'; + + @override + String get selectNone => 'Selecteer geen'; + + @override + String markdownFilesFound(int count) { + return '$count Markdown-bestand(en) gevonden'; + } + + @override + String get noMarkdownFilesFound => + 'Er zijn geen Markdown-bestanden gevonden in deze map.'; + + @override + String get copyReferencedMedia => 'Kopieer de media waarnaar wordt verwezen'; + + @override + String get copyReferencedMediaDescription => + 'Kopieer lokale afbeeldingen en video waarnaar door de geselecteerde bestanden wordt verwezen, terwijl de relatieve paden behouden blijven.'; + + @override + String get instanceIdRenameWarningTitle => 'Naam van instantie-ID wijzigen?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark zal de naam van het .tree-bestand hernoemen en de Writerside-projectreferenties bijwerken van “$oldId” naar “$newId”. Publicatiescripts worden niet gewijzigd en moeten afzonderlijk worden bijgewerkt.'; + } + + @override + String get renameAndUpdateReferences => 'Hernoem en update referenties'; + + @override + String get tocLibraryDescription => + 'Een TOC-bibliotheek slaat herbruikbare secties op en produceert geen eigen uitvoer.'; + + @override + String get defaultTocLibraryName => 'Gedeelde inhoudsopgave'; + + @override + String get instanceColorAutomatic => 'Automatisch'; + + @override + String get instanceColorBlue => 'Blauw'; + + @override + String get instanceColorGreen => 'Groen'; + + @override + String get instanceColorOrange => 'Oranje'; + + @override + String get instanceColorPurple => 'Paars'; + + @override + String get instanceColorRed => 'Rood'; + + @override + String get instanceColorTeal => 'Turkoois'; + + @override + String get instanceColorYellow => 'Geel'; + + @override + String get errorWritersideInstanceNameRequired => + 'Voer een instantienaam in.'; + + @override + String errorWritersideInstanceIdExists(String id) { + return 'Er bestaat al een instantie met ID “$id”.'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return 'De instantiestructuur bestaat al: $path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'De Markdown-bronmap bestaat niet: $path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + 'Selecteer ten minste één Markdown-bestand om te importeren.'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return 'Dit is geen leesbaar Markdown-bestand binnen de geselecteerde bron: $path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return 'Importeren zou een bestaand projectbestand overschrijven: $path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + 'Instantiebestanden gewijzigd op schijf. Bekijk ze en probeer het opnieuw.'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark kon de wijziging aan de instantie niet volledig ongedaan maken. Controleer deze bestanden voordat u verdergaat: $paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + 'Een inhoudsopgavebibliotheek kan geen Markdown-onderwerpen importeren.'; + + @override + String get errorWritersideInstanceWebPathInvalid => + 'Het webpad moet uit één segment bestaan.'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'De Writerside-instantieconfiguratie is ongeldig. Corrigeer de diagnose en probeer het opnieuw.'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark kon de wijzigingen aan de instantie niet veilig doorvoeren.'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return 'Onbekende instantiestatus \'$status\'. Gebruik release, eap of deprecated.'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return 'De instantie-ID “$id” wordt door meer dan één boombestand gebruikt.'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml moet een hoofdelement hebben.'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return 'De waarde voor $name “$value” moet waar of onwaar zijn.'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + 'Een -element moet een instantie-ID specificeren.'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + 'Een boom moet zowel from als element-id specificeren.'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + 'Een boom moet een ID specificeren.'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + 'Een TOC-referentie tussen meerdere instanties moet zowel ref als in specificeren.'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + 'Een TOC-element kan niet meer dan één onderwerp, referentie, link of omleiding targeten.'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return 'Boomelement-ID “$id” wordt meer dan één keer gedeclareerd.'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + 'Het instantiegroepenbestand moet een hoofdelement hebben.'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + 'Een instantiegroep moet een niet-lege ID en lijst met instanties opgeven.'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return 'Instantiegroep-ID \'$id\' wordt meer dan één keer gedeclareerd.'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return 'TOC include “$source#$id” behoort tot de externe module “$origin” en kan niet worden uitgebreid in deze werkruimte.'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return 'Boomelement “$id” bestaat niet in de geregistreerde boom “$source”.'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return 'Boom include “$source#$id” creëert een cyclus.'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return 'Instantievoorwaarde verwijst naar onbekende groep “@$group”.'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return 'Referentie voor meerdere instanties is gericht op onbekende instantie \'$instance\'.'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return 'Onderwerp “$topic” bevindt zich niet in de instantie waarnaar wordt verwezen “$instance”.'; + } + + @override + String get download => 'Downloaden'; + + @override + String get exportWritersideAsPdf => 'Exporteer Writerside als PDF'; + + @override + String get writersidePdfContent => 'Inhoud exporteren'; + + @override + String get writersidePdfPage => 'Pagina'; + + @override + String get exportingWritersidePdf => 'Writerside-PDF exporteren...'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => 'Lokale Ollama'; + + @override + String get aiDisabled => 'Uitgeschakeld'; + + @override + String get aiLocalOnlyDescription => + 'AI-bewerking is uitsluitend lokaal. BusyMark stuurt alleen de weergegeven context naar de geselecteerde provider en past nooit een voorstel toe zonder beoordeling.'; + + @override + String get aiProvider => 'AI-provider'; + + @override + String get aiDefaultProvider => 'Standaardprovider'; + + @override + String get aiConfigureProvider => 'Provider configureren'; + + @override + String get aiChooseProvider => 'Kies een AI-provider'; + + @override + String get aiOllamaEndpoint => 'Ollama-eindpunt'; + + @override + String get aiOllamaModel => 'Ollama-model'; + + @override + String get aiTestConnection => 'Verbinding testen'; + + @override + String get aiTestingConnection => 'Testen…'; + + @override + String aiConnectionReady(int count) { + return 'Verbonden. $count geïnstalleerde modellen gevonden.'; + } + + @override + String get aiNoModels => 'Geen model geselecteerd.'; + + @override + String get aiConnectionFailed => + 'BusyMark kon het genereren van AI-tekst niet verifiëren.'; + + @override + String get aiConfigureFirst => + 'Schakel een AI-provider in en verifieer een model in Instellingen → AI.'; + + @override + String get aiEditWithAi => 'Bewerken met AI'; + + @override + String get aiRefineWithAi => 'Verfijn met AI'; + + @override + String get aiInstruction => 'Instructie'; + + @override + String get aiChangeTarget => 'Wat kan er veranderen'; + + @override + String get aiSharedContext => 'Context gedeeld met AI'; + + @override + String get aiTargetSelection => 'Geselecteerde inhoud'; + + @override + String get aiTargetInsertAfterBlock => 'Invoegen na huidig blok'; + + @override + String get aiTargetCurrentBlock => 'Huidig blok'; + + @override + String get aiTargetCurrentSection => 'Huidige sectie'; + + @override + String get aiTargetCompleteDocument => 'Volledig document'; + + @override + String get aiContextNone => 'Geen documentcontext'; + + @override + String get aiContextSelection => 'Geselecteerde inhoud'; + + @override + String get aiContextCurrentBlock => 'Huidig blok'; + + @override + String get aiContextCurrentSection => 'Huidige sectie'; + + @override + String get aiContextCompleteDocument => 'Volledig document'; + + @override + String get aiGenerating => 'Voorstel genereren…'; + + @override + String get aiProposal => 'AI-voorstel'; + + @override + String get aiGenerateProposal => 'Voorstel genereren'; + + @override + String aiContextDisclosure(int count) { + return 'De geselecteerde provider ontvangt $count tekens uit de weergegeven context.'; + } + + @override + String get aiOriginal => 'Origineel'; + + @override + String get aiSuggested => 'Voorgesteld'; + + @override + String get aiApplyProposal => 'Voorstel toepassen'; + + @override + String aiTokenUsage(int input, int output) { + return '$input invoertokens · $output uitvoertokens'; + } + + @override + String get aiStaleProposal => + 'Het document is gewijzigd terwijl dit voorstel werd gegenereerd. Voer de actie opnieuw uit.'; + + @override + String get gitAiStagedChangesChanged => + 'De gestagede wijzigingen zijn gewijzigd terwijl dit commitbericht werd gegenereerd. Voer de actie opnieuw uit.'; + + @override + String get aiViewContext => 'Verzonden context bekijken'; + + @override + String get aiReviewExactContent => 'Controleer de exacte inhoud'; + + @override + String get aiContentToChange => 'Te wijzigen inhoud'; + + @override + String get aiContentSentToAi => 'Inhoud verzonden naar AI'; + + @override + String get aiApiKey => 'API-sleutel'; + + @override + String get aiApiKeyStoredHint => + 'Er wordt een sleutel opgeslagen in het systeemreferentiearchief'; + + @override + String get aiApiKeyEnterHint => 'Voer de API-sleutel van de provider in'; + + @override + String get aiReplaceApiKey => 'Vervang de API-sleutel'; + + @override + String get aiSaveApiKey => 'API-sleutel veilig opslaan'; + + @override + String get aiRemoveApiKey => 'Opgeslagen API-sleutel verwijderen'; + + @override + String get aiCredentialSaved => + 'API-sleutel opgeslagen in het systeemreferentiesarchief.'; + + @override + String get aiCredentialRemoved => 'De opgeslagen API-sleutel is verwijderd.'; + + @override + String get aiModelRouting => 'Modelroutering'; + + @override + String get aiAutomaticRouting => 'Automatisch per taak'; + + @override + String get aiFixedModelRouting => 'Gebruik het geselecteerde model'; + + @override + String get aiPreferredModel => 'Voorkeursmodel'; + + @override + String get aiModel => 'Model'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests verzoeken · $input invoertokens · $output uitvoertokens'; + } + + @override + String aiCloudConsentTitle(String provider) { + return 'Inhoud naar $provider sturen?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return 'Schakel $provider in'; + } + + @override + String get aiCloudConsentMessage => + 'Alleen de inhoud die in elk AI-beoordelingsdialoogvenster wordt weergegeven, wordt verzonden. Verzoeken zijn staatloos, voorstellen moeten worden beoordeeld en de API-sleutel wordt opgeslagen in het referentiearchief van het Linux-systeem.'; + + @override + String aiCloudConsentRequired(String provider) { + return 'Bevestig eerst het delen van gegevens door $provider in Instellingen → AI.'; + } + + @override + String aiGenerationVerified(String model, int count) { + return 'Generatie geverifieerd met $model. $count compatibele model(len) beschikbaar.'; + } + + @override + String get aiColdStartObserved => + 'Er werd een lokale koude start waargenomen.'; + + @override + String get aiNoCompatibleModels => + 'Er is geen compatibel model voor tekstgeneratie beschikbaar.'; + + @override + String get aiEnableProvider => 'Schakel eerst een AI-provider in.'; + + @override + String get aiDraftCommitMessage => 'Concept commit-bericht'; + + @override + String get aiDrafting => 'Opstellen…'; + + @override + String get aiDraftWithAi => 'Met AI opstellen'; + + @override + String get generateOrUpdateMarkdownToc => 'Inhoudsopgave genereren/bijwerken'; + + @override + String get markdownTocTitle => 'Inhoudsopgave'; + + @override + String markdownTocUpdated(int count) { + return 'Inhoudsopgave bijgewerkt met $count vermeldingen.'; + } + + @override + String get markdownTocNoHeadings => + 'Voeg ten minste één sectiekop toe voordat u een inhoudsopgave genereert.'; + + @override + String get markdownTocMalformedMarkers => + 'De BusyMark-inhoudsopgavemarkeringen ontbreken, zijn gedupliceerd of zijn niet in de juiste volgorde.'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return 'Kopniveau $level volgt niveau $previousLevel; controleer de nesting van secties.'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + 'Linktekst is leeg. Geef een toegankelijke naam op die het doel ervan beschrijft.'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return 'Controleer of de linktekst “$text” het doel ervan in de context beschrijft.'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + 'De cellen van de tabelkop moeten hun kolommen identificeren; voltooi elke lege kop.'; + + @override + String get mathRenderFailed => + 'De wiskundige uitdrukking kon niet worden weergegeven.'; + + @override + String get inlineMath => 'Inline wiskunde'; + + @override + String get displayMath => 'Wiskunde weergeven'; +} diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index 3afc886b..16800457 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -313,6 +313,12 @@ class AppLocalizationsPl extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -346,9 +352,24 @@ class AppLocalizationsPl extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Panel boczny'; diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index a663dc19..8e3f9dea 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -314,6 +314,12 @@ class AppLocalizationsPt extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -347,9 +353,24 @@ class AppLocalizationsPt extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Painel lateral'; diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index be9598ff..938a332b 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -314,6 +314,12 @@ class AppLocalizationsRu extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -347,9 +353,24 @@ class AppLocalizationsRu extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Боковая панель'; diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart new file mode 100644 index 00000000..10119a62 --- /dev/null +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -0,0 +1,3513 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Turkish (`tr`). +class AppLocalizationsTr extends AppLocalizations { + AppLocalizationsTr([String locale = 'tr']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => + 'Markdown dosyaları ve Writerside uyumlu dokümantasyon projeleri için düzenleyici.'; + + @override + String get aboutBusyMark => 'BusyMark Hakkında'; + + @override + String get aboutTagline => 'Markdown ve Writerside Düzenleyicisi'; + + @override + String get aboutLicenseLabel => 'Lisans'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => 'Web sitesi'; + + @override + String get aboutSourceCode => 'Kaynak kodu'; + + @override + String get reportIssue => 'Bir sorunu bildirin'; + + @override + String get feedbackCategory => 'Kategori'; + + @override + String get feedbackChooseCategory => 'Bir kategori seçin'; + + @override + String get feedbackCategoryProblem => 'Sorun veya hata'; + + @override + String get feedbackCategoryFeature => 'Özellik isteği'; + + @override + String get feedbackCategoryPrivacySecurity => + 'Gizlilik veya güvenlik endişesi'; + + @override + String get feedbackCategoryUsability => 'Kullanılabilirlik endişesi'; + + @override + String get feedbackCategoryOther => 'Diğer'; + + @override + String get feedbackSubject => 'Konu'; + + @override + String get feedbackMessage => 'Ayrıntılı mesaj'; + + @override + String get feedbackReplyEmail => 'E-postayı yanıtla (isteğe bağlı)'; + + @override + String get feedbackIncludeTechnicalDetails => 'Teknik ayrıntıları ekleyin'; + + @override + String get feedbackTechnicalDetailsDisclosure => + 'Etkinleştirildiğinde bu, yalnızca Linux işletim sistemi sürümünüzü ve BusyMark uygulama yerel ayarını ekler. Hiçbir günlük, dosya, hesap verisi veya başka tanılama eklenmez.'; + + @override + String get feedbackSubmit => 'Gönder'; + + @override + String get feedbackSubmitting => 'Gönderiliyor…'; + + @override + String get feedbackCategoryRequired => 'Bir kategori seçin.'; + + @override + String get feedbackSubjectLength => + 'Konu 3 ila 120 karakter arasında olmalıdır.'; + + @override + String get feedbackMessageLength => + 'Mesaj 10 ila 5.000 karakter arasında olmalıdır.'; + + @override + String get feedbackReplyEmailInvalid => + 'Geçerli bir e-posta adresi girin veya bu alanı boş bırakın.'; + + @override + String get feedbackConnectionFailure => + 'BusyMark bağlanamadı. İnternet bağlantınızı kontrol edip tekrar deneyin.'; + + @override + String get feedbackTimeoutFailure => + 'İstek zaman aşımına uğradı. Tekrar deneyin.'; + + @override + String get feedbackRateLimitedFailure => + 'Bu bağlantıdan çok fazla rapor gönderildi. Bekleyin ve tekrar deneyin.'; + + @override + String get feedbackRejectedFailure => + 'Sunucu bu raporu reddetti. Form alanlarını kontrol edip tekrar deneyin.'; + + @override + String get feedbackServerFailure => + 'Sunucu raporu kabul edemedi. Daha sonra tekrar deneyin.'; + + @override + String feedbackSuccess(String id) { + return 'Geri bildirim gönderildi. Referans Kimliği: $id'; + } + + @override + String get advanced => 'Gelişmiş'; + + @override + String get addToGit => 'Git\'e ekle'; + + @override + String get appearance => 'Görünüm'; + + @override + String get apply => 'Uygula'; + + @override + String get back => 'Geri'; + + @override + String get bottomLeft => 'Sol alt'; + + @override + String get bottomRight => 'Sağ alt'; + + @override + String get cancel => 'İptal'; + + @override + String get choose => 'Seç'; + + @override + String get chooseLocation => 'Konum seçin'; + + @override + String get copy => 'Kopyala'; + + @override + String get copyName => 'Adı kopyala'; + + @override + String get copyFileName => 'Dosya adını kopyala'; + + @override + String get copyPath => 'Yolu kopyala'; + + @override + String get create => 'Oluştur'; + + @override + String get creating => 'Oluşturuluyor...'; + + @override + String get cut => 'Kes'; + + @override + String get promoteSection => 'Bölümü yükselt'; + + @override + String get demoteSection => 'Bölümü düşür'; + + @override + String get moveSectionUp => 'Bölümü yukarı taşı'; + + @override + String get moveSectionDown => 'Bölümü aşağı taşı'; + + @override + String get confirmDeleteSectionTitle => 'Bölüm silinsin mi?'; + + @override + String confirmDeleteSectionMessage(String name) { + return '“$name” ve bölümündeki tüm içerik silinsin mi? Bu geri alınamaz.'; + } + + @override + String get darkTheme => 'Karanlık'; + + @override + String get delete => 'Sil'; + + @override + String get discard => 'Değişiklikleri yok say'; + + @override + String get editor => 'Editör'; + + @override + String get file => 'Dosya'; + + @override + String get fileHistory => 'Dosya Geçmişi'; + + @override + String get folder => 'Klasör'; + + @override + String get insert => 'Ekle'; + + @override + String get keyboardShortcuts => 'Klavye Kısayolları'; + + @override + String get commandPalette => 'Komut Paleti'; + + @override + String get commandPaletteHint => 'Bir komut yazın'; + + @override + String get commandPaletteEmpty => 'Eşleşen komut yok'; + + @override + String get commandUnavailableInContext => + 'Mevcut düzenleyici bağlamında kullanılamıyor'; + + @override + String get lightTheme => 'Açık'; + + @override + String get mainMenu => 'Ana menü'; + + @override + String get fullScreen => 'Tam ekran'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => 'Aç'; + + @override + String get openInFiles => 'Dosya yöneticisinde aç'; + + @override + String get pathActions => 'Yol eylemleri'; + + @override + String get outline => 'Anahat'; + + @override + String get overwrite => 'Üzerine yaz'; + + @override + String get paste => 'Yapıştır'; + + @override + String get pasteWithoutFormatting => 'Biçimlendirmeden yapıştır'; + + @override + String get reading => 'Okuma'; + + @override + String get removeFromRecent => 'Son kullanılanlardan kaldır'; + + @override + String get recent => 'Son'; + + @override + String get redo => 'Yinele'; + + @override + String get save => 'Kaydet'; + + @override + String get search => 'Ara'; + + @override + String get selectAll => 'Tümünü seç'; + + @override + String get settings => 'Ayarlar'; + + @override + String get source => 'Kaynak'; + + @override + String get split => 'Bölünmüş görünüm'; + + @override + String get systemTheme => 'Sistem'; + + @override + String get theme => 'Tema'; + + @override + String get appLanguage => 'Dil'; + + @override + String get systemLanguage => 'Sistem'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => 'Kenar çubuğu paneli'; + + @override + String get topLeft => 'Sol üst'; + + @override + String get topRight => 'Sağ üst'; + + @override + String get undo => 'Geri al'; + + @override + String get validate => 'Doğrula'; + + @override + String get validation => 'Doğrulama'; + + @override + String get viewMode => 'Görünüm modu'; + + @override + String get welcome => 'Hoş geldiniz'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => 'Görseller'; + + @override + String get openMarkdownFile => 'Markdown Dosyasını Aç'; + + @override + String get markdownFileExtensions => '.md veya .markdown'; + + @override + String get openFolderOrWritersideProject => + 'Klasör veya Writerside projesi aç'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown klasörü veya Writerside uyumlu proje'; + + @override + String get noOpenFile => 'Açık dosya yok'; + + @override + String get shortcutDeleteTreeItemDescription => + 'Seçilen Dosyalar öğesini silin veya seçilen konuyu içindekiler tablosundan kaldırın'; + + @override + String get shortcutGroupGeneral => 'Genel'; + + @override + String get shortcutNewDocument => 'Yeni belge'; + + @override + String get shortcutNewDocumentDescription => + 'Markdown dosyası veya Writerside projesi oluştur'; + + @override + String get shortcutOpenDescription => + 'Markdown dosyasını, klasörünü veya Writerside projesini açın'; + + @override + String get shortcutSaveDescription => 'Geçerli belgeyi kaydet'; + + @override + String get shortcutSearchDescription => 'Mevcut çalışma alanında arama yapın'; + + @override + String get shortcutKeyboardShortcutsDescription => + 'Bu klavye kısayolu referansını göster'; + + @override + String get shortcutMarkdownAndHtmlDescription => + 'Markdown ve HTML referansını açın'; + + @override + String get shortcutSettingsDescription => 'BusyMark ayarlarını aç'; + + @override + String get shortcutNextTab => 'Sonraki sekme'; + + @override + String get shortcutNextTabDescription => 'Sonraki açık sekmeye git'; + + @override + String get shortcutPreviousTab => 'Önceki sekme'; + + @override + String get shortcutPreviousTabDescription => 'Önceki açık sekmeye git'; + + @override + String get shortcutCloseTab => 'Sekmeyi kapat'; + + @override + String get shortcutCloseTabDescription => 'Etkin sekmeyi kapat'; + + @override + String get shortcutCloseAllTabs => 'Tüm sekmeleri kapat'; + + @override + String get shortcutCloseAllTabsDescription => 'Tüm açık sekmeleri kapat'; + + @override + String get shortcutGroupTextEditing => 'Metin Düzenleme'; + + @override + String get shortcutSelectAllDescription => + 'Kaynak modunda tüm metni seçin; Editör modunda her bloğu seçmek için iki kez basın'; + + @override + String get shortcutCutDescription => 'Seçilen metni kes'; + + @override + String get shortcutCopyDescription => 'Seçilen metni kopyala'; + + @override + String get shortcutPasteDescription => 'Panodan yapıştır'; + + @override + String get shortcutPastePlainTextDescription => + 'Pano metnini biçimlendirmeden yapıştırma'; + + @override + String get shortcutUndoDescription => 'Son düzenlemeyi geri al'; + + @override + String get shortcutRedoDescription => + 'Geri alınan son düzenlemeyi yeniden yap'; + + @override + String get shortcutInsertIndentation => 'Girinti ekle'; + + @override + String get shortcutInsertIndentationDescription => + 'İmlecin bulunduğu yere girinti ekle'; + + @override + String get shortcutOutdentSource => 'Kaynakta girintiyi azalt'; + + @override + String get shortcutOutdentSourceDescription => + 'Kaynak modunda bir girinti düzeyini kaldırın'; + + @override + String get shortcutEscape => 'Aramayı kapat veya blok seçimini temizle'; + + @override + String get shortcutEscapeDescription => + 'Editör modunda çalışma alanı aramasını kapatın veya bir blok seçimini temizleyin'; + + @override + String get shortcutGroupFormatting => 'Biçimlendirme'; + + @override + String get shortcutBoldDescription => 'Seçili metinde kalın yazıya geçiş yap'; + + @override + String get shortcutItalicDescription => + 'Seçilen metinde italik özelliğini aç/kapat'; + + @override + String get shortcutUnderlineDescription => + 'Seçili metnin altını çizmeyi aç/kapat'; + + @override + String get shortcutLinkDescription => 'Bağlantı ekleme veya düzenleme'; + + @override + String get shortcutInlineCodeDescription => + 'Seçilen metinde satır içi kodu değiştir'; + + @override + String get shortcutStrikethroughDescription => + 'Seçili metnin üstü çizili özelliğini aç/kapat'; + + @override + String get shortcutGroupBlocks => 'Bloklar'; + + @override + String get shortcutParagraphDescription => 'Geçerli bloğu paragrafa ayarla'; + + @override + String get shortcutHeading1Description => + 'Geçerli bloğu Başlık 1 olarak ayarlayın'; + + @override + String get shortcutHeading2Description => + 'Geçerli bloğu Başlık 2\'ye ayarlayın'; + + @override + String get shortcutHeading3Description => + 'Geçerli bloğu Başlık 3\'e ayarlayın'; + + @override + String get shortcutHeading4Description => + 'Geçerli bloğu Başlık 4\'e ayarlayın'; + + @override + String get shortcutHeading5Description => + 'Geçerli bloğu Başlık 5\'e ayarlayın'; + + @override + String get shortcutHeading6Description => + 'Geçerli bloğu Başlık 6\'ya ayarlayın'; + + @override + String get shortcutGroupLists => 'Listeler'; + + @override + String get numberedList => 'Numaralı liste'; + + @override + String get shortcutNumberedListDescription => + 'Numaralı liste formatını değiştir'; + + @override + String get bulletedList => 'Madde işaretli liste'; + + @override + String get shortcutBulletedListDescription => + 'Madde işaretli liste biçimlendirmesini değiştir'; + + @override + String get checklist => 'Kontrol listesi'; + + @override + String get shortcutChecklistDescription => + 'Denetim listesi biçimlendirmesini değiştir'; + + @override + String get shortcutGroupSidebar => 'Kenar çubuğu'; + + @override + String get sidebarViewMenu => 'Kenar çubuğu görünümü'; + + @override + String get createMarkdownFile => 'Markdown dosyası oluştur'; + + @override + String get createMarkdownFileDescription => + 'Kaydedilmemiş bir yerel Markdown belgesi başlatın'; + + @override + String get createWritersideProject => 'Writerside projesi oluştur'; + + @override + String get createWritersideProjectDescription => + 'Yerel, Writerside uyumlu bir proje başlat'; + + @override + String get defaultProjectName => 'Dokümantasyon'; + + @override + String get defaultInstanceName => 'Kullanım Kılavuzu'; + + @override + String get defaultStartTopicTitle => 'Başlarken'; + + @override + String get projectName => 'Proje adı'; + + @override + String get directoryName => 'Klasör adı'; + + @override + String get instanceName => 'Örnek adı'; + + @override + String get instanceId => 'Örnek kimliği'; + + @override + String get startTopicTitle => 'Başlangıç konusu başlığı'; + + @override + String get location => 'Konum'; + + @override + String get projectNameRequired => 'Proje adı gerekli.'; + + @override + String get directoryNameRequired => 'Klasör adı gerekli.'; + + @override + String get useSingleSafeDirectoryName => + 'Tek bir güvenli klasör adı kullanın.'; + + @override + String get useLowercaseIdentifier => + 'Harfler, sayılar, alt çizgiler veya kısa çizgiler içeren küçük harfli bir tanımlayıcı kullanın.'; + + @override + String get startTopicTitleRequired => 'Başlangıç konusu başlığı gerekli.'; + + @override + String get createWritersideProjectFailed => + 'Writerside projesi oluşturulamadı.'; + + @override + String get settingsTitle => 'BusyMark Ayarları'; + + @override + String get autoSave => 'Otomatik Kaydet'; + + @override + String get autoSaveDescription => + 'Kısa bir bekleme gecikmesinden sonra dosya değişikliklerini otomatik olarak kaydedin.'; + + @override + String get wordWrap => 'Satır kaydırma'; + + @override + String get editorFontSize => 'Düzenleyici yazı tipi boyutu'; + + @override + String get validateOnEdit => 'Düzenlemede doğrula'; + + @override + String get clearRecentWorkspaces => 'Son çalışma alanlarını temizle'; + + @override + String get editingButtonsPosition => 'Düğmelerin konumunu düzenleme'; + + @override + String get editingButtonsPositionDescription => + 'Kayan WYSIWYG düzenleme düğmelerinin nerede görüneceğini seçin.'; + + @override + String get editingButtonsDirection => 'Düğmelerin yönünü düzenleme'; + + @override + String get editingButtonsDirectionDescription => + 'Kayan WYSIWYG düzenleme düğmelerinin yatay mı yoksa dikey mi düzenleneceğini seçin.'; + + @override + String get horizontal => 'Yatay'; + + @override + String get vertical => 'Dikey'; + + @override + String get privacy => 'Gizlilik'; + + @override + String get allowRemoteImages => 'Harici görselleri yükle'; + + @override + String get allowRemoteImagesDescription => + 'Markdown önizleme ve düzenleme görsellerinin http ve https URL\'lerinden yüklenmesine izin verin.'; + + @override + String get clearRemoteImagePermissions => 'Harici görsel izinlerini temizle'; + + @override + String get clearRemoteImagePermissionsDescription => + 'Harici görsellerin yüklenmesine izin verilen çalışma alanlarını unutun.'; + + @override + String get clearGitWorkspaceTrust => + 'Güvenilir Git çalışma alanlarını temizleyin'; + + @override + String get clearGitWorkspaceTrustDescription => + 'Daha önce güvenilen çalışma alanları için Git özelliklerini etkinleştirmeden önce sorun.'; + + @override + String get settingsWindowSectionTitle => 'Pencere'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => + 'Başlangıçta önceki çalışma alanını yeniden aç'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'BusyMark başladığında önceki oturumdaki çalışma alanını ve sekmeleri açın.'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + 'Kaydedilmemiş değişikliklerle kapatmadan önce onaylayın'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + 'Belgelerde kaydedilmemiş değişiklikler olduğunda BusyMark\'ı kapatmadan önce sorun.'; + + @override + String get closeUnsavedChangesTitle => 'Kaydedilmemiş değişiklikler'; + + @override + String get closeUnsavedChangesSingleMessage => + 'Bu belgede kaydedilmemiş değişiklikler var. BusyMark\'ı kapatmadan önce değişiklikler kaydedilsin mi?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count belgede kaydedilmemiş değişiklik var. BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?', + one: + '1 belgede kaydedilmemiş değişiklik var. BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?', + zero: 'BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => 'İptal etmek'; + + @override + String get closeUnsavedChangesDiscard => 'At'; + + @override + String get closeUnsavedChangesSave => 'Kaydet'; + + @override + String get currentFile => 'geçerli dosya'; + + @override + String get unsavedChanges => 'Kaydedilmemiş değişiklikler'; + + @override + String unsavedChangesMessage(String fileName) { + return '$fileName\'te kaydedilmemiş değişiklikleriniz var. Devam etmeden önce kaydedilsin mi?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count belgede kaydedilmemiş değişiklik var. Devam etmeden önce kaydedilsin mi?', + one: + '1 belgede kaydedilmemiş değişiklik var. Devam etmeden önce kaydedilsin mi?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => 'Diskteki dosya değiştirildi'; + + @override + String get fileChangedOnDiskMessage => + 'Bu dosya, siz onu açtığınızdan beri diskte değişti. Üzerine yazılsın mı?'; + + @override + String get untitledMarkdownFileName => 'İsimsiz.md'; + + @override + String get unorderedList => 'Sırasız liste'; + + @override + String get orderedList => 'Sıralı liste'; + + @override + String get taskList => 'Görev listesi'; + + @override + String get toggleTaskChecked => 'Görevi değiştir işaretlendi'; + + @override + String get indentListItem => 'Liste öğesine girinti ekle'; + + @override + String get outdentListItem => 'Liste öğesinin çıkıntısı'; + + @override + String get blockquote => 'Blok alıntı'; + + @override + String get codeBlock => 'Kod bloğu'; + + @override + String get codeBlockLanguage => 'Kod bloğu dili'; + + @override + String get image => 'Resim'; + + @override + String get video => 'Video'; + + @override + String get openVideo => 'Videoyu oynat'; + + @override + String get pauseVideo => 'Videoyu duraklat'; + + @override + String get videoUnavailable => 'Video kullanılamıyor'; + + @override + String get videoPreview => 'Video önizlemesi'; + + @override + String get diagnosticWritersideVideoMissingSource => + 'Videonun src özelliği eksik.'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return 'Desteklenmeyen video kaynağı: $source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return 'Video dosyası mevcut değil: $source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return 'Video önizleme görüntüsü mevcut değil: $preview'; + } + + @override + String get inlineImage => 'Satır içi resim'; + + @override + String get table => 'Tablo'; + + @override + String get htmlBlock => 'HTML bloğu'; + + @override + String get htmlContentDefault => 'HTML içeriği'; + + @override + String get shortcutHtmlBlockDescription => 'HTML bloğu ekleme veya düzenleme'; + + @override + String get renderedHtml => 'İşlenen HTML'; + + @override + String get editHtml => 'HTML\'yi düzenle'; + + @override + String get htmlSource => 'HTML kaynağı'; + + @override + String get thematicBreak => 'Yatay ayraç'; + + @override + String get bold => 'Kalın'; + + @override + String get italic => 'İtalik'; + + @override + String get underline => 'Altı çizili'; + + @override + String get strikethrough => 'Üstü çizili'; + + @override + String get inlineCode => 'Satır içi kod'; + + @override + String get link => 'Bağlantı'; + + @override + String get hardLineBreak => 'Zorunlu satır sonu'; + + @override + String get textStyle => 'Metin stili'; + + @override + String get paragraph => 'Paragraf'; + + @override + String get heading1 => 'Başlık 1'; + + @override + String get heading2 => 'Başlık 2'; + + @override + String get heading3 => 'Başlık 3'; + + @override + String get heading4 => 'Başlık 4'; + + @override + String get heading5 => 'Başlık 5'; + + @override + String get heading6 => 'Başlık 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => 'Tabloyu sil'; + + @override + String tableColumnNumber(int columnNumber) { + return 'Sütun $columnNumber'; + } + + @override + String get insertColumnLeft => 'Sola sütun ekle'; + + @override + String get insertColumnRight => 'Sağa sütun ekle'; + + @override + String get deleteColumn => 'Sütunu sil'; + + @override + String get tableAlignmentUnspecified => 'Hizalama: belirtilmemiş'; + + @override + String get tableAlignmentLeft => 'Hizalama: sol'; + + @override + String get tableAlignmentCenter => 'Hizalama: orta'; + + @override + String get tableAlignmentRight => 'Hizalama: sağ'; + + @override + String tableRowNumber(int rowNumber) { + return 'Satır $rowNumber'; + } + + @override + String get insertRowAbove => 'Yukarıya satır ekle'; + + @override + String get insertRowBelow => 'Aşağıya satır ekle'; + + @override + String get deleteRow => 'Satırı sil'; + + @override + String get tableHeaderHint => 'Sütun başlığı'; + + @override + String get tableCellHint => 'Hücre'; + + @override + String get language => 'Dil'; + + @override + String get hideEditingButtons => 'Düzenleme düğmelerini gizle'; + + @override + String get showEditingButtons => 'Düzenleme düğmelerini göster'; + + @override + String get altText => 'Alternatif metin'; + + @override + String get editorPlaceholderText => 'metin'; + + @override + String get editorPlaceholderCode => 'kod'; + + @override + String get editorPlaceholderAltText => 'alternatif metin'; + + @override + String get describeTheImage => 'Resmi açıklayın'; + + @override + String get columns => 'Sütunlar'; + + @override + String get rows => 'Satırlar'; + + @override + String tableHeaderNumber(int columnNumber) { + return 'Sütun başlığı $columnNumber'; + } + + @override + String get tableCellDefault => 'Hücre'; + + @override + String get noImageSource => 'Resim kaynağı yok'; + + @override + String get remoteImageBlocked => 'Harici görsel engellendi'; + + @override + String get remoteImageBlockedTooltip => + 'BusyMark\'ın harici görselleri yükleyip yükleyemeyeceğini seçin.'; + + @override + String get remoteImagesBlockedTitle => 'Harici görseller engellendi'; + + @override + String get remoteImagesBlockedMessage => + 'Bu belge internetteki görsellere başvuruyor. Bunları yüklemek ağ bilgilerini görselin barındırıldığı sunucuya açığa çıkarabilir.'; + + @override + String get loadRemoteImagesForWorkspace => 'Bu çalışma alanı için yükleme'; + + @override + String get alwaysLoadRemoteImages => 'Harici görselleri her zaman yükle'; + + @override + String get hideSidebar => 'Kenar çubuğu panelini gizle'; + + @override + String get showSidebar => 'Kenar çubuğu panelini göster'; + + @override + String get showPreview => 'Önizlemeyi göster'; + + @override + String get hidePreview => 'Önizlemeyi gizle'; + + @override + String get workspaceKindUnsavedMarkdown => 'Kaydedilmemiş Markdown dosyası'; + + @override + String get workspaceKindSingleMarkdown => 'Tek Markdown dosyası'; + + @override + String get workspaceKindMarkdownFolder => 'Markdown klasörü'; + + @override + String get workspaceKindWritersideModule => 'Writerside modülü'; + + @override + String get problems => 'Sorunlar'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tanılama', + one: '1 tanılama', + zero: 'Tanılama yok', + ); + return '$_temp0'; + } + + @override + String get files => 'Dosyalar'; + + @override + String get toc => 'İçindekiler'; + + @override + String get tocActions => 'İçindekiler eylemleri'; + + @override + String get markdownUnsaved => 'Kaydedilmemiş Markdown'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count dosya', + one: '1 dosya', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => 'Dosya yok'; + + @override + String get newFile => 'Yeni dosya'; + + @override + String get noWritersideToc => 'Writerside TOC\'si yok'; + + @override + String get tocSection => 'İçindekiler bölümü'; + + @override + String get newTopic => 'Yeni konu'; + + @override + String get newChildTopic => 'Yeni alt konu'; + + @override + String get newSiblingTopic => 'Yeni kardeş konu'; + + @override + String get renameTopicFile => 'Konu dosyasını yeniden adlandır'; + + @override + String get topicPlacement => 'İçindekiler yerleşimi'; + + @override + String get tocRoot => 'TOC kökünde'; + + @override + String get afterSelectedTopic => 'Konu seçildikten sonra'; + + @override + String get insideSelectedTopic => 'Seçilen konunun içinde'; + + @override + String get pasteAfterTopic => 'Sonrasına yapıştır'; + + @override + String get pasteAsChildTopic => 'Alt konu olarak yapıştır'; + + @override + String get removeFromToc => 'TOC\'den kaldır'; + + @override + String get confirmRemoveFromTocTitle => 'TOC\'den kaldırılsın mı?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return '$name bu içindekiler tablosundan kaldırılsın mı? Konu dosyası saklanacaktır.'; + } + + @override + String get confirmDeleteTopicTitle => 'Konu dosyası silinsin mi?'; + + @override + String confirmDeleteTopicMessage(String name) { + return '$name silinip tüm içindekilerden kaldırılsın mı? Bu geri alınamaz.'; + } + + @override + String get safeDeleteTopicFile => 'Konu dosyasını güvenle sil…'; + + @override + String get removeTocElement => 'TOC öğesini kaldır'; + + @override + String get reviewUsages => 'Kullanımları incele'; + + @override + String get deleteTopicFile => 'Konu dosyasını sil'; + + @override + String get removeAction => 'Kaldır'; + + @override + String topicRemovalSummary(String topic) { + return 'Seçili örnekten “$topic” konusunu kaldır. Konu dosyası korunur.'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return '“$topic” konusunu sil ve bu Writerside projesindeki referanslarını güvenle güncelle.'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count alt konu bir seviye yukarı taşınacak.', + one: '1 alt konu bir seviye yukarı taşınacak.', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + 'Bu konu bir Writerside örneğinin başlangıç sayfası olarak kullanılıyor. Devam etmeden önce kullanımlarını inceleyin ve başka bir başlangıç sayfası atayın.'; + + @override + String topicUsagesCount(int count) { + return 'Kullanımlar ($count)'; + } + + @override + String get noBreakingTopicUsages => 'Bozulacak referans bulunamadı.'; + + @override + String get topicUsagesFound => + 'BusyMark bu konuya yönelik aşağıdaki referansları buldu.'; + + @override + String get topicUsageTocElements => 'İçindekiler öğeleri'; + + @override + String get topicUsageStartPages => 'Başlangıç sayfaları'; + + @override + String get topicUsageTopicLinks => 'Konu bağlantıları'; + + @override + String get topicUsageIncludes => 'Dahil etmeler'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count kullanım', + one: '1 kullanım', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => 'Yeniden düzenleme seçenekleri'; + + @override + String get updateUsagesAutomatically => 'Kullanımları otomatik güncelle'; + + @override + String get updateUsagesAutomaticallyDescription => + 'İçindekiler referanslarını ve içeriklerini kaldırın ve bağlantı metnini koruyun.'; + + @override + String get manualUsageUpdatesRequired => + 'Bazı kullanımlar bu yeniden düzenleme işleminden önce el ile değişiklik yapılmasını gerektirir.'; + + @override + String get setRedirectTo => 'Yönlendirme hedefi:'; + + @override + String get noRedirectDescription => 'Eski yayımlanmış sayfayı yönlendirme.'; + + @override + String get redirectTarget => 'Yönlendirme hedefi'; + + @override + String get remainingUsagesBlockRemoval => + 'Devam etmeden önce kalan kullanımları inceleyin ve güncelleyin veya mümkün olduğunda otomatik güncellemeleri etkinleştirin.'; + + @override + String usagesOfTopic(String topic) { + return '$topic konusunun kullanımları'; + } + + @override + String get noUsagesFound => 'Hiçbir kullanım bulunamadı'; + + @override + String get outsideSelectedInstance => 'seçilen örneğin dışında'; + + @override + String get doRefactor => 'Yeniden düzenle'; + + @override + String get orphanTopicTitle => 'Konu dosyası artık kullanılmıyor'; + + @override + String get keepTopicFile => 'Konu Dosyasını Sakla'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic” artık bu Writerside projesinin hiçbir yerinde kullanılmıyor. Dosyayı silin veya başka bir örnekte kullanmak üzere saklayın.'; + } + + @override + String get defaultNewTopicTitle => 'Yeni konu'; + + @override + String get topicTitle => 'Konu başlığı'; + + @override + String get fileName => 'Dosya adı'; + + @override + String get topicTitleRequired => 'Konu başlığı zorunludur.'; + + @override + String get fileNameRequired => 'Dosya adı gerekli.'; + + @override + String get rename => 'Yeniden adlandır'; + + @override + String get confirmDeleteFileTitle => 'Dosya silinsin mi?'; + + @override + String get confirmDeleteFolderTitle => 'Klasör silinsin mi?'; + + @override + String confirmDeleteFileMessage(String name) { + return '$name silinsin mi? Bu geri alınamaz.'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return '$name ve içindeki tüm dosyalar silinsin mi? Bu geri alınamaz.'; + } + + @override + String get useSingleSafeFileName => 'Tek bir güvenli dosya adı kullanın.'; + + @override + String useExpectedExtension(String extension) { + return 'Seçilen format için $extension uzantısını kullanın.'; + } + + @override + String get useIdentifierCharacters => + 'Uzantının önünde harf, rakam, alt çizgi veya kısa çizgi kullanın.'; + + @override + String get topicIdAlreadyExists => 'Konu kimliği zaten mevcut.'; + + @override + String get createWritersideTopicFailed => 'Writerside konusu oluşturulamadı.'; + + @override + String get noOutline => 'Anahat yok'; + + @override + String expandKind(String kind) { + return '$kind öğesini genişlet'; + } + + @override + String collapseKind(String kind) { + return '$kind öğesini daralt'; + } + + @override + String get foldKindSection => 'bölüm'; + + @override + String get foldKindList => 'liste'; + + @override + String get foldKindQuote => 'alıntı'; + + @override + String get foldKindTag => 'etiket'; + + @override + String get sourceSearchPreviousMatch => 'Önceki eşleşme'; + + @override + String get sourceSearchNextMatch => 'Sonraki eşleşme'; + + @override + String get sourceSearchCaseSensitive => 'Harfe duyarlı'; + + @override + String get sourceSearchWholeWord => 'Tam sözcük'; + + @override + String get sourceSearchRegex => 'Düzenli ifade'; + + @override + String get sourceSearchReplacement => 'Şununla değiştir:'; + + @override + String get sourceSearchReplaceCurrent => 'Geçerli olanı değiştir'; + + @override + String get sourceSearchReplaceAndFindNext => 'Değiştir ve sonrakini bul'; + + @override + String get sourceSearchReplaceAll => 'Tümünü değiştir'; + + @override + String get workspaceReplace => 'Çalışma alanında değiştir'; + + @override + String get reviewReplacements => 'Değiştirmeleri incele'; + + @override + String get applyReplacements => 'Değişiklikleri uygula'; + + @override + String get skippedFiles => 'Atlanan dosyalar'; + + @override + String get workspaceReplaceDirtyBuffer => 'Kaydedilmemiş düzenleyici içeriği'; + + @override + String get workspaceReplaceDiskContent => 'Kaydedilen disk içeriği'; + + @override + String selectFileMatches(int count) { + return 'Tüm $count eşleşmeyi seç'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return '$files dosyada $matches eşleşme değiştirildi; $skipped dosya atlandı.'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Son satır sonu var'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Son satır sonu yok'; + } + + @override + String get normalizeLineEndings => 'Satır sonlarını normalleştir'; + + @override + String get mixedLineEndingsSavePrompt => + 'Bu belge karışık satır sonları içeriyor. Bir format seçin.'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName karışık satır sonları kullanır. Değiştirmeden önce kullanılacak formatı seçin.'; + } + + @override + String get workspaceReplaceIssueOversized => + 'Büyük boyutlu bir dosya atlandı.'; + + @override + String get workspaceReplaceIssueUnreadable => 'Okunamayan bir dosya atlandı.'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => + 'Geçerli UTF-8 olmayan bir dosya atlandı.'; + + @override + String get workspaceReplaceIssueTruncated => 'Değiştirme önizlemesi kesildi.'; + + @override + String get workspaceReplaceIssueFileChanged => + 'Önizlemeden sonra değişen bir dosya atlandı.'; + + @override + String get workspaceReplaceIssueBufferChanged => + 'Önizlemeden sonra değişen düzenleyici arabelleği atlandı.'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + 'Değiştirmeden önce LF veya CRLF normalizasyonunu seçin.'; + + @override + String get workspaceReplaceIssuePartialConflict => + 'Dosya aynı anda değiştiği için geri alma durduruldu. Bazı değişiklikler kalabilir; yeri değiştirilen içerik aşağıdaki yolda korundu.'; + + @override + String get workspaceReplaceIssueApplyFailed => + 'İncelenen değiştirme işlemi gerçekleştirilemedi; hiçbir dosya değiştirilmedi.'; + + @override + String externalChangesTitle(String fileName) { + return 'Harici değişiklikler — $fileName'; + } + + @override + String get externalFileDeleted => 'Bu dosya diskte silindi.'; + + @override + String get externalFileChanged => + 'Kaydedilmemiş düzenlemeleriniz varken bu dosya diskte değişti.'; + + @override + String recoveredDocumentReview(String fileName) { + return '$fileName için kaydedilmemiş içerik kurtarıldı. İnceleyin, ardından kaydedin, farklı kaydedin veya atın.'; + } + + @override + String get compare => 'Karşılaştır'; + + @override + String get reloadFromDisk => 'Diskten Yeniden Yükle'; + + @override + String get keepMine => 'Benimkini koru'; + + @override + String get saveAs => 'Farklı Kaydet'; + + @override + String get sourceSearchInvalidRegex => 'Geçersiz düzenli ifade'; + + @override + String get sourceLargeFileFeaturesPaused => + 'Büyük dosya: vurgulama ve katlama duraklatıldı'; + + @override + String get nothingToRead => 'Okunacak bir şey yok'; + + @override + String get admonition => 'Bilgi kutusu'; + + @override + String get quote => 'Alıntı'; + + @override + String get note => 'Not'; + + @override + String get tip => 'İpucu'; + + @override + String get warning => 'Uyarı'; + + @override + String get tabs => 'Sekmeler'; + + @override + String get tab => 'Sekme'; + + @override + String get procedure => 'Prosedür'; + + @override + String get step => 'Adım'; + + @override + String get topic => 'Konu'; + + @override + String get chapter => 'Bölüm'; + + @override + String couldNotOpenTarget(String target) { + return '$target açılamadı'; + } + + @override + String linkTargetNotFound(String targetPath) { + return 'Bağlantı hedefi bulunamadı: $targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => + 'Bu dosya türü düzenleyicide açılamıyor'; + + @override + String anchorNotFound(String anchor) { + return 'Bağlantı bulunamadı: $anchor'; + } + + @override + String get noProblemsFound => 'Hiçbir sorun bulunamadı'; + + @override + String get noResults => 'Sonuç yok'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - Satır $lineNumber'; + } + + @override + String get untitledResult => 'Başlıksız sonuç'; + + @override + String get documentKindMarkdownFile => 'Markdown dosyası'; + + @override + String get documentKindWritersideMarkdownTopic => + 'Writerside Markdown konusu'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML konusu'; + + @override + String get documentKindWritersideTree => 'Writerside ağacı'; + + @override + String get documentKindConfigurationFile => 'Yapılandırma dosyası'; + + @override + String get documentKindVariablesFile => 'Değişkenler dosyası'; + + @override + String get documentKindCategoriesFile => 'Kategoriler dosyası'; + + @override + String get documentKindResourceFile => 'Kaynak dosyası'; + + @override + String workspaceErrorOpenFailed(String error) { + return 'Açma başarısız oldu: $error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Writerside projesi oluşturulamadı: $error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Writerside konusu oluşturulamadı: $error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return 'Dosya açılamadı: $error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + 'Bu Markdown dosyasının nereye kaydedileceğini seçin.'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + 'Kaydetme engellendi: diskteki dosya değiştirildi.'; + + @override + String workspaceErrorSaveFailed(String error) { + return 'Kaydetme başarısız oldu: $error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return 'Dosya işlemi başarısız oldu: $error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return 'Doğrulama başarısız oldu: $error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count kaydedilmemiş belge kurtarıldı. Kaydetmeden veya silmeden önce her birini inceleyin.', + one: + '1 kaydedilmemiş belge kurtarıldı. Kaydetmeden veya silmeden önce inceleyin.', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count hasarlı kurtarma kaydı geri yüklenemedi. Geçerli kurtarma kayıtları kullanılabilir durumda.', + one: + 'Hasarlı bir kurtarma kaydı geri yüklenemedi. Özgün kurtarma dosyası incelenmek üzere korundu.', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return 'Yol mevcut değil: $path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return 'Hedef dizin zaten mevcut ve boş değil: $path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return 'Hedef yol zaten mevcut ve bir dizin değil: $path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return 'Oluşturulan dosya zaten mevcut: $path'; + } + + @override + String get errorParentDirectoryRequired => 'Ana dizin gerekli.'; + + @override + String errorParentDirectoryMissing(String path) { + return 'Ana dizin mevcut değil: $path'; + } + + @override + String errorDirectoryMissing(String path) { + return 'Dizin mevcut değil: $path'; + } + + @override + String errorPathAlreadyExists(String path) { + return 'Yol zaten mevcut: $path'; + } + + @override + String get errorFileNameRequired => 'Dosya adı gerekli.'; + + @override + String get errorFileNameUnsafe => + 'Dosya adı tek bir güvenli yol bölümü olmalıdır.'; + + @override + String get errorFileOperationInvalidTarget => + 'Bir klasör kendi içine taşınamaz.'; + + @override + String get errorFileOperationOutsideRoot => + 'Dosya işlemi çalışma alanının içinde kalmalıdır.'; + + @override + String get errorFileOperationRoot => + 'Çalışma alanı kökü dosya ağacından değiştirilemez.'; + + @override + String get errorProjectNameRequired => 'Proje adı gerekli.'; + + @override + String get errorDirectoryNameRequired => 'Klasör adı gerekli.'; + + @override + String get errorDirectoryNameUnsafe => + 'Klasör adı tek bir güvenli yol bölümü olmalıdır.'; + + @override + String get errorInstanceIdInvalid => + 'Örnek kimliği küçük harfle başlamalı ve yalnızca küçük harfler, sayılar, alt çizgiler ve kısa çizgiler içermelidir.'; + + @override + String get errorTopicFileInvalid => + 'Konu dosyası adı, yol ayırıcıları olmayan bir Markdown dosya adı olmalıdır.'; + + @override + String get errorTopicTitleRequired => 'Konu başlığı zorunludur.'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Writerside modül kökü mevcut değil: $path'; + } + + @override + String get errorWritersideModuleNotOpen => + 'Konu oluşturmak için Writerside modülünün açık olması gerekir.'; + + @override + String get errorWritersideInstanceTreeMissing => + 'Writerside modülünün örnek ağacı yoktur.'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside ağaç dosyası mevcut değil: $path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return 'Konu Kimliği \"$topicId\" bu yardım modülünde zaten mevcut.'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return 'Konu dosyası zaten mevcut: $path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return 'Referans konusu seçilen ağaçta mevcut değil: $topic'; + } + + @override + String get errorWritersideTocNodeMissing => + 'Seçilen TOC girişi artık mevcut değil.'; + + @override + String get errorWritersideTocInvalidMove => + 'Bir TOC girişi kendisine veya alt öğelerinden birine taşınamaz.'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return '$topic başlangıç konusu silinemez. Önce başka bir başlangıç sayfası seçin.'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Writerside konu dosyaları için Güvenli Silme\'yi kullanın.'; + + @override + String get errorWritersideTopicUsageScanFailed => + 'Konu kullanımı taraması tamamlanamadı. Hiçbir dosya değiştirilmedi.'; + + @override + String get errorWritersideTopicUsagesRemain => + 'Bazı konu kullanımları hâlâ dikkat gerektiriyor. Devam etmeden önce bunları inceleyin.'; + + @override + String get errorWritersideRedirectInvalid => + 'Seçilen yönlendirme hedefi artık geçerli değil. Tekrar seçin.'; + + @override + String errorWritersideRollbackFailed(String paths) { + return 'Konu kaldırma işlemi tamamen geri alınamadı. Devam etmeden önce şu yolları inceleyin: $paths'; + } + + @override + String get errorTopicsRootUnsafe => + 'Konu kökü güvenli bir göreli dizin olmalıdır.'; + + @override + String get errorTopicFileNameUnsafe => + 'Konu dosyası adı tek bir güvenli yol bölümü olmalıdır.'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return 'Konu dosyası uzantısı seçilen formatla ($extension) eşleşmelidir.'; + } + + @override + String get errorTopicFileNameInvalid => + 'Konu dosyası adı yalnızca harf, rakam, alt çizgi ve kısa çizgi içermelidir.'; + + @override + String errorUnknown(String code) { + return 'Bilinmeyen hata: $code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return 'Dosya meta verileri okunamadı: $error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + 'Büyük çalışma alanı algılandı. Uygulamanın duyarlı kalması için bazı dosyalar atlandı.'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return 'Çalışma alanı girişi incelenemedi: $error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => + 'Dosya beta otomatik ayrıştırma sınırından daha büyük.'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Markdown dosyası okunamadı: $error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + 'Biçimi bozuk Writerside başlık öznitelik bloğu.'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return 'Yinelenen başlık kimliği \"$id\".'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + 'Ek üst düzey H1 başlıkları bölümler olarak ele alınır.'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown konusunun H1 veya frontmatter başlığı yok.'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => + 'XML konusunun başlığı eksik.'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return '\"$fileName\" konusunun başlığı eksik.'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => + 'Frontmatter kapatılmamış.'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => 'Güvenli olmayan HTML öğesi.'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return 'Bağlantı hedefi mevcut değil: $targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return '\"$anchor\" çapası mevcut değil.'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return '\"$destination\" görselinde alternatif metin eksik.'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return 'Resim mevcut değil: $destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return 'Geçersiz XML: $message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg kökü olmalıdır.'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'snippet bildiriminde src eksik.'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'instance-groups bildiriminde src eksik.'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return 'Desteklenmeyen tuş haritaları modu: $mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'Instance bildiriminde src eksik.'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg bir instance kaydetmiyor.'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree kökü olmalıdır.'; + + @override + String get diagnosticWritersideTreeMissingId => + 'Instance profilinde kimlik eksik.'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return 'Ağaç dosyası kökü \"$id\" instance kimliğiyle eşleşmiyor.'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + 'Kitaplık olmayan instance\'ın başlangıç sayfası eksik.'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return '\"$startPage\" başlangıç sayfası mevcut değil.'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return 'Bu instance\'ın TOC\'sinde \"$topic\" konusu birden fazla kez görünüyor.'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + 'Değişken bildiriminin adı ve değeri olmalıdır.'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return '\"$name\" değişkeni birden fazla kez bildirildi.'; + } + + @override + String get diagnosticWritersideCategoryMissingId => + 'Kategorinin kimliği eksik.'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return '\"$id\" kategorisi birden fazla kez bildirildi.'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return 'Kategori sırası \"$order\" birden fazla kez bildirildi.'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + '.topic kökü olmalıdır.'; + + @override + String get diagnosticWritersideTopicMissingRootId => + 'XML konusunun kök kimliği eksik.'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML konu kök kimliği \"$id\", \"$expectedId\" dosya adıyla eşleşmelidir.'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return 'Öğe kimliği \"$elementId\" birden fazla görünüyor.'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => + '\'da href eksik.'; + + @override + String get diagnosticWritersideConfigMissing => + 'Writerside modu için writerside.cfg gereklidir.'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return 'Yapılandırılmış yapı yapılandırma dizini eksik: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return 'Yapılandırılmış API spesifikasyonları dizini eksik: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return 'Yapılandırılmış snippet dizini eksik: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return 'Yapılandırılmış değişkenler dosyası eksik: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return 'Yapılandırılmış kategoriler dosyası eksik: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return 'Yapılandırılmış instance grupları dosyası eksik: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return 'Kayıtlı instance ağacı \"$source\" mevcut değil.'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return 'Konu dosyası okunamadı: $error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return 'Varsayılan konu dizini eksik: $relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return 'Yapılandırılmış konular dizini eksik: $relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return 'Yapılandırılmış görüntüler dizini eksik: $relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return 'Öğe kimliği \"$id\" birden fazla görünüyor.'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return 'TOC, eksik \"$topic\" konusuna atıfta bulunuyor.'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return 'Harici href \"$href\" geçersiz.'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return '\"%$name%\" değişkeni bildirilmedi.'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return '\"$destination\" konu bağlantısı çözülmüyor.'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return '\"$anchor\" çapası \"$targetName\"te mevcut değil.'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => ' öğesi eksik.'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return 'Kaynak ekle \"$from\" mevcut değil.'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return '\"$elementId\" dahil etme öğesi \"$from\"te mevcut değil.'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'Ayrıca bkz. \"$ref\" kategorisi bildirilmedi.'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return 'Konu referansı \"$reference\" belirsiz.'; + } + + @override + String diagnosticUnknown(String code) { + return 'Bilinmeyen teşhis: $code'; + } + + @override + String get close => 'Kapat'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git farkı'; + + @override + String get gitShowDiff => 'Farkı göster'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return 'eski $oldRange → yeni $newRange'; + } + + @override + String get gitDiffNoLines => 'satır yok'; + + @override + String get gitUnavailableTitle => 'Git kullanılamıyor'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': + 'Git\'i yükleyin veya BusyMark\'i kullanılabilir bir Git çalıştırılabilir dosyası kullanacak şekilde yapılandırın. $reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => + 'Git için bu çalışma alanına güveniyor musunuz?'; + + @override + String get gitTrustRequiredMessage => + 'Git depoları programları kancalar, filtreler ve diğer yapılandırmalar aracılığıyla çalıştırabilir. BusyMark depo verilerini okumadan veya Git eylemlerini etkinleştirmeden önce bu çalışma alanına güvenin.'; + + @override + String get gitTrustWorkspace => 'Çalışma alanına güven'; + + @override + String get gitNotRepositoryTitle => 'Git deposu değil'; + + @override + String get gitNotRepositoryMessage => + 'Bu çalışma alanı Git deposunun içinde değil.'; + + @override + String get gitInitializeRepository => 'Git deposunu başlat'; + + @override + String get gitDetachedHead => 'Ayrık HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return '$commit\'te ayrılmış'; + } + + @override + String get gitNoUpstream => 'Upstream yok'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count gönderilmemiş commit', + one: '1 gönderilmemiş commit', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count çekilecek commit', + one: '1 çekilecek commit', + ); + return '$_temp0'; + } + + @override + String get gitClean => 'Temiz'; + + @override + String get gitConflicts => 'Çatışmalar'; + + @override + String get gitChanges => 'Değişiklikler'; + + @override + String get gitStaged => 'Stage edilmiş'; + + @override + String get gitUnstaged => 'Stage edilmemiş'; + + @override + String get gitHistory => 'Geçmiş'; + + @override + String get gitBranches => 'Dallar'; + + @override + String get gitActions => 'Git işlemleri'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Getir'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit et'; + + @override + String get gitSelectForCommit => 'Commit için seç'; + + @override + String get gitRemoveFromCommit => 'Commit\'ten çıkar'; + + @override + String get gitDiscard => 'Değişikliklerden vazgeç'; + + @override + String get gitOpenFile => 'Dosyayı aç'; + + @override + String get gitMarkResolved => 'Çözüldü olarak işaretle'; + + @override + String get gitUntracked => 'İzlenmiyor'; + + @override + String get gitCommitMessage => 'Commit mesajı'; + + @override + String get gitCommitSelectedFiles => 'Seçili dosyaları commit et'; + + @override + String get gitCommitNoSelectedFiles => + 'Commit etmeden önce en az bir dosyayı stage edin.'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count stage edilmiş dosya', + one: '1 stage edilmiş dosya', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => 'Çalışma alanı dışında'; + + @override + String get gitCommitMessageRequired => 'Bir commit mesajı girin.'; + + @override + String get gitCreateBranch => 'Dal oluştur'; + + @override + String get gitNewBranch => 'Yeni dal'; + + @override + String get gitBranchName => 'Dal adı'; + + @override + String get gitSwitchBranch => 'Dal değiştir'; + + @override + String get gitNoChanges => 'Değişiklik yok'; + + @override + String get gitNoHistory => 'Geçmiş yok'; + + @override + String get gitNoBranches => 'Dal yok'; + + @override + String get gitNoDiff => 'Gösterilecek fark yok'; + + @override + String get gitBinaryFile => 'İkili dosya. BusyMark ikili yamaları göstermez.'; + + @override + String gitBinaryFileInfo(int size) { + return 'İkili dosya ($size bayt). BusyMark ikili yamaları göstermez.'; + } + + @override + String get gitUnsavedChangesBanner => + 'Kaydedilmemiş düzenleyici değişiklikleri kaydedilene kadar dahil edilmez.'; + + @override + String get gitConfirmDiscardTitle => 'Git değişikliklerinden vazgeçilsin mi?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Seçili izlenen dosyalardaki tüm stage edilmiş ve stage edilmemiş değişiklikler HEAD sürümüne geri yüklenecek.', + one: + 'Seçili izlenen dosyadaki tüm stage edilmiş ve stage edilmemiş değişiklikler HEAD sürümüne geri yüklenecek.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Seçili izlenmeyen dosyalar silinecek.', + one: 'Seçili izlenmeyen dosya silinecek.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Seçili dosyalar Git durumlarına göre geri yüklenecek veya silinecek.', + one: 'Seçili dosya Git durumuna göre geri yüklenecek veya silinecek.', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return '$branch\'e geçilsin mi?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'Git başka bir dala geçtikten sonra BusyMark çalışma alanını diskten yeniden yükleyecek.'; + + @override + String get gitConfirmPushSetUpstreamTitle => 'Upstream dalı ayarlansın mı?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return 'Bu dalın upstream\'i yok. Tam olarak bir remote yapılandırılmışsa BusyMark $branch dalını push edip upstream\'i ayarlayabilir.'; + } + + @override + String get gitProjectHistory => 'Proje Geçmişi'; + + @override + String get gitFileHistory => 'Dosya Geçmişi'; + + @override + String get gitFileHistoryRequiresOpenFile => + 'Dosya Geçmişi açık bir Markdown dosyası gerektirir.'; + + @override + String get gitLoadMore => 'Daha Fazla Yükle'; + + @override + String get gitChangesInCommit => 'Bu commit\'teki değişiklikler'; + + @override + String get gitCompareWithCurrent => 'Mevcut sürümle karşılaştır'; + + @override + String get gitRestoreVersion => 'Bu sürümü geri yükle'; + + @override + String get gitConfirmRestoreTitle => 'Bu dosya sürümü geri yüklensin mi?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark mevcut çalışma ağacı dosyasını seçili commit sürümüyle değiştirir. Geri yüklenen dosya stage edilmemiş durumda kalır.'; + + @override + String get gitCommitActions => 'Commit işlemleri'; + + @override + String get gitResetCurrentBranchToHere => 'Mevcut dalı buraya sıfırla…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return '$branch, $commit\'e sıfırlansın mı?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return 'Bu işlem $branch dalını $commit commit\'ine taşır. Git\'in dizini ve çalışma ağacını nasıl güncelleyeceğini seçin.'; + } + + @override + String get gitReset => 'Sıfırla'; + + @override + String get gitResetModeSoft => 'Soft'; + + @override + String get gitResetModeSoftDescription => + 'Yalnızca dalı taşıyın. Dizini ve çalışma ağacını değiştirmeyin; seçili commit ile arasındaki farklar stage edilmiş olarak kalır.'; + + @override + String get gitResetModeMixed => 'Mixed'; + + @override + String get gitResetModeMixedDescription => + 'Dalı taşıyın ve dizini sıfırlayın. Çalışma ağacını değiştirmeyin; farkları stage edilmemiş durumda bırakın.'; + + @override + String get gitResetModeHard => 'Hard'; + + @override + String get gitResetModeHardDescription => + 'Dalı taşıyın ve dizini ve çalışma ağacını sıfırlayın. İzlenen değişiklikler atılır; yolu engelleyen izlenmeyen dosyalar silinebilir.'; + + @override + String get gitResetModeKeep => 'Keep'; + + @override + String get gitResetModeKeepDescription => + 'Yerel değişiklikleri koruyarak dalı taşıyın ve izlenen dosyaları sıfırlayın. Bu değişiklikler sıfırlamayla çakışırsa Git işlemi iptal eder.'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => 'Dosya eylemleri'; + + @override + String get actions => 'Eylemler'; + + @override + String get gitStatusAdded => 'Eklendi'; + + @override + String get gitStatusDeleted => 'Silindi'; + + @override + String get gitStatusRenamed => 'Yeniden adlandırıldı'; + + @override + String get gitStatusCopied => 'Kopyalandı'; + + @override + String get gitStatusUntracked => 'İzlenmiyor'; + + @override + String get gitStatusConflicted => 'Çatışmalı'; + + @override + String get gitStatusIgnored => 'Yoksayıldı'; + + @override + String get gitStatusTypeChanged => 'Tür değiştirildi'; + + @override + String get gitStatusModified => 'Değiştirildi'; + + @override + String get gitStatusUnknown => 'Bilinmiyor'; + + @override + String get gitErrorUnavailable => 'Git kullanılamıyor.'; + + @override + String get gitErrorNotRepository => 'Bu çalışma alanı bir Git deposu değil.'; + + @override + String get gitErrorUnsafePath => + 'BusyMark güvenli olmayan bir Git yolunu engelledi.'; + + @override + String get gitErrorInvalidBranchName => 'Geçerli bir dal adı girin.'; + + @override + String get gitErrorNoRemote => 'Git remote\'u yapılandırılmamış.'; + + @override + String get gitErrorNoUpstream => 'Upstream dalı yapılandırılmamış.'; + + @override + String get gitErrorMultipleRemotes => + 'Birden fazla remote yapılandırılmış. Bu BusyMark sürümünün dışında bir upstream seçin.'; + + @override + String get gitErrorDirtyWorkspace => + 'Dal değiştirmeden önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.'; + + @override + String get gitErrorResetDirtyWorkspace => + 'Geçerli dalı sıfırlamadan önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.'; + + @override + String get gitErrorRestoreStagedFile => + 'Geçmiş bir sürümü geri yüklemeden önce bu dosyayı staging\'den çıkarın.'; + + @override + String get gitErrorResetDetachedHead => 'Sıfırlamadan önce bir dala geçin.'; + + @override + String get gitErrorDiverged => + 'Dallar birbirinden ayrılmış. Birleştirme veya yeniden temellendirme işlemini bu BusyMark sürümünün dışında çözün.'; + + @override + String get gitErrorAuthorIdentity => + 'Git\'in commit atabilmesi için bir yazar adına ve e-posta adresine ihtiyacı var.'; + + @override + String get gitAuthorIdentityTitle => 'Git yazar kimliği'; + + @override + String get gitAuthorIdentityMessage => + 'Git\'in commit\'lerde kullanacağı kimliği girin. BusyMark bu kimliği kaydedecek ve commit\'i yeniden deneyecek.'; + + @override + String get gitAuthorName => 'İsim'; + + @override + String get gitAuthorEmail => 'E-posta'; + + @override + String get gitAuthorIdentityGlobal => 'Tüm depolar için kullanın'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'BusyMark Snap olarak kurulduysa bu ayar BusyMark\'ta açılan tüm depolar için geçerlidir.'; + + @override + String get gitSaveIdentityAndCommit => 'Kimliği kaydet ve commit et'; + + @override + String get gitErrorAuthentication => 'Git kimlik doğrulaması başarısız oldu.'; + + @override + String get gitErrorNetwork => 'Git ağ işlemi başarısız oldu.'; + + @override + String get gitErrorConflict => 'Git çözülmemiş çakışmaları bildirdi.'; + + @override + String get gitErrorCommandFailed => 'Git komutu başarısız oldu.'; + + @override + String get markdownAndHtml => 'Markdown ve HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown blokları'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Markdown kaynağında ve önizlemesinde desteklenen blok yapıları.'; + + @override + String get markdownHtmlInlineFormatting => 'Satır içi biçimlendirme'; + + @override + String get markdownHtmlInlineFormattingDescription => + 'Paragrafların, liste öğelerinin ve tablo hücrelerinin içinde görünebilecek biçimlendirme.'; + + @override + String get markdownHtmlRawHtmlBlocks => 'Ham HTML Blokları'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'BusyMark önizleme widget\'ları aracılığıyla oluşturulan güvenli blok düzeyinde HTML etiketleri.'; + + @override + String get markdownHtmlRawHtmlInline => 'Ham HTML Satır İçi Etiketleri'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + 'Gerçek etiketler gösterilmeden oluşturulan güvenli satır içi HTML etiketleri.'; + + @override + String get markdownHtmlSafety => 'Güvenlik Kuralları'; + + @override + String get markdownHtmlSafetyDescription => + 'Ham HTML, önizleme oluşturmadan önce ayrıştırılır ve arındırılır.'; + + @override + String get markdownHtmlHeadings => 'Başlıklar'; + + @override + String get markdownHtmlParagraphs => 'Paragraflar'; + + @override + String get markdownHtmlLists => 'Listeler'; + + @override + String get markdownHtmlHtmlContainers => 'Konteynerler'; + + @override + String get markdownHtmlHtmlTextBlocks => 'Metin blokları'; + + @override + String get markdownHtmlHtmlFigures => 'Şekiller ve görseller'; + + @override + String get markdownHtmlHtmlPreformatted => 'Önceden biçimlendirilmiş kod'; + + @override + String get markdownHtmlHtmlDisclosure => 'Açıklama blokları'; + + @override + String get markdownHtmlHtmlDescriptionLists => 'Açıklama listeleri'; + + @override + String get markdownHtmlHtmlFormattingTags => 'Etiketleri biçimlendirme'; + + @override + String get markdownHtmlHtmlInlineCodeTags => 'Satır içi kod etiketleri'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => 'Anlamsal metin etiketleri'; + + @override + String get markdownHtmlSanitizedPreview => 'Temizlenmiş önizleme'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + 'İzin verilen HTML, tarayıcıda oluşturulmaz, BusyMark önizleme bloklarına dönüştürülür.'; + + @override + String get markdownHtmlSourcePreserved => 'Kaynak korunur'; + + @override + String get markdownHtmlSourcePreservedDescription => + 'Düzenlenmemiş ham HTML, tam olarak kaynak metin olarak kaydedilir.'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'HTML içindeki Markdown'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + 'Ham HTML içindeki Markdown işaretleri düz metin olarak görüntülenir.'; + + @override + String get markdownHtmlBlockedContent => 'Engellenen etkin içerik'; + + @override + String get markdownHtmlBlockedContentDescription => + 'Komut dosyaları, stiller, çerçeveler, formlar, SVG, MathML, olaylar ve güvenli olmayan özellikler engellenir.'; + + @override + String get markdownHtmlSafeUrls => 'Yalnızca güvenli URL\'ler'; + + @override + String get markdownHtmlSafeUrlsDescription => + 'Bağlantılar http, https, mailto, tel, göreli ve parça URL\'lerine izin verir; güvenli olmayan şemalar engellenir.'; + + @override + String get exportAsPdf => 'PDF olarak dışa aktar'; + + @override + String get pdfExportDescription => + 'Kendi başına kullanılabilen, düzenli bir PDF için sayfa düzenini seçin.'; + + @override + String get pdfRemoteImagesNote => + 'Dışa aktarma sırasında harici görseller indirilmez. Varsa yerel görseller eklenir.'; + + @override + String get pdfPageSize => 'Sayfa boyutu'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter boyutu'; + + @override + String get pdfOrientation => 'Yönlendirme'; + + @override + String get pdfPortrait => 'Portre'; + + @override + String get pdfLandscape => 'Manzara'; + + @override + String get pdfMargins => 'Kenar boşlukları'; + + @override + String get pdfMarginNarrow => 'Dar'; + + @override + String get pdfMarginNormal => 'Standart'; + + @override + String get pdfMarginWide => 'Geniş'; + + @override + String get pdfIncludePageNumbers => 'Sayfa numaralarını dahil et'; + + @override + String get export => 'Dışa aktar'; + + @override + String get exportingPdf => 'PDF dışa aktarılıyor…'; + + @override + String get fileTypePdf => 'PDF belgesi'; + + @override + String pdfExported(String fileName) { + return '$fileName dışa aktarıldı.'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '$fileName, $count uyarı(lar)ıyla birlikte dışa aktarıldı.'; + } + + @override + String get pdfExportUnavailable => + 'PDF dışa aktarma bileşeni eksik. BusyMark\'ı yeniden yükleyin ve tekrar deneyin.'; + + @override + String get pdfExportTimedOut => + 'PDF dışa aktarımı çok uzun sürdü ve durduruldu.'; + + @override + String get pdfExportFailed => + 'BusyMark bu belgeyi PDF olarak dışa aktaramadı.'; + + @override + String get visualizationRendering => 'Oluşturuluyor…'; + + @override + String get visualizationStale => 'Son geçerli görünüm gösteriliyor'; + + @override + String get visualizationShowSource => 'Kaynağı göster'; + + @override + String get visualizationShowRender => 'Görünümü göster'; + + @override + String get visualizationFitWidth => 'Genişliğe sığdır'; + + @override + String get visualizationSaveImage => 'Görseli kaydet'; + + @override + String get visualizationCopyImage => 'Görseli kopyala'; + + @override + String get visualizationImageCopied => 'Resim kopyalandı'; + + @override + String get visualizationOpenApiReference => 'API Referansını Aç'; + + @override + String get visualizationValid => 'Geçerli'; + + @override + String get visualizationInvalid => 'Geçersiz'; + + @override + String get visualizationServers => 'Sunucular'; + + @override + String get visualizationPaths => 'Yollar'; + + @override + String get visualizationOperations => 'Operasyonlar'; + + @override + String get visualizationTags => 'Etiketler'; + + @override + String get visualizationNoOperations => 'Eşleştirme işlemi yok'; + + @override + String get visualizationSearchOperations => 'Arama işlemleri'; + + @override + String get visualizationRenderFailed => 'Bu görselleştirme oluşturulamadı.'; + + @override + String get visualizationRetry => 'Yeniden dene'; + + @override + String visualizationSaved(String fileName) { + return '$fileName kaydedildi'; + } + + @override + String get shortcutExportPdfDescription => + 'Etkin belgeyi veya Writerside modülünü PDF olarak dışa aktarın.'; + + @override + String get instances => 'Örnekler'; + + @override + String get newInstance => 'Yeni örnek'; + + @override + String get newTocLibrary => 'Yeni TOC kitaplığı'; + + @override + String get editInstance => 'Örneği düzenle'; + + @override + String get openTocFile => 'TOC dosyasını aç'; + + @override + String get createInstance => 'Örnek oluştur'; + + @override + String get createTocLibrary => 'İçindekiler kitaplığı oluştur'; + + @override + String get instanceContent => 'İçerik'; + + @override + String get instanceContentSource => 'İçerik kaynağı:'; + + @override + String get emptyInstance => 'Boş örnek'; + + @override + String get markdownFiles => 'Yerel Markdown dosyaları'; + + @override + String get chooseMarkdownFolder => 'Markdown klasörünü seçin'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Markdown dosyalarını içeren bir klasör seçin.'; + + @override + String get instanceAppearance => 'Görünüm'; + + @override + String get instanceColor => 'Simge rengi'; + + @override + String get instanceVersion => 'Sürüm'; + + @override + String instanceVersionInherited(String version) { + return 'Bu alan boş olduğunda proje sürümü $version\'tir.'; + } + + @override + String get instanceWebPath => 'Web yolu'; + + @override + String get instanceStatus => 'Durum'; + + @override + String get instanceStatusRelease => 'release'; + + @override + String get instanceStatusEap => 'EAP'; + + @override + String get instanceStatusDeprecated => 'Kullanımdan kaldırıldı'; + + @override + String get allowSearchEngineIndexing => + 'Arama motoru dizine eklenmesine izin ver'; + + @override + String get allowSearchEngineIndexingDescription => + 'Harici arama motorlarının bu çıktıyı dizine eklemesine izin verin.'; + + @override + String get offlineArtifact => 'Çevrimdışı artefakt'; + + @override + String get offlineArtifactDescription => + 'Kaynakları, yerleşik belgelerin bağımsız olmasını sağlayacak şekilde paketleyin.'; + + @override + String get instanceOutputSettings => 'Çıktı ayarları'; + + @override + String get markdownImportSource => 'Markdown kaynağı'; + + @override + String get markdownImportFiles => 'Markdown dosyaları'; + + @override + String get selectNone => 'Hiçbirini seçme'; + + @override + String markdownFilesFound(int count) { + return '$count Markdown dosyası/dosyaları bulundu'; + } + + @override + String get noMarkdownFilesFound => 'Bu dizinde Markdown dosyası bulunamadı.'; + + @override + String get copyReferencedMedia => 'Başvurulan medyayı kopyala'; + + @override + String get copyReferencedMediaDescription => + 'Göreli yolları koruyarak, seçilen dosyaların referans verdiği yerel görüntüleri ve videoları kopyalayın.'; + + @override + String get instanceIdRenameWarningTitle => + 'Örnek kimliği yeniden adlandırılsın mı?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark, .tree dosyasını yeniden adlandıracak ve Writerside proje referanslarını \"$oldId\"ten \"$newId\"e güncelleyecektir. Yayın komut dosyaları değiştirilmez ve ayrı olarak güncellenmeleri gerekir.'; + } + + @override + String get renameAndUpdateReferences => + 'Referansları yeniden adlandırın ve güncelleyin'; + + @override + String get tocLibraryDescription => + 'Bir TOC kütüphanesi yeniden kullanılabilir bölümleri saklar ve kendi çıktısını üretmez.'; + + @override + String get defaultTocLibraryName => 'Paylaşılan İçindekiler'; + + @override + String get instanceColorAutomatic => 'Otomatik'; + + @override + String get instanceColorBlue => 'Mavi'; + + @override + String get instanceColorGreen => 'Yeşil'; + + @override + String get instanceColorOrange => 'Turuncu'; + + @override + String get instanceColorPurple => 'Mor'; + + @override + String get instanceColorRed => 'Kırmızı'; + + @override + String get instanceColorTeal => 'turkuaz'; + + @override + String get instanceColorYellow => 'Sarı'; + + @override + String get errorWritersideInstanceNameRequired => 'Bir örnek adı girin.'; + + @override + String errorWritersideInstanceIdExists(String id) { + return '\"$id\" kimliğine sahip bir örnek zaten mevcut.'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return 'Örnek ağacı zaten mevcut: $path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Markdown kaynak dizini mevcut değil: $path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + 'İçe aktarılacak en az bir Markdown dosyası seçin.'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return 'Bu, seçilen kaynağın içindeki okunabilir bir Markdown dosyası değil: $path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return 'İçe aktarma, mevcut bir proje dosyasının üzerine yazılmasına neden olur: $path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + 'Örnek dosyalar diskte değiştirildi. Bunları inceleyin ve tekrar deneyin.'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark, örnek değişikliğini tamamen geri alamadı. Devam etmeden önce bu dosyaları inceleyin: $paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + 'İçindekiler kitaplığı Markdown konularını içe aktaramaz.'; + + @override + String get errorWritersideInstanceWebPathInvalid => + 'Web yolu tek bir segmentten oluşmalıdır.'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Writerside örnek yapılandırması geçersiz. Teşhislerini düzeltip tekrar deneyin.'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark örnek değişikliklerini güvenli bir şekilde gerçekleştiremedi.'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return 'Bilinmeyen instance durumu \"$status\". release, eap veya deprecated kullanın.'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return '“$id” örnek kimliği birden fazla ağaç dosyası tarafından kullanılıyor.'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml bir kök öğesine sahip olmalıdır.'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return '$name değeri “$value” doğru veya yanlış olmalıdır.'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + 'Bir öğesi bir örnek kimliği belirtmelidir.'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + 'Bir ağaç hem from hem de element kimliğini belirtmelidir.'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + 'Bir ağaç \'i bir kimlik belirtmelidir.'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + 'Çapraz örnek TOC referansı hem ref hem de in\'i belirtmelidir.'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + 'Bir TOC öğesi birden fazla konuyu, referansı, bağlantıyı veya yönlendirmeyi hedefleyemez.'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return 'Ağaç öğesi kimliği \"$id\" birden fazla kez bildirildi.'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + 'Örnek grupları dosyasında bir kök öğesi bulunmalıdır.'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + 'Bir örnek grubunun boş olmayan bir kimlik ve örnek listesi belirtmesi gerekir.'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return 'Örnek grubu kimliği \"$id\" birden fazla kez bildirildi.'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return 'TOC şunları içerir: “$source#$id”, “$origin” harici modülüne aittir ve bu çalışma alanında genişletilemez.'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return '\"$id\" ağaç öğesi kayıtlı \"$source\" ağacında mevcut değil.'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return '“$source#$id” içeren ağaç bir döngü oluşturur.'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return 'Örnek koşulu, bilinmeyen \"@$group\" grubuna referans veriyor.'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return 'Çapraz örnek referansı, bilinmeyen \"$instance\" örneğini hedefliyor.'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return '“$topic” konusu başvurulan “$instance” örneğinde değil.'; + } + + @override + String get download => 'İndirmek'; + + @override + String get exportWritersideAsPdf => 'Writerside\'ı PDF olarak dışa aktar'; + + @override + String get writersidePdfContent => 'İçeriği dışa aktar'; + + @override + String get writersidePdfPage => 'Sayfa'; + + @override + String get exportingWritersidePdf => 'Writerside PDF\'si dışa aktarılıyor…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => 'Yerel Ollama'; + + @override + String get aiDisabled => 'Devre dışı'; + + @override + String get aiLocalOnlyDescription => + 'AI düzenlemesi yalnızca yereldir. BusyMark yalnızca seçili sağlayıcıya gösterilen bağlamı gönderir ve hiçbir öneriyi incelemeden uygulamaz.'; + + @override + String get aiProvider => 'AI sağlayıcısı'; + + @override + String get aiDefaultProvider => 'Varsayılan sağlayıcı'; + + @override + String get aiConfigureProvider => 'Sağlayıcıyı yapılandır'; + + @override + String get aiChooseProvider => 'AI sağlayıcısını seç'; + + @override + String get aiOllamaEndpoint => 'Ollama uç noktası'; + + @override + String get aiOllamaModel => 'Ollama modeli'; + + @override + String get aiTestConnection => 'Bağlantıyı test edin'; + + @override + String get aiTestingConnection => 'Test ediliyor…'; + + @override + String aiConnectionReady(int count) { + return 'Bağlandı. $count yüklü model bulundu.'; + } + + @override + String get aiNoModels => 'Hiçbir model seçilmedi.'; + + @override + String get aiConnectionFailed => + 'BusyMark, AI metin oluşturma işlemini doğrulayamadı.'; + + @override + String get aiConfigureFirst => + 'Bir AI sağlayıcısını etkinleştirin ve Ayarlar → AI bölümünde bir modeli doğrulayın.'; + + @override + String get aiEditWithAi => 'AI ile düzenle'; + + @override + String get aiRefineWithAi => 'AI ile iyileştir'; + + @override + String get aiInstruction => 'Talimat'; + + @override + String get aiChangeTarget => 'Neler değişebilir?'; + + @override + String get aiSharedContext => 'AI ile paylaşılan bağlam'; + + @override + String get aiTargetSelection => 'Seçilen içerik'; + + @override + String get aiTargetInsertAfterBlock => 'Geçerli bloktan sonra ekle'; + + @override + String get aiTargetCurrentBlock => 'Geçerli blok'; + + @override + String get aiTargetCurrentSection => 'Mevcut bölüm'; + + @override + String get aiTargetCompleteDocument => 'Belgenin tamamı'; + + @override + String get aiContextNone => 'Belge bağlamı yok'; + + @override + String get aiContextSelection => 'Seçilen içerik'; + + @override + String get aiContextCurrentBlock => 'Geçerli blok'; + + @override + String get aiContextCurrentSection => 'Mevcut bölüm'; + + @override + String get aiContextCompleteDocument => 'Belgenin tamamı'; + + @override + String get aiGenerating => 'Teklif oluşturuluyor…'; + + @override + String get aiProposal => 'AI önerisi'; + + @override + String get aiGenerateProposal => 'Teklif oluştur'; + + @override + String aiContextDisclosure(int count) { + return 'Seçilen sağlayıcı, görüntülenen bağlamdan $count karakterlerini alacaktır.'; + } + + @override + String get aiOriginal => 'Orijinal'; + + @override + String get aiSuggested => 'Önerilen'; + + @override + String get aiApplyProposal => 'Teklifi uygula'; + + @override + String aiTokenUsage(int input, int output) { + return '$input girdi tokenı · $output çıktı tokenı'; + } + + @override + String get aiStaleProposal => + 'Bu teklif oluşturulurken belge değiştirildi. Eylemi yeniden çalıştırın.'; + + @override + String get gitAiStagedChangesChanged => + 'Bu commit mesajı oluşturulurken stage edilmiş değişiklikler değişti. İşlemi yeniden çalıştırın.'; + + @override + String get aiViewContext => 'Gönderilen bağlamı görüntüle'; + + @override + String get aiReviewExactContent => 'Tam içeriği incele'; + + @override + String get aiContentToChange => 'Değiştirilecek içerik'; + + @override + String get aiContentSentToAi => 'AI\'ye gönderilen içerik'; + + @override + String get aiApiKey => 'API anahtarı'; + + @override + String get aiApiKeyStoredHint => + 'Sistemin kimlik bilgileri deposunda bir anahtar saklanır'; + + @override + String get aiApiKeyEnterHint => 'Sağlayıcının API anahtarını girin'; + + @override + String get aiReplaceApiKey => 'API anahtarını değiştir'; + + @override + String get aiSaveApiKey => 'API anahtarını güvenle kaydet'; + + @override + String get aiRemoveApiKey => 'Kaydedilen API anahtarını kaldır'; + + @override + String get aiCredentialSaved => + 'API anahtarı sistem kimlik bilgileri deposuna kaydedildi.'; + + @override + String get aiCredentialRemoved => 'Kaydedilen API anahtarı kaldırıldı.'; + + @override + String get aiModelRouting => 'Model yönlendirme'; + + @override + String get aiAutomaticRouting => 'Göreve göre otomatik'; + + @override + String get aiFixedModelRouting => 'Seçilen modeli kullan'; + + @override + String get aiPreferredModel => 'Tercih edilen model'; + + @override + String get aiModel => 'AI modeli'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests istek · $input girdi tokenı · $output çıktı tokenı'; + } + + @override + String aiCloudConsentTitle(String provider) { + return '$provider\'e içerik gönderilsin mi?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return '$provider\'i etkinleştir'; + } + + @override + String get aiCloudConsentMessage => + 'Yalnızca her AI inceleme iletişim kutusunda gösterilen içerik gönderilir. İstekler durum bilgisine sahip değildir, tekliflerin incelenmesi gerekir ve API anahtarı Linux sisteminin kimlik bilgileri deposunda saklanır.'; + + @override + String aiCloudConsentRequired(String provider) { + return 'Önce Ayarlar → AI bölümünden $provider ile veri paylaşımını onaylayın.'; + } + + @override + String aiGenerationVerified(String model, int count) { + return 'Oluşturma $model ile doğrulandı. $count uyumlu model kullanılabilir.'; + } + + @override + String get aiColdStartObserved => + 'Yerel model için soğuk başlangıç gözlemlendi.'; + + @override + String get aiNoCompatibleModels => + 'Uyumlu bir metin oluşturma modeli mevcut değil.'; + + @override + String get aiEnableProvider => 'Önce bir AI sağlayıcısını etkinleştirin.'; + + @override + String get aiDraftCommitMessage => 'Taslak commit mesajı'; + + @override + String get aiDrafting => 'Taslak hazırlanıyor…'; + + @override + String get aiDraftWithAi => 'AI ile taslak oluştur'; + + @override + String get generateOrUpdateMarkdownToc => + 'İçindekiler tablosu oluştur/güncelle'; + + @override + String get markdownTocTitle => 'İçindekiler'; + + @override + String markdownTocUpdated(int count) { + return 'İçindekiler tablosu $count girişle güncellendi.'; + } + + @override + String get markdownTocNoHeadings => + 'İçindekiler tablosu oluşturmadan önce en az bir bölüm başlığı ekleyin.'; + + @override + String get markdownTocMalformedMarkers => + 'BusyMark içindekiler tablosu işaretçileri eksik, yinelenmiş veya hatalı.'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return '$level başlık seviyesi $previousLevel seviyesini takip eder; bölümün iç içe geçmesini inceleyin.'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + 'Bağlantı metni boş; amacını açıklayan erişilebilir bir ad sağlayın.'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return '“$text” bağlantı metninin bağlamda amacını açıklayıp açıklamadığını inceleyin.'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + 'Tablo başlığı hücreleri sütunlarını tanımlamalıdır; her boş başlığı tamamlayın.'; + + @override + String get mathRenderFailed => 'Matematiksel ifade işlenemedi.'; + + @override + String get inlineMath => 'Satır içi matematik'; + + @override + String get displayMath => 'Blok matematik'; +} diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart index 410a5c2b..44aa0bb4 100644 --- a/lib/l10n/generated/app_localizations_uk.dart +++ b/lib/l10n/generated/app_localizations_uk.dart @@ -313,6 +313,12 @@ class AppLocalizationsUk extends AppLocalizations { @override String get languageGerman => 'Deutsch'; + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + @override String get languageItalian => 'Italiano'; @@ -346,9 +352,24 @@ class AppLocalizationsUk extends AppLocalizations { @override String get languageHindi => 'हिन्दी'; + @override + String get languageIndonesian => 'Bahasa Indonesia'; + @override String get languageEstonian => 'Eesti'; + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + @override String get toggleSidebar => 'Бічна панель'; diff --git a/lib/l10n/generated/app_localizations_vi.dart b/lib/l10n/generated/app_localizations_vi.dart new file mode 100644 index 00000000..e3198281 --- /dev/null +++ b/lib/l10n/generated/app_localizations_vi.dart @@ -0,0 +1,3508 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Vietnamese (`vi`). +class AppLocalizationsVi extends AppLocalizations { + AppLocalizationsVi([String locale = 'vi']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => + 'Trình biên tập tệp Markdown và các dự án tài liệu tương thích với Writerside.'; + + @override + String get aboutBusyMark => 'Giới thiệu BusyMark'; + + @override + String get aboutTagline => 'Trình biên tập Markdown và Writerside'; + + @override + String get aboutLicenseLabel => 'Giấy phép'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => 'Trang web'; + + @override + String get aboutSourceCode => 'Mã nguồn'; + + @override + String get reportIssue => 'Báo cáo sự cố'; + + @override + String get feedbackCategory => 'Danh mục'; + + @override + String get feedbackChooseCategory => 'Chọn một danh mục'; + + @override + String get feedbackCategoryProblem => 'Vấn đề hoặc lỗi'; + + @override + String get feedbackCategoryFeature => 'Đề xuất tính năng'; + + @override + String get feedbackCategoryPrivacySecurity => + 'Mối lo ngại về quyền riêng tư hoặc bảo mật'; + + @override + String get feedbackCategoryUsability => 'Mối lo ngại về khả năng sử dụng'; + + @override + String get feedbackCategoryOther => 'Khác'; + + @override + String get feedbackSubject => 'Chủ đề'; + + @override + String get feedbackMessage => 'Nội dung chi tiết'; + + @override + String get feedbackReplyEmail => 'Email nhận phản hồi (tùy chọn)'; + + @override + String get feedbackIncludeTechnicalDetails => 'Bao gồm thông tin kỹ thuật'; + + @override + String get feedbackTechnicalDetailsDisclosure => + 'Khi bật, tùy chọn này chỉ thêm phiên bản hệ điều hành Linux và ngôn ngữ của ứng dụng BusyMark. Không có nhật ký, tệp, dữ liệu tài khoản hoặc thông tin chẩn đoán nào khác được đính kèm.'; + + @override + String get feedbackSubmit => 'Gửi'; + + @override + String get feedbackSubmitting => 'Đang gửi…'; + + @override + String get feedbackCategoryRequired => 'Hãy chọn một danh mục.'; + + @override + String get feedbackSubjectLength => 'Chủ đề phải có từ 3 đến 120 ký tự.'; + + @override + String get feedbackMessageLength => 'Nội dung phải có từ 10 đến 5.000 ký tự.'; + + @override + String get feedbackReplyEmailInvalid => + 'Nhập địa chỉ email hợp lệ hoặc để trống trường này.'; + + @override + String get feedbackConnectionFailure => + 'BusyMark không thể kết nối. Hãy kiểm tra kết nối Internet rồi thử lại.'; + + @override + String get feedbackTimeoutFailure => + 'Yêu cầu đã hết thời gian chờ. Hãy thử lại.'; + + @override + String get feedbackRateLimitedFailure => + 'Quá nhiều báo cáo đã được gửi từ kết nối này. Hãy chờ rồi thử lại.'; + + @override + String get feedbackRejectedFailure => + 'Máy chủ đã từ chối báo cáo này. Hãy kiểm tra các trường trong biểu mẫu rồi thử lại.'; + + @override + String get feedbackServerFailure => + 'Máy chủ không thể tiếp nhận báo cáo. Hãy thử lại sau.'; + + @override + String feedbackSuccess(String id) { + return 'Đã gửi phản hồi. Mã tham chiếu: $id'; + } + + @override + String get advanced => 'Nâng cao'; + + @override + String get addToGit => 'Thêm vào Git'; + + @override + String get appearance => 'Giao diện'; + + @override + String get apply => 'Áp dụng'; + + @override + String get back => 'Quay lại'; + + @override + String get bottomLeft => 'Dưới cùng bên trái'; + + @override + String get bottomRight => 'Dưới cùng bên phải'; + + @override + String get cancel => 'Hủy'; + + @override + String get choose => 'Chọn'; + + @override + String get chooseLocation => 'Chọn vị trí'; + + @override + String get copy => 'Sao chép'; + + @override + String get copyName => 'Sao chép tên'; + + @override + String get copyFileName => 'Sao chép tên tệp'; + + @override + String get copyPath => 'Sao chép đường dẫn'; + + @override + String get create => 'Tạo'; + + @override + String get creating => 'Đang tạo…'; + + @override + String get cut => 'Cắt'; + + @override + String get promoteSection => 'Đưa phần lên một cấp'; + + @override + String get demoteSection => 'Đưa phần xuống một cấp'; + + @override + String get moveSectionUp => 'Di chuyển phần lên trên'; + + @override + String get moveSectionDown => 'Di chuyển phần xuống dưới'; + + @override + String get confirmDeleteSectionTitle => 'Xóa phần này?'; + + @override + String confirmDeleteSectionMessage(String name) { + return 'Xóa “$name” và toàn bộ nội dung trong phần này? Không thể hoàn tác.'; + } + + @override + String get darkTheme => 'Tối'; + + @override + String get delete => 'Xóa'; + + @override + String get discard => 'Loại bỏ'; + + @override + String get editor => 'Trình biên tập'; + + @override + String get file => 'Tệp'; + + @override + String get fileHistory => 'Lịch sử tệp'; + + @override + String get folder => 'Thư mục'; + + @override + String get insert => 'Chèn'; + + @override + String get keyboardShortcuts => 'Phím tắt'; + + @override + String get commandPalette => 'Bảng lệnh'; + + @override + String get commandPaletteHint => 'Nhập lệnh'; + + @override + String get commandPaletteEmpty => 'Không có lệnh phù hợp'; + + @override + String get commandUnavailableInContext => + 'Lệnh không khả dụng trong ngữ cảnh trình biên tập hiện tại'; + + @override + String get lightTheme => 'Sáng'; + + @override + String get mainMenu => 'Menu chính'; + + @override + String get fullScreen => 'Toàn màn hình'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => 'Mở'; + + @override + String get openInFiles => 'Mở trong Tệp'; + + @override + String get pathActions => 'Thao tác với đường dẫn'; + + @override + String get outline => 'Đề cương'; + + @override + String get overwrite => 'Ghi đè'; + + @override + String get paste => 'Dán'; + + @override + String get pasteWithoutFormatting => 'Dán không định dạng'; + + @override + String get reading => 'Đọc'; + + @override + String get removeFromRecent => 'Xóa khỏi mục Gần đây'; + + @override + String get recent => 'Gần đây'; + + @override + String get redo => 'Làm lại'; + + @override + String get save => 'Lưu'; + + @override + String get search => 'Tìm kiếm'; + + @override + String get selectAll => 'Chọn tất cả'; + + @override + String get settings => 'Cài đặt'; + + @override + String get source => 'Mã nguồn'; + + @override + String get split => 'Chia đôi'; + + @override + String get systemTheme => 'Hệ thống'; + + @override + String get theme => 'Chủ đề'; + + @override + String get appLanguage => 'Ngôn ngữ'; + + @override + String get systemLanguage => 'Hệ thống'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => 'Bảng điều khiển thanh bên'; + + @override + String get topLeft => 'Trên cùng bên trái'; + + @override + String get topRight => 'Trên cùng bên phải'; + + @override + String get undo => 'Hoàn tác'; + + @override + String get validate => 'Kiểm tra'; + + @override + String get validation => 'Xác thực'; + + @override + String get viewMode => 'Chế độ xem'; + + @override + String get welcome => 'Chào mừng'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => 'Hình ảnh'; + + @override + String get openMarkdownFile => 'Mở tệp Markdown'; + + @override + String get markdownFileExtensions => '.md hoặc .markdown'; + + @override + String get openFolderOrWritersideProject => + 'Mở thư mục hoặc dự án Writerside'; + + @override + String get markdownFolderOrWritersideProject => + 'Thư mục Markdown hoặc dự án tương thích với Writerside'; + + @override + String get noOpenFile => 'Không có tệp nào đang mở'; + + @override + String get shortcutDeleteTreeItemDescription => + 'Xóa mục Tệp đã chọn hoặc xóa chủ đề đã chọn khỏi mục lục'; + + @override + String get shortcutGroupGeneral => 'Chung'; + + @override + String get shortcutNewDocument => 'Tạo'; + + @override + String get shortcutNewDocumentDescription => + 'Tạo tệp Markdown hoặc dự án Writerside'; + + @override + String get shortcutOpenDescription => + 'Mở tệp Markdown, thư mục hoặc dự án Writerside'; + + @override + String get shortcutSaveDescription => 'Lưu tài liệu hiện tại'; + + @override + String get shortcutSearchDescription => + 'Tìm kiếm trong không gian làm việc hiện tại'; + + @override + String get shortcutKeyboardShortcutsDescription => + 'Hiển thị tham chiếu phím tắt này'; + + @override + String get shortcutMarkdownAndHtmlDescription => + 'Mở tham chiếu Markdown và HTML'; + + @override + String get shortcutSettingsDescription => 'Mở cài đặt BusyMark'; + + @override + String get shortcutNextTab => 'Tab tiếp theo'; + + @override + String get shortcutNextTabDescription => 'Chuyển đến tab đang mở tiếp theo'; + + @override + String get shortcutPreviousTab => 'Tab trước'; + + @override + String get shortcutPreviousTabDescription => + 'Chuyển đến tab đang mở trước đó'; + + @override + String get shortcutCloseTab => 'Đóng tab'; + + @override + String get shortcutCloseTabDescription => 'Đóng tab đang hoạt động'; + + @override + String get shortcutCloseAllTabs => 'Đóng tất cả tab'; + + @override + String get shortcutCloseAllTabsDescription => 'Đóng tất cả các tab đang mở'; + + @override + String get shortcutGroupTextEditing => 'Chỉnh sửa văn bản'; + + @override + String get shortcutSelectAllDescription => + 'Trong chế độ Mã nguồn, chọn toàn bộ văn bản; trong chế độ Trình biên tập, nhấn hai lần để chọn mọi khối'; + + @override + String get shortcutCutDescription => 'Cắt văn bản đã chọn'; + + @override + String get shortcutCopyDescription => 'Sao chép văn bản đã chọn'; + + @override + String get shortcutPasteDescription => 'Dán từ bảng nhớ tạm'; + + @override + String get shortcutPastePlainTextDescription => + 'Dán văn bản trong bảng nhớ tạm không định dạng'; + + @override + String get shortcutUndoDescription => 'Hoàn tác chỉnh sửa gần nhất'; + + @override + String get shortcutRedoDescription => 'Làm lại chỉnh sửa vừa hoàn tác'; + + @override + String get shortcutInsertIndentation => 'Chèn thụt lề'; + + @override + String get shortcutInsertIndentationDescription => + 'Chèn thụt lề tại vị trí con trỏ'; + + @override + String get shortcutOutdentSource => 'Bỏ thụt lề mã nguồn'; + + @override + String get shortcutOutdentSourceDescription => + 'Xóa một cấp thụt lề trong chế độ Mã nguồn'; + + @override + String get shortcutEscape => 'Đóng tìm kiếm hoặc xóa lựa chọn khối'; + + @override + String get shortcutEscapeDescription => + 'Đóng tìm kiếm trong không gian làm việc hoặc xóa lựa chọn khối trong chế độ Trình biên tập'; + + @override + String get shortcutGroupFormatting => 'Định dạng'; + + @override + String get shortcutBoldDescription => + 'Bật hoặc tắt chữ đậm cho văn bản đã chọn'; + + @override + String get shortcutItalicDescription => + 'Bật hoặc tắt chữ nghiêng cho văn bản đã chọn'; + + @override + String get shortcutUnderlineDescription => + 'Bật hoặc tắt gạch chân cho văn bản đã chọn'; + + @override + String get shortcutLinkDescription => 'Chèn hoặc chỉnh sửa liên kết'; + + @override + String get shortcutInlineCodeDescription => + 'Bật hoặc tắt mã nội tuyến cho văn bản đã chọn'; + + @override + String get shortcutStrikethroughDescription => + 'Bật hoặc tắt gạch ngang cho văn bản đã chọn'; + + @override + String get shortcutGroupBlocks => 'Khối'; + + @override + String get shortcutParagraphDescription => 'Đặt khối hiện tại thành đoạn văn'; + + @override + String get shortcutHeading1Description => 'Đặt khối hiện tại thành Tiêu đề 1'; + + @override + String get shortcutHeading2Description => 'Đặt khối hiện tại thành Tiêu đề 2'; + + @override + String get shortcutHeading3Description => 'Đặt khối hiện tại thành Tiêu đề 3'; + + @override + String get shortcutHeading4Description => 'Đặt khối hiện tại thành Tiêu đề 4'; + + @override + String get shortcutHeading5Description => 'Đặt khối hiện tại thành Tiêu đề 5'; + + @override + String get shortcutHeading6Description => 'Đặt khối hiện tại thành Tiêu đề 6'; + + @override + String get shortcutGroupLists => 'Danh sách'; + + @override + String get numberedList => 'Danh sách đánh số'; + + @override + String get shortcutNumberedListDescription => + 'Bật hoặc tắt định dạng danh sách đánh số'; + + @override + String get bulletedList => 'Danh sách dấu đầu dòng'; + + @override + String get shortcutBulletedListDescription => + 'Bật hoặc tắt định dạng danh sách dấu đầu dòng'; + + @override + String get checklist => 'Danh sách kiểm tra'; + + @override + String get shortcutChecklistDescription => + 'Bật hoặc tắt định dạng danh sách kiểm tra'; + + @override + String get shortcutGroupSidebar => 'Thanh bên'; + + @override + String get sidebarViewMenu => 'Chế độ xem thanh bên'; + + @override + String get createMarkdownFile => 'Tạo tệp Markdown'; + + @override + String get createMarkdownFileDescription => + 'Bắt đầu một tài liệu Markdown cục bộ chưa lưu'; + + @override + String get createWritersideProject => 'Tạo dự án Writerside'; + + @override + String get createWritersideProjectDescription => + 'Bắt đầu một dự án tương thích với Writerside trên máy'; + + @override + String get defaultProjectName => 'Tài liệu'; + + @override + String get defaultInstanceName => 'Hướng dẫn sử dụng'; + + @override + String get defaultStartTopicTitle => 'Bắt đầu'; + + @override + String get projectName => 'Tên dự án'; + + @override + String get directoryName => 'Tên thư mục'; + + @override + String get instanceName => 'Tên phiên bản'; + + @override + String get instanceId => 'ID phiên bản'; + + @override + String get startTopicTitle => 'Tiêu đề chủ đề bắt đầu'; + + @override + String get location => 'Vị trí'; + + @override + String get projectNameRequired => 'Tên dự án là bắt buộc.'; + + @override + String get directoryNameRequired => 'Tên thư mục là bắt buộc.'; + + @override + String get useSingleSafeDirectoryName => + 'Sử dụng một tên thư mục an toàn duy nhất.'; + + @override + String get useLowercaseIdentifier => + 'Sử dụng mã định danh viết thường, chỉ gồm chữ cái, chữ số, dấu gạch dưới hoặc dấu gạch nối.'; + + @override + String get startTopicTitleRequired => 'Tiêu đề chủ đề bắt đầu là bắt buộc.'; + + @override + String get createWritersideProjectFailed => 'Không thể tạo dự án Writerside.'; + + @override + String get settingsTitle => 'Cài đặt BusyMark'; + + @override + String get autoSave => 'Tự động lưu'; + + @override + String get autoSaveDescription => + 'Tự động lưu các thay đổi của tệp sau một khoảng thời gian ngắn không hoạt động.'; + + @override + String get wordWrap => 'Tự động xuống dòng'; + + @override + String get editorFontSize => 'Cỡ chữ trình biên tập'; + + @override + String get validateOnEdit => 'Kiểm tra khi chỉnh sửa'; + + @override + String get clearRecentWorkspaces => 'Xóa không gian làm việc gần đây'; + + @override + String get editingButtonsPosition => 'Vị trí các nút chỉnh sửa'; + + @override + String get editingButtonsPositionDescription => + 'Chọn nơi hiển thị các nút chỉnh sửa WYSIWYG nổi.'; + + @override + String get editingButtonsDirection => 'Hướng của các nút chỉnh sửa'; + + @override + String get editingButtonsDirectionDescription => + 'Chọn sắp xếp các nút chỉnh sửa WYSIWYG nổi theo chiều ngang hay chiều dọc.'; + + @override + String get horizontal => 'Ngang'; + + @override + String get vertical => 'Dọc'; + + @override + String get privacy => 'Quyền riêng tư'; + + @override + String get allowRemoteImages => 'Tải hình ảnh từ xa'; + + @override + String get allowRemoteImagesDescription => + 'Cho phép hình ảnh trong phần xem trước và trình biên tập Markdown được tải từ các URL http và https.'; + + @override + String get clearRemoteImagePermissions => 'Xóa quyền hình ảnh từ xa'; + + @override + String get clearRemoteImagePermissionsDescription => + 'Quên các không gian làm việc đã được cho phép tải hình ảnh từ xa.'; + + @override + String get clearGitWorkspaceTrust => + 'Xóa các không gian làm việc Git đáng tin cậy'; + + @override + String get clearGitWorkspaceTrustDescription => + 'Hỏi trước khi bật các tính năng Git cho những không gian làm việc đã từng được tin cậy.'; + + @override + String get settingsWindowSectionTitle => 'Cửa sổ'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => + 'Mở lại không gian làm việc trước đó khi khởi động'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'Mở không gian làm việc và các tab từ phiên trước khi BusyMark khởi động.'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + 'Xác nhận trước khi đóng khi có thay đổi chưa lưu'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + 'Hỏi trước khi đóng BusyMark nếu tài liệu có thay đổi chưa lưu.'; + + @override + String get closeUnsavedChangesTitle => 'Thay đổi chưa lưu'; + + @override + String get closeUnsavedChangesSingleMessage => + 'Tài liệu này có thay đổi chưa lưu. Lưu thay đổi trước khi đóng BusyMark?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count tài liệu có thay đổi chưa lưu. Lưu thay đổi trước khi đóng BusyMark?', + one: + '1 tài liệu có thay đổi chưa lưu. Lưu thay đổi trước khi đóng BusyMark?', + zero: 'Lưu thay đổi trước khi đóng BusyMark?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => 'Hủy'; + + @override + String get closeUnsavedChangesDiscard => 'Loại bỏ'; + + @override + String get closeUnsavedChangesSave => 'Lưu'; + + @override + String get currentFile => 'tệp hiện tại'; + + @override + String get unsavedChanges => 'Thay đổi chưa lưu'; + + @override + String unsavedChangesMessage(String fileName) { + return 'Bạn có thay đổi chưa lưu trong $fileName. Lưu trước khi tiếp tục?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count tài liệu có thay đổi chưa lưu. Lưu các tài liệu trước khi tiếp tục?', + one: '1 tài liệu có thay đổi chưa lưu. Lưu tài liệu trước khi tiếp tục?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => 'Tệp đã thay đổi trên đĩa'; + + @override + String get fileChangedOnDiskMessage => + 'Tệp này đã thay đổi trên đĩa kể từ khi bạn mở. Ghi đè tệp?'; + + @override + String get untitledMarkdownFileName => 'Chưa có tên.md'; + + @override + String get unorderedList => 'Danh sách không có thứ tự'; + + @override + String get orderedList => 'Danh sách có thứ tự'; + + @override + String get taskList => 'Danh sách nhiệm vụ'; + + @override + String get toggleTaskChecked => 'Đánh dấu hoặc bỏ đánh dấu nhiệm vụ'; + + @override + String get indentListItem => 'Thụt lề mục danh sách'; + + @override + String get outdentListItem => 'Bỏ thụt lề mục danh sách'; + + @override + String get blockquote => 'Trích dẫn'; + + @override + String get codeBlock => 'Khối mã'; + + @override + String get codeBlockLanguage => 'Ngôn ngữ khối mã'; + + @override + String get image => 'Hình ảnh'; + + @override + String get video => 'Video'; + + @override + String get openVideo => 'Phát video'; + + @override + String get pauseVideo => 'Tạm dừng video'; + + @override + String get videoUnavailable => 'Video không khả dụng'; + + @override + String get videoPreview => 'Xem trước video'; + + @override + String get diagnosticWritersideVideoMissingSource => + 'Video thiếu thuộc tính src.'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return 'Nguồn video không được hỗ trợ: $source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return 'Tệp video không tồn tại: $source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return 'Hình ảnh xem trước video không tồn tại: $preview'; + } + + @override + String get inlineImage => 'Hình ảnh nội tuyến'; + + @override + String get table => 'Bảng'; + + @override + String get htmlBlock => 'Khối HTML'; + + @override + String get htmlContentDefault => 'Nội dung HTML'; + + @override + String get shortcutHtmlBlockDescription => 'Chèn hoặc chỉnh sửa khối HTML'; + + @override + String get renderedHtml => 'HTML đã kết xuất'; + + @override + String get editHtml => 'Chỉnh sửa HTML'; + + @override + String get htmlSource => 'Mã nguồn HTML'; + + @override + String get thematicBreak => 'Đường phân cách'; + + @override + String get bold => 'Đậm'; + + @override + String get italic => 'Nghiêng'; + + @override + String get underline => 'Gạch chân'; + + @override + String get strikethrough => 'Gạch ngang'; + + @override + String get inlineCode => 'Mã nội tuyến'; + + @override + String get link => 'Liên kết'; + + @override + String get hardLineBreak => 'Ngắt dòng cứng'; + + @override + String get textStyle => 'Kiểu văn bản'; + + @override + String get paragraph => 'Đoạn văn'; + + @override + String get heading1 => 'Tiêu đề 1'; + + @override + String get heading2 => 'Tiêu đề 2'; + + @override + String get heading3 => 'Tiêu đề 3'; + + @override + String get heading4 => 'Tiêu đề 4'; + + @override + String get heading5 => 'Tiêu đề 5'; + + @override + String get heading6 => 'Tiêu đề 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => 'Xóa bảng'; + + @override + String tableColumnNumber(int columnNumber) { + return 'Cột $columnNumber'; + } + + @override + String get insertColumnLeft => 'Chèn cột bên trái'; + + @override + String get insertColumnRight => 'Chèn cột bên phải'; + + @override + String get deleteColumn => 'Xóa cột'; + + @override + String get tableAlignmentUnspecified => 'Căn chỉnh: Chưa chỉ định'; + + @override + String get tableAlignmentLeft => 'Căn chỉnh: Trái'; + + @override + String get tableAlignmentCenter => 'Căn chỉnh: Giữa'; + + @override + String get tableAlignmentRight => 'Căn chỉnh: Phải'; + + @override + String tableRowNumber(int rowNumber) { + return 'Hàng $rowNumber'; + } + + @override + String get insertRowAbove => 'Chèn hàng phía trên'; + + @override + String get insertRowBelow => 'Chèn hàng phía dưới'; + + @override + String get deleteRow => 'Xóa hàng'; + + @override + String get tableHeaderHint => 'Tiêu đề'; + + @override + String get tableCellHint => 'Ô'; + + @override + String get language => 'Ngôn ngữ'; + + @override + String get hideEditingButtons => 'Ẩn các nút chỉnh sửa'; + + @override + String get showEditingButtons => 'Hiện các nút chỉnh sửa'; + + @override + String get altText => 'Văn bản thay thế'; + + @override + String get editorPlaceholderText => 'văn bản'; + + @override + String get editorPlaceholderCode => 'mã'; + + @override + String get editorPlaceholderAltText => 'văn bản thay thế'; + + @override + String get describeTheImage => 'Mô tả hình ảnh'; + + @override + String get columns => 'Cột'; + + @override + String get rows => 'Hàng'; + + @override + String tableHeaderNumber(int columnNumber) { + return 'Tiêu đề $columnNumber'; + } + + @override + String get tableCellDefault => 'Ô'; + + @override + String get noImageSource => 'Không có nguồn hình ảnh'; + + @override + String get remoteImageBlocked => 'Hình ảnh từ xa bị chặn'; + + @override + String get remoteImageBlockedTooltip => + 'Chọn xem BusyMark có thể tải hình ảnh từ xa hay không.'; + + @override + String get remoteImagesBlockedTitle => 'Hình ảnh từ xa bị chặn'; + + @override + String get remoteImagesBlockedMessage => + 'Tài liệu này tham chiếu đến hình ảnh trên Internet. Việc tải chúng có thể tiết lộ thông tin mạng cho máy chủ lưu trữ hình ảnh.'; + + @override + String get loadRemoteImagesForWorkspace => 'Tải cho không gian làm việc này'; + + @override + String get alwaysLoadRemoteImages => 'Luôn tải hình ảnh từ xa'; + + @override + String get hideSidebar => 'Ẩn bảng điều khiển thanh bên'; + + @override + String get showSidebar => 'Hiện bảng điều khiển thanh bên'; + + @override + String get showPreview => 'Hiện bản xem trước'; + + @override + String get hidePreview => 'Ẩn bản xem trước'; + + @override + String get workspaceKindUnsavedMarkdown => 'Tệp Markdown chưa lưu'; + + @override + String get workspaceKindSingleMarkdown => 'Tệp Markdown đơn'; + + @override + String get workspaceKindMarkdownFolder => 'Thư mục Markdown'; + + @override + String get workspaceKindWritersideModule => 'Mô-đun Writerside'; + + @override + String get problems => 'Vấn đề'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count chẩn đoán', + one: '1 chẩn đoán', + zero: 'Không có chẩn đoán', + ); + return '$_temp0'; + } + + @override + String get files => 'Tệp'; + + @override + String get toc => 'Mục lục'; + + @override + String get tocActions => 'Thao tác với mục lục'; + + @override + String get markdownUnsaved => 'Markdown - chưa lưu'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tệp', + one: '1 tệp', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => 'Không có tệp'; + + @override + String get newFile => 'Tệp mới'; + + @override + String get noWritersideToc => 'Không có mục lục Writerside'; + + @override + String get tocSection => 'Phần mục lục'; + + @override + String get newTopic => 'Chủ đề mới'; + + @override + String get newChildTopic => 'Chủ đề con mới'; + + @override + String get newSiblingTopic => 'Chủ đề cùng cấp mới'; + + @override + String get renameTopicFile => 'Đổi tên tệp chủ đề'; + + @override + String get topicPlacement => 'Vị trí trong mục lục'; + + @override + String get tocRoot => 'Tại gốc mục lục'; + + @override + String get afterSelectedTopic => 'Sau chủ đề đã chọn'; + + @override + String get insideSelectedTopic => 'Bên trong chủ đề đã chọn'; + + @override + String get pasteAfterTopic => 'Dán sau chủ đề'; + + @override + String get pasteAsChildTopic => 'Dán làm chủ đề con'; + + @override + String get removeFromToc => 'Xóa khỏi mục lục'; + + @override + String get confirmRemoveFromTocTitle => 'Xóa khỏi mục lục?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return 'Xóa $name khỏi mục lục này? Tệp chủ đề sẽ được giữ lại.'; + } + + @override + String get confirmDeleteTopicTitle => 'Xóa tệp chủ đề?'; + + @override + String confirmDeleteTopicMessage(String name) { + return 'Xóa $name và xóa tệp đó khỏi mọi mục lục? Không thể hoàn tác.'; + } + + @override + String get safeDeleteTopicFile => 'Xóa an toàn tệp chủ đề…'; + + @override + String get removeTocElement => 'Xóa phần tử mục lục'; + + @override + String get reviewUsages => 'Xem lại cách sử dụng'; + + @override + String get deleteTopicFile => 'Xóa tệp chủ đề'; + + @override + String get removeAction => 'Xóa'; + + @override + String topicRemovalSummary(String topic) { + return 'Xóa “$topic” khỏi phiên bản đã chọn. Tệp chủ đề sẽ được giữ lại.'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return 'Xóa “$topic” và cập nhật an toàn các tham chiếu đến tệp đó trong toàn bộ dự án Writerside này.'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count chủ đề con sẽ được đưa lên một cấp.', + one: '1 chủ đề con sẽ được đưa lên một cấp.', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + 'Chủ đề này đang được dùng làm trang bắt đầu của một phiên bản. Hãy xem lại cách sử dụng và chỉ định trang bắt đầu khác trước khi tiếp tục.'; + + @override + String topicUsagesCount(int count) { + return 'Cách sử dụng ($count)'; + } + + @override + String get noBreakingTopicUsages => + 'Không tìm thấy tham chiếu nào có thể bị hỏng.'; + + @override + String get topicUsagesFound => + 'BusyMark đã tìm thấy các tham chiếu sau đến chủ đề này.'; + + @override + String get topicUsageTocElements => 'Phần tử mục lục'; + + @override + String get topicUsageStartPages => 'Trang bắt đầu'; + + @override + String get topicUsageTopicLinks => 'Liên kết chủ đề'; + + @override + String get topicUsageIncludes => 'Nội dung bao gồm'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count lượt sử dụng', + one: '1 lượt sử dụng', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => 'Tùy chọn tái cấu trúc'; + + @override + String get updateUsagesAutomatically => 'Tự động cập nhật cách sử dụng'; + + @override + String get updateUsagesAutomaticallyDescription => + 'Xóa các tham chiếu mục lục và nội dung bao gồm, đồng thời giữ nguyên văn bản liên kết.'; + + @override + String get manualUsageUpdatesRequired => + 'Một số cách sử dụng cần được thay đổi thủ công trước khi thực hiện tái cấu trúc này.'; + + @override + String get setRedirectTo => 'Đặt chuyển hướng đến'; + + @override + String get noRedirectDescription => + 'Không chuyển hướng trang đã xuất bản cũ.'; + + @override + String get redirectTarget => 'Đích chuyển hướng'; + + @override + String get remainingUsagesBlockRemoval => + 'Xem lại và cập nhật các cách sử dụng còn lại trước khi tiếp tục hoặc bật cập nhật tự động nếu có.'; + + @override + String usagesOfTopic(String topic) { + return 'Cách sử dụng $topic'; + } + + @override + String get noUsagesFound => 'Không tìm thấy cách sử dụng nào'; + + @override + String get outsideSelectedInstance => 'bên ngoài phiên bản đã chọn'; + + @override + String get doRefactor => 'Tái cấu trúc'; + + @override + String get orphanTopicTitle => 'Tệp chủ đề không còn được sử dụng'; + + @override + String get keepTopicFile => 'Giữ tệp chủ đề'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic” không còn được sử dụng ở đâu trong dự án Writerside này. Xóa tệp hoặc giữ lại để dùng trong phiên bản khác.'; + } + + @override + String get defaultNewTopicTitle => 'Chủ đề mới'; + + @override + String get topicTitle => 'Tiêu đề chủ đề'; + + @override + String get fileName => 'Tên tệp'; + + @override + String get topicTitleRequired => 'Tiêu đề chủ đề là bắt buộc.'; + + @override + String get fileNameRequired => 'Tên tệp là bắt buộc.'; + + @override + String get rename => 'Đổi tên'; + + @override + String get confirmDeleteFileTitle => 'Xóa tệp?'; + + @override + String get confirmDeleteFolderTitle => 'Xóa thư mục?'; + + @override + String confirmDeleteFileMessage(String name) { + return 'Xóa $name? Không thể hoàn tác.'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return 'Xóa $name và tất cả tệp bên trong? Không thể hoàn tác.'; + } + + @override + String get useSingleSafeFileName => 'Sử dụng một tên tệp an toàn duy nhất.'; + + @override + String useExpectedExtension(String extension) { + return 'Sử dụng phần mở rộng $extension cho định dạng đã chọn.'; + } + + @override + String get useIdentifierCharacters => + 'Sử dụng chữ cái, chữ số, dấu gạch dưới hoặc dấu gạch nối trước phần mở rộng.'; + + @override + String get topicIdAlreadyExists => 'ID chủ đề đã tồn tại.'; + + @override + String get createWritersideTopicFailed => 'Không thể tạo chủ đề Writerside.'; + + @override + String get noOutline => 'Không có đề cương'; + + @override + String expandKind(String kind) { + return 'Mở rộng $kind'; + } + + @override + String collapseKind(String kind) { + return 'Thu gọn $kind'; + } + + @override + String get foldKindSection => 'phần'; + + @override + String get foldKindList => 'danh sách'; + + @override + String get foldKindQuote => 'trích dẫn'; + + @override + String get foldKindTag => 'thẻ'; + + @override + String get sourceSearchPreviousMatch => 'Kết quả khớp trước'; + + @override + String get sourceSearchNextMatch => 'Kết quả khớp tiếp theo'; + + @override + String get sourceSearchCaseSensitive => 'Phân biệt chữ hoa, chữ thường'; + + @override + String get sourceSearchWholeWord => 'Toàn bộ từ'; + + @override + String get sourceSearchRegex => 'Biểu thức chính quy'; + + @override + String get sourceSearchReplacement => 'Thay thế bằng'; + + @override + String get sourceSearchReplaceCurrent => 'Thay thế kết quả hiện tại'; + + @override + String get sourceSearchReplaceAndFindNext => 'Thay thế và tìm tiếp'; + + @override + String get sourceSearchReplaceAll => 'Thay thế tất cả'; + + @override + String get workspaceReplace => 'Thay thế trong không gian làm việc'; + + @override + String get reviewReplacements => 'Xem lại các thay thế'; + + @override + String get applyReplacements => 'Áp dụng các thay thế'; + + @override + String get skippedFiles => 'Tệp bị bỏ qua'; + + @override + String get workspaceReplaceDirtyBuffer => 'Nội dung trình biên tập chưa lưu'; + + @override + String get workspaceReplaceDiskContent => 'Nội dung đã lưu trên đĩa'; + + @override + String selectFileMatches(int count) { + return 'Chọn tất cả $count kết quả khớp'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return 'Đã thay thế $matches kết quả khớp trong $files tệp; bỏ qua $skipped.'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Có ký tự xuống dòng ở cuối'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Không có ký tự xuống dòng ở cuối'; + } + + @override + String get normalizeLineEndings => 'Chuẩn hóa kết thúc dòng'; + + @override + String get mixedLineEndingsSavePrompt => + 'Tài liệu này chứa các kiểu kết thúc dòng khác nhau. Hãy chọn một định dạng.'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName sử dụng các kiểu kết thúc dòng khác nhau. Hãy chọn định dạng sẽ dùng trước khi thay thế.'; + } + + @override + String get workspaceReplaceIssueOversized => 'Đã bỏ qua một tệp quá lớn.'; + + @override + String get workspaceReplaceIssueUnreadable => + 'Đã bỏ qua một tệp không thể đọc.'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => + 'Đã bỏ qua một tệp không phải UTF-8 hợp lệ.'; + + @override + String get workspaceReplaceIssueTruncated => + 'Bản xem trước thay thế đã bị cắt bớt.'; + + @override + String get workspaceReplaceIssueFileChanged => + 'Đã bỏ qua một tệp đã thay đổi sau khi xem trước.'; + + @override + String get workspaceReplaceIssueBufferChanged => + 'Đã bỏ qua một bộ đệm trình biên tập đã thay đổi sau khi xem trước.'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + 'Chọn chuẩn hóa LF hoặc CRLF trước khi thay thế.'; + + @override + String get workspaceReplaceIssuePartialConflict => + 'Đã dừng khôi phục vì tệp bị thay đổi đồng thời. Một số thay thế có thể vẫn còn; nội dung bị di dời đã được giữ lại tại đường dẫn bên dưới.'; + + @override + String get workspaceReplaceIssueApplyFailed => + 'Không thể ghi nhận thay thế đã xem lại; không có tệp nào bị thay đổi.'; + + @override + String externalChangesTitle(String fileName) { + return 'Thay đổi bên ngoài — $fileName'; + } + + @override + String get externalFileDeleted => 'Tệp này đã bị xóa trên đĩa.'; + + @override + String get externalFileChanged => + 'Tệp này đã thay đổi trên đĩa trong khi bạn có các chỉnh sửa chưa lưu.'; + + @override + String recoveredDocumentReview(String fileName) { + return 'Đã khôi phục nội dung chưa lưu cho $fileName. Hãy kiểm tra, sau đó lưu, lưu thành hoặc loại bỏ nội dung đó.'; + } + + @override + String get compare => 'So sánh'; + + @override + String get reloadFromDisk => 'Tải lại từ đĩa'; + + @override + String get keepMine => 'Giữ phiên bản của tôi'; + + @override + String get saveAs => 'Lưu thành'; + + @override + String get sourceSearchInvalidRegex => 'Biểu thức chính quy không hợp lệ'; + + @override + String get sourceLargeFileFeaturesPaused => + 'Tệp lớn: đã tạm dừng tô sáng và thu gọn'; + + @override + String get nothingToRead => 'Không có nội dung để đọc'; + + @override + String get admonition => 'Khối lưu ý'; + + @override + String get quote => 'Trích dẫn'; + + @override + String get note => 'Ghi chú'; + + @override + String get tip => 'Mẹo'; + + @override + String get warning => 'Cảnh báo'; + + @override + String get tabs => 'Tab'; + + @override + String get tab => 'Tab'; + + @override + String get procedure => 'Quy trình'; + + @override + String get step => 'Bước'; + + @override + String get topic => 'Chủ đề'; + + @override + String get chapter => 'Chương'; + + @override + String couldNotOpenTarget(String target) { + return 'Không thể mở $target'; + } + + @override + String linkTargetNotFound(String targetPath) { + return 'Không tìm thấy đích liên kết: $targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => + 'Không thể mở loại tệp này trong trình biên tập'; + + @override + String anchorNotFound(String anchor) { + return 'Không tìm thấy neo: $anchor'; + } + + @override + String get noProblemsFound => 'Không tìm thấy vấn đề'; + + @override + String get noResults => 'Không có kết quả'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - Dòng $lineNumber'; + } + + @override + String get untitledResult => 'Kết quả chưa có tên'; + + @override + String get documentKindMarkdownFile => 'Tệp Markdown'; + + @override + String get documentKindWritersideMarkdownTopic => + 'Chủ đề Markdown Writerside'; + + @override + String get documentKindWritersideXmlTopic => 'Chủ đề XML Writerside'; + + @override + String get documentKindWritersideTree => 'Cây Writerside'; + + @override + String get documentKindConfigurationFile => 'Tệp cấu hình'; + + @override + String get documentKindVariablesFile => 'Tệp biến'; + + @override + String get documentKindCategoriesFile => 'Tệp danh mục'; + + @override + String get documentKindResourceFile => 'Tệp tài nguyên'; + + @override + String workspaceErrorOpenFailed(String error) { + return 'Mở không thành công: $error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Không thể tạo dự án Writerside: $error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Không thể tạo chủ đề Writerside: $error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return 'Không thể mở tệp: $error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + 'Chọn nơi lưu tệp Markdown này.'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + 'Đã chặn lưu: tệp đã thay đổi trên đĩa.'; + + @override + String workspaceErrorSaveFailed(String error) { + return 'Lưu không thành công: $error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return 'Thao tác với tệp không thành công: $error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return 'Kiểm tra không thành công: $error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Đã khôi phục $count tài liệu chưa lưu. Hãy xem lại từng tài liệu trước khi lưu hoặc loại bỏ.', + one: + 'Đã khôi phục 1 tài liệu chưa lưu. Hãy xem lại trước khi lưu hoặc loại bỏ.', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Không thể khôi phục $count bản ghi khôi phục bị hỏng. Các bản ghi khôi phục hợp lệ vẫn còn khả dụng.', + one: + 'Không thể khôi phục một bản ghi khôi phục bị hỏng. Tệp khôi phục gốc đã được giữ lại để kiểm tra.', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return 'Đường dẫn không tồn tại: $path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return 'Thư mục đích đã tồn tại và không trống: $path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return 'Đường dẫn đích đã tồn tại nhưng không phải là thư mục: $path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return 'Tệp được tạo đã tồn tại: $path'; + } + + @override + String get errorParentDirectoryRequired => 'Cần có thư mục cha.'; + + @override + String errorParentDirectoryMissing(String path) { + return 'Thư mục cha không tồn tại: $path'; + } + + @override + String errorDirectoryMissing(String path) { + return 'Thư mục không tồn tại: $path'; + } + + @override + String errorPathAlreadyExists(String path) { + return 'Đường dẫn đã tồn tại: $path'; + } + + @override + String get errorFileNameRequired => 'Tên tệp là bắt buộc.'; + + @override + String get errorFileNameUnsafe => + 'Tên tệp phải là một phần đường dẫn an toàn duy nhất.'; + + @override + String get errorFileOperationInvalidTarget => + 'Không thể di chuyển thư mục vào chính nó.'; + + @override + String get errorFileOperationOutsideRoot => + 'Thao tác với tệp phải nằm trong không gian làm việc.'; + + @override + String get errorFileOperationRoot => + 'Không thể thay đổi thư mục gốc của không gian làm việc từ cây tệp.'; + + @override + String get errorProjectNameRequired => 'Tên dự án là bắt buộc.'; + + @override + String get errorDirectoryNameRequired => 'Tên thư mục là bắt buộc.'; + + @override + String get errorDirectoryNameUnsafe => + 'Tên thư mục phải là một phần đường dẫn an toàn duy nhất.'; + + @override + String get errorInstanceIdInvalid => + 'ID phiên bản phải bắt đầu bằng chữ thường và chỉ gồm chữ thường, chữ số, dấu gạch dưới và dấu gạch nối.'; + + @override + String get errorTopicFileInvalid => + 'Tên tệp chủ đề phải là tên tệp Markdown không có dấu phân cách đường dẫn.'; + + @override + String get errorTopicTitleRequired => 'Tiêu đề chủ đề là bắt buộc.'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Gốc mô-đun Writerside không tồn tại: $path'; + } + + @override + String get errorWritersideModuleNotOpen => + 'Phải mở một mô-đun Writerside để tạo chủ đề.'; + + @override + String get errorWritersideInstanceTreeMissing => + 'Mô-đun Writerside không có cây phiên bản.'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Tệp cây Writerside không tồn tại: $path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return 'ID chủ đề \"$topicId\" đã tồn tại trong mô-đun trợ giúp này.'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return 'Tệp chủ đề đã tồn tại: $path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return 'Chủ đề tham chiếu không có trong cây đã chọn: $topic'; + } + + @override + String get errorWritersideTocNodeMissing => + 'Mục nhập mục lục đã chọn không còn tồn tại.'; + + @override + String get errorWritersideTocInvalidMove => + 'Không thể di chuyển mục nhập mục lục vào chính nó hoặc một mục con của nó.'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return 'Không thể xóa chủ đề bắt đầu $topic. Hãy chọn một trang bắt đầu khác trước.'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Sử dụng Xóa an toàn cho các tệp chủ đề Writerside.'; + + @override + String get errorWritersideTopicUsageScanFailed => + 'Không thể hoàn tất quá trình quét cách sử dụng chủ đề. Không có tệp nào bị thay đổi.'; + + @override + String get errorWritersideTopicUsagesRemain => + 'Một số cách sử dụng chủ đề vẫn cần được xử lý. Hãy xem lại trước khi tiếp tục.'; + + @override + String get errorWritersideRedirectInvalid => + 'Đích chuyển hướng đã chọn không còn hợp lệ. Hãy chọn lại.'; + + @override + String errorWritersideRollbackFailed(String paths) { + return 'Không thể khôi phục hoàn toàn việc xóa chủ đề. Hãy xem lại các đường dẫn này trước khi tiếp tục: $paths'; + } + + @override + String get errorTopicsRootUnsafe => + 'Gốc chủ đề phải là một thư mục tương đối an toàn.'; + + @override + String get errorTopicFileNameUnsafe => + 'Tên tệp chủ đề phải là một phần đường dẫn an toàn duy nhất.'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return 'Phần mở rộng tệp chủ đề phải khớp với định dạng đã chọn ($extension).'; + } + + @override + String get errorTopicFileNameInvalid => + 'Tên tệp chủ đề chỉ được chứa chữ cái, chữ số, dấu gạch dưới và dấu gạch nối.'; + + @override + String errorUnknown(String code) { + return 'Lỗi không xác định: $code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return 'Không thể đọc siêu dữ liệu tệp: $error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + 'Đã phát hiện không gian làm việc lớn. Một số tệp đã được bỏ qua để ứng dụng vẫn phản hồi nhanh.'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return 'Không thể kiểm tra mục trong không gian làm việc: $error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => + 'Tệp vượt quá giới hạn phân tích tự động beta.'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Không thể đọc tệp Markdown: $error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + 'Khối thuộc tính tiêu đề Writerside không đúng định dạng.'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return 'ID tiêu đề bị trùng \"$id\".'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + 'Các tiêu đề H1 cấp cao nhất bổ sung được xử lý như các chương.'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Chủ đề Markdown Writerside không có H1 hoặc tiêu đề trong front matter.'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => + 'Chủ đề XML thiếu tiêu đề.'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return 'Chủ đề \"$fileName\" thiếu tiêu đề.'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => + 'Front matter chưa được đóng.'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => 'Phần tử HTML không an toàn.'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return 'Đích liên kết không tồn tại: $targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return 'Neo \"$anchor\" không tồn tại.'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return 'Hình ảnh \"$destination\" thiếu văn bản thay thế.'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return 'Hình ảnh không tồn tại: $destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return 'XML không hợp lệ: $message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'Gốc writerside.cfg phải là .'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'Khai báo snippets thiếu src.'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'Khai báo instance-groups thiếu src.'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return 'Chế độ keymaps không được hỗ trợ: $mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'Khai báo instance thiếu src.'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg không đăng ký phiên bản nào.'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + 'Gốc .tree phải là .'; + + @override + String get diagnosticWritersideTreeMissingId => 'Hồ sơ phiên bản thiếu id.'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return 'Tên gốc của tệp cây không khớp với ID phiên bản \"$id\".'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + 'Phiên bản không phải thư viện thiếu start-page.'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return 'Trang bắt đầu \"$startPage\" không tồn tại.'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return 'Chủ đề \"$topic\" xuất hiện nhiều hơn một lần trong mục lục của phiên bản này.'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + 'Khai báo biến phải có tên và giá trị.'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return 'Biến \"$name\" được khai báo nhiều hơn một lần.'; + } + + @override + String get diagnosticWritersideCategoryMissingId => 'Danh mục thiếu id.'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return 'Danh mục \"$id\" được khai báo nhiều hơn một lần.'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return 'Thứ tự danh mục \"$order\" được khai báo nhiều hơn một lần.'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + 'Gốc .topic phải là .'; + + @override + String get diagnosticWritersideTopicMissingRootId => + 'Chủ đề XML thiếu id ở gốc.'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'ID gốc của chủ đề XML \"$id\" phải khớp với tên tệp \"$expectedId\".'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return 'ID phần tử \"$elementId\" xuất hiện nhiều hơn một lần.'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => ' thiếu href.'; + + @override + String get diagnosticWritersideConfigMissing => + 'Chế độ Writerside yêu cầu writerside.cfg.'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return 'Thư mục cấu hình build đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return 'Thư mục đặc tả API đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return 'Thư mục snippets đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return 'Tệp biến đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return 'Tệp danh mục đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return 'Tệp nhóm phiên bản đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return 'Cây phiên bản đã đăng ký \"$source\" không tồn tại.'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return 'Không thể đọc tệp chủ đề: $error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return 'Thư mục chủ đề mặc định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return 'Thư mục chủ đề đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return 'Thư mục hình ảnh đã định không tồn tại: $relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return 'ID phần tử \"$id\" xuất hiện nhiều hơn một lần.'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return 'Mục lục tham chiếu đến chủ đề còn thiếu \"$topic\".'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return 'href bên ngoài \"$href\" không hợp lệ.'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return 'Biến \"%$name%\" chưa được khai báo.'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return 'Liên kết chủ đề \"$destination\" không thể phân giải.'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return 'Neo \"$anchor\" không tồn tại trong \"$targetName\".'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => ' thiếu from.'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return 'Nguồn include \"$from\" không tồn tại.'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return 'Phần tử include \"$elementId\" không tồn tại trong \"$from\".'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'Danh mục seealso \"$ref\" chưa được khai báo.'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return 'Tham chiếu chủ đề \"$reference\" không rõ ràng.'; + } + + @override + String diagnosticUnknown(String code) { + return 'Chẩn đoán không xác định: $code'; + } + + @override + String get close => 'Đóng'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Khác biệt Git'; + + @override + String get gitShowDiff => 'Hiện khác biệt'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return 'cũ $oldRange → mới $newRange'; + } + + @override + String get gitDiffNoLines => 'không có dòng'; + + @override + String get gitUnavailableTitle => 'Git không khả dụng'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': + 'Cài đặt Git hoặc cấu hình BusyMark để sử dụng một tệp thực thi Git khả dụng. $reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => + 'Tin cậy không gian làm việc này cho Git?'; + + @override + String get gitTrustRequiredMessage => + 'Kho Git có thể chạy chương trình thông qua hook, bộ lọc và các cấu hình khác. Hãy tin cậy không gian làm việc này trước khi BusyMark đọc dữ liệu kho hoặc bật các thao tác Git.'; + + @override + String get gitTrustWorkspace => 'Tin cậy không gian làm việc'; + + @override + String get gitNotRepositoryTitle => 'Không phải kho Git'; + + @override + String get gitNotRepositoryMessage => + 'Không gian làm việc này không nằm trong kho Git.'; + + @override + String get gitInitializeRepository => 'Khởi tạo kho'; + + @override + String get gitDetachedHead => 'HEAD tách rời'; + + @override + String gitDetachedHeadAt(String commit) { + return 'Đang tách rời tại $commit'; + } + + @override + String get gitNoUpstream => 'Không có nhánh upstream'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count commit chưa đẩy', + one: '1 commit chưa đẩy', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count commit cần kéo về', + one: '1 commit cần kéo về', + ); + return '$_temp0'; + } + + @override + String get gitClean => 'Sạch'; + + @override + String get gitConflicts => 'Xung đột'; + + @override + String get gitChanges => 'Thay đổi'; + + @override + String get gitStaged => 'Đã đưa vào stage'; + + @override + String get gitUnstaged => 'Chưa đưa vào stage'; + + @override + String get gitHistory => 'Lịch sử'; + + @override + String get gitBranches => 'Nhánh'; + + @override + String get gitActions => 'Thao tác Git'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => 'Đưa tệp vào stage'; + + @override + String get gitRemoveFromCommit => 'Bỏ tệp khỏi stage'; + + @override + String get gitDiscard => 'Hoàn nguyên'; + + @override + String get gitOpenFile => 'Mở tệp'; + + @override + String get gitMarkResolved => 'Đánh dấu đã giải quyết'; + + @override + String get gitUntracked => 'Chưa được theo dõi'; + + @override + String get gitCommitMessage => 'Thông điệp commit'; + + @override + String get gitCommitSelectedFiles => 'Tệp đã chọn'; + + @override + String get gitCommitNoSelectedFiles => + 'Đưa ít nhất một tệp vào stage trước khi commit.'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tệp đã đưa vào stage', + one: '1 tệp đã đưa vào stage', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => 'Bên ngoài không gian làm việc'; + + @override + String get gitCommitMessageRequired => 'Nhập thông điệp commit.'; + + @override + String get gitCreateBranch => 'Tạo nhánh'; + + @override + String get gitNewBranch => 'Nhánh mới'; + + @override + String get gitBranchName => 'Tên nhánh'; + + @override + String get gitSwitchBranch => 'Chuyển nhánh'; + + @override + String get gitNoChanges => 'Không có thay đổi'; + + @override + String get gitNoHistory => 'Không có lịch sử'; + + @override + String get gitNoBranches => 'Không có nhánh'; + + @override + String get gitNoDiff => 'Không có khác biệt để hiển thị'; + + @override + String get gitBinaryFile => + 'Tệp nhị phân. BusyMark không kết xuất bản vá nhị phân.'; + + @override + String gitBinaryFileInfo(int size) { + return 'Tệp nhị phân ($size byte). BusyMark không kết xuất bản vá nhị phân.'; + } + + @override + String get gitUnsavedChangesBanner => + 'Các thay đổi trong trình biên tập chưa lưu sẽ không được đưa vào cho đến khi lưu.'; + + @override + String get gitConfirmDiscardTitle => 'Loại bỏ các thay đổi Git?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Tất cả thay đổi đã đưa và chưa đưa vào stage trong các tệp được theo dõi đã chọn sẽ được khôi phục về HEAD.', + one: + 'Tất cả thay đổi đã đưa và chưa đưa vào stage trong tệp được theo dõi đã chọn sẽ được khôi phục về HEAD.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Các tệp chưa được theo dõi đã chọn sẽ bị xóa.', + one: 'Tệp chưa được theo dõi đã chọn sẽ bị xóa.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Các tệp đã chọn sẽ được khôi phục hoặc xóa tùy theo trạng thái Git.', + one: 'Tệp đã chọn sẽ được khôi phục hoặc xóa tùy theo trạng thái Git.', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return 'Chuyển sang $branch?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'BusyMark sẽ tải lại không gian làm việc từ đĩa sau khi Git chuyển nhánh.'; + + @override + String get gitConfirmPushSetUpstreamTitle => 'Đặt nhánh upstream?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return 'Nhánh này không có upstream. BusyMark có thể push $branch và đặt upstream cho nhánh đó khi chỉ có một remote được cấu hình.'; + } + + @override + String get gitProjectHistory => 'Lịch sử dự án'; + + @override + String get gitFileHistory => 'Lịch sử tệp'; + + @override + String get gitFileHistoryRequiresOpenFile => + 'Lịch sử tệp yêu cầu một tệp Markdown đang mở.'; + + @override + String get gitLoadMore => 'Tải thêm'; + + @override + String get gitChangesInCommit => 'Thay đổi trong commit này'; + + @override + String get gitCompareWithCurrent => 'So sánh với hiện tại'; + + @override + String get gitRestoreVersion => 'Khôi phục phiên bản này'; + + @override + String get gitConfirmRestoreTitle => 'Khôi phục phiên bản tệp này?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark sẽ thay thế tệp trong cây làm việc hiện tại bằng phiên bản đã commit được chọn. Tệp đã khôi phục sẽ vẫn ở trạng thái chưa đưa vào stage.'; + + @override + String get gitCommitActions => 'Thao tác commit'; + + @override + String get gitResetCurrentBranchToHere => 'Đặt lại nhánh hiện tại về đây…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return 'Đặt lại $branch về $commit?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return 'Thao tác này sẽ đưa nhánh $branch về commit $commit. Chọn cách Git cập nhật index và cây làm việc.'; + } + + @override + String get gitReset => 'Đặt lại'; + + @override + String get gitResetModeSoft => 'Mềm'; + + @override + String get gitResetModeSoftDescription => + 'Chỉ di chuyển nhánh. Giữ nguyên index và cây làm việc; các khác biệt so với commit đã chọn vẫn được đưa vào stage.'; + + @override + String get gitResetModeMixed => 'Hỗn hợp'; + + @override + String get gitResetModeMixedDescription => + 'Di chuyển nhánh và đặt lại index. Giữ nguyên cây làm việc, để lại các khác biệt ở trạng thái chưa đưa vào stage.'; + + @override + String get gitResetModeHard => 'Cứng'; + + @override + String get gitResetModeHardDescription => + 'Di chuyển nhánh và đặt lại index cùng cây làm việc. Các thay đổi được theo dõi sẽ bị loại bỏ; các tệp chưa được theo dõi gây cản trở có thể bị xóa.'; + + @override + String get gitResetModeKeep => 'Giữ'; + + @override + String get gitResetModeKeepDescription => + 'Di chuyển nhánh và đặt lại các tệp được theo dõi nhưng giữ lại các thay đổi cục bộ. Git sẽ hủy nếu các thay đổi đó xung đột với thao tác đặt lại.'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => 'Thao tác với tệp'; + + @override + String get actions => 'Thao tác'; + + @override + String get gitStatusAdded => 'Đã thêm'; + + @override + String get gitStatusDeleted => 'Đã xóa'; + + @override + String get gitStatusRenamed => 'Đã đổi tên'; + + @override + String get gitStatusCopied => 'Đã sao chép'; + + @override + String get gitStatusUntracked => 'Chưa được theo dõi'; + + @override + String get gitStatusConflicted => 'Có xung đột'; + + @override + String get gitStatusIgnored => 'Bị bỏ qua'; + + @override + String get gitStatusTypeChanged => 'Đã thay đổi loại'; + + @override + String get gitStatusModified => 'Đã sửa đổi'; + + @override + String get gitStatusUnknown => 'Không xác định'; + + @override + String get gitErrorUnavailable => 'Git không khả dụng.'; + + @override + String get gitErrorNotRepository => + 'Không gian làm việc này không phải là kho Git.'; + + @override + String get gitErrorUnsafePath => + 'BusyMark đã chặn một đường dẫn Git không an toàn.'; + + @override + String get gitErrorInvalidBranchName => 'Nhập tên nhánh hợp lệ.'; + + @override + String get gitErrorNoRemote => 'Chưa cấu hình remote Git nào.'; + + @override + String get gitErrorNoUpstream => 'Chưa cấu hình nhánh upstream.'; + + @override + String get gitErrorMultipleRemotes => + 'Có nhiều remote được cấu hình. Hãy chọn upstream bên ngoài phiên bản BusyMark này.'; + + @override + String get gitErrorDirtyWorkspace => + 'Lưu hoặc loại bỏ các thay đổi trong trình biên tập BusyMark trước khi chuyển nhánh.'; + + @override + String get gitErrorResetDirtyWorkspace => + 'Lưu hoặc loại bỏ các thay đổi trong trình biên tập BusyMark trước khi đặt lại nhánh hiện tại.'; + + @override + String get gitErrorRestoreStagedFile => + 'Bỏ tệp khỏi stage trước khi khôi phục phiên bản trong lịch sử.'; + + @override + String get gitErrorResetDetachedHead => + 'Chuyển sang một nhánh trước khi đặt lại.'; + + @override + String get gitErrorDiverged => + 'Nhánh đã phân kỳ. Hãy giải quyết thao tác merge hoặc rebase bên ngoài phiên bản BusyMark này.'; + + @override + String get gitErrorAuthorIdentity => + 'Git cần tên và địa chỉ email tác giả trước khi có thể commit.'; + + @override + String get gitAuthorIdentityTitle => 'Danh tính tác giả Git'; + + @override + String get gitAuthorIdentityMessage => + 'Nhập danh tính Git sẽ ghi vào các commit. BusyMark sẽ lưu danh tính đó và thử lại commit này.'; + + @override + String get gitAuthorName => 'Tên'; + + @override + String get gitAuthorEmail => 'Email'; + + @override + String get gitAuthorIdentityGlobal => 'Dùng cho tất cả kho'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'Khi được cài đặt dưới dạng Snap, tùy chọn này áp dụng cho các kho được mở trong BusyMark.'; + + @override + String get gitSaveIdentityAndCommit => 'Lưu và commit'; + + @override + String get gitErrorAuthentication => 'Xác thực Git không thành công.'; + + @override + String get gitErrorNetwork => 'Thao tác mạng Git không thành công.'; + + @override + String get gitErrorConflict => + 'Git báo cáo các xung đột chưa được giải quyết.'; + + @override + String get gitErrorCommandFailed => 'Lệnh Git không thành công.'; + + @override + String get markdownAndHtml => 'Markdown và HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Khối Markdown'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Các cấu trúc khối được hỗ trợ trong mã nguồn và bản xem trước Markdown.'; + + @override + String get markdownHtmlInlineFormatting => 'Định dạng Markdown nội tuyến'; + + @override + String get markdownHtmlInlineFormattingDescription => + 'Định dạng có thể xuất hiện trong đoạn văn, mục danh sách và ô bảng.'; + + @override + String get markdownHtmlRawHtmlBlocks => 'Khối HTML thô'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'Các thẻ HTML cấp khối an toàn được kết xuất thông qua các tiện ích xem trước của BusyMark.'; + + @override + String get markdownHtmlRawHtmlInline => 'Thẻ HTML nội tuyến thô'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + 'Các thẻ HTML nội tuyến an toàn được kết xuất mà không hiển thị thẻ theo nghĩa đen.'; + + @override + String get markdownHtmlSafety => 'Quy tắc an toàn'; + + @override + String get markdownHtmlSafetyDescription => + 'HTML thô được phân tích cú pháp và làm sạch trước khi kết xuất bản xem trước.'; + + @override + String get markdownHtmlHeadings => 'Tiêu đề'; + + @override + String get markdownHtmlParagraphs => 'Đoạn văn'; + + @override + String get markdownHtmlLists => 'Danh sách'; + + @override + String get markdownHtmlHtmlContainers => 'Vùng chứa'; + + @override + String get markdownHtmlHtmlTextBlocks => 'Khối văn bản'; + + @override + String get markdownHtmlHtmlFigures => 'Hình và hình ảnh'; + + @override + String get markdownHtmlHtmlPreformatted => 'Mã định dạng sẵn'; + + @override + String get markdownHtmlHtmlDisclosure => 'Khối mở rộng'; + + @override + String get markdownHtmlHtmlDescriptionLists => 'Danh sách mô tả'; + + @override + String get markdownHtmlHtmlFormattingTags => 'Thẻ định dạng'; + + @override + String get markdownHtmlHtmlInlineCodeTags => 'Thẻ mã nội tuyến'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => 'Thẻ văn bản ngữ nghĩa'; + + @override + String get markdownHtmlSanitizedPreview => 'Bản xem trước đã làm sạch'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + 'HTML được cho phép được chuyển thành các khối xem trước của BusyMark, không được kết xuất trong trình duyệt.'; + + @override + String get markdownHtmlSourcePreserved => 'Giữ nguyên mã nguồn'; + + @override + String get markdownHtmlSourcePreservedDescription => + 'HTML thô chưa chỉnh sửa được lưu lại chính xác như văn bản mã nguồn.'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'Markdown bên trong HTML'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + 'Các dấu Markdown bên trong HTML thô được kết xuất như văn bản theo nghĩa đen.'; + + @override + String get markdownHtmlBlockedContent => 'Nội dung hoạt động bị chặn'; + + @override + String get markdownHtmlBlockedContentDescription => + 'Script, style, frame, form, SVG, MathML, sự kiện và các thuộc tính không an toàn bị chặn.'; + + @override + String get markdownHtmlSafeUrls => 'Chỉ URL an toàn'; + + @override + String get markdownHtmlSafeUrlsDescription => + 'Liên kết cho phép URL http, https, mailto, tel, tương đối và fragment; các scheme không an toàn bị chặn.'; + + @override + String get exportAsPdf => 'Xuất dưới dạng PDF'; + + @override + String get pdfExportDescription => + 'Chọn bố cục trang cho tệp PDF hoàn chỉnh, được trình bày chuyên nghiệp.'; + + @override + String get pdfRemoteImagesNote => + 'Hình ảnh từ xa không được tải xuống trong quá trình xuất. Hình ảnh cục bộ sẽ được đưa vào khi có thể.'; + + @override + String get pdfPageSize => 'Cỡ trang'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => 'Hướng trang'; + + @override + String get pdfPortrait => 'Dọc'; + + @override + String get pdfLandscape => 'Ngang'; + + @override + String get pdfMargins => 'Lề'; + + @override + String get pdfMarginNarrow => 'Hẹp'; + + @override + String get pdfMarginNormal => 'Bình thường'; + + @override + String get pdfMarginWide => 'Rộng'; + + @override + String get pdfIncludePageNumbers => 'Bao gồm số trang'; + + @override + String get export => 'Xuất'; + + @override + String get exportingPdf => 'Đang xuất PDF…'; + + @override + String get fileTypePdf => 'Tài liệu PDF'; + + @override + String pdfExported(String fileName) { + return 'Đã xuất $fileName.'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return 'Đã xuất $fileName với $count cảnh báo.'; + } + + @override + String get pdfExportUnavailable => + 'Thiếu thành phần xuất PDF. Hãy cài đặt lại BusyMark và thử lại.'; + + @override + String get pdfExportTimedOut => + 'Quá trình xuất PDF mất quá nhiều thời gian và đã bị dừng.'; + + @override + String get pdfExportFailed => + 'BusyMark không thể xuất tài liệu này dưới dạng PDF.'; + + @override + String get visualizationRendering => 'Đang kết xuất…'; + + @override + String get visualizationStale => 'Đang hiển thị bản kết xuất hợp lệ gần nhất'; + + @override + String get visualizationShowSource => 'Hiện mã nguồn'; + + @override + String get visualizationShowRender => 'Hiện bản kết xuất'; + + @override + String get visualizationFitWidth => 'Vừa theo chiều rộng'; + + @override + String get visualizationSaveImage => 'Lưu hình ảnh'; + + @override + String get visualizationCopyImage => 'Sao chép hình ảnh'; + + @override + String get visualizationImageCopied => 'Đã sao chép hình ảnh'; + + @override + String get visualizationOpenApiReference => 'Mở tham chiếu API'; + + @override + String get visualizationValid => 'Hợp lệ'; + + @override + String get visualizationInvalid => 'Không hợp lệ'; + + @override + String get visualizationServers => 'Máy chủ'; + + @override + String get visualizationPaths => 'Đường dẫn'; + + @override + String get visualizationOperations => 'Thao tác'; + + @override + String get visualizationTags => 'Thẻ'; + + @override + String get visualizationNoOperations => 'Không có thao tác phù hợp'; + + @override + String get visualizationSearchOperations => 'Tìm kiếm thao tác'; + + @override + String get visualizationRenderFailed => + 'Không thể kết xuất hình minh họa này.'; + + @override + String get visualizationRetry => 'Thử lại'; + + @override + String visualizationSaved(String fileName) { + return 'Đã lưu $fileName'; + } + + @override + String get shortcutExportPdfDescription => + 'Xuất tài liệu hiện tại hoặc mô-đun Writerside dưới dạng PDF.'; + + @override + String get instances => 'Các phiên bản'; + + @override + String get newInstance => 'Phiên bản mới'; + + @override + String get newTocLibrary => 'Thư viện mục lục mới'; + + @override + String get editInstance => 'Chỉnh sửa phiên bản'; + + @override + String get openTocFile => 'Mở tệp mục lục'; + + @override + String get createInstance => 'Tạo phiên bản'; + + @override + String get createTocLibrary => 'Tạo thư viện mục lục'; + + @override + String get instanceContent => 'Nội dung'; + + @override + String get instanceContentSource => 'Tạo từ'; + + @override + String get emptyInstance => 'Phiên bản trống'; + + @override + String get markdownFiles => 'Tệp Markdown cục bộ'; + + @override + String get chooseMarkdownFolder => 'Chọn thư mục Markdown'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Chọn một thư mục chứa các tệp Markdown.'; + + @override + String get instanceAppearance => 'Giao diện'; + + @override + String get instanceColor => 'Màu biểu tượng'; + + @override + String get instanceVersion => 'Phiên bản'; + + @override + String instanceVersionInherited(String version) { + return 'Phiên bản dự án là $version khi trường này để trống.'; + } + + @override + String get instanceWebPath => 'Đường dẫn web'; + + @override + String get instanceStatus => 'Trạng thái'; + + @override + String get instanceStatusRelease => 'Bản phát hành'; + + @override + String get instanceStatusEap => 'Truy cập sớm'; + + @override + String get instanceStatusDeprecated => 'Không còn được dùng'; + + @override + String get allowSearchEngineIndexing => + 'Cho phép công cụ tìm kiếm lập chỉ mục'; + + @override + String get allowSearchEngineIndexingDescription => + 'Cho phép các công cụ tìm kiếm bên ngoài lập chỉ mục đầu ra này.'; + + @override + String get offlineArtifact => 'Gói ngoại tuyến'; + + @override + String get offlineArtifactDescription => + 'Đóng gói tài nguyên để tài liệu được xây dựng có thể hoạt động độc lập.'; + + @override + String get instanceOutputSettings => 'Cài đặt đầu ra'; + + @override + String get markdownImportSource => 'Nguồn Markdown'; + + @override + String get markdownImportFiles => 'Tệp Markdown'; + + @override + String get selectNone => 'Bỏ chọn tất cả'; + + @override + String markdownFilesFound(int count) { + return 'Đã tìm thấy $count tệp Markdown'; + } + + @override + String get noMarkdownFilesFound => + 'Không tìm thấy tệp Markdown nào trong thư mục này.'; + + @override + String get copyReferencedMedia => 'Sao chép phương tiện được tham chiếu'; + + @override + String get copyReferencedMediaDescription => + 'Sao chép hình ảnh và video cục bộ được các tệp đã chọn tham chiếu, đồng thời giữ nguyên đường dẫn tương đối.'; + + @override + String get instanceIdRenameWarningTitle => 'Đổi tên ID phiên bản?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark sẽ đổi tên tệp .tree và cập nhật các tham chiếu dự án Writerside từ “$oldId” thành “$newId”. Các script xuất bản không được thay đổi và phải cập nhật riêng.'; + } + + @override + String get renameAndUpdateReferences => 'Đổi tên và cập nhật tham chiếu'; + + @override + String get tocLibraryDescription => + 'Thư viện mục lục lưu trữ các phần có thể tái sử dụng và không tạo đầu ra riêng.'; + + @override + String get defaultTocLibraryName => 'Mục lục dùng chung'; + + @override + String get instanceColorAutomatic => 'Tự động'; + + @override + String get instanceColorBlue => 'Xanh dương'; + + @override + String get instanceColorGreen => 'Xanh lá'; + + @override + String get instanceColorOrange => 'Cam'; + + @override + String get instanceColorPurple => 'Tím'; + + @override + String get instanceColorRed => 'Đỏ'; + + @override + String get instanceColorTeal => 'Xanh mòng két'; + + @override + String get instanceColorYellow => 'Vàng'; + + @override + String get errorWritersideInstanceNameRequired => 'Nhập tên phiên bản.'; + + @override + String errorWritersideInstanceIdExists(String id) { + return 'Đã có phiên bản với ID “$id”.'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return 'Cây phiên bản đã tồn tại: $path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Thư mục nguồn Markdown không tồn tại: $path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + 'Chọn ít nhất một tệp Markdown để nhập.'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return 'Đây không phải là tệp Markdown có thể đọc bên trong nguồn đã chọn: $path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return 'Việc nhập sẽ ghi đè một tệp dự án hiện có: $path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + 'Các tệp phiên bản đã thay đổi trên đĩa. Hãy xem lại và thử lại.'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark không thể khôi phục hoàn toàn thay đổi phiên bản. Hãy xem lại các tệp này trước khi tiếp tục: $paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + 'Thư viện mục lục không thể nhập các chủ đề Markdown.'; + + @override + String get errorWritersideInstanceWebPathInvalid => + 'Đường dẫn web phải nằm trên một dòng duy nhất.'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Cấu hình phiên bản Writerside không hợp lệ. Hãy sửa các chẩn đoán rồi thử lại.'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark không thể đưa các thay đổi phiên bản vào stage một cách an toàn.'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return 'Trạng thái phiên bản không xác định “$status”. Sử dụng release, eap hoặc deprecated.'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return 'ID phiên bản “$id” được nhiều tệp cây sử dụng.'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml phải có phần tử gốc .'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return 'Giá trị $name “$value” phải là true hoặc false.'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + 'Phần tử phải chỉ định ID phiên bản.'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + ' trong cây phải chỉ định cả from và element-id.'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + ' trong cây phải chỉ định id.'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + 'Tham chiếu mục lục giữa các phiên bản phải chỉ định cả ref và in.'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + 'Một phần tử mục lục không thể nhắm đến nhiều hơn một chủ đề, tham chiếu, liên kết hoặc chuyển hướng.'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return 'ID phần tử cây “$id” được khai báo nhiều hơn một lần.'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + 'Tệp nhóm phiên bản phải có phần tử gốc .'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + 'Một nhóm phiên bản phải chỉ định id không trống và danh sách phiên bản.'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return 'ID nhóm phiên bản “$id” được khai báo nhiều hơn một lần.'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return 'Include mục lục “$source#$id” thuộc mô-đun bên ngoài “$origin” và không thể mở rộng trong không gian làm việc này.'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return 'Phần tử cây “$id” không tồn tại trong cây đã đăng ký “$source”.'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return 'Include cây “$source#$id” tạo ra một vòng lặp.'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return 'Điều kiện phiên bản tham chiếu đến nhóm không xác định “@$group”.'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return 'Tham chiếu giữa các phiên bản nhắm đến phiên bản không xác định “$instance”.'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return 'Chủ đề “$topic” không nằm trong phiên bản được tham chiếu “$instance”.'; + } + + @override + String get download => 'Tải xuống'; + + @override + String get exportWritersideAsPdf => 'Xuất Writerside dưới dạng PDF'; + + @override + String get writersidePdfContent => 'Nội dung xuất'; + + @override + String get writersidePdfPage => 'Trang'; + + @override + String get exportingWritersidePdf => 'Đang xuất PDF Writerside…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => 'Ollama cục bộ'; + + @override + String get aiDisabled => 'Đã tắt'; + + @override + String get aiLocalOnlyDescription => + 'Chỉnh sửa bằng AI chỉ được thực hiện theo yêu cầu rõ ràng. BusyMark chỉ gửi ngữ cảnh được hiển thị cho nhà cung cấp đã chọn và không bao giờ áp dụng đề xuất khi chưa xem lại.'; + + @override + String get aiProvider => 'Nhà cung cấp AI'; + + @override + String get aiDefaultProvider => 'Nhà cung cấp mặc định'; + + @override + String get aiConfigureProvider => 'Cấu hình nhà cung cấp'; + + @override + String get aiChooseProvider => 'Chọn nhà cung cấp AI'; + + @override + String get aiOllamaEndpoint => 'Điểm cuối Ollama'; + + @override + String get aiOllamaModel => 'Mô hình Ollama'; + + @override + String get aiTestConnection => 'Kiểm tra kết nối'; + + @override + String get aiTestingConnection => 'Đang kiểm tra…'; + + @override + String aiConnectionReady(int count) { + return 'Đã kết nối. Tìm thấy $count mô hình đã cài đặt.'; + } + + @override + String get aiNoModels => 'Chưa chọn mô hình nào.'; + + @override + String get aiConnectionFailed => + 'BusyMark không thể xác minh việc tạo văn bản bằng AI.'; + + @override + String get aiConfigureFirst => + 'Bật một nhà cung cấp AI và xác minh mô hình trong Cài đặt → AI.'; + + @override + String get aiEditWithAi => 'Chỉnh sửa bằng AI'; + + @override + String get aiRefineWithAi => 'Tinh chỉnh bằng AI'; + + @override + String get aiInstruction => 'Hướng dẫn'; + + @override + String get aiChangeTarget => 'Có thể thay đổi gì'; + + @override + String get aiSharedContext => 'Ngữ cảnh được chia sẻ với AI'; + + @override + String get aiTargetSelection => 'Nội dung đã chọn'; + + @override + String get aiTargetInsertAfterBlock => 'Chèn sau khối hiện tại'; + + @override + String get aiTargetCurrentBlock => 'Khối hiện tại'; + + @override + String get aiTargetCurrentSection => 'Phần hiện tại'; + + @override + String get aiTargetCompleteDocument => 'Toàn bộ tài liệu'; + + @override + String get aiContextNone => 'Không có ngữ cảnh tài liệu'; + + @override + String get aiContextSelection => 'Nội dung đã chọn'; + + @override + String get aiContextCurrentBlock => 'Khối hiện tại'; + + @override + String get aiContextCurrentSection => 'Phần hiện tại'; + + @override + String get aiContextCompleteDocument => 'Toàn bộ tài liệu'; + + @override + String get aiGenerating => 'Đang tạo đề xuất…'; + + @override + String get aiProposal => 'Đề xuất của AI'; + + @override + String get aiGenerateProposal => 'Tạo đề xuất'; + + @override + String aiContextDisclosure(int count) { + return 'Nhà cung cấp đã chọn sẽ nhận $count ký tự từ ngữ cảnh được hiển thị.'; + } + + @override + String get aiOriginal => 'Bản gốc'; + + @override + String get aiSuggested => 'Đề xuất'; + + @override + String get aiApplyProposal => 'Áp dụng đề xuất'; + + @override + String aiTokenUsage(int input, int output) { + return '$input token đầu vào · $output token đầu ra'; + } + + @override + String get aiStaleProposal => + 'Tài liệu đã thay đổi trong khi đề xuất này được tạo. Hãy thực hiện lại thao tác.'; + + @override + String get gitAiStagedChangesChanged => + 'Các thay đổi trong stage đã thay đổi trong khi thông điệp commit này được tạo. Hãy thực hiện lại thao tác.'; + + @override + String get aiViewContext => 'Xem ngữ cảnh đã gửi'; + + @override + String get aiReviewExactContent => 'Xem lại nội dung chính xác'; + + @override + String get aiContentToChange => 'Nội dung cần thay đổi'; + + @override + String get aiContentSentToAi => 'Nội dung đã gửi cho AI'; + + @override + String get aiApiKey => 'Khóa API'; + + @override + String get aiApiKeyStoredHint => + 'Khóa đã được lưu trong kho thông tin xác thực của hệ thống'; + + @override + String get aiApiKeyEnterHint => 'Nhập khóa API của nhà cung cấp'; + + @override + String get aiReplaceApiKey => 'Thay thế khóa API'; + + @override + String get aiSaveApiKey => 'Lưu an toàn khóa API'; + + @override + String get aiRemoveApiKey => 'Xóa khóa API đã lưu'; + + @override + String get aiCredentialSaved => + 'Đã lưu khóa API trong kho thông tin xác thực của hệ thống.'; + + @override + String get aiCredentialRemoved => 'Đã xóa khóa API đã lưu.'; + + @override + String get aiModelRouting => 'Định tuyến mô hình'; + + @override + String get aiAutomaticRouting => 'Tự động theo tác vụ'; + + @override + String get aiFixedModelRouting => 'Sử dụng mô hình đã chọn'; + + @override + String get aiPreferredModel => 'Mô hình ưu tiên'; + + @override + String get aiModel => 'Mô hình'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests yêu cầu · $input token đầu vào · $output token đầu ra'; + } + + @override + String aiCloudConsentTitle(String provider) { + return 'Gửi nội dung đến $provider?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return 'Bật $provider'; + } + + @override + String get aiCloudConsentMessage => + 'Chỉ nội dung hiển thị trong mỗi hộp thoại xem lại AI được gửi đi. Yêu cầu không được lưu trạng thái, đề xuất cần được xem lại và khóa API được lưu trong kho thông tin xác thực hệ thống Linux.'; + + @override + String aiCloudConsentRequired(String provider) { + return 'Trước tiên, hãy xác nhận việc chia sẻ dữ liệu với $provider trong Cài đặt → AI.'; + } + + @override + String aiGenerationVerified(String model, int count) { + return 'Đã xác minh việc tạo bằng $model. Có sẵn $count mô hình tương thích.'; + } + + @override + String get aiColdStartObserved => + 'Đã phát hiện khởi động nguội của mô hình cục bộ.'; + + @override + String get aiNoCompatibleModels => + 'Không có mô hình tạo văn bản tương thích nào khả dụng.'; + + @override + String get aiEnableProvider => 'Trước tiên, hãy bật một nhà cung cấp AI.'; + + @override + String get aiDraftCommitMessage => 'Soạn thông điệp commit'; + + @override + String get aiDrafting => 'Đang soạn…'; + + @override + String get aiDraftWithAi => 'Soạn bằng AI'; + + @override + String get generateOrUpdateMarkdownToc => 'Tạo/cập nhật mục lục'; + + @override + String get markdownTocTitle => 'Mục lục'; + + @override + String markdownTocUpdated(int count) { + return 'Đã cập nhật mục lục với $count mục.'; + } + + @override + String get markdownTocNoHeadings => + 'Thêm ít nhất một tiêu đề phần trước khi tạo mục lục.'; + + @override + String get markdownTocMalformedMarkers => + 'Các dấu đánh dấu mục lục BusyMark bị thiếu, trùng lặp hoặc không đúng thứ tự.'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return 'Tiêu đề cấp $level theo sau cấp $previousLevel; hãy xem lại cấu trúc lồng ghép của các phần.'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + 'Văn bản liên kết trống; hãy cung cấp tên có khả năng truy cập mô tả mục đích của liên kết.'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return 'Xem lại liệu văn bản liên kết “$text” có mô tả mục đích của liên kết trong ngữ cảnh hay không.'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + 'Các ô tiêu đề bảng phải xác định cột của chúng; hãy hoàn thành từng tiêu đề trống.'; + + @override + String get mathRenderFailed => 'Không thể kết xuất biểu thức toán học.'; + + @override + String get inlineMath => 'Toán nội tuyến'; + + @override + String get displayMath => 'Toán hiển thị'; +} diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart new file mode 100644 index 00000000..2448ac7e --- /dev/null +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -0,0 +1,6703 @@ +// ignore_for_file: text_direction_code_point_in_literal, text_direction_code_point_in_comment + +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Chinese (`zh`). +class AppLocalizationsZh extends AppLocalizations { + AppLocalizationsZh([String locale = 'zh']) : super(locale); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => 'Markdown 文件和兼容 Writerside 的文档项目编辑器。'; + + @override + String get aboutBusyMark => '关于 BusyMark'; + + @override + String get aboutTagline => 'Markdown 和 Writerside 编辑器'; + + @override + String get aboutLicenseLabel => '许可证'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => '网站'; + + @override + String get aboutSourceCode => '源代码'; + + @override + String get reportIssue => '报告问题'; + + @override + String get feedbackCategory => '类别'; + + @override + String get feedbackChooseCategory => '选择类别'; + + @override + String get feedbackCategoryProblem => '问题或错误'; + + @override + String get feedbackCategoryFeature => '功能请求'; + + @override + String get feedbackCategoryPrivacySecurity => '隐私或安全问题'; + + @override + String get feedbackCategoryUsability => '可用性问题'; + + @override + String get feedbackCategoryOther => '其他'; + + @override + String get feedbackSubject => '主题'; + + @override + String get feedbackMessage => '详细信息'; + + @override + String get feedbackReplyEmail => '回复邮箱(可选)'; + + @override + String get feedbackIncludeTechnicalDetails => '包含技术详细信息'; + + @override + String get feedbackTechnicalDetailsDisclosure => + '启用后,此选项仅会添加您的 Linux 操作系统版本和 BusyMark 应用语言。不会附加日志、文件、账户数据或其他诊断信息。'; + + @override + String get feedbackSubmit => '提交'; + + @override + String get feedbackSubmitting => '正在提交…'; + + @override + String get feedbackCategoryRequired => '请选择类别。'; + + @override + String get feedbackSubjectLength => '主题必须包含 3 到 120 个字符。'; + + @override + String get feedbackMessageLength => '信息必须包含 10 到 5,000 个字符。'; + + @override + String get feedbackReplyEmailInvalid => '请输入有效的邮箱地址,或将此字段留空。'; + + @override + String get feedbackConnectionFailure => 'BusyMark 无法连接。请检查网络连接后重试。'; + + @override + String get feedbackTimeoutFailure => '请求超时。请重试。'; + + @override + String get feedbackRateLimitedFailure => '此连接发送的报告过多。请稍候再试。'; + + @override + String get feedbackRejectedFailure => '服务器拒绝了此报告。请检查表单字段后重试。'; + + @override + String get feedbackServerFailure => '服务器无法接收此报告。请稍后重试。'; + + @override + String feedbackSuccess(String id) { + return '反馈已发送。参考 ID:$id'; + } + + @override + String get advanced => '高级'; + + @override + String get addToGit => '添加到 Git'; + + @override + String get appearance => '外观'; + + @override + String get apply => '应用'; + + @override + String get back => '返回'; + + @override + String get bottomLeft => '左下'; + + @override + String get bottomRight => '右下'; + + @override + String get cancel => '取消'; + + @override + String get choose => '选择'; + + @override + String get chooseLocation => '选择位置'; + + @override + String get copy => '复制'; + + @override + String get copyName => '复制名称'; + + @override + String get copyFileName => '复制文件名'; + + @override + String get copyPath => '复制路径'; + + @override + String get create => '创建'; + + @override + String get creating => '正在创建…'; + + @override + String get cut => '剪切'; + + @override + String get promoteSection => '提升节级别'; + + @override + String get demoteSection => '降低节级别'; + + @override + String get moveSectionUp => '上移节'; + + @override + String get moveSectionDown => '下移节'; + + @override + String get confirmDeleteSectionTitle => '删除此节?'; + + @override + String confirmDeleteSectionMessage(String name) { + return '删除“$name”及其节中的全部内容?此操作无法撤销。'; + } + + @override + String get darkTheme => '深色'; + + @override + String get delete => '删除'; + + @override + String get discard => '放弃'; + + @override + String get editor => '编辑器'; + + @override + String get file => '文件'; + + @override + String get fileHistory => '文件历史记录'; + + @override + String get folder => '文件夹'; + + @override + String get insert => '插入'; + + @override + String get keyboardShortcuts => '键盘快捷键'; + + @override + String get commandPalette => '命令面板'; + + @override + String get commandPaletteHint => '输入命令'; + + @override + String get commandPaletteEmpty => '没有匹配的命令'; + + @override + String get commandUnavailableInContext => '当前编辑器上下文中无法使用此命令'; + + @override + String get lightTheme => '浅色'; + + @override + String get mainMenu => '主菜单'; + + @override + String get fullScreen => '全屏'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => '打开'; + + @override + String get openInFiles => '在文件中打开'; + + @override + String get pathActions => '路径操作'; + + @override + String get outline => '大纲'; + + @override + String get overwrite => '覆盖'; + + @override + String get paste => '粘贴'; + + @override + String get pasteWithoutFormatting => '粘贴为无格式文本'; + + @override + String get reading => '阅读'; + + @override + String get removeFromRecent => '从最近使用记录中移除'; + + @override + String get recent => '最近使用'; + + @override + String get redo => '重做'; + + @override + String get save => '保存'; + + @override + String get search => '搜索'; + + @override + String get selectAll => '全选'; + + @override + String get settings => '设置'; + + @override + String get source => '源代码'; + + @override + String get split => '拆分'; + + @override + String get systemTheme => '系统'; + + @override + String get theme => '主题'; + + @override + String get appLanguage => '语言'; + + @override + String get systemLanguage => '系统'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => '侧边栏面板'; + + @override + String get topLeft => '左上'; + + @override + String get topRight => '右上'; + + @override + String get undo => '撤销'; + + @override + String get validate => '验证'; + + @override + String get validation => '验证'; + + @override + String get viewMode => '视图模式'; + + @override + String get welcome => '欢迎'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => '图像'; + + @override + String get openMarkdownFile => '打开 Markdown 文件'; + + @override + String get markdownFileExtensions => '.md 或 .markdown'; + + @override + String get openFolderOrWritersideProject => '打开文件夹或 Writerside 项目'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown 文件夹或兼容 Writerside 的项目'; + + @override + String get noOpenFile => '没有打开的文件'; + + @override + String get shortcutDeleteTreeItemDescription => '删除选中的文件项,或从目录中移除选中的主题'; + + @override + String get shortcutGroupGeneral => '常规'; + + @override + String get shortcutNewDocument => '创建'; + + @override + String get shortcutNewDocumentDescription => '创建 Markdown 文件或 Writerside 项目'; + + @override + String get shortcutOpenDescription => '打开 Markdown 文件、文件夹或 Writerside 项目'; + + @override + String get shortcutSaveDescription => '保存当前文档'; + + @override + String get shortcutSearchDescription => '搜索当前工作区'; + + @override + String get shortcutKeyboardShortcutsDescription => '显示此键盘快捷键参考'; + + @override + String get shortcutMarkdownAndHtmlDescription => '打开 Markdown 和 HTML 参考'; + + @override + String get shortcutSettingsDescription => '打开 BusyMark 设置'; + + @override + String get shortcutNextTab => '下一个标签页'; + + @override + String get shortcutNextTabDescription => '移至下一个打开的标签页'; + + @override + String get shortcutPreviousTab => '上一个标签页'; + + @override + String get shortcutPreviousTabDescription => '移至上一个打开的标签页'; + + @override + String get shortcutCloseTab => '关闭标签页'; + + @override + String get shortcutCloseTabDescription => '关闭当前标签页'; + + @override + String get shortcutCloseAllTabs => '关闭所有标签页'; + + @override + String get shortcutCloseAllTabsDescription => '关闭所有打开的标签页'; + + @override + String get shortcutGroupTextEditing => '文本编辑'; + + @override + String get shortcutSelectAllDescription => '在源代码模式下选择全部文本;在编辑器模式下按两次以选择所有块'; + + @override + String get shortcutCutDescription => '剪切选中的文本'; + + @override + String get shortcutCopyDescription => '复制选中的文本'; + + @override + String get shortcutPasteDescription => '从剪贴板粘贴'; + + @override + String get shortcutPastePlainTextDescription => '粘贴剪贴板中的无格式文本'; + + @override + String get shortcutUndoDescription => '撤销上次编辑'; + + @override + String get shortcutRedoDescription => '重做上次撤销的编辑'; + + @override + String get shortcutInsertIndentation => '插入缩进'; + + @override + String get shortcutInsertIndentationDescription => '在光标处插入缩进'; + + @override + String get shortcutOutdentSource => '减少源代码缩进'; + + @override + String get shortcutOutdentSourceDescription => '在源代码模式下减少一级缩进'; + + @override + String get shortcutEscape => '关闭搜索或清除块选择'; + + @override + String get shortcutEscapeDescription => '关闭工作区搜索,或在编辑器模式下清除块选择'; + + @override + String get shortcutGroupFormatting => '格式'; + + @override + String get shortcutBoldDescription => '切换选中文本的粗体'; + + @override + String get shortcutItalicDescription => '切换选中文本的斜体'; + + @override + String get shortcutUnderlineDescription => '切换选中文本的下划线'; + + @override + String get shortcutLinkDescription => '插入或编辑链接'; + + @override + String get shortcutInlineCodeDescription => '切换选中文本的行内代码格式'; + + @override + String get shortcutStrikethroughDescription => '切换选中文本的删除线'; + + @override + String get shortcutGroupBlocks => '块'; + + @override + String get shortcutParagraphDescription => '将当前块设为段落'; + + @override + String get shortcutHeading1Description => '将当前块设为标题 1'; + + @override + String get shortcutHeading2Description => '将当前块设为标题 2'; + + @override + String get shortcutHeading3Description => '将当前块设为标题 3'; + + @override + String get shortcutHeading4Description => '将当前块设为标题 4'; + + @override + String get shortcutHeading5Description => '将当前块设为标题 5'; + + @override + String get shortcutHeading6Description => '将当前块设为标题 6'; + + @override + String get shortcutGroupLists => '列表'; + + @override + String get numberedList => '编号列表'; + + @override + String get shortcutNumberedListDescription => '切换编号列表格式'; + + @override + String get bulletedList => '项目符号列表'; + + @override + String get shortcutBulletedListDescription => '切换项目符号列表格式'; + + @override + String get checklist => '检查清单'; + + @override + String get shortcutChecklistDescription => '切换检查清单格式'; + + @override + String get shortcutGroupSidebar => '侧边栏'; + + @override + String get sidebarViewMenu => '侧边栏视图'; + + @override + String get createMarkdownFile => '创建 Markdown 文件'; + + @override + String get createMarkdownFileDescription => '开始创建未保存的本地 Markdown 文档'; + + @override + String get createWritersideProject => '创建 Writerside 项目'; + + @override + String get createWritersideProjectDescription => '开始创建本地兼容 Writerside 的项目'; + + @override + String get defaultProjectName => '文档'; + + @override + String get defaultInstanceName => '用户指南'; + + @override + String get defaultStartTopicTitle => '开始使用'; + + @override + String get projectName => '项目名称'; + + @override + String get directoryName => '目录名称'; + + @override + String get instanceName => '实例名称'; + + @override + String get instanceId => '实例 ID'; + + @override + String get startTopicTitle => '起始主题标题'; + + @override + String get location => '位置'; + + @override + String get projectNameRequired => '项目名称为必填项。'; + + @override + String get directoryNameRequired => '目录名称为必填项。'; + + @override + String get useSingleSafeDirectoryName => '使用单一且安全的目录名称。'; + + @override + String get useLowercaseIdentifier => '使用仅包含小写字母、数字、下划线或连字符的小写标识符。'; + + @override + String get startTopicTitleRequired => '起始主题标题为必填项。'; + + @override + String get createWritersideProjectFailed => '无法创建 Writerside 项目。'; + + @override + String get settingsTitle => 'BusyMark 设置'; + + @override + String get autoSave => '自动保存'; + + @override + String get autoSaveDescription => '在短暂空闲后自动保存文件更改。'; + + @override + String get wordWrap => '自动换行'; + + @override + String get editorFontSize => '编辑器字体大小'; + + @override + String get validateOnEdit => '编辑时验证'; + + @override + String get clearRecentWorkspaces => '清除最近使用的工作区'; + + @override + String get editingButtonsPosition => '编辑按钮位置'; + + @override + String get editingButtonsPositionDescription => '选择浮动 WYSIWYG 编辑按钮的显示位置。'; + + @override + String get editingButtonsDirection => '编辑按钮方向'; + + @override + String get editingButtonsDirectionDescription => '选择水平或垂直排列浮动 WYSIWYG 编辑按钮。'; + + @override + String get horizontal => '水平'; + + @override + String get vertical => '垂直'; + + @override + String get privacy => '隐私'; + + @override + String get allowRemoteImages => '加载远程图像'; + + @override + String get allowRemoteImagesDescription => + '允许 Markdown 预览和编辑器从 http 和 https URL 加载图像。'; + + @override + String get clearRemoteImagePermissions => '清除远程图像权限'; + + @override + String get clearRemoteImagePermissionsDescription => '忘记已获准加载远程图像的工作区。'; + + @override + String get clearGitWorkspaceTrust => '清除受信任的 Git 工作区'; + + @override + String get clearGitWorkspaceTrustDescription => '为之前受信任的工作区启用 Git 功能前先进行询问。'; + + @override + String get settingsWindowSectionTitle => '窗口'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => '启动时重新打开上次的工作区'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'BusyMark 启动时打开上次会话中的工作区和标签页。'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => '有未保存更改时关闭前进行确认'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + '文档有未保存更改时,关闭 BusyMark 前先进行询问。'; + + @override + String get closeUnsavedChangesTitle => '未保存的更改'; + + @override + String get closeUnsavedChangesSingleMessage => + '此文档有未保存的更改。关闭 BusyMark 前保存更改?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '有 $count 个文档包含未保存的更改。关闭 BusyMark 前保存更改?', + one: '有 1 个文档包含未保存的更改。关闭 BusyMark 前保存更改?', + zero: '关闭 BusyMark 前保存更改?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => '取消'; + + @override + String get closeUnsavedChangesDiscard => '放弃'; + + @override + String get closeUnsavedChangesSave => '保存'; + + @override + String get currentFile => '当前文件'; + + @override + String get unsavedChanges => '未保存的更改'; + + @override + String unsavedChangesMessage(String fileName) { + return '$fileName 中有未保存的更改。继续前保存这些更改?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '有 $count 个文档包含未保存的更改。继续前保存它们?', + one: '有 1 个文档包含未保存的更改。继续前保存它?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => '文件已在磁盘上更改'; + + @override + String get fileChangedOnDiskMessage => '自打开此文件后,它已在磁盘上发生更改。覆盖它?'; + + @override + String get untitledMarkdownFileName => '未命名.md'; + + @override + String get unorderedList => '无序列表'; + + @override + String get orderedList => '有序列表'; + + @override + String get taskList => '任务列表'; + + @override + String get toggleTaskChecked => '切换任务选中状态'; + + @override + String get indentListItem => '增加列表项缩进'; + + @override + String get outdentListItem => '减少列表项缩进'; + + @override + String get blockquote => '引用块'; + + @override + String get codeBlock => '代码块'; + + @override + String get codeBlockLanguage => '代码块语言'; + + @override + String get image => '图像'; + + @override + String get video => '视频'; + + @override + String get openVideo => '播放视频'; + + @override + String get pauseVideo => '暂停视频'; + + @override + String get videoUnavailable => '视频不可用'; + + @override + String get videoPreview => '视频预览'; + + @override + String get diagnosticWritersideVideoMissingSource => '视频缺少 src 属性。'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return '不支持的视频源:$source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return '视频文件不存在:$source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return '视频预览图像不存在:$preview'; + } + + @override + String get inlineImage => '行内图像'; + + @override + String get table => '表格'; + + @override + String get htmlBlock => 'HTML 块'; + + @override + String get htmlContentDefault => 'HTML 内容'; + + @override + String get shortcutHtmlBlockDescription => '插入或编辑 HTML 块'; + + @override + String get renderedHtml => '已渲染的 HTML'; + + @override + String get editHtml => '编辑 HTML'; + + @override + String get htmlSource => 'HTML 源代码'; + + @override + String get thematicBreak => '分隔线'; + + @override + String get bold => '粗体'; + + @override + String get italic => '斜体'; + + @override + String get underline => '下划线'; + + @override + String get strikethrough => '删除线'; + + @override + String get inlineCode => '行内代码'; + + @override + String get link => '链接'; + + @override + String get hardLineBreak => '硬换行'; + + @override + String get textStyle => '文本样式'; + + @override + String get paragraph => '段落'; + + @override + String get heading1 => '标题 1'; + + @override + String get heading2 => '标题 2'; + + @override + String get heading3 => '标题 3'; + + @override + String get heading4 => '标题 4'; + + @override + String get heading5 => '标题 5'; + + @override + String get heading6 => '标题 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => '删除表格'; + + @override + String tableColumnNumber(int columnNumber) { + return '列 $columnNumber'; + } + + @override + String get insertColumnLeft => '在左侧插入列'; + + @override + String get insertColumnRight => '在右侧插入列'; + + @override + String get deleteColumn => '删除列'; + + @override + String get tableAlignmentUnspecified => '对齐方式:未指定'; + + @override + String get tableAlignmentLeft => '对齐方式:左对齐'; + + @override + String get tableAlignmentCenter => '对齐方式:居中'; + + @override + String get tableAlignmentRight => '对齐方式:右对齐'; + + @override + String tableRowNumber(int rowNumber) { + return '行 $rowNumber'; + } + + @override + String get insertRowAbove => '在上方插入行'; + + @override + String get insertRowBelow => '在下方插入行'; + + @override + String get deleteRow => '删除行'; + + @override + String get tableHeaderHint => '标题'; + + @override + String get tableCellHint => '单元格'; + + @override + String get language => '语言'; + + @override + String get hideEditingButtons => '隐藏编辑按钮'; + + @override + String get showEditingButtons => '显示编辑按钮'; + + @override + String get altText => '替代文本'; + + @override + String get editorPlaceholderText => '文本'; + + @override + String get editorPlaceholderCode => '代码'; + + @override + String get editorPlaceholderAltText => '替代文本'; + + @override + String get describeTheImage => '描述图像'; + + @override + String get columns => '列'; + + @override + String get rows => '行'; + + @override + String tableHeaderNumber(int columnNumber) { + return '标题 $columnNumber'; + } + + @override + String get tableCellDefault => '单元格'; + + @override + String get noImageSource => '没有图像源'; + + @override + String get remoteImageBlocked => '远程图像已阻止'; + + @override + String get remoteImageBlockedTooltip => '选择是否允许 BusyMark 加载远程图像。'; + + @override + String get remoteImagesBlockedTitle => '远程图像已阻止'; + + @override + String get remoteImagesBlockedMessage => + '本文档引用了来自互联网的图像。加载这些图像可能会向图像托管方泄露网络信息。'; + + @override + String get loadRemoteImagesForWorkspace => '为此工作区加载'; + + @override + String get alwaysLoadRemoteImages => '始终加载远程图像'; + + @override + String get hideSidebar => '隐藏侧边栏面板'; + + @override + String get showSidebar => '显示侧边栏面板'; + + @override + String get showPreview => '显示预览'; + + @override + String get hidePreview => '隐藏预览'; + + @override + String get workspaceKindUnsavedMarkdown => '未保存的 Markdown 文件'; + + @override + String get workspaceKindSingleMarkdown => '单个 Markdown 文件'; + + @override + String get workspaceKindMarkdownFolder => 'Markdown 文件夹'; + + @override + String get workspaceKindWritersideModule => 'Writerside 模块'; + + @override + String get problems => '问题'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 条诊断信息', + one: '1 条诊断信息', + zero: '没有诊断信息', + ); + return '$_temp0'; + } + + @override + String get files => '文件'; + + @override + String get toc => '目录'; + + @override + String get tocActions => '目录操作'; + + @override + String get markdownUnsaved => 'Markdown - 未保存'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个文件', + one: '1 个文件', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => '没有文件'; + + @override + String get newFile => '新建文件'; + + @override + String get noWritersideToc => '没有 Writerside 目录'; + + @override + String get tocSection => '目录节'; + + @override + String get newTopic => '新建主题'; + + @override + String get newChildTopic => '新建子主题'; + + @override + String get newSiblingTopic => '新建同级主题'; + + @override + String get renameTopicFile => '重命名主题文件'; + + @override + String get topicPlacement => '目录位置'; + + @override + String get tocRoot => '位于目录根级别'; + + @override + String get afterSelectedTopic => '位于选中主题之后'; + + @override + String get insideSelectedTopic => '位于选中主题内'; + + @override + String get pasteAfterTopic => '粘贴到主题之后'; + + @override + String get pasteAsChildTopic => '粘贴为子主题'; + + @override + String get removeFromToc => '从目录中移除'; + + @override + String get confirmRemoveFromTocTitle => '从目录中移除?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return '从此目录中移除 $name?主题文件将被保留。'; + } + + @override + String get confirmDeleteTopicTitle => '删除主题文件?'; + + @override + String confirmDeleteTopicMessage(String name) { + return '删除 $name 并从每个目录中移除它?此操作无法撤销。'; + } + + @override + String get safeDeleteTopicFile => '安全删除主题文件…'; + + @override + String get removeTocElement => '移除目录元素'; + + @override + String get reviewUsages => '查看使用情况'; + + @override + String get deleteTopicFile => '删除主题文件'; + + @override + String get removeAction => '移除'; + + @override + String topicRemovalSummary(String topic) { + return '从选中的实例中移除“$topic”。主题文件将被保留。'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return '删除“$topic”,并在整个 Writerside 项目中安全更新其引用。'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个子主题将上移一级。', + one: '1 个子主题将上移一级。', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + '此主题被用作实例的起始页。请查看其使用情况,并在继续前指定其他起始页。'; + + @override + String topicUsagesCount(int count) { + return '使用情况($count)'; + } + + @override + String get noBreakingTopicUsages => '未找到会导致引用失效的引用。'; + + @override + String get topicUsagesFound => 'BusyMark 找到了以下对该主题的引用。'; + + @override + String get topicUsageTocElements => '目录元素'; + + @override + String get topicUsageStartPages => '起始页'; + + @override + String get topicUsageTopicLinks => '主题链接'; + + @override + String get topicUsageIncludes => '包含项'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 次使用', + one: '1 次使用', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => '重构选项'; + + @override + String get updateUsagesAutomatically => '自动更新使用情况'; + + @override + String get updateUsagesAutomaticallyDescription => '移除目录引用和包含项,同时保留链接文本。'; + + @override + String get manualUsageUpdatesRequired => '执行此重构前,某些使用情况需要手动更改。'; + + @override + String get setRedirectTo => '设置重定向到'; + + @override + String get noRedirectDescription => '不重定向旧的已发布页面。'; + + @override + String get redirectTarget => '重定向目标'; + + @override + String get remainingUsagesBlockRemoval => '请在继续前查看并更新剩余的使用情况,或在可用时启用自动更新。'; + + @override + String usagesOfTopic(String topic) { + return '$topic 的使用情况'; + } + + @override + String get noUsagesFound => '未找到使用情况'; + + @override + String get outsideSelectedInstance => '在选中的实例之外'; + + @override + String get doRefactor => '执行重构'; + + @override + String get orphanTopicTitle => '主题文件已不再使用'; + + @override + String get keepTopicFile => '保留主题文件'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic”在此 Writerside 项目中已不再使用。删除该文件,或保留它以供其他实例使用。'; + } + + @override + String get defaultNewTopicTitle => '新主题'; + + @override + String get topicTitle => '主题标题'; + + @override + String get fileName => '文件名'; + + @override + String get topicTitleRequired => '主题标题为必填项。'; + + @override + String get fileNameRequired => '文件名为必填项。'; + + @override + String get rename => '重命名'; + + @override + String get confirmDeleteFileTitle => '删除文件?'; + + @override + String get confirmDeleteFolderTitle => '删除文件夹?'; + + @override + String confirmDeleteFileMessage(String name) { + return '删除 $name?此操作无法撤销。'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return '删除 $name 及其中的所有文件?此操作无法撤销。'; + } + + @override + String get useSingleSafeFileName => '使用单一且安全的文件名。'; + + @override + String useExpectedExtension(String extension) { + return '为选中的格式使用 $extension 扩展名。'; + } + + @override + String get useIdentifierCharacters => '在扩展名之前仅使用字母、数字、下划线或连字符。'; + + @override + String get topicIdAlreadyExists => '主题 ID 已存在。'; + + @override + String get createWritersideTopicFailed => '无法创建 Writerside 主题。'; + + @override + String get noOutline => '没有大纲'; + + @override + String expandKind(String kind) { + return '展开 $kind'; + } + + @override + String collapseKind(String kind) { + return '折叠 $kind'; + } + + @override + String get foldKindSection => '节'; + + @override + String get foldKindList => '列表'; + + @override + String get foldKindQuote => '引用'; + + @override + String get foldKindTag => '标签'; + + @override + String get sourceSearchPreviousMatch => '上一个匹配项'; + + @override + String get sourceSearchNextMatch => '下一个匹配项'; + + @override + String get sourceSearchCaseSensitive => '区分大小写'; + + @override + String get sourceSearchWholeWord => '全字匹配'; + + @override + String get sourceSearchRegex => '正则表达式'; + + @override + String get sourceSearchReplacement => '替换为'; + + @override + String get sourceSearchReplaceCurrent => '替换当前匹配项'; + + @override + String get sourceSearchReplaceAndFindNext => '替换并查找下一个'; + + @override + String get sourceSearchReplaceAll => '全部替换'; + + @override + String get workspaceReplace => '在工作区中替换'; + + @override + String get reviewReplacements => '查看替换内容'; + + @override + String get applyReplacements => '应用替换'; + + @override + String get skippedFiles => '跳过的文件'; + + @override + String get workspaceReplaceDirtyBuffer => '未保存的编辑器内容'; + + @override + String get workspaceReplaceDiskContent => '磁盘上的已保存内容'; + + @override + String selectFileMatches(int count) { + return '选择全部 $count 个匹配项'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return '已在 $files 个文件中替换 $matches 个匹配项;跳过 $skipped 个。'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 末尾有换行符'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 末尾无换行符'; + } + + @override + String get normalizeLineEndings => '规范化行尾'; + + @override + String get mixedLineEndingsSavePrompt => '此文档包含混合的行尾格式。请选择一种格式。'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName 使用混合的行尾格式。请在替换前选择要使用的格式。'; + } + + @override + String get workspaceReplaceIssueOversized => '已跳过过大的文件。'; + + @override + String get workspaceReplaceIssueUnreadable => '已跳过无法读取的文件。'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => '已跳过不是有效 UTF-8 的文件。'; + + @override + String get workspaceReplaceIssueTruncated => '替换预览已被截断。'; + + @override + String get workspaceReplaceIssueFileChanged => '已跳过预览后发生变化的文件。'; + + @override + String get workspaceReplaceIssueBufferChanged => '已跳过预览后发生变化的编辑器缓冲区。'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + '请在替换前选择 LF 或 CRLF 规范化。'; + + @override + String get workspaceReplaceIssuePartialConflict => + '由于文件同时发生了变化,回滚已停止。部分替换可能仍然存在;被移出的内容已保留在下方路径中。'; + + @override + String get workspaceReplaceIssueApplyFailed => '无法提交经过审查的替换;没有文件发生更改。'; + + @override + String externalChangesTitle(String fileName) { + return '外部更改 — $fileName'; + } + + @override + String get externalFileDeleted => '此文件已从磁盘删除。'; + + @override + String get externalFileChanged => '在您有未保存编辑时,此文件已在磁盘上发生变化。'; + + @override + String recoveredDocumentReview(String fileName) { + return '已恢复 $fileName 的未保存内容。请检查后保存、另存为或放弃。'; + } + + @override + String get compare => '比较'; + + @override + String get reloadFromDisk => '从磁盘重新加载'; + + @override + String get keepMine => '保留我的版本'; + + @override + String get saveAs => '另存为'; + + @override + String get sourceSearchInvalidRegex => '无效的正则表达式'; + + @override + String get sourceLargeFileFeaturesPaused => '大文件:已暂停语法突出显示和折叠'; + + @override + String get nothingToRead => '没有可读取的内容'; + + @override + String get admonition => '提示块'; + + @override + String get quote => '引用'; + + @override + String get note => '备注'; + + @override + String get tip => '提示'; + + @override + String get warning => '警告'; + + @override + String get tabs => '标签页'; + + @override + String get tab => '标签页'; + + @override + String get procedure => '操作步骤'; + + @override + String get step => '步骤'; + + @override + String get topic => '主题'; + + @override + String get chapter => '章节'; + + @override + String couldNotOpenTarget(String target) { + return '无法打开 $target'; + } + + @override + String linkTargetNotFound(String targetPath) { + return '找不到链接目标:$targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => '无法在编辑器中打开此文件类型'; + + @override + String anchorNotFound(String anchor) { + return '找不到锚点:$anchor'; + } + + @override + String get noProblemsFound => '未发现问题'; + + @override + String get noResults => '无结果'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - 第 $lineNumber 行'; + } + + @override + String get untitledResult => '未命名结果'; + + @override + String get documentKindMarkdownFile => 'Markdown 文件'; + + @override + String get documentKindWritersideMarkdownTopic => 'Writerside Markdown 主题'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML 主题'; + + @override + String get documentKindWritersideTree => 'Writerside 树'; + + @override + String get documentKindConfigurationFile => '配置文件'; + + @override + String get documentKindVariablesFile => '变量文件'; + + @override + String get documentKindCategoriesFile => '类别文件'; + + @override + String get documentKindResourceFile => '资源文件'; + + @override + String workspaceErrorOpenFailed(String error) { + return '打开失败:$error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return '无法创建 Writerside 项目:$error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return '无法创建 Writerside 主题:$error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return '无法打开文件:$error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => '选择保存此 Markdown 文件的位置。'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => '保存已阻止:文件已在磁盘上发生变化。'; + + @override + String workspaceErrorSaveFailed(String error) { + return '保存失败:$error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return '文件操作失败:$error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return '验证失败:$error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已恢复 $count 个未保存的文档。请在保存或放弃前逐一检查。', + one: '已恢复 1 个未保存的文档。请在保存或放弃前进行检查。', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '无法恢复 $count 条损坏的恢复记录。有效的恢复记录仍可用。', + one: '无法恢复一条损坏的恢复记录。原始恢复文件已保留以供检查。', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return '路径不存在:$path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return '目标目录已存在且不为空:$path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return '目标路径已存在但不是目录:$path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return '生成的文件已存在:$path'; + } + + @override + String get errorParentDirectoryRequired => '必须指定父目录。'; + + @override + String errorParentDirectoryMissing(String path) { + return '父目录不存在:$path'; + } + + @override + String errorDirectoryMissing(String path) { + return '目录不存在:$path'; + } + + @override + String errorPathAlreadyExists(String path) { + return '路径已存在:$path'; + } + + @override + String get errorFileNameRequired => '文件名为必填项。'; + + @override + String get errorFileNameUnsafe => '文件名必须是单一且安全的路径段。'; + + @override + String get errorFileOperationInvalidTarget => '无法将文件夹移动到其自身中。'; + + @override + String get errorFileOperationOutsideRoot => '文件操作必须在工作区内进行。'; + + @override + String get errorFileOperationRoot => '无法从文件树更改工作区根目录。'; + + @override + String get errorProjectNameRequired => '项目名称为必填项。'; + + @override + String get errorDirectoryNameRequired => '目录名称为必填项。'; + + @override + String get errorDirectoryNameUnsafe => '目录名称必须是单一且安全的路径段。'; + + @override + String get errorInstanceIdInvalid => '实例 ID 必须以小写字母开头,且只能包含小写字母、数字、下划线和连字符。'; + + @override + String get errorTopicFileInvalid => '主题文件名必须是没有路径分隔符的 Markdown 文件名。'; + + @override + String get errorTopicTitleRequired => '主题标题为必填项。'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Writerside 模块根目录不存在:$path'; + } + + @override + String get errorWritersideModuleNotOpen => '必须打开 Writerside 模块才能创建主题。'; + + @override + String get errorWritersideInstanceTreeMissing => 'Writerside 模块没有实例树。'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside 树文件不存在:$path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return '主题 ID \"$topicId\" 已存在于此帮助模块中。'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return '主题文件已存在:$path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return '选中的树中不存在引用主题:$topic'; + } + + @override + String get errorWritersideTocNodeMissing => '选中的目录项已不存在。'; + + @override + String get errorWritersideTocInvalidMove => '目录项无法移动到自身或其子项中。'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return '无法删除起始主题 $topic。请先选择其他起始页。'; + } + + @override + String get errorWritersideSafeDeleteRequired => '请对 Writerside 主题文件使用安全删除。'; + + @override + String get errorWritersideTopicUsageScanFailed => '无法完成主题使用情况扫描。没有文件发生更改。'; + + @override + String get errorWritersideTopicUsagesRemain => '某些主题使用情况仍需处理。请先查看后再继续。'; + + @override + String get errorWritersideRedirectInvalid => '选中的重定向目标已无效。请重新选择。'; + + @override + String errorWritersideRollbackFailed(String paths) { + return '无法完全回滚主题移除。请在继续前查看这些路径:$paths'; + } + + @override + String get errorTopicsRootUnsafe => '主题根目录必须是安全的相对目录。'; + + @override + String get errorTopicFileNameUnsafe => '主题文件名必须是单一且安全的路径段。'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return '主题文件扩展名必须与选中的格式匹配($extension)。'; + } + + @override + String get errorTopicFileNameInvalid => '主题文件名只能包含字母、数字、下划线和连字符。'; + + @override + String errorUnknown(String code) { + return '未知错误:$code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return '无法读取文件元数据:$error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => '检测到大型工作区。为保持应用响应速度,已跳过部分文件。'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return '无法检查工作区项:$error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => '文件超过 beta 自动解析限制。'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return '无法读取 Markdown 文件:$error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => 'Writerside 标题属性块格式错误。'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return '标题 ID“$id”重复。'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + '额外的顶级 H1 标题将被视为章节。'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown 主题没有 H1 或 front matter 标题。'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => 'XML 主题缺少标题。'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return '主题“$fileName”缺少标题。'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => 'front matter 未闭合。'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => '不安全的 HTML 元素。'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return '链接目标不存在:$targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return '锚点“$anchor”不存在。'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return '图像“$destination”缺少替代文本。'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return '图像不存在:$destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return '无效的 XML:$message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg 根元素必须是 。'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'snippets 声明缺少 src。'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'instance-groups 声明缺少 src。'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return '不支持的 keymaps 模式:$mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'instance 声明缺少 src。'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg 未注册实例。'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree 根元素必须是 。'; + + @override + String get diagnosticWritersideTreeMissingId => '实例配置文件缺少 id。'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return '树文件名(不含扩展名)与实例 ID“$id”不匹配。'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => '非库实例缺少 start-page。'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return '起始页“$startPage”不存在。'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return '主题“$topic”在此实例目录中出现多次。'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + '变量声明必须包含名称和值。'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return '变量“$name”被声明了多次。'; + } + + @override + String get diagnosticWritersideCategoryMissingId => '类别缺少 id。'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return '类别“$id”被声明了多次。'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return '类别顺序“$order”被声明了多次。'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => '.topic 根元素必须是 。'; + + @override + String get diagnosticWritersideTopicMissingRootId => 'XML 主题缺少根 id。'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML 主题根 ID“$id”必须与文件名“$expectedId”匹配。'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return '元素 ID“$elementId”出现多次。'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => ' 缺少 href。'; + + @override + String get diagnosticWritersideConfigMissing => + 'Writerside 模式需要 writerside.cfg。'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return '配置的构建配置目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return '配置的 API 规范目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return '配置的 snippets 目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return '配置的变量文件不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return '配置的类别文件不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return '配置的实例组文件不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return '已注册的实例树“$source”不存在。'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return '无法读取主题文件:$error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return '默认主题目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return '配置的主题目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return '配置的图像目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return '元素 ID“$id”出现多次。'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return '目录引用了缺失的主题“$topic”。'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return '外部 href“$href”无效。'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return '变量“%$name%”未声明。'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return '主题链接“$destination”无法解析。'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return '“$targetName”中不存在锚点“$anchor”。'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => ' 缺少 from。'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return '包含源“$from”不存在。'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return '“$from”中不存在包含元素“$elementId”。'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'seealso 类别“$ref”未声明。'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return '主题引用“$reference”不明确。'; + } + + @override + String diagnosticUnknown(String code) { + return '未知诊断信息:$code'; + } + + @override + String get close => '关闭'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git 差异'; + + @override + String get gitShowDiff => '显示差异'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return '旧 $oldRange → 新 $newRange'; + } + + @override + String get gitDiffNoLines => '无行'; + + @override + String get gitUnavailableTitle => 'Git 不可用'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': '安装 Git,或配置 BusyMark 以使用可用的 Git 可执行文件。$reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => '信任此工作区以使用 Git?'; + + @override + String get gitTrustRequiredMessage => + 'Git 存储库可以通过 hook、过滤器和其他配置运行程序。在 BusyMark 读取存储库数据或启用 Git 操作前,请先信任此工作区。'; + + @override + String get gitTrustWorkspace => '信任工作区'; + + @override + String get gitNotRepositoryTitle => '不是 Git 存储库'; + + @override + String get gitNotRepositoryMessage => '此工作区不在 Git 存储库中。'; + + @override + String get gitInitializeRepository => '初始化存储库'; + + @override + String get gitDetachedHead => '分离的 HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return '分离于 $commit'; + } + + @override + String get gitNoUpstream => '没有上游分支'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个未推送的提交', + one: '1 个未推送的提交', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个待拉取的提交', + one: '1 个待拉取的提交', + ); + return '$_temp0'; + } + + @override + String get gitClean => '干净'; + + @override + String get gitConflicts => '冲突'; + + @override + String get gitChanges => '更改'; + + @override + String get gitStaged => '已暂存'; + + @override + String get gitUnstaged => '未暂存'; + + @override + String get gitHistory => '历史记录'; + + @override + String get gitBranches => '分支'; + + @override + String get gitActions => 'Git 操作'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => '暂存文件'; + + @override + String get gitRemoveFromCommit => '取消暂存文件'; + + @override + String get gitDiscard => '还原'; + + @override + String get gitOpenFile => '打开文件'; + + @override + String get gitMarkResolved => '标记为已解决'; + + @override + String get gitUntracked => '未跟踪'; + + @override + String get gitCommitMessage => '提交消息'; + + @override + String get gitCommitSelectedFiles => '选中的文件'; + + @override + String get gitCommitNoSelectedFiles => '提交前至少暂存一个文件。'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个已暂存文件', + one: '1 个已暂存文件', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => '工作区之外'; + + @override + String get gitCommitMessageRequired => '请输入提交消息。'; + + @override + String get gitCreateBranch => '创建分支'; + + @override + String get gitNewBranch => '新分支'; + + @override + String get gitBranchName => '分支名称'; + + @override + String get gitSwitchBranch => '切换'; + + @override + String get gitNoChanges => '没有更改'; + + @override + String get gitNoHistory => '没有历史记录'; + + @override + String get gitNoBranches => '没有分支'; + + @override + String get gitNoDiff => '没有可显示的差异'; + + @override + String get gitBinaryFile => '二进制文件。BusyMark 不渲染二进制补丁。'; + + @override + String gitBinaryFileInfo(int size) { + return '二进制文件($size 字节)。BusyMark 不渲染二进制补丁。'; + } + + @override + String get gitUnsavedChangesBanner => '保存前不会包含未保存的编辑器更改。'; + + @override + String get gitConfirmDiscardTitle => '放弃 Git 更改?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。', + one: '选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '选中的未跟踪文件将被删除。', + one: '选中的未跟踪文件将被删除。', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '将根据其 Git 状态还原或删除选中的文件。', + one: '将根据其 Git 状态还原或删除选中的文件。', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return '切换到 $branch?'; + } + + @override + String get gitConfirmSwitchBranchMessage => 'Git 切换分支后,BusyMark 将从磁盘重新加载工作区。'; + + @override + String get gitConfirmPushSetUpstreamTitle => '设置上游分支?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return '此分支没有上游分支。当只配置了一个远程仓库时,BusyMark 可以推送 $branch 并设置其上游分支。'; + } + + @override + String get gitProjectHistory => '项目历史记录'; + + @override + String get gitFileHistory => '文件历史记录'; + + @override + String get gitFileHistoryRequiresOpenFile => '文件历史记录需要打开的 Markdown 文件。'; + + @override + String get gitLoadMore => '加载更多'; + + @override + String get gitChangesInCommit => '此提交中的更改'; + + @override + String get gitCompareWithCurrent => '与当前版本比较'; + + @override + String get gitRestoreVersion => '还原此版本'; + + @override + String get gitConfirmRestoreTitle => '还原此文件版本?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark 将使用选中的已提交版本替换当前工作树中的文件。还原后的文件将保持未暂存状态。'; + + @override + String get gitCommitActions => '提交操作'; + + @override + String get gitResetCurrentBranchToHere => '将当前分支重置到此处…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return '将 $branch 重置到 $commit?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return '这会将分支 $branch 移动到提交 $commit。请选择 Git 更新索引和工作树的方式。'; + } + + @override + String get gitReset => '重置'; + + @override + String get gitResetModeSoft => '软'; + + @override + String get gitResetModeSoftDescription => + '仅移动分支。保持索引和工作树不变;与选中提交之间的差异仍会保持暂存状态。'; + + @override + String get gitResetModeMixed => '混合'; + + @override + String get gitResetModeMixedDescription => '移动分支并重置索引。保持工作树不变,使差异处于未暂存状态。'; + + @override + String get gitResetModeHard => '硬'; + + @override + String get gitResetModeHardDescription => + '移动分支并重置索引和工作树。已跟踪的更改将被放弃;造成阻碍的未跟踪文件可能会被删除。'; + + @override + String get gitResetModeKeep => '保留'; + + @override + String get gitResetModeKeepDescription => + '移动分支并重置已跟踪文件,同时保留本地更改。如果这些更改与重置冲突,Git 将中止操作。'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => '文件操作'; + + @override + String get actions => '操作'; + + @override + String get gitStatusAdded => '已添加'; + + @override + String get gitStatusDeleted => '已删除'; + + @override + String get gitStatusRenamed => '已重命名'; + + @override + String get gitStatusCopied => '已复制'; + + @override + String get gitStatusUntracked => '未跟踪'; + + @override + String get gitStatusConflicted => '有冲突'; + + @override + String get gitStatusIgnored => '已忽略'; + + @override + String get gitStatusTypeChanged => '类型已更改'; + + @override + String get gitStatusModified => '已修改'; + + @override + String get gitStatusUnknown => '未知'; + + @override + String get gitErrorUnavailable => 'Git 不可用。'; + + @override + String get gitErrorNotRepository => '此工作区不是 Git 存储库。'; + + @override + String get gitErrorUnsafePath => 'BusyMark 阻止了不安全的 Git 路径。'; + + @override + String get gitErrorInvalidBranchName => '请输入有效的分支名称。'; + + @override + String get gitErrorNoRemote => '未配置 Git 远程仓库。'; + + @override + String get gitErrorNoUpstream => '未配置上游分支。'; + + @override + String get gitErrorMultipleRemotes => '配置了多个远程仓库。请在此 BusyMark 版本之外选择上游分支。'; + + @override + String get gitErrorDirtyWorkspace => '切换分支前,请保存或放弃 BusyMark 编辑器中的更改。'; + + @override + String get gitErrorResetDirtyWorkspace => '重置当前分支前,请保存或放弃 BusyMark 编辑器中的更改。'; + + @override + String get gitErrorRestoreStagedFile => '还原历史版本前,请取消暂存此文件。'; + + @override + String get gitErrorResetDetachedHead => '重置前请先检出一个分支。'; + + @override + String get gitErrorDiverged => '分支已发生分歧。请在此 BusyMark 版本之外解决合并或变基问题。'; + + @override + String get gitErrorAuthorIdentity => 'Git 需要作者姓名和邮箱地址才能提交。'; + + @override + String get gitAuthorIdentityTitle => 'Git 作者身份'; + + @override + String get gitAuthorIdentityMessage => + '请输入 Git 应记录在提交中的身份信息。BusyMark 将保存它并重试此次提交。'; + + @override + String get gitAuthorName => '姓名'; + + @override + String get gitAuthorEmail => 'Email'; + + @override + String get gitAuthorIdentityGlobal => '用于所有存储库'; + + @override + String get gitAuthorIdentityGlobalDescription => + '作为 Snap 安装时,此设置适用于在 BusyMark 中打开的存储库。'; + + @override + String get gitSaveIdentityAndCommit => '保存并提交'; + + @override + String get gitErrorAuthentication => 'Git 身份验证失败。'; + + @override + String get gitErrorNetwork => 'Git 网络操作失败。'; + + @override + String get gitErrorConflict => 'Git 报告存在未解决的冲突。'; + + @override + String get gitErrorCommandFailed => 'Git 命令失败。'; + + @override + String get markdownAndHtml => 'Markdown 和 HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown 块'; + + @override + String get markdownHtmlMarkdownBlocksDescription => 'Markdown 源代码和预览中支持的块结构。'; + + @override + String get markdownHtmlInlineFormatting => '行内 Markdown'; + + @override + String get markdownHtmlInlineFormattingDescription => '可出现在段落、列表项和表格单元格中的格式。'; + + @override + String get markdownHtmlRawHtmlBlocks => '原始 HTML 块'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + '通过 BusyMark 预览组件渲染的安全块级 HTML 标签。'; + + @override + String get markdownHtmlRawHtmlInline => '原始 HTML 行内标签'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + '安全的行内 HTML 标签,渲染时不会显示字面标签。'; + + @override + String get markdownHtmlSafety => '安全规则'; + + @override + String get markdownHtmlSafetyDescription => '原始 HTML 会在预览前进行解析和清理。'; + + @override + String get markdownHtmlHeadings => '标题'; + + @override + String get markdownHtmlParagraphs => '段落'; + + @override + String get markdownHtmlLists => '列表'; + + @override + String get markdownHtmlHtmlContainers => '容器'; + + @override + String get markdownHtmlHtmlTextBlocks => '文本块'; + + @override + String get markdownHtmlHtmlFigures => '图和图像'; + + @override + String get markdownHtmlHtmlPreformatted => '预格式化代码'; + + @override + String get markdownHtmlHtmlDisclosure => '折叠块'; + + @override + String get markdownHtmlHtmlDescriptionLists => '描述列表'; + + @override + String get markdownHtmlHtmlFormattingTags => '格式标签'; + + @override + String get markdownHtmlHtmlInlineCodeTags => '行内代码标签'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => '语义文本标签'; + + @override + String get markdownHtmlSanitizedPreview => '已清理的预览'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + '允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。'; + + @override + String get markdownHtmlSourcePreserved => '保留源代码'; + + @override + String get markdownHtmlSourcePreservedDescription => + '未经编辑的原始 HTML 会按源文本原样保存。'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'HTML 内的 Markdown'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + '原始 HTML 内的 Markdown 标记会按字面文本渲染。'; + + @override + String get markdownHtmlBlockedContent => '被阻止的活动内容'; + + @override + String get markdownHtmlBlockedContentDescription => + '脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。'; + + @override + String get markdownHtmlSafeUrls => '仅允许安全 URL'; + + @override + String get markdownHtmlSafeUrlsDescription => + '链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。'; + + @override + String get exportAsPdf => '导出为 PDF'; + + @override + String get pdfExportDescription => '选择页面布局,生成精美且自包含的 PDF。'; + + @override + String get pdfRemoteImagesNote => '导出过程中不会下载远程图像。有可用的本地图像时将包含它们。'; + + @override + String get pdfPageSize => '页面大小'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => '方向'; + + @override + String get pdfPortrait => '纵向'; + + @override + String get pdfLandscape => '横向'; + + @override + String get pdfMargins => '页边距'; + + @override + String get pdfMarginNarrow => '窄'; + + @override + String get pdfMarginNormal => '普通'; + + @override + String get pdfMarginWide => '宽'; + + @override + String get pdfIncludePageNumbers => '包含页码'; + + @override + String get export => '导出'; + + @override + String get exportingPdf => '正在导出 PDF…'; + + @override + String get fileTypePdf => 'PDF 文档'; + + @override + String pdfExported(String fileName) { + return '已导出 $fileName。'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '已导出 $fileName,包含 $count 条警告。'; + } + + @override + String get pdfExportUnavailable => '缺少 PDF 导出组件。请重新安装 BusyMark 后重试。'; + + @override + String get pdfExportTimedOut => 'PDF 导出耗时过长,已停止。'; + + @override + String get pdfExportFailed => 'BusyMark 无法将此文档导出为 PDF。'; + + @override + String get visualizationRendering => '正在渲染…'; + + @override + String get visualizationStale => '正在显示上次有效的渲染结果'; + + @override + String get visualizationShowSource => '显示源代码'; + + @override + String get visualizationShowRender => '显示渲染结果'; + + @override + String get visualizationFitWidth => '适应宽度'; + + @override + String get visualizationSaveImage => '保存图像'; + + @override + String get visualizationCopyImage => '复制图像'; + + @override + String get visualizationImageCopied => '图像已复制'; + + @override + String get visualizationOpenApiReference => '打开 API 参考'; + + @override + String get visualizationValid => '有效'; + + @override + String get visualizationInvalid => '无效'; + + @override + String get visualizationServers => '服务器'; + + @override + String get visualizationPaths => '路径'; + + @override + String get visualizationOperations => '操作'; + + @override + String get visualizationTags => '标签'; + + @override + String get visualizationNoOperations => '没有匹配的操作'; + + @override + String get visualizationSearchOperations => '搜索操作'; + + @override + String get visualizationRenderFailed => '无法渲染此可视化内容。'; + + @override + String get visualizationRetry => '重试'; + + @override + String visualizationSaved(String fileName) { + return '已保存 $fileName'; + } + + @override + String get shortcutExportPdfDescription => '将当前文档或 Writerside 模块导出为 PDF。'; + + @override + String get instances => '实例'; + + @override + String get newInstance => '新建实例'; + + @override + String get newTocLibrary => '新建目录库'; + + @override + String get editInstance => '编辑实例'; + + @override + String get openTocFile => '打开目录文件'; + + @override + String get createInstance => '创建实例'; + + @override + String get createTocLibrary => '创建目录库'; + + @override + String get instanceContent => '内容'; + + @override + String get instanceContentSource => '创建来源'; + + @override + String get emptyInstance => '空实例'; + + @override + String get markdownFiles => '本地 Markdown 文件'; + + @override + String get chooseMarkdownFolder => '选择 Markdown 文件夹'; + + @override + String get errorWritersideInstanceImportSourceRequired => + '选择包含 Markdown 文件的文件夹。'; + + @override + String get instanceAppearance => '外观'; + + @override + String get instanceColor => '图标颜色'; + + @override + String get instanceVersion => '版本'; + + @override + String instanceVersionInherited(String version) { + return '此字段为空时,项目版本为 $version。'; + } + + @override + String get instanceWebPath => 'Web 路径'; + + @override + String get instanceStatus => '状态'; + + @override + String get instanceStatusRelease => '发布'; + + @override + String get instanceStatusEap => '抢先体验'; + + @override + String get instanceStatusDeprecated => '已弃用'; + + @override + String get allowSearchEngineIndexing => '允许搜索引擎建立索引'; + + @override + String get allowSearchEngineIndexingDescription => '允许外部搜索引擎为此输出建立索引。'; + + @override + String get offlineArtifact => '离线构件'; + + @override + String get offlineArtifactDescription => '捆绑资源,使构建的文档可以自包含。'; + + @override + String get instanceOutputSettings => '输出设置'; + + @override + String get markdownImportSource => 'Markdown 源'; + + @override + String get markdownImportFiles => 'Markdown 文件'; + + @override + String get selectNone => '全部取消选择'; + + @override + String markdownFilesFound(int count) { + return '找到 $count 个 Markdown 文件'; + } + + @override + String get noMarkdownFilesFound => '在此目录中未找到 Markdown 文件。'; + + @override + String get copyReferencedMedia => '复制引用的媒体'; + + @override + String get copyReferencedMediaDescription => '复制选中文件引用的本地图像和视频,同时保留相对路径。'; + + @override + String get instanceIdRenameWarningTitle => '重命名实例 ID?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark 将重命名 .tree 文件,并将 Writerside 项目引用从“$oldId”更新为“$newId”。发布脚本不会更改,必须单独更新。'; + } + + @override + String get renameAndUpdateReferences => '重命名并更新引用'; + + @override + String get tocLibraryDescription => '目录库用于存储可复用的节,不会生成自己的输出。'; + + @override + String get defaultTocLibraryName => '共享目录'; + + @override + String get instanceColorAutomatic => '自动'; + + @override + String get instanceColorBlue => '蓝色'; + + @override + String get instanceColorGreen => '绿色'; + + @override + String get instanceColorOrange => '橙色'; + + @override + String get instanceColorPurple => '紫色'; + + @override + String get instanceColorRed => '红色'; + + @override + String get instanceColorTeal => '青绿色'; + + @override + String get instanceColorYellow => '黄色'; + + @override + String get errorWritersideInstanceNameRequired => '请输入实例名称。'; + + @override + String errorWritersideInstanceIdExists(String id) { + return '已存在 ID 为“$id”的实例。'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return '实例树已存在:$path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Markdown 源目录不存在:$path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + '请选择至少一个 Markdown 文件进行导入。'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return '选中的源中有一个不是可读取的 Markdown 文件:$path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return '导入将覆盖现有项目文件:$path'; + } + + @override + String get errorWritersideInstanceFilesChanged => '实例文件已在磁盘上发生变化。请查看后重试。'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark 无法完全回滚实例更改。请在继续前查看这些文件:$paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => '目录库无法导入 Markdown 主题。'; + + @override + String get errorWritersideInstanceWebPathInvalid => 'Web 路径必须为单行文本。'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Writerside 实例配置无效。请修正其诊断信息后重试。'; + + @override + String get errorWritersideInstanceTemporaryFile => 'BusyMark 无法安全暂存实例更改。'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return '未知的实例状态“$status”。请使用 release、eap 或 deprecated。'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return '实例 ID“$id”被多个树文件使用。'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml 必须包含 根元素。'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return '$name 值“$value”必须为 true 或 false。'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + ' 元素必须指定实例 ID。'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + '树中的 必须同时指定 from 和 element-id。'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + '树中的 必须指定 id。'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + '跨实例目录引用必须同时指定 ref 和 in。'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + '目录元素不能同时指向多个主题、引用、链接或重定向。'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return '树元素 ID“$id”被声明了多次。'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + '实例组文件必须包含 根元素。'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => '实例组必须指定非空 ID 和实例列表。'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return '实例组 ID“$id”被声明了多次。'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return '目录包含项“$source#$id”属于外部模块“$origin”,无法在此工作区中展开。'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return '已注册树“$source”中不存在树元素“$id”。'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return '树包含项“$source#$id”创建了循环。'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return '实例条件引用了未知组“@$group”。'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return '跨实例引用指向未知实例“$instance”。'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return '主题“$topic”不在被引用的实例“$instance”中。'; + } + + @override + String get download => '下载'; + + @override + String get exportWritersideAsPdf => '将 Writerside 导出为 PDF'; + + @override + String get writersidePdfContent => '导出内容'; + + @override + String get writersidePdfPage => '页面'; + + @override + String get exportingWritersidePdf => '正在导出 Writerside PDF…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => '本地 Ollama'; + + @override + String get aiDisabled => '已禁用'; + + @override + String get aiLocalOnlyDescription => + 'AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。'; + + @override + String get aiProvider => 'AI 提供商'; + + @override + String get aiDefaultProvider => '默认提供商'; + + @override + String get aiConfigureProvider => '配置提供商'; + + @override + String get aiChooseProvider => '选择 AI 提供商'; + + @override + String get aiOllamaEndpoint => 'Ollama 端点'; + + @override + String get aiOllamaModel => 'Ollama 模型'; + + @override + String get aiTestConnection => '测试连接'; + + @override + String get aiTestingConnection => '正在测试…'; + + @override + String aiConnectionReady(int count) { + return '已连接。找到 $count 个已安装模型。'; + } + + @override + String get aiNoModels => '未选择模型。'; + + @override + String get aiConnectionFailed => 'BusyMark 无法验证 AI 文本生成。'; + + @override + String get aiConfigureFirst => '请先在设置 → AI 中启用 AI 提供商并验证模型。'; + + @override + String get aiEditWithAi => '使用 AI 编辑'; + + @override + String get aiRefineWithAi => '使用 AI 优化'; + + @override + String get aiInstruction => '指令'; + + @override + String get aiChangeTarget => '可更改内容'; + + @override + String get aiSharedContext => '与 AI 共享的上下文'; + + @override + String get aiTargetSelection => '选中的内容'; + + @override + String get aiTargetInsertAfterBlock => '插入到当前块之后'; + + @override + String get aiTargetCurrentBlock => '当前块'; + + @override + String get aiTargetCurrentSection => '当前节'; + + @override + String get aiTargetCompleteDocument => '完整文档'; + + @override + String get aiContextNone => '没有文档上下文'; + + @override + String get aiContextSelection => '选中的内容'; + + @override + String get aiContextCurrentBlock => '当前块'; + + @override + String get aiContextCurrentSection => '当前节'; + + @override + String get aiContextCompleteDocument => '完整文档'; + + @override + String get aiGenerating => '正在生成建议…'; + + @override + String get aiProposal => 'AI 建议'; + + @override + String get aiGenerateProposal => '生成建议'; + + @override + String aiContextDisclosure(int count) { + return '所选提供商将接收显示上下文中的 $count 个字符。'; + } + + @override + String get aiOriginal => '原始内容'; + + @override + String get aiSuggested => '建议内容'; + + @override + String get aiApplyProposal => '应用建议'; + + @override + String aiTokenUsage(int input, int output) { + return '输入 token:$input · 输出 token:$output'; + } + + @override + String get aiStaleProposal => '生成此建议期间文档发生了变化。请重新执行操作。'; + + @override + String get gitAiStagedChangesChanged => '生成此提交消息期间,已暂存的更改发生了变化。请重新执行操作。'; + + @override + String get aiViewContext => '查看已发送的上下文'; + + @override + String get aiReviewExactContent => '查看确切内容'; + + @override + String get aiContentToChange => '要更改的内容'; + + @override + String get aiContentSentToAi => '发送给 AI 的内容'; + + @override + String get aiApiKey => 'API 密钥'; + + @override + String get aiApiKeyStoredHint => '密钥已存储在系统凭据存储中'; + + @override + String get aiApiKeyEnterHint => '输入提供商 API 密钥'; + + @override + String get aiReplaceApiKey => '替换 API 密钥'; + + @override + String get aiSaveApiKey => '安全保存 API 密钥'; + + @override + String get aiRemoveApiKey => '移除已保存的 API 密钥'; + + @override + String get aiCredentialSaved => 'API 密钥已保存到系统凭据存储中。'; + + @override + String get aiCredentialRemoved => '已移除保存的 API 密钥。'; + + @override + String get aiModelRouting => '模型路由'; + + @override + String get aiAutomaticRouting => '按任务自动选择'; + + @override + String get aiFixedModelRouting => '使用选中的模型'; + + @override + String get aiPreferredModel => '首选模型'; + + @override + String get aiModel => '模型'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests 个请求 · $input 个输入 token · $output 个输出 token'; + } + + @override + String aiCloudConsentTitle(String provider) { + return '将内容发送给 $provider?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return '启用 $provider'; + } + + @override + String get aiCloudConsentMessage => + '只会发送每个 AI 审核对话框中显示的内容。请求不保存状态,建议需要审核,API 密钥存储在 Linux 系统凭据存储中。'; + + @override + String aiCloudConsentRequired(String provider) { + return '请先在设置 → AI 中确认与 $provider 共享数据。'; + } + + @override + String aiGenerationVerified(String model, int count) { + return '已通过 $model 验证生成能力。有 $count 个兼容模型可用。'; + } + + @override + String get aiColdStartObserved => '检测到本地模型冷启动。'; + + @override + String get aiNoCompatibleModels => '没有可用的兼容文本生成模型。'; + + @override + String get aiEnableProvider => '请先启用 AI 提供商。'; + + @override + String get aiDraftCommitMessage => '起草提交消息'; + + @override + String get aiDrafting => '正在起草…'; + + @override + String get aiDraftWithAi => '使用 AI 起草'; + + @override + String get generateOrUpdateMarkdownToc => '生成/更新目录'; + + @override + String get markdownTocTitle => '目录'; + + @override + String markdownTocUpdated(int count) { + return '目录已更新,包含 $count 个条目。'; + } + + @override + String get markdownTocNoHeadings => '请先添加至少一个节标题,再生成目录。'; + + @override + String get markdownTocMalformedMarkers => 'BusyMark 目录标记缺失、重复或顺序错误。'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return '标题级别 $level 跟在级别 $previousLevel 之后;请检查节的嵌套结构。'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => '链接文本为空;请提供能描述其用途的可访问名称。'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return '请检查链接文本“$text”是否在上下文中描述了其用途。'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => '表头单元格必须标识其列;请补全每个空表头。'; + + @override + String get mathRenderFailed => '无法渲染数学表达式。'; + + @override + String get inlineMath => '行内数学'; + + @override + String get displayMath => '显示数学'; +} + +/// The translations for Chinese, as used in China (`zh_CN`). +class AppLocalizationsZhCn extends AppLocalizationsZh { + AppLocalizationsZhCn() : super('zh_CN'); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => 'Markdown 文件和兼容 Writerside 的文档项目编辑器。'; + + @override + String get aboutBusyMark => '关于 BusyMark'; + + @override + String get aboutTagline => 'Markdown 和 Writerside 编辑器'; + + @override + String get aboutLicenseLabel => '许可证'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => '网站'; + + @override + String get aboutSourceCode => '源代码'; + + @override + String get reportIssue => '报告问题'; + + @override + String get feedbackCategory => '类别'; + + @override + String get feedbackChooseCategory => '选择类别'; + + @override + String get feedbackCategoryProblem => '问题或错误'; + + @override + String get feedbackCategoryFeature => '功能请求'; + + @override + String get feedbackCategoryPrivacySecurity => '隐私或安全问题'; + + @override + String get feedbackCategoryUsability => '可用性问题'; + + @override + String get feedbackCategoryOther => '其他'; + + @override + String get feedbackSubject => '主题'; + + @override + String get feedbackMessage => '详细信息'; + + @override + String get feedbackReplyEmail => '回复邮箱(可选)'; + + @override + String get feedbackIncludeTechnicalDetails => '包含技术详细信息'; + + @override + String get feedbackTechnicalDetailsDisclosure => + '启用后,此选项仅会添加您的 Linux 操作系统版本和 BusyMark 应用语言。不会附加日志、文件、账户数据或其他诊断信息。'; + + @override + String get feedbackSubmit => '提交'; + + @override + String get feedbackSubmitting => '正在提交…'; + + @override + String get feedbackCategoryRequired => '请选择类别。'; + + @override + String get feedbackSubjectLength => '主题必须包含 3 到 120 个字符。'; + + @override + String get feedbackMessageLength => '信息必须包含 10 到 5,000 个字符。'; + + @override + String get feedbackReplyEmailInvalid => '请输入有效的邮箱地址,或将此字段留空。'; + + @override + String get feedbackConnectionFailure => 'BusyMark 无法连接。请检查网络连接后重试。'; + + @override + String get feedbackTimeoutFailure => '请求超时。请重试。'; + + @override + String get feedbackRateLimitedFailure => '此连接发送的报告过多。请稍候再试。'; + + @override + String get feedbackRejectedFailure => '服务器拒绝了此报告。请检查表单字段后重试。'; + + @override + String get feedbackServerFailure => '服务器无法接收此报告。请稍后重试。'; + + @override + String feedbackSuccess(String id) { + return '反馈已发送。参考 ID:$id'; + } + + @override + String get advanced => '高级'; + + @override + String get addToGit => '添加到 Git'; + + @override + String get appearance => '外观'; + + @override + String get apply => '应用'; + + @override + String get back => '返回'; + + @override + String get bottomLeft => '左下'; + + @override + String get bottomRight => '右下'; + + @override + String get cancel => '取消'; + + @override + String get choose => '选择'; + + @override + String get chooseLocation => '选择位置'; + + @override + String get copy => '复制'; + + @override + String get copyName => '复制名称'; + + @override + String get copyFileName => '复制文件名'; + + @override + String get copyPath => '复制路径'; + + @override + String get create => '创建'; + + @override + String get creating => '正在创建…'; + + @override + String get cut => '剪切'; + + @override + String get promoteSection => '提升节级别'; + + @override + String get demoteSection => '降低节级别'; + + @override + String get moveSectionUp => '上移节'; + + @override + String get moveSectionDown => '下移节'; + + @override + String get confirmDeleteSectionTitle => '删除此节?'; + + @override + String confirmDeleteSectionMessage(String name) { + return '删除“$name”及其节中的全部内容?此操作无法撤销。'; + } + + @override + String get darkTheme => '深色'; + + @override + String get delete => '删除'; + + @override + String get discard => '放弃'; + + @override + String get editor => '编辑器'; + + @override + String get file => '文件'; + + @override + String get fileHistory => '文件历史记录'; + + @override + String get folder => '文件夹'; + + @override + String get insert => '插入'; + + @override + String get keyboardShortcuts => '键盘快捷键'; + + @override + String get commandPalette => '命令面板'; + + @override + String get commandPaletteHint => '输入命令'; + + @override + String get commandPaletteEmpty => '没有匹配的命令'; + + @override + String get commandUnavailableInContext => '当前编辑器上下文中无法使用此命令'; + + @override + String get lightTheme => '浅色'; + + @override + String get mainMenu => '主菜单'; + + @override + String get fullScreen => '全屏'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => '打开'; + + @override + String get openInFiles => '在文件中打开'; + + @override + String get pathActions => '路径操作'; + + @override + String get outline => '大纲'; + + @override + String get overwrite => '覆盖'; + + @override + String get paste => '粘贴'; + + @override + String get pasteWithoutFormatting => '粘贴为无格式文本'; + + @override + String get reading => '阅读'; + + @override + String get removeFromRecent => '从最近使用记录中移除'; + + @override + String get recent => '最近使用'; + + @override + String get redo => '重做'; + + @override + String get save => '保存'; + + @override + String get search => '搜索'; + + @override + String get selectAll => '全选'; + + @override + String get settings => '设置'; + + @override + String get source => '源代码'; + + @override + String get split => '拆分'; + + @override + String get systemTheme => '系统'; + + @override + String get theme => '主题'; + + @override + String get appLanguage => '语言'; + + @override + String get systemLanguage => '系统'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => '侧边栏面板'; + + @override + String get topLeft => '左上'; + + @override + String get topRight => '右上'; + + @override + String get undo => '撤销'; + + @override + String get validate => '验证'; + + @override + String get validation => '验证'; + + @override + String get viewMode => '视图模式'; + + @override + String get welcome => '欢迎'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => '图像'; + + @override + String get openMarkdownFile => '打开 Markdown 文件'; + + @override + String get markdownFileExtensions => '.md 或 .markdown'; + + @override + String get openFolderOrWritersideProject => '打开文件夹或 Writerside 项目'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown 文件夹或兼容 Writerside 的项目'; + + @override + String get noOpenFile => '没有打开的文件'; + + @override + String get shortcutDeleteTreeItemDescription => '删除选中的文件项,或从目录中移除选中的主题'; + + @override + String get shortcutGroupGeneral => '常规'; + + @override + String get shortcutNewDocument => '创建'; + + @override + String get shortcutNewDocumentDescription => '创建 Markdown 文件或 Writerside 项目'; + + @override + String get shortcutOpenDescription => '打开 Markdown 文件、文件夹或 Writerside 项目'; + + @override + String get shortcutSaveDescription => '保存当前文档'; + + @override + String get shortcutSearchDescription => '搜索当前工作区'; + + @override + String get shortcutKeyboardShortcutsDescription => '显示此键盘快捷键参考'; + + @override + String get shortcutMarkdownAndHtmlDescription => '打开 Markdown 和 HTML 参考'; + + @override + String get shortcutSettingsDescription => '打开 BusyMark 设置'; + + @override + String get shortcutNextTab => '下一个标签页'; + + @override + String get shortcutNextTabDescription => '移至下一个打开的标签页'; + + @override + String get shortcutPreviousTab => '上一个标签页'; + + @override + String get shortcutPreviousTabDescription => '移至上一个打开的标签页'; + + @override + String get shortcutCloseTab => '关闭标签页'; + + @override + String get shortcutCloseTabDescription => '关闭当前标签页'; + + @override + String get shortcutCloseAllTabs => '关闭所有标签页'; + + @override + String get shortcutCloseAllTabsDescription => '关闭所有打开的标签页'; + + @override + String get shortcutGroupTextEditing => '文本编辑'; + + @override + String get shortcutSelectAllDescription => '在源代码模式下选择全部文本;在编辑器模式下按两次以选择所有块'; + + @override + String get shortcutCutDescription => '剪切选中的文本'; + + @override + String get shortcutCopyDescription => '复制选中的文本'; + + @override + String get shortcutPasteDescription => '从剪贴板粘贴'; + + @override + String get shortcutPastePlainTextDescription => '粘贴剪贴板中的无格式文本'; + + @override + String get shortcutUndoDescription => '撤销上次编辑'; + + @override + String get shortcutRedoDescription => '重做上次撤销的编辑'; + + @override + String get shortcutInsertIndentation => '插入缩进'; + + @override + String get shortcutInsertIndentationDescription => '在光标处插入缩进'; + + @override + String get shortcutOutdentSource => '减少源代码缩进'; + + @override + String get shortcutOutdentSourceDescription => '在源代码模式下减少一级缩进'; + + @override + String get shortcutEscape => '关闭搜索或清除块选择'; + + @override + String get shortcutEscapeDescription => '关闭工作区搜索,或在编辑器模式下清除块选择'; + + @override + String get shortcutGroupFormatting => '格式'; + + @override + String get shortcutBoldDescription => '切换选中文本的粗体'; + + @override + String get shortcutItalicDescription => '切换选中文本的斜体'; + + @override + String get shortcutUnderlineDescription => '切换选中文本的下划线'; + + @override + String get shortcutLinkDescription => '插入或编辑链接'; + + @override + String get shortcutInlineCodeDescription => '切换选中文本的行内代码格式'; + + @override + String get shortcutStrikethroughDescription => '切换选中文本的删除线'; + + @override + String get shortcutGroupBlocks => '块'; + + @override + String get shortcutParagraphDescription => '将当前块设为段落'; + + @override + String get shortcutHeading1Description => '将当前块设为标题 1'; + + @override + String get shortcutHeading2Description => '将当前块设为标题 2'; + + @override + String get shortcutHeading3Description => '将当前块设为标题 3'; + + @override + String get shortcutHeading4Description => '将当前块设为标题 4'; + + @override + String get shortcutHeading5Description => '将当前块设为标题 5'; + + @override + String get shortcutHeading6Description => '将当前块设为标题 6'; + + @override + String get shortcutGroupLists => '列表'; + + @override + String get numberedList => '编号列表'; + + @override + String get shortcutNumberedListDescription => '切换编号列表格式'; + + @override + String get bulletedList => '项目符号列表'; + + @override + String get shortcutBulletedListDescription => '切换项目符号列表格式'; + + @override + String get checklist => '检查清单'; + + @override + String get shortcutChecklistDescription => '切换检查清单格式'; + + @override + String get shortcutGroupSidebar => '侧边栏'; + + @override + String get sidebarViewMenu => '侧边栏视图'; + + @override + String get createMarkdownFile => '创建 Markdown 文件'; + + @override + String get createMarkdownFileDescription => '开始创建未保存的本地 Markdown 文档'; + + @override + String get createWritersideProject => '创建 Writerside 项目'; + + @override + String get createWritersideProjectDescription => '开始创建本地兼容 Writerside 的项目'; + + @override + String get defaultProjectName => '文档'; + + @override + String get defaultInstanceName => '用户指南'; + + @override + String get defaultStartTopicTitle => '开始使用'; + + @override + String get projectName => '项目名称'; + + @override + String get directoryName => '目录名称'; + + @override + String get instanceName => '实例名称'; + + @override + String get instanceId => '实例 ID'; + + @override + String get startTopicTitle => '起始主题标题'; + + @override + String get location => '位置'; + + @override + String get projectNameRequired => '项目名称为必填项。'; + + @override + String get directoryNameRequired => '目录名称为必填项。'; + + @override + String get useSingleSafeDirectoryName => '使用单一且安全的目录名称。'; + + @override + String get useLowercaseIdentifier => '使用仅包含小写字母、数字、下划线或连字符的小写标识符。'; + + @override + String get startTopicTitleRequired => '起始主题标题为必填项。'; + + @override + String get createWritersideProjectFailed => '无法创建 Writerside 项目。'; + + @override + String get settingsTitle => 'BusyMark 设置'; + + @override + String get autoSave => '自动保存'; + + @override + String get autoSaveDescription => '在短暂空闲后自动保存文件更改。'; + + @override + String get wordWrap => '自动换行'; + + @override + String get editorFontSize => '编辑器字体大小'; + + @override + String get validateOnEdit => '编辑时验证'; + + @override + String get clearRecentWorkspaces => '清除最近使用的工作区'; + + @override + String get editingButtonsPosition => '编辑按钮位置'; + + @override + String get editingButtonsPositionDescription => '选择浮动 WYSIWYG 编辑按钮的显示位置。'; + + @override + String get editingButtonsDirection => '编辑按钮方向'; + + @override + String get editingButtonsDirectionDescription => '选择水平或垂直排列浮动 WYSIWYG 编辑按钮。'; + + @override + String get horizontal => '水平'; + + @override + String get vertical => '垂直'; + + @override + String get privacy => '隐私'; + + @override + String get allowRemoteImages => '加载远程图像'; + + @override + String get allowRemoteImagesDescription => + '允许 Markdown 预览和编辑器从 http 和 https URL 加载图像。'; + + @override + String get clearRemoteImagePermissions => '清除远程图像权限'; + + @override + String get clearRemoteImagePermissionsDescription => '忘记已获准加载远程图像的工作区。'; + + @override + String get clearGitWorkspaceTrust => '清除受信任的 Git 工作区'; + + @override + String get clearGitWorkspaceTrustDescription => '为之前受信任的工作区启用 Git 功能前先进行询问。'; + + @override + String get settingsWindowSectionTitle => '窗口'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => '启动时重新打开上次的工作区'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'BusyMark 启动时打开上次会话中的工作区和标签页。'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => '有未保存更改时关闭前进行确认'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + '文档有未保存更改时,关闭 BusyMark 前先进行询问。'; + + @override + String get closeUnsavedChangesTitle => '未保存的更改'; + + @override + String get closeUnsavedChangesSingleMessage => + '此文档有未保存的更改。关闭 BusyMark 前保存更改?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '有 $count 个文档包含未保存的更改。关闭 BusyMark 前保存更改?', + one: '有 1 个文档包含未保存的更改。关闭 BusyMark 前保存更改?', + zero: '关闭 BusyMark 前保存更改?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => '取消'; + + @override + String get closeUnsavedChangesDiscard => '放弃'; + + @override + String get closeUnsavedChangesSave => '保存'; + + @override + String get currentFile => '当前文件'; + + @override + String get unsavedChanges => '未保存的更改'; + + @override + String unsavedChangesMessage(String fileName) { + return '$fileName 中有未保存的更改。继续前保存这些更改?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '有 $count 个文档包含未保存的更改。继续前保存它们?', + one: '有 1 个文档包含未保存的更改。继续前保存它?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => '文件已在磁盘上更改'; + + @override + String get fileChangedOnDiskMessage => '自打开此文件后,它已在磁盘上发生更改。覆盖它?'; + + @override + String get untitledMarkdownFileName => '未命名.md'; + + @override + String get unorderedList => '无序列表'; + + @override + String get orderedList => '有序列表'; + + @override + String get taskList => '任务列表'; + + @override + String get toggleTaskChecked => '切换任务选中状态'; + + @override + String get indentListItem => '增加列表项缩进'; + + @override + String get outdentListItem => '减少列表项缩进'; + + @override + String get blockquote => '引用块'; + + @override + String get codeBlock => '代码块'; + + @override + String get codeBlockLanguage => '代码块语言'; + + @override + String get image => '图像'; + + @override + String get video => '视频'; + + @override + String get openVideo => '播放视频'; + + @override + String get pauseVideo => '暂停视频'; + + @override + String get videoUnavailable => '视频不可用'; + + @override + String get videoPreview => '视频预览'; + + @override + String get diagnosticWritersideVideoMissingSource => '视频缺少 src 属性。'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return '不支持的视频源:$source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return '视频文件不存在:$source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return '视频预览图像不存在:$preview'; + } + + @override + String get inlineImage => '行内图像'; + + @override + String get table => '表格'; + + @override + String get htmlBlock => 'HTML 块'; + + @override + String get htmlContentDefault => 'HTML 内容'; + + @override + String get shortcutHtmlBlockDescription => '插入或编辑 HTML 块'; + + @override + String get renderedHtml => '已渲染的 HTML'; + + @override + String get editHtml => '编辑 HTML'; + + @override + String get htmlSource => 'HTML 源代码'; + + @override + String get thematicBreak => '分隔线'; + + @override + String get bold => '粗体'; + + @override + String get italic => '斜体'; + + @override + String get underline => '下划线'; + + @override + String get strikethrough => '删除线'; + + @override + String get inlineCode => '行内代码'; + + @override + String get link => '链接'; + + @override + String get hardLineBreak => '硬换行'; + + @override + String get textStyle => '文本样式'; + + @override + String get paragraph => '段落'; + + @override + String get heading1 => '标题 1'; + + @override + String get heading2 => '标题 2'; + + @override + String get heading3 => '标题 3'; + + @override + String get heading4 => '标题 4'; + + @override + String get heading5 => '标题 5'; + + @override + String get heading6 => '标题 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => '删除表格'; + + @override + String tableColumnNumber(int columnNumber) { + return '列 $columnNumber'; + } + + @override + String get insertColumnLeft => '在左侧插入列'; + + @override + String get insertColumnRight => '在右侧插入列'; + + @override + String get deleteColumn => '删除列'; + + @override + String get tableAlignmentUnspecified => '对齐方式:未指定'; + + @override + String get tableAlignmentLeft => '对齐方式:左对齐'; + + @override + String get tableAlignmentCenter => '对齐方式:居中'; + + @override + String get tableAlignmentRight => '对齐方式:右对齐'; + + @override + String tableRowNumber(int rowNumber) { + return '行 $rowNumber'; + } + + @override + String get insertRowAbove => '在上方插入行'; + + @override + String get insertRowBelow => '在下方插入行'; + + @override + String get deleteRow => '删除行'; + + @override + String get tableHeaderHint => '标题'; + + @override + String get tableCellHint => '单元格'; + + @override + String get language => '语言'; + + @override + String get hideEditingButtons => '隐藏编辑按钮'; + + @override + String get showEditingButtons => '显示编辑按钮'; + + @override + String get altText => '替代文本'; + + @override + String get editorPlaceholderText => '文本'; + + @override + String get editorPlaceholderCode => '代码'; + + @override + String get editorPlaceholderAltText => '替代文本'; + + @override + String get describeTheImage => '描述图像'; + + @override + String get columns => '列'; + + @override + String get rows => '行'; + + @override + String tableHeaderNumber(int columnNumber) { + return '标题 $columnNumber'; + } + + @override + String get tableCellDefault => '单元格'; + + @override + String get noImageSource => '没有图像源'; + + @override + String get remoteImageBlocked => '远程图像已阻止'; + + @override + String get remoteImageBlockedTooltip => '选择是否允许 BusyMark 加载远程图像。'; + + @override + String get remoteImagesBlockedTitle => '远程图像已阻止'; + + @override + String get remoteImagesBlockedMessage => + '本文档引用了来自互联网的图像。加载这些图像可能会向图像托管方泄露网络信息。'; + + @override + String get loadRemoteImagesForWorkspace => '为此工作区加载'; + + @override + String get alwaysLoadRemoteImages => '始终加载远程图像'; + + @override + String get hideSidebar => '隐藏侧边栏面板'; + + @override + String get showSidebar => '显示侧边栏面板'; + + @override + String get showPreview => '显示预览'; + + @override + String get hidePreview => '隐藏预览'; + + @override + String get workspaceKindUnsavedMarkdown => '未保存的 Markdown 文件'; + + @override + String get workspaceKindSingleMarkdown => '单个 Markdown 文件'; + + @override + String get workspaceKindMarkdownFolder => 'Markdown 文件夹'; + + @override + String get workspaceKindWritersideModule => 'Writerside 模块'; + + @override + String get problems => '问题'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 条诊断信息', + one: '1 条诊断信息', + zero: '没有诊断信息', + ); + return '$_temp0'; + } + + @override + String get files => '文件'; + + @override + String get toc => '目录'; + + @override + String get tocActions => '目录操作'; + + @override + String get markdownUnsaved => 'Markdown - 未保存'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个文件', + one: '1 个文件', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => '没有文件'; + + @override + String get newFile => '新建文件'; + + @override + String get noWritersideToc => '没有 Writerside 目录'; + + @override + String get tocSection => '目录节'; + + @override + String get newTopic => '新建主题'; + + @override + String get newChildTopic => '新建子主题'; + + @override + String get newSiblingTopic => '新建同级主题'; + + @override + String get renameTopicFile => '重命名主题文件'; + + @override + String get topicPlacement => '目录位置'; + + @override + String get tocRoot => '位于目录根级别'; + + @override + String get afterSelectedTopic => '位于选中主题之后'; + + @override + String get insideSelectedTopic => '位于选中主题内'; + + @override + String get pasteAfterTopic => '粘贴到主题之后'; + + @override + String get pasteAsChildTopic => '粘贴为子主题'; + + @override + String get removeFromToc => '从目录中移除'; + + @override + String get confirmRemoveFromTocTitle => '从目录中移除?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return '从此目录中移除 $name?主题文件将被保留。'; + } + + @override + String get confirmDeleteTopicTitle => '删除主题文件?'; + + @override + String confirmDeleteTopicMessage(String name) { + return '删除 $name 并从每个目录中移除它?此操作无法撤销。'; + } + + @override + String get safeDeleteTopicFile => '安全删除主题文件…'; + + @override + String get removeTocElement => '移除目录元素'; + + @override + String get reviewUsages => '查看使用情况'; + + @override + String get deleteTopicFile => '删除主题文件'; + + @override + String get removeAction => '移除'; + + @override + String topicRemovalSummary(String topic) { + return '从选中的实例中移除“$topic”。主题文件将被保留。'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return '删除“$topic”,并在整个 Writerside 项目中安全更新其引用。'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个子主题将上移一级。', + one: '1 个子主题将上移一级。', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + '此主题被用作实例的起始页。请查看其使用情况,并在继续前指定其他起始页。'; + + @override + String topicUsagesCount(int count) { + return '使用情况($count)'; + } + + @override + String get noBreakingTopicUsages => '未找到会导致引用失效的引用。'; + + @override + String get topicUsagesFound => 'BusyMark 找到了以下对该主题的引用。'; + + @override + String get topicUsageTocElements => '目录元素'; + + @override + String get topicUsageStartPages => '起始页'; + + @override + String get topicUsageTopicLinks => '主题链接'; + + @override + String get topicUsageIncludes => '包含项'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 次使用', + one: '1 次使用', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => '重构选项'; + + @override + String get updateUsagesAutomatically => '自动更新使用情况'; + + @override + String get updateUsagesAutomaticallyDescription => '移除目录引用和包含项,同时保留链接文本。'; + + @override + String get manualUsageUpdatesRequired => '执行此重构前,某些使用情况需要手动更改。'; + + @override + String get setRedirectTo => '设置重定向到'; + + @override + String get noRedirectDescription => '不重定向旧的已发布页面。'; + + @override + String get redirectTarget => '重定向目标'; + + @override + String get remainingUsagesBlockRemoval => '请在继续前查看并更新剩余的使用情况,或在可用时启用自动更新。'; + + @override + String usagesOfTopic(String topic) { + return '$topic 的使用情况'; + } + + @override + String get noUsagesFound => '未找到使用情况'; + + @override + String get outsideSelectedInstance => '在选中的实例之外'; + + @override + String get doRefactor => '执行重构'; + + @override + String get orphanTopicTitle => '主题文件已不再使用'; + + @override + String get keepTopicFile => '保留主题文件'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic”在此 Writerside 项目中已不再使用。删除该文件,或保留它以供其他实例使用。'; + } + + @override + String get defaultNewTopicTitle => '新主题'; + + @override + String get topicTitle => '主题标题'; + + @override + String get fileName => '文件名'; + + @override + String get topicTitleRequired => '主题标题为必填项。'; + + @override + String get fileNameRequired => '文件名为必填项。'; + + @override + String get rename => '重命名'; + + @override + String get confirmDeleteFileTitle => '删除文件?'; + + @override + String get confirmDeleteFolderTitle => '删除文件夹?'; + + @override + String confirmDeleteFileMessage(String name) { + return '删除 $name?此操作无法撤销。'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return '删除 $name 及其中的所有文件?此操作无法撤销。'; + } + + @override + String get useSingleSafeFileName => '使用单一且安全的文件名。'; + + @override + String useExpectedExtension(String extension) { + return '为选中的格式使用 $extension 扩展名。'; + } + + @override + String get useIdentifierCharacters => '在扩展名之前仅使用字母、数字、下划线或连字符。'; + + @override + String get topicIdAlreadyExists => '主题 ID 已存在。'; + + @override + String get createWritersideTopicFailed => '无法创建 Writerside 主题。'; + + @override + String get noOutline => '没有大纲'; + + @override + String expandKind(String kind) { + return '展开 $kind'; + } + + @override + String collapseKind(String kind) { + return '折叠 $kind'; + } + + @override + String get foldKindSection => '节'; + + @override + String get foldKindList => '列表'; + + @override + String get foldKindQuote => '引用'; + + @override + String get foldKindTag => '标签'; + + @override + String get sourceSearchPreviousMatch => '上一个匹配项'; + + @override + String get sourceSearchNextMatch => '下一个匹配项'; + + @override + String get sourceSearchCaseSensitive => '区分大小写'; + + @override + String get sourceSearchWholeWord => '全字匹配'; + + @override + String get sourceSearchRegex => '正则表达式'; + + @override + String get sourceSearchReplacement => '替换为'; + + @override + String get sourceSearchReplaceCurrent => '替换当前匹配项'; + + @override + String get sourceSearchReplaceAndFindNext => '替换并查找下一个'; + + @override + String get sourceSearchReplaceAll => '全部替换'; + + @override + String get workspaceReplace => '在工作区中替换'; + + @override + String get reviewReplacements => '查看替换内容'; + + @override + String get applyReplacements => '应用替换'; + + @override + String get skippedFiles => '跳过的文件'; + + @override + String get workspaceReplaceDirtyBuffer => '未保存的编辑器内容'; + + @override + String get workspaceReplaceDiskContent => '磁盘上的已保存内容'; + + @override + String selectFileMatches(int count) { + return '选择全部 $count 个匹配项'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return '已在 $files 个文件中替换 $matches 个匹配项;跳过 $skipped 个。'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 末尾有换行符'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · 末尾无换行符'; + } + + @override + String get normalizeLineEndings => '规范化行尾'; + + @override + String get mixedLineEndingsSavePrompt => '此文档包含混合的行尾格式。请选择一种格式。'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName 使用混合的行尾格式。请在替换前选择要使用的格式。'; + } + + @override + String get workspaceReplaceIssueOversized => '已跳过过大的文件。'; + + @override + String get workspaceReplaceIssueUnreadable => '已跳过无法读取的文件。'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => '已跳过不是有效 UTF-8 的文件。'; + + @override + String get workspaceReplaceIssueTruncated => '替换预览已被截断。'; + + @override + String get workspaceReplaceIssueFileChanged => '已跳过预览后发生变化的文件。'; + + @override + String get workspaceReplaceIssueBufferChanged => '已跳过预览后发生变化的编辑器缓冲区。'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + '请在替换前选择 LF 或 CRLF 规范化。'; + + @override + String get workspaceReplaceIssuePartialConflict => + '由于文件同时发生了变化,回滚已停止。部分替换可能仍然存在;被移出的内容已保留在下方路径中。'; + + @override + String get workspaceReplaceIssueApplyFailed => '无法提交经过审查的替换;没有文件发生更改。'; + + @override + String externalChangesTitle(String fileName) { + return '外部更改 — $fileName'; + } + + @override + String get externalFileDeleted => '此文件已从磁盘删除。'; + + @override + String get externalFileChanged => '在您有未保存编辑时,此文件已在磁盘上发生变化。'; + + @override + String recoveredDocumentReview(String fileName) { + return '已恢复 $fileName 的未保存内容。请检查后保存、另存为或放弃。'; + } + + @override + String get compare => '比较'; + + @override + String get reloadFromDisk => '从磁盘重新加载'; + + @override + String get keepMine => '保留我的版本'; + + @override + String get saveAs => '另存为'; + + @override + String get sourceSearchInvalidRegex => '无效的正则表达式'; + + @override + String get sourceLargeFileFeaturesPaused => '大文件:已暂停语法突出显示和折叠'; + + @override + String get nothingToRead => '没有可读取的内容'; + + @override + String get admonition => '提示块'; + + @override + String get quote => '引用'; + + @override + String get note => '备注'; + + @override + String get tip => '提示'; + + @override + String get warning => '警告'; + + @override + String get tabs => '标签页'; + + @override + String get tab => '标签页'; + + @override + String get procedure => '操作步骤'; + + @override + String get step => '步骤'; + + @override + String get topic => '主题'; + + @override + String get chapter => '章节'; + + @override + String couldNotOpenTarget(String target) { + return '无法打开 $target'; + } + + @override + String linkTargetNotFound(String targetPath) { + return '找不到链接目标:$targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => '无法在编辑器中打开此文件类型'; + + @override + String anchorNotFound(String anchor) { + return '找不到锚点:$anchor'; + } + + @override + String get noProblemsFound => '未发现问题'; + + @override + String get noResults => '无结果'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - 第 $lineNumber 行'; + } + + @override + String get untitledResult => '未命名结果'; + + @override + String get documentKindMarkdownFile => 'Markdown 文件'; + + @override + String get documentKindWritersideMarkdownTopic => 'Writerside Markdown 主题'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML 主题'; + + @override + String get documentKindWritersideTree => 'Writerside 树'; + + @override + String get documentKindConfigurationFile => '配置文件'; + + @override + String get documentKindVariablesFile => '变量文件'; + + @override + String get documentKindCategoriesFile => '类别文件'; + + @override + String get documentKindResourceFile => '资源文件'; + + @override + String workspaceErrorOpenFailed(String error) { + return '打开失败:$error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return '无法创建 Writerside 项目:$error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return '无法创建 Writerside 主题:$error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return '无法打开文件:$error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => '选择保存此 Markdown 文件的位置。'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => '保存已阻止:文件已在磁盘上发生变化。'; + + @override + String workspaceErrorSaveFailed(String error) { + return '保存失败:$error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return '文件操作失败:$error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return '验证失败:$error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '已恢复 $count 个未保存的文档。请在保存或放弃前逐一检查。', + one: '已恢复 1 个未保存的文档。请在保存或放弃前进行检查。', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '无法恢复 $count 条损坏的恢复记录。有效的恢复记录仍可用。', + one: '无法恢复一条损坏的恢复记录。原始恢复文件已保留以供检查。', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return '路径不存在:$path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return '目标目录已存在且不为空:$path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return '目标路径已存在但不是目录:$path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return '生成的文件已存在:$path'; + } + + @override + String get errorParentDirectoryRequired => '必须指定父目录。'; + + @override + String errorParentDirectoryMissing(String path) { + return '父目录不存在:$path'; + } + + @override + String errorDirectoryMissing(String path) { + return '目录不存在:$path'; + } + + @override + String errorPathAlreadyExists(String path) { + return '路径已存在:$path'; + } + + @override + String get errorFileNameRequired => '文件名为必填项。'; + + @override + String get errorFileNameUnsafe => '文件名必须是单一且安全的路径段。'; + + @override + String get errorFileOperationInvalidTarget => '无法将文件夹移动到其自身中。'; + + @override + String get errorFileOperationOutsideRoot => '文件操作必须在工作区内进行。'; + + @override + String get errorFileOperationRoot => '无法从文件树更改工作区根目录。'; + + @override + String get errorProjectNameRequired => '项目名称为必填项。'; + + @override + String get errorDirectoryNameRequired => '目录名称为必填项。'; + + @override + String get errorDirectoryNameUnsafe => '目录名称必须是单一且安全的路径段。'; + + @override + String get errorInstanceIdInvalid => '实例 ID 必须以小写字母开头,且只能包含小写字母、数字、下划线和连字符。'; + + @override + String get errorTopicFileInvalid => '主题文件名必须是没有路径分隔符的 Markdown 文件名。'; + + @override + String get errorTopicTitleRequired => '主题标题为必填项。'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Writerside 模块根目录不存在:$path'; + } + + @override + String get errorWritersideModuleNotOpen => '必须打开 Writerside 模块才能创建主题。'; + + @override + String get errorWritersideInstanceTreeMissing => 'Writerside 模块没有实例树。'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside 树文件不存在:$path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return '主题 ID \"$topicId\" 已存在于此帮助模块中。'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return '主题文件已存在:$path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return '选中的树中不存在引用主题:$topic'; + } + + @override + String get errorWritersideTocNodeMissing => '选中的目录项已不存在。'; + + @override + String get errorWritersideTocInvalidMove => '目录项无法移动到自身或其子项中。'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return '无法删除起始主题 $topic。请先选择其他起始页。'; + } + + @override + String get errorWritersideSafeDeleteRequired => '请对 Writerside 主题文件使用安全删除。'; + + @override + String get errorWritersideTopicUsageScanFailed => '无法完成主题使用情况扫描。没有文件发生更改。'; + + @override + String get errorWritersideTopicUsagesRemain => '某些主题使用情况仍需处理。请先查看后再继续。'; + + @override + String get errorWritersideRedirectInvalid => '选中的重定向目标已无效。请重新选择。'; + + @override + String errorWritersideRollbackFailed(String paths) { + return '无法完全回滚主题移除。请在继续前查看这些路径:$paths'; + } + + @override + String get errorTopicsRootUnsafe => '主题根目录必须是安全的相对目录。'; + + @override + String get errorTopicFileNameUnsafe => '主题文件名必须是单一且安全的路径段。'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return '主题文件扩展名必须与选中的格式匹配($extension)。'; + } + + @override + String get errorTopicFileNameInvalid => '主题文件名只能包含字母、数字、下划线和连字符。'; + + @override + String errorUnknown(String code) { + return '未知错误:$code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return '无法读取文件元数据:$error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => '检测到大型工作区。为保持应用响应速度,已跳过部分文件。'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return '无法检查工作区项:$error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => '文件超过 beta 自动解析限制。'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return '无法读取 Markdown 文件:$error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => 'Writerside 标题属性块格式错误。'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return '标题 ID“$id”重复。'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + '额外的顶级 H1 标题将被视为章节。'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown 主题没有 H1 或 front matter 标题。'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => 'XML 主题缺少标题。'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return '主题“$fileName”缺少标题。'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => 'front matter 未闭合。'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => '不安全的 HTML 元素。'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return '链接目标不存在:$targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return '锚点“$anchor”不存在。'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return '图像“$destination”缺少替代文本。'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return '图像不存在:$destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return '无效的 XML:$message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg 根元素必须是 。'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'snippets 声明缺少 src。'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'instance-groups 声明缺少 src。'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return '不支持的 keymaps 模式:$mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'instance 声明缺少 src。'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg 未注册实例。'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree 根元素必须是 。'; + + @override + String get diagnosticWritersideTreeMissingId => '实例配置文件缺少 id。'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return '树文件名(不含扩展名)与实例 ID“$id”不匹配。'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => '非库实例缺少 start-page。'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return '起始页“$startPage”不存在。'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return '主题“$topic”在此实例目录中出现多次。'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + '变量声明必须包含名称和值。'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return '变量“$name”被声明了多次。'; + } + + @override + String get diagnosticWritersideCategoryMissingId => '类别缺少 id。'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return '类别“$id”被声明了多次。'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return '类别顺序“$order”被声明了多次。'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => '.topic 根元素必须是 。'; + + @override + String get diagnosticWritersideTopicMissingRootId => 'XML 主题缺少根 id。'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML 主题根 ID“$id”必须与文件名“$expectedId”匹配。'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return '元素 ID“$elementId”出现多次。'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => ' 缺少 href。'; + + @override + String get diagnosticWritersideConfigMissing => + 'Writerside 模式需要 writerside.cfg。'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return '配置的构建配置目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return '配置的 API 规范目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return '配置的 snippets 目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return '配置的变量文件不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return '配置的类别文件不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return '配置的实例组文件不存在:$relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return '已注册的实例树“$source”不存在。'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return '无法读取主题文件:$error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return '默认主题目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return '配置的主题目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return '配置的图像目录不存在:$relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return '元素 ID“$id”出现多次。'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return '目录引用了缺失的主题“$topic”。'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return '外部 href“$href”无效。'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return '变量“%$name%”未声明。'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return '主题链接“$destination”无法解析。'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return '“$targetName”中不存在锚点“$anchor”。'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => ' 缺少 from。'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return '包含源“$from”不存在。'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return '“$from”中不存在包含元素“$elementId”。'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'seealso 类别“$ref”未声明。'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return '主题引用“$reference”不明确。'; + } + + @override + String diagnosticUnknown(String code) { + return '未知诊断信息:$code'; + } + + @override + String get close => '关闭'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git 差异'; + + @override + String get gitShowDiff => '显示差异'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return '旧 $oldRange → 新 $newRange'; + } + + @override + String get gitDiffNoLines => '无行'; + + @override + String get gitUnavailableTitle => 'Git 不可用'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': '安装 Git,或配置 BusyMark 以使用可用的 Git 可执行文件。$reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => '信任此工作区以使用 Git?'; + + @override + String get gitTrustRequiredMessage => + 'Git 存储库可以通过 hook、过滤器和其他配置运行程序。在 BusyMark 读取存储库数据或启用 Git 操作前,请先信任此工作区。'; + + @override + String get gitTrustWorkspace => '信任工作区'; + + @override + String get gitNotRepositoryTitle => '不是 Git 存储库'; + + @override + String get gitNotRepositoryMessage => '此工作区不在 Git 存储库中。'; + + @override + String get gitInitializeRepository => '初始化存储库'; + + @override + String get gitDetachedHead => '分离的 HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return '分离于 $commit'; + } + + @override + String get gitNoUpstream => '没有上游分支'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个未推送的提交', + one: '1 个未推送的提交', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个待拉取的提交', + one: '1 个待拉取的提交', + ); + return '$_temp0'; + } + + @override + String get gitClean => '干净'; + + @override + String get gitConflicts => '冲突'; + + @override + String get gitChanges => '更改'; + + @override + String get gitStaged => '已暂存'; + + @override + String get gitUnstaged => '未暂存'; + + @override + String get gitHistory => '历史记录'; + + @override + String get gitBranches => '分支'; + + @override + String get gitActions => 'Git 操作'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => '暂存文件'; + + @override + String get gitRemoveFromCommit => '取消暂存文件'; + + @override + String get gitDiscard => '还原'; + + @override + String get gitOpenFile => '打开文件'; + + @override + String get gitMarkResolved => '标记为已解决'; + + @override + String get gitUntracked => '未跟踪'; + + @override + String get gitCommitMessage => '提交消息'; + + @override + String get gitCommitSelectedFiles => '选中的文件'; + + @override + String get gitCommitNoSelectedFiles => '提交前至少暂存一个文件。'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 个已暂存文件', + one: '1 个已暂存文件', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => '工作区之外'; + + @override + String get gitCommitMessageRequired => '请输入提交消息。'; + + @override + String get gitCreateBranch => '创建分支'; + + @override + String get gitNewBranch => '新分支'; + + @override + String get gitBranchName => '分支名称'; + + @override + String get gitSwitchBranch => '切换'; + + @override + String get gitNoChanges => '没有更改'; + + @override + String get gitNoHistory => '没有历史记录'; + + @override + String get gitNoBranches => '没有分支'; + + @override + String get gitNoDiff => '没有可显示的差异'; + + @override + String get gitBinaryFile => '二进制文件。BusyMark 不渲染二进制补丁。'; + + @override + String gitBinaryFileInfo(int size) { + return '二进制文件($size 字节)。BusyMark 不渲染二进制补丁。'; + } + + @override + String get gitUnsavedChangesBanner => '保存前不会包含未保存的编辑器更改。'; + + @override + String get gitConfirmDiscardTitle => '放弃 Git 更改?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。', + one: '选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '选中的未跟踪文件将被删除。', + one: '选中的未跟踪文件将被删除。', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '将根据其 Git 状态还原或删除选中的文件。', + one: '将根据其 Git 状态还原或删除选中的文件。', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return '切换到 $branch?'; + } + + @override + String get gitConfirmSwitchBranchMessage => 'Git 切换分支后,BusyMark 将从磁盘重新加载工作区。'; + + @override + String get gitConfirmPushSetUpstreamTitle => '设置上游分支?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return '此分支没有上游分支。当只配置了一个远程仓库时,BusyMark 可以推送 $branch 并设置其上游分支。'; + } + + @override + String get gitProjectHistory => '项目历史记录'; + + @override + String get gitFileHistory => '文件历史记录'; + + @override + String get gitFileHistoryRequiresOpenFile => '文件历史记录需要打开的 Markdown 文件。'; + + @override + String get gitLoadMore => '加载更多'; + + @override + String get gitChangesInCommit => '此提交中的更改'; + + @override + String get gitCompareWithCurrent => '与当前版本比较'; + + @override + String get gitRestoreVersion => '还原此版本'; + + @override + String get gitConfirmRestoreTitle => '还原此文件版本?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark 将使用选中的已提交版本替换当前工作树中的文件。还原后的文件将保持未暂存状态。'; + + @override + String get gitCommitActions => '提交操作'; + + @override + String get gitResetCurrentBranchToHere => '将当前分支重置到此处…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return '将 $branch 重置到 $commit?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return '这会将分支 $branch 移动到提交 $commit。请选择 Git 更新索引和工作树的方式。'; + } + + @override + String get gitReset => '重置'; + + @override + String get gitResetModeSoft => '软'; + + @override + String get gitResetModeSoftDescription => + '仅移动分支。保持索引和工作树不变;与选中提交之间的差异仍会保持暂存状态。'; + + @override + String get gitResetModeMixed => '混合'; + + @override + String get gitResetModeMixedDescription => '移动分支并重置索引。保持工作树不变,使差异处于未暂存状态。'; + + @override + String get gitResetModeHard => '硬'; + + @override + String get gitResetModeHardDescription => + '移动分支并重置索引和工作树。已跟踪的更改将被放弃;造成阻碍的未跟踪文件可能会被删除。'; + + @override + String get gitResetModeKeep => '保留'; + + @override + String get gitResetModeKeepDescription => + '移动分支并重置已跟踪文件,同时保留本地更改。如果这些更改与重置冲突,Git 将中止操作。'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => '文件操作'; + + @override + String get actions => '操作'; + + @override + String get gitStatusAdded => '已添加'; + + @override + String get gitStatusDeleted => '已删除'; + + @override + String get gitStatusRenamed => '已重命名'; + + @override + String get gitStatusCopied => '已复制'; + + @override + String get gitStatusUntracked => '未跟踪'; + + @override + String get gitStatusConflicted => '有冲突'; + + @override + String get gitStatusIgnored => '已忽略'; + + @override + String get gitStatusTypeChanged => '类型已更改'; + + @override + String get gitStatusModified => '已修改'; + + @override + String get gitStatusUnknown => '未知'; + + @override + String get gitErrorUnavailable => 'Git 不可用。'; + + @override + String get gitErrorNotRepository => '此工作区不是 Git 存储库。'; + + @override + String get gitErrorUnsafePath => 'BusyMark 阻止了不安全的 Git 路径。'; + + @override + String get gitErrorInvalidBranchName => '请输入有效的分支名称。'; + + @override + String get gitErrorNoRemote => '未配置 Git 远程仓库。'; + + @override + String get gitErrorNoUpstream => '未配置上游分支。'; + + @override + String get gitErrorMultipleRemotes => '配置了多个远程仓库。请在此 BusyMark 版本之外选择上游分支。'; + + @override + String get gitErrorDirtyWorkspace => '切换分支前,请保存或放弃 BusyMark 编辑器中的更改。'; + + @override + String get gitErrorResetDirtyWorkspace => '重置当前分支前,请保存或放弃 BusyMark 编辑器中的更改。'; + + @override + String get gitErrorRestoreStagedFile => '还原历史版本前,请取消暂存此文件。'; + + @override + String get gitErrorResetDetachedHead => '重置前请先检出一个分支。'; + + @override + String get gitErrorDiverged => '分支已发生分歧。请在此 BusyMark 版本之外解决合并或变基问题。'; + + @override + String get gitErrorAuthorIdentity => 'Git 需要作者姓名和邮箱地址才能提交。'; + + @override + String get gitAuthorIdentityTitle => 'Git 作者身份'; + + @override + String get gitAuthorIdentityMessage => + '请输入 Git 应记录在提交中的身份信息。BusyMark 将保存它并重试此次提交。'; + + @override + String get gitAuthorName => '姓名'; + + @override + String get gitAuthorEmail => 'Email'; + + @override + String get gitAuthorIdentityGlobal => '用于所有存储库'; + + @override + String get gitAuthorIdentityGlobalDescription => + '作为 Snap 安装时,此设置适用于在 BusyMark 中打开的存储库。'; + + @override + String get gitSaveIdentityAndCommit => '保存并提交'; + + @override + String get gitErrorAuthentication => 'Git 身份验证失败。'; + + @override + String get gitErrorNetwork => 'Git 网络操作失败。'; + + @override + String get gitErrorConflict => 'Git 报告存在未解决的冲突。'; + + @override + String get gitErrorCommandFailed => 'Git 命令失败。'; + + @override + String get markdownAndHtml => 'Markdown 和 HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown 块'; + + @override + String get markdownHtmlMarkdownBlocksDescription => 'Markdown 源代码和预览中支持的块结构。'; + + @override + String get markdownHtmlInlineFormatting => '行内 Markdown'; + + @override + String get markdownHtmlInlineFormattingDescription => '可出现在段落、列表项和表格单元格中的格式。'; + + @override + String get markdownHtmlRawHtmlBlocks => '原始 HTML 块'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + '通过 BusyMark 预览组件渲染的安全块级 HTML 标签。'; + + @override + String get markdownHtmlRawHtmlInline => '原始 HTML 行内标签'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + '安全的行内 HTML 标签,渲染时不会显示字面标签。'; + + @override + String get markdownHtmlSafety => '安全规则'; + + @override + String get markdownHtmlSafetyDescription => '原始 HTML 会在预览前进行解析和清理。'; + + @override + String get markdownHtmlHeadings => '标题'; + + @override + String get markdownHtmlParagraphs => '段落'; + + @override + String get markdownHtmlLists => '列表'; + + @override + String get markdownHtmlHtmlContainers => '容器'; + + @override + String get markdownHtmlHtmlTextBlocks => '文本块'; + + @override + String get markdownHtmlHtmlFigures => '图和图像'; + + @override + String get markdownHtmlHtmlPreformatted => '预格式化代码'; + + @override + String get markdownHtmlHtmlDisclosure => '折叠块'; + + @override + String get markdownHtmlHtmlDescriptionLists => '描述列表'; + + @override + String get markdownHtmlHtmlFormattingTags => '格式标签'; + + @override + String get markdownHtmlHtmlInlineCodeTags => '行内代码标签'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => '语义文本标签'; + + @override + String get markdownHtmlSanitizedPreview => '已清理的预览'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + '允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。'; + + @override + String get markdownHtmlSourcePreserved => '保留源代码'; + + @override + String get markdownHtmlSourcePreservedDescription => + '未经编辑的原始 HTML 会按源文本原样保存。'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'HTML 内的 Markdown'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + '原始 HTML 内的 Markdown 标记会按字面文本渲染。'; + + @override + String get markdownHtmlBlockedContent => '被阻止的活动内容'; + + @override + String get markdownHtmlBlockedContentDescription => + '脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。'; + + @override + String get markdownHtmlSafeUrls => '仅允许安全 URL'; + + @override + String get markdownHtmlSafeUrlsDescription => + '链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。'; + + @override + String get exportAsPdf => '导出为 PDF'; + + @override + String get pdfExportDescription => '选择页面布局,生成精美且自包含的 PDF。'; + + @override + String get pdfRemoteImagesNote => '导出过程中不会下载远程图像。有可用的本地图像时将包含它们。'; + + @override + String get pdfPageSize => '页面大小'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => '方向'; + + @override + String get pdfPortrait => '纵向'; + + @override + String get pdfLandscape => '横向'; + + @override + String get pdfMargins => '页边距'; + + @override + String get pdfMarginNarrow => '窄'; + + @override + String get pdfMarginNormal => '普通'; + + @override + String get pdfMarginWide => '宽'; + + @override + String get pdfIncludePageNumbers => '包含页码'; + + @override + String get export => '导出'; + + @override + String get exportingPdf => '正在导出 PDF…'; + + @override + String get fileTypePdf => 'PDF 文档'; + + @override + String pdfExported(String fileName) { + return '已导出 $fileName。'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + return '已导出 $fileName,包含 $count 条警告。'; + } + + @override + String get pdfExportUnavailable => '缺少 PDF 导出组件。请重新安装 BusyMark 后重试。'; + + @override + String get pdfExportTimedOut => 'PDF 导出耗时过长,已停止。'; + + @override + String get pdfExportFailed => 'BusyMark 无法将此文档导出为 PDF。'; + + @override + String get visualizationRendering => '正在渲染…'; + + @override + String get visualizationStale => '正在显示上次有效的渲染结果'; + + @override + String get visualizationShowSource => '显示源代码'; + + @override + String get visualizationShowRender => '显示渲染结果'; + + @override + String get visualizationFitWidth => '适应宽度'; + + @override + String get visualizationSaveImage => '保存图像'; + + @override + String get visualizationCopyImage => '复制图像'; + + @override + String get visualizationImageCopied => '图像已复制'; + + @override + String get visualizationOpenApiReference => '打开 API 参考'; + + @override + String get visualizationValid => '有效'; + + @override + String get visualizationInvalid => '无效'; + + @override + String get visualizationServers => '服务器'; + + @override + String get visualizationPaths => '路径'; + + @override + String get visualizationOperations => '操作'; + + @override + String get visualizationTags => '标签'; + + @override + String get visualizationNoOperations => '没有匹配的操作'; + + @override + String get visualizationSearchOperations => '搜索操作'; + + @override + String get visualizationRenderFailed => '无法渲染此可视化内容。'; + + @override + String get visualizationRetry => '重试'; + + @override + String visualizationSaved(String fileName) { + return '已保存 $fileName'; + } + + @override + String get shortcutExportPdfDescription => '将当前文档或 Writerside 模块导出为 PDF。'; + + @override + String get instances => '实例'; + + @override + String get newInstance => '新建实例'; + + @override + String get newTocLibrary => '新建目录库'; + + @override + String get editInstance => '编辑实例'; + + @override + String get openTocFile => '打开目录文件'; + + @override + String get createInstance => '创建实例'; + + @override + String get createTocLibrary => '创建目录库'; + + @override + String get instanceContent => '内容'; + + @override + String get instanceContentSource => '创建来源'; + + @override + String get emptyInstance => '空实例'; + + @override + String get markdownFiles => '本地 Markdown 文件'; + + @override + String get chooseMarkdownFolder => '选择 Markdown 文件夹'; + + @override + String get errorWritersideInstanceImportSourceRequired => + '选择包含 Markdown 文件的文件夹。'; + + @override + String get instanceAppearance => '外观'; + + @override + String get instanceColor => '图标颜色'; + + @override + String get instanceVersion => '版本'; + + @override + String instanceVersionInherited(String version) { + return '此字段为空时,项目版本为 $version。'; + } + + @override + String get instanceWebPath => 'Web 路径'; + + @override + String get instanceStatus => '状态'; + + @override + String get instanceStatusRelease => '发布'; + + @override + String get instanceStatusEap => '抢先体验'; + + @override + String get instanceStatusDeprecated => '已弃用'; + + @override + String get allowSearchEngineIndexing => '允许搜索引擎建立索引'; + + @override + String get allowSearchEngineIndexingDescription => '允许外部搜索引擎为此输出建立索引。'; + + @override + String get offlineArtifact => '离线构件'; + + @override + String get offlineArtifactDescription => '捆绑资源,使构建的文档可以自包含。'; + + @override + String get instanceOutputSettings => '输出设置'; + + @override + String get markdownImportSource => 'Markdown 源'; + + @override + String get markdownImportFiles => 'Markdown 文件'; + + @override + String get selectNone => '全部取消选择'; + + @override + String markdownFilesFound(int count) { + return '找到 $count 个 Markdown 文件'; + } + + @override + String get noMarkdownFilesFound => '在此目录中未找到 Markdown 文件。'; + + @override + String get copyReferencedMedia => '复制引用的媒体'; + + @override + String get copyReferencedMediaDescription => '复制选中文件引用的本地图像和视频,同时保留相对路径。'; + + @override + String get instanceIdRenameWarningTitle => '重命名实例 ID?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark 将重命名 .tree 文件,并将 Writerside 项目引用从“$oldId”更新为“$newId”。发布脚本不会更改,必须单独更新。'; + } + + @override + String get renameAndUpdateReferences => '重命名并更新引用'; + + @override + String get tocLibraryDescription => '目录库用于存储可复用的节,不会生成自己的输出。'; + + @override + String get defaultTocLibraryName => '共享目录'; + + @override + String get instanceColorAutomatic => '自动'; + + @override + String get instanceColorBlue => '蓝色'; + + @override + String get instanceColorGreen => '绿色'; + + @override + String get instanceColorOrange => '橙色'; + + @override + String get instanceColorPurple => '紫色'; + + @override + String get instanceColorRed => '红色'; + + @override + String get instanceColorTeal => '青绿色'; + + @override + String get instanceColorYellow => '黄色'; + + @override + String get errorWritersideInstanceNameRequired => '请输入实例名称。'; + + @override + String errorWritersideInstanceIdExists(String id) { + return '已存在 ID 为“$id”的实例。'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return '实例树已存在:$path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'Markdown 源目录不存在:$path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + '请选择至少一个 Markdown 文件进行导入。'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return '选中的源中有一个不是可读取的 Markdown 文件:$path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return '导入将覆盖现有项目文件:$path'; + } + + @override + String get errorWritersideInstanceFilesChanged => '实例文件已在磁盘上发生变化。请查看后重试。'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark 无法完全回滚实例更改。请在继续前查看这些文件:$paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => '目录库无法导入 Markdown 主题。'; + + @override + String get errorWritersideInstanceWebPathInvalid => 'Web 路径必须为单行文本。'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'Writerside 实例配置无效。请修正其诊断信息后重试。'; + + @override + String get errorWritersideInstanceTemporaryFile => 'BusyMark 无法安全暂存实例更改。'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return '未知的实例状态“$status”。请使用 release、eap 或 deprecated。'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return '实例 ID“$id”被多个树文件使用。'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml 必须包含 根元素。'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return '$name 值“$value”必须为 true 或 false。'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + ' 元素必须指定实例 ID。'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + '树中的 必须同时指定 from 和 element-id。'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + '树中的 必须指定 id。'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + '跨实例目录引用必须同时指定 ref 和 in。'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + '目录元素不能同时指向多个主题、引用、链接或重定向。'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return '树元素 ID“$id”被声明了多次。'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + '实例组文件必须包含 根元素。'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => '实例组必须指定非空 ID 和实例列表。'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return '实例组 ID“$id”被声明了多次。'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return '目录包含项“$source#$id”属于外部模块“$origin”,无法在此工作区中展开。'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return '已注册树“$source”中不存在树元素“$id”。'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return '树包含项“$source#$id”创建了循环。'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return '实例条件引用了未知组“@$group”。'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return '跨实例引用指向未知实例“$instance”。'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return '主题“$topic”不在被引用的实例“$instance”中。'; + } + + @override + String get download => '下载'; + + @override + String get exportWritersideAsPdf => '将 Writerside 导出为 PDF'; + + @override + String get writersidePdfContent => '导出内容'; + + @override + String get writersidePdfPage => '页面'; + + @override + String get exportingWritersidePdf => '正在导出 Writerside PDF…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => '本地 Ollama'; + + @override + String get aiDisabled => '已禁用'; + + @override + String get aiLocalOnlyDescription => + 'AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。'; + + @override + String get aiProvider => 'AI 提供商'; + + @override + String get aiDefaultProvider => '默认提供商'; + + @override + String get aiConfigureProvider => '配置提供商'; + + @override + String get aiChooseProvider => '选择 AI 提供商'; + + @override + String get aiOllamaEndpoint => 'Ollama 端点'; + + @override + String get aiOllamaModel => 'Ollama 模型'; + + @override + String get aiTestConnection => '测试连接'; + + @override + String get aiTestingConnection => '正在测试…'; + + @override + String aiConnectionReady(int count) { + return '已连接。找到 $count 个已安装模型。'; + } + + @override + String get aiNoModels => '未选择模型。'; + + @override + String get aiConnectionFailed => 'BusyMark 无法验证 AI 文本生成。'; + + @override + String get aiConfigureFirst => '请先在设置 → AI 中启用 AI 提供商并验证模型。'; + + @override + String get aiEditWithAi => '使用 AI 编辑'; + + @override + String get aiRefineWithAi => '使用 AI 优化'; + + @override + String get aiInstruction => '指令'; + + @override + String get aiChangeTarget => '可更改内容'; + + @override + String get aiSharedContext => '与 AI 共享的上下文'; + + @override + String get aiTargetSelection => '选中的内容'; + + @override + String get aiTargetInsertAfterBlock => '插入到当前块之后'; + + @override + String get aiTargetCurrentBlock => '当前块'; + + @override + String get aiTargetCurrentSection => '当前节'; + + @override + String get aiTargetCompleteDocument => '完整文档'; + + @override + String get aiContextNone => '没有文档上下文'; + + @override + String get aiContextSelection => '选中的内容'; + + @override + String get aiContextCurrentBlock => '当前块'; + + @override + String get aiContextCurrentSection => '当前节'; + + @override + String get aiContextCompleteDocument => '完整文档'; + + @override + String get aiGenerating => '正在生成建议…'; + + @override + String get aiProposal => 'AI 建议'; + + @override + String get aiGenerateProposal => '生成建议'; + + @override + String aiContextDisclosure(int count) { + return '所选提供商将接收显示上下文中的 $count 个字符。'; + } + + @override + String get aiOriginal => '原始内容'; + + @override + String get aiSuggested => '建议内容'; + + @override + String get aiApplyProposal => '应用建议'; + + @override + String aiTokenUsage(int input, int output) { + return '输入 token:$input · 输出 token:$output'; + } + + @override + String get aiStaleProposal => '生成此建议期间文档发生了变化。请重新执行操作。'; + + @override + String get gitAiStagedChangesChanged => '生成此提交消息期间,已暂存的更改发生了变化。请重新执行操作。'; + + @override + String get aiViewContext => '查看已发送的上下文'; + + @override + String get aiReviewExactContent => '查看确切内容'; + + @override + String get aiContentToChange => '要更改的内容'; + + @override + String get aiContentSentToAi => '发送给 AI 的内容'; + + @override + String get aiApiKey => 'API 密钥'; + + @override + String get aiApiKeyStoredHint => '密钥已存储在系统凭据存储中'; + + @override + String get aiApiKeyEnterHint => '输入提供商 API 密钥'; + + @override + String get aiReplaceApiKey => '替换 API 密钥'; + + @override + String get aiSaveApiKey => '安全保存 API 密钥'; + + @override + String get aiRemoveApiKey => '移除已保存的 API 密钥'; + + @override + String get aiCredentialSaved => 'API 密钥已保存到系统凭据存储中。'; + + @override + String get aiCredentialRemoved => '已移除保存的 API 密钥。'; + + @override + String get aiModelRouting => '模型路由'; + + @override + String get aiAutomaticRouting => '按任务自动选择'; + + @override + String get aiFixedModelRouting => '使用选中的模型'; + + @override + String get aiPreferredModel => '首选模型'; + + @override + String get aiModel => '模型'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests 个请求 · $input 个输入 token · $output 个输出 token'; + } + + @override + String aiCloudConsentTitle(String provider) { + return '将内容发送给 $provider?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return '启用 $provider'; + } + + @override + String get aiCloudConsentMessage => + '只会发送每个 AI 审核对话框中显示的内容。请求不保存状态,建议需要审核,API 密钥存储在 Linux 系统凭据存储中。'; + + @override + String aiCloudConsentRequired(String provider) { + return '请先在设置 → AI 中确认与 $provider 共享数据。'; + } + + @override + String aiGenerationVerified(String model, int count) { + return '已通过 $model 验证生成能力。有 $count 个兼容模型可用。'; + } + + @override + String get aiColdStartObserved => '检测到本地模型冷启动。'; + + @override + String get aiNoCompatibleModels => '没有可用的兼容文本生成模型。'; + + @override + String get aiEnableProvider => '请先启用 AI 提供商。'; + + @override + String get aiDraftCommitMessage => '起草提交消息'; + + @override + String get aiDrafting => '正在起草…'; + + @override + String get aiDraftWithAi => '使用 AI 起草'; + + @override + String get generateOrUpdateMarkdownToc => '生成/更新目录'; + + @override + String get markdownTocTitle => '目录'; + + @override + String markdownTocUpdated(int count) { + return '目录已更新,包含 $count 个条目。'; + } + + @override + String get markdownTocNoHeadings => '请先添加至少一个节标题,再生成目录。'; + + @override + String get markdownTocMalformedMarkers => 'BusyMark 目录标记缺失、重复或顺序错误。'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return '标题级别 $level 跟在级别 $previousLevel 之后;请检查节的嵌套结构。'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => '链接文本为空;请提供能描述其用途的可访问名称。'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return '请检查链接文本“$text”是否在上下文中描述了其用途。'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => '表头单元格必须标识其列;请补全每个空表头。'; + + @override + String get mathRenderFailed => '无法渲染数学表达式。'; + + @override + String get inlineMath => '行内数学'; + + @override + String get displayMath => '显示数学'; +} diff --git a/lib/src/app/app_locale.dart b/lib/src/app/app_locale.dart index fc076c11..33e2647e 100644 --- a/lib/src/app/app_locale.dart +++ b/lib/src/app/app_locale.dart @@ -22,12 +22,22 @@ const busyMarkLocaleOptions = [ BusyMarkLocaleOption(locale: Locale('fa'), endonym: 'فارسی'), BusyMarkLocaleOption(locale: Locale('fr'), endonym: 'Français'), BusyMarkLocaleOption(locale: Locale('hi'), endonym: 'हिन्दी'), + BusyMarkLocaleOption(locale: Locale('id'), endonym: 'Bahasa Indonesia'), BusyMarkLocaleOption(locale: Locale('it'), endonym: 'Italiano'), + BusyMarkLocaleOption(locale: Locale('ja'), endonym: '日本語'), + BusyMarkLocaleOption(locale: Locale('ko'), endonym: '한국어'), BusyMarkLocaleOption(locale: Locale('nb'), endonym: 'Norsk'), + BusyMarkLocaleOption(locale: Locale('nl'), endonym: 'Nederlands'), BusyMarkLocaleOption(locale: Locale('pl'), endonym: 'Polski'), BusyMarkLocaleOption(locale: Locale('pt'), endonym: 'Português'), BusyMarkLocaleOption(locale: Locale('ru'), endonym: 'Русский'), + BusyMarkLocaleOption(locale: Locale('tr'), endonym: 'Türkçe'), BusyMarkLocaleOption(locale: Locale('uk'), endonym: 'Українська'), + BusyMarkLocaleOption(locale: Locale('vi'), endonym: 'Tiếng Việt'), + BusyMarkLocaleOption( + locale: Locale.fromSubtags(languageCode: 'zh', countryCode: 'CN'), + endonym: '简体中文', + ), ]; Locale? busyMarkLocaleFromTag(String? tag) { diff --git a/linux/io.busystack.busymark.desktop b/linux/io.busystack.busymark.desktop index b21b756c..fa36945a 100644 --- a/linux/io.busystack.busymark.desktop +++ b/linux/io.busystack.busymark.desktop @@ -4,6 +4,8 @@ Name=BusyMark Comment=Editor for Markdown files and Writerside-compatible documentation projects Name[de]=BusyMark Comment[de]=Editor für Markdown-Dateien und Writerside-kompatible Dokumentationsprojekte +Name[nl]=BusyMark +Comment[nl]=Editor voor Markdown-bestanden en Writerside-compatibele documentatieprojecten Name[et]=BusyMark Comment[et]=Markdowni failide ja Writerside’iga ühilduvate dokumentatsiooniprojektide redaktor Name[it]=BusyMark @@ -28,6 +30,20 @@ Name[fa]=BusyMark Comment[fa]=ویرایشگر فایل‌های Markdown و پروژه‌های مستندسازی سازگار با Writerside Name[hi]=BusyMark Comment[hi]=Markdown फ़ाइलों और Writerside-संगत दस्तावेज़ीकरण परियोजनाओं का संपादक +Name[id]=BusyMark +Comment[id]=Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside +Name[ja]=BusyMark +Comment[ja]=Markdown ファイルおよび Writerside 互換のドキュメントプロジェクト用エディター +Name[ko]=BusyMark +Comment[ko]=Markdown 파일 및 Writerside 호환 문서 프로젝트용 편집기 +Name[vi]=BusyMark +Comment[vi]=Trình biên tập tệp Markdown và các dự án tài liệu tương thích với Writerside +Name[zh]=BusyMark +Comment[zh]=Markdown 文件和兼容 Writerside 的文档项目编辑器 +Name[zh_CN]=BusyMark +Comment[zh_CN]=Markdown 文件和兼容 Writerside 的文档项目编辑器 +Name[tr]=BusyMark +Comment[tr]=Markdown dosyaları ve Writerside uyumlu dokümantasyon projeleri için düzenleyici Exec=busymark %f Icon=io.busystack.busymark Terminal=false diff --git a/linux/io.busystack.busymark.metainfo.xml b/linux/io.busystack.busymark.metainfo.xml index bedc491f..f81020ca 100644 --- a/linux/io.busystack.busymark.metainfo.xml +++ b/linux/io.busystack.busymark.metainfo.xml @@ -8,6 +8,7 @@ BusyMark BusyMark + BusyMark BusyMark BusyMark BusyMark @@ -20,8 +21,16 @@ BusyMark BusyMark BusyMark + BusyMark + BusyMark + BusyMark + BusyMark + BusyMark + BusyMark + BusyMark Editor for Markdown files and Writerside-compatible documentation projects Editor für Markdown-Dateien und Writerside-kompatible Dokumentationsprojekte + Editor voor Markdown-bestanden en Writerside-compatibele documentatieprojecten Markdowni failide ja Writerside’iga ühilduvate dokumentatsiooniprojektide redaktor Editor per file Markdown e progetti di documentazione compatibili con Writerside Redigerer for Markdown-filer og Writerside-kompatible dokumentasjonsprosjekter @@ -34,9 +43,17 @@ محرر لملفات Markdown ومشاريع التوثيق المتوافقة مع Writerside ویرایشگر فایل‌های Markdown و پروژه‌های مستندسازی سازگار با Writerside Markdown फ़ाइलों और Writerside-संगत दस्तावेज़ीकरण परियोजनाओं का संपादक + Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside + Markdown ファイルおよび Writerside 互換のドキュメントプロジェクト用エディター + Markdown 파일 및 Writerside 호환 문서 프로젝트용 편집기 + Trình biên tập tệp Markdown và các dự án tài liệu tương thích với Writerside + Markdown 文件和兼容 Writerside 的文档项目编辑器 + Markdown 文件和兼容 Writerside 的文档项目编辑器 + Markdown dosyaları ve Writerside uyumlu dokümantasyon projeleri için düzenleyici

BusyMark is a Linux editor for Markdown files and Writerside-compatible documentation projects.

BusyMark ist ein Linux-Editor für Markdown-Dateien und Writerside-kompatible Dokumentationsprojekte.

+

BusyMark is een Linux-editor voor Markdown-bestanden en Writerside-compatibele documentatieprojecten.

BusyMark on Linuxi redaktor Markdowni failide ja Writerside’iga ühilduvate dokumentatsiooniprojektide jaoks.

BusyMark è un editor Linux per file Markdown e progetti di documentazione compatibili con Writerside.

BusyMark er en Linux-redigerer for Markdown-filer og Writerside-kompatible dokumentasjonsprosjekter.

@@ -49,6 +66,13 @@

BusyMark هو محرر Linux لملفات Markdown ومشاريع التوثيق المتوافقة مع Writerside.

BusyMark یک ویرایشگر لینوکس برای فایل‌های Markdown و پروژه‌های مستندسازی سازگار با Writerside است.

BusyMark Markdown फ़ाइलों और Writerside-संगत दस्तावेज़ीकरण परियोजनाओं के लिए एक Linux संपादक है।

+

BusyMark adalah editor Linux untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside.

+

BusyMark は、Markdown ファイルおよび Writerside 互換のドキュメントプロジェクト用の Linux エディターです。

+

BusyMark는 Markdown 파일 및 Writerside 호환 문서 프로젝트를 위한 Linux 편집기입니다.

+

BusyMark là trình biên tập Linux cho các tệp Markdown và các dự án tài liệu tương thích với Writerside.

+

BusyMark 是一款用于 Markdown 文件和兼容 Writerside 的文档项目的 Linux 编辑器。

+

BusyMark 是一款用于 Markdown 文件和兼容 Writerside 的文档项目的 Linux 编辑器。

+

BusyMark, Markdown dosyaları ve Writerside uyumlu dokümantasyon projeleri için bir Linux düzenleyicisidir.

io.busystack.busymark.desktop io.busystack.busymark diff --git a/test/src/app_smoke_test.dart b/test/src/app_smoke_test.dart index 6c603076..f0ad8781 100644 --- a/test/src/app_smoke_test.dart +++ b/test/src/app_smoke_test.dart @@ -166,6 +166,16 @@ void main() { expect(app.supportedLocales, contains(const Locale('ar'))); expect(app.supportedLocales, contains(const Locale('fa'))); expect(app.supportedLocales, contains(const Locale('hi'))); + expect(app.supportedLocales, contains(const Locale('id'))); + expect(app.supportedLocales, contains(const Locale('ja'))); + expect(app.supportedLocales, contains(const Locale('ko'))); + expect(app.supportedLocales, contains(const Locale('nl'))); + expect(app.supportedLocales, contains(const Locale('tr'))); + expect(app.supportedLocales, contains(const Locale('vi'))); + expect( + app.supportedLocales, + contains(const Locale.fromSubtags(languageCode: 'zh', countryCode: 'CN')), + ); expect(app.onGenerateTitle, isNotNull); expect(find.text(l10n.appTitle), findsWidgets); }); diff --git a/test/src/localization_audit_test.dart b/test/src/localization_audit_test.dart index 5009eec6..121c0c42 100644 --- a/test/src/localization_audit_test.dart +++ b/test/src/localization_audit_test.dart @@ -104,6 +104,12 @@ void main() { 'de': 'Editor für Markdown-Dateien und Writerside-kompatible ' 'Dokumentationsprojekte', + 'nl': + 'Editor voor Markdown-bestanden en Writerside-compatibele ' + 'documentatieprojecten', + 'tr': + 'Markdown dosyaları ve Writerside uyumlu dokümantasyon ' + 'projeleri için düzenleyici', 'es': 'Editor de archivos Markdown y proyectos de documentación ' 'compatibles con Writerside', @@ -119,6 +125,11 @@ void main() { 'hi': 'Markdown फ़ाइलों और Writerside-संगत दस्तावेज़ीकरण परियोजनाओं का ' 'संपादक', + 'id': + 'Editor untuk file Markdown dan proyek dokumentasi yang kompatibel ' + 'dengan Writerside', + 'ja': 'Markdown ファイルおよび Writerside 互換のドキュメントプロジェクト用エディター', + 'ko': 'Markdown 파일 및 Writerside 호환 문서 프로젝트용 편집기', 'it': 'Editor per file Markdown e progetti di documentazione compatibili ' 'con Writerside', @@ -137,17 +148,24 @@ void main() { 'uk': 'Редактор файлів Markdown і проєктів документації, сумісних із ' 'Writerside', + 'vi': + 'Trình biên tập tệp Markdown và các dự án tài liệu tương thích với ' + 'Writerside', + 'zh': 'Markdown 文件和兼容 Writerside 的文档项目编辑器', + 'zh-CN': 'Markdown 文件和兼容 Writerside 的文档项目编辑器', }; for (final entry in summaries.entries) { + final desktopLocale = entry.key.replaceAll('-', '_'); + final xmlLocale = entry.key.replaceAll('_', '-'); expect( desktop, - contains('Comment[${entry.key}]=${entry.value}'), + contains('Comment[$desktopLocale]=${entry.value}'), reason: 'desktop ${entry.key}', ); expect( metainfo, - contains('${entry.value}'), + contains('${entry.value}'), reason: 'AppStream ${entry.key}', ); } @@ -335,8 +353,8 @@ void main() { test('every selectable locale has a generated catalog', () { expect( - busyMarkLocaleOptions.map((option) => option.locale).toSet(), - AppLocalizations.supportedLocales.toSet(), + AppLocalizations.supportedLocales, + containsAll(busyMarkLocaleOptions.map((option) => option.locale)), ); }); @@ -595,6 +613,8 @@ const _sharedEnglishMatches = { 'markdown', 'languageEnglish', 'languageGerman', + 'languageDutch', + 'languageTurkish', 'languageItalian', 'languageNorwegian', 'languageFrench', @@ -606,7 +626,12 @@ const _sharedEnglishMatches = { 'languageArabic', 'languagePersian', 'languageHindi', + 'languageIndonesian', 'languageEstonian', + 'languageJapanese', + 'languageKorean', + 'languageVietnamese', + 'languageSimplifiedChinese', 'writerside', 'video', 'xml', @@ -621,6 +646,7 @@ const _sharedEnglishMatches = { 'gitResetModeMixed', 'gitResetModeHard', 'gitResetModeKeep', + 'ai', }; const _localeSpecificEnglishMatches = >{ @@ -687,4 +713,57 @@ const _localeSpecificEnglishMatches = >{ 'vertical', }, 'hi': {'toc'}, + 'ja': {'gitFetch', 'gitCommit', 'pdfPageSizeLetter'}, + 'ko': {'gitDiff', 'gitFetch', 'gitCommit', 'pdfPageSizeLetter'}, + 'id': { + 'editor', + 'file', + 'folder', + 'link', + 'sourceSearchRegex', + 'tip', + 'pdfMarginNormal', + 'instanceStatus', + 'aiModel', + 'horizontal', + 'editHtml', + 'tableHeaderHint', + 'tableHeaderNumber', + 'foldKindTag', + 'gitSelectForCommit', + 'gitReset', + 'visualizationValid', + 'editInstance', + 'instanceColorTeal', + 'gitDiff', + 'gitFetch', + 'gitCommit', + 'pdfPageSizeLetter', + }, + 'nl': { + 'aboutWebsite', + 'editor', + 'recent', + 'privacy', + 'untitledMarkdownFileName', + 'link', + 'editorPlaceholderCode', + 'toc', + 'sourceSearchRegex', + 'tip', + 'tab', + 'procedure', + 'gitDiff', + 'gitFetch', + 'gitCommit', + 'markdownHtmlHtmlContainers', + 'pdfPageSizeLetter', + 'visualizationServers', + 'instanceStatus', + 'instanceStatusRelease', + 'aiModel', + }, + 'vi': {'tab', 'gitFetch', 'gitCommit', 'gitAuthorEmail', 'pdfPageSizeLetter'}, + 'zh': {'gitFetch', 'gitCommit', 'gitAuthorEmail', 'pdfPageSizeLetter'}, + 'zh_CN': {'gitFetch', 'gitCommit', 'gitAuthorEmail', 'pdfPageSizeLetter'}, }; From d3dea534e68c61987e9f9b6c168c23a79bcc72e3 Mon Sep 17 00:00:00 2001 From: albert Date: Sat, 29 Aug 2026 19:08:45 -0700 Subject: [PATCH 02/11] translation fixes --- lib/l10n/app_ar.arb | 784 ++- lib/l10n/app_de.arb | 583 ++- lib/l10n/app_en.arb | 26 +- lib/l10n/app_es.arb | 585 ++- lib/l10n/app_et.arb | 2969 ++++++++--- lib/l10n/app_fa.arb | 835 +++- lib/l10n/app_fr.arb | 593 ++- lib/l10n/app_hi.arb | 600 ++- lib/l10n/app_id.arb | 4689 ++++++++++++++---- lib/l10n/app_it.arb | 608 ++- lib/l10n/app_ja.arb | 12 +- lib/l10n/app_ko.arb | 4667 +++++++++++++---- lib/l10n/app_nb.arb | 604 ++- lib/l10n/app_nl.arb | 4649 +++++++++++++---- lib/l10n/app_pl.arb | 624 ++- lib/l10n/app_pt.arb | 2728 +--------- lib/l10n/app_pt_BR.arb | 3057 ++++++++++++ lib/l10n/app_ru.arb | 626 ++- lib/l10n/app_tr.arb | 4659 +++++++++++++---- lib/l10n/app_uk.arb | 624 ++- lib/l10n/app_vi.arb | 110 +- lib/l10n/app_zh.arb | 959 +--- lib/l10n/app_zh_CN.arb | 22 +- lib/l10n/generated/app_localizations.dart | 35 +- lib/l10n/generated/app_localizations_ar.dart | 59 +- lib/l10n/generated/app_localizations_de.dart | 50 +- lib/l10n/generated/app_localizations_en.dart | 66 +- lib/l10n/generated/app_localizations_es.dart | 52 +- lib/l10n/generated/app_localizations_et.dart | 52 +- lib/l10n/generated/app_localizations_fa.dart | 56 +- lib/l10n/generated/app_localizations_fr.dart | 63 +- lib/l10n/generated/app_localizations_hi.dart | 51 +- lib/l10n/generated/app_localizations_id.dart | 104 +- lib/l10n/generated/app_localizations_it.dart | 57 +- lib/l10n/generated/app_localizations_ja.dart | 12 +- lib/l10n/generated/app_localizations_ko.dart | 86 +- lib/l10n/generated/app_localizations_nb.dart | 51 +- lib/l10n/generated/app_localizations_nl.dart | 64 +- lib/l10n/generated/app_localizations_pl.dart | 57 +- lib/l10n/generated/app_localizations_pt.dart | 3633 +++++++++++++- lib/l10n/generated/app_localizations_ru.dart | 64 +- lib/l10n/generated/app_localizations_tr.dart | 75 +- lib/l10n/generated/app_localizations_uk.dart | 62 +- lib/l10n/generated/app_localizations_vi.dart | 102 +- lib/l10n/generated/app_localizations_zh.dart | 2081 ++++---- lib/src/app/app_locale.dart | 23 +- linux/io.busystack.busymark.desktop | 4 +- linux/io.busystack.busymark.metainfo.xml | 6 +- test/src/app_smoke_test.dart | 5 +- test/src/localization_audit_test.dart | 17 +- 50 files changed, 31142 insertions(+), 11458 deletions(-) create mode 100644 lib/l10n/app_pt_BR.arb diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 00971072..245b8556 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -24,7 +24,7 @@ "feedbackRateLimitedFailure": "تم إرسال عدد كبير جدًا من البلاغات عبر هذا الاتصال. انتظر ثم حاول مرة أخرى.", "feedbackRejectedFailure": "رفض الخادم البلاغ. تحقّق من حقول النموذج وحاول مرة أخرى.", "feedbackServerFailure": "تعذر على الخادم قبول البلاغ. حاول مرة أخرى لاحقًا.", - "feedbackSuccess": "تم إرسال الملاحظات. معرّف المرجع: \u2068{id}\u2069", + "feedbackSuccess": "تم إرسال الملاحظات. معرّف المرجع: ⁨{id}⁩", "appTitle": "BusyMark", "@appTitle": { "description": "Application name." @@ -126,7 +126,7 @@ "moveSectionUp": "نقل القسم إلى أعلى", "moveSectionDown": "نقل القسم إلى أسفل", "confirmDeleteSectionTitle": "حذف القسم؟", - "confirmDeleteSectionMessage": "هل تريد حذف \u2068{name}\u2069 وكل محتوى قسمه؟ لا يمكن التراجع عن هذا الإجراء.", + "confirmDeleteSectionMessage": "هل تريد حذف ⁨{name}⁩ وكل محتوى قسمه؟ لا يمكن التراجع عن هذا الإجراء.", "darkTheme": "داكن", "@darkTheme": { "description": "Dark theme option." @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "حذف العنصر المحدد في الملفات أو إزالة الموضوع المحدد من جدول المحتويات", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "عام", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "إدراج مسافة بادئة", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "إدراج مسافة بادئة عند المؤشر", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "تقليل المسافة البادئة في المصدر", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "إزالة مستوى واحد من المسافة البادئة في وضع المصدر", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "إغلاق البحث أو مسح تحديد الكتل", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "الخصوصية", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "تحميل الصور البعيدة", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "السماح بتحميل صور معاينة Markdown والمحرر من عناوين URL التي تستخدم http وhttps.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "مسح أذونات الصور البعيدة", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "نسيان مساحات العمل التي سُمح لها بتحميل الصور البعيدة.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "مسح مساحات عمل Git الموثوقة", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "طلب التأكيد قبل تمكين ميزات Git لمساحات العمل التي سبق الوثوق بها.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "النافذة", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "إعادة فتح مساحة العمل السابقة عند بدء التشغيل", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "افتح مساحة العمل وعلامات التبويب من الجلسة السابقة عند بدء BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "التأكيد قبل الإغلاق عند وجود تغييرات غير محفوظة", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -814,7 +845,7 @@ "@unsavedChanges": { "description": "Unsaved changes dialog title." }, - "unsavedChangesMessage": "لديك تغييرات غير محفوظة في \u2068{fileName}\u2069. هل تريد حفظها قبل المتابعة؟", + "unsavedChangesMessage": "لديك تغييرات غير محفوظة في ⁨{fileName}⁩. هل تريد حفظها قبل المتابعة؟", "@unsavedChangesMessage": { "description": "Unsaved changes confirmation message.", "placeholders": { @@ -980,7 +1011,7 @@ "@heading6": { "description": "Heading 6 style label." }, - "headingLevelAbbreviation": "\u2068H{level}\u2069", + "headingLevelAbbreviation": "⁨H{level}⁩", "@headingLevelAbbreviation": { "description": "Compact outline badge for a heading level.", "placeholders": { @@ -1060,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "نص", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "كود", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "نص بديل", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "صِف الصورة", "@describeTheImage": { "description": "Image alt text hint." @@ -1095,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "الصورة البعيدة محظورة", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "اختر ما إذا كان بإمكان BusyMark تحميل الصور البعيدة.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "الصور البعيدة محظورة", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "يشير هذا المستند إلى صور من الإنترنت. قد يكشف تحميلها معلومات عن الشبكة لمضيف الصورة.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "تحميل لمساحة العمل هذه", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "تحميل الصور البعيدة دائمًا", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "إخفاء اللوحة الجانبية", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1240,7 +1288,7 @@ "@confirmRemoveFromTocTitle": { "description": "Confirmation title before removing a Writerside TOC entry." }, - "confirmRemoveFromTocMessage": "هل تريد إزالة \u2068{name}\u2069 من جدول المحتويات هذا؟ سيُحتفظ بملف الموضوع.", + "confirmRemoveFromTocMessage": "هل تريد إزالة ⁨{name}⁩ من جدول المحتويات هذا؟ سيُحتفظ بملف الموضوع.", "@confirmRemoveFromTocMessage": { "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", "placeholders": { @@ -1253,7 +1301,7 @@ "@confirmDeleteTopicTitle": { "description": "Confirmation title before deleting a Writerside topic file." }, - "confirmDeleteTopicMessage": "هل تريد حذف \u2068{name}\u2069 وإزالته من جميع جداول المحتويات؟ لا يمكن التراجع عن هذا الإجراء.", + "confirmDeleteTopicMessage": "هل تريد حذف ⁨{name}⁩ وإزالته من جميع جداول المحتويات؟ لا يمكن التراجع عن هذا الإجراء.", "@confirmDeleteTopicMessage": { "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", "placeholders": { @@ -1286,7 +1334,7 @@ "@useSingleSafeFileName": { "description": "Validation message for unsafe file names." }, - "useExpectedExtension": "استخدم الامتداد \u2068{extension}\u2069 للتنسيق المحدد.", + "useExpectedExtension": "استخدم الامتداد ⁨{extension}⁩ للتنسيق المحدد.", "@useExpectedExtension": { "description": "Validation message for an unexpected file extension.", "placeholders": { @@ -1346,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "التطابق السابق", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "التطابق التالي", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "حساس لحالة الأحرف", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "الكلمة بالكامل", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "تعبير نمطي", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "تعبير نمطي غير صالح", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "ملف كبير: تم إيقاف التمييز والطي مؤقتًا", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "لا يوجد محتوى للقراءة", "admonition": "تنبيه", "quote": "اقتباس", @@ -1401,7 +1463,7 @@ "@chapter": { "description": "Preview label for a chapter element." }, - "couldNotOpenTarget": "تعذر فتح \u2068{target}\u2069", + "couldNotOpenTarget": "تعذر فتح ⁨{target}⁩", "@couldNotOpenTarget": { "description": "Toast shown when a link target cannot be opened.", "placeholders": { @@ -1410,7 +1472,7 @@ } } }, - "linkTargetNotFound": "لم يتم العثور على هدف الرابط: \u2068{targetPath}\u2069", + "linkTargetNotFound": "لم يتم العثور على هدف الرابط: ⁨{targetPath}⁩", "@linkTargetNotFound": { "description": "Toast shown when a link target path is missing.", "placeholders": { @@ -1423,7 +1485,7 @@ "@cannotOpenFileTypeInEditor": { "description": "Toast shown when a file type cannot be opened in the editor." }, - "anchorNotFound": "لم يتم العثور على المُرسى: \u2068{anchor}\u2069", + "anchorNotFound": "لم يتم العثور على المُرسى: ⁨{anchor}⁩", "@anchorNotFound": { "description": "Toast shown when a link anchor is missing.", "placeholders": { @@ -1440,7 +1502,7 @@ "@noResults": { "description": "Search empty state." }, - "searchResultLine": "\u2068{relativePath}\u2069 - السطر \u2068{lineNumber}\u2069", + "searchResultLine": "⁨{relativePath}⁩ - السطر ⁨{lineNumber}⁩", "@searchResultLine": { "description": "Search result subtitle with file path and line number.", "placeholders": { @@ -1488,7 +1550,7 @@ "@documentKindResourceFile": { "description": "Search result document kind label." }, - "workspaceErrorOpenFailed": "فشل الفتح: \u2068{error}\u2069", + "workspaceErrorOpenFailed": "فشل الفتح: ⁨{error}⁩", "@workspaceErrorOpenFailed": { "description": "Workspace error message shown when opening a path fails.", "placeholders": { @@ -1497,7 +1559,7 @@ } } }, - "workspaceErrorCreateWritersideProjectFailed": "تعذر إنشاء مشروع Writerside: \u2068{error}\u2069", + "workspaceErrorCreateWritersideProjectFailed": "تعذر إنشاء مشروع Writerside: ⁨{error}⁩", "@workspaceErrorCreateWritersideProjectFailed": { "description": "Workspace error message shown when Writerside project creation fails.", "placeholders": { @@ -1506,7 +1568,7 @@ } } }, - "workspaceErrorCreateWritersideTopicFailed": "تعذر إنشاء موضوع Writerside: \u2068{error}\u2069", + "workspaceErrorCreateWritersideTopicFailed": "تعذر إنشاء موضوع Writerside: ⁨{error}⁩", "@workspaceErrorCreateWritersideTopicFailed": { "description": "Workspace error message shown when Writerside topic creation fails.", "placeholders": { @@ -1515,7 +1577,7 @@ } } }, - "workspaceErrorCouldNotOpenFile": "تعذر فتح الملف: \u2068{error}\u2069", + "workspaceErrorCouldNotOpenFile": "تعذر فتح الملف: ⁨{error}⁩", "@workspaceErrorCouldNotOpenFile": { "description": "Workspace error message shown when opening a file fails.", "placeholders": { @@ -1532,7 +1594,7 @@ "@workspaceErrorSaveBlockedFileChangedOnDisk": { "description": "Workspace error message shown when a save is blocked by external changes." }, - "workspaceErrorSaveFailed": "فشل الحفظ: \u2068{error}\u2069", + "workspaceErrorSaveFailed": "فشل الحفظ: ⁨{error}⁩", "@workspaceErrorSaveFailed": { "description": "Workspace error message shown when saving fails.", "placeholders": { @@ -1541,7 +1603,7 @@ } } }, - "workspaceErrorValidationFailed": "فشل التحقق: \u2068{error}\u2069", + "workspaceErrorValidationFailed": "فشل التحقق: ⁨{error}⁩", "@workspaceErrorValidationFailed": { "description": "Workspace error message shown when validation fails.", "placeholders": { @@ -1550,7 +1612,7 @@ } } }, - "errorPathDoesNotExist": "المسار غير موجود: \u2068{path}\u2069", + "errorPathDoesNotExist": "المسار غير موجود: ⁨{path}⁩", "@errorPathDoesNotExist": { "description": "Detail for a missing path error.", "placeholders": { @@ -1559,7 +1621,7 @@ } } }, - "errorTargetDirectoryNotEmpty": "الدليل الهدف موجود بالفعل وليس فارغًا: \u2068{path}\u2069", + "errorTargetDirectoryNotEmpty": "الدليل الهدف موجود بالفعل وليس فارغًا: ⁨{path}⁩", "@errorTargetDirectoryNotEmpty": { "description": "Detail for a non-empty target directory error.", "placeholders": { @@ -1568,7 +1630,7 @@ } } }, - "errorTargetPathNotDirectory": "المسار الهدف موجود بالفعل وليس دليلاً: \u2068{path}\u2069", + "errorTargetPathNotDirectory": "المسار الهدف موجود بالفعل وليس دليلاً: ⁨{path}⁩", "@errorTargetPathNotDirectory": { "description": "Detail for a target path that is not a directory.", "placeholders": { @@ -1577,7 +1639,7 @@ } } }, - "errorGeneratedFileAlreadyExists": "الملف المُنشأ موجود بالفعل: \u2068{path}\u2069", + "errorGeneratedFileAlreadyExists": "الملف المُنشأ موجود بالفعل: ⁨{path}⁩", "@errorGeneratedFileAlreadyExists": { "description": "Detail for a generated file conflict.", "placeholders": { @@ -1590,7 +1652,7 @@ "@errorParentDirectoryRequired": { "description": "Detail for missing parent directory input." }, - "errorParentDirectoryMissing": "الدليل الأصل غير موجود: \u2068{path}\u2069", + "errorParentDirectoryMissing": "الدليل الأصل غير موجود: ⁨{path}⁩", "@errorParentDirectoryMissing": { "description": "Detail for a missing parent directory.", "placeholders": { @@ -1623,7 +1685,7 @@ "@errorTopicTitleRequired": { "description": "Detail for a missing topic title." }, - "errorWritersideModuleRootMissing": "جذر وحدة Writerside غير موجود: \u2068{path}\u2069", + "errorWritersideModuleRootMissing": "جذر وحدة Writerside غير موجود: ⁨{path}⁩", "@errorWritersideModuleRootMissing": { "description": "Detail for a missing Writerside module root.", "placeholders": { @@ -1640,7 +1702,7 @@ "@errorWritersideInstanceTreeMissing": { "description": "Detail shown when creating a topic without a Writerside instance tree." }, - "errorWritersideTreeFileMissing": "ملف شجرة Writerside غير موجود: \u2068{path}\u2069", + "errorWritersideTreeFileMissing": "ملف شجرة Writerside غير موجود: ⁨{path}⁩", "@errorWritersideTreeFileMissing": { "description": "Detail for a missing Writerside tree file.", "placeholders": { @@ -1649,7 +1711,7 @@ } } }, - "errorTopicIdAlreadyExists": "معرّف الموضوع \"\u2068{topicId}\u2069\" موجود بالفعل في وحدة المساعدة هذه.", + "errorTopicIdAlreadyExists": "معرّف الموضوع \"⁨{topicId}⁩\" موجود بالفعل في وحدة المساعدة هذه.", "@errorTopicIdAlreadyExists": { "description": "Detail for a duplicate topic ID.", "placeholders": { @@ -1658,7 +1720,7 @@ } } }, - "errorTopicFileAlreadyExists": "ملف الموضوع موجود بالفعل: \u2068{path}\u2069", + "errorTopicFileAlreadyExists": "ملف الموضوع موجود بالفعل: ⁨{path}⁩", "@errorTopicFileAlreadyExists": { "description": "Detail for an existing topic file.", "placeholders": { @@ -1667,7 +1729,7 @@ } } }, - "errorReferenceTopicMissing": "الموضوع المرجعي غير موجود في الشجرة المحددة: \u2068{topic}\u2069", + "errorReferenceTopicMissing": "الموضوع المرجعي غير موجود في الشجرة المحددة: ⁨{topic}⁩", "@errorReferenceTopicMissing": { "description": "Detail for a missing reference topic in a tree.", "placeholders": { @@ -1684,7 +1746,7 @@ "@errorWritersideTocInvalidMove": { "description": "Detail shown when a Writerside TOC move would create a cycle." }, - "errorWritersideStartTopicDelete": "لا يمكن حذف موضوع البدء \u2068{topic}\u2069. اختر صفحة بدء أخرى أولًا.", + "errorWritersideStartTopicDelete": "لا يمكن حذف موضوع البدء ⁨{topic}⁩. اختر صفحة بدء أخرى أولًا.", "@errorWritersideStartTopicDelete": { "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", "placeholders": { @@ -1701,7 +1763,7 @@ "@errorTopicFileNameUnsafe": { "description": "Detail for an unsafe topic file name." }, - "errorTopicFileExtensionMismatch": "يجب أن يتطابق امتداد ملف الموضوع مع التنسيق المحدد (\u2068{extension}\u2069).", + "errorTopicFileExtensionMismatch": "يجب أن يتطابق امتداد ملف الموضوع مع التنسيق المحدد (⁨{extension}⁩).", "@errorTopicFileExtensionMismatch": { "description": "Detail for a topic file extension mismatch.", "placeholders": { @@ -1714,7 +1776,7 @@ "@errorTopicFileNameInvalid": { "description": "Detail for a topic file name with invalid characters." }, - "errorUnknown": "خطأ غير معروف: \u2068{code}\u2069", + "errorUnknown": "خطأ غير معروف: ⁨{code}⁩", "@errorUnknown": { "description": "Fallback detail for an unknown coded application error.", "placeholders": { @@ -1723,7 +1785,7 @@ } } }, - "diagnosticWorkspaceFileStatFailed": "تعذرت قراءة بيانات تعريف الملف: \u2068{error}\u2069", + "diagnosticWorkspaceFileStatFailed": "تعذرت قراءة بيانات تعريف الملف: ⁨{error}⁩", "@diagnosticWorkspaceFileStatFailed": { "description": "Diagnostic shown when file metadata cannot be read.", "placeholders": { @@ -1736,7 +1798,7 @@ "@diagnosticWorkspaceScanSkipped": { "description": "Diagnostic shown when workspace scanning skips files." }, - "diagnosticWorkspaceScanInspectFailed": "تعذر فحص عنصر مساحة العمل: \u2068{error}\u2069", + "diagnosticWorkspaceScanInspectFailed": "تعذر فحص عنصر مساحة العمل: ⁨{error}⁩", "@diagnosticWorkspaceScanInspectFailed": { "description": "Diagnostic shown when a workspace entry cannot be inspected.", "placeholders": { @@ -1749,7 +1811,7 @@ "@diagnosticWorkspaceFileTooLarge": { "description": "Diagnostic shown when a file is too large to parse automatically." }, - "diagnosticWorkspaceFileReadFailed": "تعذرت قراءة ملف Markdown: \u2068{error}\u2069", + "diagnosticWorkspaceFileReadFailed": "تعذرت قراءة ملف Markdown: ⁨{error}⁩", "@diagnosticWorkspaceFileReadFailed": { "description": "Diagnostic shown when a Markdown file cannot be read.", "placeholders": { @@ -1762,7 +1824,7 @@ "@diagnosticMarkdownAttributeMalformed": { "description": "Markdown parser diagnostic for malformed Writerside heading attributes." }, - "diagnosticMarkdownHeadingDuplicateId": "معرّف عنوان مكرر \"\u2068{id}\u2069\".", + "diagnosticMarkdownHeadingDuplicateId": "معرّف عنوان مكرر \"⁨{id}⁩\".", "@diagnosticMarkdownHeadingDuplicateId": { "description": "Markdown parser diagnostic for duplicate heading IDs.", "placeholders": { @@ -1783,7 +1845,7 @@ "@diagnosticWritersideXmlTopicMissingTitle": { "description": "Diagnostic for a Writerside XML topic without a title." }, - "diagnosticWritersideTopicFileMissingTitle": "الموضوع \"\u2068{fileName}\u2069\" يفتقد عنوانًا.", + "diagnosticWritersideTopicFileMissingTitle": "الموضوع \"⁨{fileName}⁩\" يفتقد عنوانًا.", "@diagnosticWritersideTopicFileMissingTitle": { "description": "Diagnostic for a Writerside topic file without a title.", "placeholders": { @@ -1800,7 +1862,7 @@ "@diagnosticMarkdownRawHtmlUnsafe": { "description": "Markdown parser diagnostic for unsafe raw HTML." }, - "diagnosticMarkdownLinkUnresolvedTarget": "هدف الرابط غير موجود: \u2068{targetPath}\u2069", + "diagnosticMarkdownLinkUnresolvedTarget": "هدف الرابط غير موجود: ⁨{targetPath}⁩", "@diagnosticMarkdownLinkUnresolvedTarget": { "description": "Markdown parser diagnostic for a missing link target.", "placeholders": { @@ -1809,7 +1871,7 @@ } } }, - "diagnosticMarkdownLinkUnresolvedAnchor": "المُرسى \"\u2068{anchor}\u2069\" غير موجود.", + "diagnosticMarkdownLinkUnresolvedAnchor": "المُرسى \"⁨{anchor}⁩\" غير موجود.", "@diagnosticMarkdownLinkUnresolvedAnchor": { "description": "Markdown parser diagnostic for a missing local anchor.", "placeholders": { @@ -1818,7 +1880,7 @@ } } }, - "diagnosticMarkdownImageMissingAlt": "الصورة \"\u2068{destination}\u2069\" تفتقد النص البديل.", + "diagnosticMarkdownImageMissingAlt": "الصورة \"⁨{destination}⁩\" تفتقد النص البديل.", "@diagnosticMarkdownImageMissingAlt": { "description": "Markdown parser diagnostic for a missing image alt text.", "placeholders": { @@ -1827,7 +1889,7 @@ } } }, - "diagnosticMarkdownImageMissingFile": "الصورة غير موجودة: \u2068{destination}\u2069", + "diagnosticMarkdownImageMissingFile": "الصورة غير موجودة: ⁨{destination}⁩", "@diagnosticMarkdownImageMissingFile": { "description": "Markdown parser diagnostic for a missing image file.", "placeholders": { @@ -1836,7 +1898,7 @@ } } }, - "diagnosticInvalidXml": "XML غير صالح: \u2068{message}\u2069", + "diagnosticInvalidXml": "XML غير صالح: ⁨{message}⁩", "@diagnosticInvalidXml": { "description": "XML parser diagnostic for invalid XML.", "placeholders": { @@ -1857,7 +1919,7 @@ "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { "description": "Writerside parser diagnostic for an instance-groups declaration without src." }, - "diagnosticWritersideConfigInvalidKeymapsMode": "وضع keymaps غير مدعوم: \u2068{mode}\u2069", + "diagnosticWritersideConfigInvalidKeymapsMode": "وضع keymaps غير مدعوم: ⁨{mode}⁩", "@diagnosticWritersideConfigInvalidKeymapsMode": { "description": "Writerside parser diagnostic for an unsupported keymaps mode.", "placeholders": { @@ -1882,7 +1944,7 @@ "@diagnosticWritersideTreeMissingId": { "description": "Writerside parser diagnostic for an instance profile without id." }, - "diagnosticWritersideTreeIdMismatch": "لا يتطابق اسم ملف الشجرة بدون الامتداد مع معرّف المثيل \"\u2068{id}\u2069\".", + "diagnosticWritersideTreeIdMismatch": "لا يتطابق اسم ملف الشجرة بدون الامتداد مع معرّف المثيل \"⁨{id}⁩\".", "@diagnosticWritersideTreeIdMismatch": { "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", "placeholders": { @@ -1895,7 +1957,7 @@ "@diagnosticWritersideTreeMissingStartPage": { "description": "Writerside parser diagnostic for a tree missing start-page." }, - "diagnosticWritersideStartPageMissing": "صفحة البدء \"\u2068{startPage}\u2069\" غير موجودة.", + "diagnosticWritersideStartPageMissing": "صفحة البدء \"⁨{startPage}⁩\" غير موجودة.", "@diagnosticWritersideStartPageMissing": { "description": "Writerside diagnostic for a missing start page.", "placeholders": { @@ -1904,7 +1966,7 @@ } } }, - "diagnosticWritersideTreeDuplicateTopic": "يظهر الموضوع \"\u2068{topic}\u2069\" أكثر من مرة في جدول محتويات هذا المثيل.", + "diagnosticWritersideTreeDuplicateTopic": "يظهر الموضوع \"⁨{topic}⁩\" أكثر من مرة في جدول محتويات هذا المثيل.", "@diagnosticWritersideTreeDuplicateTopic": { "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", "placeholders": { @@ -1917,7 +1979,7 @@ "@diagnosticWritersideVariableMalformedDeclaration": { "description": "Writerside parser diagnostic for a malformed variable declaration." }, - "diagnosticWritersideVariableDuplicateName": "تم الإعلان عن المتغير \"\u2068{name}\u2069\" أكثر من مرة.", + "diagnosticWritersideVariableDuplicateName": "تم الإعلان عن المتغير \"⁨{name}⁩\" أكثر من مرة.", "@diagnosticWritersideVariableDuplicateName": { "description": "Writerside parser diagnostic for a duplicate variable name.", "placeholders": { @@ -1930,7 +1992,7 @@ "@diagnosticWritersideCategoryMissingId": { "description": "Writerside parser diagnostic for a category without id." }, - "diagnosticWritersideCategoryDuplicateId": "تم الإعلان عن الفئة \"\u2068{id}\u2069\" أكثر من مرة.", + "diagnosticWritersideCategoryDuplicateId": "تم الإعلان عن الفئة \"⁨{id}⁩\" أكثر من مرة.", "@diagnosticWritersideCategoryDuplicateId": { "description": "Writerside parser diagnostic for a duplicate category ID.", "placeholders": { @@ -1939,7 +2001,7 @@ } } }, - "diagnosticWritersideCategoryDuplicateOrder": "تم الإعلان عن ترتيب الفئة \"\u2068{order}\u2069\" أكثر من مرة.", + "diagnosticWritersideCategoryDuplicateOrder": "تم الإعلان عن ترتيب الفئة \"⁨{order}⁩\" أكثر من مرة.", "@diagnosticWritersideCategoryDuplicateOrder": { "description": "Writerside parser diagnostic for a duplicate category order.", "placeholders": { @@ -1956,7 +2018,7 @@ "@diagnosticWritersideTopicMissingRootId": { "description": "Writerside parser diagnostic for an XML topic missing root id." }, - "diagnosticWritersideTopicRootIdMismatch": "يجب أن يتطابق معرّف جذر موضوع XML \"\u2068{id}\u2069\" مع اسم الملف \"\u2068{expectedId}\u2069\".", + "diagnosticWritersideTopicRootIdMismatch": "يجب أن يتطابق معرّف جذر موضوع XML \"⁨{id}⁩\" مع اسم الملف \"⁨{expectedId}⁩\".", "@diagnosticWritersideTopicRootIdMismatch": { "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", "placeholders": { @@ -1968,7 +2030,7 @@ } } }, - "diagnosticWritersideTopicDuplicateElementId": "يظهر معرّف العنصر \"\u2068{elementId}\u2069\" أكثر من مرة.", + "diagnosticWritersideTopicDuplicateElementId": "يظهر معرّف العنصر \"⁨{elementId}⁩\" أكثر من مرة.", "@diagnosticWritersideTopicDuplicateElementId": { "description": "Writerside parser diagnostic for a duplicate XML element ID.", "placeholders": { @@ -1985,7 +2047,7 @@ "@diagnosticWritersideConfigMissing": { "description": "Writerside module diagnostic for a missing writerside.cfg." }, - "diagnosticWritersideConfigMissingBuildConfigDirectory": "دليل تكوين البناء المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingBuildConfigDirectory": "دليل تكوين البناء المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingBuildConfigDirectory": { "description": "Writerside module diagnostic for a missing build config directory.", "placeholders": { @@ -1994,7 +2056,7 @@ } } }, - "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "دليل مواصفات API المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "دليل مواصفات API المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { "description": "Writerside module diagnostic for a missing API specifications directory.", "placeholders": { @@ -2003,7 +2065,7 @@ } } }, - "diagnosticWritersideConfigMissingSnippetsDirectory": "دليل المقتطفات المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingSnippetsDirectory": "دليل المقتطفات المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingSnippetsDirectory": { "description": "Writerside module diagnostic for a missing snippets directory.", "placeholders": { @@ -2012,7 +2074,7 @@ } } }, - "diagnosticWritersideConfigMissingVarsFile": "ملف المتغيرات المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingVarsFile": "ملف المتغيرات المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingVarsFile": { "description": "Writerside module diagnostic for a missing variables file.", "placeholders": { @@ -2021,7 +2083,7 @@ } } }, - "diagnosticWritersideConfigMissingCategoriesFile": "ملف الفئات المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingCategoriesFile": "ملف الفئات المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingCategoriesFile": { "description": "Writerside module diagnostic for a missing categories file.", "placeholders": { @@ -2030,7 +2092,7 @@ } } }, - "diagnosticWritersideConfigMissingInstanceGroupsFile": "ملف مجموعات المثيلات المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingInstanceGroupsFile": "ملف مجموعات المثيلات المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingInstanceGroupsFile": { "description": "Writerside module diagnostic for a missing instance groups file.", "placeholders": { @@ -2039,7 +2101,7 @@ } } }, - "diagnosticWritersideConfigMissingInstanceTree": "شجرة المثيل المسجلة \"\u2068{source}\u2069\" غير موجودة.", + "diagnosticWritersideConfigMissingInstanceTree": "شجرة المثيل المسجلة \"⁨{source}⁩\" غير موجودة.", "@diagnosticWritersideConfigMissingInstanceTree": { "description": "Writerside module diagnostic for a missing registered instance tree.", "placeholders": { @@ -2048,7 +2110,7 @@ } } }, - "diagnosticWritersideTopicReadFailed": "تعذرت قراءة ملف الموضوع: \u2068{error}\u2069", + "diagnosticWritersideTopicReadFailed": "تعذرت قراءة ملف الموضوع: ⁨{error}⁩", "@diagnosticWritersideTopicReadFailed": { "description": "Writerside module diagnostic for a topic file read failure.", "placeholders": { @@ -2057,7 +2119,7 @@ } } }, - "diagnosticWritersideDefaultTopicsDirectoryMissing": "دليل المواضيع الافتراضي مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideDefaultTopicsDirectoryMissing": "دليل المواضيع الافتراضي مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideDefaultTopicsDirectoryMissing": { "description": "Writerside module diagnostic for a missing default topics directory.", "placeholders": { @@ -2066,7 +2128,7 @@ } } }, - "diagnosticWritersideTopicsDirectoryMissing": "دليل المواضيع المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideTopicsDirectoryMissing": "دليل المواضيع المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideTopicsDirectoryMissing": { "description": "Writerside module diagnostic for a missing topics directory.", "placeholders": { @@ -2075,7 +2137,7 @@ } } }, - "diagnosticWritersideImagesDirectoryMissing": "دليل الصور المحدد مفقود: \u2068{relativePath}\u2069", + "diagnosticWritersideImagesDirectoryMissing": "دليل الصور المحدد مفقود: ⁨{relativePath}⁩", "@diagnosticWritersideImagesDirectoryMissing": { "description": "Writerside module diagnostic for a missing images directory.", "placeholders": { @@ -2084,7 +2146,7 @@ } } }, - "diagnosticWritersideTopicDuplicateId": "يظهر معرّف العنصر \"\u2068{id}\u2069\" أكثر من مرة.", + "diagnosticWritersideTopicDuplicateId": "يظهر معرّف العنصر \"⁨{id}⁩\" أكثر من مرة.", "@diagnosticWritersideTopicDuplicateId": { "description": "Writerside module diagnostic for a duplicate topic element ID.", "placeholders": { @@ -2093,7 +2155,7 @@ } } }, - "diagnosticWritersideTreeMissingTopic": "يشير جدول المحتويات إلى موضوع مفقود \"\u2068{topic}\u2069\".", + "diagnosticWritersideTreeMissingTopic": "يشير جدول المحتويات إلى موضوع مفقود \"⁨{topic}⁩\".", "@diagnosticWritersideTreeMissingTopic": { "description": "Writerside module diagnostic for a TOC reference to a missing topic.", "placeholders": { @@ -2102,7 +2164,7 @@ } } }, - "diagnosticWritersideTreeInvalidHref": "قيمة href الخارجية \"\u2068{href}\u2069\" غير صالحة.", + "diagnosticWritersideTreeInvalidHref": "قيمة href الخارجية \"⁨{href}⁩\" غير صالحة.", "@diagnosticWritersideTreeInvalidHref": { "description": "Writerside module diagnostic for an invalid external href.", "placeholders": { @@ -2111,7 +2173,7 @@ } } }, - "diagnosticWritersideVariableUnresolved": "لم يتم الإعلان عن المتغير \"\u2068%{name}%\u2069\".", + "diagnosticWritersideVariableUnresolved": "لم يتم الإعلان عن المتغير \"⁨%{name}%⁩\".", "@diagnosticWritersideVariableUnresolved": { "description": "Writerside module diagnostic for an undeclared variable.", "placeholders": { @@ -2120,7 +2182,7 @@ } } }, - "diagnosticWritersideTopicLinkUnresolved": "لا يمكن حل رابط الموضوع \"\u2068{destination}\u2069\".", + "diagnosticWritersideTopicLinkUnresolved": "لا يمكن حل رابط الموضوع \"⁨{destination}⁩\".", "@diagnosticWritersideTopicLinkUnresolved": { "description": "Writerside module diagnostic for an unresolved topic link.", "placeholders": { @@ -2129,7 +2191,7 @@ } } }, - "diagnosticWritersideAnchorUnresolved": "المُرسى \"\u2068{anchor}\u2069\" غير موجود في \"\u2068{targetName}\u2069\".", + "diagnosticWritersideAnchorUnresolved": "المُرسى \"⁨{anchor}⁩\" غير موجود في \"⁨{targetName}⁩\".", "@diagnosticWritersideAnchorUnresolved": { "description": "Writerside module diagnostic for an unresolved topic anchor.", "placeholders": { @@ -2145,7 +2207,7 @@ "@diagnosticWritersideIncludeMissingFrom": { "description": "Writerside module diagnostic for an include without a from attribute." }, - "diagnosticWritersideIncludeSourceMissing": "مصدر التضمين \"\u2068{from}\u2069\" غير موجود.", + "diagnosticWritersideIncludeSourceMissing": "مصدر التضمين \"⁨{from}⁩\" غير موجود.", "@diagnosticWritersideIncludeSourceMissing": { "description": "Writerside module diagnostic for a missing include source.", "placeholders": { @@ -2154,7 +2216,7 @@ } } }, - "diagnosticWritersideIncludeElementMissing": "عنصر التضمين \"\u2068{elementId}\u2069\" غير موجود في \"\u2068{from}\u2069\".", + "diagnosticWritersideIncludeElementMissing": "عنصر التضمين \"⁨{elementId}⁩\" غير موجود في \"⁨{from}⁩\".", "@diagnosticWritersideIncludeElementMissing": { "description": "Writerside module diagnostic for a missing include element.", "placeholders": { @@ -2166,7 +2228,7 @@ } } }, - "diagnosticWritersideCategoryUnresolved": "فئة seealso \"\u2068{ref}\u2069\" غير معلنة.", + "diagnosticWritersideCategoryUnresolved": "فئة seealso \"⁨{ref}⁩\" غير معلنة.", "@diagnosticWritersideCategoryUnresolved": { "description": "Writerside module diagnostic for an unresolved seealso category.", "placeholders": { @@ -2175,7 +2237,7 @@ } } }, - "diagnosticWritersideTopicAmbiguousReference": "مرجع الموضوع \"\u2068{reference}\u2069\" غامض.", + "diagnosticWritersideTopicAmbiguousReference": "مرجع الموضوع \"⁨{reference}⁩\" غامض.", "@diagnosticWritersideTopicAmbiguousReference": { "description": "Writerside module diagnostic for an ambiguous topic reference.", "placeholders": { @@ -2184,7 +2246,7 @@ } } }, - "diagnosticUnknown": "تشخيص غير معروف: \u2068{code}\u2069", + "diagnosticUnknown": "تشخيص غير معروف: ⁨{code}⁩", "@diagnosticUnknown": { "description": "Fallback text for an unknown diagnostic code.", "placeholders": { @@ -2197,10 +2259,10 @@ "git": "Git", "gitDiff": "فروقات Git", "gitShowDiff": "إظهار الفروقات", - "gitDiffHunkRange": "القديم \u2068{oldRange}\u2069 ← الجديد \u2068{newRange}\u2069", + "gitDiffHunkRange": "القديم ⁨{oldRange}⁩ ← الجديد ⁨{newRange}⁩", "gitDiffNoLines": "لا أسطر", "gitUnavailableTitle": "Git غير متاح", - "gitUnavailableMessage": "{reason, select, other{ثبّت Git أو اضبط BusyMark لاستخدام ملف Git تنفيذي متاح. \u2068{reason}\u2069}}", + "gitUnavailableMessage": "{reason, select, other{ثبّت Git أو اضبط BusyMark لاستخدام ملف Git تنفيذي متاح. ⁨{reason}⁩}}", "gitTrustRequiredTitle": "الوثوق بمساحة العمل هذه لاستخدام Git؟", "gitTrustRequiredMessage": "يمكن لمستودعات Git تشغيل برامج من خلال الخطافات والمرشحات وإعدادات أخرى. ثق بمساحة العمل هذه قبل أن يقرأ BusyMark بيانات المستودع أو يمكّن إجراءات Git.", "gitTrustWorkspace": "الوثوق بمساحة العمل", @@ -2208,7 +2270,7 @@ "gitNotRepositoryMessage": "مساحة العمل هذه ليست داخل مستودع Git.", "gitInitializeRepository": "تهيئة المستودع", "gitDetachedHead": "HEAD منفصل", - "gitDetachedHeadAt": "HEAD منفصل عند \u2068{commit}\u2069", + "gitDetachedHeadAt": "HEAD منفصل عند ⁨{commit}⁩", "gitNoUpstream": "لا يوجد فرع منبع", "gitAheadCount": "{count, plural, zero{لا توجد التزامات غير مرفوعة} one{التزام واحد غير مرفوع} two{التزامان غير مرفوعين} few{{count} التزامات غير مرفوعة} many{{count} التزامًا غير مرفوع} other{{count} التزام غير مرفوع}}", "gitBehindCount": "{count, plural, zero{لا توجد التزامات لسحبها} one{التزام واحد لسحبه} two{التزامان لسحبهما} few{{count} التزامات لسحبها} many{{count} التزامًا لسحبها} other{{count} التزام لسحبه}}", @@ -2245,16 +2307,16 @@ "gitBinaryFile": "ملف ثنائي. لا يعرض BusyMark رقع الملفات الثنائية.", "gitUnsavedChangesBanner": "لا تُضمّن تغييرات المحرر غير المحفوظة حتى يتم حفظها.", "gitConfirmDiscardTitle": "تجاهل تغييرات Git؟", - "gitConfirmDiscardTracked": "{count, plural, zero{لا توجد ملفات متعقبة محددة لاستعادتها من Git.} one{ستتم استعادة الملف المتعقب المحدد من Git.} two{ستتم استعادة الملفين المتعقبين المحددين من Git.} few{ستتم استعادة الملفات المتعقبة المحددة من Git.} many{ستتم استعادة الملفات المتعقبة المحددة من Git.} other{ستتم استعادة الملفات المتعقبة المحددة من Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{ستتم استعادة جميع تغييرات المرحلة وغير المرحلة في الملف المتعقب المحدد إلى HEAD.} other{ستتم استعادة جميع تغييرات المرحلة وغير المرحلة في الملفات المتعقبة المحددة إلى HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, zero{لا توجد ملفات غير متعقبة محددة لحذفها.} one{سيُحذف الملف غير المتعقب المحدد.} two{سيُحذف الملفان غير المتعقبين المحددان.} few{ستُحذف الملفات غير المتعقبة المحددة.} many{ستُحذف الملفات غير المتعقبة المحددة.} other{ستُحذف الملفات غير المتعقبة المحددة.}}", "gitConfirmDiscardMixed": "{count, plural, zero{لا توجد ملفات محددة لاستعادتها أو حذفها.} one{ستتم استعادة الملف المحدد أو حذفه حسب حالته في Git.} two{ستتم استعادة الملفين المحددين أو حذفهما حسب حالتهما في Git.} few{ستتم استعادة الملفات المحددة أو حذفها حسب حالتها في Git.} many{ستتم استعادة الملفات المحددة أو حذفها حسب حالتها في Git.} other{ستتم استعادة الملفات المحددة أو حذفها حسب حالتها في Git.}}", - "gitConfirmSwitchBranchTitle": "التبديل إلى \u2068{branch}\u2069؟", + "gitConfirmSwitchBranchTitle": "التبديل إلى ⁨{branch}⁩؟", "gitConfirmSwitchBranchMessage": "سيعيد BusyMark تحميل مساحة العمل من القرص بعد أن يبدّل Git الفروع.", "gitConfirmPushSetUpstreamTitle": "تعيين فرع منبع؟", - "gitConfirmPushSetUpstreamMessage": "ليس لهذا الفرع فرع منبع. يمكن لـ BusyMark دفع \u2068{branch}\u2069 وتعيينه فرعًا منبعًا عندما يكون هناك مستودع بعيد واحد فقط مُعدّ.", - "gitProjectHistory": "المشروع", - "gitFileHistory": "الملف الحالي", - "gitAdditionsDeletions": "\u2068+{additions} -{deletions}\u2069", + "gitConfirmPushSetUpstreamMessage": "ليس لهذا الفرع فرع منبع. يمكن لـ BusyMark دفع ⁨{branch}⁩ وتعيينه فرعًا منبعًا عندما يكون هناك مستودع بعيد واحد فقط مُعدّ.", + "gitProjectHistory": "تاريخ المشروع", + "gitFileHistory": "تاريخ الملف", + "gitAdditionsDeletions": "⁨+{additions} -{deletions}⁩", "fileActions": "إجراءات الملف", "actions": "إجراءات", "gitStatusAdded": "مضاف", @@ -2288,185 +2350,443 @@ "gitErrorNetwork": "فشلت عملية Git عبر الشبكة.", "gitErrorConflict": "أبلغ Git عن تعارضات لم تُحل.", "gitErrorCommandFailed": "فشل أمر Git.", - "markdownAndHtml": "Markdown و HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "كتل Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "بنى الكتل المدعومة في مصدر Markdown والمعاينة.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown داخل السطر", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "تنسيق يمكن استخدامه داخل الفقرات وعناصر القوائم وخلايا الجداول.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "كتل HTML الخام", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "وسوم HTML الكتلية الآمنة التي تعرضها ودجات معاينة BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "وسوم HTML داخل السطر", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "وسوم HTML آمنة داخل السطر تعرض بدون إظهار الوسوم حرفيًا.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "قواعد الأمان", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "يتم تحليل HTML الخام وتنظيفه قبل عرضه في المعاينة.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "العناوين", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "الفقرات", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "القوائم", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "الحاويات", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "كتل النص", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "الأشكال والصور", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "كود منسق مسبقًا", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "كتل قابلة للفتح", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "قوائم وصفية", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "وسوم التنسيق", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "وسوم الكود داخل السطر", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "وسوم نصية دلالية", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "معاينة منظفة", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "يتم تحويل HTML المسموح به إلى كتل معاينة BusyMark، وليس عرضه في متصفح.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "يتم حفظ المصدر", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "يتم حفظ HTML الخام غير المعدل كما هو تمامًا كنص مصدر.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown داخل HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "تعرض علامات Markdown داخل HTML الخام كنص حرفي.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "المحتوى النشط محظور", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "يتم حظر السكربتات والأنماط والإطارات والنماذج وSVG وMathML والأحداث والسمات غير الآمنة.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "عناوين URL آمنة فقط", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "تسمح الروابط بـ http وhttps وmailto وtel والروابط النسبية والمقاطع؛ وتحظر المخططات غير الآمنة.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "إضافة إلى Git", "delete": "حذف", "newFile": "ملف جديد", "rename": "إعادة تسمية", "confirmDeleteFileTitle": "حذف الملف؟", "confirmDeleteFolderTitle": "حذف المجلد؟", - "confirmDeleteFileMessage": "حذف \u2068{name}\u2069؟ لا يمكن التراجع عن هذا.", - "confirmDeleteFolderMessage": "حذف \u2068{name}\u2069 وكل الملفات داخله؟ لا يمكن التراجع عن هذا.", - "workspaceErrorFileOperationFailed": "فشلت عملية الملف: \u2068{error}\u2069", - "errorDirectoryMissing": "المجلد غير موجود: \u2068{path}\u2069", - "errorPathAlreadyExists": "المسار موجود بالفعل: \u2068{path}\u2069", + "confirmDeleteFileMessage": "حذف ⁨{name}⁩؟ لا يمكن التراجع عن هذا.", + "confirmDeleteFolderMessage": "حذف ⁨{name}⁩ وكل الملفات داخله؟ لا يمكن التراجع عن هذا.", + "workspaceErrorFileOperationFailed": "فشلت عملية الملف: ⁨{error}⁩", + "errorDirectoryMissing": "المجلد غير موجود: ⁨{path}⁩", + "errorPathAlreadyExists": "المسار موجود بالفعل: ⁨{path}⁩", "errorFileNameRequired": "اسم الملف مطلوب.", "errorFileNameUnsafe": "يجب أن يكون اسم الملف مقطع مسار آمنًا واحدًا.", "errorFileOperationInvalidTarget": "لا يمكن نقل مجلد إلى داخل نفسه.", "errorFileOperationOutsideRoot": "يجب أن تبقى عملية الملف داخل مساحة العمل.", "errorFileOperationRoot": "لا يمكن تغيير جذر مساحة العمل من شجرة الملفات.", "safeDeleteTopicFile": "حذف ملف الموضوع بأمان…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "إزالة عنصر جدول المحتويات", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "مراجعة الاستخدامات", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "حذف ملف الموضوع", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "إزالة", - "@removeAction": {"description": "Generic remove action label."}, - "topicRemovalSummary": "أزِل «\u2068{topic}\u2069» من المثيل المحدد. سيُحتفظ بملف الموضوع.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, - "safeDeleteTopicSummary": "احذف «\u2068{topic}\u2069» وحدّث المراجع إليه بأمان في مشروع Writerside هذا بأكمله.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@removeAction": { + "description": "Generic remove action label." + }, + "topicRemovalSummary": "أزِل «⁨{topic}⁩» من المثيل المحدد. سيُحتفظ بملف الموضوع.", + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "safeDeleteTopicSummary": "احذف «⁨{topic}⁩» وحدّث المراجع إليه بأمان في مشروع Writerside هذا بأكمله.", + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, zero{لن يُنقل أي موضوع فرعي.} one{سينتقل موضوع فرعي واحد مستوى واحدًا إلى الأعلى.} two{سينتقل موضوعان فرعيان مستوى واحدًا إلى الأعلى.} few{ستنتقل {count} موضوعات فرعية مستوى واحدًا إلى الأعلى.} many{سينتقل {count} موضوعًا فرعيًا مستوى واحدًا إلى الأعلى.} other{سينتقل {count} موضوع فرعي مستوى واحدًا إلى الأعلى.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "يُستخدم هذا الموضوع كصفحة بدء لمثيل. راجع استخداماته وعيّن صفحة بدء أخرى قبل المتابعة.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "الاستخدامات ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "لم يُعثر على مراجع قد تتعطل.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "عثر BusyMark على المراجع التالية لهذا الموضوع.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "عناصر جدول المحتويات", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "صفحات البدء", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "روابط الموضوعات", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "التضمينات", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, zero{لا استخدامات} one{استخدام واحد} two{استخدامان} few{{count} استخدامات} many{{count} استخدامًا} other{{count} استخدام}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "خيارات إعادة الهيكلة", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "تحديث الاستخدامات تلقائيًا", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "إزالة مراجع جدول المحتويات والتضمينات مع الاحتفاظ بنص الروابط.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "تتطلب بعض الاستخدامات تغييرات يدوية قبل إعادة الهيكلة هذه.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "تعيين إعادة التوجيه إلى", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "عدم إعادة توجيه الصفحة القديمة المنشورة.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "وجهة إعادة التوجيه", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "راجع الاستخدامات المتبقية وحدّثها قبل المتابعة، أو فعّل التحديثات التلقائية عند توفرها.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, - "usagesOfTopic": "استخدامات \u2068{topic}\u2069", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, + "usagesOfTopic": "استخدامات ⁨{topic}⁩", + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "لم يُعثر على استخدامات", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "خارج المثيل المحدد", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "تنفيذ إعادة الهيكلة", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "لم يعد ملف الموضوع مستخدمًا", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "الاحتفاظ بملف الموضوع", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, - "orphanTopicMessage": "لم يعد «\u2068{topic}\u2069» مستخدمًا في أي مكان ضمن مشروع Writerside هذا. احذف الملف أو احتفظ به لاستخدامه في مثيل آخر.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, + "orphanTopicMessage": "لم يعد «⁨{topic}⁩» مستخدمًا في أي مكان ضمن مشروع Writerside هذا. احذف الملف أو احتفظ به لاستخدامه في مثيل آخر.", + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "استخدم الحذف الآمن لملفات موضوعات Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "تعذّر إكمال فحص استخدامات الموضوع. لم تُغيَّر أي ملفات.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "لا تزال بعض استخدامات الموضوع تتطلب المعالجة. راجعها قبل المتابعة.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "لم يعد هدف إعادة التوجيه المحدد صالحًا. حدده مرة أخرى.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, - "errorWritersideRollbackFailed": "تعذّر التراجع بالكامل عن إزالة الموضوع. راجع هذه المسارات قبل المتابعة: \u2068{paths}\u2069", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "تصدير بصيغة PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "اختر تخطيط الصفحة لإنشاء ملف PDF متقن ومستقل.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "لا تُنزّل الصور البعيدة أثناء التصدير. تُضمّن الصور المحلية عند توفرها.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "حجم الصفحة", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "Letter (رسائل)", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "الاتجاه", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "عمودي", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "أفقي", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "الهوامش", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "ضيقة", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "عادية", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "عريضة", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "تضمين أرقام الصفحات", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "تصدير", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "جارٍ تصدير PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "مستند PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "تم تصدير {fileName}.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "تم تصدير {fileName}. صور تعذر تضمينها: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "مكوّن تصدير PDF مفقود. أعد تثبيت BusyMark ثم حاول مجددًا.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "استغرق تصدير PDF وقتًا طويلًا جدًا وتم إيقافه.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "تعذر على BusyMark تصدير هذا المستند بصيغة PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, + "errorWritersideRollbackFailed": "تعذّر التراجع بالكامل عن إزالة الموضوع. راجع هذه المسارات قبل المتابعة: ⁨{paths}⁩", + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "تصدير بصيغة PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "اختر تخطيط الصفحة لإنشاء ملف PDF متقن ومستقل.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "لا تُنزّل الصور البعيدة أثناء التصدير. تُضمّن الصور المحلية عند توفرها.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "حجم الصفحة", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Letter (رسائل)", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "الاتجاه", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "عمودي", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "أفقي", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "الهوامش", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "ضيقة", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "عادية", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "عريضة", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "تضمين أرقام الصفحات", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "تصدير", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "جارٍ تصدير PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "مستند PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "تم تصدير {fileName}.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} تم تصديره مع {count, plural, =1{تحذير واحد} other{{count} تحذيرات}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "مكوّن تصدير PDF مفقود. أعد تثبيت BusyMark ثم حاول مجددًا.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "استغرق تصدير PDF وقتًا طويلًا جدًا وتم إيقافه.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "تعذر على BusyMark تصدير هذا المستند بصيغة PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "جارٍ التصيير…", "visualizationStale": "عرض آخر تصيير صالح", "visualizationShowSource": "إظهار المصدر", @@ -2487,11 +2807,14 @@ "visualizationRenderFailed": "تعذر تصيير هذا التصور.", "visualizationRetry": "إعادة المحاولة", "visualizationSaved": "تم حفظ {fileName}", - "shortcutExportPdfDescription": "تصدير المستند النشط أو وحدة Writerside بصيغة PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "تصدير المستند النشط أو وحدة Writerside بصيغة PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "مُرحَّلة", "gitUnstaged": "غير مُرحَّلة", "gitFetch": "جلب", - "gitStagedFileCount": "{count, plural, =1{ملف مُرحَّل واحد} other{{count} ملفات مُرحَّلة}}", + "gitStagedFileCount": "{count, plural, =1{ملف مُرحَّل واحد} =2{ملفان مرحّلان} few{{count} ملفات مرحّلة} many{{count} ملفات مرحّلة} other{{count} ملفات مرحّلة}}", "gitOutsideWorkspace": "خارج مساحة العمل", "gitFileHistoryRequiresOpenFile": "يتطلب سجل الملف فتح ملف Markdown.", "gitLoadMore": "تحميل المزيد", @@ -2504,8 +2827,8 @@ "gitErrorRestoreStagedFile": "أزل الملف من منطقة التجهيز قبل استعادة إصدار سابق.", "gitCommitActions": "إجراءات الإيداع", "gitResetCurrentBranchToHere": "إعادة تعيين الفرع الحالي إلى هنا…", - "gitResetCurrentBranchTitle": "إعادة تعيين \u2068{branch}\u2069 إلى \u2068{commit}\u2069؟", - "gitResetCurrentBranchMessage": "سينقل هذا الفرع \u2068{branch}\u2069 إلى الإيداع \u2068{commit}\u2069. اختر كيفية تحديث Git للفهرس وشجرة العمل.", + "gitResetCurrentBranchTitle": "إعادة تعيين ⁨{branch}⁩ إلى ⁨{commit}⁩؟", + "gitResetCurrentBranchMessage": "سينقل هذا الفرع ⁨{branch}⁩ إلى الإيداع ⁨{commit}⁩. اختر كيفية تحديث Git للفهرس وشجرة العمل.", "gitReset": "إعادة تعيين", "gitResetModeSoft": "Soft", "gitResetModeSoftDescription": "نقل الفرع فقط. إبقاء الفهرس وشجرة العمل دون تغيير؛ تظل الاختلافات عن الإيداع المحدد مُرحَّلة.", @@ -2604,7 +2927,6 @@ "ai": "الذكاء الاصطناعي", "aiLocalOllama": "Ollama المحلي", "aiDisabled": "معطّل", - "aiLocalOnlyDescription": "لا يبدأ التحرير بالذكاء الاصطناعي إلا بإجراء صريح. لا يرسل BusyMark إلا السياق المعروض إلى المزوّد المحدد، ولا يطبّق أي اقتراح من دون مراجعته.", "aiProvider": "موفّر الذكاء الاصطناعي", "aiDefaultProvider": "موفّر الذكاء الاصطناعي الافتراضي", "aiConfigureProvider": "تهيئة موفّر الذكاء الاصطناعي", @@ -2613,7 +2935,7 @@ "aiOllamaModel": "نموذج Ollama", "aiTestConnection": "اختبار الاتصال", "aiTestingConnection": "جارٍ الاختبار…", - "aiConnectionReady": "تم الاتصال. عُثر على \u2068{count}\u2069 من النماذج المثبّتة.", + "aiConnectionReady": "تم الاتصال. عُثر على ⁨{count}⁩ من النماذج المثبّتة.", "aiNoModels": "لم يتم تحديد نموذج.", "aiConnectionFailed": "تعذّر على BusyMark التحقق من إنشاء النص بالذكاء الاصطناعي.", "aiConfigureFirst": "فعّل مزوّد ذكاء اصطناعي وتحقق من نموذج في الإعدادات ← الذكاء الاصطناعي.", @@ -2639,7 +2961,7 @@ "aiOriginal": "النص الأصلي", "aiSuggested": "النص المقترح", "aiApplyProposal": "تطبيق الاقتراح", - "aiTokenUsage": "\u2068{input}\u2069 رموز إدخال · \u2068{output}\u2069 رموز إخراج", + "aiTokenUsage": "⁨{input}⁩ رموز إدخال · ⁨{output}⁩ رموز إخراج", "aiStaleProposal": "تغيّر المستند أثناء إنشاء هذا الاقتراح. شغّل الإجراء مرة أخرى.", "gitAiStagedChangesChanged": "تغيّرت التغييرات المُرحَّلة أثناء إنشاء رسالة الالتزام هذه. شغّل الإجراء مرة أخرى.", "aiViewContext": "عرض السياق المُرسل", @@ -2718,14 +3040,18 @@ "reloadFromDisk": "إعادة التحميل من القرص", "keepMine": "الاحتفاظ بنسختي", "saveAs": "حفظ باسم", - "unsavedChangesMultipleMessage": "يحتوي {count} من المستندات على تغييرات غير محفوظة. هل تريد حفظها قبل المتابعة؟", + "unsavedChangesMultipleMessage": "{count, plural, =1{يوجد 1 مستند يحتوي على تغييرات غير محفوظة. احفظه قبل المتابعة؟} other{{count} مستندات تحتوي على تغييرات غير محفوظة. احفظها قبل المتابعة؟}}", "workspaceReplaceIssuePartialConflict": "توقف التراجع لأن الملف تغير بالتزامن. قد تبقى بعض الاستبدالات؛ حُفظ المحتوى المُزاح في المسار أدناه.", "workspaceReplaceIssueApplyFailed": "لم تُطبّق أي استبدالات لأن المجموعة التي تمت مراجعتها تعذر حفظها بأمان.", - "workspaceRecoveryRestored": "تمت استعادة {count} من المستندات غير المحفوظة. راجع كل مستند تمت استعادته قبل المتابعة.", - "workspaceRecoveryDamaged": "تعذرت استعادة {count} من سجلات الاستعادة التالفة. تظل المستندات الصالحة التي تمت استعادتها متاحة.", + "workspaceRecoveryRestored": "{count, plural, =1{تم استعادة مستند غير محفوظ واحد. راجعه قبل الحفظ أو تجاهله.} other{تم استعادة {count} مستندات غير محفوظة. راجع كل واحد قبل الحفظ أو تجاهله.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{تعذر استعادة سجل استعادة تالف واحد. تم الاحتفاظ بملف الاسترداد الأصلي للفحص.} other{تعذر استعادة {count} سجلات استرداد تالف. لا تزال سجلات الاسترداد الصالحة متاحة.}}", "recoveredDocumentReview": "تمت استعادة المحتوى غير المحفوظ للملف {fileName}. راجعه، ثم احفظه أو احفظه باسم جديد أو تجاهله.", "commandUnavailableInContext": "هذا الأمر غير متاح في السياق الحالي.", "mathRenderFailed": "تعذر عرض التعبير الرياضي.", "inlineMath": "رياضيات مضمنة", - "displayMath": "رياضيات معروضة" + "displayMath": "رياضيات معروضة", + "aiExplicitEditingDescription": "لا يبدأ التحرير بالذكاء الاصطناعي إلا بإجراء صريح. لا يرسل BusyMark إلا السياق المعروض إلى المزوّد المحدد، ولا يطبّق أي اقتراح من دون مراجعته.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index b1b1e2bc..8a1c498b 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Ausgewähltes Element in „Dateien“ löschen oder ausgewähltes Thema aus dem Inhaltsverzeichnis entfernen", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Allgemein", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Einrückung einfügen", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "An der Cursorposition eine Einrückung einfügen", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Quelltext ausrücken", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Im Quelltextmodus eine Einrückungsebene entfernen", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Suche schließen oder Blockauswahl aufheben", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Datenschutz", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Externe Bilder laden", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Das Laden von Bildern in der Markdown-Vorschau und im Editor über HTTP- und HTTPS-URLs zulassen.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Berechtigungen für externe Bilder löschen", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Arbeitsbereiche vergessen, denen das Laden externer Bilder erlaubt wurde.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Vertrauenswürdige Git-Arbeitsbereiche löschen", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Vor dem Aktivieren von Git-Funktionen für zuvor vertrauenswürdige Arbeitsbereiche nachfragen.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Fenster", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Vorherigen Arbeitsbereich beim Start erneut öffnen", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Arbeitsbereich und Tabs der vorherigen Sitzung beim Start von BusyMark öffnen.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Vor dem Schließen bei ungespeicherten Änderungen bestätigen", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -913,7 +944,9 @@ "description": "Text field label for raw HTML source." }, "htmlContentDefault": "HTML-Inhalt", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "thematicBreak": "Trennlinie", "@thematicBreak": { "description": "Thematic break command label." @@ -1058,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "Text", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "Code", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "Alternativtext", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Bild beschreiben", "@describeTheImage": { "description": "Image alt text hint." @@ -1093,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Externes Bild blockiert", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Festlegen, ob BusyMark externe Bilder laden darf.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Externe Bilder sind blockiert", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Dieses Dokument verweist auf Bilder aus dem Internet. Beim Laden können Netzwerkinformationen an den Bildhost übermittelt werden.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Für diesen Arbeitsbereich laden", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Externe Bilder immer laden", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Seitenbereich ausblenden", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1344,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Vorheriger Treffer", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Nächster Treffer", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Groß-/Kleinschreibung beachten", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Nur ganze Wörter", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Regulärer Ausdruck", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Ungültiger regulärer Ausdruck", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Große Datei: Hervorhebung und Faltung sind pausiert", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Nichts zu lesen", "admonition": "Hinweisblock", "quote": "Zitat", @@ -2243,15 +2307,15 @@ "gitBinaryFile": "Binärdatei. BusyMark zeigt keine Binär-Patches an.", "gitUnsavedChangesBanner": "Ungespeicherte Editoränderungen werden erst nach dem Speichern berücksichtigt.", "gitConfirmDiscardTitle": "Git-Änderungen verwerfen?", - "gitConfirmDiscardTracked": "{count, plural, =1{Die ausgewählte versionierte Datei wird auf den Stand in Git zurückgesetzt.} other{Die ausgewählten versionierten Dateien werden auf den Stand in Git zurückgesetzt.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Alle gestageten und nicht gestageten Änderungen der ausgewählten versionierten Datei werden auf den Stand in Git zurückgesetzt.} other{Alle gestageten und nicht gestageten Änderungen der ausgewählten versionierten Dateien werden auf den Stand in Git zurückgesetzt.}}", "gitConfirmDiscardUntracked": "{count, plural, =1{Die ausgewählte nicht versionierte Datei wird gelöscht.} other{Die ausgewählten nicht versionierten Dateien werden gelöscht.}}", "gitConfirmDiscardMixed": "{count, plural, =1{Die ausgewählte Datei wird abhängig von ihrem Git-Status zurückgesetzt oder gelöscht.} other{Die ausgewählten Dateien werden abhängig von ihrem Git-Status zurückgesetzt oder gelöscht.}}", "gitConfirmSwitchBranchTitle": "Zu {branch} wechseln?", "gitConfirmSwitchBranchMessage": "BusyMark lädt den Arbeitsbereich vom Datenträger neu, nachdem Git den Branch gewechselt hat.", "gitConfirmPushSetUpstreamTitle": "Upstream-Branch festlegen?", "gitConfirmPushSetUpstreamMessage": "Dieser Branch hat keinen Upstream. BusyMark kann {branch} pushen und den Upstream festlegen, wenn genau ein Remote konfiguriert ist.", - "gitProjectHistory": "Projekt", - "gitFileHistory": "Aktuelle Datei", + "gitProjectHistory": "Projektverlauf", + "gitFileHistory": "Dateiverlauf", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Dateiaktionen", "actions": "Aktionen", @@ -2286,73 +2350,138 @@ "gitErrorNetwork": "Git-Netzwerkvorgang fehlgeschlagen.", "gitErrorConflict": "Git hat ungelöste Konflikte gemeldet.", "gitErrorCommandFailed": "Git-Befehl fehlgeschlagen.", - "markdownAndHtml": "Markdown und HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdown-Blöcke", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Blockstrukturen, die in Markdown-Quelltext und Vorschau unterstützt werden.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Inline-Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Formatierung innerhalb von Absätzen, Listeneinträgen und Tabellenzellen.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Roh-HTML-Blöcke", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Sichere HTML-Blocktags, die über BusyMark-Vorschauwidgets gerendert werden.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Roh-HTML-Inline-Tags", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Sichere Inline-HTML-Tags, die ohne sichtbare Tags gerendert werden.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Sicherheitsregeln", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Roh-HTML wird vor der Vorschau geparst und bereinigt.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Überschriften", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Absätze", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Listen", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Container", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Textblöcke", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Abbildungen und Bilder", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Vorformatierter Code", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Aufklappblöcke", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Beschreibungslisten", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Formatierungstags", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Inline-Code-Tags", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Semantische Texttags", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Bereinigte Vorschau", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Erlaubtes HTML wird in BusyMark-Vorschaublöcke umgewandelt, nicht im Browser gerendert.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Quelltext bleibt erhalten", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Unverändertes Roh-HTML wird exakt als Quelltext gespeichert.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown in HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-Zeichen innerhalb von Roh-HTML werden als normaler Text angezeigt.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Blockierte aktive Inhalte", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Skripte, Styles, Frames, Formulare, SVG, MathML, Events und unsichere Attribute werden blockiert.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Nur sichere URLs", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Links erlauben http, https, mailto, tel, relative URLs und Fragmente; unsichere URL-Schemata werden blockiert.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Zu Git hinzufügen", "delete": "Löschen", "newFile": "Neue Datei", @@ -2370,123 +2499,294 @@ "errorFileOperationOutsideRoot": "Der Dateivorgang muss im Arbeitsbereich bleiben.", "errorFileOperationRoot": "Das Stammverzeichnis des Arbeitsbereichs kann nicht über den Dateibaum geändert werden.", "safeDeleteTopicFile": "Themendatei sicher löschen…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Inhaltsverzeichniselement entfernen", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Verwendungen prüfen", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Themendatei löschen", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Entfernen", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "„{topic}“ aus der ausgewählten Instanz entfernen. Die Themendatei bleibt erhalten.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "„{topic}“ löschen und die Verweise darauf im gesamten Writerside-Projekt sicher aktualisieren.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 untergeordnetes Thema wird um eine Ebene nach oben verschoben.} other{{count} untergeordnete Themen werden um eine Ebene nach oben verschoben.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Dieses Thema wird als Startseite einer Instanz verwendet. Prüfen Sie seine Verwendungen und weisen Sie eine andere Startseite zu, bevor Sie fortfahren.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Verwendungen ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Es wurden keine Verweise gefunden, die ungültig würden.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark hat die folgenden Verweise auf dieses Thema gefunden.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Inhaltsverzeichniselemente", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Startseiten", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Themenlinks", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Einbindungen", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{1 Verwendung} other{{count} Verwendungen}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Refactoring-Optionen", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Verwendungen automatisch aktualisieren", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Inhaltsverzeichnisverweise und Einbindungen entfernen und den Linktext beibehalten.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Einige Verwendungen müssen vor diesem Refactoring manuell geändert werden.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Weiterleiten an", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Die alte veröffentlichte Seite nicht weiterleiten.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Umleitungsziel", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Prüfen und aktualisieren Sie die verbleibenden Verwendungen, bevor Sie fortfahren, oder aktivieren Sie automatische Aktualisierungen, wenn diese verfügbar sind.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Verwendungen von {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Keine Verwendungen gefunden.", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "Außerhalb der ausgewählten Instanz", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Refactoring ausführen", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Themendatei wird nicht mehr verwendet", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Themendatei behalten", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "„{topic}“ wird an keiner Stelle dieses Writerside-Projekts mehr verwendet. Löschen Sie die Datei oder behalten Sie sie für die Verwendung in einer anderen Instanz.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Verwenden Sie „Sicher löschen“ für Writerside-Themendateien.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "Die Suche nach Verwendungen des Themas konnte nicht abgeschlossen werden. Es wurden keine Dateien geändert.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Einige Verwendungen des Themas müssen noch bearbeitet werden. Prüfen Sie sie, bevor Sie fortfahren.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Das ausgewählte Weiterleitungsziel ist nicht mehr gültig. Wählen Sie es erneut aus.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Das Entfernen des Themas konnte nicht vollständig rückgängig gemacht werden. Prüfen Sie vor dem Fortfahren diese Pfade: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "exportAsPdf": "Als PDF exportieren", - "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, "pdfExportDescription": "Wählen Sie das Seitenlayout für eine professionelle, eigenständige PDF-Datei.", - "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "Remote Bilder werden beim Export nicht heruntergeladen. Lokale Bilder werden einbezogen, wenn sie verfügbar sind.", - "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "Seitengröße", - "@pdfPageSize": {"description": "PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "US-Letter", - "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "Ausrichtung", - "@pdfOrientation": {"description": "PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "Hochformat", - "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "Querformat", - "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "Ränder", - "@pdfMargins": {"description": "PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "Schmal", - "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "Standard", - "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "Breit", - "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "Seitenzahlen einfügen", - "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "Exportieren", - "@export": {"description": "Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "PDF wird exportiert…", - "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "PDF-Dokument", - "@fileTypePdf": {"description": "File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "{fileName} wurde exportiert.", - "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} wurde exportiert. Nicht einbezogene Bilder: {count}.", - "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} wurde mit {count, plural, =1{1 Warnung} other{{count} Warnungen}} exportiert.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "Die PDF-Exportkomponente fehlt. Installieren Sie BusyMark neu und versuchen Sie es erneut.", - "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "Der PDF-Export dauerte zu lange und wurde beendet.", - "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark konnte dieses Dokument nicht als PDF exportieren.", - "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Wird gerendert…", "visualizationStale": "Letzte gültige Darstellung wird angezeigt", "visualizationShowSource": "Quelltext anzeigen", @@ -2508,7 +2808,9 @@ "visualizationRetry": "Erneut versuchen", "visualizationSaved": "{fileName} gespeichert", "shortcutExportPdfDescription": "Das aktive Dokument oder Writerside-Modul als PDF exportieren.", - "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Vorgemerkt", "gitUnstaged": "Nicht vorgemerkt", "gitFetch": "Abrufen", @@ -2625,7 +2927,6 @@ "ai": "KI", "aiLocalOllama": "Lokales Ollama", "aiDisabled": "Deaktiviert", - "aiLocalOnlyDescription": "KI-Bearbeitung erfolgt nur auf ausdrücklichen Befehl. BusyMark sendet ausschließlich den angezeigten Kontext an den ausgewählten Anbieter und übernimmt keinen Vorschlag ohne Prüfung.", "aiProvider": "KI-Anbieter", "aiDefaultProvider": "Standardanbieter", "aiConfigureProvider": "Anbieter konfigurieren", @@ -2739,14 +3040,18 @@ "reloadFromDisk": "Vom Datenträger neu laden", "keepMine": "Meine Version behalten", "saveAs": "Speichern unter", - "unsavedChangesMultipleMessage": "{count} Dokumente enthalten ungespeicherte Änderungen. Vor dem Fortfahren speichern?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 Dokument hat ungespeicherte Änderungen. Speichern Sie es vor dem Fortfahren.} other{{count} Dokumente haben ungespeicherte Änderungen. Speichern Sie diese vor dem Fortfahren.}}", "workspaceReplaceIssuePartialConflict": "Das Zurücksetzen wurde abgebrochen, da die Datei gleichzeitig geändert wurde. Einige Ersetzungen können bestehen bleiben; verdrängte Inhalte wurden unter dem folgenden Pfad gesichert.", "workspaceReplaceIssueApplyFailed": "Es wurden keine Ersetzungen vorgenommen, da die geprüfte Auswahl nicht sicher gespeichert werden konnte.", - "workspaceRecoveryRestored": "{count} ungespeicherte Dokumente wurden wiederhergestellt. Prüfen Sie jedes wiederhergestellte Dokument, bevor Sie fortfahren.", - "workspaceRecoveryDamaged": "{count} beschädigte Wiederherstellungsdatensätze konnten nicht wiederhergestellt werden. Gültige wiederhergestellte Dokumente bleiben verfügbar.", + "workspaceRecoveryRestored": "{count, plural, =1{1 nicht gespeichertes Dokument wiederhergestellt. Überprüfen Sie es vor dem Speichern oder Verwerfen.} other{{count} nicht gespeicherte Dokumente wiederhergestellt. Überprüfen Sie jedes wiederhergestellte Dokument vor dem Speichern oder Verwerfen.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Ein beschädigter Wiederherstellungsdatensatz konnte nicht wiederhergestellt werden. Die Originaldatei der Wiederherstellung wurde zur Überprüfung aufbewahrt.} other{{count} beschädigte Wiederherstellungsdatensätze konnten nicht wiederhergestellt werden. Die gültigen Wiederherstellungsdatensätze bleiben verfügbar.}}", "recoveredDocumentReview": "Ungespeicherter Inhalt für {fileName} wurde wiederhergestellt. Prüfen Sie ihn und speichern Sie ihn, speichern Sie ihn unter einem neuen Namen oder verwerfen Sie ihn.", "commandUnavailableInContext": "Dieser Befehl ist im aktuellen Kontext nicht verfügbar.", "mathRenderFailed": "Der mathematische Ausdruck konnte nicht dargestellt werden.", "inlineMath": "Mathematik im Text", - "displayMath": "Mathematische Formel als Block" + "displayMath": "Mathematische Formel als Block", + "aiExplicitEditingDescription": "KI-Bearbeitung erfolgt nur auf ausdrücklichen Befehl. BusyMark sendet ausschließlich den angezeigten Kontext an den ausgewählten Anbieter und übernimmt keinen Vorschlag ohne Prüfung.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 0ad39e0e..e1e55cfe 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -36,7 +36,7 @@ "@feedbackSubject": {"description": "Feedback subject field label."}, "feedbackMessage": "Detailed message", "@feedbackMessage": {"description": "Detailed feedback message field label."}, - "feedbackReplyEmail": "Reply email (optional)", + "feedbackReplyEmail": "Email address for replies (optional)", "@feedbackReplyEmail": {"description": "Optional reply email field label."}, "feedbackIncludeTechnicalDetails": "Include technical details", "@feedbackIncludeTechnicalDetails": {"description": "Checkbox label for optional technical details."}, @@ -204,7 +204,7 @@ "@languageTurkish": {"description": "Language selector option for Turkish."}, "languageItalian": "Italiano", "@languageItalian": {"description": "Language selector option for Italian."}, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": {"description": "Language selector option for Norwegian."}, "languageFrench": "Français", "@languageFrench": {"description": "Language selector option for French."}, @@ -909,7 +909,7 @@ "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, "sourceSearchReplacement": "Replace with", "@sourceSearchReplacement": {"description": "Placeholder for the active-document replacement field."}, - "sourceSearchReplaceCurrent": "Replace current", + "sourceSearchReplaceCurrent": "Replace current match", "@sourceSearchReplaceCurrent": {"description": "Tooltip for replacing the current search match."}, "sourceSearchReplaceAndFindNext": "Replace and find next", "@sourceSearchReplaceAndFindNext": {"description": "Tooltip for replacing the current match and moving to the next."}, @@ -927,7 +927,7 @@ "@workspaceReplaceDirtyBuffer": {"description": "Source label for a workspace replacement preview using a dirty document buffer."}, "workspaceReplaceDiskContent": "Saved disk content", "@workspaceReplaceDiskContent": {"description": "Source label for a workspace replacement preview using disk content."}, - "selectFileMatches": "Select all {count} matches", + "selectFileMatches": "{count, plural, =1{Select 1 match} other{Select all {count} matches}}", "@selectFileMatches": { "description": "Checkbox label for selecting every replacement match in a file.", "placeholders": {"count": {"type": "int"}} @@ -1456,7 +1456,7 @@ "description": "Writerside module diagnostic for an unresolved topic anchor.", "placeholders": {"anchor": {"type": "String"}, "targetName": {"type": "String"}} }, - "diagnosticWritersideIncludeMissingFrom": " is missing from.", + "diagnosticWritersideIncludeMissingFrom": " is missing the from attribute.", "@diagnosticWritersideIncludeMissingFrom": {"description": "Writerside module diagnostic for an include without a from attribute."}, "diagnosticWritersideIncludeSourceMissing": "Include source \"{from}\" does not exist.", "@diagnosticWritersideIncludeSourceMissing": { @@ -1877,7 +1877,7 @@ "@fileTypePdf": {"description": "File picker label for PDF documents."}, "pdfExported": "{fileName} was exported.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} was exported with {count} warning(s).", + "pdfExportedWithWarnings": "{fileName} was exported with {count, plural, =1{1 warning} other{{count} warnings}}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some content fell back or was omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, "pdfExportUnavailable": "The PDF export component is missing. Reinstall BusyMark and try again.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, @@ -1987,7 +1987,7 @@ "@markdownImportFiles": {"description": "Group title for files selected for a Writerside Markdown import."}, "selectNone": "Select none", "@selectNone": {"description": "Action that clears all items in a multiple selection."}, - "markdownFilesFound": "{count} Markdown file(s) found", + "markdownFilesFound": "{count, plural, =1{1 Markdown file found} other{{count} Markdown files found}}", "@markdownFilesFound": {"description": "Count of discovered Markdown import files.", "placeholders": {"count": {"type": "int"}}}, "noMarkdownFilesFound": "No Markdown files were found in this directory.", "@noMarkdownFilesFound": {"description": "Empty state for a Writerside Markdown import source."}, @@ -2101,8 +2101,8 @@ "@aiLocalOllama": {"description": "AI provider option for a loopback Ollama service."}, "aiDisabled": "Disabled", "@aiDisabled": {"description": "AI provider option that disables AI features."}, - "aiLocalOnlyDescription": "AI editing is explicit. BusyMark sends only the context shown for the selected provider and never applies a proposal without review.", - "@aiLocalOnlyDescription": {"description": "Privacy description for BusyMark local AI."}, + "aiExplicitEditingDescription": "AI editing is explicit. BusyMark sends only the context shown for the selected provider and never applies a proposal without review.", + "@aiExplicitEditingDescription": {"description": "Privacy disclosure for explicit AI editing with selected-provider context visibility."}, "aiProvider": "AI provider", "@aiProvider": {"description": "Label for an AI provider selection."}, "aiDefaultProvider": "Default provider", @@ -2119,7 +2119,7 @@ "@aiTestConnection": {"description": "Button that verifies generation with the configured AI provider and model."}, "aiTestingConnection": "Testing…", "@aiTestingConnection": {"description": "Status while BusyMark verifies the configured AI provider and model."}, - "aiConnectionReady": "Connected. {count} installed model(s) found.", + "aiConnectionReady": "Connected. {count, plural, =1{1 installed model found} other{{count} installed models found}}.", "@aiConnectionReady": {"description": "Successful Ollama connection status.", "placeholders": {"count": {"type": "int"}}}, "aiNoModels": "No model selected.", "@aiNoModels": {"description": "AI model setting shown before a model has been selected or discovered."}, @@ -2149,7 +2149,7 @@ "@aiProposal": {"description": "Title of the AI proposal review dialog."}, "aiGenerateProposal": "Generate proposal", "@aiGenerateProposal": {"description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, - "aiContextDisclosure": "The selected provider will receive {count} characters from the displayed context.", + "aiContextDisclosure": "The selected provider will receive {count, plural, =1{1 character} other{{count} characters}} from the displayed context.", "@aiContextDisclosure": {"description": "Disclosure of AI context size.", "placeholders": {"count": {"type": "int"}}}, "aiOriginal": "Original", "@aiOriginal": {"description": "Label for original text in an AI proposal review."}, @@ -2207,7 +2207,7 @@ "@aiCloudConsentMessage": {"description": "Cloud AI data-sharing and credential disclosure."}, "aiCloudConsentRequired": "Confirm {provider} data sharing in Settings → AI first.", "@aiCloudConsentRequired": {"description": "AI action error when cloud consent is missing.", "placeholders": {"provider": {"type": "String"}}}, - "aiGenerationVerified": "Generation verified with {model}. {count} compatible model(s) available.", + "aiGenerationVerified": "Generation verified with {model}. {count, plural, =1{1 compatible model available} other{{count} compatible models available}}.", "@aiGenerationVerified": {"description": "Successful AI model generation qualification.", "placeholders": {"model": {"type": "String"}, "count": {"type": "int"}}}, "aiColdStartObserved": "A local model cold start was observed.", "@aiColdStartObserved": {"description": "Additional model qualification status when local generation required a cold start."}, @@ -2225,7 +2225,7 @@ "@generateOrUpdateMarkdownToc": {"description": "Deterministic action that creates or refreshes a Markdown table of contents."}, "markdownTocTitle": "Table of contents", "@markdownTocTitle": {"description": "Heading inserted above a generated Markdown table of contents."}, - "markdownTocUpdated": "Table of contents updated with {count} entries.", + "markdownTocUpdated": "Table of contents updated with {count, plural, =1{1 entry} other{{count} entries}}.", "@markdownTocUpdated": {"description": "Confirmation after generating a Markdown table of contents.", "placeholders": {"count": {"type": "int"}}}, "markdownTocNoHeadings": "Add at least one section heading before generating a table of contents.", "@markdownTocNoHeadings": {"description": "Message when a Markdown document has no section headings for a generated table of contents."}, diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index ec93dabb..a0f1469a 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Eliminar el elemento seleccionado en Archivos o quitar el tema seleccionado del índice", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "General", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Insertar sangría", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Insertar sangría en el cursor", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Reducir sangría del código fuente", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Quitar un nivel de sangría en el modo Código fuente", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Cerrar la búsqueda o quitar la selección de bloques", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Privacidad", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Cargar imágenes remotas", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Permite cargar imágenes desde URL HTTP y HTTPS en la vista previa de Markdown y el editor.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Borrar permisos de imágenes remotas", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Olvida los espacios de trabajo autorizados a cargar imágenes remotas.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Borrar espacios de trabajo de Git de confianza", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Preguntar antes de activar funciones de Git para espacios de trabajo que ya eran de confianza.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Ventana", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Volver a abrir el espacio de trabajo anterior al iniciar", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Abre el espacio de trabajo y las pestañas de la sesión anterior cuando se inicia BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Confirmar antes de cerrar con cambios sin guardar", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -913,7 +944,9 @@ "description": "Text field label for raw HTML source." }, "htmlContentDefault": "Contenido HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "thematicBreak": "Separador temático", "@thematicBreak": { "description": "Thematic break command label." @@ -1058,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "texto", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "código", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "texto alternativo", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Describa la imagen", "@describeTheImage": { "description": "Image alt text hint." @@ -1093,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Imagen remota bloqueada", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Elija si BusyMark puede cargar imágenes remotas.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Las imágenes remotas están bloqueadas", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Este documento hace referencia a imágenes de Internet. Cargarlas puede revelar información de red al servidor que las aloja.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Cargar en este espacio de trabajo", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Cargar siempre las imágenes remotas", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Ocultar panel lateral", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1344,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Coincidencia anterior", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Coincidencia siguiente", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Distinguir mayúsculas y minúsculas", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Palabra completa", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Expresión regular", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Expresión regular no válida", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Archivo grande: el resaltado y el plegado están en pausa", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "No hay contenido para leer", "admonition": "Aviso", "quote": "Cita", @@ -2243,15 +2307,15 @@ "gitBinaryFile": "Archivo binario. BusyMark no muestra parches binarios.", "gitUnsavedChangesBanner": "Los cambios sin guardar del editor no se incluyen hasta que se guarden.", "gitConfirmDiscardTitle": "¿Descartar los cambios de Git?", - "gitConfirmDiscardTracked": "{count, plural, =1{El archivo seleccionado que está bajo seguimiento se restaurará desde Git.} other{Los archivos seleccionados que están bajo seguimiento se restaurarán desde Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Se restaurarán en HEAD todos los cambios staged y no staged del archivo rastreado seleccionado.} other{Se restaurarán en HEAD todos los cambios staged y no staged de los archivos rastreados seleccionados.}}", "gitConfirmDiscardUntracked": "{count, plural, =1{El archivo seleccionado sin seguimiento se eliminará.} other{Los archivos seleccionados sin seguimiento se eliminarán.}}", "gitConfirmDiscardMixed": "{count, plural, =1{El archivo seleccionado se restaurará o eliminará según su estado de Git.} other{Los archivos seleccionados se restaurarán o eliminarán según su estado de Git.}}", "gitConfirmSwitchBranchTitle": "¿Cambiar a {branch}?", "gitConfirmSwitchBranchMessage": "BusyMark volverá a cargar el espacio de trabajo desde el disco después de que Git cambie de rama.", "gitConfirmPushSetUpstreamTitle": "¿Configurar la rama upstream?", "gitConfirmPushSetUpstreamMessage": "Esta rama no tiene upstream. BusyMark puede enviar {branch} y configurar su upstream cuando haya exactamente un remoto configurado.", - "gitProjectHistory": "Proyecto", - "gitFileHistory": "Archivo actual", + "gitProjectHistory": "Historial del proyecto", + "gitFileHistory": "Historial del archivo", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Acciones de archivo", "actions": "Acciones", @@ -2286,73 +2350,138 @@ "gitErrorNetwork": "La operación de red de Git ha fallado.", "gitErrorConflict": "Git ha informado de conflictos sin resolver.", "gitErrorCommandFailed": "El comando de Git ha fallado.", - "markdownAndHtml": "Markdown y HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Bloques Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Estructuras de bloque admitidas en el código Markdown y la vista previa.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown en línea", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Formato dentro de párrafos, elementos de lista y celdas de tabla.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Bloques HTML sin procesar", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Etiquetas HTML de bloque seguras renderizadas con widgets de vista previa de BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Etiquetas HTML sin procesar en línea", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Etiquetas HTML en línea seguras renderizadas sin mostrar las etiquetas literales.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Reglas de seguridad", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "El HTML sin procesar se analiza y sanea antes de la vista previa.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Encabezados", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Párrafos", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Listas", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Contenedores", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Bloques de texto", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Figuras e imágenes", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Código preformateado", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Bloques desplegables", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Listas de descripción", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Etiquetas de formato", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Etiquetas de código en línea", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Etiquetas semánticas de texto", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Vista previa saneada", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "El HTML permitido se convierte en bloques de vista previa de BusyMark, no se renderiza en un navegador.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Se conserva el código fuente", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "El HTML sin procesar no editado se guarda exactamente como texto fuente.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown dentro de HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Los marcadores Markdown dentro de HTML sin procesar se muestran como texto literal.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Contenido activo bloqueado", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Se bloquean scripts, estilos, marcos, formularios, SVG, MathML, eventos y atributos inseguros.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Solo URLs seguras", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Los enlaces permiten http, https, mailto, tel, URLs relativas y fragmentos; los esquemas inseguros se bloquean.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Agregar a Git", "delete": "Eliminar", "newFile": "Nuevo archivo", @@ -2370,123 +2499,294 @@ "errorFileOperationOutsideRoot": "La operación de archivo debe permanecer dentro del espacio de trabajo.", "errorFileOperationRoot": "La raíz del espacio de trabajo no se puede cambiar desde el árbol de archivos.", "safeDeleteTopicFile": "Eliminar el archivo del tema de forma segura…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Quitar elemento del índice", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Revisar usos", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Eliminar archivo del tema", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Quitar", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Quita «{topic}» de la instancia seleccionada. Se conservará el archivo del tema.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Elimina «{topic}» y actualiza de forma segura sus referencias en todo este proyecto de Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 tema hijo subirá un nivel.} other{{count} temas hijos subirán un nivel.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Este tema se usa como página de inicio de una instancia. Revisa sus usos y asigna otra página de inicio antes de continuar.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Usos ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "No se han encontrado referencias que pudieran dejar de funcionar.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark ha encontrado las siguientes referencias a este tema.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Elementos del índice", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Páginas de inicio", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Enlaces a temas", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Inclusiones", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{1 uso} other{{count} usos}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Opciones de refactorización", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Actualizar los usos automáticamente", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Quita las referencias de los índices y las inclusiones, y conserva el texto de los enlaces.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Algunos usos requieren cambios manuales antes de esta refactorización.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Redirigir a", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "No redirigir la página publicada anterior.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Destino de la redirección", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Revisa y actualiza los usos restantes antes de continuar, o activa las actualizaciones automáticas cuando estén disponibles.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Usos de {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "No se han encontrado usos.", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "Fuera de la instancia seleccionada", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Refactorizar", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "El archivo del tema ya no se usa", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Conservar el archivo del tema", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "«{topic}» ya no se usa en ninguna parte de este proyecto de Writerside. Elimina el archivo o consérvalo para usarlo en otra instancia.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Usa la eliminación segura para los archivos de temas de Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "No se pudo completar el análisis de usos del tema. No se modificó ningún archivo.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Algunos usos del tema aún requieren atención. Revísalos antes de continuar.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "El destino de redirección seleccionado ya no es válido. Vuelve a seleccionarlo.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "No se pudo revertir por completo la eliminación del tema. Revisa estas rutas antes de continuar: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "exportAsPdf": "Exportar como PDF", - "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, "pdfExportDescription": "Elige el diseño de página para crear un PDF pulido e independiente.", - "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "Las imágenes remotas no se descargan durante la exportación. Las imágenes locales se incluyen cuando están disponibles.", - "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "Tamaño de página", - "@pdfPageSize": {"description": "PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "Carta", - "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "Orientación", - "@pdfOrientation": {"description": "PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "Vertical", - "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "Horizontal", - "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "Márgenes", - "@pdfMargins": {"description": "PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "Estrechos", - "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "Normales", - "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "Amplios", - "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "Incluir números de página", - "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "Exportar", - "@export": {"description": "Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "Exportando PDF…", - "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "Documento PDF", - "@fileTypePdf": {"description": "File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "Se exportó {fileName}.", - "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "Se exportó {fileName}. Imágenes que no se pudieron incluir: {count}.", - "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} se exportó con {count, plural, =1{1 advertencia} other{{count} advertencias}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "Falta el componente de exportación a PDF. Reinstala BusyMark e inténtalo de nuevo.", - "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "La exportación a PDF tardó demasiado y se detuvo.", - "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark no pudo exportar este documento como PDF.", - "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Renderizando…", "visualizationStale": "Mostrando la última visualización válida", "visualizationShowSource": "Mostrar código fuente", @@ -2508,7 +2808,9 @@ "visualizationRetry": "Reintentar", "visualizationSaved": "Se guardó {fileName}", "shortcutExportPdfDescription": "Exportar el documento activo o el módulo de Writerside como PDF.", - "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Preparados", "gitUnstaged": "Sin preparar", "gitFetch": "Obtener", @@ -2625,7 +2927,6 @@ "ai": "IA", "aiLocalOllama": "Ollama local", "aiDisabled": "Desactivado", - "aiLocalOnlyDescription": "La edición con IA solo se ejecuta de forma explícita. BusyMark envía únicamente el contexto mostrado al proveedor seleccionado y nunca aplica una propuesta sin revisarla.", "aiProvider": "Proveedor de IA", "aiDefaultProvider": "Proveedor predeterminado", "aiConfigureProvider": "Configurar proveedor", @@ -2709,7 +3010,7 @@ "tableAlignmentCenter": "Alineación: Centro", "tableAlignmentRight": "Alineación: Derecha", "sourceSearchReplacement": "Reemplazar por", - "sourceSearchReplaceCurrent": "Reemplazar actual", + "sourceSearchReplaceCurrent": "Reemplazar la coincidencia actual", "sourceSearchReplaceAndFindNext": "Reemplazar y buscar siguiente", "sourceSearchReplaceAll": "Reemplazar todo", "workspaceReplace": "Reemplazar en el espacio de trabajo", @@ -2739,14 +3040,18 @@ "reloadFromDisk": "Recargar desde el disco", "keepMine": "Conservar mi versión", "saveAs": "Guardar como", - "unsavedChangesMultipleMessage": "Hay {count} documentos con cambios sin guardar. ¿Desea guardarlos antes de continuar?", + "unsavedChangesMultipleMessage": "{count, plural, =1{Hay 1 documento con cambios sin guardar. ¿Desea guardarlo antes de continuar?} other{Hay {count} documentos con cambios sin guardar. ¿Desea guardarlos antes de continuar?}}", "workspaceReplaceIssuePartialConflict": "La reversión se detuvo porque el archivo cambió al mismo tiempo. Es posible que queden algunos reemplazos; el contenido desplazado se conservó en la ruta indicada abajo.", "workspaceReplaceIssueApplyFailed": "No se aplicó ningún reemplazo porque el conjunto revisado no pudo guardarse de forma segura.", - "workspaceRecoveryRestored": "Se recuperaron {count} documentos sin guardar. Revise cada documento recuperado antes de continuar.", - "workspaceRecoveryDamaged": "No se pudieron restaurar {count} registros de recuperación dañados. Los documentos recuperados válidos siguen disponibles.", + "workspaceRecoveryRestored": "{count, plural, =1{Se recuperó 1 documento sin guardar. Revísalo antes de guardarlo o descartarlo.} other{Se recuperaron {count} documentos sin guardar. Revise cada uno antes de guardar o descartarlo.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{No se pudo recuperar 1 registro de recuperación dañado. Se conservó el archivo de recuperación original para su revisión.} other{No se pudieron recuperar {count} registros de recuperación dañados. Los registros de recuperación válidos siguen disponibles.}}", "recoveredDocumentReview": "Se recuperó contenido sin guardar de {fileName}. Revíselo y después guárdelo, use Guardar como o descártelo.", "commandUnavailableInContext": "Este comando no está disponible en el contexto actual.", "mathRenderFailed": "No se pudo representar la expresión matemática.", "inlineMath": "Matemáticas en línea", - "displayMath": "Matemáticas en bloque" + "displayMath": "Matemáticas en bloque", + "aiExplicitEditingDescription": "La edición con IA solo se ejecuta de forma explícita. BusyMark envía únicamente el contexto mostrado al proveedor seleccionado y nunca aplica una propuesta sin revisarla.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_et.arb b/lib/l10n/app_et.arb index ce91f347..6ecdf58b 100644 --- a/lib/l10n/app_et.arb +++ b/lib/l10n/app_et.arb @@ -1,108 +1,210 @@ { "@@locale": "et", "reportIssue": "Teata probleemist", - "@reportIssue": {"description": "Menu action and dialog title for reporting an issue."}, + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, "feedbackCategory": "Kategooria", - "@feedbackCategory": {"description": "Feedback category field label."}, + "@feedbackCategory": { + "description": "Feedback category field label." + }, "feedbackChooseCategory": "Vali kategooria", - "@feedbackChooseCategory": {"description": "Placeholder for the feedback category selector."}, + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, "feedbackCategoryProblem": "Probleem või viga", - "@feedbackCategoryProblem": {"description": "Feedback category for a problem or bug."}, + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, "feedbackCategoryFeature": "Funktsioonisoov", - "@feedbackCategoryFeature": {"description": "Feedback category for a feature request."}, + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, "feedbackCategoryPrivacySecurity": "Privaatsus- või turvamure", - "@feedbackCategoryPrivacySecurity": {"description": "Feedback category for a privacy or security concern."}, + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, "feedbackCategoryUsability": "Kasutatavusmure", - "@feedbackCategoryUsability": {"description": "Feedback category for a usability concern."}, + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, "feedbackCategoryOther": "Muu", - "@feedbackCategoryOther": {"description": "Feedback category for other concerns."}, + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, "feedbackSubject": "Teema", - "@feedbackSubject": {"description": "Feedback subject field label."}, + "@feedbackSubject": { + "description": "Feedback subject field label." + }, "feedbackMessage": "Üksikasjalik sõnum", - "@feedbackMessage": {"description": "Detailed feedback message field label."}, + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, "feedbackReplyEmail": "E-posti aadress vastuse saamiseks (valikuline)", - "@feedbackReplyEmail": {"description": "Optional reply email field label."}, + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, "feedbackIncludeTechnicalDetails": "Lisa tehnilised andmed", - "@feedbackIncludeTechnicalDetails": {"description": "Checkbox label for optional technical details."}, + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, "feedbackTechnicalDetailsDisclosure": "Kui see on lubatud, lisatakse ainult Linuxi operatsioonisüsteemi versioon ja BusyMarki rakenduse lokaat. Logisid, faile, kontoandmeid ega muid diagnostikaandmeid ei lisata.", - "@feedbackTechnicalDetailsDisclosure": {"description": "Disclosure explaining exactly which optional technical details are submitted."}, + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, "feedbackSubmit": "Saada", - "@feedbackSubmit": {"description": "Button that submits feedback."}, + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, "feedbackSubmitting": "Saatmine…", - "@feedbackSubmitting": {"description": "Button label while feedback is being submitted."}, + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, "feedbackCategoryRequired": "Vali kategooria.", - "@feedbackCategoryRequired": {"description": "Validation error for a missing feedback category."}, + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, "feedbackSubjectLength": "Teema peab olema 3–120 märki pikk.", - "@feedbackSubjectLength": {"description": "Validation error for feedback subject length."}, + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, "feedbackMessageLength": "Sõnum peab olema 10–5000 märki pikk.", - "@feedbackMessageLength": {"description": "Validation error for feedback message length."}, + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, "feedbackReplyEmailInvalid": "Sisesta kehtiv e-posti aadress või jäta see väli tühjaks.", - "@feedbackReplyEmailInvalid": {"description": "Validation error for an invalid optional reply email."}, + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, "feedbackConnectionFailure": "BusyMark ei saanud ühendust luua. Kontrolli internetiühendust ja proovi uuesti.", - "@feedbackConnectionFailure": {"description": "Feedback submission error for a connection failure."}, + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, "feedbackTimeoutFailure": "Päring aegus. Proovi uuesti.", - "@feedbackTimeoutFailure": {"description": "Feedback submission error for a timeout."}, + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, "feedbackRateLimitedFailure": "Selle ühenduse kaudu saadeti liiga palju teateid. Oota ja proovi uuesti.", - "@feedbackRateLimitedFailure": {"description": "Feedback submission error when the server rate limit is reached."}, + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, "feedbackRejectedFailure": "Server lükkas teate tagasi. Kontrolli vormivälju ja proovi uuesti.", - "@feedbackRejectedFailure": {"description": "Feedback submission error when the server rejects invalid request data."}, + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, "feedbackServerFailure": "Server ei saanud teadet vastu võtta. Proovi hiljem uuesti.", - "@feedbackServerFailure": {"description": "Generic feedback submission server error."}, + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, "feedbackSuccess": "Tagasiside saadetud. Viite ID: {id}", "@feedbackSuccess": { "description": "Success message containing the server reference ID.", - "placeholders": {"id": {"type": "String"}} + "placeholders": { + "id": { + "type": "String" + } + } }, "appTitle": "BusyMark", - "@appTitle": {"description": "Application name."}, + "@appTitle": { + "description": "Application name." + }, "appSubtitle": "Markdowni failide ja Writerside’iga ühilduvate dokumentatsiooniprojektide redaktor.", - "@appSubtitle": {"description": "Short application description."}, + "@appSubtitle": { + "description": "Short application description." + }, "aboutBusyMark": "Teave BusyMarki kohta", - "@aboutBusyMark": {"description": "Menu item and tooltip for the About dialog."}, + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, "aboutTagline": "Markdowni ja Writerside’i redaktor", - "@aboutTagline": {"description": "Short tagline shown under the app name in the About dialog."}, + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, "aboutLicenseLabel": "Litsents", - "@aboutLicenseLabel": {"description": "Label for the license row in the About dialog."}, + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, "aboutLicenseName": "Apache License 2.0", - "@aboutLicenseName": {"description": "Formal license name shown in the About dialog. Keep the legal license name exact."}, + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, "aboutWebsite": "Veebisait", - "@aboutWebsite": {"description": "Label for the website row in the About dialog."}, + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, "aboutSourceCode": "Lähtekood", - "@aboutSourceCode": {"description": "Label for the source-code repository row in the About dialog."}, + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, "advanced": "Täpsemad sätted", - "@advanced": {"description": "Settings section title for advanced actions."}, + "@advanced": { + "description": "Settings section title for advanced actions." + }, "addToGit": "Lisa Giti", - "@addToGit": {"description": "Menu action that stages the selected file or folder in Git."}, + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, "appearance": "Välimus", - "@appearance": {"description": "Settings section title for appearance options."}, + "@appearance": { + "description": "Settings section title for appearance options." + }, "apply": "Rakenda", - "@apply": {"description": "Button label that applies a dialog change."}, + "@apply": { + "description": "Button label that applies a dialog change." + }, "back": "Tagasi", - "@back": {"description": "Tooltip for navigating back."}, + "@back": { + "description": "Tooltip for navigating back." + }, "bottomLeft": "All vasakul", - "@bottomLeft": {"description": "Editing button position option."}, + "@bottomLeft": { + "description": "Editing button position option." + }, "bottomRight": "All paremal", - "@bottomRight": {"description": "Editing button position option."}, + "@bottomRight": { + "description": "Editing button position option." + }, "cancel": "Tühista", - "@cancel": {"description": "Cancel button label."}, + "@cancel": { + "description": "Cancel button label." + }, "choose": "Vali", - "@choose": {"description": "Button label for choosing a file or path."}, + "@choose": { + "description": "Button label for choosing a file or path." + }, "chooseLocation": "Vali asukoht", - "@chooseLocation": {"description": "File picker confirmation label for choosing a directory."}, + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, "copy": "Kopeeri", - "@copy": {"description": "Copy command label."}, + "@copy": { + "description": "Copy command label." + }, "copyName": "Kopeeri nimi", - "@copyName": {"description": "Menu action that copies the selected file, folder, or workspace name."}, + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, "copyFileName": "Kopeeri failinimi", - "@copyFileName": {"description": "Menu action that copies the active document file name."}, + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, "copyPath": "Kopeeri tee", - "@copyPath": {"description": "Menu action that copies the selected file, folder, or workspace path."}, + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, "create": "Loo", - "@create": {"description": "Create action label."}, + "@create": { + "description": "Create action label." + }, "creating": "Loomine…", - "@creating": {"description": "Progress label while a project or topic is being created."}, + "@creating": { + "description": "Progress label while a project or topic is being created." + }, "cut": "Lõika", - "@cut": {"description": "Cut command label."}, + "@cut": { + "description": "Cut command label." + }, "promoteSection": "Tõsta jaotise taset", "demoteSection": "Langeta jaotise taset", "moveSectionUp": "Liiguta jaotis üles", @@ -110,259 +212,506 @@ "confirmDeleteSectionTitle": "Kas kustutada jaotis?", "confirmDeleteSectionMessage": "Kas kustutada „{name}” ja kogu selle jaotise sisu? Seda toimingut ei saa tagasi võtta.", "darkTheme": "Tume", - "@darkTheme": {"description": "Dark theme option."}, + "@darkTheme": { + "description": "Dark theme option." + }, "delete": "Kustuta", - "@delete": {"description": "Delete command label."}, + "@delete": { + "description": "Delete command label." + }, "discard": "Hülga", - "@discard": {"description": "Discard unsaved changes button label."}, + "@discard": { + "description": "Discard unsaved changes button label." + }, "editor": "Redaktor", - "@editor": {"description": "Editor view label."}, + "@editor": { + "description": "Editor view label." + }, "file": "Fail", - "@file": {"description": "Generic file kind label."}, + "@file": { + "description": "Generic file kind label." + }, "fileHistory": "Faili ajalugu", - "@fileHistory": {"description": "Menu action and sidebar title for showing Git history for a single file."}, + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, "folder": "Kaust", - "@folder": {"description": "Folder kind label."}, + "@folder": { + "description": "Folder kind label." + }, "insert": "Lisa", - "@insert": {"description": "Insert button label."}, + "@insert": { + "description": "Insert button label." + }, "keyboardShortcuts": "Kiirklahvid", - "@keyboardShortcuts": {"description": "Keyboard shortcuts dialog title and menu item."}, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, "lightTheme": "Hele", - "@lightTheme": {"description": "Light theme option."}, + "@lightTheme": { + "description": "Light theme option." + }, "mainMenu": "Peamenüü", - "@mainMenu": {"description": "Native header bar main menu tooltip."}, + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, "fullScreen": "Täisekraan", - "@fullScreen": {"description": "Command that toggles full-screen window mode."}, + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, "markdown": "Markdown", - "@markdown": {"description": "Markdown format label."}, + "@markdown": { + "description": "Markdown format label." + }, "open": "Ava", - "@open": {"description": "Open action label."}, + "@open": { + "description": "Open action label." + }, "openInFiles": "Ava failihalduris", - "@openInFiles": {"description": "Menu action that opens the selected file or folder location in the system file manager."}, + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, "pathActions": "Failitee toimingud", - "@pathActions": {"description": "Tooltip for the workspace path action menu button."}, + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, "outline": "Liigendus", - "@outline": {"description": "Outline sidebar tab label."}, + "@outline": { + "description": "Outline sidebar tab label." + }, "overwrite": "Kirjuta üle", - "@overwrite": {"description": "Button label for overwriting a changed file."}, + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, "paste": "Aseta", - "@paste": {"description": "Paste command label."}, + "@paste": { + "description": "Paste command label." + }, "pasteWithoutFormatting": "Aseta vorminduseta", - "@pasteWithoutFormatting": {"description": "Plain text paste command label."}, + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, "reading": "Lugemisvaade", - "@reading": {"description": "Reading view label."}, + "@reading": { + "description": "Reading view label." + }, "removeFromRecent": "Eemalda hiljutiste seast", "recent": "Hiljutised", - "@recent": {"description": "Recent workspaces section title."}, + "@recent": { + "description": "Recent workspaces section title." + }, "redo": "Tee uuesti", - "@redo": {"description": "Redo command label."}, + "@redo": { + "description": "Redo command label." + }, "save": "Salvesta", - "@save": {"description": "Save action label."}, + "@save": { + "description": "Save action label." + }, "search": "Otsi", - "@search": {"description": "Search action label and field hint."}, + "@search": { + "description": "Search action label and field hint." + }, "selectAll": "Vali kõik", - "@selectAll": {"description": "Select all command label."}, + "@selectAll": { + "description": "Select all command label." + }, "settings": "Sätted", - "@settings": {"description": "Settings action label."}, + "@settings": { + "description": "Settings action label." + }, "source": "Lähtekood", - "@source": {"description": "Source view label."}, + "@source": { + "description": "Source view label." + }, "split": "Kõrvuti", - "@split": {"description": "Split view label."}, + "@split": { + "description": "Split view label." + }, "systemTheme": "Süsteem", - "@systemTheme": {"description": "System theme option."}, + "@systemTheme": { + "description": "System theme option." + }, "theme": "Kujundus", - "@theme": {"description": "Theme setting label."}, + "@theme": { + "description": "Theme setting label." + }, "appLanguage": "Keel", - "@appLanguage": {"description": "Application language setting label."}, + "@appLanguage": { + "description": "Application language setting label." + }, "systemLanguage": "Süsteemi keel", - "@systemLanguage": {"description": "Language selector option that follows the operating system locale."}, + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, "languageEnglish": "English", - "@languageEnglish": {"description": "Language selector option for English."}, + "@languageEnglish": { + "description": "Language selector option for English." + }, "languageGerman": "Deutsch", - "@languageGerman": {"description": "Language selector option for German."}, + "@languageGerman": { + "description": "Language selector option for German." + }, "languageDutch": "Nederlands", - "@languageDutch": {"description": "Language selector option for Dutch."}, + "@languageDutch": { + "description": "Language selector option for Dutch." + }, "languageTurkish": "Türkçe", - "@languageTurkish": {"description": "Language selector option for Turkish."}, + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", - "@languageItalian": {"description": "Language selector option for Italian."}, - "languageNorwegian": "Norsk", - "@languageNorwegian": {"description": "Language selector option for Norwegian."}, + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk bokmål", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, "languageFrench": "Français", - "@languageFrench": {"description": "Language selector option for French."}, + "@languageFrench": { + "description": "Language selector option for French." + }, "languageRussian": "Русский", - "@languageRussian": {"description": "Language selector option for Russian."}, + "@languageRussian": { + "description": "Language selector option for Russian." + }, "languageUkrainian": "Українська", - "@languageUkrainian": {"description": "Language selector option for Ukrainian."}, + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, "languagePolish": "Polski", - "@languagePolish": {"description": "Language selector option for Polish."}, + "@languagePolish": { + "description": "Language selector option for Polish." + }, "languageSpanish": "Español", - "@languageSpanish": {"description": "Language selector option for Spanish."}, + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, "languagePortuguese": "Português", - "@languagePortuguese": {"description": "Language selector option for Portuguese."}, + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, "languageArabic": "العربية", - "@languageArabic": {"description": "Language selector option for Arabic."}, + "@languageArabic": { + "description": "Language selector option for Arabic." + }, "languagePersian": "فارسی", - "@languagePersian": {"description": "Language selector option for Persian."}, + "@languagePersian": { + "description": "Language selector option for Persian." + }, "languageHindi": "हिन्दी", - "@languageHindi": {"description": "Language selector option for Hindi."}, + "@languageHindi": { + "description": "Language selector option for Hindi." + }, "languageIndonesian": "Bahasa Indonesia", - "@languageIndonesian": {"description": "Language selector option for Indonesian."}, + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", - "@languageEstonian": {"description": "Language selector option for Estonian."}, + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, "languageVietnamese": "Tiếng Việt", - "@languageVietnamese": {"description": "Language selector option for Vietnamese."}, + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", - "@languageSimplifiedChinese": {"description": "Language selector option for Simplified Chinese."}, + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Külgpaneel", - "@toggleSidebar": {"description": "Keyboard shortcuts label for the sidebar panel toggle."}, + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, "topLeft": "Ülal vasakul", - "@topLeft": {"description": "Editing button position option."}, + "@topLeft": { + "description": "Editing button position option." + }, "topRight": "Ülal paremal", - "@topRight": {"description": "Editing button position option."}, + "@topRight": { + "description": "Editing button position option." + }, "undo": "Võta tagasi", - "@undo": {"description": "Undo command label."}, + "@undo": { + "description": "Undo command label." + }, "validate": "Valideeri", - "@validate": {"description": "Validate action label."}, + "@validate": { + "description": "Validate action label." + }, "validation": "Valideerimine", - "@validation": {"description": "Settings section title for validation options."}, + "@validation": { + "description": "Settings section title for validation options." + }, "viewMode": "Vaaterežiim", - "@viewMode": {"description": "Native header bar view mode control label."}, + "@viewMode": { + "description": "Native header bar view mode control label." + }, "welcome": "Tere tulemast", - "@welcome": {"description": "Welcome screen label and tooltip."}, + "@welcome": { + "description": "Welcome screen label and tooltip." + }, "writerside": "Writerside", - "@writerside": {"description": "Writerside workspace kind label."}, + "@writerside": { + "description": "Writerside workspace kind label." + }, "xml": "XML", - "@xml": {"description": "XML format label."}, - + "@xml": { + "description": "XML format label." + }, "fileTypeMarkdown": "Markdown", - "@fileTypeMarkdown": {"description": "Native file picker type label for Markdown files."}, + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, "fileTypeImages": "Pildid", - "@fileTypeImages": {"description": "Native file picker type label for images."}, + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, "openMarkdownFile": "Ava Markdowni fail", - "@openMarkdownFile": {"description": "Action label for opening a Markdown file."}, + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, "markdownFileExtensions": ".md või .markdown", - "@markdownFileExtensions": {"description": "Subtitle describing supported Markdown file extensions."}, + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, "openFolderOrWritersideProject": "Ava kaust või Writerside’i projekt", - "@openFolderOrWritersideProject": {"description": "Action label for opening a folder or Writerside project."}, + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, "markdownFolderOrWritersideProject": "Markdowni kaust või Writerside’iga ühilduv projekt", - "@markdownFolderOrWritersideProject": {"description": "Subtitle describing supported folder workspace types."}, + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, "noOpenFile": "Ühtegi faili pole avatud", - "@noOpenFile": {"description": "Header title when a folder or Writerside workspace has no open editor tab."}, - + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, "shortcutDeleteTreeItemDescription": "Kustuta failivaates valitud üksus või eemalda valitud teema sisukorrast", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Üldine", - "@shortcutGroupGeneral": {"description": "Keyboard shortcut group for general application commands."}, + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, "shortcutNewDocument": "Loo", - "@shortcutNewDocument": {"description": "Keyboard shortcut label for creating a document."}, + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for creating a document." + }, "shortcutNewDocumentDescription": "Loo Markdowni fail või Writerside’i projekt", - "@shortcutNewDocumentDescription": {"description": "Keyboard shortcut description for creating a document."}, + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating a document." + }, "shortcutOpenDescription": "Ava Markdowni fail, kaust või Writerside’i projekt", - "@shortcutOpenDescription": {"description": "Keyboard shortcut description for opening content."}, + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, "shortcutSaveDescription": "Salvesta praegune dokument", - "@shortcutSaveDescription": {"description": "Keyboard shortcut description for saving content."}, + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, "shortcutSearchDescription": "Otsi praegusest tööruumist", - "@shortcutSearchDescription": {"description": "Keyboard shortcut description for search."}, + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, "shortcutKeyboardShortcutsDescription": "Kuva kiirklahvide loend", - "@shortcutKeyboardShortcutsDescription": {"description": "Keyboard shortcut description for opening shortcuts."}, + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, "shortcutMarkdownAndHtmlDescription": "Ava Markdowni ja HTML-i teatmik", - "@shortcutMarkdownAndHtmlDescription": {"description": "Keyboard shortcut description for opening the Markdown and HTML reference."}, + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, "shortcutSettingsDescription": "Ava BusyMarki sätted", - "@shortcutSettingsDescription": {"description": "Keyboard shortcut description for opening settings."}, + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, "shortcutNextTab": "Järgmine vahekaart", - "@shortcutNextTab": {"description": "Keyboard shortcut label for moving to the next tab."}, + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, "shortcutNextTabDescription": "Liigu järgmisele avatud vahekaardile", - "@shortcutNextTabDescription": {"description": "Keyboard shortcut description for moving to the next tab."}, + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, "shortcutPreviousTab": "Eelmine vahekaart", - "@shortcutPreviousTab": {"description": "Keyboard shortcut label for moving to the previous tab."}, + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, "shortcutPreviousTabDescription": "Liigu eelmisele avatud vahekaardile", - "@shortcutPreviousTabDescription": {"description": "Keyboard shortcut description for moving to the previous tab."}, + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, "shortcutCloseTab": "Sulge vahekaart", - "@shortcutCloseTab": {"description": "Keyboard shortcut label for closing the active tab."}, + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, "shortcutCloseTabDescription": "Sulge aktiivne vahekaart", - "@shortcutCloseTabDescription": {"description": "Keyboard shortcut description for closing the active tab."}, + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, "shortcutCloseAllTabs": "Sulge kõik vahekaardid", - "@shortcutCloseAllTabs": {"description": "Keyboard shortcut label for closing all tabs."}, + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, "shortcutCloseAllTabsDescription": "Sulge kõik avatud vahekaardid", - "@shortcutCloseAllTabsDescription": {"description": "Keyboard shortcut description for closing all tabs."}, + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, "shortcutGroupTextEditing": "Teksti redigeerimine", - "@shortcutGroupTextEditing": {"description": "Keyboard shortcut group for text editing commands."}, + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, "shortcutSelectAllDescription": "Vali lähtekoodirežiimis kogu tekst; redaktorirežiimis vajuta kaks korda, et valida kõik plokid", - "@shortcutSelectAllDescription": {"description": "Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, "shortcutCutDescription": "Lõika valitud tekst", - "@shortcutCutDescription": {"description": "Keyboard shortcut description for cut."}, + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, "shortcutCopyDescription": "Kopeeri valitud tekst", - "@shortcutCopyDescription": {"description": "Keyboard shortcut description for copy."}, + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, "shortcutPasteDescription": "Aseta lõikelaualt", - "@shortcutPasteDescription": {"description": "Keyboard shortcut description for paste."}, + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, "shortcutPastePlainTextDescription": "Aseta lõikelaua tekst vorminduseta", - "@shortcutPastePlainTextDescription": {"description": "Keyboard shortcut description for plain text paste."}, + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, "shortcutUndoDescription": "Võta viimane muudatus tagasi", - "@shortcutUndoDescription": {"description": "Keyboard shortcut description for undo."}, + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, "shortcutRedoDescription": "Taasta viimati tagasivõetud muudatus", - "@shortcutRedoDescription": {"description": "Keyboard shortcut description for redo."}, + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, "shortcutInsertIndentation": "Sisesta taane", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Sisesta kursori asukohta taane", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Vähenda lähtekoodi taanet", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Eemalda lähtekoodirežiimis üks taandetase", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Sulge otsing või tühista plokkide valik", - "@shortcutEscape": {"description": "Keyboard shortcut label for closing search or clearing a block selection."}, + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, "shortcutEscapeDescription": "Sulge tööruumi otsing või tühista plokkide valik redaktorirežiimis", - "@shortcutEscapeDescription": {"description": "Keyboard shortcut description for closing search or clearing a block selection."}, + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, "shortcutGroupFormatting": "Vormindamine", - "@shortcutGroupFormatting": {"description": "Keyboard shortcut group for inline formatting."}, + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, "shortcutBoldDescription": "Lülita valitud tekstil paks kiri sisse või välja", - "@shortcutBoldDescription": {"description": "Keyboard shortcut description for bold."}, + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, "shortcutItalicDescription": "Lülita valitud teksti kursiivvormindus sisse või välja", - "@shortcutItalicDescription": {"description": "Keyboard shortcut description for italic."}, + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, "shortcutUnderlineDescription": "Lülita valitud teksti allajoonimine sisse või välja", - "@shortcutUnderlineDescription": {"description": "Keyboard shortcut description for underline."}, + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, "shortcutLinkDescription": "Lisa või muuda linki", - "@shortcutLinkDescription": {"description": "Keyboard shortcut description for link insertion."}, + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, "shortcutInlineCodeDescription": "Lülita valitud teksti reasisene koodivormindus sisse või välja", - "@shortcutInlineCodeDescription": {"description": "Keyboard shortcut description for inline code."}, + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, "shortcutStrikethroughDescription": "Lülita valitud teksti läbikriipsutus sisse või välja", - "@shortcutStrikethroughDescription": {"description": "Keyboard shortcut description for strikethrough."}, + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, "shortcutGroupBlocks": "Plokid", - "@shortcutGroupBlocks": {"description": "Keyboard shortcut group for block styles."}, + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, "shortcutParagraphDescription": "Muuda praegune plokk lõiguks", - "@shortcutParagraphDescription": {"description": "Keyboard shortcut description for paragraph style."}, + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, "shortcutHeading1Description": "Muuda praegune plokk 1. taseme pealkirjaks", - "@shortcutHeading1Description": {"description": "Keyboard shortcut description for heading 1."}, + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, "shortcutHeading2Description": "Muuda praegune plokk 2. taseme pealkirjaks", - "@shortcutHeading2Description": {"description": "Keyboard shortcut description for heading 2."}, + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, "shortcutHeading3Description": "Muuda praegune plokk 3. taseme pealkirjaks", - "@shortcutHeading3Description": {"description": "Keyboard shortcut description for heading 3."}, + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, "shortcutHeading4Description": "Muuda praegune plokk 4. taseme pealkirjaks", - "@shortcutHeading4Description": {"description": "Keyboard shortcut description for heading 4."}, + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, "shortcutHeading5Description": "Muuda praegune plokk 5. taseme pealkirjaks", - "@shortcutHeading5Description": {"description": "Keyboard shortcut description for heading 5."}, + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, "shortcutHeading6Description": "Muuda praegune plokk 6. taseme pealkirjaks", - "@shortcutHeading6Description": {"description": "Keyboard shortcut description for heading 6."}, + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, "shortcutGroupLists": "Loendid", - "@shortcutGroupLists": {"description": "Keyboard shortcut group for list commands."}, + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, "numberedList": "Nummerdatud loend", - "@numberedList": {"description": "Keyboard shortcut label for numbered list formatting."}, + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, "shortcutNumberedListDescription": "Lülita nummerdatud loendi vormindus sisse või välja", - "@shortcutNumberedListDescription": {"description": "Keyboard shortcut description for numbered list."}, + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, "bulletedList": "Täpploend", - "@bulletedList": {"description": "Keyboard shortcut label for bulleted list formatting."}, + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, "shortcutBulletedListDescription": "Lülita täpploendi vormindus sisse või välja", - "@shortcutBulletedListDescription": {"description": "Keyboard shortcut description for bulleted list."}, + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, "checklist": "Kontrollnimekiri", - "@checklist": {"description": "Keyboard shortcut label for checklist formatting."}, + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, "shortcutChecklistDescription": "Lülita kontrollnimekirja vormindus sisse või välja", - "@shortcutChecklistDescription": {"description": "Keyboard shortcut description for checklist."}, - + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, "shortcutGroupSidebar": "Külgpaneel", "@shortcutGroupSidebar": { "description": "Keyboard shortcut group for sidebar view switching." @@ -372,142 +721,275 @@ "description": "Tooltip for the sidebar view selector button." }, "createMarkdownFile": "Loo Markdowni fail", - "@createMarkdownFile": {"description": "Welcome screen action for creating a Markdown file."}, + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, "createMarkdownFileDescription": "Alusta salvestamata kohalikku Markdowni dokumenti", - "@createMarkdownFileDescription": {"description": "Welcome screen subtitle for creating a Markdown file."}, + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, "createWritersideProject": "Loo Writerside’i projekt", - "@createWritersideProject": {"description": "Welcome screen action for creating a Writerside project."}, + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, "createWritersideProjectDescription": "Alusta kohalikku Writerside’iga ühilduvat projekti", - "@createWritersideProjectDescription": {"description": "Welcome screen subtitle for creating a Writerside project."}, + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, "defaultProjectName": "Dokumentatsioon", - "@defaultProjectName": {"description": "Default project name shown in the create project dialog."}, + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, "defaultInstanceName": "Kasutusjuhend", - "@defaultInstanceName": {"description": "Default Writerside instance name shown in the create project dialog."}, + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, "defaultStartTopicTitle": "Alustamine", - "@defaultStartTopicTitle": {"description": "Default start topic title shown in the create project dialog."}, + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, "projectName": "Projekti nimi", - "@projectName": {"description": "Create project dialog field label."}, + "@projectName": { + "description": "Create project dialog field label." + }, "directoryName": "Kataloogi nimi", - "@directoryName": {"description": "Create project dialog field label."}, + "@directoryName": { + "description": "Create project dialog field label." + }, "instanceName": "Eksemplari nimi", - "@instanceName": {"description": "Create project dialog field label."}, + "@instanceName": { + "description": "Create project dialog field label." + }, "instanceId": "Eksemplari ID", - "@instanceId": {"description": "Create project dialog field label."}, + "@instanceId": { + "description": "Create project dialog field label." + }, "startTopicTitle": "Avalehteema pealkiri", - "@startTopicTitle": {"description": "Create project dialog field label."}, + "@startTopicTitle": { + "description": "Create project dialog field label." + }, "location": "Asukoht", - "@location": {"description": "Create dialog location section label."}, + "@location": { + "description": "Create dialog location section label." + }, "projectNameRequired": "Projekti nimi on nõutav.", - "@projectNameRequired": {"description": "Validation message for missing project name."}, + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, "directoryNameRequired": "Kataloogi nimi on nõutav.", - "@directoryNameRequired": {"description": "Validation message for missing directory name."}, + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, "useSingleSafeDirectoryName": "Kasuta üht ohutut katalooginime.", - "@useSingleSafeDirectoryName": {"description": "Validation message for unsafe directory names."}, + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, "useLowercaseIdentifier": "Kasuta väiketähtedest, numbritest, allkriipsudest või sidekriipsudest koosnevat identifikaatorit.", - "@useLowercaseIdentifier": {"description": "Validation message for invalid Writerside instance IDs."}, + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, "startTopicTitleRequired": "Avalehteema pealkiri on nõutav.", - "@startTopicTitleRequired": {"description": "Validation message for missing start topic title."}, + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, "createWritersideProjectFailed": "Writerside’i projekti loomine nurjus.", - "@createWritersideProjectFailed": {"description": "Fallback error shown when Writerside project creation fails."}, - + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, "settingsTitle": "BusyMarki sätted", - "@settingsTitle": {"description": "Settings screen title."}, + "@settingsTitle": { + "description": "Settings screen title." + }, "autoSave": "Automaatne salvestamine", - "@autoSave": {"description": "Editor setting label for saving files automatically."}, + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, "autoSaveDescription": "Salvesta failimuudatused pärast lühikest tegevusetust automaatselt.", - "@autoSaveDescription": {"description": "Editor setting description for saving files automatically."}, + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, "wordWrap": "Reamurdmine", - "@wordWrap": {"description": "Word wrap setting label."}, + "@wordWrap": { + "description": "Word wrap setting label." + }, "editorFontSize": "Redaktori fondi suurus", - "@editorFontSize": {"description": "Editor font size setting label."}, + "@editorFontSize": { + "description": "Editor font size setting label." + }, "validateOnEdit": "Valideeri muutmisel", - "@validateOnEdit": {"description": "Validation setting label."}, + "@validateOnEdit": { + "description": "Validation setting label." + }, "clearRecentWorkspaces": "Tühjenda hiljutiste tööruumide loend", - "@clearRecentWorkspaces": {"description": "Settings action label for clearing recent workspaces."}, + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, "editingButtonsPosition": "Redigeerimisnuppude asukoht", - "@editingButtonsPosition": {"description": "Settings label for WYSIWYG editing button position."}, + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, "editingButtonsPositionDescription": "Vali, kus kuvatakse hõljuvad WYSIWYG-redigeerimisnupud.", - "@editingButtonsPositionDescription": {"description": "Description for WYSIWYG editing button position setting."}, + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, "editingButtonsDirection": "Redigeerimisnuppude paigutussuund", - "@editingButtonsDirection": {"description": "Settings label for WYSIWYG editing button direction."}, + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, "editingButtonsDirectionDescription": "Vali, kas hõljuvad WYSIWYG-redigeerimisnupud paigutatakse horisontaalselt või vertikaalselt.", - "@editingButtonsDirectionDescription": {"description": "Description for WYSIWYG editing button direction setting."}, + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, "horizontal": "Horisontaalne", - "@horizontal": {"description": "Editing button direction option."}, + "@horizontal": { + "description": "Editing button direction option." + }, "vertical": "Vertikaalne", - "@vertical": {"description": "Editing button direction option."}, - + "@vertical": { + "description": "Editing button direction option." + }, "privacy": "Privaatsus", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Laadi välispildid", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Luba Markdowni eelvaatel ja redaktoril laadida pilte HTTP- ja HTTPS-aadressidelt.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Eemalda välispiltide laadimise load", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Unusta tööruumid, millel oli lubatud välispilte laadida.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Tühjenda usaldatud Giti tööruumide loend", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Küsi varem usaldatud tööruumides Giti funktsioonide lubamisel uuesti kinnitust.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Aken", - "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, "settingsReopenWorkspaceOnStartupTitle": "Eelmise tööruumi taasavamine käivitamisel", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Ava BusyMarki käivitamisel eelmise seansi tööruum ja vahekaardid.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Küsi salvestamata muudatuste korral enne sulgemist kinnitust", - "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, "settingsConfirmCloseWithUnsavedChangesDescription": "Küsi enne BusyMarki sulgemist kinnitust, kui dokumentides on salvestamata muudatusi.", - "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, "closeUnsavedChangesTitle": "Salvestamata muudatused", - "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, "closeUnsavedChangesSingleMessage": "Selles dokumendis on salvestamata muudatusi. Kas salvestada muudatused enne BusyMarki sulgemist?", - "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Kas salvestada muudatused enne BusyMarki sulgemist?} one{Ühes dokumendis on salvestamata muudatusi. Kas salvestada muudatused enne BusyMarki sulgemist?} other{{count} dokumendis on salvestamata muudatusi. Kas salvestada muudatused enne BusyMarki sulgemist?}}", - "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "closeUnsavedChangesCancel": "Tühista", - "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, "closeUnsavedChangesDiscard": "Hülga", - "@closeUnsavedChangesDiscard": {"description":"Discard button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesDiscard": { + "description": "Discard button label in the window close unsaved-changes dialog." + }, "closeUnsavedChangesSave": "Salvesta", - "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, "currentFile": "praegune fail", - "@currentFile": {"description": "Fallback file name in unsaved changes dialog."}, + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, "unsavedChanges": "Salvestamata muudatused", - "@unsavedChanges": {"description": "Unsaved changes dialog title."}, + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, "unsavedChangesMessage": "Failis {fileName} on salvestamata muudatusi. Kas salvestada need enne jätkamist?", "@unsavedChangesMessage": { "description": "Unsaved changes confirmation message.", - "placeholders": {"fileName": {"type": "String"}} + "placeholders": { + "fileName": { + "type": "String" + } + } }, "fileChangedOnDisk": "Faili on kettal muudetud", - "@fileChangedOnDisk": {"description": "File changed confirmation dialog title."}, + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, "fileChangedOnDiskMessage": "Seda faili on pärast avamist kettal muudetud. Kas kirjutada see üle?", - "@fileChangedOnDiskMessage": {"description": "File changed confirmation dialog message."}, + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, "untitledMarkdownFileName": "Nimetu.md", - "@untitledMarkdownFileName": {"description": "Display name for a new unsaved Markdown document."}, - + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, "unorderedList": "Järjestamata loend", - "@unorderedList": {"description": "WYSIWYG toolbar tooltip for unordered list."}, + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, "orderedList": "Järjestatud loend", - "@orderedList": {"description": "WYSIWYG toolbar tooltip for ordered list."}, + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, "taskList": "Ülesandeloend", - "@taskList": {"description": "WYSIWYG toolbar tooltip for task list."}, + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, "toggleTaskChecked": "Märgi ülesanne tehtuks või tegemata", - "@toggleTaskChecked": {"description": "WYSIWYG toolbar tooltip for toggling task state."}, + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, "indentListItem": "Suurenda loendiüksuse taanet", - "@indentListItem": {"description": "WYSIWYG toolbar tooltip for indenting a list item."}, + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, "outdentListItem": "Vähenda loendiüksuse taanet", - "@outdentListItem": {"description": "WYSIWYG toolbar tooltip for outdenting a list item."}, + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, "blockquote": "Plokktsitaat", - "@blockquote": {"description": "Blockquote command label."}, + "@blockquote": { + "description": "Blockquote command label." + }, "codeBlock": "Koodiplokk", - "@codeBlock": {"description": "Code block command or preview label."}, + "@codeBlock": { + "description": "Code block command or preview label." + }, "codeBlockLanguage": "Koodiploki keel", - "@codeBlockLanguage": {"description": "Dialog title and toolbar tooltip for code block language."}, + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, "image": "Pilt", "video": "Video", "openVideo": "Esita videot", @@ -518,1047 +1000,1992 @@ "diagnosticWritersideVideoUnsupportedSource": "Toetamata videoallikas: {source}", "diagnosticWritersideVideoMissingFile": "Videofaili pole olemas: {source}", "diagnosticWritersideVideoMissingPreview": "Video eelvaatepilti pole olemas: {preview}", - "@image": {"description": "Image command and document kind label."}, + "@image": { + "description": "Image command and document kind label." + }, "inlineImage": "Reasisene pilt", - "@inlineImage": {"description": "Inline image command label."}, + "@inlineImage": { + "description": "Inline image command label." + }, "table": "Tabel", - "@table": {"description": "Table command label."}, + "@table": { + "description": "Table command label." + }, "htmlBlock": "HTML-plokk", - "@htmlBlock": {"description": "HTML block command label."}, + "@htmlBlock": { + "description": "HTML block command label." + }, "htmlContentDefault": "HTML-sisu", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "Lisa või muuda HTML-plokki", - "@shortcutHtmlBlockDescription": {"description": "Keyboard shortcut description for inserting or editing an HTML block."}, + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, "renderedHtml": "Kuvatud HTML", - "@renderedHtml": {"description": "Badge label for HTML rendered in the WYSIWYG editor."}, + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, "editHtml": "Muuda HTML-i", - "@editHtml": {"description": "Dialog title and tooltip for editing raw HTML source."}, + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, "htmlSource": "HTML-lähtekood", - "@htmlSource": {"description": "Text field label for raw HTML source."}, + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, "thematicBreak": "Eraldusjoon", - "@thematicBreak": {"description": "Thematic break command label."}, + "@thematicBreak": { + "description": "Thematic break command label." + }, "bold": "Paks kiri", - "@bold": {"description": "Bold command label."}, + "@bold": { + "description": "Bold command label." + }, "italic": "Kursiiv", - "@italic": {"description": "Italic command label."}, + "@italic": { + "description": "Italic command label." + }, "underline": "Allajoonimine", - "@underline": {"description": "Underline command label."}, + "@underline": { + "description": "Underline command label." + }, "strikethrough": "Läbikriipsutus", - "@strikethrough": {"description": "Strikethrough command label."}, + "@strikethrough": { + "description": "Strikethrough command label." + }, "inlineCode": "Reasisene kood", - "@inlineCode": {"description": "Inline code command label."}, + "@inlineCode": { + "description": "Inline code command label." + }, "link": "Link", - "@link": {"description": "Link command and preview label."}, + "@link": { + "description": "Link command and preview label." + }, "hardLineBreak": "Sundreavahetus", - "@hardLineBreak": {"description": "Hard line break command label."}, + "@hardLineBreak": { + "description": "Hard line break command label." + }, "textStyle": "Tekstilaad", - "@textStyle": {"description": "Text style menu tooltip."}, + "@textStyle": { + "description": "Text style menu tooltip." + }, "paragraph": "Lõik", - "@paragraph": {"description": "Paragraph style label."}, + "@paragraph": { + "description": "Paragraph style label." + }, "heading1": "Pealkiri 1", - "@heading1": {"description": "Heading 1 style label."}, + "@heading1": { + "description": "Heading 1 style label." + }, "heading2": "Pealkiri 2", - "@heading2": {"description": "Heading 2 style label."}, + "@heading2": { + "description": "Heading 2 style label." + }, "heading3": "Pealkiri 3", - "@heading3": {"description": "Heading 3 style label."}, + "@heading3": { + "description": "Heading 3 style label." + }, "heading4": "Pealkiri 4", - "@heading4": {"description": "Heading 4 style label."}, + "@heading4": { + "description": "Heading 4 style label." + }, "heading5": "Pealkiri 5", - "@heading5": {"description": "Heading 5 style label."}, + "@heading5": { + "description": "Heading 5 style label." + }, "heading6": "Pealkiri 6", - "@heading6": {"description": "Heading 6 style label."}, + "@heading6": { + "description": "Heading 6 style label." + }, "headingLevelAbbreviation": "H{level}", "@headingLevelAbbreviation": { "description": "Compact outline badge for a heading level.", - "placeholders": {"level": {"type": "int"}} + "placeholders": { + "level": { + "type": "int" + } + } }, "deleteTable": "Kustuta tabel", - "@deleteTable": {"description": "Tooltip for deleting a table."}, + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, "tableColumnNumber": "Veerg {columnNumber}", "@tableColumnNumber": { "description": "Tooltip for a table column control.", - "placeholders": {"columnNumber": {"type": "int"}} + "placeholders": { + "columnNumber": { + "type": "int" + } + } }, "insertColumnLeft": "Lisa veerg vasakule", - "@insertColumnLeft": {"description": "Menu item for inserting a table column to the left."}, + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, "insertColumnRight": "Lisa veerg paremale", - "@insertColumnRight": {"description": "Menu item for inserting a table column to the right."}, + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, "deleteColumn": "Kustuta veerg", - "@deleteColumn": {"description": "Menu item for deleting a table column."}, + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, "tableRowNumber": "Rida {rowNumber}", "@tableRowNumber": { "description": "Tooltip for a table row control.", - "placeholders": {"rowNumber": {"type": "int"}} + "placeholders": { + "rowNumber": { + "type": "int" + } + } }, "insertRowAbove": "Lisa rida ülespoole", - "@insertRowAbove": {"description": "Menu item for inserting a table row above."}, + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, "insertRowBelow": "Lisa rida allapoole", - "@insertRowBelow": {"description": "Menu item for inserting a table row below."}, + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, "deleteRow": "Kustuta rida", - "@deleteRow": {"description": "Menu item for deleting a table row."}, + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, "tableHeaderHint": "Päis", - "@tableHeaderHint": {"description": "Hint for an empty table header cell."}, + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, "tableCellHint": "Lahter", - "@tableCellHint": {"description": "Hint for an empty table body cell."}, + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, "language": "Keel", - "@language": {"description": "Code block language field label."}, + "@language": { + "description": "Code block language field label." + }, "hideEditingButtons": "Peida redigeerimisnupud", - "@hideEditingButtons": {"description": "Tooltip for hiding floating editing buttons."}, + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, "showEditingButtons": "Kuva redigeerimisnupud", - "@showEditingButtons": {"description": "Tooltip for showing floating editing buttons."}, + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, "altText": "Asetekst", - "@altText": {"description": "Image alt text field label."}, + "@altText": { + "description": "Image alt text field label." + }, "editorPlaceholderText": "tekst", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "kood", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "asetekst", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Kirjelda pilti", - "@describeTheImage": {"description": "Image alt text hint."}, + "@describeTheImage": { + "description": "Image alt text hint." + }, "columns": "Veerud", - "@columns": {"description": "Table dialog columns field label."}, + "@columns": { + "description": "Table dialog columns field label." + }, "rows": "Read", - "@rows": {"description": "Table dialog rows field label."}, + "@rows": { + "description": "Table dialog rows field label." + }, "tableHeaderNumber": "Päis {columnNumber}", "@tableHeaderNumber": { "description": "Default header text for a newly inserted table column.", - "placeholders": {"columnNumber": {"type": "int"}} + "placeholders": { + "columnNumber": { + "type": "int" + } + } }, "tableCellDefault": "Lahter", - "@tableCellDefault": {"description": "Default cell text for newly inserted table cells."}, + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, "noImageSource": "Pildiallikas puudub", - "@noImageSource": {"description": "Placeholder shown when an image has no source."}, + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, "remoteImageBlocked": "Välispilt on blokeeritud", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Vali, kas BusyMark võib välispilte laadida.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Välispildid on blokeeritud", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "See dokument viitab internetis olevatele piltidele. Nende laadimine võib avaldada pildi majutajale teie võrguteavet.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Laadi selles tööruumis", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Laadi välispildid alati", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Peida külgpaneel", - "@hideSidebar": {"description": "Tooltip for hiding the workspace sidebar panel."}, + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, "showSidebar": "Kuva külgpaneel", - "@showSidebar": {"description": "Tooltip for showing the workspace sidebar panel."}, + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, "showPreview": "Kuva eelvaade", - "@showPreview": {"description": "Tooltip for showing the preview pane."}, + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, "hidePreview": "Peida eelvaade", - "@hidePreview": {"description": "Tooltip for hiding the preview pane."}, + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, "workspaceKindUnsavedMarkdown": "Salvestamata Markdowni fail", - "@workspaceKindUnsavedMarkdown": {"description": "Workspace kind label for an unsaved Markdown file."}, + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, "workspaceKindSingleMarkdown": "Üksik Markdowni fail", - "@workspaceKindSingleMarkdown": {"description": "Workspace kind label for a single Markdown file."}, + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, "workspaceKindMarkdownFolder": "Markdowni kaust", - "@workspaceKindMarkdownFolder": {"description": "Workspace kind label for a Markdown folder."}, + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, "workspaceKindWritersideModule": "Writerside’i moodul", - "@workspaceKindWritersideModule": {"description": "Workspace kind label for a Writerside module."}, + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, "problems": "Probleemid", - "@problems": {"description": "Diagnostics dialog title."}, + "@problems": { + "description": "Diagnostics dialog title." + }, "diagnosticCount": "{count, plural, =0{Diagnostikateateid pole} one{1 diagnostikateade} other{{count} diagnostikateadet}}", "@diagnosticCount": { "description": "Count of diagnostics in the workspace.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "files": "Failid", - "@files": {"description": "Files sidebar tab label."}, + "@files": { + "description": "Files sidebar tab label." + }, "toc": "Sisukord", - "@toc": {"description": "Writerside table of contents sidebar tab label."}, + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, "tocActions": "Sisukorra toimingud", - "@tocActions": {"description": "Tooltip for the Writerside TOC action menu button."}, + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, "markdownUnsaved": "Markdown – salvestamata", - "@markdownUnsaved": {"description": "Workspace detail label for an unsaved Markdown file."}, + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, "workspaceDetail": "{kind} – {count, plural, one{1 fail} other{{count} faili}}", "@workspaceDetail": { "description": "Workspace detail with kind and file count.", - "placeholders": {"kind": {"type": "String"}, "count": {"type": "int"}} + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } }, "noFiles": "Faile pole", - "@noFiles": {"description": "Empty state shown when there are no files."}, + "@noFiles": { + "description": "Empty state shown when there are no files." + }, "newFile": "Uus fail", - "@newFile": {"description": "Menu action and dialog title for creating a new file."}, + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, "noWritersideToc": "Writerside’i sisukord puudub", - "@noWritersideToc": {"description": "Empty state shown when there is no Writerside TOC."}, + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, "tocSection": "Sisukorra jaotis", - "@tocSection": {"description": "Fallback label for a Writerside TOC section."}, + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, "newTopic": "Uus teema", - "@newTopic": {"description": "Create new Writerside topic action label."}, + "@newTopic": { + "description": "Create new Writerside topic action label." + }, "newChildTopic": "Uus alamteema", - "@newChildTopic": {"description": "Create new child Writerside topic action label."}, + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, "newSiblingTopic": "Uus samatasemeline teema", - "@newSiblingTopic": {"description": "Create new sibling Writerside topic action label."}, + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, "renameTopicFile": "Nimeta teemafail ümber", - "@renameTopicFile": {"description": "Context-menu action that renames a Writerside topic file."}, + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, "topicPlacement": "Paigutus sisukorras", - "@topicPlacement": {"description": "Create topic dialog label for selecting TOC placement."}, + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, "tocRoot": "Sisukorra juurtasemel", - "@tocRoot": {"description": "TOC placement option for the root level."}, + "@tocRoot": { + "description": "TOC placement option for the root level." + }, "afterSelectedTopic": "Valitud teema järel", - "@afterSelectedTopic": {"description": "TOC placement option after the selected topic."}, + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, "insideSelectedTopic": "Valitud teema all", - "@insideSelectedTopic": {"description": "TOC placement option inside the selected topic."}, + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, "pasteAfterTopic": "Aseta järele", - "@pasteAfterTopic": {"description": "Action that moves a cut TOC entry after the selected topic."}, + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, "pasteAsChildTopic": "Aseta alamteemaks", - "@pasteAsChildTopic": {"description": "Action that moves a cut TOC entry inside the selected topic."}, + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, "removeFromToc": "Eemalda sisukorrast", - "@removeFromToc": {"description": "Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, "confirmRemoveFromTocTitle": "Kas eemaldada sisukorrast?", - "@confirmRemoveFromTocTitle": {"description": "Confirmation title before removing a Writerside TOC entry."}, + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, "confirmRemoveFromTocMessage": "Kas eemaldada „{name}” sellest sisukorrast? Teemafail säilitatakse.", "@confirmRemoveFromTocMessage": { "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", - "placeholders": {"name": {"type": "String"}} + "placeholders": { + "name": { + "type": "String" + } + } }, "confirmDeleteTopicTitle": "Kas kustutada teemafail?", - "@confirmDeleteTopicTitle": {"description": "Confirmation title before deleting a Writerside topic file."}, + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, "confirmDeleteTopicMessage": "Kas kustutada „{name}” ja eemaldada see kõigist sisukordadest? Seda toimingut ei saa tagasi võtta.", "@confirmDeleteTopicMessage": { "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", - "placeholders": {"name": {"type": "String"}} + "placeholders": { + "name": { + "type": "String" + } + } }, "safeDeleteTopicFile": "Kustuta teemafail turvaliselt…", - "@safeDeleteTopicFile": {"description": "Writerside action that safely deletes a topic after checking usages."}, + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, "removeTocElement": "Eemalda sisukorraelement", - "@removeTocElement": {"description": "Writerside action and dialog title for removing a topic from one table of contents."}, + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, "reviewUsages": "Vaata kasutuskohad üle", - "@reviewUsages": {"description": "Action that opens the Writerside topic usages review."}, + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, "deleteTopicFile": "Kustuta teemafail", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic source file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, "removeAction": "Eemalda", - "@removeAction": {"description": "Short action label for removing an item without deleting its source file."}, + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, "topicRemovalSummary": "Eemalda „{topic}” valitud eksemplarist. Teemafail säilitatakse.", "@topicRemovalSummary": { "description": "Summary in the dialog for removing a topic from one Writerside instance.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "safeDeleteTopicSummary": "Kustuta „{topic}” ja uuenda kogu Writerside’i projektis turvaliselt sellele viitavad kohad.", "@safeDeleteTopicSummary": { "description": "Summary in the Writerside safe-delete dialog.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "childTopicsPromoted": "{count, plural, one{1 alamteema liigub ühe taseme võrra üles.} other{{count} alamteemat liigub ühe taseme võrra üles.}}", "@childTopicsPromoted": { "description": "Disclosure that children of a removed TOC element are promoted.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "topicIsStartPageRemovalWarning": "Seda teemat kasutatakse eksemplari avalehena. Enne jätkamist vaata kasutuskohad üle ja määra teine avaleht.", - "@topicIsStartPageRemovalWarning": {"description": "Warning that blocks deletion of a Writerside start-page topic."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, "topicUsagesCount": "Kasutuskohad ({count})", "@topicUsagesCount": { "description": "Heading with the number of Writerside topic usages.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "noBreakingTopicUsages": "Ei leitud viiteid, mis selle toimingu tõttu katkeksid.", - "@noBreakingTopicUsages": {"description": "Safe-delete message when no breaking references were found."}, + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, "topicUsagesFound": "BusyMark leidis järgmised viited sellele teemale.", - "@topicUsagesFound": {"description": "Description above Writerside topic usage groups."}, + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, "topicUsageTocElements": "Sisukorraelemendid", - "@topicUsageTocElements": {"description": "Usage group label for Writerside TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, "topicUsageStartPages": "Avalehed", - "@topicUsageStartPages": {"description": "Usage group label for Writerside instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, "topicUsageTopicLinks": "Teemalingid", - "@topicUsageTopicLinks": {"description": "Usage group label for links to a Writerside topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, "topicUsageIncludes": "Kaasamiselemendid", - "@topicUsageIncludes": {"description": "Usage group label for Writerside include elements."}, + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, "usageCount": "{count, plural, one{1 kasutuskoht} other{{count} kasutuskohta}}", "@usageCount": { "description": "Number of references that use a Writerside topic.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "refactoringOptions": "Refaktoreerimise valikud", - "@refactoringOptions": {"description": "Heading for Writerside topic removal options."}, + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, "updateUsagesAutomatically": "Uuenda kasutuskohad automaatselt", - "@updateUsagesAutomatically": {"description": "Option to rewrite Writerside topic usages during removal."}, + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, "updateUsagesAutomaticallyDescription": "Eemalda sisukorraviited ja kaasamiselemendid ning säilita linkide tekst.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic Writerside usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, "manualUsageUpdatesRequired": "Mõnda kasutuskohta tuleb enne refaktoreerimist käsitsi muuta.", - "@manualUsageUpdatesRequired": {"description": "Message when some Writerside usages cannot be updated automatically."}, + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, "setRedirectTo": "Määra ümbersuunamine", - "@setRedirectTo": {"description": "Option to redirect an old Writerside page to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, "noRedirectDescription": "Ära suuna vana avaldatud lehte ümber.", - "@noRedirectDescription": {"description": "Description when no Writerside page redirect is selected."}, + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, "redirectTarget": "Ümbersuunamise sihtkoht", - "@redirectTarget": {"description": "Field label for a Writerside redirect destination."}, + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, "remainingUsagesBlockRemoval": "Enne jätkamist vaata üle ja uuenda ülejäänud kasutuskohad või luba automaatne uuendamine, kui see on saadaval.", - "@remainingUsagesBlockRemoval": {"description": "Instruction shown when unresolved usages block topic removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, "usagesOfTopic": "Teema „{topic}” kasutuskohad", "@usagesOfTopic": { "description": "Writerside usages sidebar title.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "noUsagesFound": "Kasutuskohti ei leitud", - "@noUsagesFound": {"description": "Empty state in the Writerside usages review."}, + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, "outsideSelectedInstance": "väljaspool valitud eksemplari", - "@outsideSelectedInstance": {"description": "Marker for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, "doRefactor": "Refaktoreeri", - "@doRefactor": {"description": "Action to return from usage review and continue the topic refactoring."}, + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, "orphanTopicTitle": "Teemafaili ei kasutata enam", - "@orphanTopicTitle": {"description": "Dialog title after a topic is removed from its last table of contents."}, + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, "keepTopicFile": "Säilita teemafail", - "@keepTopicFile": {"description": "Action that keeps an orphaned Writerside topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, "orphanTopicMessage": "„{topic}” pole selles Writerside’i projektis enam kusagil kasutusel. Kustuta fail või säilita see mõnes teises eksemplaris kasutamiseks.", "@orphanTopicMessage": { "description": "Prompt to delete or keep an orphaned Writerside topic file.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "defaultNewTopicTitle": "Uus teema", - "@defaultNewTopicTitle": {"description": "Default topic title in the create topic dialog."}, + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, "topicTitle": "Teema pealkiri", - "@topicTitle": {"description": "Create topic dialog field label."}, + "@topicTitle": { + "description": "Create topic dialog field label." + }, "fileName": "Faili nimi", - "@fileName": {"description": "Create topic dialog field label."}, + "@fileName": { + "description": "Create topic dialog field label." + }, "topicTitleRequired": "Teema pealkiri on nõutav.", - "@topicTitleRequired": {"description": "Validation message for missing topic title."}, + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, "fileNameRequired": "Faili nimi on nõutav.", - "@fileNameRequired": {"description": "Validation message for missing file name."}, + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, "rename": "Nimeta ümber", - "@rename": {"description": "Rename command label."}, + "@rename": { + "description": "Rename command label." + }, "confirmDeleteFileTitle": "Kas kustutada fail?", - "@confirmDeleteFileTitle": {"description": "Confirmation dialog title before deleting a file."}, + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, "confirmDeleteFolderTitle": "Kas kustutada kaust?", - "@confirmDeleteFolderTitle": {"description": "Confirmation dialog title before deleting a folder."}, + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, "confirmDeleteFileMessage": "Kas kustutada „{name}”? Seda toimingut ei saa tagasi võtta.", "@confirmDeleteFileMessage": { "description": "Confirmation dialog message before deleting a file.", - "placeholders": {"name": {"type": "String"}} + "placeholders": { + "name": { + "type": "String" + } + } }, "confirmDeleteFolderMessage": "Kas kustutada „{name}” ja kõik selles olevad failid? Seda toimingut ei saa tagasi võtta.", "@confirmDeleteFolderMessage": { "description": "Confirmation dialog message before deleting a folder.", - "placeholders": {"name": {"type": "String"}} + "placeholders": { + "name": { + "type": "String" + } + } }, "useSingleSafeFileName": "Kasuta üht ohutut failinime.", - "@useSingleSafeFileName": {"description": "Validation message for unsafe file names."}, + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, "useExpectedExtension": "Kasuta valitud vormingu puhul laiendit {extension}.", "@useExpectedExtension": { "description": "Validation message for an unexpected file extension.", - "placeholders": {"extension": {"type": "String"}} + "placeholders": { + "extension": { + "type": "String" + } + } }, "useIdentifierCharacters": "Kasuta laiendi ees ainult tähti, numbreid, allkriipse või sidekriipse.", - "@useIdentifierCharacters": {"description": "Validation message for invalid topic IDs."}, + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, "topicIdAlreadyExists": "Teema ID on juba olemas.", - "@topicIdAlreadyExists": {"description": "Validation message for duplicate topic IDs."}, + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, "createWritersideTopicFailed": "Writerside’i teema loomine nurjus.", - "@createWritersideTopicFailed": {"description": "Fallback error shown when topic creation fails."}, + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, "noOutline": "Liigendus puudub", - "@noOutline": {"description": "Empty state shown when a document has no outline."}, + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, "expandKind": "Laienda: {kind}", "@expandKind": { "description": "Tooltip for expanding a foldable source section.", - "placeholders": {"kind": {"type": "String"}} + "placeholders": { + "kind": { + "type": "String" + } + } }, "collapseKind": "Ahenda: {kind}", "@collapseKind": { "description": "Tooltip for collapsing a foldable source section.", - "placeholders": {"kind": {"type": "String"}} + "placeholders": { + "kind": { + "type": "String" + } + } }, "foldKindSection": "jaotis", - "@foldKindSection": {"description": "Fold kind label for a section."}, + "@foldKindSection": { + "description": "Fold kind label for a section." + }, "foldKindList": "loend", - "@foldKindList": {"description": "Fold kind label for a list."}, + "@foldKindList": { + "description": "Fold kind label for a list." + }, "foldKindQuote": "tsitaat", - "@foldKindQuote": {"description": "Fold kind label for a blockquote."}, + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, "foldKindTag": "märgend", - "@foldKindTag": {"description": "Fold kind label for an XML tag."}, + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, "sourceSearchPreviousMatch": "Eelmine vaste", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Järgmine vaste", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Tõstutundlik", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Terve sõna", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Regulaaravaldis", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Vigane regulaaravaldis", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Suur fail: esiletõstmine ja voltimine on peatatud", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Pole midagi lugeda", "admonition": "Märkusplokk", "quote": "Tsitaat", - "@nothingToRead": {"description": "Empty state shown when there is no content to read."}, + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, "note": "Märkus", - "@note": {"description": "Preview label for a note admonition."}, + "@note": { + "description": "Preview label for a note admonition." + }, "tip": "Näpunäide", - "@tip": {"description": "Preview label for a tip admonition."}, + "@tip": { + "description": "Preview label for a tip admonition." + }, "warning": "Hoiatus", - "@warning": {"description": "Preview label for a warning admonition."}, + "@warning": { + "description": "Preview label for a warning admonition." + }, "tabs": "Vahekaardid", - "@tabs": {"description": "Preview label for a tabs block."}, + "@tabs": { + "description": "Preview label for a tabs block." + }, "tab": "Vahekaart", - "@tab": {"description": "Preview label for a tab block."}, + "@tab": { + "description": "Preview label for a tab block." + }, "procedure": "Protseduur", - "@procedure": {"description": "Preview label for a procedure block."}, + "@procedure": { + "description": "Preview label for a procedure block." + }, "step": "Samm", - "@step": {"description": "Preview label for a procedure step."}, + "@step": { + "description": "Preview label for a procedure step." + }, "topic": "Teema", - "@topic": {"description": "Preview label for a topic element."}, + "@topic": { + "description": "Preview label for a topic element." + }, "chapter": "Peatükk", - "@chapter": {"description": "Preview label for a chapter element."}, + "@chapter": { + "description": "Preview label for a chapter element." + }, "couldNotOpenTarget": "Sihtkoha „{target}” avamine nurjus", "@couldNotOpenTarget": { "description": "Toast shown when a link target cannot be opened.", - "placeholders": {"target": {"type": "String"}} + "placeholders": { + "target": { + "type": "String" + } + } }, "linkTargetNotFound": "Lingi sihtkohta ei leitud: {targetPath}", "@linkTargetNotFound": { "description": "Toast shown when a link target path is missing.", - "placeholders": {"targetPath": {"type": "String"}} + "placeholders": { + "targetPath": { + "type": "String" + } + } }, "cannotOpenFileTypeInEditor": "Seda failitüüpi ei saa redaktoris avada", - "@cannotOpenFileTypeInEditor": {"description": "Toast shown when a file type cannot be opened in the editor."}, + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, "anchorNotFound": "Ankrut ei leitud: {anchor}", "@anchorNotFound": { "description": "Toast shown when a link anchor is missing.", - "placeholders": {"anchor": {"type": "String"}} + "placeholders": { + "anchor": { + "type": "String" + } + } }, "noProblemsFound": "Probleeme ei leitud", - "@noProblemsFound": {"description": "Diagnostics empty state."}, + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, "noResults": "Tulemusi pole", - "@noResults": {"description": "Search empty state."}, + "@noResults": { + "description": "Search empty state." + }, "searchResultLine": "{relativePath} – rida {lineNumber}", "@searchResultLine": { "description": "Search result subtitle with file path and line number.", - "placeholders": {"relativePath": {"type": "String"}, "lineNumber": {"type": "int"}} + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } }, "untitledResult": "Pealkirjata tulemus", - "@untitledResult": {"description": "Fallback search result title."}, + "@untitledResult": { + "description": "Fallback search result title." + }, "documentKindMarkdownFile": "Markdowni fail", - "@documentKindMarkdownFile": {"description": "Search result document kind label."}, + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, "documentKindWritersideMarkdownTopic": "Writerside’i Markdowni teema", - "@documentKindWritersideMarkdownTopic": {"description": "Search result document kind label."}, + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideXmlTopic": "Writerside’i XML-teema", - "@documentKindWritersideXmlTopic": {"description": "Search result document kind label."}, + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideTree": "Writerside’i puu", - "@documentKindWritersideTree": {"description": "Search result document kind label."}, + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, "documentKindConfigurationFile": "Konfiguratsioonifail", - "@documentKindConfigurationFile": {"description": "Search result document kind label."}, + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, "documentKindVariablesFile": "Muutujate fail", - "@documentKindVariablesFile": {"description": "Search result document kind label."}, + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, "documentKindCategoriesFile": "Kategooriate fail", - "@documentKindCategoriesFile": {"description": "Search result document kind label."}, + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, "documentKindResourceFile": "Ressursifail", - "@documentKindResourceFile": {"description": "Search result document kind label."}, - + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, "workspaceErrorOpenFailed": "Avamine nurjus: {error}", "@workspaceErrorOpenFailed": { "description": "Workspace error message shown when opening a path fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "workspaceErrorCreateWritersideProjectFailed": "Writerside’i projekti loomine nurjus: {error}", "@workspaceErrorCreateWritersideProjectFailed": { "description": "Workspace error message shown when Writerside project creation fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "workspaceErrorCreateWritersideTopicFailed": "Writerside’i teema loomine nurjus: {error}", "@workspaceErrorCreateWritersideTopicFailed": { "description": "Workspace error message shown when Writerside topic creation fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "workspaceErrorCouldNotOpenFile": "Faili avamine nurjus: {error}", "@workspaceErrorCouldNotOpenFile": { "description": "Workspace error message shown when opening a file fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "workspaceErrorChooseWhereToSaveMarkdown": "Vali selle Markdowni faili salvestuskoht.", - "@workspaceErrorChooseWhereToSaveMarkdown": {"description": "Workspace error message shown when an untitled file needs a save location."}, + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, "workspaceErrorSaveBlockedFileChangedOnDisk": "Salvestamine blokeeriti: faili on kettal muudetud.", - "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description": "Workspace error message shown when a save is blocked by external changes."}, + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, "workspaceErrorSaveFailed": "Salvestamine nurjus: {error}", "@workspaceErrorSaveFailed": { "description": "Workspace error message shown when saving fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "workspaceErrorFileOperationFailed": "Failitoiming nurjus: {error}", "@workspaceErrorFileOperationFailed": { "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "workspaceErrorValidationFailed": "Valideerimine nurjus: {error}", "@workspaceErrorValidationFailed": { "description": "Workspace error message shown when validation fails.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, - "errorPathDoesNotExist": "Teed pole olemas: {path}", "@errorPathDoesNotExist": { "description": "Detail for a missing path error.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorTargetDirectoryNotEmpty": "Sihtkataloog on juba olemas ega ole tühi: {path}", "@errorTargetDirectoryNotEmpty": { "description": "Detail for a non-empty target directory error.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorTargetPathNotDirectory": "Sihttee on juba olemas ega ole kataloog: {path}", "@errorTargetPathNotDirectory": { "description": "Detail for a target path that is not a directory.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorGeneratedFileAlreadyExists": "Loodav fail on juba olemas: {path}", "@errorGeneratedFileAlreadyExists": { "description": "Detail for a generated file conflict.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorParentDirectoryRequired": "Ülemkataloog on nõutav.", - "@errorParentDirectoryRequired": {"description": "Detail for missing parent directory input."}, + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, "errorParentDirectoryMissing": "Ülemkataloogi pole olemas: {path}", "@errorParentDirectoryMissing": { "description": "Detail for a missing parent directory.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorDirectoryMissing": "Kataloogi pole olemas: {path}", "@errorDirectoryMissing": { "description": "Detail for a missing directory.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorPathAlreadyExists": "Tee on juba olemas: {path}", "@errorPathAlreadyExists": { "description": "Detail for a file operation target that already exists.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorFileNameRequired": "Faili nimi on nõutav.", - "@errorFileNameRequired": {"description": "Detail for a missing file name in a file operation."}, + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, "errorFileNameUnsafe": "Failinimi peab olema üks ohutu teeosa.", - "@errorFileNameUnsafe": {"description": "Detail for an unsafe file name in a file operation."}, + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, "errorFileOperationInvalidTarget": "Kausta ei saa iseendasse teisaldada.", - "@errorFileOperationInvalidTarget": {"description": "Detail for an invalid file operation target."}, + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, "errorFileOperationOutsideRoot": "Failitoiming peab jääma tööruumi piiresse.", - "@errorFileOperationOutsideRoot": {"description": "Detail for a file operation outside the workspace root."}, + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, "errorFileOperationRoot": "Tööruumi juurkausta ei saa failipuus muuta.", - "@errorFileOperationRoot": {"description": "Detail for a file operation attempted on the workspace root."}, + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, "errorProjectNameRequired": "Projekti nimi on nõutav.", - "@errorProjectNameRequired": {"description": "Detail for a missing project name."}, + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, "errorDirectoryNameRequired": "Kataloogi nimi on nõutav.", - "@errorDirectoryNameRequired": {"description": "Detail for a missing directory name."}, + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, "errorDirectoryNameUnsafe": "Katalooginimi peab olema üks ohutu teeosa.", - "@errorDirectoryNameUnsafe": {"description": "Detail for an unsafe directory name."}, + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, "errorInstanceIdInvalid": "Eksemplari ID peab algama väiketähega ning sisaldama ainult väiketähti, numbreid, allkriipse ja sidekriipse.", - "@errorInstanceIdInvalid": {"description": "Detail for an invalid Writerside instance ID."}, + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, "errorTopicFileInvalid": "Teemafaili nimi peab olema Markdowni failinimi ilma kataloogieraldajateta.", - "@errorTopicFileInvalid": {"description": "Detail for an invalid topic file name."}, + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, "errorTopicTitleRequired": "Teema pealkiri on nõutav.", - "@errorTopicTitleRequired": {"description": "Detail for a missing topic title."}, + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, "errorWritersideModuleRootMissing": "Writerside’i mooduli juurkausta pole olemas: {path}", "@errorWritersideModuleRootMissing": { "description": "Detail for a missing Writerside module root.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorWritersideModuleNotOpen": "Teema loomiseks peab Writerside’i moodul olema avatud.", - "@errorWritersideModuleNotOpen": {"description": "Detail shown when creating a topic without an open Writerside module."}, + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, "errorWritersideInstanceTreeMissing": "Writerside’i moodulil puudub eksemplaripuu.", - "@errorWritersideInstanceTreeMissing": {"description": "Detail shown when creating a topic without a Writerside instance tree."}, + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, "errorWritersideTreeFileMissing": "Writerside’i puufaili pole olemas: {path}", "@errorWritersideTreeFileMissing": { "description": "Detail for a missing Writerside tree file.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorTopicIdAlreadyExists": "Teema ID „{topicId}” on selles abimoodulis juba olemas.", "@errorTopicIdAlreadyExists": { "description": "Detail for a duplicate topic ID.", - "placeholders": {"topicId": {"type": "String"}} + "placeholders": { + "topicId": { + "type": "String" + } + } }, "errorTopicFileAlreadyExists": "Teemafail on juba olemas: {path}", "@errorTopicFileAlreadyExists": { "description": "Detail for an existing topic file.", - "placeholders": {"path": {"type": "String"}} + "placeholders": { + "path": { + "type": "String" + } + } }, "errorReferenceTopicMissing": "Viidatud teemat pole valitud puus: {topic}", "@errorReferenceTopicMissing": { "description": "Detail for a missing reference topic in a tree.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "errorWritersideTocNodeMissing": "Valitud sisukorra kirjet pole enam olemas.", - "@errorWritersideTocNodeMissing": {"description": "Detail shown when a selected Writerside TOC entry no longer exists."}, + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, "errorWritersideTocInvalidMove": "Sisukorra kirjet ei saa teisaldada iseenda ega ühegi oma alamkirje alla.", - "@errorWritersideTocInvalidMove": {"description": "Detail shown when a Writerside TOC move would create a cycle."}, + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, "errorWritersideStartTopicDelete": "Avaleheks määratud teemat „{topic}” ei saa kustutada. Vali esmalt teine avaleht.", "@errorWritersideStartTopicDelete": { "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "errorWritersideSafeDeleteRequired": "Writerside’i teemafaili kustutamiseks kasuta turvalist kustutamist.", - "@errorWritersideSafeDeleteRequired": {"description": "Error shown when generic file deletion is attempted for a Writerside topic."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, "errorWritersideTopicUsageScanFailed": "Teema kasutuskohtade kontrolli ei saanud lõpule viia. Ühtegi faili ei muudetud.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Mõned teema kasutuskohad vajavad veel tähelepanu. Vaata need enne jätkamist üle.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Valitud ümbersuunamise sihtkoht ei ole enam kehtiv. Vali see uuesti.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Teema eemaldamist ei saanud täielikult tagasi pöörata. Enne jätkamist vaata üle järgmised asukohad: {paths}", "@errorWritersideRollbackFailed": { "description": "Error shown when safe-delete recovery leaves files requiring manual review.", - "placeholders": {"paths": {"type": "String"}} + "placeholders": { + "paths": { + "type": "String" + } + } }, "errorTopicsRootUnsafe": "Teemade juurkaust peab olema ohutu suhteline kataloog.", - "@errorTopicsRootUnsafe": {"description": "Detail for an unsafe topics root directory."}, + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, "errorTopicFileNameUnsafe": "Teemafaili nimi peab olema üks ohutu teeosa.", - "@errorTopicFileNameUnsafe": {"description": "Detail for an unsafe topic file name."}, + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, "errorTopicFileExtensionMismatch": "Teemafaili laiend peab vastama valitud vormingule ({extension}).", "@errorTopicFileExtensionMismatch": { "description": "Detail for a topic file extension mismatch.", - "placeholders": {"extension": {"type": "String"}} + "placeholders": { + "extension": { + "type": "String" + } + } }, "errorTopicFileNameInvalid": "Teemafaili nimi tohib sisaldada ainult tähti, numbreid, allkriipse ja sidekriipse.", - "@errorTopicFileNameInvalid": {"description": "Detail for a topic file name with invalid characters."}, + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, "errorUnknown": "Tundmatu viga: {code}", "@errorUnknown": { "description": "Fallback detail for an unknown coded application error.", - "placeholders": {"code": {"type": "String"}} + "placeholders": { + "code": { + "type": "String" + } + } }, - "diagnosticWorkspaceFileStatFailed": "Faili metaandmete lugemine nurjus: {error}", "@diagnosticWorkspaceFileStatFailed": { "description": "Diagnostic shown when file metadata cannot be read.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "diagnosticWorkspaceScanSkipped": "Tuvastati suur tööruum. Rakenduse reageerimisvõime säilitamiseks jäeti osa faile vahele.", - "@diagnosticWorkspaceScanSkipped": {"description": "Diagnostic shown when workspace scanning skips files."}, + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, "diagnosticWorkspaceScanInspectFailed": "Tööruumi kirje kontrollimine nurjus: {error}", "@diagnosticWorkspaceScanInspectFailed": { "description": "Diagnostic shown when a workspace entry cannot be inspected.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "diagnosticWorkspaceFileTooLarge": "Fail ületab beetaversiooni automaatse parsimise mahupiirangu.", - "@diagnosticWorkspaceFileTooLarge": {"description": "Diagnostic shown when a file is too large to parse automatically."}, + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, "diagnosticWorkspaceFileReadFailed": "Markdowni faili lugemine nurjus: {error}", "@diagnosticWorkspaceFileReadFailed": { "description": "Diagnostic shown when a Markdown file cannot be read.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "diagnosticMarkdownAttributeMalformed": "Writerside’i pealkirja atribuudiplokk on vigane.", - "@diagnosticMarkdownAttributeMalformed": {"description": "Markdown parser diagnostic for malformed Writerside heading attributes."}, + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, "diagnosticMarkdownHeadingDuplicateId": "Pealkirja ID „{id}” esineb mitu korda.", "@diagnosticMarkdownHeadingDuplicateId": { "description": "Markdown parser diagnostic for duplicate heading IDs.", - "placeholders": {"id": {"type": "String"}} + "placeholders": { + "id": { + "type": "String" + } + } }, "diagnosticWritersideTopicH1ConvertedToChapter": "Täiendavaid kõrgeima taseme H1-pealkirju käsitletakse peatükkidena.", - "@diagnosticWritersideTopicH1ConvertedToChapter": {"description": "Markdown parser diagnostic for additional H1 headings in Writerside mode."}, + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside’i Markdowni teemal pole H1- ega metaandmeploki pealkirja.", - "@diagnosticWritersideMarkdownTopicMissingTitle": {"description": "Diagnostic for a Writerside Markdown topic without a title."}, + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, "diagnosticWritersideXmlTopicMissingTitle": "XML-teemal puudub pealkiri.", - "@diagnosticWritersideXmlTopicMissingTitle": {"description": "Diagnostic for a Writerside XML topic without a title."}, + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, "diagnosticWritersideTopicFileMissingTitle": "Teemal „{fileName}” puudub pealkiri.", "@diagnosticWritersideTopicFileMissingTitle": { "description": "Diagnostic for a Writerside topic file without a title.", - "placeholders": {"fileName": {"type": "String"}} + "placeholders": { + "fileName": { + "type": "String" + } + } }, "diagnosticMarkdownFrontMatterMalformed": "Metaandmeplokk pole suletud.", - "@diagnosticMarkdownFrontMatterMalformed": {"description": "Markdown parser diagnostic for unclosed front matter."}, + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, "diagnosticMarkdownRawHtmlUnsafe": "Ebaturvaline HTML-element.", - "@diagnosticMarkdownRawHtmlUnsafe": {"description": "Markdown parser diagnostic for unsafe raw HTML."}, + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, "diagnosticMarkdownLinkUnresolvedTarget": "Lingi sihtkohta pole olemas: {targetPath}", "@diagnosticMarkdownLinkUnresolvedTarget": { "description": "Markdown parser diagnostic for a missing link target.", - "placeholders": {"targetPath": {"type": "String"}} + "placeholders": { + "targetPath": { + "type": "String" + } + } }, "diagnosticMarkdownLinkUnresolvedAnchor": "Ankrut „{anchor}” pole olemas.", "@diagnosticMarkdownLinkUnresolvedAnchor": { "description": "Markdown parser diagnostic for a missing local anchor.", - "placeholders": {"anchor": {"type": "String"}} + "placeholders": { + "anchor": { + "type": "String" + } + } }, "diagnosticMarkdownImageMissingAlt": "Pildil „{destination}” puudub asetekst.", "@diagnosticMarkdownImageMissingAlt": { "description": "Markdown parser diagnostic for a missing image alt text.", - "placeholders": {"destination": {"type": "String"}} + "placeholders": { + "destination": { + "type": "String" + } + } }, "diagnosticMarkdownImageMissingFile": "Pilti pole olemas: {destination}", "@diagnosticMarkdownImageMissingFile": { "description": "Markdown parser diagnostic for a missing image file.", - "placeholders": {"destination": {"type": "String"}} + "placeholders": { + "destination": { + "type": "String" + } + } }, "diagnosticInvalidXml": "Vigane XML: {message}", "@diagnosticInvalidXml": { "description": "XML parser diagnostic for invalid XML.", - "placeholders": {"message": {"type": "String"}} + "placeholders": { + "message": { + "type": "String" + } + } }, "diagnosticWritersideConfigInvalidRoot": "Faili writerside.cfg juurelement peab olema .", - "@diagnosticWritersideConfigInvalidRoot": {"description": "Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, "diagnosticWritersideConfigMissingSnippetsSrc": "Deklaratsioonil snippets puudub atribuut src.", - "@diagnosticWritersideConfigMissingSnippetsSrc": {"description": "Writerside parser diagnostic for a snippets declaration without src."}, + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, "diagnosticWritersideConfigMissingInstanceGroupsSrc": "Deklaratsioonil instance-groups puudub atribuut src.", - "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description": "Writerside parser diagnostic for an instance-groups declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, "diagnosticWritersideConfigInvalidKeymapsMode": "Atribuudi keymaps-mode väärtust ei toetata: {mode}", "@diagnosticWritersideConfigInvalidKeymapsMode": { "description": "Writerside parser diagnostic for an unsupported keymaps mode.", - "placeholders": {"mode": {"type": "String"}} + "placeholders": { + "mode": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingInstanceSrc": "Eksemplari deklaratsioonil puudub atribuut src.", - "@diagnosticWritersideConfigMissingInstanceSrc": {"description": "Writerside parser diagnostic for an instance declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, "diagnosticWritersideConfigMissingInstance": "Failis writerside.cfg pole registreeritud ühtegi eksemplari.", - "@diagnosticWritersideConfigMissingInstance": {"description": "Writerside parser diagnostic for a config with no instance."}, + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, "diagnosticWritersideTreeInvalidRoot": ".tree-faili juurelement peab olema .", - "@diagnosticWritersideTreeInvalidRoot": {"description": "Writerside parser diagnostic for an invalid tree root element."}, + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, "diagnosticWritersideTreeMissingId": "Eksemplariprofiilil puudub atribuut id.", - "@diagnosticWritersideTreeMissingId": {"description": "Writerside parser diagnostic for an instance profile without id."}, + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, "diagnosticWritersideTreeIdMismatch": "Puufaili tüvinimi ei vasta eksemplari ID-le „{id}”.", "@diagnosticWritersideTreeIdMismatch": { "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", - "placeholders": {"id": {"type": "String"}} + "placeholders": { + "id": { + "type": "String" + } + } }, "diagnosticWritersideTreeMissingStartPage": "Eksemplaril, mis pole teek, puudub atribuut start-page.", - "@diagnosticWritersideTreeMissingStartPage": {"description": "Writerside parser diagnostic for a tree missing start-page."}, + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, "diagnosticWritersideStartPageMissing": "Avalehte „{startPage}” pole olemas.", "@diagnosticWritersideStartPageMissing": { "description": "Writerside diagnostic for a missing start page.", - "placeholders": {"startPage": {"type": "String"}} + "placeholders": { + "startPage": { + "type": "String" + } + } }, "diagnosticWritersideTreeDuplicateTopic": "Teema „{topic}” esineb selle eksemplari sisukorras mitu korda.", "@diagnosticWritersideTreeDuplicateTopic": { "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "diagnosticWritersideVariableMalformedDeclaration": "Muutuja deklaratsioonil peavad olema atribuudid name ja value.", - "@diagnosticWritersideVariableMalformedDeclaration": {"description": "Writerside parser diagnostic for a malformed variable declaration."}, + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, "diagnosticWritersideVariableDuplicateName": "Muutuja „{name}” on deklareeritud mitu korda.", "@diagnosticWritersideVariableDuplicateName": { "description": "Writerside parser diagnostic for a duplicate variable name.", - "placeholders": {"name": {"type": "String"}} + "placeholders": { + "name": { + "type": "String" + } + } }, "diagnosticWritersideCategoryMissingId": "Kategoorial puudub atribuut id.", - "@diagnosticWritersideCategoryMissingId": {"description": "Writerside parser diagnostic for a category without id."}, + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, "diagnosticWritersideCategoryDuplicateId": "Kategooria „{id}” on deklareeritud mitu korda.", "@diagnosticWritersideCategoryDuplicateId": { "description": "Writerside parser diagnostic for a duplicate category ID.", - "placeholders": {"id": {"type": "String"}} + "placeholders": { + "id": { + "type": "String" + } + } }, "diagnosticWritersideCategoryDuplicateOrder": "Kategooria järjekord „{order}” on deklareeritud mitu korda.", "@diagnosticWritersideCategoryDuplicateOrder": { "description": "Writerside parser diagnostic for a duplicate category order.", - "placeholders": {"order": {"type": "String"}} + "placeholders": { + "order": { + "type": "String" + } + } }, "diagnosticWritersideTopicInvalidRoot": ".topic-faili juurelement peab olema .", - "@diagnosticWritersideTopicInvalidRoot": {"description": "Writerside parser diagnostic for an invalid XML topic root."}, + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, "diagnosticWritersideTopicMissingRootId": "XML-teema juurelemendil puudub atribuut id.", - "@diagnosticWritersideTopicMissingRootId": {"description": "Writerside parser diagnostic for an XML topic missing root id."}, + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, "diagnosticWritersideTopicRootIdMismatch": "XML-teema juurelemendi ID „{id}” peab vastama failinimele „{expectedId}”.", "@diagnosticWritersideTopicRootIdMismatch": { "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", - "placeholders": {"id": {"type": "String"}, "expectedId": {"type": "String"}} + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } }, "diagnosticWritersideTopicDuplicateElementId": "Elemendi ID „{elementId}” esineb mitu korda.", "@diagnosticWritersideTopicDuplicateElementId": { "description": "Writerside parser diagnostic for a duplicate XML element ID.", - "placeholders": {"elementId": {"type": "String"}} + "placeholders": { + "elementId": { + "type": "String" + } + } }, "diagnosticWritersideTopicAnchorMissingHref": "Elemendil
puudub atribuut href.", - "@diagnosticWritersideTopicAnchorMissingHref": {"description": "Writerside parser diagnostic for an anchor without href."}, + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, "diagnosticWritersideConfigMissing": "Writerside’i režiim nõuab faili writerside.cfg.", - "@diagnosticWritersideConfigMissing": {"description": "Writerside module diagnostic for a missing writerside.cfg."}, + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, "diagnosticWritersideConfigMissingBuildConfigDirectory": "Seadistatud koostekonfiguratsiooni kataloog puudub: {relativePath}", "@diagnosticWritersideConfigMissingBuildConfigDirectory": { "description": "Writerside module diagnostic for a missing build config directory.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "Seadistatud API-spetsifikatsioonide kataloog puudub: {relativePath}", "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { "description": "Writerside module diagnostic for a missing API specifications directory.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingSnippetsDirectory": "Seadistatud koodilõikude kataloog puudub: {relativePath}", "@diagnosticWritersideConfigMissingSnippetsDirectory": { "description": "Writerside module diagnostic for a missing snippets directory.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingVarsFile": "Seadistatud muutujate fail puudub: {relativePath}", "@diagnosticWritersideConfigMissingVarsFile": { "description": "Writerside module diagnostic for a missing variables file.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingCategoriesFile": "Seadistatud kategooriate fail puudub: {relativePath}", "@diagnosticWritersideConfigMissingCategoriesFile": { "description": "Writerside module diagnostic for a missing categories file.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingInstanceGroupsFile": "Seadistatud eksemplarirühmade fail puudub: {relativePath}", "@diagnosticWritersideConfigMissingInstanceGroupsFile": { "description": "Writerside module diagnostic for a missing instance groups file.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideConfigMissingInstanceTree": "Registreeritud eksemplaripuu faili „{source}” pole olemas.", "@diagnosticWritersideConfigMissingInstanceTree": { "description": "Writerside module diagnostic for a missing registered instance tree.", - "placeholders": {"source": {"type": "String"}} + "placeholders": { + "source": { + "type": "String" + } + } }, "diagnosticWritersideTopicReadFailed": "Teemafaili lugemine nurjus: {error}", "@diagnosticWritersideTopicReadFailed": { "description": "Writerside module diagnostic for a topic file read failure.", - "placeholders": {"error": {"type": "String"}} + "placeholders": { + "error": { + "type": "String" + } + } }, "diagnosticWritersideDefaultTopicsDirectoryMissing": "Vaikimisi teemakataloog puudub: {relativePath}", "@diagnosticWritersideDefaultTopicsDirectoryMissing": { "description": "Writerside module diagnostic for a missing default topics directory.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideTopicsDirectoryMissing": "Seadistatud teemakataloog puudub: {relativePath}", "@diagnosticWritersideTopicsDirectoryMissing": { "description": "Writerside module diagnostic for a missing topics directory.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideImagesDirectoryMissing": "Seadistatud pildikataloog puudub: {relativePath}", "@diagnosticWritersideImagesDirectoryMissing": { "description": "Writerside module diagnostic for a missing images directory.", - "placeholders": {"relativePath": {"type": "String"}} + "placeholders": { + "relativePath": { + "type": "String" + } + } }, "diagnosticWritersideTopicDuplicateId": "Elemendi ID „{id}” esineb mitu korda.", "@diagnosticWritersideTopicDuplicateId": { "description": "Writerside module diagnostic for a duplicate topic element ID.", - "placeholders": {"id": {"type": "String"}} + "placeholders": { + "id": { + "type": "String" + } + } }, "diagnosticWritersideTreeMissingTopic": "Sisukord viitab puuduvale teemale „{topic}”.", "@diagnosticWritersideTreeMissingTopic": { "description": "Writerside module diagnostic for a TOC reference to a missing topic.", - "placeholders": {"topic": {"type": "String"}} + "placeholders": { + "topic": { + "type": "String" + } + } }, "diagnosticWritersideTreeInvalidHref": "Väline href-aadress „{href}” on vigane.", "@diagnosticWritersideTreeInvalidHref": { "description": "Writerside module diagnostic for an invalid external href.", - "placeholders": {"href": {"type": "String"}} + "placeholders": { + "href": { + "type": "String" + } + } }, "diagnosticWritersideVariableUnresolved": "Muutujat „%{name}%” pole deklareeritud.", "@diagnosticWritersideVariableUnresolved": { "description": "Writerside module diagnostic for an undeclared variable.", - "placeholders": {"name": {"type": "String"}} + "placeholders": { + "name": { + "type": "String" + } + } }, "diagnosticWritersideTopicLinkUnresolved": "Teemalink „{destination}” ei viita olemasolevale teemale.", "@diagnosticWritersideTopicLinkUnresolved": { "description": "Writerside module diagnostic for an unresolved topic link.", - "placeholders": {"destination": {"type": "String"}} + "placeholders": { + "destination": { + "type": "String" + } + } }, "diagnosticWritersideAnchorUnresolved": "Ankrut „{anchor}” pole sihtkohas „{targetName}”.", "@diagnosticWritersideAnchorUnresolved": { "description": "Writerside module diagnostic for an unresolved topic anchor.", - "placeholders": {"anchor": {"type": "String"}, "targetName": {"type": "String"}} + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } }, "diagnosticWritersideIncludeMissingFrom": "Elemendil puudub atribuut from.", - "@diagnosticWritersideIncludeMissingFrom": {"description": "Writerside module diagnostic for an include without a from attribute."}, + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, "diagnosticWritersideIncludeSourceMissing": "Kaasatavat allikat „{from}” pole olemas.", "@diagnosticWritersideIncludeSourceMissing": { "description": "Writerside module diagnostic for a missing include source.", - "placeholders": {"from": {"type": "String"}} + "placeholders": { + "from": { + "type": "String" + } + } }, "diagnosticWritersideIncludeElementMissing": "Kaasatavat elementi „{elementId}” pole allikas „{from}”.", "@diagnosticWritersideIncludeElementMissing": { "description": "Writerside module diagnostic for a missing include element.", - "placeholders": {"elementId": {"type": "String"}, "from": {"type": "String"}} + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } }, "diagnosticWritersideCategoryUnresolved": "Seealso-kategooriat „{ref}” pole deklareeritud.", "@diagnosticWritersideCategoryUnresolved": { "description": "Writerside module diagnostic for an unresolved seealso category.", - "placeholders": {"ref": {"type": "String"}} + "placeholders": { + "ref": { + "type": "String" + } + } }, "diagnosticWritersideTopicAmbiguousReference": "Teemaviide „{reference}” pole ühene.", "@diagnosticWritersideTopicAmbiguousReference": { "description": "Writerside module diagnostic for an ambiguous topic reference.", - "placeholders": {"reference": {"type": "String"}} + "placeholders": { + "reference": { + "type": "String" + } + } }, "diagnosticUnknown": "Tundmatu diagnostikateade: {code}", "@diagnosticUnknown": { "description": "Fallback text for an unknown diagnostic code.", - "placeholders": {"code": {"type": "String"}} + "placeholders": { + "code": { + "type": "String" + } + } }, - "close": "Sulge", - "@close": {"description": "Close action label."}, + "@close": { + "description": "Close action label." + }, "git": "Git", - "@git": {"description": "Git sidebar tab label."}, + "@git": { + "description": "Git sidebar tab label." + }, "gitDiff": "Giti erinevused", - "@gitDiff": {"description": "Title for the Git diff viewer."}, + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, "gitShowDiff": "Kuva erinevused", - "@gitShowDiff": {"description": "Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "vana {oldRange} → uus {newRange}", "@gitDiffHunkRange": { "description": "Readable old-to-new line range shown for a Git diff hunk.", "placeholders": { - "oldRange": {"type": "String"}, - "newRange": {"type": "String"} + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } } }, "gitDiffNoLines": "ridu pole", - "@gitDiffNoLines": {"description": "Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git pole saadaval", - "@gitUnavailableTitle": {"description": "Git empty state title when Git cannot be used."}, + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, "gitUnavailableMessage": "{reason, select, other{Paigalda Git või seadista BusyMark kasutama saadaolevat Giti täitmisfaili. {reason}}}", "@gitUnavailableMessage": { "description": "Git empty state message when Git cannot be used.", - "placeholders": {"reason": {"type": "String"}} + "placeholders": { + "reason": { + "type": "String" + } + } }, "gitTrustRequiredTitle": "Kas usaldada seda tööruumi Giti jaoks?", - "@gitTrustRequiredTitle": {"description": "Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Giti hoidlad võivad haakide, filtrite ja muude seadistuste kaudu programme käivitada. Usalda seda tööruumi enne, kui BusyMark loeb hoidla andmeid või lubab Giti toimingud.", - "@gitTrustRequiredMessage": {"description": "Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Usalda tööruumi", - "@gitTrustWorkspace": {"description": "Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Pole Giti hoidla", - "@gitNotRepositoryTitle": {"description": "Git empty state title for non-repository workspaces."}, + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, "gitNotRepositoryMessage": "See tööruum ei asu Giti hoidlas.", - "@gitNotRepositoryMessage": {"description": "Git empty state message for non-repository workspaces."}, + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, "gitInitializeRepository": "Loo Giti hoidla", - "@gitInitializeRepository": {"description": "Action label for git init."}, + "@gitInitializeRepository": { + "description": "Action label for git init." + }, "gitDetachedHead": "Eraldatud HEAD", - "@gitDetachedHead": {"description": "Detached HEAD label."}, + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, "gitDetachedHeadAt": "Eraldatud HEAD commitil {commit}", "@gitDetachedHeadAt": { "description": "Detached HEAD label with short commit.", - "placeholders": {"commit": {"type": "String"}} + "placeholders": { + "commit": { + "type": "String" + } + } }, "gitNoUpstream": "Upstream-haru puudub", - "@gitNoUpstream": {"description": "Repository label when no upstream branch is configured."}, + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, "gitAheadCount": "{count, plural, one{1 saatmata commit} other{{count} saatmata commiti}}", "@gitAheadCount": { "description": "Count of local commits not pushed to the upstream branch.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "gitBehindCount": "{count, plural, one{1 tõmbamata commit} other{{count} tõmbamata commiti}}", "@gitBehindCount": { "description": "Count of upstream commits not pulled into the local branch.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "gitClean": "Muudatusi pole", - "@gitClean": {"description": "Git clean state label."}, + "@gitClean": { + "description": "Git clean state label." + }, "gitConflicts": "Konfliktid", - "@gitConflicts": {"description": "Git conflicts group label."}, + "@gitConflicts": { + "description": "Git conflicts group label." + }, "gitChanges": "Muudatused", - "@gitChanges": {"description": "Git changes view label."}, + "@gitChanges": { + "description": "Git changes view label." + }, "gitHistory": "Ajalugu", - "@gitHistory": {"description": "Git history view label."}, + "@gitHistory": { + "description": "Git history view label." + }, "gitBranches": "Harud", - "@gitBranches": {"description": "Git branch menu label."}, + "@gitBranches": { + "description": "Git branch menu label." + }, "gitActions": "Giti toimingud", - "@gitActions": {"description": "Tooltip for the Git action menu button."}, + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, "gitPull": "Pull", - "@gitPull": {"description": "Git pull action label."}, + "@gitPull": { + "description": "Git pull action label." + }, "gitPush": "Push", - "@gitPush": {"description": "Git push action label."}, + "@gitPush": { + "description": "Git push action label." + }, "gitCommit": "Commit", - "@gitCommit": {"description": "Git commit action label."}, + "@gitCommit": { + "description": "Git commit action label." + }, "gitSelectForCommit": "Lisa fail indeksisse", - "@gitSelectForCommit": {"description": "Tooltip for staging a Git file."}, + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, "gitRemoveFromCommit": "Eemalda fail indeksist", - "@gitRemoveFromCommit": {"description": "Tooltip for unstaging a Git file."}, + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, "gitDiscard": "Hülga", - "@gitDiscard": {"description": "Git discard action label."}, + "@gitDiscard": { + "description": "Git discard action label." + }, "gitOpenFile": "Ava fail", - "@gitOpenFile": {"description": "Action label for opening a file from a Git row or diff."}, + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, "gitMarkResolved": "Märgi lahendatuks", - "@gitMarkResolved": {"description": "Tooltip for marking a conflicted Git file as resolved."}, + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, "gitUntracked": "Jälgimata failid", - "@gitUntracked": {"description": "Git untracked files group label."}, + "@gitUntracked": { + "description": "Git untracked files group label." + }, "gitCommitMessage": "Commiti sõnum", - "@gitCommitMessage": {"description": "Commit message field label."}, + "@gitCommitMessage": { + "description": "Commit message field label." + }, "gitCommitSelectedFiles": "Valitud failid", - "@gitCommitSelectedFiles": {"description": "Commit panel selected files section label."}, + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, "gitCommitNoSelectedFiles": "Lisa enne commiti loomist vähemalt üks fail indeksisse.", - "@gitCommitNoSelectedFiles": {"description": "Commit validation error when the repository index is empty."}, + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, "gitCommitMessageRequired": "Sisesta commiti sõnum.", - "@gitCommitMessageRequired": {"description": "Commit validation error when the message is empty."}, + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, "gitCreateBranch": "Loo haru", - "@gitCreateBranch": {"description": "Git create branch action label."}, + "@gitCreateBranch": { + "description": "Git create branch action label." + }, "gitNewBranch": "Uus haru", - "@gitNewBranch": {"description": "Git branch dropdown action for creating a new branch."}, + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, "gitBranchName": "Haru nimi", - "@gitBranchName": {"description": "Branch name field label."}, + "@gitBranchName": { + "description": "Branch name field label." + }, "gitSwitchBranch": "Vaheta", - "@gitSwitchBranch": {"description": "Git switch branch action label."}, + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, "gitNoChanges": "Muudatusi pole", - "@gitNoChanges": {"description": "Git empty state when there are no changes."}, + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, "gitNoHistory": "Ajalugu puudub", - "@gitNoHistory": {"description": "Git empty state when history is empty."}, + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, "gitNoBranches": "Harusid pole", - "@gitNoBranches": {"description": "Git empty state when branch list is empty."}, + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, "gitNoDiff": "Kuvatavaid erinevusi pole", - "@gitNoDiff": {"description": "Git diff empty state."}, + "@gitNoDiff": { + "description": "Git diff empty state." + }, "gitBinaryFile": "Binaarfail. BusyMark ei kuva binaarpaiku.", - "@gitBinaryFile": {"description": "Git diff binary file message."}, + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, "gitUnsavedChangesBanner": "Redaktori salvestamata muudatusi ei kaasata enne salvestamist.", - "@gitUnsavedChangesBanner": {"description": "Git diff banner for unsaved editor changes."}, + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, "gitConfirmDiscardTitle": "Kas hüljata Giti muudatused?", - "@gitConfirmDiscardTitle": {"description": "Confirmation title for discarding Git changes."}, - "gitConfirmDiscardTracked": "{count, plural, one{Valitud jälgitav fail taastatakse Gitist.} other{Valitud jälgitavad failid taastatakse Gitist.}}", + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, + "gitConfirmDiscardTracked": "{count, plural, =1{Valitud jälgitava faili kõiki indekseeritud ja indekseerimata muudatusi taastatakse HEAD-ile.} other{Valitud jälgitavate failide kõiki indekseeritud ja indekseerimata muudatusi taastatakse HEAD-ile.}}", "@gitConfirmDiscardTracked": { "description": "Confirmation body for discarding tracked changes.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "gitConfirmDiscardUntracked": "{count, plural, one{Valitud jälgimata fail kustutatakse.} other{Valitud jälgimata failid kustutatakse.}}", "@gitConfirmDiscardUntracked": { "description": "Confirmation body for deleting untracked files.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "gitConfirmDiscardMixed": "{count, plural, one{Valitud fail taastatakse või kustutatakse vastavalt selle Giti olekule.} other{Valitud failid taastatakse või kustutatakse vastavalt nende Giti olekule.}}", "@gitConfirmDiscardMixed": { "description": "Confirmation body for discarding mixed tracked and untracked files.", - "placeholders": {"count": {"type": "int"}} + "placeholders": { + "count": { + "type": "int" + } + } }, "gitConfirmSwitchBranchTitle": "Kas minna üle harule „{branch}”?", "@gitConfirmSwitchBranchTitle": { "description": "Confirmation title for switching branches.", - "placeholders": {"branch": {"type": "String"}} + "placeholders": { + "branch": { + "type": "String" + } + } }, "gitConfirmSwitchBranchMessage": "Pärast haru vahetamist laadib BusyMark tööruumi kettalt uuesti.", - "@gitConfirmSwitchBranchMessage": {"description": "Confirmation body for switching branches."}, + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, "gitConfirmPushSetUpstreamTitle": "Kas määrata upstream-haru?", - "@gitConfirmPushSetUpstreamTitle": {"description": "Confirmation title for pushing with set-upstream."}, + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, "gitConfirmPushSetUpstreamMessage": "Sellel harul pole upstream-haru. Kui seadistatud on täpselt üks kaughoidla, saab BusyMark haru „{branch}” sinna saata ja määrata selle upstream-haruks.", "@gitConfirmPushSetUpstreamMessage": { "description": "Confirmation body for pushing with set-upstream.", - "placeholders": {"branch": {"type": "String"}} + "placeholders": { + "branch": { + "type": "String" + } + } + }, + "gitProjectHistory": "Projekti ajalugu", + "@gitProjectHistory": { + "description": "Project history action label." + }, + "gitFileHistory": "Faili ajalugu", + "@gitFileHistory": { + "description": "Current file history action label." }, - "gitProjectHistory": "Projekt", - "@gitProjectHistory": {"description": "Project history action label."}, - "gitFileHistory": "Praegune fail", - "@gitFileHistory": {"description": "Current file history action label."}, "gitAdditionsDeletions": "+{additions} -{deletions}", "@gitAdditionsDeletions": { "description": "Diff additions and deletions count.", - "placeholders": {"additions": {"type": "int"}, "deletions": {"type": "int"}} + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } }, "fileActions": "Failitoimingud", - "@fileActions": {"description": "Tooltip for a file action menu."}, + "@fileActions": { + "description": "Tooltip for a file action menu." + }, "actions": "Toimingud", "gitStatusAdded": "Lisatud", - "@gitStatusAdded": {"description": "Git file status label."}, + "@gitStatusAdded": { + "description": "Git file status label." + }, "gitStatusDeleted": "Kustutatud", - "@gitStatusDeleted": {"description": "Git file status label."}, + "@gitStatusDeleted": { + "description": "Git file status label." + }, "gitStatusRenamed": "Ümbernimetatud", - "@gitStatusRenamed": {"description": "Git file status label."}, + "@gitStatusRenamed": { + "description": "Git file status label." + }, "gitStatusCopied": "Kopeeritud", - "@gitStatusCopied": {"description": "Git file status label."}, + "@gitStatusCopied": { + "description": "Git file status label." + }, "gitStatusUntracked": "Jälgimata", - "@gitStatusUntracked": {"description": "Git file status label."}, + "@gitStatusUntracked": { + "description": "Git file status label." + }, "gitStatusConflicted": "Konfliktis", - "@gitStatusConflicted": {"description": "Git file status label."}, + "@gitStatusConflicted": { + "description": "Git file status label." + }, "gitStatusIgnored": "Eiratud", - "@gitStatusIgnored": {"description": "Git file status label."}, + "@gitStatusIgnored": { + "description": "Git file status label." + }, "gitStatusTypeChanged": "Tüüp muutunud", - "@gitStatusTypeChanged": {"description": "Git file status label."}, + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, "gitStatusModified": "Muudetud", - "@gitStatusModified": {"description": "Git file status label."}, + "@gitStatusModified": { + "description": "Git file status label." + }, "gitStatusUnknown": "Tundmatu", - "@gitStatusUnknown": {"description": "Git file status label."}, + "@gitStatusUnknown": { + "description": "Git file status label." + }, "gitErrorUnavailable": "Git pole saadaval.", - "@gitErrorUnavailable": {"description": "Git error message."}, + "@gitErrorUnavailable": { + "description": "Git error message." + }, "gitErrorNotRepository": "See tööruum pole Giti hoidla.", - "@gitErrorNotRepository": {"description": "Git error message."}, + "@gitErrorNotRepository": { + "description": "Git error message." + }, "gitErrorUnsafePath": "BusyMark blokeeris ebaturvalise Giti tee.", - "@gitErrorUnsafePath": {"description": "Git error message."}, + "@gitErrorUnsafePath": { + "description": "Git error message." + }, "gitErrorInvalidBranchName": "Sisesta sobiv haru nimi.", - "@gitErrorInvalidBranchName": {"description": "Git error message."}, + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, "gitErrorNoRemote": "Ühtegi Giti kaughoidlat pole seadistatud.", - "@gitErrorNoRemote": {"description": "Git error message."}, + "@gitErrorNoRemote": { + "description": "Git error message." + }, "gitErrorNoUpstream": "Upstream-haru pole seadistatud.", - "@gitErrorNoUpstream": {"description": "Git error message."}, + "@gitErrorNoUpstream": { + "description": "Git error message." + }, "gitErrorMultipleRemotes": "Seadistatud on mitu kaughoidlat. Vali upstream-haru mõne muu tööriistaga; see BusyMarki versioon seda ei võimalda.", - "@gitErrorMultipleRemotes": {"description": "Git error message."}, + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, "gitErrorDirtyWorkspace": "Enne haru vahetamist salvesta või hülga BusyMarki redaktori muudatused.", - "@gitErrorDirtyWorkspace": {"description": "Git error message."}, + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, "gitErrorDiverged": "Haru ajalugu on lahknenud. Lahenda ühendamine või ümberbaasimine mõne muu tööriistaga; see BusyMarki versioon seda ei võimalda.", "gitErrorAuthorIdentity": "Git vajab enne sissekande loomist autori nime ja e-posti aadressi.", "gitAuthorIdentityTitle": "Giti autori identiteet", @@ -1568,104 +2995,258 @@ "gitAuthorIdentityGlobal": "Kasuta kõigis hoidlates", "gitAuthorIdentityGlobalDescription": "Snapi paigalduses kehtib see BusyMarkis avatud hoidlatele.", "gitSaveIdentityAndCommit": "Salvesta ja loo sissekanne", - "@gitErrorDiverged": {"description": "Git error message."}, + "@gitErrorDiverged": { + "description": "Git error message." + }, "gitErrorAuthentication": "Giti autentimine nurjus.", - "@gitErrorAuthentication": {"description": "Git error message."}, + "@gitErrorAuthentication": { + "description": "Git error message." + }, "gitErrorNetwork": "Giti võrgutoiming nurjus.", - "@gitErrorNetwork": {"description": "Git error message."}, + "@gitErrorNetwork": { + "description": "Git error message." + }, "gitErrorConflict": "Git teatas lahendamata konfliktidest.", - "@gitErrorConflict": {"description": "Git error message."}, + "@gitErrorConflict": { + "description": "Git error message." + }, "gitErrorCommandFailed": "Giti käsk nurjus.", - "@gitErrorCommandFailed": {"description": "Git error message."}, - + "@gitErrorCommandFailed": { + "description": "Git error message." + }, "markdownAndHtml": "Markdown ja HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdowni plokid", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Markdowni lähtekoodis ja eelvaates toetatud plokkstruktuurid.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Reasisene Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Vormindus, mida saab kasutada lõikudes, loendiüksustes ja tabelilahtrites.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Töötlemata HTML-plokid", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Turvalised plokitaseme HTML-märgendid, mis kuvatakse BusyMarki eelvaatevidinate kaudu.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Reasisesed töötlemata HTML-märgendid", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Turvalised reasisesed HTML-märgendid, mis kuvatakse märgendeid endid näitamata.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Ohutusreeglid", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Töötlemata HTML parsitakse ja puhastatakse enne eelvaates kuvamist.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Pealkirjad", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Lõigud", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Loendid", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Konteinerid", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Tekstiplokid", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Joonised ja pildid", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Eelvormindatud kood", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Laiendatavad plokid", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Kirjeldusloendid", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Vormindusmärgendid", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Reasisesed koodimärgendid", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Semantilised tekstimärgendid", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Puhastatud eelvaade", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Lubatud HTML teisendatakse BusyMarki eelvaateplokkideks; seda ei kuvata brauseris.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Lähtekood säilitatakse", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Redigeerimata töötlemata HTML salvestatakse lähdetekstina täpselt algsel kujul.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown HTML-is", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Töötlemata HTML-is olevad Markdowni vormindusmärgid kuvatakse lihttekstina.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Blokeeritud aktiivsisu", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Skriptid, stiilid, raamid, vormid, SVG, MathML, sündmused ja ebaturvalised atribuudid blokeeritakse.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Ainult turvalised URL-id", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Linkides on lubatud HTTP-, HTTPS-, mailto- ja tel-skeemiga URL-id ning suhtelised ja fragmendi-URL-id; ebaturvalised skeemid blokeeritakse.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, - "exportAsPdf": "Ekspordi PDF-ina", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Vali viimistletud ja iseseisva PDF-i leheküljendus.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "Kaugpilte eksportimisel alla ei laadita. Kohalikud pildid lisatakse, kui need on saadaval.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Lehe suurus", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "USA Letter", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Paigutus", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Püstpaigutus", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Rõhtpaigutus", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Veerised", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Kitsad", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Tavalised", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Laiad", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Lisa leheküljenumbrid", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Ekspordi", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "PDF-i eksportimine…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "PDF-dokument", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "{fileName} eksporditi.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} eksporditi. Lisamata jäänud pilte: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "PDF-i ekspordikomponent puudub. Paigalda BusyMark uuesti ja proovi veel kord.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "PDF-i eksport võttis liiga kaua aega ja peatati.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark ei saanud seda dokumenti PDF-ina eksportida.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, + "exportAsPdf": "Ekspordi PDF-ina", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Vali viimistletud ja iseseisva PDF-i leheküljendus.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Kaugpilte eksportimisel alla ei laadita. Kohalikud pildid lisatakse, kui need on saadaval.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Lehe suurus", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "USA Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Paigutus", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Püstpaigutus", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Rõhtpaigutus", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Veerised", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Kitsad", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Tavalised", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Laiad", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Lisa leheküljenumbrid", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Ekspordi", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "PDF-i eksportimine…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "PDF-dokument", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} eksporditi.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} eksporditi {count, plural, =1{1 hoiatusuga} other{{count} hoiatusaga}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "PDF-i ekspordikomponent puudub. Paigalda BusyMark uuesti ja proovi veel kord.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "PDF-i eksport võttis liiga kaua aega ja peatati.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark ei saanud seda dokumenti PDF-ina eksportida.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Renderdamine…", "visualizationStale": "Kuvatakse viimast kehtivat renderdust", "visualizationShowSource": "Kuva lähtekood", @@ -1686,7 +3267,10 @@ "visualizationRenderFailed": "Seda visualiseeringut ei saanud renderdada.", "visualizationRetry": "Proovi uuesti", "visualizationSaved": "{fileName} on salvestatud", - "shortcutExportPdfDescription": "Ekspordi aktiivne dokument või Writerside’i moodul PDF-ina.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "Ekspordi aktiivne dokument või Writerside’i moodul PDF-ina.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Indekseeritud", "gitUnstaged": "Indekseerimata", "gitFetch": "Hangi", @@ -1803,7 +3387,6 @@ "ai": "TI", "aiLocalOllama": "Kohalik Ollama", "aiDisabled": "Keelatud", - "aiLocalOnlyDescription": "Tehisintellektiga redigeerimine käivitatakse ainult selgesõnaliselt. BusyMark saadab valitud teenusepakkujale üksnes kuvatud konteksti ega rakenda ettepanekut ilma ülevaatuseta.", "aiProvider": "TI-teenuse pakkuja", "aiDefaultProvider": "Vaikimisi teenusepakkuja", "aiConfigureProvider": "Seadista teenusepakkujat", @@ -1917,14 +3500,18 @@ "reloadFromDisk": "Laadi kettalt uuesti", "keepMine": "Säilita minu versioon", "saveAs": "Salvesta nimega", - "unsavedChangesMultipleMessage": "{count} dokumendis on salvestamata muudatusi. Kas salvestada need enne jätkamist?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 dokumendil on salvestamata muudatusi. Salvestage see enne jätkamist.} other{{count} dokumendil on salvestamata muudatusi. Salvestage need enne jätkamist.}}", "workspaceReplaceIssuePartialConflict": "Tagasivõtmine peatati, sest faili muudeti samal ajal. Mõned asendused võivad alles jääda; väljatõrjutud sisu säilitati alloleval teel.", "workspaceReplaceIssueApplyFailed": "Asendusi ei rakendatud, sest läbivaadatud kogumit ei saanud turvaliselt salvestada.", - "workspaceRecoveryRestored": "Taastati {count} salvestamata dokumenti. Vaadake iga taastatud dokument enne jätkamist üle.", - "workspaceRecoveryDamaged": "{count} rikutud taastekirjet ei saanud taastada. Kehtivad taastatud dokumendid on endiselt saadaval.", + "workspaceRecoveryRestored": "{count, plural, =1{Taastati 1 salvestamata dokumendi. Kontrolli see enne salvestamist või hülgamist.} other{Taastati {count} salvestamata dokumenti. Kontrolli igaüht enne salvestamist või hülgamist.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Ühte kahjustunud taastamiskirjet ei õnnestunud taastada. Algne taastamisfail on ülevaatuseks alles jäetud.} other{{count} kahjustunud taastamiskirjet ei õnnestunud taastada. Kehtivad taastamiskirjed jäävad alles.}}", "recoveredDocumentReview": "Faili {fileName} salvestamata sisu taastati. Vaadake see üle ning salvestage, salvestage nimega või hüljake.", "commandUnavailableInContext": "See käsk pole praeguses kontekstis saadaval.", "mathRenderFailed": "Matemaatilist avaldist ei saanud kuvada.", "inlineMath": "Reasisene matemaatika", - "displayMath": "Plokina matemaatika" + "displayMath": "Plokina matemaatika", + "aiExplicitEditingDescription": "Tehisintellektiga redigeerimine käivitatakse ainult selgesõnaliselt. BusyMark saadab valitud teenusepakkujale üksnes kuvatud konteksti ega rakenda ettepanekut ilma ülevaatuseta.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb index 7191b2f1..f8dd81f7 100644 --- a/lib/l10n/app_fa.arb +++ b/lib/l10n/app_fa.arb @@ -24,7 +24,7 @@ "feedbackRateLimitedFailure": "گزارش‌های زیادی از این اتصال ارسال شده است. کمی صبر کنید و دوباره تلاش کنید.", "feedbackRejectedFailure": "سرور گزارش را رد کرد. فیلدهای فرم را بررسی کنید و دوباره تلاش کنید.", "feedbackServerFailure": "سرور نتوانست گزارش را بپذیرد. بعداً دوباره تلاش کنید.", - "feedbackSuccess": "بازخورد ارسال شد. شناسهٔ مرجع: \u2068{id}\u2069", + "feedbackSuccess": "بازخورد ارسال شد. شناسهٔ مرجع: ⁨{id}⁩", "appTitle": "BusyMark", "@appTitle": { "description": "Application name." @@ -126,7 +126,7 @@ "moveSectionUp": "انتقال بخش به بالا", "moveSectionDown": "انتقال بخش به پایین", "confirmDeleteSectionTitle": "بخش حذف شود؟", - "confirmDeleteSectionMessage": "«\u2068{name}\u2069» و همهٔ محتوای بخش آن حذف شود؟ این کار قابل بازگشت نیست.", + "confirmDeleteSectionMessage": "«⁨{name}⁩» و همهٔ محتوای بخش آن حذف شود؟ این کار قابل بازگشت نیست.", "darkTheme": "تیره", "@darkTheme": { "description": "Dark theme option." @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "حذف مورد انتخاب‌شده در فایل‌ها یا برداشتن موضوع انتخاب‌شده از فهرست مطالب", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "عمومی", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "درج تورفتگی", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "درج تورفتگی در مکان‌نما", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "کاهش تورفتگی در حالت منبع", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "حذف یک سطح تورفتگی در حالت منبع", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "بستن جستجو یا پاک کردن انتخاب بلوک‌ها", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "حریم خصوصی", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "بارگیری تصاویر راه دور", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "اجازه دهید تصاویر پیش‌نمایش و ویرایشگر Markdown از نشانی‌های http و https بارگیری شوند.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "پاک کردن مجوزهای تصاویر راه دور", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "فضاهای کاری‌ای را که اجازهٔ بارگیری تصاویر راه دور داشتند، فراموش کنید.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "پاک کردن فضاهای کاری مورد اعتماد Git", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "پیش از فعال‌کردن ویژگی‌های Git برای فضاهای کاری که قبلاً مورد اعتماد بوده‌اند، پرسیده شود.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "پنجره", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "باز کردن دوبارهٔ فضای کاری قبلی هنگام راه‌اندازی", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "هنگام راه‌اندازی BusyMark، فضای کاری و زبانه‌های نشست قبلی باز شوند.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "تأیید پیش از بستن با تغییرات ذخیره‌نشده", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -790,7 +821,8 @@ "description": "Window close confirmation message when multiple documents have unsaved changes.", "placeholders": { "count": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -814,7 +846,7 @@ "@unsavedChanges": { "description": "Unsaved changes dialog title." }, - "unsavedChangesMessage": "در \u2068{fileName}\u2069 تغییرات ذخیره‌نشده دارید. قبل از ادامه ذخیره شوند؟", + "unsavedChangesMessage": "در ⁨{fileName}⁩ تغییرات ذخیره‌نشده دارید. قبل از ادامه ذخیره شوند؟", "@unsavedChangesMessage": { "description": "Unsaved changes confirmation message.", "placeholders": { @@ -980,12 +1012,13 @@ "@heading6": { "description": "Heading 6 style label." }, - "headingLevelAbbreviation": "\u2068H{level}\u2069", + "headingLevelAbbreviation": "⁨H{level}⁩", "@headingLevelAbbreviation": { "description": "Compact outline badge for a heading level.", "placeholders": { "level": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -998,7 +1031,8 @@ "description": "Tooltip for a table column control.", "placeholders": { "columnNumber": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -1019,7 +1053,8 @@ "description": "Tooltip for a table row control.", "placeholders": { "rowNumber": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -1060,11 +1095,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "متن", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "کد", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "متن جایگزین", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "تصویر را توصیف کنید", "@describeTheImage": { "description": "Image alt text hint." @@ -1082,7 +1123,8 @@ "description": "Default header text for a newly inserted table column.", "placeholders": { "columnNumber": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -1095,18 +1137,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "تصویر راه دور مسدود است", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "انتخاب کنید BusyMark اجازهٔ بارگیری تصاویر راه دور داشته باشد یا نه.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "تصاویر راه دور مسدود شده‌اند", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "این سند به تصاویری در اینترنت ارجاع می‌دهد. بارگیری آن‌ها ممکن است اطلاعات شبکه را برای میزبان تصویر آشکار کند.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "بارگیری برای این فضای کاری", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "همیشه تصاویر راه دور بارگیری شوند", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "پنهان کردن پنل کناری", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1148,7 +1201,8 @@ "description": "Count of diagnostics in the workspace.", "placeholders": { "count": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -1176,7 +1230,8 @@ "type": "String" }, "count": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -1240,7 +1295,7 @@ "@confirmRemoveFromTocTitle": { "description": "Confirmation title before removing a Writerside TOC entry." }, - "confirmRemoveFromTocMessage": "\u2068{name}\u2069 از این فهرست مطالب حذف شود؟ فایل موضوع حفظ خواهد شد.", + "confirmRemoveFromTocMessage": "⁨{name}⁩ از این فهرست مطالب حذف شود؟ فایل موضوع حفظ خواهد شد.", "@confirmRemoveFromTocMessage": { "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", "placeholders": { @@ -1253,7 +1308,7 @@ "@confirmDeleteTopicTitle": { "description": "Confirmation title before deleting a Writerside topic file." }, - "confirmDeleteTopicMessage": "\u2068{name}\u2069 حذف و از همهٔ فهرست‌های مطالب برداشته شود؟ این کار قابل بازگشت نیست.", + "confirmDeleteTopicMessage": "⁨{name}⁩ حذف و از همهٔ فهرست‌های مطالب برداشته شود؟ این کار قابل بازگشت نیست.", "@confirmDeleteTopicMessage": { "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", "placeholders": { @@ -1286,7 +1341,7 @@ "@useSingleSafeFileName": { "description": "Validation message for unsafe file names." }, - "useExpectedExtension": "از پسوند \u2068{extension}\u2069 برای قالب انتخاب‌شده استفاده کنید.", + "useExpectedExtension": "از پسوند ⁨{extension}⁩ برای قالب انتخاب‌شده استفاده کنید.", "@useExpectedExtension": { "description": "Validation message for an unexpected file extension.", "placeholders": { @@ -1346,19 +1401,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "تطابق قبلی", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "تطابق بعدی", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "حساس به بزرگی و کوچکی حروف", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "تمام کلمه", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "عبارت منظم", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "عبارت منظم نامعتبر است", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "فایل بزرگ: برجسته‌سازی و جمع‌کردن موقتاً متوقف شده‌اند", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "محتوایی برای مطالعه وجود ندارد", "admonition": "کادر هشدار", "quote": "نقل‌قول", @@ -1401,7 +1470,7 @@ "@chapter": { "description": "Preview label for a chapter element." }, - "couldNotOpenTarget": "باز کردن \u2068{target}\u2069 ممکن نشد", + "couldNotOpenTarget": "باز کردن ⁨{target}⁩ ممکن نشد", "@couldNotOpenTarget": { "description": "Toast shown when a link target cannot be opened.", "placeholders": { @@ -1410,7 +1479,7 @@ } } }, - "linkTargetNotFound": "مقصد پیوند یافت نشد: \u2068{targetPath}\u2069", + "linkTargetNotFound": "مقصد پیوند یافت نشد: ⁨{targetPath}⁩", "@linkTargetNotFound": { "description": "Toast shown when a link target path is missing.", "placeholders": { @@ -1423,7 +1492,7 @@ "@cannotOpenFileTypeInEditor": { "description": "Toast shown when a file type cannot be opened in the editor." }, - "anchorNotFound": "لنگر یافت نشد: \u2068{anchor}\u2069", + "anchorNotFound": "لنگر یافت نشد: ⁨{anchor}⁩", "@anchorNotFound": { "description": "Toast shown when a link anchor is missing.", "placeholders": { @@ -1440,7 +1509,7 @@ "@noResults": { "description": "Search empty state." }, - "searchResultLine": "\u2068{relativePath}\u2069 — خط \u2068{lineNumber}\u2069", + "searchResultLine": "⁨{relativePath}⁩ — خط ⁨{lineNumber}⁩", "@searchResultLine": { "description": "Search result subtitle with file path and line number.", "placeholders": { @@ -1448,7 +1517,8 @@ "type": "String" }, "lineNumber": { - "type": "int", "format": "decimalPattern" + "type": "int", + "format": "decimalPattern" } } }, @@ -1488,7 +1558,7 @@ "@documentKindResourceFile": { "description": "Search result document kind label." }, - "workspaceErrorOpenFailed": "باز کردن ناموفق بود: \u2068{error}\u2069", + "workspaceErrorOpenFailed": "باز کردن ناموفق بود: ⁨{error}⁩", "@workspaceErrorOpenFailed": { "description": "Workspace error message shown when opening a path fails.", "placeholders": { @@ -1497,7 +1567,7 @@ } } }, - "workspaceErrorCreateWritersideProjectFailed": "ایجاد پروژه Writerside ناموفق بود: \u2068{error}\u2069", + "workspaceErrorCreateWritersideProjectFailed": "ایجاد پروژه Writerside ناموفق بود: ⁨{error}⁩", "@workspaceErrorCreateWritersideProjectFailed": { "description": "Workspace error message shown when Writerside project creation fails.", "placeholders": { @@ -1506,7 +1576,7 @@ } } }, - "workspaceErrorCreateWritersideTopicFailed": "ایجاد موضوع Writerside ناموفق بود: \u2068{error}\u2069", + "workspaceErrorCreateWritersideTopicFailed": "ایجاد موضوع Writerside ناموفق بود: ⁨{error}⁩", "@workspaceErrorCreateWritersideTopicFailed": { "description": "Workspace error message shown when Writerside topic creation fails.", "placeholders": { @@ -1515,7 +1585,7 @@ } } }, - "workspaceErrorCouldNotOpenFile": "باز کردن فایل ممکن نشد: \u2068{error}\u2069", + "workspaceErrorCouldNotOpenFile": "باز کردن فایل ممکن نشد: ⁨{error}⁩", "@workspaceErrorCouldNotOpenFile": { "description": "Workspace error message shown when opening a file fails.", "placeholders": { @@ -1532,7 +1602,7 @@ "@workspaceErrorSaveBlockedFileChangedOnDisk": { "description": "Workspace error message shown when a save is blocked by external changes." }, - "workspaceErrorSaveFailed": "ذخیره ناموفق بود: \u2068{error}\u2069", + "workspaceErrorSaveFailed": "ذخیره ناموفق بود: ⁨{error}⁩", "@workspaceErrorSaveFailed": { "description": "Workspace error message shown when saving fails.", "placeholders": { @@ -1541,7 +1611,7 @@ } } }, - "workspaceErrorValidationFailed": "اعتبارسنجی ناموفق بود: \u2068{error}\u2069", + "workspaceErrorValidationFailed": "اعتبارسنجی ناموفق بود: ⁨{error}⁩", "@workspaceErrorValidationFailed": { "description": "Workspace error message shown when validation fails.", "placeholders": { @@ -1550,7 +1620,7 @@ } } }, - "errorPathDoesNotExist": "مسیر وجود ندارد: \u2068{path}\u2069", + "errorPathDoesNotExist": "مسیر وجود ندارد: ⁨{path}⁩", "@errorPathDoesNotExist": { "description": "Detail for a missing path error.", "placeholders": { @@ -1559,7 +1629,7 @@ } } }, - "errorTargetDirectoryNotEmpty": "پوشه مقصد از قبل وجود دارد و خالی نیست: \u2068{path}\u2069", + "errorTargetDirectoryNotEmpty": "پوشه مقصد از قبل وجود دارد و خالی نیست: ⁨{path}⁩", "@errorTargetDirectoryNotEmpty": { "description": "Detail for a non-empty target directory error.", "placeholders": { @@ -1568,7 +1638,7 @@ } } }, - "errorTargetPathNotDirectory": "مسیر مقصد از قبل وجود دارد، اما پوشه نیست: \u2068{path}\u2069", + "errorTargetPathNotDirectory": "مسیر مقصد از قبل وجود دارد، اما پوشه نیست: ⁨{path}⁩", "@errorTargetPathNotDirectory": { "description": "Detail for a target path that is not a directory.", "placeholders": { @@ -1577,7 +1647,7 @@ } } }, - "errorGeneratedFileAlreadyExists": "فایل تولیدشده از قبل وجود دارد: \u2068{path}\u2069", + "errorGeneratedFileAlreadyExists": "فایل تولیدشده از قبل وجود دارد: ⁨{path}⁩", "@errorGeneratedFileAlreadyExists": { "description": "Detail for a generated file conflict.", "placeholders": { @@ -1590,7 +1660,7 @@ "@errorParentDirectoryRequired": { "description": "Detail for missing parent directory input." }, - "errorParentDirectoryMissing": "پوشه والد وجود ندارد: \u2068{path}\u2069", + "errorParentDirectoryMissing": "پوشه والد وجود ندارد: ⁨{path}⁩", "@errorParentDirectoryMissing": { "description": "Detail for a missing parent directory.", "placeholders": { @@ -1623,7 +1693,7 @@ "@errorTopicTitleRequired": { "description": "Detail for a missing topic title." }, - "errorWritersideModuleRootMissing": "ریشه ماژول Writerside وجود ندارد: \u2068{path}\u2069", + "errorWritersideModuleRootMissing": "ریشه ماژول Writerside وجود ندارد: ⁨{path}⁩", "@errorWritersideModuleRootMissing": { "description": "Detail for a missing Writerside module root.", "placeholders": { @@ -1640,7 +1710,7 @@ "@errorWritersideInstanceTreeMissing": { "description": "Detail shown when creating a topic without a Writerside instance tree." }, - "errorWritersideTreeFileMissing": "فایل درخت Writerside وجود ندارد: \u2068{path}\u2069", + "errorWritersideTreeFileMissing": "فایل درخت Writerside وجود ندارد: ⁨{path}⁩", "@errorWritersideTreeFileMissing": { "description": "Detail for a missing Writerside tree file.", "placeholders": { @@ -1649,7 +1719,7 @@ } } }, - "errorTopicIdAlreadyExists": "شناسه موضوع «\u2068{topicId}\u2069» از قبل در این ماژول راهنما وجود دارد.", + "errorTopicIdAlreadyExists": "شناسه موضوع «⁨{topicId}⁩» از قبل در این ماژول راهنما وجود دارد.", "@errorTopicIdAlreadyExists": { "description": "Detail for a duplicate topic ID.", "placeholders": { @@ -1658,7 +1728,7 @@ } } }, - "errorTopicFileAlreadyExists": "فایل موضوع از قبل وجود دارد: \u2068{path}\u2069", + "errorTopicFileAlreadyExists": "فایل موضوع از قبل وجود دارد: ⁨{path}⁩", "@errorTopicFileAlreadyExists": { "description": "Detail for an existing topic file.", "placeholders": { @@ -1667,7 +1737,7 @@ } } }, - "errorReferenceTopicMissing": "موضوع مرجع در درخت انتخاب‌شده وجود ندارد: \u2068{topic}\u2069", + "errorReferenceTopicMissing": "موضوع مرجع در درخت انتخاب‌شده وجود ندارد: ⁨{topic}⁩", "@errorReferenceTopicMissing": { "description": "Detail for a missing reference topic in a tree.", "placeholders": { @@ -1684,7 +1754,7 @@ "@errorWritersideTocInvalidMove": { "description": "Detail shown when a Writerside TOC move would create a cycle." }, - "errorWritersideStartTopicDelete": "موضوع شروع \u2068{topic}\u2069 را نمی‌توان حذف کرد. ابتدا صفحهٔ شروع دیگری را انتخاب کنید.", + "errorWritersideStartTopicDelete": "موضوع شروع ⁨{topic}⁩ را نمی‌توان حذف کرد. ابتدا صفحهٔ شروع دیگری را انتخاب کنید.", "@errorWritersideStartTopicDelete": { "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", "placeholders": { @@ -1701,7 +1771,7 @@ "@errorTopicFileNameUnsafe": { "description": "Detail for an unsafe topic file name." }, - "errorTopicFileExtensionMismatch": "پسوند فایل موضوع باید با قالب انتخاب‌شده (\u2068{extension}\u2069) مطابقت داشته باشد.", + "errorTopicFileExtensionMismatch": "پسوند فایل موضوع باید با قالب انتخاب‌شده (⁨{extension}⁩) مطابقت داشته باشد.", "@errorTopicFileExtensionMismatch": { "description": "Detail for a topic file extension mismatch.", "placeholders": { @@ -1714,7 +1784,7 @@ "@errorTopicFileNameInvalid": { "description": "Detail for a topic file name with invalid characters." }, - "errorUnknown": "خطای ناشناخته: \u2068{code}\u2069", + "errorUnknown": "خطای ناشناخته: ⁨{code}⁩", "@errorUnknown": { "description": "Fallback detail for an unknown coded application error.", "placeholders": { @@ -1723,7 +1793,7 @@ } } }, - "diagnosticWorkspaceFileStatFailed": "خواندن فرادادهٔ فایل ممکن نشد: \u2068{error}\u2069", + "diagnosticWorkspaceFileStatFailed": "خواندن فرادادهٔ فایل ممکن نشد: ⁨{error}⁩", "@diagnosticWorkspaceFileStatFailed": { "description": "Diagnostic shown when file metadata cannot be read.", "placeholders": { @@ -1736,7 +1806,7 @@ "@diagnosticWorkspaceScanSkipped": { "description": "Diagnostic shown when workspace scanning skips files." }, - "diagnosticWorkspaceScanInspectFailed": "بررسی ورودی فضای کاری ممکن نشد: \u2068{error}\u2069", + "diagnosticWorkspaceScanInspectFailed": "بررسی ورودی فضای کاری ممکن نشد: ⁨{error}⁩", "@diagnosticWorkspaceScanInspectFailed": { "description": "Diagnostic shown when a workspace entry cannot be inspected.", "placeholders": { @@ -1749,7 +1819,7 @@ "@diagnosticWorkspaceFileTooLarge": { "description": "Diagnostic shown when a file is too large to parse automatically." }, - "diagnosticWorkspaceFileReadFailed": "خواندن فایل Markdown ممکن نشد: \u2068{error}\u2069", + "diagnosticWorkspaceFileReadFailed": "خواندن فایل Markdown ممکن نشد: ⁨{error}⁩", "@diagnosticWorkspaceFileReadFailed": { "description": "Diagnostic shown when a Markdown file cannot be read.", "placeholders": { @@ -1762,7 +1832,7 @@ "@diagnosticMarkdownAttributeMalformed": { "description": "Markdown parser diagnostic for malformed Writerside heading attributes." }, - "diagnosticMarkdownHeadingDuplicateId": "شناسهٔ عنوان «\u2068{id}\u2069» تکراری است.", + "diagnosticMarkdownHeadingDuplicateId": "شناسهٔ عنوان «⁨{id}⁩» تکراری است.", "@diagnosticMarkdownHeadingDuplicateId": { "description": "Markdown parser diagnostic for duplicate heading IDs.", "placeholders": { @@ -1783,7 +1853,7 @@ "@diagnosticWritersideXmlTopicMissingTitle": { "description": "Diagnostic for a Writerside XML topic without a title." }, - "diagnosticWritersideTopicFileMissingTitle": "موضوع «\u2068{fileName}\u2069» عنوان ندارد.", + "diagnosticWritersideTopicFileMissingTitle": "موضوع «⁨{fileName}⁩» عنوان ندارد.", "@diagnosticWritersideTopicFileMissingTitle": { "description": "Diagnostic for a Writerside topic file without a title.", "placeholders": { @@ -1800,7 +1870,7 @@ "@diagnosticMarkdownRawHtmlUnsafe": { "description": "Markdown parser diagnostic for unsafe raw HTML." }, - "diagnosticMarkdownLinkUnresolvedTarget": "هدف پیوند وجود ندارد: \u2068{targetPath}\u2069", + "diagnosticMarkdownLinkUnresolvedTarget": "هدف پیوند وجود ندارد: ⁨{targetPath}⁩", "@diagnosticMarkdownLinkUnresolvedTarget": { "description": "Markdown parser diagnostic for a missing link target.", "placeholders": { @@ -1809,7 +1879,7 @@ } } }, - "diagnosticMarkdownLinkUnresolvedAnchor": "لنگر «\u2068{anchor}\u2069» وجود ندارد.", + "diagnosticMarkdownLinkUnresolvedAnchor": "لنگر «⁨{anchor}⁩» وجود ندارد.", "@diagnosticMarkdownLinkUnresolvedAnchor": { "description": "Markdown parser diagnostic for a missing local anchor.", "placeholders": { @@ -1818,7 +1888,7 @@ } } }, - "diagnosticMarkdownImageMissingAlt": "تصویر «\u2068{destination}\u2069» متن جایگزین ندارد.", + "diagnosticMarkdownImageMissingAlt": "تصویر «⁨{destination}⁩» متن جایگزین ندارد.", "@diagnosticMarkdownImageMissingAlt": { "description": "Markdown parser diagnostic for a missing image alt text.", "placeholders": { @@ -1827,7 +1897,7 @@ } } }, - "diagnosticMarkdownImageMissingFile": "تصویر وجود ندارد: \u2068{destination}\u2069", + "diagnosticMarkdownImageMissingFile": "تصویر وجود ندارد: ⁨{destination}⁩", "@diagnosticMarkdownImageMissingFile": { "description": "Markdown parser diagnostic for a missing image file.", "placeholders": { @@ -1836,7 +1906,7 @@ } } }, - "diagnosticInvalidXml": "XML نامعتبر است: \u2068{message}\u2069", + "diagnosticInvalidXml": "XML نامعتبر است: ⁨{message}⁩", "@diagnosticInvalidXml": { "description": "XML parser diagnostic for invalid XML.", "placeholders": { @@ -1857,7 +1927,7 @@ "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { "description": "Writerside parser diagnostic for an instance-groups declaration without src." }, - "diagnosticWritersideConfigInvalidKeymapsMode": "حالت keymaps پشتیبانی نمی‌شود: \u2068{mode}\u2069", + "diagnosticWritersideConfigInvalidKeymapsMode": "حالت keymaps پشتیبانی نمی‌شود: ⁨{mode}⁩", "@diagnosticWritersideConfigInvalidKeymapsMode": { "description": "Writerside parser diagnostic for an unsupported keymaps mode.", "placeholders": { @@ -1882,7 +1952,7 @@ "@diagnosticWritersideTreeMissingId": { "description": "Writerside parser diagnostic for an instance profile without id." }, - "diagnosticWritersideTreeIdMismatch": "نام بدون پسوند فایل درخت با شناسهٔ نمونه «\u2068{id}\u2069» مطابقت ندارد.", + "diagnosticWritersideTreeIdMismatch": "نام بدون پسوند فایل درخت با شناسهٔ نمونه «⁨{id}⁩» مطابقت ندارد.", "@diagnosticWritersideTreeIdMismatch": { "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", "placeholders": { @@ -1895,7 +1965,7 @@ "@diagnosticWritersideTreeMissingStartPage": { "description": "Writerside parser diagnostic for a tree missing start-page." }, - "diagnosticWritersideStartPageMissing": "صفحه شروع «\u2068{startPage}\u2069» وجود ندارد.", + "diagnosticWritersideStartPageMissing": "صفحه شروع «⁨{startPage}⁩» وجود ندارد.", "@diagnosticWritersideStartPageMissing": { "description": "Writerside diagnostic for a missing start page.", "placeholders": { @@ -1904,7 +1974,7 @@ } } }, - "diagnosticWritersideTreeDuplicateTopic": "موضوع «\u2068{topic}\u2069» بیش از یک بار در فهرست مطالب این نمونه ظاهر شده است.", + "diagnosticWritersideTreeDuplicateTopic": "موضوع «⁨{topic}⁩» بیش از یک بار در فهرست مطالب این نمونه ظاهر شده است.", "@diagnosticWritersideTreeDuplicateTopic": { "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", "placeholders": { @@ -1917,7 +1987,7 @@ "@diagnosticWritersideVariableMalformedDeclaration": { "description": "Writerside parser diagnostic for a malformed variable declaration." }, - "diagnosticWritersideVariableDuplicateName": "متغیر «\u2068{name}\u2069» بیش از یک بار تعریف شده است.", + "diagnosticWritersideVariableDuplicateName": "متغیر «⁨{name}⁩» بیش از یک بار تعریف شده است.", "@diagnosticWritersideVariableDuplicateName": { "description": "Writerside parser diagnostic for a duplicate variable name.", "placeholders": { @@ -1930,7 +2000,7 @@ "@diagnosticWritersideCategoryMissingId": { "description": "Writerside parser diagnostic for a category without id." }, - "diagnosticWritersideCategoryDuplicateId": "دسته‌بندی «\u2068{id}\u2069» بیش از یک بار تعریف شده است.", + "diagnosticWritersideCategoryDuplicateId": "دسته‌بندی «⁨{id}⁩» بیش از یک بار تعریف شده است.", "@diagnosticWritersideCategoryDuplicateId": { "description": "Writerside parser diagnostic for a duplicate category ID.", "placeholders": { @@ -1939,7 +2009,7 @@ } } }, - "diagnosticWritersideCategoryDuplicateOrder": "ترتیب دسته‌بندی «\u2068{order}\u2069» بیش از یک بار تعریف شده است.", + "diagnosticWritersideCategoryDuplicateOrder": "ترتیب دسته‌بندی «⁨{order}⁩» بیش از یک بار تعریف شده است.", "@diagnosticWritersideCategoryDuplicateOrder": { "description": "Writerside parser diagnostic for a duplicate category order.", "placeholders": { @@ -1956,7 +2026,7 @@ "@diagnosticWritersideTopicMissingRootId": { "description": "Writerside parser diagnostic for an XML topic missing root id." }, - "diagnosticWritersideTopicRootIdMismatch": "شناسه ریشه موضوع XML «\u2068{id}\u2069» باید با نام فایل «\u2068{expectedId}\u2069» مطابقت داشته باشد.", + "diagnosticWritersideTopicRootIdMismatch": "شناسه ریشه موضوع XML «⁨{id}⁩» باید با نام فایل «⁨{expectedId}⁩» مطابقت داشته باشد.", "@diagnosticWritersideTopicRootIdMismatch": { "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", "placeholders": { @@ -1968,7 +2038,7 @@ } } }, - "diagnosticWritersideTopicDuplicateElementId": "شناسهٔ عنصر «\u2068{elementId}\u2069» بیش از یک بار ظاهر شده است.", + "diagnosticWritersideTopicDuplicateElementId": "شناسهٔ عنصر «⁨{elementId}⁩» بیش از یک بار ظاهر شده است.", "@diagnosticWritersideTopicDuplicateElementId": { "description": "Writerside parser diagnostic for a duplicate XML element ID.", "placeholders": { @@ -1985,7 +2055,7 @@ "@diagnosticWritersideConfigMissing": { "description": "Writerside module diagnostic for a missing writerside.cfg." }, - "diagnosticWritersideConfigMissingBuildConfigDirectory": "پوشهٔ پیکربندی ساختِ تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingBuildConfigDirectory": "پوشهٔ پیکربندی ساختِ تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingBuildConfigDirectory": { "description": "Writerside module diagnostic for a missing build config directory.", "placeholders": { @@ -1994,7 +2064,7 @@ } } }, - "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "پوشهٔ مشخصات API تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "پوشهٔ مشخصات API تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { "description": "Writerside module diagnostic for a missing API specifications directory.", "placeholders": { @@ -2003,7 +2073,7 @@ } } }, - "diagnosticWritersideConfigMissingSnippetsDirectory": "پوشهٔ snippets تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingSnippetsDirectory": "پوشهٔ snippets تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingSnippetsDirectory": { "description": "Writerside module diagnostic for a missing snippets directory.", "placeholders": { @@ -2012,7 +2082,7 @@ } } }, - "diagnosticWritersideConfigMissingVarsFile": "فایل متغیرهای تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingVarsFile": "فایل متغیرهای تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingVarsFile": { "description": "Writerside module diagnostic for a missing variables file.", "placeholders": { @@ -2021,7 +2091,7 @@ } } }, - "diagnosticWritersideConfigMissingCategoriesFile": "فایل دسته‌بندی‌های تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingCategoriesFile": "فایل دسته‌بندی‌های تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingCategoriesFile": { "description": "Writerside module diagnostic for a missing categories file.", "placeholders": { @@ -2030,7 +2100,7 @@ } } }, - "diagnosticWritersideConfigMissingInstanceGroupsFile": "فایل گروه‌های نمونهٔ تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideConfigMissingInstanceGroupsFile": "فایل گروه‌های نمونهٔ تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideConfigMissingInstanceGroupsFile": { "description": "Writerside module diagnostic for a missing instance groups file.", "placeholders": { @@ -2039,7 +2109,7 @@ } } }, - "diagnosticWritersideConfigMissingInstanceTree": "درخت نمونهٔ ثبت‌شده «\u2068{source}\u2069» وجود ندارد.", + "diagnosticWritersideConfigMissingInstanceTree": "درخت نمونهٔ ثبت‌شده «⁨{source}⁩» وجود ندارد.", "@diagnosticWritersideConfigMissingInstanceTree": { "description": "Writerside module diagnostic for a missing registered instance tree.", "placeholders": { @@ -2048,7 +2118,7 @@ } } }, - "diagnosticWritersideTopicReadFailed": "خواندن فایل موضوع ناموفق بود: \u2068{error}\u2069", + "diagnosticWritersideTopicReadFailed": "خواندن فایل موضوع ناموفق بود: ⁨{error}⁩", "@diagnosticWritersideTopicReadFailed": { "description": "Writerside module diagnostic for a topic file read failure.", "placeholders": { @@ -2057,7 +2127,7 @@ } } }, - "diagnosticWritersideDefaultTopicsDirectoryMissing": "پوشه پیش‌فرض موضوع‌ها وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideDefaultTopicsDirectoryMissing": "پوشه پیش‌فرض موضوع‌ها وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideDefaultTopicsDirectoryMissing": { "description": "Writerside module diagnostic for a missing default topics directory.", "placeholders": { @@ -2066,7 +2136,7 @@ } } }, - "diagnosticWritersideTopicsDirectoryMissing": "پوشه موضوع‌های تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideTopicsDirectoryMissing": "پوشه موضوع‌های تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideTopicsDirectoryMissing": { "description": "Writerside module diagnostic for a missing topics directory.", "placeholders": { @@ -2075,7 +2145,7 @@ } } }, - "diagnosticWritersideImagesDirectoryMissing": "پوشه تصاویر تنظیم‌شده وجود ندارد: \u2068{relativePath}\u2069", + "diagnosticWritersideImagesDirectoryMissing": "پوشه تصاویر تنظیم‌شده وجود ندارد: ⁨{relativePath}⁩", "@diagnosticWritersideImagesDirectoryMissing": { "description": "Writerside module diagnostic for a missing images directory.", "placeholders": { @@ -2084,7 +2154,7 @@ } } }, - "diagnosticWritersideTopicDuplicateId": "شناسه عنصر «\u2068{id}\u2069» بیش از یک بار ظاهر شده است.", + "diagnosticWritersideTopicDuplicateId": "شناسه عنصر «⁨{id}⁩» بیش از یک بار ظاهر شده است.", "@diagnosticWritersideTopicDuplicateId": { "description": "Writerside module diagnostic for a duplicate topic element ID.", "placeholders": { @@ -2093,7 +2163,7 @@ } } }, - "diagnosticWritersideTreeMissingTopic": "فهرست مطالب به موضوع ناموجود «\u2068{topic}\u2069» ارجاع می‌دهد.", + "diagnosticWritersideTreeMissingTopic": "فهرست مطالب به موضوع ناموجود «⁨{topic}⁩» ارجاع می‌دهد.", "@diagnosticWritersideTreeMissingTopic": { "description": "Writerside module diagnostic for a TOC reference to a missing topic.", "placeholders": { @@ -2102,7 +2172,7 @@ } } }, - "diagnosticWritersideTreeInvalidHref": "href خارجی «\u2068{href}\u2069» نامعتبر است.", + "diagnosticWritersideTreeInvalidHref": "href خارجی «⁨{href}⁩» نامعتبر است.", "@diagnosticWritersideTreeInvalidHref": { "description": "Writerside module diagnostic for an invalid external href.", "placeholders": { @@ -2111,7 +2181,7 @@ } } }, - "diagnosticWritersideVariableUnresolved": "متغیر \"\u2068%{name}%\u2069\" تعریف نشده است.", + "diagnosticWritersideVariableUnresolved": "متغیر \"⁨%{name}%⁩\" تعریف نشده است.", "@diagnosticWritersideVariableUnresolved": { "description": "Writerside module diagnostic for an undeclared variable.", "placeholders": { @@ -2120,7 +2190,7 @@ } } }, - "diagnosticWritersideTopicLinkUnresolved": "پیوند موضوع «\u2068{destination}\u2069» قابل حل نیست.", + "diagnosticWritersideTopicLinkUnresolved": "پیوند موضوع «⁨{destination}⁩» قابل حل نیست.", "@diagnosticWritersideTopicLinkUnresolved": { "description": "Writerside module diagnostic for an unresolved topic link.", "placeholders": { @@ -2129,7 +2199,7 @@ } } }, - "diagnosticWritersideAnchorUnresolved": "لنگر «\u2068{anchor}\u2069» در «\u2068{targetName}\u2069» وجود ندارد.", + "diagnosticWritersideAnchorUnresolved": "لنگر «⁨{anchor}⁩» در «⁨{targetName}⁩» وجود ندارد.", "@diagnosticWritersideAnchorUnresolved": { "description": "Writerside module diagnostic for an unresolved topic anchor.", "placeholders": { @@ -2145,7 +2215,7 @@ "@diagnosticWritersideIncludeMissingFrom": { "description": "Writerside module diagnostic for an include without a from attribute." }, - "diagnosticWritersideIncludeSourceMissing": "منبع include «\u2068{from}\u2069» وجود ندارد.", + "diagnosticWritersideIncludeSourceMissing": "منبع include «⁨{from}⁩» وجود ندارد.", "@diagnosticWritersideIncludeSourceMissing": { "description": "Writerside module diagnostic for a missing include source.", "placeholders": { @@ -2154,7 +2224,7 @@ } } }, - "diagnosticWritersideIncludeElementMissing": "عنصر include «\u2068{elementId}\u2069» در «\u2068{from}\u2069» وجود ندارد.", + "diagnosticWritersideIncludeElementMissing": "عنصر include «⁨{elementId}⁩» در «⁨{from}⁩» وجود ندارد.", "@diagnosticWritersideIncludeElementMissing": { "description": "Writerside module diagnostic for a missing include element.", "placeholders": { @@ -2166,7 +2236,7 @@ } } }, - "diagnosticWritersideCategoryUnresolved": "دسته‌بندی seealso «\u2068{ref}\u2069» تعریف نشده است.", + "diagnosticWritersideCategoryUnresolved": "دسته‌بندی seealso «⁨{ref}⁩» تعریف نشده است.", "@diagnosticWritersideCategoryUnresolved": { "description": "Writerside module diagnostic for an unresolved seealso category.", "placeholders": { @@ -2175,7 +2245,7 @@ } } }, - "diagnosticWritersideTopicAmbiguousReference": "ارجاع موضوع «\u2068{reference}\u2069» مبهم است.", + "diagnosticWritersideTopicAmbiguousReference": "ارجاع موضوع «⁨{reference}⁩» مبهم است.", "@diagnosticWritersideTopicAmbiguousReference": { "description": "Writerside module diagnostic for an ambiguous topic reference.", "placeholders": { @@ -2184,7 +2254,7 @@ } } }, - "diagnosticUnknown": "پیام تشخیصی ناشناخته: \u2068{code}\u2069", + "diagnosticUnknown": "پیام تشخیصی ناشناخته: ⁨{code}⁩", "@diagnosticUnknown": { "description": "Fallback text for an unknown diagnostic code.", "placeholders": { @@ -2197,10 +2267,10 @@ "git": "Git", "gitDiff": "تفاوت‌های Git", "gitShowDiff": "نمایش تفاوت‌ها", - "gitDiffHunkRange": "قدیمی \u2068{oldRange}\u2069 ← جدید \u2068{newRange}\u2069", + "gitDiffHunkRange": "قدیمی ⁨{oldRange}⁩ ← جدید ⁨{newRange}⁩", "gitDiffNoLines": "بدون خط", "gitUnavailableTitle": "Git در دسترس نیست", - "gitUnavailableMessage": "{reason, select, other{Git را نصب کنید یا BusyMark را برای استفاده از یک برنامهٔ اجرایی Git در دسترس پیکربندی کنید. \u2068{reason}\u2069}}", + "gitUnavailableMessage": "{reason, select, other{Git را نصب کنید یا BusyMark را برای استفاده از یک برنامهٔ اجرایی Git در دسترس پیکربندی کنید. ⁨{reason}⁩}}", "gitTrustRequiredTitle": "برای استفاده از Git به این فضای کاری اعتماد می‌کنید؟", "gitTrustRequiredMessage": "مخزن‌های Git می‌توانند از طریق هوک‌ها، فیلترها و پیکربندی‌های دیگر برنامه اجرا کنند. پیش از اینکه BusyMark داده‌های مخزن را بخواند یا عملیات Git را فعال کند، به این فضای کاری اعتماد کنید.", "gitTrustWorkspace": "اعتماد به فضای کاری", @@ -2208,20 +2278,26 @@ "gitNotRepositoryMessage": "این فضای کاری درون یک مخزن Git نیست.", "gitInitializeRepository": "راه‌اندازی مخزن", "gitDetachedHead": "HEAD جداشده", - "gitDetachedHeadAt": "HEAD در \u2068{commit}\u2069 جدا شده است", + "gitDetachedHeadAt": "HEAD در ⁨{commit}⁩ جدا شده است", "gitNoUpstream": "شاخهٔ بالادست وجود ندارد", "gitAheadCount": "{count, plural, =1{یک کامیت ارسال‌نشده} other{{count} کامیت ارسال‌نشده}}", "@gitAheadCount": { "description": "Count of local commits not pushed to the upstream branch.", "placeholders": { - "count": {"type": "int", "format": "decimalPattern"} + "count": { + "type": "int", + "format": "decimalPattern" + } } }, "gitBehindCount": "{count, plural, =1{یک کامیت برای دریافت} other{{count} کامیت برای دریافت}}", "@gitBehindCount": { "description": "Count of upstream commits not pulled into the local branch.", "placeholders": { - "count": {"type": "int", "format": "decimalPattern"} + "count": { + "type": "int", + "format": "decimalPattern" + } } }, "gitClean": "بدون تغییر", @@ -2233,7 +2309,7 @@ "@gitActions": { "description": "Tooltip for the Git action menu button." }, - "gitPull": "دریافت", + "gitPull": "کشیدن", "gitPush": "ارسال", "gitCommit": "کامیت", "gitSelectForCommit": "مرحله‌بندی فایل", @@ -2257,21 +2333,27 @@ "gitBinaryFile": "فایل دودویی است. BusyMark وصله‌های دودویی را نمایش نمی‌دهد.", "gitUnsavedChangesBanner": "تغییرات ذخیره‌نشدهٔ ویرایشگر تا زمان ذخیره‌شدن در نظر گرفته نمی‌شوند.", "gitConfirmDiscardTitle": "تغییرات Git دور انداخته شوند؟", - "gitConfirmDiscardTracked": "{count, plural, =1{فایل رهگیری‌شدهٔ انتخابی از Git بازیابی خواهد شد.} other{فایل‌های رهگیری‌شدهٔ انتخابی از Git بازیابی خواهند شد.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{تمام تغییرات مرحله‌بندی‌شده و مرحله‌نشده فایل رهگیری‌شدهٔ انتخاب‌شده به HEAD بازگردانده می‌شود.} other{تمام تغییرات مرحله‌بندی‌شده و مرحله‌نشده فایل‌های رهگیری‌شدهٔ انتخاب‌شده به HEAD بازگردانده می‌شود.}}", "gitConfirmDiscardUntracked": "{count, plural, =1{فایل رهگیری‌نشدهٔ انتخابی حذف خواهد شد.} other{فایل‌های رهگیری‌نشدهٔ انتخابی حذف خواهند شد.}}", "gitConfirmDiscardMixed": "{count, plural, =1{فایل انتخابی بر اساس وضعیت Git آن بازیابی یا حذف خواهد شد.} other{فایل‌های انتخابی بر اساس وضعیت Git آن‌ها بازیابی یا حذف خواهند شد.}}", - "gitConfirmSwitchBranchTitle": "به \u2068{branch}\u2069 بروید؟", + "gitConfirmSwitchBranchTitle": "به ⁨{branch}⁩ بروید؟", "gitConfirmSwitchBranchMessage": "پس از تغییر شاخه توسط Git، BusyMark فضای کاری را دوباره از دیسک بارگیری می‌کند.", "gitConfirmPushSetUpstreamTitle": "شاخهٔ بالادست تنظیم شود؟", - "gitConfirmPushSetUpstreamMessage": "این شاخه بالادست ندارد. اگر دقیقاً یک مخزن راه دور پیکربندی شده باشد، BusyMark می‌تواند \u2068{branch}\u2069 را ارسال و آن را به‌عنوان بالادست تنظیم کند.", - "gitProjectHistory": "پروژه", - "gitFileHistory": "فایل فعلی", - "gitAdditionsDeletions": "\u2068+{additions} -{deletions}\u2069", + "gitConfirmPushSetUpstreamMessage": "این شاخه بالادست ندارد. اگر دقیقاً یک مخزن راه دور پیکربندی شده باشد، BusyMark می‌تواند ⁨{branch}⁩ را ارسال و آن را به‌عنوان بالادست تنظیم کند.", + "gitProjectHistory": "سابقه پروژه", + "gitFileHistory": "سابقه فایل", + "gitAdditionsDeletions": "⁨+{additions} -{deletions}⁩", "@gitAdditionsDeletions": { "description": "Compact addition and deletion counts.", "placeholders": { - "additions": {"type": "int", "format": "decimalPattern"}, - "deletions": {"type": "int", "format": "decimalPattern"} + "additions": { + "type": "int", + "format": "decimalPattern" + }, + "deletions": { + "type": "int", + "format": "decimalPattern" + } } }, "fileActions": "عملیات فایل", @@ -2307,185 +2389,446 @@ "gitErrorNetwork": "عملیات شبکهٔ Git ناموفق بود.", "gitErrorConflict": "Git تداخل‌های حل‌نشده گزارش کرد.", "gitErrorCommandFailed": "فرمان Git ناموفق بود.", - "markdownAndHtml": "Markdown و HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "بلوک‌های Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "ساختارهای بلوکی پشتیبانی‌شده در متن Markdown و پیش‌نمایش.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown درون‌خطی", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "قالب‌بندی درون پاراگراف‌ها، موارد فهرست و سلول‌های جدول.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "بلوک‌های HTML خام", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "تگ‌های بلوکی HTML امن که با ویجت‌های پیش‌نمایش BusyMark نمایش داده می‌شوند.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "تگ‌های HTML درون‌خطی", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "تگ‌های HTML درون‌خطی امن بدون نمایش خود تگ‌ها رندر می‌شوند.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "قوانین امنیتی", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "HTML خام پیش از پیش‌نمایش تحلیل و پاک‌سازی می‌شود.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "عنوان‌ها", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "پاراگراف‌ها", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "فهرست‌ها", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "کانتینرها", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "بلوک‌های متن", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "شکل‌ها و تصاویر", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "کد پیش‌قالب‌بندی‌شده", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "بلوک‌های بازشونده", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "فهرست‌های توصیفی", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "تگ‌های قالب‌بندی", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "تگ‌های کد درون‌خطی", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "تگ‌های متنی معنایی", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "پیش‌نمایش پاک‌سازی‌شده", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "HTML مجاز به بلوک‌های پیش‌نمایش BusyMark تبدیل می‌شود، نه اینکه در مرورگر رندر شود.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "منبع حفظ می‌شود", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "HTML خام ویرایش‌نشده دقیقاً به‌عنوان متن منبع ذخیره می‌شود.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown داخل HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "نشانه‌های Markdown داخل HTML خام به‌صورت متن واقعی نمایش داده می‌شوند.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "محتوای فعال مسدود است", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "اسکریپت‌ها، استایل‌ها، فریم‌ها، فرم‌ها، SVG، MathML، رویدادها و ویژگی‌های ناامن مسدود می‌شوند.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "فقط URLهای امن", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "پیوندها http، https، mailto، tel، URLهای نسبی و قطعه‌ها را می‌پذیرند؛ طرح‌های ناامن مسدود می‌شوند.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "افزودن به Git", "delete": "حذف", "newFile": "فایل جدید", "rename": "تغییر نام", "confirmDeleteFileTitle": "فایل حذف شود؟", "confirmDeleteFolderTitle": "پوشه حذف شود؟", - "confirmDeleteFileMessage": "\u2068{name}\u2069 حذف شود؟ این کار قابل بازگشت نیست.", - "confirmDeleteFolderMessage": "\u2068{name}\u2069 و همهٔ فایل‌های داخل آن حذف شوند؟ این کار قابل بازگشت نیست.", - "workspaceErrorFileOperationFailed": "عملیات فایل ناموفق بود: \u2068{error}\u2069", - "errorDirectoryMissing": "پوشه وجود ندارد: \u2068{path}\u2069", - "errorPathAlreadyExists": "مسیر از قبل وجود دارد: \u2068{path}\u2069", + "confirmDeleteFileMessage": "⁨{name}⁩ حذف شود؟ این کار قابل بازگشت نیست.", + "confirmDeleteFolderMessage": "⁨{name}⁩ و همهٔ فایل‌های داخل آن حذف شوند؟ این کار قابل بازگشت نیست.", + "workspaceErrorFileOperationFailed": "عملیات فایل ناموفق بود: ⁨{error}⁩", + "errorDirectoryMissing": "پوشه وجود ندارد: ⁨{path}⁩", + "errorPathAlreadyExists": "مسیر از قبل وجود دارد: ⁨{path}⁩", "errorFileNameRequired": "نام فایل لازم است.", "errorFileNameUnsafe": "نام فایل باید یک بخش مسیر امن باشد.", "errorFileOperationInvalidTarget": "نمی‌توان یک پوشه را به داخل خودش منتقل کرد.", "errorFileOperationOutsideRoot": "عملیات فایل باید داخل فضای کاری بماند.", "errorFileOperationRoot": "ریشهٔ فضای کاری را نمی‌توان از درخت فایل تغییر داد.", "safeDeleteTopicFile": "حذف ایمن فایل موضوع…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "حذف عنصر فهرست مطالب", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "مرور موارد استفاده", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "حذف فایل موضوع", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "حذف", - "@removeAction": {"description": "Generic remove action label."}, - "topicRemovalSummary": "«\u2068{topic}\u2069» را از نمونهٔ انتخاب‌شده حذف کنید. فایل موضوع نگه داشته می‌شود.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, - "safeDeleteTopicSummary": "«\u2068{topic}\u2069» را حذف کنید و ارجاع‌های آن را در سراسر این پروژهٔ Writerside به‌طور ایمن به‌روزرسانی کنید.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@removeAction": { + "description": "Generic remove action label." + }, + "topicRemovalSummary": "«⁨{topic}⁩» را از نمونهٔ انتخاب‌شده حذف کنید. فایل موضوع نگه داشته می‌شود.", + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "safeDeleteTopicSummary": "«⁨{topic}⁩» را حذف کنید و ارجاع‌های آن را در سراسر این پروژهٔ Writerside به‌طور ایمن به‌روزرسانی کنید.", + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{۱ موضوع فرزند یک سطح بالاتر می‌رود.} other{{count} موضوع فرزند یک سطح بالاتر می‌روند.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int", "format": "decimalPattern"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, "topicIsStartPageRemovalWarning": "این موضوع به‌عنوان صفحهٔ آغاز یک نمونه استفاده می‌شود. موارد استفاده را مرور و پیش از ادامه صفحهٔ آغاز دیگری تعیین کنید.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "موارد استفاده ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int", "format": "decimalPattern"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, "noBreakingTopicUsages": "هیچ ارجاعی که دچار مشکل شود پیدا نشد.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark ارجاع‌های زیر را به این موضوع پیدا کرد.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "عناصر فهرست مطالب", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "صفحه‌های آغاز", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "پیوندهای موضوع", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "درج‌ها", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{۱ مورد استفاده} other{{count} مورد استفاده}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int", "format": "decimalPattern"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, "refactoringOptions": "گزینه‌های بازآرایی", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "به‌روزرسانی خودکار موارد استفاده", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "ارجاع‌های فهرست مطالب و درج‌ها حذف و متن پیوندها حفظ می‌شود.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "برخی موارد استفاده پیش از این بازآرایی به تغییر دستی نیاز دارند.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "تنظیم تغییر مسیر به", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "صفحهٔ منتشرشدهٔ قدیمی تغییر مسیر داده نشود.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "مقصد تغییر مسیر", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "پیش از ادامه موارد استفادهٔ باقی‌مانده را مرور و به‌روزرسانی کنید، یا در صورت امکان به‌روزرسانی خودکار را فعال کنید.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, - "usagesOfTopic": "موارد استفادهٔ \u2068{topic}\u2069", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, + "usagesOfTopic": "موارد استفادهٔ ⁨{topic}⁩", + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "هیچ مورد استفاده‌ای پیدا نشد", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "بیرون از نمونهٔ انتخاب‌شده", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "انجام بازآرایی", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "فایل موضوع دیگر استفاده نمی‌شود", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "نگه داشتن فایل موضوع", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, - "orphanTopicMessage": "«\u2068{topic}\u2069» دیگر در هیچ جای این پروژهٔ Writerside استفاده نمی‌شود. فایل را حذف کنید یا برای استفاده در نمونه‌ای دیگر نگه دارید.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, + "orphanTopicMessage": "«⁨{topic}⁩» دیگر در هیچ جای این پروژهٔ Writerside استفاده نمی‌شود. فایل را حذف کنید یا برای استفاده در نمونه‌ای دیگر نگه دارید.", + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "برای فایل‌های موضوع Writerside از حذف ایمن استفاده کنید.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "بررسی موارد استفاده از موضوع کامل نشد. هیچ فایلی تغییر نکرد.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "برخی موارد استفاده از موضوع هنوز نیاز به رسیدگی دارند. پیش از ادامه آن‌ها را بازبینی کنید.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "مقصد تغییر مسیر انتخاب‌شده دیگر معتبر نیست. دوباره آن را انتخاب کنید.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, - "errorWritersideRollbackFailed": "حذف موضوع به‌طور کامل بازگردانده نشد. پیش از ادامه این مسیرها را بررسی کنید: \u2068{paths}\u2069", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "خروجی به‌صورت PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "چیدمان صفحه را برای یک PDF حرفه‌ای و مستقل انتخاب کنید.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "تصاویر راه‌دور هنگام خروجی دانلود نمی‌شوند. تصاویر محلی در صورت دسترس بودن افزوده می‌شوند.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "اندازه صفحه", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "Letter (نامه)", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "جهت", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "عمودی", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "افقی", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "حاشیه‌ها", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "باریک", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "عادی", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "پهن", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "افزودن شماره صفحه", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "خروجی", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "در حال تهیه PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "سند PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "{fileName} صادر شد.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} صادر شد. تصاویر افزوده‌نشده: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "مؤلفه خروجی PDF موجود نیست. BusyMark را دوباره نصب و تلاش کنید.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "خروجی PDF بیش از حد طول کشید و متوقف شد.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark نتوانست این سند را به PDF تبدیل کند.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, + "errorWritersideRollbackFailed": "حذف موضوع به‌طور کامل بازگردانده نشد. پیش از ادامه این مسیرها را بررسی کنید: ⁨{paths}⁩", + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "خروجی به‌صورت PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "چیدمان صفحه را برای یک PDF حرفه‌ای و مستقل انتخاب کنید.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "تصاویر راه‌دور هنگام خروجی دانلود نمی‌شوند. تصاویر محلی در صورت دسترس بودن افزوده می‌شوند.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "اندازه صفحه", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Letter (نامه)", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "جهت", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "عمودی", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "افقی", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "حاشیه‌ها", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "باریک", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "عادی", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "پهن", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "افزودن شماره صفحه", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "خروجی", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "در حال تهیه PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "سند PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} صادر شد.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} با {count, plural, =1{1 هشدار} other{{count} هشدار}} صادر شد.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "مؤلفه خروجی PDF موجود نیست. BusyMark را دوباره نصب و تلاش کنید.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "خروجی PDF بیش از حد طول کشید و متوقف شد.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark نتوانست این سند را به PDF تبدیل کند.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "در حال رندر…", "visualizationStale": "نمایش آخرین رندر معتبر", "visualizationShowSource": "نمایش منبع", @@ -2506,10 +2849,13 @@ "visualizationRenderFailed": "این تصویرسازی رندر نشد.", "visualizationRetry": "تلاش دوباره", "visualizationSaved": "{fileName} ذخیره شد", - "shortcutExportPdfDescription": "سند فعال یا ماژول Writerside را به PDF صادر کنید.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "سند فعال یا ماژول Writerside را به PDF صادر کنید.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "مرحله‌بندی‌شده", "gitUnstaged": "مرحله‌بندی‌نشده", - "gitFetch": "دریافت", + "gitFetch": "واکشی", "gitStagedFileCount": "{count, plural, =1{۱ فایل مرحله‌بندی‌شده} other{{count} فایل مرحله‌بندی‌شده}}", "gitOutsideWorkspace": "خارج از فضای کاری", "gitFileHistoryRequiresOpenFile": "تاریخچهٔ فایل به یک فایل Markdown باز نیاز دارد.", @@ -2523,8 +2869,8 @@ "gitErrorRestoreStagedFile": "پیش از بازیابی نسخهٔ پیشین، فایل را از حالت مرحله‌بندی خارج کنید.", "gitCommitActions": "عملیات ثبت", "gitResetCurrentBranchToHere": "بازنشانی شاخهٔ فعلی به اینجا…", - "gitResetCurrentBranchTitle": "\u2068{branch}\u2069 روی \u2068{commit}\u2069 بازنشانی شود؟", - "gitResetCurrentBranchMessage": "این کار شاخهٔ \u2068{branch}\u2069 را به ثبت \u2068{commit}\u2069 منتقل می‌کند. نحوهٔ به‌روزرسانی فهرست و درخت کاری توسط Git را انتخاب کنید.", + "gitResetCurrentBranchTitle": "⁨{branch}⁩ روی ⁨{commit}⁩ بازنشانی شود؟", + "gitResetCurrentBranchMessage": "این کار شاخهٔ ⁨{branch}⁩ را به ثبت ⁨{commit}⁩ منتقل می‌کند. نحوهٔ به‌روزرسانی فهرست و درخت کاری توسط Git را انتخاب کنید.", "gitReset": "بازنشانی", "gitResetModeSoft": "Soft", "gitResetModeSoftDescription": "فقط شاخه را جابه‌جا کنید. فهرست و درخت کاری بدون تغییر می‌مانند؛ تفاوت‌ها با ثبت انتخاب‌شده همچنان مرحله‌بندی‌شده خواهند بود.", @@ -2623,7 +2969,6 @@ "ai": "هوش مصنوعی", "aiLocalOllama": "Ollama محلی", "aiDisabled": "غیرفعال", - "aiLocalOnlyDescription": "ویرایش با هوش مصنوعی فقط با اقدام صریح آغاز می‌شود. BusyMark تنها زمینهٔ نمایش‌داده‌شده را برای ارائه‌دهندهٔ انتخابی می‌فرستد و هیچ پیشنهادی را بدون بازبینی اعمال نمی‌کند.", "aiProvider": "ارائه‌دهندهٔ هوش مصنوعی", "aiDefaultProvider": "ارائه‌دهندهٔ پیش‌فرض", "aiConfigureProvider": "پیکربندی ارائه‌دهنده", @@ -2632,7 +2977,7 @@ "aiOllamaModel": "مدل Ollama", "aiTestConnection": "آزمایش اتصال", "aiTestingConnection": "در حال آزمایش…", - "aiConnectionReady": "متصل شد. \u2068{count}\u2069 مدل نصب‌شده پیدا شد.", + "aiConnectionReady": "متصل شد. ⁨{count}⁩ مدل نصب‌شده پیدا شد.", "aiNoModels": "هیچ مدلی انتخاب نشده است.", "aiConnectionFailed": "BusyMark نتوانست تولید متن با هوش مصنوعی را تأیید کند.", "aiConfigureFirst": "ابتدا یک ارائه‌دهندهٔ هوش مصنوعی را فعال و مدلی را در تنظیمات ← هوش مصنوعی تأیید کنید.", @@ -2658,7 +3003,7 @@ "aiOriginal": "متن اصلی", "aiSuggested": "متن پیشنهادی", "aiApplyProposal": "اعمال پیشنهاد", - "aiTokenUsage": "\u2068{input}\u2069 توکن ورودی · \u2068{output}\u2069 توکن خروجی", + "aiTokenUsage": "⁨{input}⁩ توکن ورودی · ⁨{output}⁩ توکن خروجی", "aiStaleProposal": "سند هنگام تولید این پیشنهاد تغییر کرد. کنش را دوباره اجرا کنید.", "gitAiStagedChangesChanged": "تغییرات مرحله‌بندی‌شده هنگام تولید این پیام کامیت تغییر کرد. کنش را دوباره اجرا کنید.", "aiViewContext": "نمایش بافت ارسال‌شده", @@ -2707,7 +3052,7 @@ "tableAlignmentCenter": "تراز: وسط", "tableAlignmentRight": "تراز: راست", "sourceSearchReplacement": "جایگزینی با", - "sourceSearchReplaceCurrent": "جایگزینی مورد فعلی", + "sourceSearchReplaceCurrent": "جایگزینی تطابق فعلی", "sourceSearchReplaceAndFindNext": "جایگزینی و یافتن بعدی", "sourceSearchReplaceAll": "جایگزینی همه", "workspaceReplace": "جایگزینی در فضای کاری", @@ -2737,14 +3082,18 @@ "reloadFromDisk": "بارگیری دوباره از دیسک", "keepMine": "نگه‌داشتن نسخهٔ من", "saveAs": "ذخیره با نام", - "unsavedChangesMultipleMessage": "تعداد {count} سند تغییرات ذخیره‌نشده دارند. پیش از ادامه ذخیره شوند؟", + "unsavedChangesMultipleMessage": "{count, plural, =1{۱ سند دارای تغییرات ذخیره‌نشده است. قبل از ادامه ذخیره کنید.} other{{count} سند دارای تغییرات ذخیره‌نشده هستند. قبل از ادامه ذخیره کنید.}}", "workspaceReplaceIssuePartialConflict": "بازگردانی متوقف شد، زیرا فایل هم‌زمان تغییر کرد. ممکن است برخی جایگزینی‌ها باقی مانده باشند؛ محتوای جابه‌جا‌شده در مسیر زیر حفظ شد.", "workspaceReplaceIssueApplyFailed": "هیچ جایگزینی اعمال نشد، زیرا مجموعهٔ بازبینی‌شده را نمی‌شد با ایمنی ذخیره کرد.", - "workspaceRecoveryRestored": "تعداد {count} سند ذخیره‌نشده بازیابی شد. پیش از ادامه هر سند بازیابی‌شده را بررسی کنید.", - "workspaceRecoveryDamaged": "تعداد {count} رکورد بازیابی آسیب‌دیده قابل بازیابی نبود. سندهای معتبر بازیابی‌شده همچنان در دسترس‌اند.", + "workspaceRecoveryRestored": "{count, plural, =1{یک سند ذخیره‌نشده بازیابی شد. قبل از ذخیره یا حذف آن بازبینی کنید.} other{{count} سند ذخیره‌نشده بازیابی شدند. هر کدام را قبل از ذخیره یا حذف بازبینی کنید.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{یک رکورد بازیابی آسیب‌دیده را نتوانستیم بازیابی کنیم. فایل بازیابی اولیه برای بررسی حفظ شده است.} other{{count} رکورد بازیابی آسیب‌دیده نتوانستیم بازیابی کنیم. رکوردهای بازیابی معتبر همچنان در دسترس هستند.}}", "recoveredDocumentReview": "محتوای ذخیره‌نشدهٔ {fileName} بازیابی شده است. آن را بررسی کنید و سپس ذخیره، ذخیره با نام یا رد کنید.", "commandUnavailableInContext": "این فرمان در زمینهٔ فعلی در دسترس نیست.", "mathRenderFailed": "عبارت ریاضی قابل نمایش نبود.", "inlineMath": "ریاضی درون‌خطی", - "displayMath": "ریاضی نمایشی" + "displayMath": "ریاضی نمایشی", + "aiExplicitEditingDescription": "ویرایش با هوش مصنوعی فقط با اقدام صریح آغاز می‌شود. BusyMark تنها زمینهٔ نمایش‌داده‌شده را برای ارائه‌دهندهٔ انتخابی می‌فرستد و هیچ پیشنهادی را بدون بازبینی اعمال نمی‌کند.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 1fba3254..614781ee 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -404,8 +408,10 @@ "@noOpenFile": { "description": "Header title when a folder or Writerside workspace has no open editor tab." }, - "shortcutDeleteTreeItemDescription": "Supprimer l’élément sélectionné dans « Fichiers » ou retirer la rubrique sélectionnée de la table des matières", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "shortcutDeleteTreeItemDescription": "Supprimer l’élément sélectionné dans « Fichiers » ou retirer le sujet sélectionné de la table des matières", + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Général", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Insérer un retrait", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Insérer un retrait à l’emplacement du curseur", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Diminuer le retrait du code source", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Supprimer un niveau de retrait en mode Source", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Fermer la recherche ou désélectionner les blocs", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Confidentialité", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Charger les images distantes", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Autoriser le chargement d’images depuis des URL HTTP et HTTPS dans l’aperçu Markdown et l’éditeur.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Effacer les autorisations d’images distantes", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Oublier les espaces de travail autorisés à charger des images distantes.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Effacer les espaces de travail Git approuvés", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Demander confirmation avant d’activer les fonctions Git pour les espaces de travail précédemment approuvés.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Fenêtre", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Rouvrir l’espace de travail précédent au démarrage", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Ouvrir l’espace de travail et les onglets de la session précédente au démarrage de BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Confirmer avant de fermer avec des modifications non enregistrées", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -913,7 +944,9 @@ "description": "Text field label for raw HTML source." }, "htmlContentDefault": "Contenu HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "thematicBreak": "Séparateur horizontal", "@thematicBreak": { "description": "Thematic break command label." @@ -1058,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "texte", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "code", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "texte alternatif", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Décrire l’image", "@describeTheImage": { "description": "Image alt text hint." @@ -1093,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Image distante bloquée", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Choisissez si BusyMark peut charger des images distantes.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Les images distantes sont bloquées", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Ce document fait référence à des images sur Internet. Leur chargement peut révéler des informations réseau à l’hôte des images.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Charger pour cet espace de travail", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Toujours charger les images distantes", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Masquer le panneau latéral", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1344,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Occurrence précédente", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Occurrence suivante", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Respecter la casse", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Mot entier", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Expression régulière", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Expression régulière non valide", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Fichier volumineux : la coloration et le repliage sont suspendus", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Aucun contenu à lire", "admonition": "Encadré", "quote": "Citation", @@ -2243,15 +2307,15 @@ "gitBinaryFile": "Fichier binaire. BusyMark n’affiche pas les patchs binaires.", "gitUnsavedChangesBanner": "Les modifications non enregistrées de l’éditeur ne sont incluses qu’après leur enregistrement.", "gitConfirmDiscardTitle": "Abandonner les modifications Git ?", - "gitConfirmDiscardTracked": "{count, plural, =1{Le fichier suivi sélectionné sera restauré depuis Git.} other{Les fichiers suivis sélectionnés seront restaurés depuis Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Toutes les modifications staged et unstaged du fichier suivi sélectionné seront restaurées vers HEAD.} other{Toutes les modifications staged et unstaged des fichiers suivis sélectionnés seront restaurées vers HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, =1{Le fichier non suivi sélectionné sera supprimé.} other{Les fichiers non suivis sélectionnés seront supprimés.}}", "gitConfirmDiscardMixed": "{count, plural, =1{Le fichier sélectionné sera restauré ou supprimé selon son état Git.} other{Les fichiers sélectionnés seront restaurés ou supprimés selon leur état Git.}}", "gitConfirmSwitchBranchTitle": "Passer à {branch} ?", "gitConfirmSwitchBranchMessage": "BusyMark rechargera l’espace de travail depuis le disque après le changement de branche par Git.", "gitConfirmPushSetUpstreamTitle": "Définir la branche en amont ?", "gitConfirmPushSetUpstreamMessage": "Cette branche n’a pas de branche en amont. BusyMark peut pousser {branch} et définir sa branche en amont lorsqu’un seul dépôt distant est configuré.", - "gitProjectHistory": "Projet", - "gitFileHistory": "Fichier actuel", + "gitProjectHistory": "Historique du projet", + "gitFileHistory": "Historique du fichier", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Actions sur le fichier", "actions": "Actions", @@ -2286,73 +2350,138 @@ "gitErrorNetwork": "L’opération réseau Git a échoué.", "gitErrorConflict": "Git a signalé des conflits non résolus.", "gitErrorCommandFailed": "La commande Git a échoué.", - "markdownAndHtml": "Markdown et HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Blocs Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Structures de blocs prises en charge dans la source Markdown et l’aperçu.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown en ligne", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Mise en forme utilisable dans les paragraphes, listes et cellules de tableau.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Blocs HTML bruts", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Balises HTML de bloc sûres rendues par les widgets d’aperçu BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Balises HTML brutes en ligne", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Balises HTML en ligne sûres rendues sans afficher les balises littérales.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Règles de sécurité", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Le HTML brut est analysé et assaini avant le rendu de l’aperçu.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Titres", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Paragraphes", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Listes", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Conteneurs", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Blocs de texte", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Figures et images", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Code préformaté", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Blocs dépliables", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Listes de description", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Balises de mise en forme", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Balises de code en ligne", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Balises de texte sémantique", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Aperçu assaini", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Le HTML autorisé est converti en blocs d’aperçu BusyMark et n’est pas rendu dans un navigateur.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Source conservée", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Le HTML brut non modifié est enregistré exactement comme texte source.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown dans HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Les marqueurs Markdown dans le HTML brut sont affichés comme texte littéral.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Contenu actif bloqué", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Les scripts, styles, cadres, formulaires, SVG, MathML, événements et attributs dangereux sont bloqués.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "URL sûres uniquement", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Les liens acceptent http, https, mailto, tel, les URL relatives et les fragments ; les schémas dangereux sont bloqués.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Ajouter à Git", "delete": "Supprimer", "newFile": "Nouveau fichier", @@ -2370,123 +2499,294 @@ "errorFileOperationOutsideRoot": "L’opération sur le fichier doit rester dans l’espace de travail.", "errorFileOperationRoot": "La racine de l’espace de travail ne peut pas être modifiée depuis l’arborescence.", "safeDeleteTopicFile": "Supprimer le fichier du sujet en toute sécurité…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Retirer l’élément de la table des matières", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Examiner les utilisations", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Supprimer le fichier du sujet", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Retirer", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Retirez « {topic} » de l’instance sélectionnée. Le fichier du sujet sera conservé.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Supprimez « {topic} » et mettez à jour ses références en toute sécurité dans l’ensemble de ce projet Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 sujet enfant remontera d’un niveau.} other{{count} sujets enfants remonteront d’un niveau.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Ce sujet sert de page de démarrage à une instance. Examinez ses utilisations et attribuez une autre page de démarrage avant de continuer.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Utilisations ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Aucune référence susceptible de ne plus fonctionner n’a été trouvée.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark a trouvé les références suivantes à ce sujet.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Éléments de la table des matières", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Pages de démarrage", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Liens vers le sujet", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Inclusions", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{1 utilisation} other{{count} utilisations}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Options de refactorisation", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Mettre à jour les utilisations automatiquement", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Retirer les références des tables des matières et les inclusions, et conserver le texte des liens.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Certaines utilisations nécessitent des modifications manuelles avant cette refactorisation.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Rediriger vers", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Ne pas rediriger l’ancienne page publiée.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Cible de la redirection", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Examinez et mettez à jour les utilisations restantes avant de continuer, ou activez les mises à jour automatiques lorsqu’elles sont disponibles.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Utilisations de {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Aucune utilisation trouvée.", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "En dehors de l’instance sélectionnée", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Refactoriser", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Le fichier du sujet n’est plus utilisé", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Conserver le fichier du sujet", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "« {topic} » n’est plus utilisé nulle part dans ce projet Writerside. Supprimez le fichier ou conservez-le pour l’utiliser dans une autre instance.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Utilisez la suppression sécurisée pour les fichiers de sujet Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "L’analyse des utilisations du sujet n’a pas pu aboutir. Aucun fichier n’a été modifié.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Certaines utilisations du sujet nécessitent encore votre intervention. Examinez-les avant de continuer.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "La cible de redirection sélectionnée n’est plus valide. Sélectionnez-la de nouveau.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "La suppression du sujet n’a pas pu être entièrement annulée. Vérifiez ces chemins avant de continuer : {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "exportAsPdf": "Exporter en PDF", - "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, "pdfExportDescription": "Choisissez la mise en page pour obtenir un PDF soigné et autonome.", - "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "Les images distantes ne sont pas téléchargées pendant l’exportation. Les images locales sont incluses lorsqu’elles sont disponibles.", - "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "Format de page", - "@pdfPageSize": {"description": "PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "Lettre", - "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "Orientation", - "@pdfOrientation": {"description": "PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "Portrait", - "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "Paysage", - "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "Marges", - "@pdfMargins": {"description": "PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "Étroites", - "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "Normales", - "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "Larges", - "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "Inclure les numéros de page", - "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "Exporter", - "@export": {"description": "Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "Exportation du PDF…", - "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "Document PDF", - "@fileTypePdf": {"description": "File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "{fileName} a été exporté.", - "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} a été exporté. Images non incluses : {count}.", - "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} a été exporté avec {count, plural, =1{1 avertissement} other{{count} avertissements}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "Le composant d’exportation PDF est manquant. Réinstallez BusyMark et réessayez.", - "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "L’exportation PDF a pris trop de temps et a été arrêtée.", - "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark n’a pas pu exporter ce document en PDF.", - "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Rendu en cours…", "visualizationStale": "Affichage du dernier rendu valide", "visualizationShowSource": "Afficher la source", @@ -2508,7 +2808,9 @@ "visualizationRetry": "Réessayer", "visualizationSaved": "Fichier enregistré : {fileName}", "shortcutExportPdfDescription": "Exporter le document actif ou le module Writerside en PDF.", - "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Indexés", "gitUnstaged": "Non indexés", "gitFetch": "Récupérer", @@ -2594,7 +2896,7 @@ "errorWritersideInstanceImportTargetExists": "L’importation écraserait un fichier de projet existant : {path}", "errorWritersideInstanceFilesChanged": "Les fichiers de l’instance ont changé sur le disque. Vérifiez-les et réessayez.", "errorWritersideInstanceRollbackFailed": "BusyMark n’a pas pu annuler complètement la modification de l’instance. Vérifiez ces fichiers avant de continuer : {paths}", - "errorWritersideInstanceLibraryImport": "Une bibliothèque de sommaire ne peut pas importer de rubriques Markdown.", + "errorWritersideInstanceLibraryImport": "Une bibliothèque TOC ne peut pas importer de sujets Markdown.", "errorWritersideInstanceWebPathInvalid": "Le chemin web doit tenir sur une seule ligne.", "errorWritersideInstanceConfigurationInvalid": "La configuration de l’instance Writerside n’est pas valide. Corrigez ses diagnostics et réessayez.", "errorWritersideInstanceTemporaryFile": "BusyMark n’a pas pu préparer les modifications de l’instance en toute sécurité.", @@ -2606,7 +2908,7 @@ "diagnosticWritersideTreeInvalidInclude": "Un élément d’arbre doit indiquer à la fois from et element-id.", "diagnosticWritersideTreeMissingSnippetId": "Un élément d’arbre doit indiquer un id.", "diagnosticWritersideTreeInvalidCrossInstanceReference": "Une référence de sommaire entre instances doit indiquer à la fois ref et in.", - "diagnosticWritersideTreeConflictingTargets": "Un élément de sommaire ne peut pas cibler plusieurs rubriques, références, liens ou redirections.", + "diagnosticWritersideTreeConflictingTargets": "Un élément de sommaire ne peut pas cibler plusieurs sujets, références, liens ou redirections.", "diagnosticWritersideTreeDuplicateElementId": "L’identifiant d’élément d’arbre « {id} » est déclaré plusieurs fois.", "diagnosticWritersideInstanceGroupsInvalidRoot": "Le fichier de groupes d’instances doit avoir un élément racine .", "diagnosticWritersideInstanceGroupInvalid": "Un groupe d’instances doit indiquer un id et une liste d’instances non vides.", @@ -2616,7 +2918,7 @@ "diagnosticWritersideTreeCircularInclude": "L’inclusion d’arbre « {source}#{id} » crée un cycle.", "diagnosticWritersideUnknownInstanceGroup": "La condition d’instance référence le groupe inconnu « @{group} ».", "diagnosticWritersideReferenceInstanceMissing": "La référence entre instances cible l’instance inconnue « {instance} ».", - "diagnosticWritersideReferenceTopicMissing": "La rubrique « {topic} » ne fait pas partie de l’instance référencée « {instance} ».", + "diagnosticWritersideReferenceTopicMissing": "Le sujet « {topic} » n’est pas dans l’instance référencée « {instance} ».", "download": "Télécharger", "exportWritersideAsPdf": "Exporter Writerside au format PDF", "writersidePdfContent": "Contenu de l’exportation", @@ -2625,7 +2927,6 @@ "ai": "IA", "aiLocalOllama": "Ollama local", "aiDisabled": "Désactivé", - "aiLocalOnlyDescription": "L’édition par IA est déclenchée explicitement. BusyMark envoie uniquement le contexte affiché au fournisseur sélectionné et n’applique jamais une proposition sans validation.", "aiProvider": "Fournisseur d’IA", "aiDefaultProvider": "Fournisseur par défaut", "aiConfigureProvider": "Configurer le fournisseur", @@ -2709,7 +3010,7 @@ "tableAlignmentCenter": "Alignement : centre", "tableAlignmentRight": "Alignement : droite", "sourceSearchReplacement": "Remplacer par", - "sourceSearchReplaceCurrent": "Remplacer la sélection actuelle", + "sourceSearchReplaceCurrent": "Remplacer la correspondance actuelle", "sourceSearchReplaceAndFindNext": "Remplacer et rechercher le suivant", "sourceSearchReplaceAll": "Tout remplacer", "workspaceReplace": "Remplacer dans l’espace de travail", @@ -2739,14 +3040,18 @@ "reloadFromDisk": "Recharger depuis le disque", "keepMine": "Conserver ma version", "saveAs": "Enregistrer sous", - "unsavedChangesMultipleMessage": "{count} documents contiennent des modifications non enregistrées. Les enregistrer avant de continuer ?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 document contient des modifications non enregistrées. Enregistrez-le avant de continuer.} other{{count} documents contiennent des modifications non enregistrées. Enregistrez-les avant de continuer.}}", "workspaceReplaceIssuePartialConflict": "L’annulation a été interrompue car le fichier a été modifié simultanément. Certains remplacements peuvent subsister ; le contenu déplacé a été conservé à l’emplacement ci-dessous.", "workspaceReplaceIssueApplyFailed": "Aucun remplacement n’a été appliqué, car l’ensemble vérifié n’a pas pu être enregistré en toute sécurité.", - "workspaceRecoveryRestored": "{count} documents non enregistrés ont été récupérés. Vérifiez chaque document récupéré avant de continuer.", - "workspaceRecoveryDamaged": "{count} enregistrements de récupération endommagés n’ont pas pu être restaurés. Les documents valides récupérés restent disponibles.", + "workspaceRecoveryRestored": "{count, plural, =1{1 document non enregistré a été récupéré. Vérifiez-le avant de l’enregistrer ou de l’ignorer.} other{{count} documents non enregistrés ont été récupérés. Vérifiez chacun avant de l’enregistrer ou de l’ignorer.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Un enregistrement de récupération endommagé n’a pas pu être restauré. Le fichier de récupération d’origine a été conservé pour inspection.} other{{count} enregistrements de récupération endommagés n’ont pas pu être restaurés. Les enregistrements de récupération valides restent disponibles.}}", "recoveredDocumentReview": "Le contenu non enregistré de {fileName} a été récupéré. Vérifiez-le, puis enregistrez-le, enregistrez-le sous un autre nom ou ignorez-le.", "commandUnavailableInContext": "Cette commande n’est pas disponible dans le contexte actuel.", "mathRenderFailed": "Impossible d’afficher l’expression mathématique.", "inlineMath": "Formule en ligne", - "displayMath": "Formule en bloc" + "displayMath": "Formule en bloc", + "aiExplicitEditingDescription": "L’édition par IA est déclenchée explicitement. BusyMark envoie uniquement le contexte affiché au fournisseur sélectionné et n’applique jamais une proposition sans validation.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index 58953cae..f9b5cd3f 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "फ़ाइलों में चुना गया आइटम मिटाएँ या विषय-सूची से चुना गया विषय हटाएँ", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "सामान्य", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "इंडेंट डालें", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "कर्सर पर इंडेंट डालें", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "स्रोत का इंडेंट घटाएँ", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "स्रोत मोड में इंडेंट का एक स्तर हटाएँ", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "खोज बंद करें या ब्लॉक चयन हटाएँ", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "गोपनीयता", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "दूरस्थ छवियाँ लोड करें", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Markdown पूर्वावलोकन और संपादक की छवियों को http और https URL से लोड होने दें।", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "दूरस्थ छवि अनुमतियाँ साफ़ करें", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "उन कार्यस्थानों को भूलें जिन्हें दूरस्थ छवियाँ लोड करने की अनुमति दी गई थी।", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "विश्वसनीय Git कार्यस्थान साफ़ करें", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "पहले से विश्वसनीय कार्यस्थानों के लिए Git सुविधाएँ चालू करने से पहले पूछें।", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "विंडो", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "स्टार्टअप पर पिछला कार्यक्षेत्र फिर से खोलें", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "BusyMark शुरू होने पर पिछले सत्र का कार्यक्षेत्र और टैब खोलें।", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "न सहेजे गए बदलाव हों तो बंद करने से पहले पुष्टि करें", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -1060,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "टेक्स्ट", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "कोड", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "वैकल्पिक टेक्स्ट", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "छवि का वर्णन करें", "@describeTheImage": { "description": "Image alt text hint." @@ -1095,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "दूरस्थ छवि अवरुद्ध", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "चुनें कि BusyMark दूरस्थ छवियाँ लोड कर सकता है या नहीं।", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "दूरस्थ छवियाँ अवरुद्ध हैं", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "यह दस्तावेज़ इंटरनेट की छवियों का संदर्भ देता है। उन्हें लोड करने पर छवि होस्ट को नेटवर्क की जानकारी मिल सकती है।", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "इस कार्यस्थान के लिए लोड करें", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "दूरस्थ छवियाँ हमेशा लोड करें", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "साइडबार पैनल छिपाएँ", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1346,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "पिछला मिलान", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "अगला मिलान", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "बड़े-छोटे अक्षरों के प्रति संवेदनशील", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "पूरा शब्द", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "रेगुलर एक्सप्रेशन", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "अमान्य रेगुलर एक्सप्रेशन", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "बड़ी फ़ाइल: हाइलाइटिंग और फ़ोल्डिंग अस्थायी रूप से रुकी हुई हैं", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "पढ़ने के लिए कोई सामग्री नहीं", "admonition": "सूचना ब्लॉक", "quote": "उद्धरण", @@ -2245,15 +2307,15 @@ "gitBinaryFile": "बाइनरी फ़ाइल। BusyMark बाइनरी पैच रेंडर नहीं करता है।", "gitUnsavedChangesBanner": "संपादक के न सहेजे गए बदलाव सहेजे जाने तक शामिल नहीं किए जाते।", "gitConfirmDiscardTitle": "Git बदलाव त्यागें?", - "gitConfirmDiscardTracked": "{count, plural, =1{चयनित ट्रैक की गई फ़ाइल Git से पुनर्स्थापित की जाएगी।} other{चयनित ट्रैक की गई फ़ाइलें Git से पुनर्स्थापित की जाएँगी।}}", + "gitConfirmDiscardTracked": "{count, plural, =1{चयनित ट्रैक की गई फ़ाइल के सभी चरणबद्ध और अचयनित परिवर्तन HEAD पर वापस लाए जाएँगे।} other{चयनित ट्रैक की गई फ़ाइलों के सभी चरणबद्ध और अचयनित परिवर्तन HEAD पर वापस लाए जाएँगे।}}", "gitConfirmDiscardUntracked": "{count, plural, =1{चयनित अनट्रैक की गई फ़ाइल हटा दी जाएगी।} other{चयनित अनट्रैक की गई फ़ाइलें हटा दी जाएँगी।}}", "gitConfirmDiscardMixed": "{count, plural, =1{चयनित फ़ाइल को उसकी Git स्थिति के आधार पर पुनर्स्थापित किया या हटाया जाएगा।} other{चयनित फ़ाइलों को उनकी Git स्थिति के आधार पर पुनर्स्थापित किया या हटाया जाएगा।}}", "gitConfirmSwitchBranchTitle": "{branch} पर स्विच करें?", "gitConfirmSwitchBranchMessage": "Git के शाखा बदलने के बाद BusyMark कार्यस्थान को डिस्क से फिर लोड करेगा।", "gitConfirmPushSetUpstreamTitle": "अपस्ट्रीम शाखा सेट करें?", "gitConfirmPushSetUpstreamMessage": "इस शाखा का कोई अपस्ट्रीम नहीं है। ठीक एक रिमोट कॉन्फ़िगर होने पर BusyMark {branch} को पुश करके उसका अपस्ट्रीम सेट कर सकता है।", - "gitProjectHistory": "प्रोजेक्ट", - "gitFileHistory": "मौजूदा फ़ाइल", + "gitProjectHistory": "परियोजना इतिहास", + "gitFileHistory": "फ़ाइल इतिहास", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "फ़ाइल कार्रवाइयाँ", "actions": "कार्रवाइयाँ", @@ -2288,73 +2350,138 @@ "gitErrorNetwork": "Git नेटवर्क कार्रवाई विफल रही।", "gitErrorConflict": "Git ने अनसुलझे टकराव रिपोर्ट किए।", "gitErrorCommandFailed": "Git कमांड विफल रहा।", - "markdownAndHtml": "Markdown और HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdown ब्लॉक", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Markdown स्रोत और प्रीव्यू में समर्थित ब्लॉक संरचनाएँ।", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "इनलाइन Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "ऐसी फ़ॉर्मैटिंग जिसे पैराग्राफ़, सूची आइटम और तालिका सेल के अंदर इस्तेमाल किया जा सकता है।", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "कच्चे HTML ब्लॉक", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "सुरक्षित ब्लॉक-स्तर HTML टैग जिन्हें BusyMark प्रीव्यू विजेट से दिखाया जाता है।", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "इनलाइन HTML टैग", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "सुरक्षित इनलाइन HTML टैग जिन्हें शाब्दिक टैग दिखाए बिना रेंडर किया जाता है।", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "सुरक्षा नियम", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "कच्चे HTML को प्रीव्यू से पहले पार्स और साफ़ किया जाता है।", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "शीर्षक", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "पैराग्राफ", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "सूचियाँ", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "कंटेनर", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "टेक्स्ट ब्लॉक", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "फ़िगर और चित्र", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "पूर्व-स्वरूपित कोड", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "खुलने वाले ब्लॉक", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "विवरण सूचियाँ", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "फ़ॉर्मैटिंग टैग", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "इनलाइन कोड टैग", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "अर्थपूर्ण टेक्स्ट टैग", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "साफ़ किया गया प्रीव्यू", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "अनुमत HTML को BusyMark प्रीव्यू ब्लॉक में बदला जाता है, ब्राउज़र में रेंडर नहीं किया जाता।", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "स्रोत सुरक्षित रहता है", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "असंपादित कच्चे HTML को ठीक उसी तरह स्रोत टेक्स्ट के रूप में सहेजा जाता है।", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "HTML के अंदर Markdown", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "कच्चे HTML के अंदर Markdown चिह्न शाब्दिक टेक्स्ट की तरह दिखते हैं।", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "सक्रिय सामग्री अवरुद्ध", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "स्क्रिप्ट, स्टाइल, फ़्रेम, फ़ॉर्म, SVG, MathML, इवेंट और असुरक्षित एट्रिब्यूट अवरुद्ध किए जाते हैं।", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "केवल सुरक्षित URL", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "लिंक http, https, mailto, tel, सापेक्ष URL और फ़्रैगमेंट स्वीकार करते हैं; असुरक्षित स्कीमें अवरुद्ध की जाती हैं।", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Git में जोड़ें", "delete": "हटाएँ", "newFile": "नई फ़ाइल", @@ -2372,101 +2499,294 @@ "errorFileOperationOutsideRoot": "फ़ाइल कार्रवाई कार्यस्थान के अंदर ही रहनी चाहिए।", "errorFileOperationRoot": "फ़ाइल ट्री से कार्यस्थान का रूट नहीं बदला जा सकता।", "safeDeleteTopicFile": "विषय फ़ाइल को सुरक्षित रूप से हटाएँ…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "TOC तत्व हटाएँ", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "उपयोगों की समीक्षा करें", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "विषय फ़ाइल हटाएँ", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "हटाएँ", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "“{topic}” को चुने गए इंस्टेंस से हटाएँ। विषय फ़ाइल रखी जाएगी।", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "“{topic}” को हटाएँ और इस पूरे Writerside प्रोजेक्ट में उसके संदर्भों को सुरक्षित रूप से अपडेट करें।", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 उप-विषय एक स्तर ऊपर चला जाएगा।} other{{count} उप-विषय एक स्तर ऊपर चले जाएँगे।}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "यह विषय किसी इंस्टेंस के प्रारंभ पृष्ठ के रूप में उपयोग हो रहा है। इसके उपयोगों की समीक्षा करें और आगे बढ़ने से पहले कोई दूसरा प्रारंभ पृष्ठ निर्धारित करें।", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "उपयोग ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "कोई ऐसा संदर्भ नहीं मिला जो टूट सकता है।", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark को इस विषय के निम्न संदर्भ मिले।", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "TOC तत्व", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "प्रारंभ पृष्ठ", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "विषय लिंक", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "शामिल अंश", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{1 उपयोग} other{{count} उपयोग}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "रीफ़ैक्टरिंग विकल्प", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "उपयोगों को अपने आप अपडेट करें", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "TOC संदर्भ और शामिल अंश हटाएँ, और लिंक का टेक्स्ट बनाए रखें।", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "इस रीफ़ैक्टरिंग से पहले कुछ उपयोगों को मैन्युअल रूप से बदलना होगा।", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "इस पर रीडायरेक्ट करें", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "पुराने प्रकाशित पृष्ठ को रीडायरेक्ट न करें।", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "रीडायरेक्ट गंतव्य", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "आगे बढ़ने से पहले शेष उपयोगों की समीक्षा करके उन्हें अपडेट करें, या उपलब्ध होने पर अपने आप अपडेट करने का विकल्प चालू करें।", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "{topic} के उपयोग", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "कोई उपयोग नहीं मिला", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "चुने गए इंस्टेंस के बाहर", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "रीफ़ैक्टर करें", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "विषय फ़ाइल अब उपयोग में नहीं है", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "विषय फ़ाइल रखें", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "“{topic}” अब इस Writerside प्रोजेक्ट में कहीं भी उपयोग नहीं होता। फ़ाइल हटाएँ या किसी दूसरे इंस्टेंस में उपयोग के लिए इसे रखें।", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Writerside विषय फ़ाइलों के लिए सुरक्षित रूप से हटाएँ सुविधा का उपयोग करें।", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "विषय के उपयोगों की जाँच पूरी नहीं हो सकी। कोई फ़ाइल नहीं बदली गई।", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "विषय के कुछ उपयोगों पर अभी ध्यान देना आवश्यक है। आगे बढ़ने से पहले उनकी समीक्षा करें।", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "चुना गया रीडायरेक्ट लक्ष्य अब मान्य नहीं है। उसे फिर से चुनें।", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "विषय हटाने की कार्रवाई पूरी तरह वापस नहीं की जा सकी। आगे बढ़ने से पहले इन पथों की समीक्षा करें: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "PDF के रूप में निर्यात करें", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "सुंदर और स्व-निहित PDF के लिए पृष्ठ लेआउट चुनें।", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "निर्यात के दौरान दूरस्थ चित्र डाउनलोड नहीं किए जाते। उपलब्ध स्थानीय चित्र शामिल किए जाते हैं।", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "पृष्ठ आकार", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "लेटर", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "दिशा", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "पोर्ट्रेट", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "लैंडस्केप", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "हाशिए", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "संकीर्ण", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "सामान्य", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "चौड़े", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "पृष्ठ संख्याएँ शामिल करें", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "निर्यात करें", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "PDF निर्यात हो रहा है…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "PDF दस्तावेज़", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "{fileName} निर्यात किया गया।", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} निर्यात किया गया। शामिल न हो सकने वाले चित्र: {count}।", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "PDF निर्यात घटक उपलब्ध नहीं है। BusyMark को फिर स्थापित करके दोबारा प्रयास करें।", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "PDF निर्यात में बहुत समय लगा और इसे रोक दिया गया।", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark इस दस्तावेज़ को PDF के रूप में निर्यात नहीं कर सका।", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "PDF के रूप में निर्यात करें", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "सुंदर और स्व-निहित PDF के लिए पृष्ठ लेआउट चुनें।", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "निर्यात के दौरान दूरस्थ चित्र डाउनलोड नहीं किए जाते। उपलब्ध स्थानीय चित्र शामिल किए जाते हैं।", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "पृष्ठ आकार", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "लेटर", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "दिशा", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "पोर्ट्रेट", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "लैंडस्केप", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "हाशिए", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "संकीर्ण", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "सामान्य", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "चौड़े", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "पृष्ठ संख्याएँ शामिल करें", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "निर्यात करें", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "PDF निर्यात हो रहा है…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "PDF दस्तावेज़", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} निर्यात किया गया।", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} को {count, plural, =1{1 चेतावनी} other{{count} चेतावनियों}} के साथ निर्यात किया गया.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "PDF निर्यात घटक उपलब्ध नहीं है। BusyMark को फिर स्थापित करके दोबारा प्रयास करें।", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "PDF निर्यात में बहुत समय लगा और इसे रोक दिया गया।", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark इस दस्तावेज़ को PDF के रूप में निर्यात नहीं कर सका।", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "रेंडर हो रहा है…", "visualizationStale": "अंतिम मान्य रेंडर दिखाया जा रहा है", "visualizationShowSource": "स्रोत दिखाएँ", @@ -2487,7 +2807,10 @@ "visualizationRenderFailed": "इस विज़ुअलाइज़ेशन को रेंडर नहीं किया जा सका।", "visualizationRetry": "फिर प्रयास करें", "visualizationSaved": "{fileName} सहेजा गया", - "shortcutExportPdfDescription": "सक्रिय दस्तावेज़ या Writerside मॉड्यूल को PDF के रूप में निर्यात करें।", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "सक्रिय दस्तावेज़ या Writerside मॉड्यूल को PDF के रूप में निर्यात करें।", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "स्टेज किए गए", "gitUnstaged": "स्टेज नहीं किए गए", "gitFetch": "प्राप्त करें", @@ -2604,7 +2927,6 @@ "ai": "एआई", "aiLocalOllama": "स्थानीय Ollama", "aiDisabled": "अक्षम", - "aiLocalOnlyDescription": "AI संपादन केवल स्पष्ट कार्रवाई से शुरू होता है। BusyMark चयनित प्रदाता को केवल दिखाया गया संदर्भ भेजता है और समीक्षा के बिना किसी प्रस्ताव को लागू नहीं करता।", "aiProvider": "एआई प्रदाता", "aiDefaultProvider": "डिफ़ॉल्ट प्रदाता", "aiConfigureProvider": "प्रदाता कॉन्फ़िगर करें", @@ -2718,14 +3040,18 @@ "reloadFromDisk": "डिस्क से फिर लोड करें", "keepMine": "मेरा संस्करण रखें", "saveAs": "इस रूप में सहेजें", - "unsavedChangesMultipleMessage": "{count} दस्तावेज़ों में सहेजे नहीं गए बदलाव हैं। जारी रखने से पहले इन्हें सहेजें?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 दस्तावेज़ में असुरक्षित बदलाव हैं। इसे जारी रखने से पहले सहेजें।} other{{count} दस्तावेज़ों में असुरक्षित बदलाव हैं। इन्हें जारी रखने से पहले सहेजें।}}", "workspaceReplaceIssuePartialConflict": "रोलबैक रोक दिया गया क्योंकि फ़ाइल उसी समय बदल गई थी। कुछ प्रतिस्थापन बने रह सकते हैं; हटाई गई सामग्री नीचे दिए गए पथ पर सुरक्षित रखी गई है।", "workspaceReplaceIssueApplyFailed": "कोई प्रतिस्थापन लागू नहीं किया गया क्योंकि समीक्षा किए गए समूह को सुरक्षित रूप से सहेजा नहीं जा सका।", - "workspaceRecoveryRestored": "{count} सहेजे नहीं गए दस्तावेज़ पुनर्प्राप्त किए गए। जारी रखने से पहले प्रत्येक पुनर्प्राप्त दस्तावेज़ की समीक्षा करें।", - "workspaceRecoveryDamaged": "{count} क्षतिग्रस्त पुनर्प्राप्ति रिकॉर्ड बहाल नहीं किए जा सके। मान्य पुनर्प्राप्त दस्तावेज़ उपलब्ध हैं।", + "workspaceRecoveryRestored": "{count, plural, =1{1 बिना सहेजा दस्तावेज़ पुनर्प्राप्त किया गया। इसे सहेजने या हटाने से पहले समीक्षा करें।} other{{count} बिना सहेजे दस्तावेज़ पुनर्प्राप्त किए गए। प्रत्येक की समीक्षा करके सहेजें या हटाएँ।}}", + "workspaceRecoveryDamaged": "{count, plural, =1{एक क्षतिग्रस्त पुनर्प्राप्ति रिकॉर्ड पुनर्स्थापित नहीं किया जा सका। मूल पुनर्प्राप्ति फ़ाइल निरीक्षण के लिए सुरक्षित रखी गई।} other{{count} क्षतिग्रस्त पुनर्प्राप्ति रिकॉर्ड पुनर्स्थापित नहीं किए जा सके। वैध पुनर्प्राप्ति रिकॉर्ड अभी भी उपलब्ध हैं।}}", "recoveredDocumentReview": "{fileName} की सहेजी नहीं गई सामग्री पुनर्प्राप्त हुई। इसकी समीक्षा करें, फिर सहेजें, इस रूप में सहेजें या छोड़ दें।", "commandUnavailableInContext": "यह आदेश वर्तमान संदर्भ में उपलब्ध नहीं है।", "mathRenderFailed": "गणितीय व्यंजक रेंडर नहीं किया जा सका।", "inlineMath": "इनलाइन गणित", - "displayMath": "डिस्प्ले गणित" + "displayMath": "डिस्प्ले गणित", + "aiExplicitEditingDescription": "AI संपादन केवल स्पष्ट कार्रवाई से शुरू होता है। BusyMark चयनित प्रदाता को केवल दिखाया गया संदर्भ भेजता है और समीक्षा के बिना किसी प्रस्ताव को लागू नहीं करता।", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 828de9dc..bf692183 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -1,515 +1,1050 @@ { "@@locale": "id", "appTitle": "BusyMark", - "@appTitle": {"description":"Application name."}, + "@appTitle": { + "description": "Application name." + }, "appSubtitle": "Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside.", - "@appSubtitle": {"description":"Short application description."}, + "@appSubtitle": { + "description": "Short application description." + }, "aboutBusyMark": "Tentang BusyMark", - "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, - "aboutTagline": "Markdown dan Editor Writerside", - "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, + "aboutTagline": "Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside", + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, "aboutLicenseLabel": "Lisensi", - "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, "aboutLicenseName": "Apache License 2.0", - "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, "aboutWebsite": "Situs web", - "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, "aboutSourceCode": "Kode sumber", - "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, "reportIssue": "Laporkan masalah", - "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, "feedbackCategory": "Kategori", - "@feedbackCategory": {"description":"Feedback category field label."}, + "@feedbackCategory": { + "description": "Feedback category field label." + }, "feedbackChooseCategory": "Pilih kategori", - "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, "feedbackCategoryProblem": "Masalah atau bug", - "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, "feedbackCategoryFeature": "Permintaan fitur", - "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, "feedbackCategoryPrivacySecurity": "Masalah privasi atau keamanan", - "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, "feedbackCategoryUsability": "Masalah kegunaan", - "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, "feedbackCategoryOther": "Lainnya", - "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, "feedbackSubject": "Subjek", - "@feedbackSubject": {"description":"Feedback subject field label."}, + "@feedbackSubject": { + "description": "Feedback subject field label." + }, "feedbackMessage": "Pesan terperinci", - "@feedbackMessage": {"description":"Detailed feedback message field label."}, - "feedbackReplyEmail": "Balasan email (opsional)", - "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "Alamat email balasan (opsional)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, "feedbackIncludeTechnicalDetails": "Sertakan detail teknis", - "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, "feedbackTechnicalDetailsDisclosure": "Jika diaktifkan, ini hanya menambahkan versi sistem operasi Linux dan lokal aplikasi BusyMark Anda. Tidak ada log, file, data akun, atau diagnostik lainnya yang dilampirkan.", - "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, "feedbackSubmit": "Kirim", - "@feedbackSubmit": {"description":"Button that submits feedback."}, + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, "feedbackSubmitting": "Mengirimkan…", - "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, "feedbackCategoryRequired": "Pilih kategori.", - "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, "feedbackSubjectLength": "Subjek harus antara 3 dan 120 karakter.", - "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, "feedbackMessageLength": "Pesan harus antara 10 dan 5.000 karakter.", - "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, "feedbackReplyEmailInvalid": "Masukkan alamat email yang valid atau biarkan kolom ini kosong.", - "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, "feedbackConnectionFailure": "BusyMark tidak dapat terhubung. Periksa koneksi internet Anda dan coba lagi.", - "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, "feedbackTimeoutFailure": "Waktu permintaan telah habis. Coba lagi.", - "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, "feedbackRateLimitedFailure": "Terlalu banyak laporan yang dikirim dari koneksi ini. Tunggu dan coba lagi.", - "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, "feedbackRejectedFailure": "Server menolak laporan ini. Periksa kolom formulir dan coba lagi.", - "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, "feedbackServerFailure": "Server tidak dapat menerima laporan tersebut. Coba lagi nanti.", - "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, "feedbackSuccess": "Umpan balik dikirim. ID Referensi: {id}", - "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "advanced": "Lanjutan", - "@advanced": {"description":"Settings section title for advanced actions."}, + "@advanced": { + "description": "Settings section title for advanced actions." + }, "addToGit": "Tambahkan ke Git", - "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, "appearance": "Penampilan", - "@appearance": {"description":"Settings section title for appearance options."}, + "@appearance": { + "description": "Settings section title for appearance options." + }, "apply": "Terapkan", - "@apply": {"description":"Button label that applies a dialog change."}, + "@apply": { + "description": "Button label that applies a dialog change." + }, "back": "Kembali", - "@back": {"description":"Tooltip for navigating back."}, + "@back": { + "description": "Tooltip for navigating back." + }, "bottomLeft": "Kiri bawah", - "@bottomLeft": {"description":"Editing button position option."}, + "@bottomLeft": { + "description": "Editing button position option." + }, "bottomRight": "Kanan bawah", - "@bottomRight": {"description":"Editing button position option."}, + "@bottomRight": { + "description": "Editing button position option." + }, "cancel": "Batal", - "@cancel": {"description":"Cancel button label."}, + "@cancel": { + "description": "Cancel button label." + }, "choose": "Pilih", - "@choose": {"description":"Button label for choosing a file or path."}, + "@choose": { + "description": "Button label for choosing a file or path." + }, "chooseLocation": "Pilih lokasi", - "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, "copy": "Salin", - "@copy": {"description":"Copy command label."}, + "@copy": { + "description": "Copy command label." + }, "copyName": "Salin nama", - "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, "copyFileName": "Salin nama file", - "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, "copyPath": "Salin jalur", - "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, "create": "Buat", - "@create": {"description":"Create action label."}, + "@create": { + "description": "Create action label." + }, "creating": "Membuat...", - "@creating": {"description":"Progress label while a project or topic is being created."}, + "@creating": { + "description": "Progress label while a project or topic is being created." + }, "cut": "Potong", - "@cut": {"description":"Cut command label."}, - "promoteSection": "Bagian promosi", - "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, - "demoteSection": "Bagian demosi", - "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "@cut": { + "description": "Cut command label." + }, + "promoteSection": "Naikkan bagian", + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, + "demoteSection": "Turunkan bagian", + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, "moveSectionUp": "Pindahkan bagian ke atas", - "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, "moveSectionDown": "Pindahkan bagian ke bawah", - "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, "confirmDeleteSectionTitle": "Hapus bagian?", - "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, "confirmDeleteSectionMessage": "Hapus “{name}” dan semua konten di bagiannya? Hal ini tidak dapat dibatalkan.", - "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "darkTheme": "Gelap", - "@darkTheme": {"description":"Dark theme option."}, + "@darkTheme": { + "description": "Dark theme option." + }, "delete": "Hapus", - "@delete": {"description":"Delete command label."}, - "discard": "Membuang", - "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "@delete": { + "description": "Delete command label." + }, + "discard": "Buang", + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, "editor": "Editor", - "@editor": {"description":"Editor view label."}, + "@editor": { + "description": "Editor view label." + }, "file": "File", - "@file": {"description":"Generic file kind label."}, + "@file": { + "description": "Generic file kind label." + }, "fileHistory": "Riwayat File", - "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, "folder": "Folder", - "@folder": {"description":"Folder kind label."}, + "@folder": { + "description": "Folder kind label." + }, "insert": "Sisipkan", - "@insert": {"description":"Insert button label."}, + "@insert": { + "description": "Insert button label." + }, "keyboardShortcuts": "Pintasan keyboard", - "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, "commandPalette": "Palet perintah", - "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, "commandPaletteHint": "Ketikkan perintah", - "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, "commandPaletteEmpty": "Tidak ada perintah yang cocok", - "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, "commandUnavailableInContext": "Tidak tersedia dalam konteks editor saat ini", - "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, "lightTheme": "Terang", - "@lightTheme": {"description":"Light theme option."}, + "@lightTheme": { + "description": "Light theme option." + }, "mainMenu": "Menu utama", - "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, "fullScreen": "Layar penuh", - "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, "markdown": "Markdown", - "@markdown": {"description":"Markdown format label."}, + "@markdown": { + "description": "Markdown format label." + }, "open": "Buka", - "@open": {"description":"Open action label."}, + "@open": { + "description": "Open action label." + }, "openInFiles": "Buka di File", - "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, "pathActions": "Tindakan jalur", - "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, "outline": "Garis besar", - "@outline": {"description":"Outline sidebar tab label."}, + "@outline": { + "description": "Outline sidebar tab label." + }, "overwrite": "Timpa", - "@overwrite": {"description":"Button label for overwriting a changed file."}, + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, "paste": "Tempel", - "@paste": {"description":"Paste command label."}, + "@paste": { + "description": "Paste command label." + }, "pasteWithoutFormatting": "Tempel tanpa memformat", - "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, "reading": "Membaca", - "@reading": {"description":"Reading view label."}, + "@reading": { + "description": "Reading view label." + }, "removeFromRecent": "Hapus dari Terbaru", - "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, "recent": "Terbaru", - "@recent": {"description":"Recent workspaces section title."}, + "@recent": { + "description": "Recent workspaces section title." + }, "redo": "Ulangi", - "@redo": {"description":"Redo command label."}, + "@redo": { + "description": "Redo command label." + }, "save": "Simpan", - "@save": {"description":"Save action label."}, + "@save": { + "description": "Save action label." + }, "search": "Cari", - "@search": {"description":"Search action label and field hint."}, + "@search": { + "description": "Search action label and field hint." + }, "selectAll": "Pilih semua", - "@selectAll": {"description":"Select all command label."}, + "@selectAll": { + "description": "Select all command label." + }, "settings": "Pengaturan", - "@settings": {"description":"Settings action label."}, + "@settings": { + "description": "Settings action label." + }, "source": "Sumber", - "@source": {"description":"Source view label."}, + "@source": { + "description": "Source view label." + }, "split": "Pisahkan", - "@split": {"description":"Split view label."}, + "@split": { + "description": "Split view label." + }, "systemTheme": "Sistem", - "@systemTheme": {"description":"System theme option."}, + "@systemTheme": { + "description": "System theme option." + }, "theme": "Tema", - "@theme": {"description":"Theme setting label."}, + "@theme": { + "description": "Theme setting label." + }, "appLanguage": "Bahasa", - "@appLanguage": {"description":"Application language setting label."}, + "@appLanguage": { + "description": "Application language setting label." + }, "systemLanguage": "Sistem", - "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, "languageEnglish": "English", - "@languageEnglish": {"description":"Language selector option for English."}, + "@languageEnglish": { + "description": "Language selector option for English." + }, "languageGerman": "Deutsch", - "@languageGerman": {"description":"Language selector option for German."}, + "@languageGerman": { + "description": "Language selector option for German." + }, "languageDutch": "Nederlands", - "@languageDutch": {"description":"Language selector option for Dutch."}, + "@languageDutch": { + "description": "Language selector option for Dutch." + }, "languageTurkish": "Türkçe", - "@languageTurkish": {"description":"Language selector option for Turkish."}, + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", - "@languageItalian": {"description":"Language selector option for Italian."}, - "languageNorwegian": "Norsk", - "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk bokmål", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, "languageFrench": "Français", - "@languageFrench": {"description":"Language selector option for French."}, + "@languageFrench": { + "description": "Language selector option for French." + }, "languageRussian": "Русский", - "@languageRussian": {"description":"Language selector option for Russian."}, + "@languageRussian": { + "description": "Language selector option for Russian." + }, "languageUkrainian": "Українська", - "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, "languagePolish": "Polski", - "@languagePolish": {"description":"Language selector option for Polish."}, + "@languagePolish": { + "description": "Language selector option for Polish." + }, "languageSpanish": "Español", - "@languageSpanish": {"description":"Language selector option for Spanish."}, + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, "languagePortuguese": "Português", - "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, "languageArabic": "العربية", - "@languageArabic": {"description":"Language selector option for Arabic."}, + "@languageArabic": { + "description": "Language selector option for Arabic." + }, "languagePersian": "فارسی", - "@languagePersian": {"description":"Language selector option for Persian."}, + "@languagePersian": { + "description": "Language selector option for Persian." + }, "languageHindi": "हिन्दी", - "@languageHindi": {"description":"Language selector option for Hindi."}, + "@languageHindi": { + "description": "Language selector option for Hindi." + }, "languageIndonesian": "Bahasa Indonesia", - "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", - "@languageEstonian": {"description":"Language selector option for Estonian."}, + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, "languageVietnamese": "Tiếng Việt", - "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, "languageJapanese": "日本語", - "@languageJapanese": {"description":"Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description":"Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", - "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Panel bilah sisi", - "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, "topLeft": "Kiri atas", - "@topLeft": {"description":"Editing button position option."}, + "@topLeft": { + "description": "Editing button position option." + }, "topRight": "Kanan atas", - "@topRight": {"description":"Editing button position option."}, + "@topRight": { + "description": "Editing button position option." + }, "undo": "Urungkan", - "@undo": {"description":"Undo command label."}, + "@undo": { + "description": "Undo command label." + }, "validate": "Validasi", - "@validate": {"description":"Validate action label."}, + "@validate": { + "description": "Validate action label." + }, "validation": "Validasi", - "@validation": {"description":"Settings section title for validation options."}, + "@validation": { + "description": "Settings section title for validation options." + }, "viewMode": "Modus tampilan", - "@viewMode": {"description":"Native header bar view mode control label."}, + "@viewMode": { + "description": "Native header bar view mode control label." + }, "welcome": "Selamat datang", - "@welcome": {"description":"Welcome screen label and tooltip."}, + "@welcome": { + "description": "Welcome screen label and tooltip." + }, "writerside": "Writerside", - "@writerside": {"description":"Writerside workspace kind label."}, + "@writerside": { + "description": "Writerside workspace kind label." + }, "xml": "XML", - "@xml": {"description":"XML format label."}, + "@xml": { + "description": "XML format label." + }, "fileTypeMarkdown": "Markdown", - "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, "fileTypeImages": "Gambar", - "@fileTypeImages": {"description":"Native file picker type label for images."}, + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, "openMarkdownFile": "Buka File Markdown", - "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, "markdownFileExtensions": ".md atau .markdown", - "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, "openFolderOrWritersideProject": "Buka Folder atau Proyek Writerside", - "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, "markdownFolderOrWritersideProject": "Folder Markdown atau proyek yang kompatibel dengan Writerside", - "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, "noOpenFile": "Tidak ada file yang terbuka", - "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, "shortcutDeleteTreeItemDescription": "Hapus item File yang dipilih, atau hapus topik yang dipilih dari daftar isi", - "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Umum", - "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, "shortcutNewDocument": "Buat", - "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, "shortcutNewDocumentDescription": "Buat file Markdown atau proyek Writerside", - "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, "shortcutOpenDescription": "Buka file Markdown, folder, atau proyek Writerside", - "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, "shortcutSaveDescription": "Simpan dokumen saat ini", - "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, "shortcutSearchDescription": "Cari ruang kerja saat ini", - "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, "shortcutKeyboardShortcutsDescription": "Tampilkan referensi pintasan keyboard ini", - "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, "shortcutMarkdownAndHtmlDescription": "Buka referensi Markdown dan HTML", - "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, "shortcutSettingsDescription": "Buka pengaturan BusyMark", - "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, "shortcutNextTab": "Tab berikutnya", - "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, "shortcutNextTabDescription": "Pindah ke tab terbuka berikutnya", - "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, "shortcutPreviousTab": "Tab sebelumnya", - "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, "shortcutPreviousTabDescription": "Pindah ke tab terbuka sebelumnya", - "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, "shortcutCloseTab": "Tutup tab", - "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, "shortcutCloseTabDescription": "Tutup tab aktif", - "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, "shortcutCloseAllTabs": "Tutup semua tab", - "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, "shortcutCloseAllTabsDescription": "Tutup semua tab yang terbuka", - "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, "shortcutGroupTextEditing": "Pengeditan teks", - "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, "shortcutSelectAllDescription": "Dalam mode Sumber, pilih semua teks; dalam mode Editor, tekan dua kali untuk memilih setiap blok", - "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, "shortcutCutDescription": "Potong teks yang dipilih", - "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, "shortcutCopyDescription": "Salin teks yang dipilih", - "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, "shortcutPasteDescription": "Tempel dari papan klip", - "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, "shortcutPastePlainTextDescription": "Tempel teks papan klip tanpa memformat", - "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, "shortcutUndoDescription": "Urungkan pengeditan terakhir", - "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, - "shortcutRedoDescription": "Ulangi pengeditan terakhir yang belum selesai", - "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, + "shortcutRedoDescription": "Ulangi tindakan terakhir", + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, "shortcutInsertIndentation": "Masukkan lekukan", - "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Sisipkan lekukan pada kursor", - "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Kurangi inden sumber", - "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Hapus satu tingkat lekukan dalam mode Sumber", - "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Tutup pencarian atau hapus pilihan blok", - "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, "shortcutEscapeDescription": "Tutup pencarian ruang kerja atau hapus pilihan blok dalam mode Editor", - "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, "shortcutGroupFormatting": "Pemformatan", - "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, "shortcutBoldDescription": "Alihkan huruf tebal pada teks yang dipilih", - "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, "shortcutItalicDescription": "Alihkan huruf miring pada teks yang dipilih", - "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, "shortcutUnderlineDescription": "Alihkan garis bawah pada teks yang dipilih", - "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, "shortcutLinkDescription": "Sisipkan atau edit tautan", - "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, "shortcutInlineCodeDescription": "Alihkan kode sebaris pada teks yang dipilih", - "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, "shortcutStrikethroughDescription": "Alihkan coretan pada teks yang dipilih", - "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, "shortcutGroupBlocks": "Blok", - "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, "shortcutParagraphDescription": "Atur blok saat ini ke paragraf", - "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, "shortcutHeading1Description": "Atur blok saat ini sebagai judul 1", - "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, "shortcutHeading2Description": "Atur blok saat ini sebagai judul 2", - "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, "shortcutHeading3Description": "Atur blok saat ini sebagai judul 3", - "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, "shortcutHeading4Description": "Atur blok saat ini sebagai judul 4", - "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, "shortcutHeading5Description": "Atur blok saat ini sebagai judul 5", - "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, "shortcutHeading6Description": "Atur blok saat ini sebagai judul 6", - "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, "shortcutGroupLists": "Daftar", - "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, "numberedList": "Daftar bernomor", - "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, "shortcutNumberedListDescription": "Alihkan pemformatan daftar bernomor", - "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, "bulletedList": "Daftar berpoin", - "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, "shortcutBulletedListDescription": "Alihkan pemformatan daftar berpoin", - "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, "checklist": "Daftar periksa", - "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, "shortcutChecklistDescription": "Alihkan pemformatan daftar periksa", - "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, "shortcutGroupSidebar": "Bilah samping", - "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, "sidebarViewMenu": "Tampilan bilah sisi", - "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, "createMarkdownFile": "Buat File Markdown", - "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, "createMarkdownFileDescription": "Mulai dokumen Markdown lokal yang belum disimpan", - "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, "createWritersideProject": "Buat Proyek Writerside", - "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, "createWritersideProjectDescription": "Mulai proyek lokal yang kompatibel dengan Writerside", - "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, "defaultProjectName": "Dokumentasi", - "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, "defaultInstanceName": "Panduan Pengguna", - "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, "defaultStartTopicTitle": "Memulai", - "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, "projectName": "Nama proyek", - "@projectName": {"description":"Create project dialog field label."}, + "@projectName": { + "description": "Create project dialog field label." + }, "directoryName": "Nama direktori", - "@directoryName": {"description":"Create project dialog field label."}, + "@directoryName": { + "description": "Create project dialog field label." + }, "instanceName": "Nama instance", - "@instanceName": {"description":"Create project dialog field label."}, + "@instanceName": { + "description": "Create project dialog field label." + }, "instanceId": "ID instance", - "@instanceId": {"description":"Create project dialog field label."}, - "startTopicTitle": "Mulai judul topik", - "@startTopicTitle": {"description":"Create project dialog field label."}, + "@instanceId": { + "description": "Create project dialog field label." + }, + "startTopicTitle": "Topik awal", + "@startTopicTitle": { + "description": "Create project dialog field label." + }, "location": "Lokasi", - "@location": {"description":"Create dialog location section label."}, + "@location": { + "description": "Create dialog location section label." + }, "projectNameRequired": "Nama proyek wajib diisi.", - "@projectNameRequired": {"description":"Validation message for missing project name."}, + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, "directoryNameRequired": "Nama direktori wajib diisi.", - "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, "useSingleSafeDirectoryName": "Gunakan satu nama direktori aman.", - "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, "useLowercaseIdentifier": "Gunakan pengenal huruf kecil dengan huruf, angka, garis bawah, atau tanda hubung.", - "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, "startTopicTitleRequired": "Judul topik awal wajib diisi.", - "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, "createWritersideProjectFailed": "Tidak dapat membuat proyek Writerside.", - "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, "settingsTitle": "Pengaturan BusyMark", - "@settingsTitle": {"description":"Settings screen title."}, + "@settingsTitle": { + "description": "Settings screen title." + }, "autoSave": "Simpan otomatis", - "@autoSave": {"description":"Editor setting label for saving files automatically."}, + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, "autoSaveDescription": "Simpan perubahan file secara otomatis setelah jeda singkat.", - "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, "wordWrap": "Pindah baris otomatis", - "@wordWrap": {"description":"Word wrap setting label."}, + "@wordWrap": { + "description": "Word wrap setting label." + }, "editorFontSize": "Ukuran font editor", - "@editorFontSize": {"description":"Editor font size setting label."}, + "@editorFontSize": { + "description": "Editor font size setting label." + }, "validateOnEdit": "Validasi saat mengedit", - "@validateOnEdit": {"description":"Validation setting label."}, + "@validateOnEdit": { + "description": "Validation setting label." + }, "clearRecentWorkspaces": "Hapus ruang kerja terbaru", - "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, "editingButtonsPosition": "Posisi tombol pengeditan", - "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, "editingButtonsPositionDescription": "Pilih di mana tombol pengeditan WYSIWYG mengambang muncul.", - "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, "editingButtonsDirection": "Arah tombol pengeditan", - "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, "editingButtonsDirectionDescription": "Pilih apakah tombol pengeditan WYSIWYG mengambang disusun secara horizontal atau vertikal.", - "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, "horizontal": "Horizontal", - "@horizontal": {"description":"Editing button direction option."}, + "@horizontal": { + "description": "Editing button direction option." + }, "vertical": "Vertikal", - "@vertical": {"description":"Editing button direction option."}, + "@vertical": { + "description": "Editing button direction option." + }, "privacy": "Privasi", - "@privacy": {"description":"Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Muat gambar jarak jauh", - "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Izinkan pratinjau Markdown dan gambar editor dimuat dari URL http dan https.", - "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Hapus izin gambar jarak jauh", - "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Lupakan ruang kerja yang diizinkan memuat gambar jarak jauh.", - "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Hapus ruang kerja Git yang tepercaya", - "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Tanyakan sebelum mengaktifkan fitur Git untuk ruang kerja tepercaya sebelumnya.", - "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Jendela", - "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, "settingsReopenWorkspaceOnStartupTitle": "Buka kembali ruang kerja sebelumnya saat startup", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Buka ruang kerja dan tab dari sesi sebelumnya saat BusyMark dimulai.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Konfirmasikan sebelum menutup dengan perubahan yang belum disimpan", - "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, "settingsConfirmCloseWithUnsavedChangesDescription": "Tanyakan sebelum menutup BusyMark jika ada perubahan yang belum disimpan pada dokumen.", - "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, "closeUnsavedChangesTitle": "Perubahan yang belum disimpan", - "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, "closeUnsavedChangesSingleMessage": "Dokumen ini memiliki perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?", - "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Simpan perubahan sebelum menutup BusyMark?} =1{Ada 1 dokumen dengan perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?} other{Ada {count} dokumen dengan perubahan yang belum disimpan. Simpan perubahan sebelum menutup BusyMark?}}", - "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "closeUnsavedChangesCancel": "Batal", - "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, - "closeUnsavedChangesDiscard": "Membuang", - "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesDiscard": "Buang", + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, "closeUnsavedChangesSave": "Simpan", - "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, "currentFile": "File saat ini", - "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, "unsavedChanges": "Perubahan yang belum disimpan", - "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, "unsavedChangesMessage": "Anda memiliki perubahan yang belum disimpan di {fileName}. Simpan sebelum melanjutkan?", - "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "unsavedChangesMultipleMessage": "{count, plural, =1{Ada 1 dokumen dengan perubahan yang belum disimpan. Simpan sebelum melanjutkan?} other{Ada {count} dokumen dengan perubahan yang belum disimpan. Simpan sebelum melanjutkan?}}", - "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "fileChangedOnDisk": "File diubah pada disk", - "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, "fileChangedOnDiskMessage": "File ini berubah pada disk sejak Anda membukanya. Timpa itu?", - "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, "untitledMarkdownFileName": "Tanpa judul.md", - "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, "unorderedList": "Daftar tidak berurutan", - "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, "orderedList": "Daftar bernomor", - "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, "taskList": "Daftar tugas", - "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, "toggleTaskChecked": "Alihkan status tugas", - "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, "indentListItem": "Tambah inden item daftar", - "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, "outdentListItem": "Kurangi inden item daftar", - "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, "blockquote": "Kutipan blok", - "@blockquote": {"description":"Blockquote command label."}, + "@blockquote": { + "description": "Blockquote command label." + }, "codeBlock": "Blok kode", - "@codeBlock": {"description":"Code block command or preview label."}, + "@codeBlock": { + "description": "Code block command or preview label." + }, "codeBlockLanguage": "Bahasa blok kode", - "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, "image": "Gambar", - "@image": {"description":"Image command and document kind label."}, + "@image": { + "description": "Image command and document kind label." + }, "video": "Video", "openVideo": "Putar video", "pauseVideo": "Jeda video", @@ -517,1268 +1052,3281 @@ "videoPreview": "Pratinjau video", "diagnosticWritersideVideoMissingSource": "Video tidak memiliki atribut src-nya.", "diagnosticWritersideVideoUnsupportedSource": "Sumber video tidak didukung: {source}", - "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingFile": "File video tidak ada: {source}", - "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingPreview": "Gambar pratinjau video tidak ada: {preview}", - "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, "inlineImage": "Gambar sebaris", - "@inlineImage": {"description":"Inline image command label."}, + "@inlineImage": { + "description": "Inline image command label." + }, "table": "Tabel", - "@table": {"description":"Table command label."}, + "@table": { + "description": "Table command label." + }, "htmlBlock": "Blok HTML", - "@htmlBlock": {"description":"HTML block command label."}, + "@htmlBlock": { + "description": "HTML block command label." + }, "htmlContentDefault": "Konten HTML", - "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "Sisipkan atau edit blok HTML", - "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, "renderedHtml": "HTML yang dirender", - "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, "editHtml": "Edit HTML", - "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, "htmlSource": "Sumber HTML", - "@htmlSource": {"description":"Text field label for raw HTML source."}, + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, "thematicBreak": "Pemisah tematik", - "@thematicBreak": {"description":"Thematic break command label."}, + "@thematicBreak": { + "description": "Thematic break command label." + }, "bold": "Tebal", - "@bold": {"description":"Bold command label."}, + "@bold": { + "description": "Bold command label." + }, "italic": "Miring", - "@italic": {"description":"Italic command label."}, + "@italic": { + "description": "Italic command label." + }, "underline": "Garis bawah", - "@underline": {"description":"Underline command label."}, + "@underline": { + "description": "Underline command label." + }, "strikethrough": "Dicoret", - "@strikethrough": {"description":"Strikethrough command label."}, + "@strikethrough": { + "description": "Strikethrough command label." + }, "inlineCode": "Kode sebaris", - "@inlineCode": {"description":"Inline code command label."}, + "@inlineCode": { + "description": "Inline code command label." + }, "link": "Link", - "@link": {"description":"Link command and preview label."}, + "@link": { + "description": "Link command and preview label." + }, "hardLineBreak": "Pemisah baris keras", - "@hardLineBreak": {"description":"Hard line break command label."}, + "@hardLineBreak": { + "description": "Hard line break command label." + }, "textStyle": "Gaya teks", - "@textStyle": {"description":"Text style menu tooltip."}, + "@textStyle": { + "description": "Text style menu tooltip." + }, "paragraph": "Paragraf", - "@paragraph": {"description":"Paragraph style label."}, + "@paragraph": { + "description": "Paragraph style label." + }, "heading1": "Judul 1", - "@heading1": {"description":"Heading 1 style label."}, + "@heading1": { + "description": "Heading 1 style label." + }, "heading2": "Judul 2", - "@heading2": {"description":"Heading 2 style label."}, + "@heading2": { + "description": "Heading 2 style label." + }, "heading3": "Judul 3", - "@heading3": {"description":"Heading 3 style label."}, + "@heading3": { + "description": "Heading 3 style label." + }, "heading4": "Judul 4", - "@heading4": {"description":"Heading 4 style label."}, + "@heading4": { + "description": "Heading 4 style label." + }, "heading5": "Judul 5", - "@heading5": {"description":"Heading 5 style label."}, + "@heading5": { + "description": "Heading 5 style label." + }, "heading6": "Judul 6", - "@heading6": {"description":"Heading 6 style label."}, + "@heading6": { + "description": "Heading 6 style label." + }, "headingLevelAbbreviation": "H{level}", - "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, "deleteTable": "Hapus tabel", - "@deleteTable": {"description":"Tooltip for deleting a table."}, + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, "tableColumnNumber": "Kolom {columnNumber}", - "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "insertColumnLeft": "Sisipkan kolom ke kiri", - "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, "insertColumnRight": "Sisipkan kolom ke kanan", - "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, "deleteColumn": "Hapus kolom", - "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, "tableAlignmentUnspecified": "Perataan: Tidak ditentukan", - "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, "tableAlignmentLeft": "Perataan: Kiri", - "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, "tableAlignmentCenter": "Perataan: Tengah", - "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, "tableAlignmentRight": "Perataan: Kanan", - "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, "tableRowNumber": "Baris {rowNumber}", - "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, "insertRowAbove": "Sisipkan baris di atas", - "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, "insertRowBelow": "Sisipkan baris di bawah", - "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, "deleteRow": "Hapus baris", - "@deleteRow": {"description":"Menu item for deleting a table row."}, + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, "tableHeaderHint": "Header", - "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, "tableCellHint": "Sel", - "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, "language": "Bahasa", - "@language": {"description":"Code block language field label."}, + "@language": { + "description": "Code block language field label." + }, "hideEditingButtons": "Sembunyikan tombol pengeditan", - "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, "showEditingButtons": "Tampilkan tombol pengeditan", - "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, "altText": "Teks alternatif", - "@altText": {"description":"Image alt text field label."}, + "@altText": { + "description": "Image alt text field label." + }, "editorPlaceholderText": "teks", - "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "kode", - "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "teks alternatif", - "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Jelaskan gambarnya", - "@describeTheImage": {"description":"Image alt text hint."}, + "@describeTheImage": { + "description": "Image alt text hint." + }, "columns": "Kolom", - "@columns": {"description":"Table dialog columns field label."}, + "@columns": { + "description": "Table dialog columns field label." + }, "rows": "Baris", - "@rows": {"description":"Table dialog rows field label."}, + "@rows": { + "description": "Table dialog rows field label." + }, "tableHeaderNumber": "Header {columnNumber}", - "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "tableCellDefault": "Sel", - "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, "noImageSource": "Tidak ada sumber gambar", - "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, "remoteImageBlocked": "Gambar jarak jauh diblokir", - "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Pilih apakah BusyMark dapat memuat gambar jarak jauh.", - "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Gambar jarak jauh diblokir", - "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Dokumen ini merujuk pada gambar dari internet. Memuatnya dapat mengungkapkan informasi jaringan ke host gambar.", - "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Muat untuk ruang kerja ini", - "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Selalu muat gambar jarak jauh", - "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Sembunyikan panel bilah sisi", - "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, "showSidebar": "Tampilkan panel bilah sisi", - "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, "showPreview": "Tampilkan pratinjau", - "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, "hidePreview": "Sembunyikan pratinjau", - "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, "workspaceKindUnsavedMarkdown": "File Markdown yang belum disimpan", - "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, "workspaceKindSingleMarkdown": "File Markdown tunggal", - "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, "workspaceKindMarkdownFolder": "Folder Markdown", - "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, "workspaceKindWritersideModule": "Modul Writerside", - "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, "problems": "Masalah", - "@problems": {"description":"Diagnostics dialog title."}, + "@problems": { + "description": "Diagnostics dialog title." + }, "diagnosticCount": "{count, plural, =0{Tidak ada diagnostik} =1{1 diagnostik} other{{count} diagnostik}}", - "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "files": "File", - "@files": {"description":"Files sidebar tab label."}, + "@files": { + "description": "Files sidebar tab label." + }, "toc": "Daftar isi", - "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, "tocActions": "Tindakan TOC", - "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, "markdownUnsaved": "Markdown - belum disimpan", - "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, "workspaceDetail": "{kind} - {count, plural, =1{1 file} other{{count} file}}", - "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "noFiles": "Tidak ada file", - "@noFiles": {"description":"Empty state shown when there are no files."}, + "@noFiles": { + "description": "Empty state shown when there are no files." + }, "newFile": "File baru", - "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, "noWritersideToc": "Tidak ada TOC Writerside", - "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, "tocSection": "Bagian daftar isi", - "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, "newTopic": "Topik baru", - "@newTopic": {"description":"Create new Writerside topic action label."}, + "@newTopic": { + "description": "Create new Writerside topic action label." + }, "newChildTopic": "Topik anak baru", - "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, "newSiblingTopic": "Topik saudara baru", - "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, "renameTopicFile": "Ganti nama file topik", - "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, "topicPlacement": "Penempatan TOC", - "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, "tocRoot": "Di akar TOC", - "@tocRoot": {"description":"TOC placement option for the root level."}, + "@tocRoot": { + "description": "TOC placement option for the root level." + }, "afterSelectedTopic": "Setelah topik dipilih", - "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, "insideSelectedTopic": "Di dalam topik yang dipilih", - "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, "pasteAfterTopic": "Tempel setelah", - "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, "pasteAsChildTopic": "Tempel sebagai anak", - "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, "removeFromToc": "Hapus dari TOC", - "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, "confirmRemoveFromTocTitle": "Hapus dari TOC?", - "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, "confirmRemoveFromTocMessage": "Hapus {name} dari daftar isi ini? File topik akan disimpan.", - "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteTopicTitle": "Hapus file topik?", - "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, "confirmDeleteTopicMessage": "Hapus {name} dan hapus dari setiap daftar isi? Hal ini tidak dapat dibatalkan.", - "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "safeDeleteTopicFile": "Hapus file topik dengan aman…", - "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, "removeTocElement": "Hapus elemen TOC", - "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, "reviewUsages": "Tinjau penggunaan", - "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, "deleteTopicFile": "Hapus file topik", - "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, "removeAction": "Hapus", - "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, "topicRemovalSummary": "Hapus “{topic}” dari instance yang dipilih. File topik akan disimpan.", - "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Hapus “{topic}” dan perbarui referensinya dengan aman di seluruh proyek Writerside ini.", - "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 topik anak akan naik satu tingkat.} other{{count} topik anak akan naik satu tingkat.}}", - "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Topik ini digunakan sebagai halaman awal instance. Tinjau penggunaannya dan tetapkan halaman awal lain sebelum melanjutkan.", - "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, "topicUsagesCount": "Penggunaan ({count})", - "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Tidak ditemukan referensi yang rusak.", - "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, "topicUsagesFound": "BusyMark menemukan referensi berikut untuk topik ini.", - "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, "topicUsageTocElements": "elemen TOC", - "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, "topicUsageStartPages": "Halaman awal", - "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, "topicUsageTopicLinks": "Tautan topik", - "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, - "topicUsageIncludes": "Termasuk", - "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, + "topicUsageIncludes": "Elemen include", + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, "usageCount": "{count, plural, =1{1 penggunaan} other{{count} penggunaan}}", - "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Opsi refaktor", - "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, "updateUsagesAutomatically": "Perbarui penggunaan secara otomatis", - "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, "updateUsagesAutomaticallyDescription": "Hapus referensi dan include TOC, serta pertahankan teks tautan.", - "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, "manualUsageUpdatesRequired": "Beberapa penggunaan memerlukan perubahan manual sebelum pemfaktoran ulang ini.", - "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, "setRedirectTo": "Alihkan ke", - "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, "noRedirectDescription": "Jangan mengalihkan halaman lama yang diterbitkan.", - "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, "redirectTarget": "Target pengalihan", - "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, "remainingUsagesBlockRemoval": "Tinjau dan perbarui sisa penggunaan sebelum melanjutkan, atau aktifkan pembaruan otomatis bila tersedia.", - "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, "usagesOfTopic": "Penggunaan {topic}", - "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Tidak ada penggunaan yang ditemukan", - "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, "outsideSelectedInstance": "di luar instance yang dipilih", - "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, "doRefactor": "Lakukan refaktor", - "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, "orphanTopicTitle": "File topik tidak lagi digunakan", - "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, "keepTopicFile": "Simpan file topik", - "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, - "orphanTopicMessage": "“{topic}” tidak lagi digunakan di mana pun dalam proyek Writerside ini. Hapus file, atau simpan untuk digunakan di tempat lain.", - "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, + "orphanTopicMessage": "“{topic}” tidak lagi digunakan di mana pun dalam proyek Writerside ini. Hapus file, atau simpan agar dapat digunakan pada instance lain.", + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "defaultNewTopicTitle": "Topik baru", - "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, "topicTitle": "Judul topik", - "@topicTitle": {"description":"Create topic dialog field label."}, + "@topicTitle": { + "description": "Create topic dialog field label." + }, "fileName": "Nama file", - "@fileName": {"description":"Create topic dialog field label."}, + "@fileName": { + "description": "Create topic dialog field label." + }, "topicTitleRequired": "Judul topik wajib diisi.", - "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, "fileNameRequired": "Nama file wajib diisi.", - "@fileNameRequired": {"description":"Validation message for missing file name."}, + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, "rename": "Ganti nama", - "@rename": {"description":"Rename command label."}, + "@rename": { + "description": "Rename command label." + }, "confirmDeleteFileTitle": "Hapus file?", - "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, "confirmDeleteFolderTitle": "Hapus folder?", - "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, "confirmDeleteFileMessage": "Hapus {name}? Hal ini tidak dapat dibatalkan.", - "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteFolderMessage": "Hapus {name} dan semua file di dalamnya? Hal ini tidak dapat dibatalkan.", - "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "useSingleSafeFileName": "Gunakan satu nama file yang aman.", - "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, "useExpectedExtension": "Gunakan ekstensi {extension} untuk format yang dipilih.", - "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "useIdentifierCharacters": "Gunakan huruf, angka, garis bawah, atau tanda hubung sebelum ekstensi.", - "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, "topicIdAlreadyExists": "ID Topik sudah ada.", - "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, "createWritersideTopicFailed": "Tidak dapat membuat topik Writerside.", - "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, "noOutline": "Tidak ada garis besar", - "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, "expandKind": "Perluas {kind}", - "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "collapseKind": "Ciutkan {kind}", - "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "foldKindSection": "bagian", - "@foldKindSection": {"description":"Fold kind label for a section."}, + "@foldKindSection": { + "description": "Fold kind label for a section." + }, "foldKindList": "daftar", - "@foldKindList": {"description":"Fold kind label for a list."}, + "@foldKindList": { + "description": "Fold kind label for a list." + }, "foldKindQuote": "kutipan", - "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, "foldKindTag": "tag", - "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, "sourceSearchPreviousMatch": "Kecocokan sebelumnya", - "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Kecocokan berikutnya", - "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Peka huruf besar-kecil", - "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Seluruh kata", - "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Regex", - "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchReplacement": "Ganti dengan", - "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, - "sourceSearchReplaceCurrent": "Ganti arus", - "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "Ganti kecocokan saat ini", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, "sourceSearchReplaceAndFindNext": "Ganti dan temukan selanjutnya", - "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, "sourceSearchReplaceAll": "Ganti semua", - "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, "workspaceReplace": "Ganti di Ruang Kerja", - "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, - "reviewReplacements": "Tinjau penggantinya", - "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, - "applyReplacements": "Terapkan penggantinya", - "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, + "reviewReplacements": "Tinjau penggantian", + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, + "applyReplacements": "Terapkan penggantian", + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, "skippedFiles": "File yang dilewati", - "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, "workspaceReplaceDirtyBuffer": "Konten editor belum disimpan", - "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, "workspaceReplaceDiskContent": "Konten disk yang disimpan", - "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, "selectFileMatches": "Pilih semua kecocokan {count}", - "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, - "workspaceReplaceApplied": "Mengganti {matches} kecocokan dalam file {files}; dilewati {skipped}.", - "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "workspaceReplaceApplied": "Mengganti {matches} kecocokan di {files} file; melewati {skipped}.", + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Baris baru di akhir", - "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Tidak ada baris baru di akhir", - "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "normalizeLineEndings": "Normalisasi akhir baris", - "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, "mixedLineEndingsSavePrompt": "Dokumen ini berisi akhiran baris campuran. Pilih format.", - "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, "workspaceReplaceMixedLineEndings": "{fileName} menggunakan akhiran baris campuran. Pilih format yang akan digunakan sebelum mengganti.", - "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "workspaceReplaceIssueOversized": "Melewatkan file berukuran besar.", - "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, "workspaceReplaceIssueUnreadable": "Melewatkan file yang tidak dapat dibaca.", - "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, "workspaceReplaceIssueInvalidUtf8": "Melewatkan file yang tidak valid UTF-8.", - "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, "workspaceReplaceIssueTruncated": "Pratinjau pengganti terpotong.", - "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, "workspaceReplaceIssueFileChanged": "Melewatkan file yang berubah setelah pratinjau.", - "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, "workspaceReplaceIssueBufferChanged": "Melewati buffer editor yang berubah setelah pratinjau.", - "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, "workspaceReplaceIssueNormalizationRequired": "Pilih normalisasi LF atau CRLF sebelum mengganti.", - "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, "workspaceReplaceIssuePartialConflict": "Rollback terhenti karena file berubah secara bersamaan. Beberapa penggantian mungkin tetap ada; konten yang dipindahkan dipertahankan di jalur di bawah ini.", - "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, "workspaceReplaceIssueApplyFailed": "Penggantian yang ditinjau tidak dapat dilakukan; tidak ada file yang diubah.", - "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, "externalChangesTitle": "Perubahan eksternal — {fileName}", - "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "externalFileDeleted": "File ini telah dihapus pada disk.", - "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, "externalFileChanged": "File ini diubah pada disk saat Anda memiliki hasil edit yang belum disimpan.", - "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, - "recoveredDocumentReview": "Memulihkan konten yang belum disimpan untuk {fileName}. Periksa, lalu simpan, simpan sebagai, atau buang.", - "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "Konten belum disimpan yang dipulihkan untuk {fileName}. Tinjau, kemudian simpan, simpan sebagai, atau buang.", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "compare": "Bandingkan", - "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, "reloadFromDisk": "Muat ulang dari disk", - "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, "keepMine": "Pertahankan milik saya", - "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, "saveAs": "Simpan sebagai", - "@saveAs": {"description":"Action that saves the current document to another path."}, + "@saveAs": { + "description": "Action that saves the current document to another path." + }, "sourceSearchInvalidRegex": "Ekspresi reguler tidak valid", - "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "File besar: penyorotan dan pelipatan dijeda", - "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Tidak ada yang perlu dibaca", - "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, - "admonition": "Peringatan", - "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, + "admonition": "Kotak keterangan", + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, "quote": "Kutipan", - "@quote": {"description":"Label for a neutral Writerside quote block."}, + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, "note": "Catatan", - "@note": {"description":"Preview label for a note admonition."}, + "@note": { + "description": "Preview label for a note admonition." + }, "tip": "Tip", - "@tip": {"description":"Preview label for a tip admonition."}, + "@tip": { + "description": "Preview label for a tip admonition." + }, "warning": "Peringatan", - "@warning": {"description":"Preview label for a warning admonition."}, + "@warning": { + "description": "Preview label for a warning admonition." + }, "tabs": "tab", - "@tabs": {"description":"Preview label for a tabs block."}, + "@tabs": { + "description": "Preview label for a tabs block." + }, "tab": "tab", - "@tab": {"description":"Preview label for a tab block."}, + "@tab": { + "description": "Preview label for a tab block." + }, "procedure": "Prosedur", - "@procedure": {"description":"Preview label for a procedure block."}, + "@procedure": { + "description": "Preview label for a procedure block." + }, "step": "Langkah", - "@step": {"description":"Preview label for a procedure step."}, + "@step": { + "description": "Preview label for a procedure step." + }, "topic": "Topik", - "@topic": {"description":"Preview label for a topic element."}, + "@topic": { + "description": "Preview label for a topic element." + }, "chapter": "Bab", - "@chapter": {"description":"Preview label for a chapter element."}, + "@chapter": { + "description": "Preview label for a chapter element." + }, "couldNotOpenTarget": "Tidak dapat membuka {target}", - "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, "linkTargetNotFound": "Target tautan tidak ditemukan: {targetPath}", - "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "cannotOpenFileTypeInEditor": "Tidak dapat membuka jenis file ini di editor", - "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, "anchorNotFound": "Jangkar tidak ditemukan: {anchor}", - "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "noProblemsFound": "Tidak ada masalah yang ditemukan", - "@noProblemsFound": {"description":"Diagnostics empty state."}, + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, "noResults": "Tidak ada hasil", - "@noResults": {"description":"Search empty state."}, + "@noResults": { + "description": "Search empty state." + }, "searchResultLine": "{relativePath} - Baris {lineNumber}", - "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, "untitledResult": "Hasil tanpa judul", - "@untitledResult": {"description":"Fallback search result title."}, + "@untitledResult": { + "description": "Fallback search result title." + }, "documentKindMarkdownFile": "File Markdown", - "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, "documentKindWritersideMarkdownTopic": "Topik Markdown Writerside", - "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideXmlTopic": "Topik XML Writerside", - "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideTree": "Pohon Writerside", - "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, "documentKindConfigurationFile": "File konfigurasi", - "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, "documentKindVariablesFile": "File variabel", - "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, "documentKindCategoriesFile": "File kategori", - "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, "documentKindResourceFile": "File sumber daya", - "@documentKindResourceFile": {"description":"Search result document kind label."}, + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, "workspaceErrorOpenFailed": "Gagal dibuka: {error}", - "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideProjectFailed": "Tidak dapat membuat proyek Writerside: {error}", - "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideTopicFailed": "Tidak dapat membuat topik Writerside: {error}", - "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCouldNotOpenFile": "Tidak dapat membuka file: {error}", - "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorChooseWhereToSaveMarkdown": "Pilih tempat untuk menyimpan file Markdown ini.", - "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, "workspaceErrorSaveBlockedFileChangedOnDisk": "Penyimpanan diblokir: file diubah pada disk.", - "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, "workspaceErrorSaveFailed": "Gagal menyimpan: {error}", - "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorFileOperationFailed": "Operasi file gagal: {error}", - "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorValidationFailed": "Validasi gagal: {error}", - "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceRecoveryRestored": "{count, plural, =1{1 dokumen yang belum disimpan berhasil dipulihkan. Tinjau sebelum menyimpan atau membuangnya.} other{{count} dokumen yang belum disimpan berhasil dipulihkan. Tinjau masing-masing sebelum menyimpan atau membuangnya.}}", - "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceRecoveryDamaged": "{count, plural, =1{1 catatan pemulihan yang rusak tidak dapat dipulihkan. File pemulihan asli dipertahankan untuk diperiksa.} other{{count} catatan pemulihan yang rusak tidak dapat dipulihkan. Catatan pemulihan yang valid tetap tersedia.}}", - "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "errorPathDoesNotExist": "Jalur tidak ada: {path}", - "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, - "errorTargetDirectoryNotEmpty": "Direktori target sudah ada dan tidak kosong: {path}", - "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, - "errorTargetPathNotDirectory": "Jalur target sudah ada dan bukan merupakan direktori: {path}", - "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetDirectoryNotEmpty": "Direktori tujuan sudah ada dan berisi file: {path}", + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetPathNotDirectory": "Jalur tujuan sudah ada tetapi bukan direktori: {path}", + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorGeneratedFileAlreadyExists": "File yang dihasilkan sudah ada: {path}", - "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorParentDirectoryRequired": "Direktori induk diperlukan.", - "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, "errorParentDirectoryMissing": "Direktori induk tidak ada: {path}", - "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorDirectoryMissing": "Direktori tidak ada: {path}", - "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorPathAlreadyExists": "Jalur sudah ada: {path}", - "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorFileNameRequired": "Nama file wajib diisi.", - "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, "errorFileNameUnsafe": "Nama file harus berupa satu segmen jalur aman.", - "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, "errorFileOperationInvalidTarget": "Tidak dapat memindahkan folder ke dalam folder itu sendiri.", - "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, "errorFileOperationOutsideRoot": "Operasi file harus tetap berada di dalam ruang kerja.", - "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, "errorFileOperationRoot": "Akar ruang kerja tidak dapat diubah dari pohon file.", - "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, "errorProjectNameRequired": "Nama proyek wajib diisi.", - "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, "errorDirectoryNameRequired": "Nama direktori wajib diisi.", - "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, "errorDirectoryNameUnsafe": "Nama direktori harus berupa satu segmen jalur aman.", - "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, - "errorInstanceIdInvalid": "ID Instance harus dimulai dengan huruf kecil dan hanya berisi huruf kecil, angka, garis bawah, dan tanda hubung.", - "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, + "errorInstanceIdInvalid": "ID instance harus diawali huruf kecil dan hanya boleh berisi huruf kecil, angka, garis bawah, dan tanda hubung.", + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, "errorTopicFileInvalid": "Nama file topik harus berupa nama file Markdown tanpa pemisah jalur.", - "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, "errorTopicTitleRequired": "Judul topik wajib diisi.", - "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, "errorWritersideModuleRootMissing": "Root modul Writerside tidak ada: {path}", - "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideModuleNotOpen": "Modul Writerside harus terbuka untuk membuat topik.", - "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, "errorWritersideInstanceTreeMissing": "Modul Writerside tidak memiliki pohon instance.", - "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, "errorWritersideTreeFileMissing": "File pohon Writerside tidak ada: {path}", - "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTopicIdAlreadyExists": "ID topik \"{topicId}\" sudah ada di modul bantuan ini.", - "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, "errorTopicFileAlreadyExists": "File topik sudah ada: {path}", - "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorReferenceTopicMissing": "Topik referensi tidak ada di pohon yang dipilih: {topic}", - "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideTocNodeMissing": "Entri TOC yang dipilih sudah tidak ada lagi.", - "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, "errorWritersideTocInvalidMove": "Entri TOC tidak dapat dipindahkan ke dirinya sendiri atau ke salah satu turunannya.", - "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, "errorWritersideStartTopicDelete": "Topik awal {topic} tidak dapat dihapus. Pilih halaman awal lain terlebih dahulu.", - "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Gunakan Safe Delete untuk file topik Writerside.", - "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, "errorWritersideTopicUsageScanFailed": "Tidak dapat menyelesaikan pemindaian penggunaan topik. Tidak ada file yang diubah.", - "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Beberapa penggunaan topik masih memerlukan perhatian. Tinjaulah sebelum melanjutkan.", - "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Target pengalihan yang dipilih tidak valid lagi. Pilih lagi.", - "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Penghapusan topik tidak dapat dibatalkan sepenuhnya. Tinjau jalur ini sebelum melanjutkan: {paths}", - "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorTopicsRootUnsafe": "Akar topik harus berupa direktori relatif yang aman.", - "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, "errorTopicFileNameUnsafe": "Nama file topik harus berupa segmen jalur aman tunggal.", - "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, "errorTopicFileExtensionMismatch": "Ekstensi file topik harus sesuai dengan format yang dipilih ({extension}).", - "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "errorTopicFileNameInvalid": "Nama file topik hanya boleh berisi huruf, angka, garis bawah, dan tanda hubung.", - "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, "errorUnknown": "Kesalahan tidak diketahui: {code}", - "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileStatFailed": "Tidak dapat membaca metadata file: {error}", - "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceScanSkipped": "Ruang kerja besar terdeteksi. Beberapa file dilewati agar aplikasi tetap responsif.", - "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, "diagnosticWorkspaceScanInspectFailed": "Tidak dapat memeriksa entri ruang kerja: {error}", - "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileTooLarge": "File lebih besar dari batas penguraian otomatis beta.", - "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, "diagnosticWorkspaceFileReadFailed": "Tidak dapat membaca file Markdown: {error}", - "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticMarkdownAttributeMalformed": "Blok atribut judul Writerside salah format.", - "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, "diagnosticMarkdownHeadingDuplicateId": "ID judul duplikat \"{id}\".", - "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTopicH1ConvertedToChapter": "Judul H1 tingkat atas tambahan diperlakukan sebagai bab.", - "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, - "diagnosticWritersideMarkdownTopicMissingTitle": "Topik Markdown Writerside tidak memiliki judul H1 atau materi depan.", - "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "Topik Markdown Writerside tidak memiliki judul H1 atau front matter.", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, "diagnosticWritersideXmlTopicMissingTitle": "Judul topik XML tidak ada.", - "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, "diagnosticWritersideTopicFileMissingTitle": "Topik \"{fileName}\" tidak memiliki judul.", - "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, - "diagnosticMarkdownFrontMatterMalformed": "Materi depan tidak tertutup.", - "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "diagnosticMarkdownFrontMatterMalformed": "Front matter tidak tertutup.", + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, "diagnosticMarkdownRawHtmlUnsafe": "Elemen HTML tidak aman.", - "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, "diagnosticMarkdownLinkUnresolvedTarget": "Target tautan tidak ada: {targetPath}", - "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "diagnosticMarkdownLinkUnresolvedAnchor": "Jangkar \"{anchor}\" tidak ada.", - "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingAlt": "Teks alternatif pada gambar \"{destination}\" tidak ada.", - "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingFile": "Gambar tidak ada: {destination}", - "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticInvalidXml": "XML tidak valid: {message}", - "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, - "diagnosticWritersideConfigInvalidRoot": "Root writerside.cfg harus .", - "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, - "diagnosticWritersideConfigMissingSnippetsSrc": "deklarasi cuplikan tidak ada src.", - "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigInvalidRoot": "Elemen akar writerside.cfg harus berupa .", + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, + "diagnosticWritersideConfigMissingSnippetsSrc": "Deklarasi snippets tidak memiliki atribut src.", + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, "diagnosticWritersideConfigMissingInstanceGroupsSrc": "Deklarasi instance-groups tidak memiliki src.", - "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, "diagnosticWritersideConfigInvalidKeymapsMode": "Mode peta kunci tidak didukung: {mode}", - "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceSrc": "Deklarasi instance tidak memiliki src.", - "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, "diagnosticWritersideConfigMissingInstance": "writerside.cfg tidak mendaftarkan sebuah instance.", - "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, "diagnosticWritersideTreeInvalidRoot": "Akar .tree harus .", - "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, "diagnosticWritersideTreeMissingId": "Profil instance tidak memiliki id.", - "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, "diagnosticWritersideTreeIdMismatch": "Batang file pohon tidak cocok dengan id instance \"{id}\".", - "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, - "diagnosticWritersideTreeMissingStartPage": "Instance non-pustaka tidak memiliki halaman awal.", - "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "Instance non-library tidak memiliki start-page.", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, "diagnosticWritersideStartPageMissing": "Halaman awal \"{startPage}\" tidak ada.", - "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, "diagnosticWritersideTreeDuplicateTopic": "Topik \"{topic}\" muncul lebih dari sekali dalam TOC instance ini.", - "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideVariableMalformedDeclaration": "Deklarasi variabel harus mempunyai nama dan nilai.", - "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, "diagnosticWritersideVariableDuplicateName": "Variabel \"{name}\" dideklarasikan lebih dari satu kali.", - "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryMissingId": "Kategori tidak memiliki id.", - "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, "diagnosticWritersideCategoryDuplicateId": "Kategori \"{id}\" dideklarasikan lebih dari satu kali.", - "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryDuplicateOrder": "Pesanan kategori \"{order}\" dideklarasikan lebih dari satu kali.", - "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, "diagnosticWritersideTopicInvalidRoot": "Akar .topic harus .", - "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, "diagnosticWritersideTopicMissingRootId": "Topik XML tidak memiliki id root.", - "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, "diagnosticWritersideTopicRootIdMismatch": "Id akar topik XML \"{id}\" harus cocok dengan nama file \"{expectedId}\".", - "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateElementId": "ID elemen \"{elementId}\" muncul lebih dari sekali.", - "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAnchorMissingHref": " tidak ada href.", - "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, - "diagnosticWritersideConfigMissing": "Mode Writerside memerlukan Writerside.cfg.", - "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, + "diagnosticWritersideConfigMissing": "Mode Writerside memerlukan writerside.cfg.", + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, "diagnosticWritersideConfigMissingBuildConfigDirectory": "Direktori konfigurasi build yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "Direktori spesifikasi API yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingSnippetsDirectory": "Direktori cuplikan yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingVarsFile": "File variabel yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingCategoriesFile": "File kategori yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceGroupsFile": "File grup instance yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceTree": "Pohon instance terdaftar \"{source}\" tidak ada.", - "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideTopicReadFailed": "Tidak dapat membaca file topik: {error}", - "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, - "diagnosticWritersideDefaultTopicsDirectoryMissing": "Direktori topik default tidak ada: {relativePath}", - "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "Direktori topik default tidak ada: {relativePath}.", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicsDirectoryMissing": "Direktori topik yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideImagesDirectoryMissing": "Direktori gambar yang dikonfigurasi tidak ada: {relativePath}", - "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateId": "ID elemen \"{id}\" muncul lebih dari sekali.", - "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeMissingTopic": "TOC mereferensikan topik \"{topic}\" yang hilang.", - "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideTreeInvalidHref": "Href eksternal \"{href}\" tidak valid.", - "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, "diagnosticWritersideVariableUnresolved": "Variabel \"%{name}%\" tidak dideklarasikan.", - "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideTopicLinkUnresolved": "Tautan topik \"{destination}\" tidak terselesaikan.", - "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticWritersideAnchorUnresolved": "Jangkar \"{anchor}\" tidak ada di \"{targetName}\".", - "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, "diagnosticWritersideIncludeMissingFrom": " tidak memiliki atribut from.", - "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, "diagnosticWritersideIncludeSourceMissing": "Sumber include \"{from}\" tidak ada.", - "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, "diagnosticWritersideIncludeElementMissing": "Elemen include \"{elementId}\" tidak ada di \"{from}\".", - "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryUnresolved": "Lihat juga kategori \"{ref}\" tidak dideklarasikan.", - "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAmbiguousReference": "Referensi topik \"{reference}\" bersifat ambigu.", - "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, "diagnosticUnknown": "Diagnostik tidak diketahui: {code}", - "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, - "close": "Menutup", - "@close": {"description":"Close action label."}, + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "close": "Tutup", + "@close": { + "description": "Close action label." + }, "git": "Git", - "@git": {"description":"Git sidebar tab label."}, + "@git": { + "description": "Git sidebar tab label." + }, "gitDiff": "Git diff", - "@gitDiff": {"description":"Title for the Git diff viewer."}, + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, "gitShowDiff": "Tunjukkan perbedaan", - "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "lama {oldRange} → baru {newRange}", - "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, "gitDiffNoLines": "tidak ada baris", - "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git tidak tersedia", - "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, "gitUnavailableMessage": "{reason, select, other{Instal Git atau konfigurasikan BusyMark untuk menggunakan executable Git yang tersedia. {reason}}}", - "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, "gitTrustRequiredTitle": "Percayai ruang kerja ini untuk Git?", - "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Repositori Git dapat menjalankan program melalui hook, filter, dan konfigurasi lainnya. Percayai ruang kerja ini sebelum BusyMark membaca data repositori atau mengaktifkan tindakan Git.", - "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Percayai ruang kerja", - "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Bukan repositori Git", - "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, "gitNotRepositoryMessage": "Ruang kerja ini tidak berada di dalam repositori Git.", - "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, "gitInitializeRepository": "Inisialisasi repositori", - "@gitInitializeRepository": {"description":"Action label for git init."}, + "@gitInitializeRepository": { + "description": "Action label for git init." + }, "gitDetachedHead": "HEAD terpisah", - "@gitDetachedHead": {"description":"Detached HEAD label."}, + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, "gitDetachedHeadAt": "Terpisah di {commit}", - "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, "gitNoUpstream": "Tidak ada upstream", - "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, "gitAheadCount": "{count, plural, =1{1 commit yang belum di-push} other{{count} commit yang belum di-push}}", - "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitBehindCount": "{count, plural, =1{1 commit yang perlu di-pull} other{{count} commit yang perlu di-pull}}", - "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, - "gitClean": "Bersih", - "@gitClean": {"description":"Git clean state label."}, + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "Tidak ada perubahan", + "@gitClean": { + "description": "Git clean state label." + }, "gitConflicts": "Konflik", - "@gitConflicts": {"description":"Git conflicts group label."}, + "@gitConflicts": { + "description": "Git conflicts group label." + }, "gitChanges": "Perubahan", - "@gitChanges": {"description":"Git changes view label."}, + "@gitChanges": { + "description": "Git changes view label." + }, "gitStaged": "Di-stage", - "@gitStaged": {"description":"Git staged changes group label."}, + "@gitStaged": { + "description": "Git staged changes group label." + }, "gitUnstaged": "Belum di-stage", - "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, "gitHistory": "Riwayat", - "@gitHistory": {"description":"Git history view label."}, + "@gitHistory": { + "description": "Git history view label." + }, "gitBranches": "Cabang", - "@gitBranches": {"description":"Git branch menu label."}, + "@gitBranches": { + "description": "Git branch menu label." + }, "gitActions": "Tindakan Git", - "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, "gitPull": "Pull", - "@gitPull": {"description":"Git pull action label."}, + "@gitPull": { + "description": "Git pull action label." + }, "gitFetch": "Fetch", - "@gitFetch": {"description":"Git fetch action label."}, + "@gitFetch": { + "description": "Git fetch action label." + }, "gitPush": "Push", - "@gitPush": {"description":"Git push action label."}, + "@gitPush": { + "description": "Git push action label." + }, "gitCommit": "Commit", - "@gitCommit": {"description":"Git commit action label."}, - "gitSelectForCommit": "Stage file", - "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "@gitCommit": { + "description": "Git commit action label." + }, + "gitSelectForCommit": "Siapkan file untuk commit", + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, "gitRemoveFromCommit": "Batalkan stage file", - "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, "gitDiscard": "Kembalikan", - "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, "gitOpenFile": "Buka file", - "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, "gitMarkResolved": "Tandai sebagai terselesaikan", - "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, "gitUntracked": "Tidak terlacak", - "@gitUntracked": {"description":"Git untracked files group label."}, + "@gitUntracked": { + "description": "Git untracked files group label." + }, "gitCommitMessage": "Pesan komit", - "@gitCommitMessage": {"description":"Commit message field label."}, + "@gitCommitMessage": { + "description": "Commit message field label." + }, "gitCommitSelectedFiles": "File yang dipilih", - "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, "gitCommitNoSelectedFiles": "Stage setidaknya satu file sebelum melakukan commit.", - "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, "gitStagedFileCount": "{count, plural, =1{1 file yang di-stage} other{{count} file yang di-stage}}", - "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitOutsideWorkspace": "Di luar ruang kerja", - "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, "gitCommitMessageRequired": "Masukkan pesan komit.", - "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, "gitCreateBranch": "Buat cabang", - "@gitCreateBranch": {"description":"Git create branch action label."}, + "@gitCreateBranch": { + "description": "Git create branch action label." + }, "gitNewBranch": "Cabang baru", - "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, "gitBranchName": "Nama cabang", - "@gitBranchName": {"description":"Branch name field label."}, + "@gitBranchName": { + "description": "Branch name field label." + }, "gitSwitchBranch": "Beralih", - "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, "gitNoChanges": "Tidak ada perubahan", - "@gitNoChanges": {"description":"Git empty state when there are no changes."}, - "gitNoHistory": "Tidak ada sejarah", - "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, + "gitNoHistory": "Tidak ada riwayat", + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, "gitNoBranches": "Tidak ada cabang", - "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, "gitNoDiff": "Tidak ada perbedaan untuk ditampilkan", - "@gitNoDiff": {"description":"Git diff empty state."}, + "@gitNoDiff": { + "description": "Git diff empty state." + }, "gitBinaryFile": "File biner. BusyMark tidak merender patch biner.", - "@gitBinaryFile": {"description":"Git diff binary file message."}, + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, "gitBinaryFileInfo": "File biner ({size} byte). BusyMark tidak merender patch biner.", - "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, "gitUnsavedChangesBanner": "Perubahan editor yang belum disimpan tidak disertakan sampai disimpan.", - "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, "gitConfirmDiscardTitle": "Buang perubahan Git?", - "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, "gitConfirmDiscardTracked": "{count, plural, =1{Semua perubahan yang di-stage dan tidak di-stage pada file terlacak yang dipilih akan dipulihkan ke HEAD.} other{Semua perubahan yang di-stage dan tidak di-stage pada file terlacak yang dipilih akan dipulihkan ke HEAD.}}", - "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardUntracked": "{count, plural, =1{File tak terlacak yang dipilih akan dihapus.} other{File tak terlacak yang dipilih akan dihapus.}}", - "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardMixed": "{count, plural, =1{File yang dipilih akan dipulihkan atau dihapus berdasarkan status Git-nya.} other{File yang dipilih akan dipulihkan atau dihapus berdasarkan status Git-nya.}}", - "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmSwitchBranchTitle": "Beralih ke {branch}?", - "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitConfirmSwitchBranchMessage": "BusyMark akan memuat ulang ruang kerja dari disk setelah Git berpindah cabang.", - "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, - "gitConfirmPushSetUpstreamTitle": "Siapkan upstream cabang?", - "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, + "gitConfirmPushSetUpstreamTitle": "Siapkan upstream branch?", + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, "gitConfirmPushSetUpstreamMessage": "Cabang ini tidak memiliki upstream. BusyMark dapat melakukan push {branch} dan mengatur upstream-nya saat tepat satu remote dikonfigurasi.", - "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitProjectHistory": "Riwayat proyek", - "@gitProjectHistory": {"description":"Project history action label."}, + "@gitProjectHistory": { + "description": "Project history action label." + }, "gitFileHistory": "Riwayat file", - "@gitFileHistory": {"description":"Current file history action label."}, + "@gitFileHistory": { + "description": "Current file history action label." + }, "gitFileHistoryRequiresOpenFile": "Riwayat file memerlukan file Markdown yang terbuka.", - "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, "gitLoadMore": "Muat lebih banyak", - "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, "gitChangesInCommit": "Perubahan dalam commit ini", - "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, - "gitCompareWithCurrent": "Bandingkan dengan saat ini", - "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, + "gitCompareWithCurrent": "Bandingkan dengan versi saat ini", + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, "gitRestoreVersion": "Pulihkan versi ini", - "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, "gitConfirmRestoreTitle": "Pulihkan versi file ini?", - "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, "gitConfirmRestoreMessage": "BusyMark akan mengganti file working tree saat ini dengan versi commit yang dipilih. File yang dipulihkan akan tetap belum di-stage.", - "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, "gitCommitActions": "Tindakan commit", - "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, "gitResetCurrentBranchToHere": "Setel ulang cabang saat ini ke sini…", - "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, "gitResetCurrentBranchTitle": "Setel ulang {branch} ke {commit}?", - "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, - "gitResetCurrentBranchMessage": "Ini memindahkan cabang {branch} untuk melakukan {commit}. Pilih bagaimana Git memperbarui indeks dan pohon kerja.", - "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, + "gitResetCurrentBranchMessage": "Ini memindahkan branch {branch} ke commit {commit}. Pilih cara Git memperbarui index dan working tree.", + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitReset": "Reset", - "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, "gitResetModeSoft": "Soft", - "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, "gitResetModeSoftDescription": "Pindahkan cabang saja. Pertahankan indeks dan working tree tanpa perubahan; perbedaan dari commit yang dipilih tetap di-stage.", - "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, "gitResetModeMixed": "Mixed", - "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, "gitResetModeMixedDescription": "Pindahkan cabang dan reset indeks. Pertahankan working tree tanpa perubahan; perbedaan tetap belum di-stage.", - "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, "gitResetModeHard": "Hard", - "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, "gitResetModeHardDescription": "Pindahkan cabang dan reset indeks serta working tree. Perubahan tracked akan dibuang; file untracked yang menghalangi dapat dihapus.", - "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, "gitResetModeKeep": "Keep", - "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, "gitResetModeKeepDescription": "Pindahkan cabang dan reset file tracked sambil mempertahankan perubahan lokal. Git membatalkan reset jika perubahan tersebut bertentangan.", - "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, "gitAdditionsDeletions": "+{additions} -{deletions}", - "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, "fileActions": "Tindakan file", - "@fileActions": {"description":"Tooltip for a file action menu."}, + "@fileActions": { + "description": "Tooltip for a file action menu." + }, "actions": "Tindakan", - "@actions": {"description":"Tooltip for a general action menu."}, + "@actions": { + "description": "Tooltip for a general action menu." + }, "gitStatusAdded": "Ditambahkan", - "@gitStatusAdded": {"description":"Git file status label."}, + "@gitStatusAdded": { + "description": "Git file status label." + }, "gitStatusDeleted": "Dihapus", - "@gitStatusDeleted": {"description":"Git file status label."}, + "@gitStatusDeleted": { + "description": "Git file status label." + }, "gitStatusRenamed": "Berganti nama", - "@gitStatusRenamed": {"description":"Git file status label."}, + "@gitStatusRenamed": { + "description": "Git file status label." + }, "gitStatusCopied": "Disalin", - "@gitStatusCopied": {"description":"Git file status label."}, + "@gitStatusCopied": { + "description": "Git file status label." + }, "gitStatusUntracked": "Tidak terlacak", - "@gitStatusUntracked": {"description":"Git file status label."}, + "@gitStatusUntracked": { + "description": "Git file status label." + }, "gitStatusConflicted": "Berkonflik", - "@gitStatusConflicted": {"description":"Git file status label."}, + "@gitStatusConflicted": { + "description": "Git file status label." + }, "gitStatusIgnored": "Diabaikan", - "@gitStatusIgnored": {"description":"Git file status label."}, + "@gitStatusIgnored": { + "description": "Git file status label." + }, "gitStatusTypeChanged": "Jenis diubah", - "@gitStatusTypeChanged": {"description":"Git file status label."}, + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, "gitStatusModified": "Dimodifikasi", - "@gitStatusModified": {"description":"Git file status label."}, + "@gitStatusModified": { + "description": "Git file status label." + }, "gitStatusUnknown": "Tidak dikenal", - "@gitStatusUnknown": {"description":"Git file status label."}, + "@gitStatusUnknown": { + "description": "Git file status label." + }, "gitErrorUnavailable": "Git tidak tersedia.", - "@gitErrorUnavailable": {"description":"Git error message."}, + "@gitErrorUnavailable": { + "description": "Git error message." + }, "gitErrorNotRepository": "Ruang kerja ini bukan repositori Git.", - "@gitErrorNotRepository": {"description":"Git error message."}, + "@gitErrorNotRepository": { + "description": "Git error message." + }, "gitErrorUnsafePath": "BusyMark memblokir jalur Git yang tidak aman.", - "@gitErrorUnsafePath": {"description":"Git error message."}, + "@gitErrorUnsafePath": { + "description": "Git error message." + }, "gitErrorInvalidBranchName": "Masukkan nama cabang yang valid.", - "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, "gitErrorNoRemote": "Tidak ada remote Git yang dikonfigurasi.", - "@gitErrorNoRemote": {"description":"Git error message."}, + "@gitErrorNoRemote": { + "description": "Git error message." + }, "gitErrorNoUpstream": "Tidak ada upstream cabang yang dikonfigurasi.", - "@gitErrorNoUpstream": {"description":"Git error message."}, + "@gitErrorNoUpstream": { + "description": "Git error message." + }, "gitErrorMultipleRemotes": "Beberapa remote dikonfigurasi. Pilih upstream di luar versi BusyMark ini.", - "@gitErrorMultipleRemotes": {"description":"Git error message."}, + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, "gitErrorDirtyWorkspace": "Simpan atau buang perubahan editor BusyMark sebelum berpindah cabang.", - "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, "gitErrorResetDirtyWorkspace": "Simpan atau buang perubahan editor BusyMark sebelum mengatur ulang cabang saat ini.", - "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, "gitErrorRestoreStagedFile": "Batalkan stage file ini sebelum memulihkan versi historis.", - "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, - "gitErrorResetDetachedHead": "Periksa cabang sebelum mengatur ulangnya.", - "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, + "gitErrorResetDetachedHead": "Checkout branch terlebih dahulu sebelum melakukan reset.", + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, "gitErrorDiverged": "Cabang telah menyimpang. Selesaikan penggabungan atau rebase di luar versi BusyMark ini.", - "@gitErrorDiverged": {"description":"Git error message."}, + "@gitErrorDiverged": { + "description": "Git error message." + }, "gitErrorAuthorIdentity": "Git memerlukan nama penulis dan alamat email sebelum dapat melakukan commit.", - "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, "gitAuthorIdentityTitle": "Identitas Penulis Git", - "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, "gitAuthorIdentityMessage": "Masukkan identitas yang harus dicatat Git saat melakukan commit. BusyMark akan menyimpannya dan mencoba kembali commit ini.", - "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, "gitAuthorName": "Nama", - "@gitAuthorName": {"description":"Git commit author name field label."}, + "@gitAuthorName": { + "description": "Git commit author name field label." + }, "gitAuthorEmail": "E-mail", - "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, "gitAuthorIdentityGlobal": "Gunakan untuk semua repositori", - "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, "gitAuthorIdentityGlobalDescription": "Saat dipasang sebagai Snap, ini berlaku untuk repositori yang dibuka di BusyMark.", - "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, "gitSaveIdentityAndCommit": "Simpan dan commit", - "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, "gitErrorAuthentication": "Otentikasi Git gagal.", - "@gitErrorAuthentication": {"description":"Git error message."}, + "@gitErrorAuthentication": { + "description": "Git error message." + }, "gitErrorNetwork": "Operasi jaringan Git gagal.", - "@gitErrorNetwork": {"description":"Git error message."}, + "@gitErrorNetwork": { + "description": "Git error message." + }, "gitErrorConflict": "Git melaporkan konflik yang belum terselesaikan.", - "@gitErrorConflict": {"description":"Git error message."}, + "@gitErrorConflict": { + "description": "Git error message." + }, "gitErrorCommandFailed": "Perintah Git gagal.", - "@gitErrorCommandFailed": {"description":"Git error message."}, + "@gitErrorCommandFailed": { + "description": "Git error message." + }, "markdownAndHtml": "Markdown dan HTML", - "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Blok Markdown", - "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Struktur blok didukung dalam sumber Markdown dan pratinjau.", - "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown Sebaris", - "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Pemformatan yang bisa muncul di dalam paragraf, item daftar, dan sel tabel.", - "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Blok HTML Mentah", - "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Tag HTML tingkat blok yang aman dirender melalui widget pratinjau BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Tag Sebaris HTML Mentah", - "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Tag HTML sebaris aman dirender tanpa menampilkan tag literal.", - "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Aturan Keamanan", - "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "HTML mentah diurai dan dibersihkan sebelum rendering pratinjau.", - "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Judul", - "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Paragraf", - "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Daftar", - "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Kontainer", - "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Blok teks", - "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, - "markdownHtmlHtmlFigures": "Gambar dan gambar", - "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, + "markdownHtmlHtmlFigures": "Gambar dan ilustrasi", + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Kode yang telah diformat sebelumnya", - "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, - "markdownHtmlHtmlDisclosure": "Blok pengungkapan", - "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, + "markdownHtmlHtmlDisclosure": "Blok detail yang dapat dibuka", + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Daftar deskripsi", - "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, - "markdownHtmlHtmlFormattingTags": "Memformat tag", - "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, + "markdownHtmlHtmlFormattingTags": "Tag pemformatan", + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Tag kode sebaris", - "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Tag teks semantik", - "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Pratinjau yang sudah disanitasi", - "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "HTML yang diizinkan diubah menjadi blok pratinjau BusyMark, tidak dirender di browser.", - "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Sumber dipertahankan", - "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "HTML mentah yang belum diedit disimpan kembali persis seperti teks sumber.", - "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown di dalam HTML", - "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Penanda Markdown di dalam HTML mentah dirender sebagai teks literal.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Konten aktif yang diblokir", - "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Skrip, gaya, bingkai, formulir, SVG, MathML, peristiwa, dan atribut tidak aman diblokir.", - "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Hanya URL aman", - "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Tautan mengizinkan URL http, https, mailto, tel, relatif, dan fragmen; skema yang tidak aman diblokir.", - "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "exportAsPdf": "Ekspor sebagai PDF", - "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, "pdfExportDescription": "Pilih tata letak halaman untuk PDF yang lengkap dan sempurna.", - "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "Gambar jarak jauh tidak diunduh selama ekspor. Gambar lokal disertakan bila tersedia.", - "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "Ukuran halaman", - "@pdfPageSize": {"description":"PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "Letter", - "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "Orientasi", - "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "Potret", - "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "Lanskap", - "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "Margin", - "@pdfMargins": {"description":"PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "Sempit", - "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "Normal", - "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "Lebar", - "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "Sertakan nomor halaman", - "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "Ekspor", - "@export": {"description":"Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "Mengekspor PDF…", - "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "dokumen PDF", - "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "{fileName} telah diekspor.", - "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, - "pdfExportedWithWarnings": "{fileName} diekspor dengan peringatan {count}.", - "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} diekspor dengan {count, plural, =1{1 peringatan} other{{count} peringatan}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "Komponen ekspor PDF tidak ada. Instal ulang BusyMark dan coba lagi.", - "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "Ekspor PDF memakan waktu terlalu lama dan dihentikan.", - "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark tidak dapat mengekspor dokumen ini sebagai PDF.", - "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Merender…", - "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, "visualizationStale": "Menampilkan render terakhir yang valid", - "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, "visualizationShowSource": "Tampilkan sumber", - "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, "visualizationShowRender": "Tampilkan render", - "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, - "visualizationFitWidth": "Sesuai dengan lebarnya", - "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, + "visualizationFitWidth": "Sesuaikan dengan lebar tampilan", + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, "visualizationSaveImage": "Simpan gambar", - "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, "visualizationCopyImage": "Salin gambar", - "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, "visualizationImageCopied": "Gambar disalin", - "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, "visualizationOpenApiReference": "Buka Referensi API", - "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, "visualizationValid": "Valid", - "@visualizationValid": {"description":"OpenAPI validation success state."}, + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, "visualizationInvalid": "Tidak valid", - "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, "visualizationServers": "Server", - "@visualizationServers": {"description":"OpenAPI server count label."}, - "visualizationPaths": "Path", - "@visualizationPaths": {"description":"OpenAPI path count label."}, + "@visualizationServers": { + "description": "OpenAPI server count label." + }, + "visualizationPaths": "Jalur", + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, "visualizationOperations": "Operasi", - "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, "visualizationTags": "Tag", - "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, "visualizationNoOperations": "Tidak ada operasi yang cocok", - "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, "visualizationSearchOperations": "Cari operasi", - "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, "visualizationRenderFailed": "Visualisasi ini tidak dapat dirender.", - "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, "visualizationRetry": "Coba lagi", - "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, "visualizationSaved": "{fileName} disimpan", - "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "shortcutExportPdfDescription": "Ekspor dokumen aktif atau modul Writerside sebagai PDF.", - "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "instances": "Instance", - "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, "newInstance": "Instance baru", - "@newInstance": {"description":"Action that creates a Writerside instance."}, + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, "newTocLibrary": "Pustaka TOC baru", - "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, - "editInstance": "Edit instance", - "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, + "editInstance": "Ubah instance", + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, "openTocFile": "Buka file TOC", - "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, "createInstance": "Buat instance", - "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, "createTocLibrary": "Buat pustaka TOC", - "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, "instanceContent": "Isi", - "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, "instanceContentSource": "Buat dari", - "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, "emptyInstance": "Instance kosong", - "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, "markdownFiles": "File Markdown lokal", - "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, "chooseMarkdownFolder": "Pilih folder Markdown", - "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, "errorWritersideInstanceImportSourceRequired": "Pilih folder yang berisi file Markdown.", - "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, "instanceAppearance": "Tampilan", - "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, "instanceColor": "Warna ikon", - "@instanceColor": {"description":"Writerside instance icon-color field."}, + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, "instanceVersion": "Versi", - "@instanceVersion": {"description":"Writerside instance version field."}, + "@instanceVersion": { + "description": "Writerside instance version field." + }, "instanceVersionInherited": "Versi proyek adalah {version} jika kolom ini kosong.", - "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, "instanceWebPath": "Jalur web", - "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, "instanceStatus": "Status", - "@instanceStatus": {"description":"Writerside instance status field."}, + "@instanceStatus": { + "description": "Writerside instance status field." + }, "instanceStatusRelease": "Rilis", - "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, "instanceStatusEap": "Akses awal", - "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, "instanceStatusDeprecated": "Tidak digunakan lagi", - "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, "allowSearchEngineIndexing": "Izinkan pengindeksan mesin pencari", - "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, "allowSearchEngineIndexingDescription": "Izinkan mesin pencari eksternal mengindeks keluaran ini.", - "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, "offlineArtifact": "Artefak offline", - "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, "offlineArtifactDescription": "Gabungkan sumber daya sehingga dokumentasi yang dibuat bersifat mandiri.", - "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, "instanceOutputSettings": "Pengaturan keluaran", - "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, "markdownImportSource": "Sumber Markdown", - "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, "markdownImportFiles": "File Markdown", - "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, "selectNone": "Jangan pilih apa pun", - "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, "markdownFilesFound": "Ditemukan {count} file Markdown", - "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noMarkdownFilesFound": "Tidak ada file Markdown yang ditemukan di direktori ini.", - "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, "copyReferencedMedia": "Salin media yang dirujuk", - "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, "copyReferencedMediaDescription": "Salin gambar dan video lokal yang direferensikan oleh file yang dipilih sambil mempertahankan jalur relatif.", - "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, "instanceIdRenameWarningTitle": "Ganti nama ID instance?", - "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, "instanceIdRenameWarning": "BusyMark akan mengganti nama file .tree dan memperbarui referensi proyek Writerside dari “{oldId}” menjadi “{newId}”. Skrip publikasi tidak diubah dan harus diperbarui secara terpisah.", - "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, "renameAndUpdateReferences": "Ganti nama dan perbarui referensi", - "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, "tocLibraryDescription": "Pustaka TOC menyimpan bagian yang dapat digunakan kembali dan tidak menghasilkan keluarannya sendiri.", - "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, "defaultTocLibraryName": "TOC yang dibagikan", - "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, "instanceColorAutomatic": "Otomatis", - "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, "instanceColorBlue": "Biru", - "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, "instanceColorGreen": "Hijau", - "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, "instanceColorOrange": "Oranye", - "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, "instanceColorPurple": "Ungu", - "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, "instanceColorRed": "Merah", - "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, "instanceColorTeal": "Teal", - "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, "instanceColorYellow": "Kuning", - "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, "errorWritersideInstanceNameRequired": "Masukkan nama instance.", - "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, "errorWritersideInstanceIdExists": "Sebuah instance dengan ID “{id}” sudah ada.", - "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "errorWritersideInstanceTreeExists": "Pohon instance sudah ada: {path}", - "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSourceMissing": "Direktori sumber Markdown tidak ada: {path}", - "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSelectionRequired": "Pilih setidaknya satu file Markdown untuk diimpor.", - "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, "errorWritersideInstanceImportFileInvalid": "Ini bukan file Markdown yang dapat dibaca di dalam sumber yang dipilih: {path}", - "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportTargetExists": "Impor akan menimpa file proyek yang sudah ada: {path}", - "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceFilesChanged": "File instance diubah pada disk. Tinjau dan coba lagi.", - "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, "errorWritersideInstanceRollbackFailed": "BusyMark tidak dapat sepenuhnya mengembalikan perubahan instance. Tinjau file ini sebelum melanjutkan: {paths}", - "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorWritersideInstanceLibraryImport": "Pustaka TOC tidak dapat mengimpor topik Markdown.", - "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, "errorWritersideInstanceWebPathInvalid": "Jalur web harus berupa satu baris.", - "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, "errorWritersideInstanceConfigurationInvalid": "Konfigurasi instance Writerside tidak valid. Perbaiki diagnosisnya dan coba lagi.", - "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, "errorWritersideInstanceTemporaryFile": "BusyMark tidak dapat melakukan perubahan instance dengan aman.", - "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, - "diagnosticWritersideTreeInvalidStatus": "Status instance “{status}” tidak diketahui. Gunakan rilis, eap, atau usang.", - "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, + "diagnosticWritersideTreeInvalidStatus": "Status instance “{status}” tidak dikenal. Gunakan release, eap, atau deprecated.", + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, "diagnosticWritersideDuplicateInstanceId": "ID instance “{id}” digunakan oleh lebih dari satu file pohon.", - "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml harus memiliki elemen root .", - "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, - "diagnosticWritersideBuildProfilesInvalidBoolean": "Nilai {name} “{value}” harus benar atau salah.", - "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "Nilai {name} “{value}” harus true atau false.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfileMissingInstance": "Elemen harus menentukan ID instance.", - "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, - "diagnosticWritersideTreeInvalidInclude": "Pohon harus menentukan atribut from dan id elemen.", - "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, + "diagnosticWritersideTreeInvalidInclude": "Pohon harus menentukan atribut from dan element-id.", + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, "diagnosticWritersideTreeMissingSnippetId": "Pohon harus menentukan id.", - "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, "diagnosticWritersideTreeInvalidCrossInstanceReference": "Referensi TOC lintas instance harus menentukan ref dan in.", - "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, "diagnosticWritersideTreeConflictingTargets": "Elemen TOC tidak dapat menargetkan lebih dari satu topik, referensi, tautan, atau pengalihan.", - "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, "diagnosticWritersideTreeDuplicateElementId": "ID elemen pohon “{id}” dideklarasikan lebih dari satu kali.", - "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideInstanceGroupsInvalidRoot": "File grup instance harus memiliki elemen root .", - "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, "diagnosticWritersideInstanceGroupInvalid": "Grup instance harus menentukan id dan daftar instance yang tidak kosong.", - "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, "diagnosticWritersideInstanceGroupDuplicateId": "ID grup instance “{id}” dideklarasikan lebih dari satu kali.", - "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideExternalTreeInclude": "TOC menyertakan “{source}#{id}” milik modul eksternal “{origin}” dan tidak dapat diperluas di ruang kerja ini.", - "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, "diagnosticWritersideTreeIncludeElementMissing": "Elemen pohon “{id}” tidak ada di pohon terdaftar “{source}”.", - "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeCircularInclude": "Include tree “{source}#{id}” membuat siklus.", - "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideUnknownInstanceGroup": "Kondisi instance mereferensikan grup yang tidak diketahui “@{group}”.", - "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceInstanceMissing": "Referensi lintas-instance menargetkan instance yang tidak diketahui “{instance}”.", - "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, - "diagnosticWritersideReferenceTopicMissing": "Topik “{topic}” tidak ada dalam contoh referensi “{instance}”.", - "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, + "diagnosticWritersideReferenceTopicMissing": "Topik “{topic}” tidak ada dalam instance yang dirujuk “{instance}”.", + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, "download": "Unduh", - "@download": {"description":"Button label that downloads a required component."}, + "@download": { + "description": "Button label that downloads a required component." + }, "exportWritersideAsPdf": "Ekspor Writerside sebagai PDF", - "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, "writersidePdfContent": "Ekspor konten", - "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, "writersidePdfPage": "Halaman", - "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, "exportingWritersidePdf": "Mengekspor PDF Writerside…", - "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, "ai": "AI", - "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, "aiLocalOllama": "Ollama lokal", - "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, "aiDisabled": "Dinonaktifkan", - "@aiDisabled": {"description":"AI provider option that disables AI features."}, - "aiLocalOnlyDescription": "Pengeditan AI bersifat eksplisit. BusyMark hanya mengirimkan konteks yang ditampilkan untuk penyedia yang dipilih dan tidak pernah menerapkan proposal tanpa peninjauan.", - "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, "aiProvider": "Penyedia AI", - "@aiProvider": {"description":"Label for an AI provider selection."}, + "@aiProvider": { + "description": "Label for an AI provider selection." + }, "aiDefaultProvider": "Penyedia bawaan", - "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, "aiConfigureProvider": "Konfigurasikan penyedia", - "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, "aiChooseProvider": "Pilih penyedia AI", - "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, "aiOllamaEndpoint": "Titik akhir Ollama", - "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, "aiOllamaModel": "Model Ollama", - "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, "aiTestConnection": "Uji koneksi", - "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, "aiTestingConnection": "Menguji…", - "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, "aiConnectionReady": "Terhubung. {count} model terinstal ditemukan.", - "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiNoModels": "Tidak ada model yang dipilih.", - "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, "aiConnectionFailed": "BusyMark tidak dapat memverifikasi pembuatan teks AI.", - "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, "aiConfigureFirst": "Aktifkan penyedia AI dan verifikasi model di Pengaturan → AI.", - "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, "aiEditWithAi": "Edit dengan AI", "aiRefineWithAi": "Sempurnakan dengan AI", - "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, "aiInstruction": "Petunjuk", "aiChangeTarget": "Apa yang mungkin berubah", "aiSharedContext": "Konteks dibagikan dengan AI", @@ -1793,105 +4341,276 @@ "aiContextCurrentSection": "Bagian saat ini", "aiContextCompleteDocument": "Dokumen lengkap", "aiGenerating": "Membuat proposal…", - "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, "aiProposal": "Proposal AI", - "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, "aiGenerateProposal": "Hasilkan proposal", - "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, "aiContextDisclosure": "Penyedia yang dipilih akan menerima {count} karakter dari konteks yang ditampilkan.", - "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiOriginal": "Asli", - "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, "aiSuggested": "Disarankan", - "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, "aiApplyProposal": "Terapkan proposal", - "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, "aiTokenUsage": "{input} token masukan · {output} token keluaran", - "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiStaleProposal": "Dokumen berubah saat proposal ini dibuat. Jalankan aksinya lagi.", - "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, "gitAiStagedChangesChanged": "Perubahan yang di-stage berubah saat pesan commit ini dibuat. Jalankan aksinya lagi.", - "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, "aiViewContext": "Lihat konteks yang dikirim", - "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, "aiReviewExactContent": "Tinjau konten yang sebenarnya", - "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, "aiContentToChange": "Konten untuk diubah", - "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, "aiContentSentToAi": "Konten dikirim ke AI", - "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, "aiApiKey": "Kunci API", - "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, "aiApiKeyStoredHint": "Kunci disimpan di penyimpanan kredensial sistem", - "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, "aiApiKeyEnterHint": "Masukkan kunci API penyedia", - "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, "aiReplaceApiKey": "Ganti kunci API", - "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, "aiSaveApiKey": "Simpan kunci API dengan aman", - "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, "aiRemoveApiKey": "Hapus kunci API yang disimpan", - "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, "aiCredentialSaved": "Kunci API disimpan di penyimpanan kredensial sistem.", - "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, "aiCredentialRemoved": "Kunci API yang disimpan telah dihapus.", - "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, "aiModelRouting": "Perutean model", - "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, "aiAutomaticRouting": "Otomatis berdasarkan tugas", - "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, "aiFixedModelRouting": "Gunakan model yang dipilih", - "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, "aiPreferredModel": "Model pilihan", - "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, "aiModel": "Model", - "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, "aiUsageThisMonth": "{requests} permintaan · {input} token masukan · {output} token keluaran", - "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiCloudConsentTitle": "Kirim konten ke {provider}?", - "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentEnable": "Aktifkan {provider}", - "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentMessage": "Hanya konten yang ditampilkan di setiap dialog tinjauan AI yang dikirim. Permintaan tidak disimpan, proposal memerlukan peninjauan, dan kunci API disimpan di penyimpanan kredensial sistem Linux.", - "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, "aiCloudConsentRequired": "Konfirmasikan pembagian data {provider} di Pengaturan → AI terlebih dahulu.", - "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiGenerationVerified": "Pembuatan teks diverifikasi dengan {model}. Tersedia {count} model yang kompatibel.", - "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "aiColdStartObserved": "Cold start model lokal terdeteksi.", - "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, "aiNoCompatibleModels": "Tidak tersedia model pembuatan teks yang kompatibel.", - "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, "aiEnableProvider": "Aktifkan penyedia AI terlebih dahulu.", - "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, "aiDraftCommitMessage": "Draf pesan commit", - "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, "aiDrafting": "Menyusun…", - "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, "aiDraftWithAi": "Draf dengan AI", - "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, "generateOrUpdateMarkdownToc": "Menghasilkan/memperbarui daftar isi", - "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, "markdownTocTitle": "Daftar isi", - "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, "markdownTocUpdated": "Daftar isi diperbarui dengan {count} entri.", - "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "markdownTocNoHeadings": "Tambahkan setidaknya satu judul bagian sebelum membuat daftar isi.", - "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, - "markdownTocMalformedMarkers": "Penanda daftar isi BusyMark hilang, terduplikasi, atau rusak.", - "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, + "markdownTocMalformedMarkers": "Penanda daftar isi BusyMark hilang, duplikat, atau tidak berurutan.", + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, "diagnosticMarkdownHeadingSkippedLevel": "Tingkat judul {level} mengikuti tingkat {previousLevel}; tinjau bagian yang bersarang.", - "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, "diagnosticMarkdownLinkEmptyText": "Teks tautan kosong; berikan nama yang dapat diakses yang menjelaskan tujuannya.", - "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, "diagnosticMarkdownLinkReviewText": "Tinjau apakah teks tautan “{text}” menjelaskan tujuannya dalam konteks.", - "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, "diagnosticMarkdownTableEmptyHeader": "Sel header tabel harus mengidentifikasi kolomnya; lengkapi setiap header kosong.", - "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, "mathRenderFailed": "Ekspresi matematika tidak dapat dirender.", - "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, "inlineMath": "Matematika sebaris", - "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."}, + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, "displayMath": "Matematika tampilan", - "@displayMath": {"description":"Editor action that inserts a display mathematical expression."} + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + }, + "aiExplicitEditingDescription": "Pengeditan AI bersifat eksplisit. BusyMark hanya mengirimkan konteks yang ditampilkan untuk penyedia yang dipilih dan tidak pernah menerapkan proposal tanpa peninjauan.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 98a97b17..5366a75c 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Elimina l'elemento selezionato in File oppure rimuovi l'argomento selezionato dal sommario", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Generale", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Inserisci rientro", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Inserisci un rientro in corrispondenza del cursore", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Riduci rientro del sorgente", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Rimuovi un livello di rientro in modalità Sorgente", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Chiudi la ricerca o annulla la selezione dei blocchi", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Privacy", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Carica immagini remote", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Consenti all’anteprima Markdown e all’editor di caricare immagini da URL HTTP e HTTPS.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Cancella autorizzazioni per immagini remote", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Dimentica le aree di lavoro autorizzate a caricare immagini remote.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Cancella aree di lavoro Git attendibili", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Chiedi conferma prima di attivare le funzionalità Git per le aree di lavoro considerate attendibili in precedenza.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Finestra", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Riapri l’area di lavoro precedente all’avvio", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Apri l’area di lavoro e le schede della sessione precedente all’avvio di BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Conferma prima di chiudere con modifiche non salvate", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -913,7 +944,9 @@ "description": "Text field label for raw HTML source." }, "htmlContentDefault": "Contenuto HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "thematicBreak": "Separatore tematico", "@thematicBreak": { "description": "Thematic break command label." @@ -1058,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "testo", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "codice", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "testo alternativo", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Descrivi l'immagine", "@describeTheImage": { "description": "Image alt text hint." @@ -1093,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Immagine remota bloccata", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Scegli se BusyMark può caricare immagini remote.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Le immagini remote sono bloccate", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Questo documento fa riferimento a immagini su Internet. Il caricamento può rivelare informazioni di rete all’host delle immagini.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Carica per quest’area di lavoro", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Carica sempre le immagini remote", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Nascondi il pannello laterale", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1344,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Corrispondenza precedente", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Corrispondenza successiva", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Maiuscole/minuscole", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Parola intera", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Espressione regolare", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Espressione regolare non valida", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "File di grandi dimensioni: evidenziazione e ripiegamento sono sospesi", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Nessun contenuto da leggere", "admonition": "Avviso", "quote": "Citazione", @@ -2243,15 +2307,15 @@ "gitBinaryFile": "File binario. BusyMark non visualizza le patch binarie.", "gitUnsavedChangesBanner": "Le modifiche non salvate dell’editor non vengono incluse finché non vengono salvate.", "gitConfirmDiscardTitle": "Scartare le modifiche Git?", - "gitConfirmDiscardTracked": "{count, plural, =1{Il file tracciato selezionato verrà ripristinato da Git.} other{I file tracciati selezionati verranno ripristinati da Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Tutte le modifiche staged e non staged nel file tracciato selezionato saranno ripristinate in HEAD.} other{Tutte le modifiche staged e non staged nei file tracciati selezionati saranno ripristinate in HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, =1{Il file non tracciato selezionato verrà eliminato.} other{I file non tracciati selezionati verranno eliminati.}}", "gitConfirmDiscardMixed": "{count, plural, =1{Il file selezionato verrà ripristinato o eliminato in base al suo stato Git.} other{I file selezionati verranno ripristinati o eliminati in base al loro stato Git.}}", "gitConfirmSwitchBranchTitle": "Passare a {branch}?", "gitConfirmSwitchBranchMessage": "BusyMark ricaricherà l’area di lavoro dal disco dopo il cambio di ramo da parte di Git.", "gitConfirmPushSetUpstreamTitle": "Impostare il ramo upstream?", "gitConfirmPushSetUpstreamMessage": "Questo ramo non ha un upstream. BusyMark può inviare {branch} e impostarne l’upstream quando è configurato esattamente un repository remoto.", - "gitProjectHistory": "Progetto", - "gitFileHistory": "File corrente", + "gitProjectHistory": "Cronologia del progetto", + "gitFileHistory": "Cronologia del file", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Azioni sul file", "actions": "Azioni", @@ -2286,73 +2350,138 @@ "gitErrorNetwork": "Operazione di rete Git non riuscita.", "gitErrorConflict": "Git ha segnalato conflitti non risolti.", "gitErrorCommandFailed": "Comando Git non riuscito.", - "markdownAndHtml": "Markdown e HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Blocchi Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Strutture a blocchi supportate nel sorgente Markdown e nell’anteprima.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown in linea", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Formattazione dentro paragrafi, elementi di elenco e celle di tabella.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Blocchi HTML grezzi", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Tag HTML di blocco sicuri renderizzati dai widget di anteprima BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Tag HTML grezzi in linea", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Tag HTML in linea sicuri renderizzati senza mostrare i tag letterali.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Regole di sicurezza", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "L’HTML grezzo viene analizzato e sanificato prima dell’anteprima.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Titoli", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Paragrafi", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Elenchi", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Contenitori", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Blocchi di testo", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Figure e immagini", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Codice preformattato", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Blocchi espandibili", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Elenchi descrittivi", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Tag di formattazione", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Tag di codice in linea", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Tag di testo semantico", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Anteprima sanificata", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "L’HTML consentito viene convertito in blocchi di anteprima BusyMark e non viene renderizzato in un browser.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Codice sorgente conservato", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "L’HTML grezzo non modificato viene salvato esattamente come testo sorgente.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown dentro HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "I marcatori Markdown dentro HTML grezzo vengono visualizzati come testo letterale.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Contenuto attivo bloccato", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Script, stili, frame, moduli, SVG, MathML, eventi e attributi non sicuri vengono bloccati.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Solo URL sicuri", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "I link consentono http, https, mailto, tel, URL relativi e frammenti; gli schemi non sicuri sono bloccati.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Aggiungi a Git", "delete": "Elimina", "newFile": "Nuovo file", @@ -2370,101 +2499,294 @@ "errorFileOperationOutsideRoot": "L’operazione sul file deve restare nell’area di lavoro.", "errorFileOperationRoot": "La radice dell’area di lavoro non può essere modificata dall’albero dei file.", "safeDeleteTopicFile": "Elimina in modo sicuro il file dell’argomento…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Rimuovi elemento dal TOC", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Esamina utilizzi", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Elimina file dell’argomento", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Rimuovi", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Rimuovi «{topic}» dall’istanza selezionata. Il file dell’argomento verrà conservato.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Elimina «{topic}» e ne aggiorna in modo sicuro i riferimenti nell’intero progetto Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 argomento secondario verrà spostato un livello più in alto.} other{{count} argomenti secondari verranno spostati un livello più in alto.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Questo argomento è utilizzato come pagina iniziale di un’istanza. Esaminane gli utilizzi e assegna un’altra pagina iniziale prima di continuare.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Utilizzi ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Non sono stati trovati riferimenti che smetterebbero di funzionare.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark ha trovato i seguenti riferimenti a questo argomento.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Elementi del TOC", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Pagine iniziali", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Collegamenti agli argomenti", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Inclusioni", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{1 utilizzo} other{{count} utilizzi}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Opzioni di refactoring", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Aggiorna automaticamente gli utilizzi", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Rimuove i riferimenti dai TOC e le inclusioni, mantenendo il testo dei collegamenti.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Alcuni utilizzi richiedono modifiche manuali prima di questo refactoring.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Reindirizza a", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Non reindirizzare la vecchia pagina pubblicata.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Destinazione del reindirizzamento", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Esamina e aggiorna gli utilizzi rimanenti prima di continuare oppure abilita gli aggiornamenti automatici, se disponibili.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Utilizzi di {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Nessun utilizzo trovato.", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "Fuori dall’istanza selezionata", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Esegui refactoring", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Il file dell’argomento non è più utilizzato", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Conserva il file dell’argomento", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "«{topic}» non è più utilizzato in alcun punto di questo progetto Writerside. Elimina il file oppure conservalo per utilizzarlo in un’altra istanza.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Usa l’eliminazione sicura per i file degli argomenti Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "Non è stato possibile completare l’analisi degli utilizzi dell’argomento. Nessun file è stato modificato.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Alcuni utilizzi dell’argomento richiedono ancora attenzione. Esaminali prima di continuare.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "La destinazione di reindirizzamento selezionata non è più valida. Selezionala di nuovo.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Non è stato possibile annullare completamente la rimozione dell’argomento. Controlla questi percorsi prima di continuare: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "Esporta come PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Scegli l’impaginazione per creare un PDF rifinito e autonomo.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "Le immagini remote non vengono scaricate durante l’esportazione. Le immagini locali vengono incluse quando disponibili.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Formato pagina", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "Lettera", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Orientamento", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Verticale", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Orizzontale", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Margini", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Stretti", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Normali", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Ampi", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Includi numeri di pagina", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Esporta", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "Esportazione PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "Documento PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "{fileName} è stato esportato.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} è stato esportato. Immagini non incluse: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "Il componente di esportazione PDF non è disponibile. Reinstalla BusyMark e riprova.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "L’esportazione PDF ha richiesto troppo tempo ed è stata interrotta.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark non ha potuto esportare questo documento come PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "Esporta come PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Scegli l’impaginazione per creare un PDF rifinito e autonomo.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Le immagini remote non vengono scaricate durante l’esportazione. Le immagini locali vengono incluse quando disponibili.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Formato pagina", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Lettera", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Orientamento", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Verticale", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Orizzontale", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Margini", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Stretti", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Normali", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Ampi", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Includi numeri di pagina", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Esporta", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "Esportazione PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "Documento PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} è stato esportato.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} è stato esportato con {count, plural, =1{1 avviso} other{{count} avvisi}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "Il componente di esportazione PDF non è disponibile. Reinstalla BusyMark e riprova.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "L’esportazione PDF ha richiesto troppo tempo ed è stata interrotta.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark non ha potuto esportare questo documento come PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Rendering in corso…", "visualizationStale": "Visualizzazione dell’ultimo rendering valido", "visualizationShowSource": "Mostra sorgente", @@ -2485,7 +2807,10 @@ "visualizationRenderFailed": "Impossibile eseguire il rendering di questa visualizzazione.", "visualizationRetry": "Riprova", "visualizationSaved": "Salvato {fileName}", - "shortcutExportPdfDescription": "Esporta il documento attivo o il modulo Writerside come PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "Esporta il documento attivo o il modulo Writerside come PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "In stage", "gitUnstaged": "Non in stage", "gitFetch": "Recupera", @@ -2602,7 +2927,6 @@ "ai": "IA", "aiLocalOllama": "Ollama locale", "aiDisabled": "Disabilitato", - "aiLocalOnlyDescription": "La modifica con IA viene avviata solo esplicitamente. BusyMark invia esclusivamente il contesto mostrato al fornitore selezionato e non applica mai una proposta senza revisione.", "aiProvider": "Provider IA", "aiDefaultProvider": "Provider predefinito", "aiConfigureProvider": "Configura provider", @@ -2686,7 +3010,7 @@ "tableAlignmentCenter": "Allineamento: centro", "tableAlignmentRight": "Allineamento: destra", "sourceSearchReplacement": "Sostituisci con", - "sourceSearchReplaceCurrent": "Sostituisci corrente", + "sourceSearchReplaceCurrent": "Sostituisci la corrispondenza corrente", "sourceSearchReplaceAndFindNext": "Sostituisci e trova successivo", "sourceSearchReplaceAll": "Sostituisci tutto", "workspaceReplace": "Sostituisci nell’area di lavoro", @@ -2716,14 +3040,18 @@ "reloadFromDisk": "Ricarica dal disco", "keepMine": "Mantieni la mia versione", "saveAs": "Salva con nome", - "unsavedChangesMultipleMessage": "{count} documenti contengono modifiche non salvate. Salvarli prima di continuare?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 documento ha modifiche non salvate. Salvarlo prima di continuare?} other{{count} documenti hanno modifiche non salvate. Salvali prima di continuare?}}", "workspaceReplaceIssuePartialConflict": "Il rollback è stato interrotto perché il file è stato modificato contemporaneamente. Alcune sostituzioni potrebbero rimanere; il contenuto spostato è stato conservato nel percorso seguente.", "workspaceReplaceIssueApplyFailed": "Non è stata applicata alcuna sostituzione perché non è stato possibile salvare in sicurezza l’insieme verificato.", - "workspaceRecoveryRestored": "Sono stati recuperati {count} documenti non salvati. Controllare ogni documento recuperato prima di continuare.", - "workspaceRecoveryDamaged": "Non è stato possibile ripristinare {count} record di recupero danneggiati. I documenti recuperati validi restano disponibili.", - "recoveredDocumentReview": "È stato recuperato il contenuto non salvato di {fileName}. Controllarlo, quindi salvarlo, salvarlo con nome o eliminarlo.", + "workspaceRecoveryRestored": "{count, plural, =1{È stato recuperato 1 documento non salvato. Revisionalo prima di salvarlo o scartarlo.} other{Sono stati recuperati {count} documenti non salvati. Revisiona ciascuno prima di salvare o scartare.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Un record di recupero danneggiato non può essere ripristinato. Il file di recupero originale è stato conservato per la revisione.} other{{count} record di ripristino danneggiati non sono stati ripristinati. I record di ripristino validi sono ancora disponibili.}}", + "recoveredDocumentReview": "Recuperato il contenuto non salvato di {fileName}. Esaminalo, quindi salvalo, salvalo con un altro nome o scartalo.", "commandUnavailableInContext": "Questo comando non è disponibile nel contesto corrente.", "mathRenderFailed": "Impossibile visualizzare l’espressione matematica.", "inlineMath": "Formula in linea", - "displayMath": "Formula in blocco" + "displayMath": "Formula in blocco", + "aiExplicitEditingDescription": "La modifica con IA viene avviata solo esplicitamente. BusyMark invia esclusivamente il contesto mostrato al fornitore selezionato e non applica mai una proposta senza revisione.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index f2a0c766..739df73b 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -406,7 +406,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -3687,7 +3687,7 @@ } } }, - "pdfExportedWithWarnings": "{fileName} を {count} 件の警告付きでエクスポートしました。", + "pdfExportedWithWarnings": "{fileName} は {count, plural, =1{1 件の警告} other{{count} 件の警告}} とともにエクスポートされました。", "@pdfExportedWithWarnings": { "description": "PDF export success message when some content fell back or was omitted.", "placeholders": { @@ -4269,10 +4269,6 @@ "@aiDisabled": { "description": "AI provider option that disables AI features." }, - "aiLocalOnlyDescription": "AI による編集は明示的に実行されます。BusyMark は選択したプロバイダーに表示されたコンテキストのみを送信し、確認なしに提案を適用することはありません。", - "@aiLocalOnlyDescription": { - "description": "Privacy description for BusyMark local AI." - }, "aiProvider": "AI プロバイダー", "@aiProvider": { "description": "Label for an AI provider selection." @@ -4612,5 +4608,9 @@ "displayMath": "ディスプレイ数式", "@displayMath": { "description": "Editor action that inserts a display mathematical expression." + }, + "aiExplicitEditingDescription": "AI による編集は明示的に実行されます。BusyMark は選択したプロバイダーに表示されたコンテキストのみを送信し、確認なしに提案を適用することはありません。", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." } } diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index a0bddabd..5c8efe69 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -1,515 +1,1050 @@ { "@@locale": "ko", "appTitle": "BusyMark", - "@appTitle": {"description":"Application name."}, + "@appTitle": { + "description": "Application name." + }, "appSubtitle": "Markdown 파일 및 Writerside 호환 문서 프로젝트용 편집기입니다.", - "@appSubtitle": {"description":"Short application description."}, + "@appSubtitle": { + "description": "Short application description." + }, "aboutBusyMark": "BusyMark 소개", - "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, "aboutTagline": "마크다운 및 Writerside 편집기", - "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, "aboutLicenseLabel": "라이선스", - "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, "aboutLicenseName": "Apache License 2.0", - "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, "aboutWebsite": "웹사이트", - "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, "aboutSourceCode": "소스 코드", - "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, "reportIssue": "문제 신고", - "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, "feedbackCategory": "범주", - "@feedbackCategory": {"description":"Feedback category field label."}, + "@feedbackCategory": { + "description": "Feedback category field label." + }, "feedbackChooseCategory": "카테고리를 선택하세요", - "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, "feedbackCategoryProblem": "문제 또는 버그", - "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, "feedbackCategoryFeature": "기능 요청", - "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, "feedbackCategoryPrivacySecurity": "개인 정보 보호 또는 보안 문제", - "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, "feedbackCategoryUsability": "사용성 문제", - "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, "feedbackCategoryOther": "기타", - "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, "feedbackSubject": "제목", - "@feedbackSubject": {"description":"Feedback subject field label."}, + "@feedbackSubject": { + "description": "Feedback subject field label." + }, "feedbackMessage": "자세한 메시지", - "@feedbackMessage": {"description":"Detailed feedback message field label."}, - "feedbackReplyEmail": "이메일 답장(선택사항)", - "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "회신용 이메일 주소(선택)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, "feedbackIncludeTechnicalDetails": "기술 세부정보 포함", - "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, "feedbackTechnicalDetailsDisclosure": "사용 설정하면 Linux 운영 체제 버전과 BusyMark 애플리케이션 언어만 추가됩니다. 로그, 파일, 계정 데이터 또는 기타 진단 정보는 첨부되지 않습니다.", - "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, "feedbackSubmit": "제출", - "@feedbackSubmit": {"description":"Button that submits feedback."}, + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, "feedbackSubmitting": "제출 중…", - "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, "feedbackCategoryRequired": "카테고리를 선택하세요.", - "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, "feedbackSubjectLength": "제목은 3~120자 사이여야 합니다.", - "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, "feedbackMessageLength": "메시지는 10~5,000자 사이여야 합니다.", - "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, "feedbackReplyEmailInvalid": "유효한 이메일 주소를 입력하거나 이 필드를 비워 두세요.", - "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, "feedbackConnectionFailure": "BusyMark를 연결할 수 없습니다. 인터넷 연결을 확인하고 다시 시도하세요.", - "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, "feedbackTimeoutFailure": "요청 시간이 초과되었습니다. 다시 시도해 보세요.", - "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, "feedbackRateLimitedFailure": "이 연결에서 너무 많은 보고서가 전송되었습니다. 기다렸다가 다시 시도해 보세요.", - "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, "feedbackRejectedFailure": "서버가 이 보고서를 거부했습니다. 양식 필드를 확인하고 다시 시도하세요.", - "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, - "feedbackServerFailure": "서버가 보고서를 승인할 수 없습니다. 나중에 다시 시도하세요.", - "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, + "feedbackServerFailure": "서버가 보고서를 수락할 수 없습니다. 나중에 다시 시도하세요.", + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, "feedbackSuccess": "피드백이 전송되었습니다. 참조 ID: {id}", - "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "advanced": "고급", - "@advanced": {"description":"Settings section title for advanced actions."}, + "@advanced": { + "description": "Settings section title for advanced actions." + }, "addToGit": "Git에 추가", - "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, "appearance": "화면 모양", - "@appearance": {"description":"Settings section title for appearance options."}, + "@appearance": { + "description": "Settings section title for appearance options." + }, "apply": "적용", - "@apply": {"description":"Button label that applies a dialog change."}, + "@apply": { + "description": "Button label that applies a dialog change." + }, "back": "뒤로", - "@back": {"description":"Tooltip for navigating back."}, + "@back": { + "description": "Tooltip for navigating back." + }, "bottomLeft": "왼쪽 하단", - "@bottomLeft": {"description":"Editing button position option."}, + "@bottomLeft": { + "description": "Editing button position option." + }, "bottomRight": "오른쪽 하단", - "@bottomRight": {"description":"Editing button position option."}, + "@bottomRight": { + "description": "Editing button position option." + }, "cancel": "취소", - "@cancel": {"description":"Cancel button label."}, + "@cancel": { + "description": "Cancel button label." + }, "choose": "선택", - "@choose": {"description":"Button label for choosing a file or path."}, + "@choose": { + "description": "Button label for choosing a file or path." + }, "chooseLocation": "위치 선택", - "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, "copy": "복사", - "@copy": {"description":"Copy command label."}, + "@copy": { + "description": "Copy command label." + }, "copyName": "이름 복사", - "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, "copyFileName": "파일 이름 복사", - "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, "copyPath": "경로 복사", - "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, "create": "만들기", - "@create": {"description":"Create action label."}, + "@create": { + "description": "Create action label." + }, "creating": "만드는 중...", - "@creating": {"description":"Progress label while a project or topic is being created."}, + "@creating": { + "description": "Progress label while a project or topic is being created." + }, "cut": "잘라내기", - "@cut": {"description":"Cut command label."}, + "@cut": { + "description": "Cut command label." + }, "promoteSection": "섹션 수준 올리기", - "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, "demoteSection": "섹션 수준 내리기", - "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, "moveSectionUp": "섹션을 위로 이동", - "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, "moveSectionDown": "섹션을 아래로 이동", - "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, "confirmDeleteSectionTitle": "섹션을 삭제하시겠습니까?", - "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, "confirmDeleteSectionMessage": "“{name}” 및 해당 섹션의 모든 콘텐츠를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", - "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "darkTheme": "어둡게", - "@darkTheme": {"description":"Dark theme option."}, + "@darkTheme": { + "description": "Dark theme option." + }, "delete": "삭제", - "@delete": {"description":"Delete command label."}, + "@delete": { + "description": "Delete command label." + }, "discard": "버리기", - "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, "editor": "편집기", - "@editor": {"description":"Editor view label."}, + "@editor": { + "description": "Editor view label." + }, "file": "파일", - "@file": {"description":"Generic file kind label."}, + "@file": { + "description": "Generic file kind label." + }, "fileHistory": "파일 기록", - "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, "folder": "폴더", - "@folder": {"description":"Folder kind label."}, + "@folder": { + "description": "Folder kind label." + }, "insert": "삽입", - "@insert": {"description":"Insert button label."}, + "@insert": { + "description": "Insert button label." + }, "keyboardShortcuts": "키보드 단축키", - "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, "commandPalette": "명령 팔레트", - "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, "commandPaletteHint": "명령을 입력하세요", - "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, "commandPaletteEmpty": "일치하는 명령이 없습니다.", - "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, "commandUnavailableInContext": "현재 편집기 컨텍스트에서는 사용할 수 없습니다.", - "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, "lightTheme": "밝게", - "@lightTheme": {"description":"Light theme option."}, + "@lightTheme": { + "description": "Light theme option." + }, "mainMenu": "메인 메뉴", - "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, "fullScreen": "전체 화면", - "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, "markdown": "Markdown", - "@markdown": {"description":"Markdown format label."}, + "@markdown": { + "description": "Markdown format label." + }, "open": "열기", - "@open": {"description":"Open action label."}, + "@open": { + "description": "Open action label." + }, "openInFiles": "파일에서 열기", - "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, "pathActions": "경로 작업", - "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, "outline": "개요", - "@outline": {"description":"Outline sidebar tab label."}, + "@outline": { + "description": "Outline sidebar tab label." + }, "overwrite": "덮어쓰기", - "@overwrite": {"description":"Button label for overwriting a changed file."}, + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, "paste": "붙여넣기", - "@paste": {"description":"Paste command label."}, + "@paste": { + "description": "Paste command label." + }, "pasteWithoutFormatting": "서식 없이 붙여넣기", - "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, "reading": "읽기", - "@reading": {"description":"Reading view label."}, + "@reading": { + "description": "Reading view label." + }, "removeFromRecent": "최근 항목에서 삭제", - "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, "recent": "최근 항목", - "@recent": {"description":"Recent workspaces section title."}, + "@recent": { + "description": "Recent workspaces section title." + }, "redo": "다시 실행", - "@redo": {"description":"Redo command label."}, + "@redo": { + "description": "Redo command label." + }, "save": "저장", - "@save": {"description":"Save action label."}, + "@save": { + "description": "Save action label." + }, "search": "검색", - "@search": {"description":"Search action label and field hint."}, + "@search": { + "description": "Search action label and field hint." + }, "selectAll": "모두 선택", - "@selectAll": {"description":"Select all command label."}, + "@selectAll": { + "description": "Select all command label." + }, "settings": "설정", - "@settings": {"description":"Settings action label."}, + "@settings": { + "description": "Settings action label." + }, "source": "소스", - "@source": {"description":"Source view label."}, + "@source": { + "description": "Source view label." + }, "split": "분할", - "@split": {"description":"Split view label."}, + "@split": { + "description": "Split view label." + }, "systemTheme": "시스템", - "@systemTheme": {"description":"System theme option."}, + "@systemTheme": { + "description": "System theme option." + }, "theme": "테마", - "@theme": {"description":"Theme setting label."}, + "@theme": { + "description": "Theme setting label." + }, "appLanguage": "언어", - "@appLanguage": {"description":"Application language setting label."}, + "@appLanguage": { + "description": "Application language setting label." + }, "systemLanguage": "시스템 언어", - "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, "languageEnglish": "English", - "@languageEnglish": {"description":"Language selector option for English."}, + "@languageEnglish": { + "description": "Language selector option for English." + }, "languageGerman": "Deutsch", - "@languageGerman": {"description":"Language selector option for German."}, + "@languageGerman": { + "description": "Language selector option for German." + }, "languageDutch": "Nederlands", - "@languageDutch": {"description":"Language selector option for Dutch."}, + "@languageDutch": { + "description": "Language selector option for Dutch." + }, "languageTurkish": "Türkçe", - "@languageTurkish": {"description":"Language selector option for Turkish."}, + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", - "@languageItalian": {"description":"Language selector option for Italian."}, - "languageNorwegian": "Norsk", - "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk bokmål", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, "languageFrench": "Français", - "@languageFrench": {"description":"Language selector option for French."}, + "@languageFrench": { + "description": "Language selector option for French." + }, "languageRussian": "Русский", - "@languageRussian": {"description":"Language selector option for Russian."}, + "@languageRussian": { + "description": "Language selector option for Russian." + }, "languageUkrainian": "Українська", - "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, "languagePolish": "Polski", - "@languagePolish": {"description":"Language selector option for Polish."}, + "@languagePolish": { + "description": "Language selector option for Polish." + }, "languageSpanish": "Español", - "@languageSpanish": {"description":"Language selector option for Spanish."}, + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, "languagePortuguese": "Português", - "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, "languageArabic": "العربية", - "@languageArabic": {"description":"Language selector option for Arabic."}, + "@languageArabic": { + "description": "Language selector option for Arabic." + }, "languagePersian": "فارسی", - "@languagePersian": {"description":"Language selector option for Persian."}, + "@languagePersian": { + "description": "Language selector option for Persian." + }, "languageHindi": "हिन्दी", - "@languageHindi": {"description":"Language selector option for Hindi."}, + "@languageHindi": { + "description": "Language selector option for Hindi." + }, "languageIndonesian": "Bahasa Indonesia", - "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", - "@languageEstonian": {"description":"Language selector option for Estonian."}, + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, "languageVietnamese": "Tiếng Việt", - "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, "languageJapanese": "日本語", - "@languageJapanese": {"description":"Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description":"Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", - "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "사이드바 패널", - "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, "topLeft": "왼쪽 상단", - "@topLeft": {"description":"Editing button position option."}, + "@topLeft": { + "description": "Editing button position option." + }, "topRight": "오른쪽 상단", - "@topRight": {"description":"Editing button position option."}, + "@topRight": { + "description": "Editing button position option." + }, "undo": "실행 취소", - "@undo": {"description":"Undo command label."}, + "@undo": { + "description": "Undo command label." + }, "validate": "검증", - "@validate": {"description":"Validate action label."}, + "@validate": { + "description": "Validate action label." + }, "validation": "검증", - "@validation": {"description":"Settings section title for validation options."}, + "@validation": { + "description": "Settings section title for validation options." + }, "viewMode": "보기 모드", - "@viewMode": {"description":"Native header bar view mode control label."}, + "@viewMode": { + "description": "Native header bar view mode control label." + }, "welcome": "환영합니다", - "@welcome": {"description":"Welcome screen label and tooltip."}, + "@welcome": { + "description": "Welcome screen label and tooltip." + }, "writerside": "Writerside", - "@writerside": {"description":"Writerside workspace kind label."}, + "@writerside": { + "description": "Writerside workspace kind label." + }, "xml": "XML", - "@xml": {"description":"XML format label."}, + "@xml": { + "description": "XML format label." + }, "fileTypeMarkdown": "Markdown", - "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, "fileTypeImages": "이미지", - "@fileTypeImages": {"description":"Native file picker type label for images."}, + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, "openMarkdownFile": "Markdown 파일 열기", - "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, "markdownFileExtensions": ".md 또는 .markdown", - "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, "openFolderOrWritersideProject": "폴더 또는 Writerside 프로젝트 열기", - "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, "markdownFolderOrWritersideProject": "Markdown 폴더 또는 Writerside 호환 프로젝트", - "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, "noOpenFile": "열린 파일 없음", - "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, "shortcutDeleteTreeItemDescription": "선택한 파일 항목을 삭제하거나 목차에서 선택한 항목을 제거합니다.", - "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "일반", - "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, "shortcutNewDocument": "만들기", - "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, "shortcutNewDocumentDescription": "Markdown 파일 또는 Writerside 프로젝트 만들기", - "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, "shortcutOpenDescription": "Markdown 파일, 폴더 또는 Writerside 프로젝트 열기", - "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, "shortcutSaveDescription": "현재 문서 저장", - "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, "shortcutSearchDescription": "현재 작업공간 검색", - "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, "shortcutKeyboardShortcutsDescription": "이 키보드 단축키 참조 표시", - "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, "shortcutMarkdownAndHtmlDescription": "Markdown 및 HTML 참조 열기", - "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, "shortcutSettingsDescription": "BusyMark 설정 열기", - "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, "shortcutNextTab": "다음 탭", - "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, "shortcutNextTabDescription": "열려 있는 다음 탭으로 이동", - "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, "shortcutPreviousTab": "이전 탭", - "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, "shortcutPreviousTabDescription": "이전에 열린 탭으로 이동", - "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, "shortcutCloseTab": "탭 닫기", - "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, "shortcutCloseTabDescription": "활성 탭 닫기", - "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, "shortcutCloseAllTabs": "모든 탭 닫기", - "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, "shortcutCloseAllTabsDescription": "열려 있는 탭을 모두 닫습니다.", - "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, "shortcutGroupTextEditing": "텍스트 편집", - "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, "shortcutSelectAllDescription": "소스 모드에서는 모든 텍스트를 선택합니다. 편집기 모드에서는 두 번 눌러 모든 블록을 선택합니다.", - "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, "shortcutCutDescription": "선택한 텍스트 잘라내기", - "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, "shortcutCopyDescription": "선택한 텍스트 복사", - "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, "shortcutPasteDescription": "클립보드에서 붙여넣기", - "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, "shortcutPastePlainTextDescription": "서식 없이 클립보드 텍스트 붙여넣기", - "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, "shortcutUndoDescription": "마지막 편집 취소", - "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, "shortcutRedoDescription": "마지막으로 실행 취소된 편집 다시 실행", - "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, "shortcutInsertIndentation": "들여쓰기 삽입", - "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "커서에 들여쓰기 삽입", - "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "소스를 내어쓰기", - "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "소스 모드에서 들여쓰기 수준 하나 제거", - "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "검색 닫기 또는 블록 선택 지우기", - "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, "shortcutEscapeDescription": "작업공간 검색을 닫거나 편집기 모드에서 블록 선택을 취소하세요.", - "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, "shortcutGroupFormatting": "서식", - "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, "shortcutBoldDescription": "선택한 텍스트를 굵게 전환합니다.", - "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, "shortcutItalicDescription": "선택한 텍스트에서 기울임체를 전환합니다.", - "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, "shortcutUnderlineDescription": "선택한 텍스트에 밑줄을 토글합니다.", - "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, "shortcutLinkDescription": "링크 삽입 또는 편집", - "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, "shortcutInlineCodeDescription": "선택한 텍스트에서 인라인 코드 전환", - "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, "shortcutStrikethroughDescription": "선택한 텍스트에 취소선을 토글합니다.", - "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, "shortcutGroupBlocks": "블록", - "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, "shortcutParagraphDescription": "현재 블록을 단락으로 설정", - "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, "shortcutHeading1Description": "현재 블록을 제목 1로 설정", - "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, "shortcutHeading2Description": "현재 블록을 제목 2로 설정", - "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, "shortcutHeading3Description": "현재 블록을 제목 3으로 설정", - "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, "shortcutHeading4Description": "현재 블록을 제목 4로 설정", - "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, "shortcutHeading5Description": "현재 블록을 제목 5로 설정", - "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, "shortcutHeading6Description": "현재 블록을 제목 6으로 설정", - "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, "shortcutGroupLists": "목록", - "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, "numberedList": "번호 매기기 목록", - "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, "shortcutNumberedListDescription": "번호 매기기 목록 형식 전환", - "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, "bulletedList": "글머리 기호 목록", - "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, "shortcutBulletedListDescription": "글머리 기호 목록 형식 전환", - "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, "checklist": "체크리스트", - "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, "shortcutChecklistDescription": "체크리스트 형식 전환", - "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, "shortcutGroupSidebar": "사이드바", - "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, "sidebarViewMenu": "사이드바 보기", - "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, "createMarkdownFile": "마크다운 파일 생성", - "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, "createMarkdownFileDescription": "저장되지 않은 로컬 Markdown 문서 시작", - "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, "createWritersideProject": "Writerside 프로젝트 만들기", - "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, "createWritersideProjectDescription": "로컬 Writerside 호환 프로젝트 시작", - "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, "defaultProjectName": "문서", - "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, "defaultInstanceName": "사용자 가이드", - "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, "defaultStartTopicTitle": "시작하기", - "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, "projectName": "프로젝트 이름", - "@projectName": {"description":"Create project dialog field label."}, + "@projectName": { + "description": "Create project dialog field label." + }, "directoryName": "디렉토리 이름", - "@directoryName": {"description":"Create project dialog field label."}, + "@directoryName": { + "description": "Create project dialog field label." + }, "instanceName": "인스턴스 이름", - "@instanceName": {"description":"Create project dialog field label."}, + "@instanceName": { + "description": "Create project dialog field label." + }, "instanceId": "인스턴스 ID", - "@instanceId": {"description":"Create project dialog field label."}, + "@instanceId": { + "description": "Create project dialog field label." + }, "startTopicTitle": "시작 토픽 제목", - "@startTopicTitle": {"description":"Create project dialog field label."}, + "@startTopicTitle": { + "description": "Create project dialog field label." + }, "location": "위치", - "@location": {"description":"Create dialog location section label."}, + "@location": { + "description": "Create dialog location section label." + }, "projectNameRequired": "프로젝트 이름이 필요합니다.", - "@projectNameRequired": {"description":"Validation message for missing project name."}, + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, "directoryNameRequired": "디렉터리 이름이 필요합니다.", - "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, "useSingleSafeDirectoryName": "단일 안전한 디렉터리 이름을 사용하세요.", - "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, "useLowercaseIdentifier": "문자, 숫자, 밑줄 또는 하이픈이 포함된 소문자 식별자를 사용하세요.", - "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, "startTopicTitleRequired": "시작 토픽 제목이 필요합니다.", - "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, "createWritersideProjectFailed": "Writerside 프로젝트를 생성할 수 없습니다.", - "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, "settingsTitle": "BusyMark 설정", - "@settingsTitle": {"description":"Settings screen title."}, + "@settingsTitle": { + "description": "Settings screen title." + }, "autoSave": "자동 저장", - "@autoSave": {"description":"Editor setting label for saving files automatically."}, - "autoSaveDescription": "짧은 유휴 지연 후에 파일 변경 사항을 자동으로 저장합니다.", - "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, + "autoSaveDescription": "파일 변경 사항은 짧은 유휴 기간이 지나면 자동으로 저장됩니다.", + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, "wordWrap": "자동 줄 바꿈", - "@wordWrap": {"description":"Word wrap setting label."}, + "@wordWrap": { + "description": "Word wrap setting label." + }, "editorFontSize": "편집기 글꼴 크기", - "@editorFontSize": {"description":"Editor font size setting label."}, + "@editorFontSize": { + "description": "Editor font size setting label." + }, "validateOnEdit": "편집할 때 검증", - "@validateOnEdit": {"description":"Validation setting label."}, + "@validateOnEdit": { + "description": "Validation setting label." + }, "clearRecentWorkspaces": "최근 작업공간 지우기", - "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, "editingButtonsPosition": "편집 버튼 위치", - "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, "editingButtonsPositionDescription": "부동 WYSIWYG 편집 버튼이 나타나는 위치를 선택합니다.", - "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, "editingButtonsDirection": "편집 버튼 방향", - "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, "editingButtonsDirectionDescription": "부동 WYSIWYG 편집 버튼을 수평 또는 수직으로 정렬할지 선택합니다.", - "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, "horizontal": "가로", - "@horizontal": {"description":"Editing button direction option."}, + "@horizontal": { + "description": "Editing button direction option." + }, "vertical": "세로", - "@vertical": {"description":"Editing button direction option."}, + "@vertical": { + "description": "Editing button direction option." + }, "privacy": "개인정보 보호", - "@privacy": {"description":"Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "원격 이미지 로드", - "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Markdown 미리보기 및 편집기 이미지가 http 및 https URL에서 로드되도록 허용합니다.", - "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "원격 이미지 권한 초기화", - "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, - "clearRemoteImagePermissionsDescription": "원격 이미지를 로드하도록 허용된 작업공간은 잊어버리세요.", - "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, + "clearRemoteImagePermissionsDescription": "원격 이미지 로드 권한이 허용된 작업공간의 저장된 권한을 삭제합니다.", + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "신뢰할 수 있는 Git 작업공간 초기화", - "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "이전에 신뢰한 작업공간에서 Git 기능을 활성화하기 전에 확인하도록 설정합니다.", - "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "창", - "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, "settingsReopenWorkspaceOnStartupTitle": "시작 시 이전 작업공간 다시 열기", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "BusyMark가 시작될 때 이전 세션의 작업공간과 탭을 엽니다.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "저장되지 않은 변경 사항이 있을 때 닫기 전에 확인", - "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, "settingsConfirmCloseWithUnsavedChangesDescription": "문서에 저장되지 않은 변경 사항이 있는 경우 BusyMark를 닫기 전에 물어보세요.", - "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, "closeUnsavedChangesTitle": "저장되지 않은 변경 사항", - "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, "closeUnsavedChangesSingleMessage": "이 문서에는 저장되지 않은 변경사항이 있습니다. BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?", - "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, - "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?} =1{변경된 문서가 1개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?} other{변경된 문서가 {count}개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?}}", - "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?} =1{미저장 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?} other{미저장 문서가 {count}개 있습니다. 계속하기 전에 저장하시겠습니까?}}", + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "closeUnsavedChangesCancel": "취소", - "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, "closeUnsavedChangesDiscard": "버리기", - "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, "closeUnsavedChangesSave": "저장", - "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, "currentFile": "현재 파일", - "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, "unsavedChanges": "저장되지 않은 변경 사항", - "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, "unsavedChangesMessage": "{fileName}에 저장되지 않은 변경사항이 있습니다. 계속하기 전에 저장하시겠습니까?", - "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, - "unsavedChangesMultipleMessage": "{count, plural, =1{변경된 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?} other{변경된 문서가 {count}개 있습니다. 계속하기 전에 저장하시겠습니까?}}", - "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "unsavedChangesMultipleMessage": "{count, plural, =1{미저장 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?} other{미저장 문서가 {count}개 있습니다. 계속하기 전에 저장하시겠습니까?}}", + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "fileChangedOnDisk": "디스크에서 파일이 변경됨", - "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, "fileChangedOnDiskMessage": "이 파일은 사용자가 연 이후 디스크에서 변경되었습니다. 덮어쓰시겠습니까?", - "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, "untitledMarkdownFileName": "제목 없음.md", - "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, "unorderedList": "글머리 기호 목록", - "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, "orderedList": "번호 매기기 목록", - "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, "taskList": "작업 목록", - "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, "toggleTaskChecked": "작업 완료 상태 전환", - "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, "indentListItem": "들여쓰기 목록 항목", - "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, "outdentListItem": "내어쓰기 목록 항목", - "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, "blockquote": "인용문", - "@blockquote": {"description":"Blockquote command label."}, + "@blockquote": { + "description": "Blockquote command label." + }, "codeBlock": "코드 블록", - "@codeBlock": {"description":"Code block command or preview label."}, + "@codeBlock": { + "description": "Code block command or preview label." + }, "codeBlockLanguage": "코드 블록 언어", - "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, "image": "이미지", - "@image": {"description":"Image command and document kind label."}, + "@image": { + "description": "Image command and document kind label." + }, "video": "동영상", "openVideo": "동영상 재생", "pauseVideo": "동영상 일시 중지", @@ -517,1268 +1052,3281 @@ "videoPreview": "동영상 미리 보기", "diagnosticWritersideVideoMissingSource": "비디오에 src 속성이 없습니다.", "diagnosticWritersideVideoUnsupportedSource": "지원되지 않는 비디오 소스: {source}", - "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingFile": "동영상 파일이 존재하지 않습니다: {source}", - "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingPreview": "동영상 미리보기 이미지가 존재하지 않습니다: {preview}", - "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, "inlineImage": "인라인 이미지", - "@inlineImage": {"description":"Inline image command label."}, + "@inlineImage": { + "description": "Inline image command label." + }, "table": "표", - "@table": {"description":"Table command label."}, + "@table": { + "description": "Table command label." + }, "htmlBlock": "HTML 블록", - "@htmlBlock": {"description":"HTML block command label."}, + "@htmlBlock": { + "description": "HTML block command label." + }, "htmlContentDefault": "HTML 콘텐츠", - "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "HTML 블록 삽입 또는 편집", - "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, "renderedHtml": "렌더링된 HTML", - "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, "editHtml": "HTML 편집", - "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, "htmlSource": "HTML 소스", - "@htmlSource": {"description":"Text field label for raw HTML source."}, + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, "thematicBreak": "수평선", - "@thematicBreak": {"description":"Thematic break command label."}, + "@thematicBreak": { + "description": "Thematic break command label." + }, "bold": "굵게", - "@bold": {"description":"Bold command label."}, + "@bold": { + "description": "Bold command label." + }, "italic": "기울임꼴", - "@italic": {"description":"Italic command label."}, + "@italic": { + "description": "Italic command label." + }, "underline": "밑줄", - "@underline": {"description":"Underline command label."}, + "@underline": { + "description": "Underline command label." + }, "strikethrough": "취소선", - "@strikethrough": {"description":"Strikethrough command label."}, + "@strikethrough": { + "description": "Strikethrough command label." + }, "inlineCode": "인라인 코드", - "@inlineCode": {"description":"Inline code command label."}, + "@inlineCode": { + "description": "Inline code command label." + }, "link": "링크", - "@link": {"description":"Link command and preview label."}, + "@link": { + "description": "Link command and preview label." + }, "hardLineBreak": "강제 줄 바꿈", - "@hardLineBreak": {"description":"Hard line break command label."}, + "@hardLineBreak": { + "description": "Hard line break command label." + }, "textStyle": "텍스트 스타일", - "@textStyle": {"description":"Text style menu tooltip."}, + "@textStyle": { + "description": "Text style menu tooltip." + }, "paragraph": "단락", - "@paragraph": {"description":"Paragraph style label."}, + "@paragraph": { + "description": "Paragraph style label." + }, "heading1": "제목 1", - "@heading1": {"description":"Heading 1 style label."}, + "@heading1": { + "description": "Heading 1 style label." + }, "heading2": "제목 2", - "@heading2": {"description":"Heading 2 style label."}, + "@heading2": { + "description": "Heading 2 style label." + }, "heading3": "제목 3", - "@heading3": {"description":"Heading 3 style label."}, + "@heading3": { + "description": "Heading 3 style label." + }, "heading4": "제목 4", - "@heading4": {"description":"Heading 4 style label."}, + "@heading4": { + "description": "Heading 4 style label." + }, "heading5": "제목 5", - "@heading5": {"description":"Heading 5 style label."}, + "@heading5": { + "description": "Heading 5 style label." + }, "heading6": "제목 6", - "@heading6": {"description":"Heading 6 style label."}, + "@heading6": { + "description": "Heading 6 style label." + }, "headingLevelAbbreviation": "H{level}", - "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, "deleteTable": "테이블 삭제", - "@deleteTable": {"description":"Tooltip for deleting a table."}, + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, "tableColumnNumber": "열 {columnNumber}", - "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "insertColumnLeft": "왼쪽에 열 삽입", - "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, "insertColumnRight": "오른쪽에 열 삽입", - "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, "deleteColumn": "열 삭제", - "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, "tableAlignmentUnspecified": "정렬: 지정되지 않음", - "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, "tableAlignmentLeft": "정렬: 왼쪽", - "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, "tableAlignmentCenter": "정렬: 중앙", - "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, "tableAlignmentRight": "정렬: 오른쪽", - "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, "tableRowNumber": "행 {rowNumber}", - "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, "insertRowAbove": "위에 행 삽입", - "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, "insertRowBelow": "아래에 행 삽입", - "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, "deleteRow": "행 삭제", - "@deleteRow": {"description":"Menu item for deleting a table row."}, + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, "tableHeaderHint": "헤더", - "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, "tableCellHint": "셀", - "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, "language": "언어", - "@language": {"description":"Code block language field label."}, + "@language": { + "description": "Code block language field label." + }, "hideEditingButtons": "편집 버튼 숨기기", - "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, "showEditingButtons": "편집 버튼 표시", - "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, "altText": "대체 텍스트", - "@altText": {"description":"Image alt text field label."}, + "@altText": { + "description": "Image alt text field label." + }, "editorPlaceholderText": "텍스트", - "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "코드", - "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "대체 텍스트", - "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "이미지 설명", - "@describeTheImage": {"description":"Image alt text hint."}, + "@describeTheImage": { + "description": "Image alt text hint." + }, "columns": "열", - "@columns": {"description":"Table dialog columns field label."}, + "@columns": { + "description": "Table dialog columns field label." + }, "rows": "행", - "@rows": {"description":"Table dialog rows field label."}, + "@rows": { + "description": "Table dialog rows field label." + }, "tableHeaderNumber": "헤더 {columnNumber}", - "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "tableCellDefault": "셀", - "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, "noImageSource": "이미지 소스 없음", - "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, "remoteImageBlocked": "원격 이미지가 차단됨", - "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "BusyMark가 원격 이미지를 로드할 수 있는지 여부를 선택합니다.", - "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "원격 이미지가 차단되었습니다.", - "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "이 문서는 인터넷의 이미지를 참조합니다. 이를 로드하면 이미지 호스트에 네트워크 정보가 공개될 수 있습니다.", - "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "이 작업공간에서 로드", - "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "항상 원격 이미지 로드", - "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "사이드바 패널 숨기기", - "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, "showSidebar": "사이드바 패널 표시", - "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, "showPreview": "미리보기 표시", - "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, "hidePreview": "미리보기 숨기기", - "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, "workspaceKindUnsavedMarkdown": "저장되지 않은 마크다운 파일", - "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, "workspaceKindSingleMarkdown": "단일 마크다운 파일", - "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, "workspaceKindMarkdownFolder": "마크다운 폴더", - "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, "workspaceKindWritersideModule": "Writerside 모듈", - "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, "problems": "문제", - "@problems": {"description":"Diagnostics dialog title."}, + "@problems": { + "description": "Diagnostics dialog title." + }, "diagnosticCount": "{count, plural, =0{진단 없음} =1{진단 1개} other{진단 {count}개}}", - "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "files": "파일", - "@files": {"description":"Files sidebar tab label."}, + "@files": { + "description": "Files sidebar tab label." + }, "toc": "목차", - "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, "tocActions": "목차 작업", - "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, "markdownUnsaved": "마크다운 - 저장되지 않음", - "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, "workspaceDetail": "{kind} - {count, plural, =1{파일 1개} other{파일 {count}개}}", - "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "noFiles": "파일 없음", - "@noFiles": {"description":"Empty state shown when there are no files."}, + "@noFiles": { + "description": "Empty state shown when there are no files." + }, "newFile": "새 파일", - "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, "noWritersideToc": "Writerside 목차 없음", - "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, "tocSection": "목차 섹션", - "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, "newTopic": "새 토픽", - "@newTopic": {"description":"Create new Writerside topic action label."}, + "@newTopic": { + "description": "Create new Writerside topic action label." + }, "newChildTopic": "새 하위 토픽", - "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, "newSiblingTopic": "새 형제 토픽", - "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, "renameTopicFile": "토픽 파일 이름 바꾸기", - "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, "topicPlacement": "목차 배치", - "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, "tocRoot": "목차 루트", - "@tocRoot": {"description":"TOC placement option for the root level."}, + "@tocRoot": { + "description": "TOC placement option for the root level." + }, "afterSelectedTopic": "선택한 토픽 뒤", - "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, "insideSelectedTopic": "선택한 토픽 내부", - "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, "pasteAfterTopic": "토픽 뒤에 붙여넣기", - "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, "pasteAsChildTopic": "하위 토픽으로 붙여넣기", - "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, "removeFromToc": "목차에서 제거", - "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, "confirmRemoveFromTocTitle": "목차에서 삭제하시겠습니까?", - "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, "confirmRemoveFromTocMessage": "이 목차에서 {name}을(를) 제거하시겠습니까? 토픽 파일은 유지됩니다.", - "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteTopicTitle": "토픽 파일을 삭제하시겠습니까?", - "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, "confirmDeleteTopicMessage": "{name}을(를) 삭제하고 모든 목차에서 제거하시겠습니까? 이 작업은 취소할 수 없습니다.", - "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "safeDeleteTopicFile": "토픽 파일 안전 삭제…", - "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, "removeTocElement": "TOC 요소 제거", - "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, "reviewUsages": "사용 검토", - "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, "deleteTopicFile": "토픽 파일 삭제", - "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, "removeAction": "제거", - "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, "topicRemovalSummary": "선택한 인스턴스에서 “{topic}”을(를) 제거합니다. 토픽 파일은 유지됩니다.", - "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "“{topic}”을 삭제하고 이 Writerside 프로젝트 전체에서 해당 참조를 안전하게 업데이트하세요.", - "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{하위 토픽 1개가 한 단계 위로 이동합니다.} other{하위 토픽 {count}개가 한 단계 위로 이동합니다.}}", - "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "이 토픽은 인스턴스 시작 페이지로 사용됩니다. 계속하기 전에 사용처를 검토하고 다른 시작 페이지를 지정하세요.", - "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, "topicUsagesCount": "사용처 ({count})", - "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "깨질 수 있는 참조가 발견되지 않았습니다.", - "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, "topicUsagesFound": "BusyMark에서 이 토픽에 대한 다음 참조를 찾았습니다.", - "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, "topicUsageTocElements": "목차 요소", - "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, "topicUsageStartPages": "시작 페이지", - "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, "topicUsageTopicLinks": "토픽 링크", - "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, - "topicUsageIncludes": "포함", - "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, + "topicUsageIncludes": "include 요소", + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, "usageCount": "{count, plural, =1{사용처 1개} other{사용처 {count}개}}", - "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "리팩토링 옵션", - "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, - "updateUsagesAutomatically": "자동으로 사용량 업데이트", - "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, - "updateUsagesAutomaticallyDescription": "목차 참조 및 포함을 제거하고 링크 텍스트를 유지합니다.", - "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, + "updateUsagesAutomatically": "참조 사용량을 자동으로 업데이트", + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, + "updateUsagesAutomaticallyDescription": "목차 참조와 include 요소를 제거하고 링크 텍스트를 유지합니다.", + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, "manualUsageUpdatesRequired": "일부 사용처는 이 리팩터링 전에 수동으로 변경해야 합니다.", - "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, "setRedirectTo": "다음으로 리디렉션 설정", - "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, "noRedirectDescription": "이전에 게시된 페이지를 리디렉션하지 마세요.", - "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, - "redirectTarget": "대상 리디렉션", - "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, + "redirectTarget": "리디렉션 대상", + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, "remainingUsagesBlockRemoval": "계속하기 전에 남은 사용처를 검토하고 업데이트하거나, 가능한 경우 자동 업데이트를 활성화하세요.", - "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, "usagesOfTopic": "{topic}의 사용처", - "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "사용처를 찾을 수 없습니다.", - "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, "outsideSelectedInstance": "선택한 인스턴스 외부", - "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, "doRefactor": "리팩토링 수행", - "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, "orphanTopicTitle": "토픽 파일이 더 이상 사용되지 않습니다.", - "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, "keepTopicFile": "토픽 파일 유지", - "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, "orphanTopicMessage": "\"{topic}\"은(는) 이 Writerside 프로젝트의 어느 곳에서도 더 이상 사용되지 않습니다. 파일을 삭제하거나 다른 인스턴스에서 사용할 수 있도록 보관하세요.", - "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "defaultNewTopicTitle": "새 토픽", - "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, "topicTitle": "토픽 제목", - "@topicTitle": {"description":"Create topic dialog field label."}, + "@topicTitle": { + "description": "Create topic dialog field label." + }, "fileName": "파일 이름", - "@fileName": {"description":"Create topic dialog field label."}, + "@fileName": { + "description": "Create topic dialog field label." + }, "topicTitleRequired": "토픽 제목이 필요합니다.", - "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, "fileNameRequired": "파일 이름은 필수입니다.", - "@fileNameRequired": {"description":"Validation message for missing file name."}, + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, "rename": "이름 바꾸기", - "@rename": {"description":"Rename command label."}, + "@rename": { + "description": "Rename command label." + }, "confirmDeleteFileTitle": "파일을 삭제하시겠습니까?", - "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, "confirmDeleteFolderTitle": "폴더를 삭제하시겠습니까?", - "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, "confirmDeleteFileMessage": "{name}을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", - "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteFolderMessage": "{name} 및 그 안의 모든 파일을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", - "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "useSingleSafeFileName": "하나의 안전한 파일 이름을 사용하십시오.", - "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, "useExpectedExtension": "선택한 형식에 대해 {extension} 확장자를 사용하세요.", - "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "useIdentifierCharacters": "확장자 앞에 문자, 숫자, 밑줄 또는 하이픈을 사용하십시오.", - "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, "topicIdAlreadyExists": "토픽 ID가 이미 존재합니다.", - "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, "createWritersideTopicFailed": "Writerside 토픽을 생성할 수 없습니다.", - "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, "noOutline": "개요 없음", - "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, "expandKind": "{kind} 펼치기", - "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "collapseKind": "{kind} 접기", - "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "foldKindSection": "부분", - "@foldKindSection": {"description":"Fold kind label for a section."}, + "@foldKindSection": { + "description": "Fold kind label for a section." + }, "foldKindList": "목록", - "@foldKindList": {"description":"Fold kind label for a list."}, - "foldKindQuote": "인용하다", - "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, - "foldKindTag": "꼬리표", - "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "@foldKindList": { + "description": "Fold kind label for a list." + }, + "foldKindQuote": "인용문", + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, + "foldKindTag": "태그", + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, "sourceSearchPreviousMatch": "이전 일치 항목", - "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "다음 일치 항목", - "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "대소문자 구분", - "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "전체 단어", - "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "정규식", - "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchReplacement": "다음으로 바꾸기", - "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, - "sourceSearchReplaceCurrent": "현재 항목 바꾸기", - "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "현재 일치 항목 바꾸기", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, "sourceSearchReplaceAndFindNext": "바꾸고 다음 찾기", - "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, "sourceSearchReplaceAll": "모두 바꾸기", - "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, "workspaceReplace": "작업공간에서 바꾸기", - "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, "reviewReplacements": "바꾸기 결과 검토", - "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, "applyReplacements": "바꾸기 적용", - "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, "skippedFiles": "건너뛴 파일", - "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, "workspaceReplaceDirtyBuffer": "저장되지 않은 편집기 콘텐츠", - "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, "workspaceReplaceDiskContent": "저장된 디스크 내용", - "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, "selectFileMatches": "{count}개 일치 항목 모두 선택", - "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceReplaceApplied": "{files}개 파일에서 {matches}개 일치 항목을 바꿨습니다. {skipped}개는 건너뛰었습니다.", - "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · 마지막 개행", - "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · 마지막 개행 없음", - "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "normalizeLineEndings": "줄 끝 표준화", - "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, "mixedLineEndingsSavePrompt": "이 문서에는 혼합된 줄 끝이 포함되어 있습니다. 형식을 선택하세요.", - "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, "workspaceReplaceMixedLineEndings": "{fileName}에서 줄바꿈 형식이 섞여 있습니다. 바꾸기 전에 사용할 형식을 선택하세요.", - "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "workspaceReplaceIssueOversized": "크기가 큰 파일을 건너뛰었습니다.", - "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, "workspaceReplaceIssueUnreadable": "읽을 수 없는 파일을 건너뛰었습니다.", - "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, "workspaceReplaceIssueInvalidUtf8": "유효한 UTF-8이 아닌 파일을 건너뛰었습니다.", - "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, "workspaceReplaceIssueTruncated": "바꾸기 미리 보기가 잘렸습니다.", - "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, "workspaceReplaceIssueFileChanged": "미리보기 이후에 변경된 파일을 건너뛰었습니다.", - "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, "workspaceReplaceIssueBufferChanged": "미리보기 이후에 변경된 편집기 버퍼를 건너뛰었습니다.", - "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, "workspaceReplaceIssueNormalizationRequired": "바꾸기 전에 LF 또는 CRLF 정규화를 선택하세요.", - "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, "workspaceReplaceIssuePartialConflict": "파일이 동시에 변경되어 롤백이 중지되었습니다. 일부 바꾸기 결과가 남아 있을 수 있습니다. 기존 내용은 아래 경로에 보존되었습니다.", - "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, "workspaceReplaceIssueApplyFailed": "검토한 바꾸기 결과를 커밋할 수 없습니다. 파일은 변경되지 않았습니다.", - "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, "externalChangesTitle": "외부 변경 사항 — {fileName}", - "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "externalFileDeleted": "이 파일은 디스크에서 삭제되었습니다.", - "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, "externalFileChanged": "저장되지 않은 수정사항이 있는 동안 이 파일이 디스크에서 변경되었습니다.", - "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, - "recoveredDocumentReview": "{fileName}의 저장되지 않은 콘텐츠를 복구했습니다. 검토한 후 저장, 다른 이름으로 저장 또는 삭제하세요.", - "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "{fileName}의 저장되지 않은 콘텐츠가 복구되었습니다. 검토한 다음 저장, 다른 이름으로 저장 또는 변경사항을 버리세요.", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "compare": "비교", - "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, "reloadFromDisk": "디스크에서 다시 불러오기", - "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, "keepMine": "내 변경 사항 유지", - "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, "saveAs": "다른 이름으로 저장", - "@saveAs": {"description":"Action that saves the current document to another path."}, + "@saveAs": { + "description": "Action that saves the current document to another path." + }, "sourceSearchInvalidRegex": "잘못된 정규식", - "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "대용량 파일: 강조 표시 및 접기가 일시 중지됩니다.", - "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "읽을 내용 없음", - "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, "admonition": "주의 사항", - "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, "quote": "인용", - "@quote": {"description":"Label for a neutral Writerside quote block."}, + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, "note": "참고", - "@note": {"description":"Preview label for a note admonition."}, + "@note": { + "description": "Preview label for a note admonition." + }, "tip": "팁", - "@tip": {"description":"Preview label for a tip admonition."}, + "@tip": { + "description": "Preview label for a tip admonition." + }, "warning": "경고", - "@warning": {"description":"Preview label for a warning admonition."}, + "@warning": { + "description": "Preview label for a warning admonition." + }, "tabs": "탭", - "@tabs": {"description":"Preview label for a tabs block."}, + "@tabs": { + "description": "Preview label for a tabs block." + }, "tab": "탭", - "@tab": {"description":"Preview label for a tab block."}, + "@tab": { + "description": "Preview label for a tab block." + }, "procedure": "절차", - "@procedure": {"description":"Preview label for a procedure block."}, + "@procedure": { + "description": "Preview label for a procedure block." + }, "step": "단계", - "@step": {"description":"Preview label for a procedure step."}, + "@step": { + "description": "Preview label for a procedure step." + }, "topic": "토픽", - "@topic": {"description":"Preview label for a topic element."}, + "@topic": { + "description": "Preview label for a topic element." + }, "chapter": "장", - "@chapter": {"description":"Preview label for a chapter element."}, + "@chapter": { + "description": "Preview label for a chapter element." + }, "couldNotOpenTarget": "{target}을(를) 열 수 없습니다.", - "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, "linkTargetNotFound": "링크 대상을 찾을 수 없습니다: {targetPath}", - "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "cannotOpenFileTypeInEditor": "이 파일 형식을 편집기에서 열 수 없습니다", - "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, "anchorNotFound": "앵커를 찾을 수 없음: {anchor}", - "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "noProblemsFound": "문제가 발견되지 않음", - "@noProblemsFound": {"description":"Diagnostics empty state."}, + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, "noResults": "결과 없음", - "@noResults": {"description":"Search empty state."}, + "@noResults": { + "description": "Search empty state." + }, "searchResultLine": "{relativePath} - {lineNumber}번째 줄", - "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, "untitledResult": "제목 없는 결과", - "@untitledResult": {"description":"Fallback search result title."}, + "@untitledResult": { + "description": "Fallback search result title." + }, "documentKindMarkdownFile": "마크다운 파일", - "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, "documentKindWritersideMarkdownTopic": "Writerside Markdown 토픽", - "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideXmlTopic": "Writerside XML 토픽", - "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideTree": "Writerside 트리", - "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, "documentKindConfigurationFile": "구성 파일", - "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, "documentKindVariablesFile": "변수 파일", - "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, "documentKindCategoriesFile": "카테고리 파일", - "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, "documentKindResourceFile": "리소스 파일", - "@documentKindResourceFile": {"description":"Search result document kind label."}, + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, "workspaceErrorOpenFailed": "열기 실패: {error}", - "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideProjectFailed": "Writerside 프로젝트를 생성할 수 없습니다: {error}", - "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideTopicFailed": "Writerside 토픽을 생성할 수 없습니다: {error}", - "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCouldNotOpenFile": "파일을 열 수 없습니다: {error}", - "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorChooseWhereToSaveMarkdown": "이 마크다운 파일을 저장할 위치를 선택하세요.", - "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, "workspaceErrorSaveBlockedFileChangedOnDisk": "저장이 차단되었습니다. 디스크에서 파일이 변경되었습니다.", - "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, "workspaceErrorSaveFailed": "저장 실패: {error}", - "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorFileOperationFailed": "파일 작업 실패: {error}", - "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorValidationFailed": "검증 실패: {error}", - "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceRecoveryRestored": "{count, plural, =1{저장되지 않은 문서 1개를 복구했습니다. 저장하거나 삭제하기 전에 검토하세요.} other{저장되지 않은 문서 {count}개를 복구했습니다. 각 문서를 저장하거나 삭제하기 전에 검토하세요.}}", - "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceRecoveryDamaged": "{count, plural, =1{손상된 복구 기록 1개를 복원하지 못했습니다. 검사를 위해 원본 복구 파일을 보존했습니다.} other{손상된 복구 기록 {count}개를 복원하지 못했습니다. 유효한 복구 기록은 계속 사용할 수 있습니다.}}", - "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "errorPathDoesNotExist": "경로가 존재하지 않습니다: {path}", - "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTargetDirectoryNotEmpty": "대상 디렉터리가 이미 존재하며 비어 있지 않습니다: {path}", - "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTargetPathNotDirectory": "대상 경로가 이미 존재하며 디렉터리가 아닙니다: {path}", - "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorGeneratedFileAlreadyExists": "생성된 파일이 이미 존재합니다: {path}", - "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorParentDirectoryRequired": "상위 디렉터리가 필요합니다.", - "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, "errorParentDirectoryMissing": "상위 디렉터리가 존재하지 않습니다: {path}", - "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorDirectoryMissing": "디렉터리가 존재하지 않습니다: {path}", - "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorPathAlreadyExists": "경로가 이미 존재합니다: {path}", - "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorFileNameRequired": "파일 이름은 필수입니다.", - "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, "errorFileNameUnsafe": "파일 이름은 단일 안전 경로 세그먼트여야 합니다.", - "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, "errorFileOperationInvalidTarget": "폴더를 폴더 자체로 이동할 수 없습니다.", - "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, "errorFileOperationOutsideRoot": "파일 작업은 작업공간 내부에서 수행해야 합니다.", - "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, "errorFileOperationRoot": "작업공간 루트는 파일 트리에서 변경할 수 없습니다.", - "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, "errorProjectNameRequired": "프로젝트 이름이 필요합니다.", - "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, "errorDirectoryNameRequired": "디렉터리 이름이 필요합니다.", - "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, "errorDirectoryNameUnsafe": "디렉터리 이름은 단일 안전 경로 세그먼트여야 합니다.", - "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, "errorInstanceIdInvalid": "인스턴스 ID는 소문자로 시작해야 하며 소문자, 숫자, 밑줄, 하이픈만 포함할 수 있습니다.", - "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, "errorTopicFileInvalid": "토픽 파일 이름은 경로 구분 기호가 없는 Markdown 파일 이름이어야 합니다.", - "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, "errorTopicTitleRequired": "토픽 제목이 필요합니다.", - "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, "errorWritersideModuleRootMissing": "Writerside 모듈 루트가 존재하지 않습니다: {path}", - "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideModuleNotOpen": "토픽을 생성하려면 Writerside 모듈이 열려 있어야 합니다.", - "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, "errorWritersideInstanceTreeMissing": "Writerside 모듈에는 인스턴스 트리가 없습니다.", - "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, "errorWritersideTreeFileMissing": "Writerside 트리 파일이 존재하지 않습니다: {path}", - "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTopicIdAlreadyExists": "이 도움말 모듈에는 토픽 ID \"{topicId}\"가 이미 있습니다.", - "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, "errorTopicFileAlreadyExists": "토픽 파일이 이미 존재합니다: {path}", - "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorReferenceTopicMissing": "선택한 트리에 참조 토픽이 없습니다: {topic}", - "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideTocNodeMissing": "선택한 목차 항목이 더 이상 존재하지 않습니다.", - "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, "errorWritersideTocInvalidMove": "TOC 항목은 자체 항목이나 해당 하위 항목 중 하나로 이동할 수 없습니다.", - "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, "errorWritersideStartTopicDelete": "시작 토픽 {topic}을(를) 삭제할 수 없습니다. 먼저 다른 시작 페이지를 선택하세요.", - "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Writerside 토픽 파일에는 안전 삭제를 사용하세요.", - "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, "errorWritersideTopicUsageScanFailed": "토픽 사용처 검색을 완료할 수 없습니다. 변경된 파일이 없습니다.", - "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "일부 토픽 사용처는 여전히 검토가 필요합니다. 계속하기 전에 확인하세요.", - "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "선택한 리디렉션 대상이 더 이상 유효하지 않습니다. 다시 선택하세요.", - "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "토픽 삭제를 완전히 롤백할 수 없습니다. 계속하기 전에 다음 경로를 검토하세요. {paths}", - "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorTopicsRootUnsafe": "토픽 루트는 안전한 상대 디렉터리여야 합니다.", - "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, "errorTopicFileNameUnsafe": "토픽 파일 이름은 안전한 단일 경로 세그먼트여야 합니다.", - "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, "errorTopicFileExtensionMismatch": "토픽 파일 확장자는 선택한 형식({extension})과 일치해야 합니다.", - "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "errorTopicFileNameInvalid": "토픽 파일 이름에는 문자, 숫자, 밑줄, 하이픈만 포함해야 합니다.", - "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, "errorUnknown": "알 수 없는 오류: {code}", - "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileStatFailed": "파일 메타데이터를 읽을 수 없습니다: {error}", - "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceScanSkipped": "큰 작업공간이 감지되었습니다. 앱의 응답성을 유지하기 위해 일부 파일을 건너뛰었습니다.", - "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, "diagnosticWorkspaceScanInspectFailed": "작업공간 항목을 검사할 수 없습니다: {error}", - "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, - "diagnosticWorkspaceFileTooLarge": "파일이 자동 파싱 한도를 초과했습니다.", - "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileTooLarge": "이 파일은 베타 자동 파싱 한도보다 큽니다.", + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, "diagnosticWorkspaceFileReadFailed": "Markdown 파일을 읽을 수 없습니다: {error}", - "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticMarkdownAttributeMalformed": "잘못된 Writerside 제목 속성 블록입니다.", - "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, "diagnosticMarkdownHeadingDuplicateId": "제목 ID \"{id}\"이(가) 중복되었습니다.", - "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTopicH1ConvertedToChapter": "추가 최상위 H1 제목은 장으로 처리됩니다.", - "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, - "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown 토픽에는 H1 또는 머리말 제목이 없습니다.", - "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown 주제에 H1 또는 front matter 제목이 없습니다.", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, "diagnosticWritersideXmlTopicMissingTitle": "XML 토픽에 제목이 없습니다.", - "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, "diagnosticWritersideTopicFileMissingTitle": "\"{fileName}\" 토픽에 제목이 없습니다.", - "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, - "diagnosticMarkdownFrontMatterMalformed": "머리말이 닫히지 않았습니다.", - "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "diagnosticMarkdownFrontMatterMalformed": "front matter가 닫히지 않았습니다.", + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, "diagnosticMarkdownRawHtmlUnsafe": "안전하지 않은 HTML 요소.", - "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, "diagnosticMarkdownLinkUnresolvedTarget": "링크 대상이 존재하지 않습니다: {targetPath}", - "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "diagnosticMarkdownLinkUnresolvedAnchor": "앵커 \"{anchor}\"이(가) 존재하지 않습니다.", - "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingAlt": "이미지 \"{destination}\"에 대체 텍스트가 없습니다.", - "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingFile": "이미지가 존재하지 않습니다: {destination}", - "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticInvalidXml": "잘못된 XML: {message}", - "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, "diagnosticWritersideConfigInvalidRoot": "writerside.cfg 루트는 여야 합니다.", - "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, "diagnosticWritersideConfigMissingSnippetsSrc": "스니펫 선언에 src가 없습니다.", - "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, "diagnosticWritersideConfigMissingInstanceGroupsSrc": "인스턴스 그룹 선언에 src가 없습니다.", - "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, "diagnosticWritersideConfigInvalidKeymapsMode": "지원되지 않는 키맵 모드: {mode}", - "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceSrc": "인스턴스 선언에 src가 없습니다.", - "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, "diagnosticWritersideConfigMissingInstance": "writerside.cfg는 인스턴스를 등록하지 않습니다.", - "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, "diagnosticWritersideTreeInvalidRoot": ".tree 루트는 이어야 합니다.", - "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, "diagnosticWritersideTreeMissingId": "인스턴스 프로필에 ID가 없습니다.", - "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, "diagnosticWritersideTreeIdMismatch": "트리 파일의 기본 이름이 인스턴스 ID \"{id}\"와 일치하지 않습니다.", - "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, - "diagnosticWritersideTreeMissingStartPage": "라이브러리가 아닌 인스턴스에 시작 페이지가 없습니다.", - "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "라이브러리가 아닌 인스턴스에 start-page가 누락되었습니다.", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, "diagnosticWritersideStartPageMissing": "시작 페이지 \"{startPage}\"이(가) 존재하지 않습니다.", - "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, "diagnosticWritersideTreeDuplicateTopic": "이 인스턴스 목차에 \"{topic}\" 토픽이 두 번 이상 나타납니다.", - "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideVariableMalformedDeclaration": "변수 선언에는 이름과 값이 있어야 합니다.", - "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, "diagnosticWritersideVariableDuplicateName": "\"{name}\" 변수가 두 번 이상 선언되었습니다.", - "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryMissingId": "카테고리에 ID가 없습니다.", - "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, "diagnosticWritersideCategoryDuplicateId": "카테고리 \"{id}\"이(가) 두 번 이상 선언되었습니다.", - "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryDuplicateOrder": "카테고리 순서 \"{order}\"이(가) 두 번 이상 선언되었습니다.", - "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, "diagnosticWritersideTopicInvalidRoot": ".topic 루트는 이어야 합니다.", - "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, "diagnosticWritersideTopicMissingRootId": "XML 토픽에 루트 ID가 없습니다.", - "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, "diagnosticWritersideTopicRootIdMismatch": "XML 토픽 루트 ID \"{id}\"는 파일 이름 \"{expectedId}\"와 일치해야 합니다.", - "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateElementId": "요소 ID \"{elementId}\"이(가) 두 번 이상 나타납니다.", - "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAnchorMissingHref": "에 href가 없습니다.", - "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, "diagnosticWritersideConfigMissing": "Writerside 모드에는writerside.cfg가 필요합니다.", - "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, "diagnosticWritersideConfigMissingBuildConfigDirectory": "구성된 빌드 구성 디렉터리가 누락되었습니다: {relativePath}", - "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "구성된 API 사양 디렉터리가 누락되었습니다: {relativePath}", - "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingSnippetsDirectory": "구성된 스니펫 디렉터리가 누락되었습니다: {relativePath}", - "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingVarsFile": "구성된 변수 파일이 누락되었습니다: {relativePath}", - "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingCategoriesFile": "구성된 카테고리 파일이 누락되었습니다: {relativePath}", - "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceGroupsFile": "구성된 인스턴스 그룹 파일이 누락되었습니다: {relativePath}", - "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceTree": "등록된 인스턴스 트리 \"{source}\"이(가) 존재하지 않습니다.", - "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideTopicReadFailed": "토픽 파일을 읽을 수 없습니다: {error}", - "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWritersideDefaultTopicsDirectoryMissing": "기본 토픽 디렉터리가 누락되었습니다: {relativePath}", - "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicsDirectoryMissing": "구성된 토픽 디렉터리가 누락되었습니다: {relativePath}", - "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideImagesDirectoryMissing": "구성된 이미지 디렉터리가 누락되었습니다: {relativePath}", - "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateId": "요소 ID \"{id}\"이(가) 두 번 이상 나타납니다.", - "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, - "diagnosticWritersideTreeMissingTopic": "목차에서 \"{topic}\" 토픽이 누락되었습니다.", - "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingTopic": "TOC에서 존재하지 않는 주제를 참조합니다: \"{topic}\".", + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideTreeInvalidHref": "외부 href \"{href}\"이(가) 잘못되었습니다.", - "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, "diagnosticWritersideVariableUnresolved": "변수 \"%{name}%\"이(가) 선언되지 않았습니다.", - "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideTopicLinkUnresolved": "토픽 링크 \"{destination}\"을 확인할 수 없습니다.", - "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, - "diagnosticWritersideAnchorUnresolved": "\"{targetName}\" 앵커 \"{anchor}\"이(가) 존재하지 않습니다.", - "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, - "diagnosticWritersideIncludeMissingFrom": "가 누락되었습니다.", - "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticWritersideAnchorUnresolved": "대상 \"{targetName}\"에 앵커 \"{anchor}\"가 존재하지 않습니다.", + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": "에 from 속성이 없습니다.", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, "diagnosticWritersideIncludeSourceMissing": "포함 소스 \"{from}\"이(가) 존재하지 않습니다.", - "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, "diagnosticWritersideIncludeElementMissing": "포함 요소 \"{elementId}\"이(가) \"{from}\"에 존재하지 않습니다.", - "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, - "diagnosticWritersideCategoryUnresolved": "또한 카테고리 \"{ref}\"가 선언되지 않았습니다.", - "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "seealso 카테고리 \"{ref}\"가 선언되지 않았습니다.", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAmbiguousReference": "토픽 참조 \"{reference}\"이(가) 모호합니다.", - "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, "diagnosticUnknown": "알 수 없는 진단: {code}", - "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, - "close": "닫다", - "@close": {"description":"Close action label."}, + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "close": "닫기", + "@close": { + "description": "Close action label." + }, "git": "Git", - "@git": {"description":"Git sidebar tab label."}, + "@git": { + "description": "Git sidebar tab label." + }, "gitDiff": "Git diff", - "@gitDiff": {"description":"Title for the Git diff viewer."}, + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, "gitShowDiff": "diff 표시", - "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "이전 {oldRange} → 새 {newRange}", - "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, "gitDiffNoLines": "줄 없음", - "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git을 사용할 수 없음", - "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, "gitUnavailableMessage": "{reason, select, other{Git을 설치하거나 BusyMark가 사용할 수 있는 Git 실행 파일을 구성하세요. {reason}}}", - "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, "gitTrustRequiredTitle": "Git에 대한 이 작업공간을 신뢰하시나요?", - "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Git 저장소는 후크, 필터 및 기타 구성을 통해 프로그램을 실행할 수 있습니다. BusyMark가 저장소 데이터를 읽거나 Git 작업을 활성화하기 전에 이 작업공간을 신뢰하세요.", - "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "작업공간 신뢰", - "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Git 저장소가 아님", - "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, "gitNotRepositoryMessage": "이 작업공간은 Git 저장소 내부에 없습니다.", - "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, "gitInitializeRepository": "저장소 초기화", - "@gitInitializeRepository": {"description":"Action label for git init."}, + "@gitInitializeRepository": { + "description": "Action label for git init." + }, "gitDetachedHead": "분리된 HEAD", - "@gitDetachedHead": {"description":"Detached HEAD label."}, + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, "gitDetachedHeadAt": "{commit}에 분리됨", - "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, "gitNoUpstream": "업스트림 없음", - "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, "gitAheadCount": "{count, plural, =1{푸시하지 않은 커밋 1개} other{푸시하지 않은 커밋 {count}개}}", - "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitBehindCount": "{count, plural, =1{가져올 커밋 1개} other{가져올 커밋 {count}개}}", - "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, - "gitClean": "깨끗함", - "@gitClean": {"description":"Git clean state label."}, + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "변경 사항 없음", + "@gitClean": { + "description": "Git clean state label." + }, "gitConflicts": "충돌", - "@gitConflicts": {"description":"Git conflicts group label."}, + "@gitConflicts": { + "description": "Git conflicts group label." + }, "gitChanges": "변경 사항", - "@gitChanges": {"description":"Git changes view label."}, + "@gitChanges": { + "description": "Git changes view label." + }, "gitStaged": "스테이징됨", - "@gitStaged": {"description":"Git staged changes group label."}, + "@gitStaged": { + "description": "Git staged changes group label." + }, "gitUnstaged": "스테이징되지 않음", - "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, "gitHistory": "기록", - "@gitHistory": {"description":"Git history view label."}, + "@gitHistory": { + "description": "Git history view label." + }, "gitBranches": "브랜치", - "@gitBranches": {"description":"Git branch menu label."}, + "@gitBranches": { + "description": "Git branch menu label." + }, "gitActions": "Git 작업", - "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, "gitPull": "Pull", - "@gitPull": {"description":"Git pull action label."}, + "@gitPull": { + "description": "Git pull action label." + }, "gitFetch": "Fetch", - "@gitFetch": {"description":"Git fetch action label."}, + "@gitFetch": { + "description": "Git fetch action label." + }, "gitPush": "Push", - "@gitPush": {"description":"Git push action label."}, + "@gitPush": { + "description": "Git push action label." + }, "gitCommit": "Commit", - "@gitCommit": {"description":"Git commit action label."}, + "@gitCommit": { + "description": "Git commit action label." + }, "gitSelectForCommit": "파일 스테이징", - "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, "gitRemoveFromCommit": "파일 스테이징 해제", - "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, "gitDiscard": "롤백", - "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, "gitOpenFile": "파일 열기", - "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, "gitMarkResolved": "해결됨으로 표시", - "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, "gitUntracked": "추적되지 않음", - "@gitUntracked": {"description":"Git untracked files group label."}, + "@gitUntracked": { + "description": "Git untracked files group label." + }, "gitCommitMessage": "커밋 메시지", - "@gitCommitMessage": {"description":"Commit message field label."}, + "@gitCommitMessage": { + "description": "Commit message field label." + }, "gitCommitSelectedFiles": "선택한 파일", - "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, "gitCommitNoSelectedFiles": "커밋하기 전에 하나 이상의 파일을 준비하세요.", - "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, "gitStagedFileCount": "{count, plural, =1{스테이징된 파일 1개} other{스테이징된 파일 {count}개}}", - "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitOutsideWorkspace": "작업공간 외부", - "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, "gitCommitMessageRequired": "커밋 메시지를 입력하세요.", - "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, "gitCreateBranch": "브랜치 만들기", - "@gitCreateBranch": {"description":"Git create branch action label."}, + "@gitCreateBranch": { + "description": "Git create branch action label." + }, "gitNewBranch": "새 브랜치", - "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, "gitBranchName": "브랜치 이름", - "@gitBranchName": {"description":"Branch name field label."}, + "@gitBranchName": { + "description": "Branch name field label." + }, "gitSwitchBranch": "전환", - "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, "gitNoChanges": "변경 사항 없음", - "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, "gitNoHistory": "기록 없음", - "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, "gitNoBranches": "브랜치 없음", - "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, "gitNoDiff": "표시할 diff 없음", - "@gitNoDiff": {"description":"Git diff empty state."}, + "@gitNoDiff": { + "description": "Git diff empty state." + }, "gitBinaryFile": "바이너리 파일. BusyMark는 바이너리 패치를 렌더링하지 않습니다.", - "@gitBinaryFile": {"description":"Git diff binary file message."}, + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, "gitBinaryFileInfo": "바이너리 파일({size}바이트). BusyMark는 바이너리 패치를 렌더링하지 않습니다.", - "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, "gitUnsavedChangesBanner": "저장되지 않은 편집기 변경 사항은 저장될 때까지 포함되지 않습니다.", - "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, - "gitConfirmDiscardTitle": "Git 변경사항을 삭제하시겠습니까?", - "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, + "gitConfirmDiscardTitle": "Git 변경사항을 버리시겠습니까?", + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, "gitConfirmDiscardTracked": "{count, plural, =1{선택한 추적 파일의 스테이징 및 비스테이징 변경 사항이 모두 HEAD로 복원됩니다.} other{선택한 추적 파일의 스테이징 및 비스테이징 변경 사항이 모두 HEAD로 복원됩니다.}}", - "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardUntracked": "{count, plural, =1{선택한 추적되지 않은 파일이 삭제됩니다.} other{선택한 추적되지 않은 파일이 삭제됩니다.}}", - "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardMixed": "{count, plural, =1{선택한 파일이 Git 상태에 따라 복원되거나 삭제됩니다.} other{선택한 파일이 Git 상태에 따라 복원되거나 삭제됩니다.}}", - "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmSwitchBranchTitle": "{branch}로 전환하시겠습니까?", - "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitConfirmSwitchBranchMessage": "Git에서 브랜치를 전환한 후 BusyMark가 디스크에서 작업공간을 다시 불러옵니다.", - "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, "gitConfirmPushSetUpstreamTitle": "업스트림 분기를 설정하시겠습니까?", - "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, "gitConfirmPushSetUpstreamMessage": "이 브랜치에는 업스트림이 없습니다. 원격 저장소가 정확히 하나 구성된 경우 BusyMark에서 {branch}를 푸시하고 업스트림을 설정할 수 있습니다.", - "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitProjectHistory": "프로젝트 이력", - "@gitProjectHistory": {"description":"Project history action label."}, + "@gitProjectHistory": { + "description": "Project history action label." + }, "gitFileHistory": "파일 기록", - "@gitFileHistory": {"description":"Current file history action label."}, + "@gitFileHistory": { + "description": "Current file history action label." + }, "gitFileHistoryRequiresOpenFile": "파일 기록을 사용하려면 열려 있는 Markdown 파일이 필요합니다.", - "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, "gitLoadMore": "더 로드하기", - "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, "gitChangesInCommit": "이 커밋의 변경 사항", - "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, - "gitCompareWithCurrent": "현재와 ​​비교", - "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, + "gitCompareWithCurrent": "현재 버전과 비교", + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, "gitRestoreVersion": "이 버전을 복원하세요", - "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, "gitConfirmRestoreTitle": "이 파일 버전을 복원하시겠습니까?", - "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, "gitConfirmRestoreMessage": "BusyMark는 현재 작업 트리 파일을 선택한 커밋된 버전으로 대체합니다. 복원된 파일은 스테이지되지 않은 상태로 유지됩니다.", - "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, "gitCommitActions": "커밋 작업", - "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, "gitResetCurrentBranchToHere": "현재 분기를 여기로 재설정합니다…", - "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, "gitResetCurrentBranchTitle": "{branch}을(를) {commit}(으)로 재설정하시겠습니까?", - "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitResetCurrentBranchMessage": "그러면 {branch} 분기가 {commit} 커밋으로 이동됩니다. Git이 인덱스와 작업 트리를 업데이트하는 방법을 선택하세요.", - "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitReset": "재설정", - "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, "gitResetModeSoft": "소프트", - "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, "gitResetModeSoftDescription": "브랜치만 이동합니다. 인덱스와 작업 트리는 변경하지 않습니다. 선택한 커밋과의 차이점은 스테이징된 상태로 유지됩니다.", - "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, "gitResetModeMixed": "혼합", - "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, "gitResetModeMixedDescription": "브랜치를 이동하고 인덱스를 재설정합니다. 작업 트리는 변경하지 않으며 차이점은 스테이징되지 않은 상태로 남습니다.", - "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, "gitResetModeHard": "하드", - "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, "gitResetModeHardDescription": "브랜치를 이동하고 인덱스와 작업 트리를 재설정합니다. 추적된 변경 사항은 삭제되며, 방해가 되는 추적되지 않은 파일은 삭제될 수 있습니다.", - "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, "gitResetModeKeep": "유지", - "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, "gitResetModeKeepDescription": "로컬 변경 사항을 유지하면서 분기를 이동하고 추적된 파일을 재설정합니다. 해당 변경 사항이 재설정과 충돌하면 Git이 중단됩니다.", - "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, "gitAdditionsDeletions": "+{additions} -{deletions}", - "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, "fileActions": "파일 작업", - "@fileActions": {"description":"Tooltip for a file action menu."}, + "@fileActions": { + "description": "Tooltip for a file action menu." + }, "actions": "작업", - "@actions": {"description":"Tooltip for a general action menu."}, + "@actions": { + "description": "Tooltip for a general action menu." + }, "gitStatusAdded": "추가됨", - "@gitStatusAdded": {"description":"Git file status label."}, + "@gitStatusAdded": { + "description": "Git file status label." + }, "gitStatusDeleted": "삭제됨", - "@gitStatusDeleted": {"description":"Git file status label."}, + "@gitStatusDeleted": { + "description": "Git file status label." + }, "gitStatusRenamed": "이름 변경됨", - "@gitStatusRenamed": {"description":"Git file status label."}, + "@gitStatusRenamed": { + "description": "Git file status label." + }, "gitStatusCopied": "복사됨", - "@gitStatusCopied": {"description":"Git file status label."}, + "@gitStatusCopied": { + "description": "Git file status label." + }, "gitStatusUntracked": "추적되지 않음", - "@gitStatusUntracked": {"description":"Git file status label."}, + "@gitStatusUntracked": { + "description": "Git file status label." + }, "gitStatusConflicted": "충돌함", - "@gitStatusConflicted": {"description":"Git file status label."}, + "@gitStatusConflicted": { + "description": "Git file status label." + }, "gitStatusIgnored": "무시됨", - "@gitStatusIgnored": {"description":"Git file status label."}, + "@gitStatusIgnored": { + "description": "Git file status label." + }, "gitStatusTypeChanged": "유형 변경됨", - "@gitStatusTypeChanged": {"description":"Git file status label."}, + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, "gitStatusModified": "수정됨", - "@gitStatusModified": {"description":"Git file status label."}, + "@gitStatusModified": { + "description": "Git file status label." + }, "gitStatusUnknown": "알 수 없음", - "@gitStatusUnknown": {"description":"Git file status label."}, + "@gitStatusUnknown": { + "description": "Git file status label." + }, "gitErrorUnavailable": "Git을 사용할 수 없습니다.", - "@gitErrorUnavailable": {"description":"Git error message."}, + "@gitErrorUnavailable": { + "description": "Git error message." + }, "gitErrorNotRepository": "이 작업공간은 Git 저장소가 아닙니다.", - "@gitErrorNotRepository": {"description":"Git error message."}, + "@gitErrorNotRepository": { + "description": "Git error message." + }, "gitErrorUnsafePath": "BusyMark가 안전하지 않은 Git 경로를 차단했습니다.", - "@gitErrorUnsafePath": {"description":"Git error message."}, + "@gitErrorUnsafePath": { + "description": "Git error message." + }, "gitErrorInvalidBranchName": "유효한 브랜치 이름을 입력하세요.", - "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, "gitErrorNoRemote": "Git 원격이 구성되지 않았습니다.", - "@gitErrorNoRemote": {"description":"Git error message."}, + "@gitErrorNoRemote": { + "description": "Git error message." + }, "gitErrorNoUpstream": "업스트림 분기가 구성되지 않았습니다.", - "@gitErrorNoUpstream": {"description":"Git error message."}, + "@gitErrorNoUpstream": { + "description": "Git error message." + }, "gitErrorMultipleRemotes": "여러 원격 저장소가 구성되어 있습니다. 이 BusyMark 버전 외부에서 업스트림을 선택하세요.", - "@gitErrorMultipleRemotes": {"description":"Git error message."}, - "gitErrorDirtyWorkspace": "분기를 전환하기 전에 BusyMark 편집기 변경 사항을 저장하거나 삭제하세요.", - "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, + "gitErrorDirtyWorkspace": "Git 분기를 전환하기 전에 BusyMark 편집기 변경 사항을 저장하거나 버리세요.", + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, "gitErrorResetDirtyWorkspace": "현재 브랜치를 재설정하기 전에 BusyMark 편집기 변경 사항을 저장하거나 버리세요.", - "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, "gitErrorRestoreStagedFile": "기록 버전을 복원하기 전에 이 파일을 스테이지 해제하세요.", - "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, "gitErrorResetDetachedHead": "재설정하기 전에 브랜치를 체크아웃하세요.", - "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, "gitErrorDiverged": "브랜치가 분기되었습니다. 이 BusyMark 버전 외부에서 병합 또는 리베이스를 해결하세요.", - "@gitErrorDiverged": {"description":"Git error message."}, - "gitErrorAuthorIdentity": "Git을 커밋하려면 작성자 이름과 이메일 주소가 필요합니다.", - "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "@gitErrorDiverged": { + "description": "Git error message." + }, + "gitErrorAuthorIdentity": "커밋하기 전에 Git에 작성자 이름과 이메일 주소가 필요합니다.", + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, "gitAuthorIdentityTitle": "Git 작성자 ID", - "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, "gitAuthorIdentityMessage": "Git이 커밋 시 기록해야 하는 ID를 입력하세요. BusyMark는 이를 저장하고 이 커밋을 다시 시도합니다.", - "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, "gitAuthorName": "이름", - "@gitAuthorName": {"description":"Git commit author name field label."}, + "@gitAuthorName": { + "description": "Git commit author name field label." + }, "gitAuthorEmail": "이메일", - "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, "gitAuthorIdentityGlobal": "모든 저장소에 사용", - "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, "gitAuthorIdentityGlobalDescription": "Snap으로 설치하면 BusyMark에서 열린 저장소에 적용됩니다.", - "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, "gitSaveIdentityAndCommit": "ID 저장 및 커밋", - "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, "gitErrorAuthentication": "Git 인증에 실패했습니다.", - "@gitErrorAuthentication": {"description":"Git error message."}, + "@gitErrorAuthentication": { + "description": "Git error message." + }, "gitErrorNetwork": "Git 네트워크 작업이 실패했습니다.", - "@gitErrorNetwork": {"description":"Git error message."}, + "@gitErrorNetwork": { + "description": "Git error message." + }, "gitErrorConflict": "Git이 해결되지 않은 충돌을 보고했습니다.", - "@gitErrorConflict": {"description":"Git error message."}, + "@gitErrorConflict": { + "description": "Git error message." + }, "gitErrorCommandFailed": "Git 명령이 실패했습니다.", - "@gitErrorCommandFailed": {"description":"Git error message."}, + "@gitErrorCommandFailed": { + "description": "Git error message." + }, "markdownAndHtml": "Markdown 및 HTML", - "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdown 블록", - "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Markdown 소스 및 미리보기에서 블록 구조가 지원됩니다.", - "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "인라인 Markdown", - "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "단락, 목록 항목 및 표 셀 내부에 나타날 수 있는 서식입니다.", - "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "원시 HTML 블록", - "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "BusyMark 미리보기 위젯을 통해 렌더링되는 안전한 블록 수준 HTML 태그입니다.", - "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "원시 HTML 인라인 태그", - "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "리터럴 태그를 표시하지 않고 렌더링되는 안전한 인라인 HTML 태그입니다.", - "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "안전 규칙", - "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "원시 HTML은 미리 보기 렌더링 전에 구문 분석되고 정리됩니다.", - "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "제목", - "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "단락", - "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "목록", - "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "컨테이너", - "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "텍스트 블록", - "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "그림 및 이미지", - "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "미리 서식이 지정된 코드", - "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "접기 블록", - "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "설명 목록", - "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "서식 태그", - "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "인라인 코드 태그", - "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "의미 있는 텍스트 태그", - "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "정리된 미리 보기", - "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "허용된 HTML은 브라우저에서 렌더링되지 않고 BusyMark 미리보기 블록으로 변환됩니다.", - "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "소스 보존", - "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "편집되지 않은 원시 HTML은 소스 텍스트와 동일하게 다시 저장됩니다.", - "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "HTML 내부의 Markdown", - "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "원시 HTML 내부의 마크다운 마커는 리터럴 텍스트로 렌더링됩니다.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "차단된 활성 콘텐츠", - "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "스크립트, 스타일, 프레임, 양식, SVG, MathML, 이벤트 및 안전하지 않은 속성이 차단됩니다.", - "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "안전한 URL만 허용", - "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "링크에는 http, https, mailto, tel, 상대 URL 및 프래그먼트 URL만 허용됩니다. 안전하지 않은 스킴은 차단됩니다.", - "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "exportAsPdf": "PDF로 내보내기", - "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, "pdfExportDescription": "세련된 독립형 PDF를 위한 페이지 레이아웃을 선택하세요.", - "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "내보내기 중에는 원격 이미지가 다운로드되지 않습니다. 가능한 경우 로컬 이미지가 포함됩니다.", - "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "페이지 크기", - "@pdfPageSize": {"description":"PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "Letter", - "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "방향", - "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "세로", - "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "가로", - "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "여백", - "@pdfMargins": {"description":"PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "좁게", - "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "보통", - "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "넓게", - "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "페이지 번호 포함", - "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "내보내기", - "@export": {"description":"Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "PDF 내보내기 중…", - "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "PDF 문서", - "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "{fileName}을(를) 내보냈습니다.", - "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, - "pdfExportedWithWarnings": "{count}개의 경고와 함께 {fileName}을 내보냈습니다.", - "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName}을(를) {count, plural, =1{경고 1개} other{경고 {count}개}}와 함께 내보냈습니다.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "PDF 내보내기 구성 요소가 누락되었습니다. BusyMark를 다시 설치하고 다시 시도하세요.", - "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "PDF 내보내기가 너무 오래 걸려 중지되었습니다.", - "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark가 이 문서를 PDF로 내보낼 수 없습니다.", - "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "렌더링 중…", - "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, "visualizationStale": "마지막으로 유효한 렌더링 표시 중", - "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, "visualizationShowSource": "소스 표시", - "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, "visualizationShowRender": "렌더링 표시", - "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, "visualizationFitWidth": "너비에 맞추기", - "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, "visualizationSaveImage": "이미지 저장", - "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, "visualizationCopyImage": "이미지 복사", - "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, "visualizationImageCopied": "이미지가 복사됨", - "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, "visualizationOpenApiReference": "OpenAPI 참조 열기", - "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, "visualizationValid": "유효함", - "@visualizationValid": {"description":"OpenAPI validation success state."}, + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, "visualizationInvalid": "유효하지 않음", - "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, "visualizationServers": "서버", - "@visualizationServers": {"description":"OpenAPI server count label."}, + "@visualizationServers": { + "description": "OpenAPI server count label." + }, "visualizationPaths": "경로", - "@visualizationPaths": {"description":"OpenAPI path count label."}, + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, "visualizationOperations": "작업", - "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, "visualizationTags": "태그", - "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, "visualizationNoOperations": "일치하는 작업 없음", - "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, "visualizationSearchOperations": "작업 검색", - "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, "visualizationRenderFailed": "이 시각화를 렌더링할 수 없습니다.", - "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, "visualizationRetry": "다시 시도", - "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, "visualizationSaved": "{fileName}을(를) 저장했습니다.", - "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "shortcutExportPdfDescription": "활성 문서 또는 Writerside 모듈을 PDF로 내보냅니다.", - "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "instances": "인스턴스", - "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, "newInstance": "새 인스턴스", - "@newInstance": {"description":"Action that creates a Writerside instance."}, + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, "newTocLibrary": "새 목차 라이브러리", - "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, "editInstance": "인스턴스 편집", - "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, "openTocFile": "목차 파일 열기", - "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, "createInstance": "인스턴스 만들기", - "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, "createTocLibrary": "목차 라이브러리 만들기", - "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, "instanceContent": "콘텐츠", - "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, "instanceContentSource": "생성 원본", - "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, "emptyInstance": "빈 인스턴스", - "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, "markdownFiles": "로컬 Markdown 파일", - "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, "chooseMarkdownFolder": "Markdown 폴더 선택", - "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, "errorWritersideInstanceImportSourceRequired": "Markdown 파일이 포함된 폴더를 선택합니다.", - "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, "instanceAppearance": "화면 모양", - "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, "instanceColor": "아이콘 색상", - "@instanceColor": {"description":"Writerside instance icon-color field."}, + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, "instanceVersion": "버전", - "@instanceVersion": {"description":"Writerside instance version field."}, + "@instanceVersion": { + "description": "Writerside instance version field." + }, "instanceVersionInherited": "이 필드가 비어 있으면 프로젝트 버전은 {version}입니다.", - "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, "instanceWebPath": "웹 경로", - "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, "instanceStatus": "상태", - "@instanceStatus": {"description":"Writerside instance status field."}, + "@instanceStatus": { + "description": "Writerside instance status field." + }, "instanceStatusRelease": "릴리스", - "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, "instanceStatusEap": "얼리 액세스", - "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, "instanceStatusDeprecated": "더 이상 사용되지 않음", - "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, "allowSearchEngineIndexing": "검색 엔진 색인 생성 허용", - "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, "allowSearchEngineIndexingDescription": "외부 검색 엔진이 이 출력을 색인화하도록 허용합니다.", - "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, "offlineArtifact": "오프라인 아티팩트", - "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, "offlineArtifactDescription": "빌드된 문서가 자체적으로 포함되도록 리소스를 번들로 묶습니다.", - "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, "instanceOutputSettings": "출력 설정", - "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, "markdownImportSource": "Markdown 소스", - "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, "markdownImportFiles": "Markdown 파일", - "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, "selectNone": "선택 안 함", - "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, "markdownFilesFound": "{count}개의 마크다운 파일을 찾았습니다.", - "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noMarkdownFilesFound": "이 디렉터리에서 Markdown 파일을 찾을 수 없습니다.", - "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, "copyReferencedMedia": "참조된 미디어 복사", - "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, "copyReferencedMediaDescription": "상대 경로를 유지하면서 선택한 파일이 참조하는 로컬 이미지와 비디오를 복사합니다.", - "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, "instanceIdRenameWarningTitle": "인스턴스 ID의 이름을 바꾸시겠습니까?", - "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, "instanceIdRenameWarning": "BusyMark는 .tree 파일의 이름을 바꾸고 Writerside 프로젝트 참조를 \"{oldId}\"에서 \"{newId}\"로 업데이트합니다. 게시 스크립트는 변경되지 않으며 별도로 업데이트해야 합니다.", - "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, "renameAndUpdateReferences": "이름 변경 및 참조 업데이트", - "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, "tocLibraryDescription": "TOC 라이브러리는 재사용 가능한 섹션을 저장하고 자체 출력을 생성하지 않습니다.", - "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, "defaultTocLibraryName": "공유 목차", - "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, "instanceColorAutomatic": "자동", - "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, "instanceColorBlue": "파란색", - "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, "instanceColorGreen": "녹색", - "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, "instanceColorOrange": "주황색", - "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, "instanceColorPurple": "보라색", - "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, "instanceColorRed": "빨간색", - "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, "instanceColorTeal": "청록색", - "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, "instanceColorYellow": "노란색", - "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, "errorWritersideInstanceNameRequired": "인스턴스 이름을 입력하세요.", - "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, "errorWritersideInstanceIdExists": "ID가 \"{id}\"인 인스턴스가 이미 존재합니다.", - "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "errorWritersideInstanceTreeExists": "인스턴스 트리가 이미 존재합니다: {path}", - "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSourceMissing": "Markdown 소스 디렉터리가 존재하지 않습니다: {path}", - "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSelectionRequired": "가져올 Markdown 파일을 하나 이상 선택하세요.", - "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, "errorWritersideInstanceImportFileInvalid": "선택한 소스: {path} 내에서 읽을 수 있는 Markdown 파일이 아닙니다.", - "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportTargetExists": "가져오기를 하면 기존 프로젝트 파일을 덮어쓰게 됩니다: {path}", - "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceFilesChanged": "인스턴스 파일이 디스크에서 변경되었습니다. 검토한 후 다시 시도하세요.", - "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, "errorWritersideInstanceRollbackFailed": "BusyMark가 인스턴스 변경 사항을 완전히 롤백할 수 없습니다. 계속하기 전에 다음 파일을 검토하세요. {paths}", - "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorWritersideInstanceLibraryImport": "TOC 라이브러리는 Markdown 항목을 가져올 수 없습니다.", - "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, "errorWritersideInstanceWebPathInvalid": "웹 경로는 한 줄이어야 합니다.", - "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, "errorWritersideInstanceConfigurationInvalid": "Writerside 인스턴스 구성이 잘못되었습니다. 진단을 수정하고 다시 시도하십시오.", - "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, "errorWritersideInstanceTemporaryFile": "BusyMark가 인스턴스 변경 사항을 안전하게 스테이징할 수 없습니다.", - "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, - "diagnosticWritersideTreeInvalidStatus": "알 수 없는 인스턴스 상태 “{status}”. 릴리스, eap 또는 더 이상 사용되지 않음을 사용하십시오.", - "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, + "diagnosticWritersideTreeInvalidStatus": "알 수 없는 인스턴스 상태 “{status}”. release, eap 또는 deprecated를 사용하세요.", + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, "diagnosticWritersideDuplicateInstanceId": "인스턴스 ID \"{id}\"는 둘 이상의 트리 파일에서 사용됩니다.", - "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml에는 루트 요소가 있어야 합니다.", - "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, - "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} 값 \"{value}\"은(는) true 또는 false여야 합니다.", - "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "설정 값 {name} “{value}”는 true 또는 false 여야 합니다.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfileMissingInstance": " 요소는 인스턴스 ID를 지정해야 합니다.", - "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, "diagnosticWritersideTreeInvalidInclude": "트리 는 from과 element-id를 모두 지정해야 합니다.", - "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, "diagnosticWritersideTreeMissingSnippetId": "트리 은 ID를 지정해야 합니다.", - "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, "diagnosticWritersideTreeInvalidCrossInstanceReference": "인스턴스 간 TOC 참조는 ref와 in을 모두 지정해야 합니다.", - "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, "diagnosticWritersideTreeConflictingTargets": "목차 요소는 둘 이상의 토픽, 참조, 링크 또는 리디렉션을 대상으로 할 수 없습니다.", - "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, "diagnosticWritersideTreeDuplicateElementId": "트리 요소 ID “{id}”이(가) 두 번 이상 선언되었습니다.", - "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideInstanceGroupsInvalidRoot": "인스턴스 그룹 파일에는 루트 요소가 있어야 합니다.", - "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, "diagnosticWritersideInstanceGroupInvalid": "인스턴스 그룹은 비어 있지 않은 ID와 인스턴스 목록을 지정해야 합니다.", - "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, "diagnosticWritersideInstanceGroupDuplicateId": "인스턴스 그룹 ID “{id}”이(가) 두 번 이상 선언되었습니다.", - "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideExternalTreeInclude": "목차 포함 “{source}#{id}”는 외부 모듈 “{origin}”에 속하며 이 작업공간에서 확장할 수 없습니다.", - "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, "diagnosticWritersideTreeIncludeElementMissing": "등록된 트리 \"{source}\"에 트리 요소 \"{id}\"이(가) 존재하지 않습니다.", - "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeCircularInclude": "트리 포함 “{source}#{id}”는 주기를 생성합니다.", - "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideUnknownInstanceGroup": "인스턴스 조건이 알 수 없는 그룹 \"@{group}\"을 참조합니다.", - "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceInstanceMissing": "인스턴스 간 참조는 알 수 없는 인스턴스 “{instance}”를 대상으로 합니다.", - "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceTopicMissing": "\"{topic}\" 토픽이 참조된 인스턴스 \"{instance}\"에 없습니다.", - "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, "download": "다운로드", - "@download": {"description":"Button label that downloads a required component."}, + "@download": { + "description": "Button label that downloads a required component." + }, "exportWritersideAsPdf": "Writerside를 PDF로 내보내기", - "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, "writersidePdfContent": "콘텐츠 내보내기", - "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, "writersidePdfPage": "페이지", - "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, "exportingWritersidePdf": "Writerside PDF를 내보내는 중…", - "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, "ai": "AI", - "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, "aiLocalOllama": "로컬 Ollama", - "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, "aiDisabled": "사용 안 함", - "@aiDisabled": {"description":"AI provider option that disables AI features."}, - "aiLocalOnlyDescription": "AI 편집은 명시적입니다. BusyMark는 선택한 공급자에 대해 표시된 컨텍스트만 보내고 검토 없이 제안을 적용하지 않습니다.", - "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, "aiProvider": "AI 제공업체", - "@aiProvider": {"description":"Label for an AI provider selection."}, + "@aiProvider": { + "description": "Label for an AI provider selection." + }, "aiDefaultProvider": "기본 공급자", - "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, "aiConfigureProvider": "공급자 구성", - "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, "aiChooseProvider": "AI 제공업체 선택", - "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, "aiOllamaEndpoint": "Ollama 엔드포인트", - "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, "aiOllamaModel": "Ollama 모델", - "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, "aiTestConnection": "테스트 연결", - "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, "aiTestingConnection": "테스트 중…", - "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, "aiConnectionReady": "연결되었습니다. 설치된 모델 {count}개를 찾았습니다.", - "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiNoModels": "선택한 모델이 없습니다.", - "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, "aiConnectionFailed": "BusyMark가 AI 텍스트 생성을 확인할 수 없습니다.", - "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, "aiConfigureFirst": "AI 제공자를 활성화하고 설정 → AI에서 모델을 확인하세요.", - "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, "aiEditWithAi": "AI로 편집", "aiRefineWithAi": "AI로 개선", - "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, "aiInstruction": "지침", "aiChangeTarget": "무엇이 바뀔 수 있나요?", "aiSharedContext": "AI와 컨텍스트 공유", @@ -1786,112 +4334,283 @@ "aiTargetInsertAfterBlock": "현재 블록 뒤에 삽입", "aiTargetCurrentBlock": "현재 블록", "aiTargetCurrentSection": "현재 섹션", - "aiTargetCompleteDocument": "완전한 문서", + "aiTargetCompleteDocument": "전체 문서", "aiContextNone": "문서 컨텍스트 없음", "aiContextSelection": "선택한 콘텐츠", "aiContextCurrentBlock": "현재 블록", "aiContextCurrentSection": "현재 섹션", - "aiContextCompleteDocument": "완전한 문서", + "aiContextCompleteDocument": "전체 문서", "aiGenerating": "제안 생성 중…", - "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, "aiProposal": "AI 제안", - "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, "aiGenerateProposal": "제안 생성", - "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, "aiContextDisclosure": "선택한 공급자는 표시된 컨텍스트에서 {count}자를 수신합니다.", - "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiOriginal": "원본", - "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, "aiSuggested": "제안", - "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, "aiApplyProposal": "제안 적용", - "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, "aiTokenUsage": "{input} 입력 토큰 · {output} 출력 토큰", - "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiStaleProposal": "이 제안이 생성되는 동안 문서가 변경되었습니다. 작업을 다시 실행하십시오.", - "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, - "gitAiStagedChangesChanged": "이 커밋 메시지가 생성되는 동안 단계적 변경 사항이 변경되었습니다. 작업을 다시 실행하십시오.", - "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, + "gitAiStagedChangesChanged": "스테이징된 변경 사항이 이 커밋 메시지 생성 중에 변경되었습니다. 작업을 다시 실행하세요.", + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, "aiViewContext": "전송된 컨텍스트 보기", - "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, "aiReviewExactContent": "정확한 내용을 검토하세요", - "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, "aiContentToChange": "변경할 내용", - "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, "aiContentSentToAi": "AI로 전송된 콘텐츠", - "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, "aiApiKey": "API 키", - "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, "aiApiKeyStoredHint": "키는 시스템 자격 증명 저장소에 저장됩니다.", - "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, "aiApiKeyEnterHint": "공급자 API 키를 입력하세요.", - "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, "aiReplaceApiKey": "API 키 교체", - "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, "aiSaveApiKey": "API 키를 안전하게 저장", - "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, "aiRemoveApiKey": "저장된 API 키 제거", - "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, "aiCredentialSaved": "시스템 자격 증명 저장소에 저장된 API 키입니다.", - "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, "aiCredentialRemoved": "저장된 API 키가 삭제되었습니다.", - "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, "aiModelRouting": "모델 라우팅", - "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, "aiAutomaticRouting": "작업별 자동", - "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, "aiFixedModelRouting": "선택한 모델 사용", - "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, "aiPreferredModel": "선호하는 모델", - "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, "aiModel": "모델", - "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, "aiUsageThisMonth": "{requests} 요청 · {input} 입력 토큰 · {output} 출력 토큰", - "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiCloudConsentTitle": "{provider}에 콘텐츠를 보내시겠습니까?", - "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentEnable": "{provider} 활성화", - "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentMessage": "각 AI 검토 대화 상자에 표시된 콘텐츠만 전송됩니다. 요청은 상태 비저장이고 제안에는 검토가 필요하며 API 키는 Linux 시스템 자격 증명 저장소에 저장됩니다.", - "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, "aiCloudConsentRequired": "먼저 설정 → AI에서 {provider} 데이터 공유를 확인하세요.", - "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiGenerationVerified": "{model}로 생성을 확인했습니다. 호환 가능한 모델 {count}개를 사용할 수 있습니다.", - "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "aiColdStartObserved": "로컬 모델 콜드 스타트가 관찰되었습니다.", - "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, "aiNoCompatibleModels": "호환 가능한 텍스트 생성 모델이 없습니다.", - "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, "aiEnableProvider": "먼저 AI 제공자를 활성화하세요.", - "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, "aiDraftCommitMessage": "초안 커밋 메시지", - "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, "aiDrafting": "작성 중…", - "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, "aiDraftWithAi": "AI를 활용한 초안", - "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, "generateOrUpdateMarkdownToc": "목차 생성/업데이트", - "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, "markdownTocTitle": "목차", - "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, "markdownTocUpdated": "{count}개의 항목으로 목차가 업데이트되었습니다.", - "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "markdownTocNoHeadings": "목차를 생성하기 전에 하나 이상의 섹션 제목을 추가하세요.", - "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, "markdownTocMalformedMarkers": "BusyMark 목차 표시가 없거나 중복되었거나 순서가 잘못되었습니다.", - "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, "diagnosticMarkdownHeadingSkippedLevel": "제목 수준 {level}은(는) {previousLevel} 수준을 따릅니다. 섹션 중첩을 검토하세요.", - "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, - "diagnosticMarkdownLinkEmptyText": "링크 텍스트가 비어 있습니다. 목적을 설명하는 접근 가능한 이름을 제공합니다.", - "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, + "diagnosticMarkdownLinkEmptyText": "링크 텍스트가 비어 있습니다. 링크의 목적을 설명하는 접근 가능한 이름을 제공하세요.", + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, "diagnosticMarkdownLinkReviewText": "링크 텍스트 \"{text}\"가 문맥상 목적을 설명하는지 검토하세요.", - "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, "diagnosticMarkdownTableEmptyHeader": "테이블 머리글 셀은 해당 열을 식별해야 합니다. 각각의 빈 헤더를 완성하세요.", - "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, "mathRenderFailed": "수학적 표현을 렌더링할 수 없습니다.", - "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, "inlineMath": "인라인 수학", - "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."}, + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, "displayMath": "수학 표시", - "@displayMath": {"description":"Editor action that inserts a display mathematical expression."} + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + }, + "aiExplicitEditingDescription": "AI 편집은 명시적입니다. BusyMark는 선택한 공급자에 대해 표시된 컨텍스트만 보내고 검토 없이 제안을 적용하지 않습니다.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_nb.arb b/lib/l10n/app_nb.arb index 498ec7ed..6116c47e 100644 --- a/lib/l10n/app_nb.arb +++ b/lib/l10n/app_nb.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Slett det valgte elementet i Filer, eller fjern det valgte emnet fra innholdsfortegnelsen", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Generelt", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Sett inn innrykk", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Sett inn innrykk ved markøren", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Reduser innrykk i kilden", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Fjern ett innrykksnivå i kildemodus", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Lukk søk eller fjern blokkmarkering", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Personvern", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Last inn eksterne bilder", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Tillat at bilder i Markdown-forhåndsvisningen og redigereren lastes inn fra HTTP- og HTTPS-adresser.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Tøm tillatelser for eksterne bilder", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Glem arbeidsområder som fikk tillatelse til å laste inn eksterne bilder.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Tøm klarerte Git-arbeidsområder", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Spør før Git-funksjoner aktiveres for tidligere klarerte arbeidsområder.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Vindu", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Åpne forrige arbeidsområde ved oppstart", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Åpne arbeidsområdet og fanene fra forrige økt når BusyMark starter.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Bekreft lukking ved ulagrede endringer", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -913,7 +944,9 @@ "description": "Text field label for raw HTML source." }, "htmlContentDefault": "HTML-innhold", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "thematicBreak": "Tematisk skille", "@thematicBreak": { "description": "Thematic break command label." @@ -1058,11 +1091,17 @@ "description": "Image alt text field label." }, "editorPlaceholderText": "tekst", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "kode", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "alternativ tekst", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Beskriv bildet", "@describeTheImage": { "description": "Image alt text hint." @@ -1093,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Eksternt bilde blokkert", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Velg om BusyMark kan laste inn eksterne bilder.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Eksterne bilder er blokkert", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Dette dokumentet refererer til bilder på Internett. Når de lastes inn, kan nettverksinformasjon bli avslørt for bildeverten.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Last inn for dette arbeidsområdet", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Last alltid inn eksterne bilder", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Skjul sidepanel", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1344,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Forrige treff", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Neste treff", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Skill mellom store og små bokstaver", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Hele ord", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Regulært uttrykk", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Ugyldig regulært uttrykk", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Stor fil: utheving og folding er satt på pause", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Ingenting å lese", "admonition": "Merknadsblokk", "quote": "Sitat", @@ -2243,15 +2307,15 @@ "gitBinaryFile": "Binærfil. BusyMark viser ikke binære patcher.", "gitUnsavedChangesBanner": "Ulagrede endringer i redigereren tas ikke med før de er lagret.", "gitConfirmDiscardTitle": "Forkaste Git-endringer?", - "gitConfirmDiscardTracked": "{count, plural, =1{Den valgte sporede filen gjenopprettes fra Git.} other{De valgte sporede filene gjenopprettes fra Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Alle staged- og ikke-staged-endringer i den valgte sporede filen vil bli gjenopprettet til HEAD.} other{Alle staged- og ikke-staged-endringer i de valgte sporede filene vil bli gjenopprettet til HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, =1{Den valgte usporede filen slettes.} other{De valgte usporede filene slettes.}}", "gitConfirmDiscardMixed": "{count, plural, =1{Den valgte filen gjenopprettes eller slettes ut fra Git-statusen.} other{De valgte filene gjenopprettes eller slettes ut fra Git-statusen.}}", "gitConfirmSwitchBranchTitle": "Bytt til {branch}?", "gitConfirmSwitchBranchMessage": "BusyMark laster arbeidsområdet på nytt fra disken etter at Git har byttet gren.", "gitConfirmPushSetUpstreamTitle": "Angi upstream-gren?", "gitConfirmPushSetUpstreamMessage": "Denne grenen har ingen upstream. BusyMark kan pushe {branch} og angi upstream når nøyaktig én remote er konfigurert.", - "gitProjectHistory": "Prosjekt", - "gitFileHistory": "Gjeldende fil", + "gitProjectHistory": "Prosjekthistorie", + "gitFileHistory": "Filhistorie", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Filhandlinger", "actions": "Handlinger", @@ -2286,73 +2350,138 @@ "gitErrorNetwork": "Git-nettverksoperasjonen mislyktes.", "gitErrorConflict": "Git rapporterte uløste konflikter.", "gitErrorCommandFailed": "Git-kommandoen mislyktes.", - "markdownAndHtml": "Markdown og HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdown-blokker", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Blokkstrukturer som støttes i Markdown-kilde og forhåndsvisning.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Inline-Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Formatering i avsnitt, listeelementer og tabellceller.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Rå HTML-blokker", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Trygge HTML-blokktagger rendres med BusyMark-forhåndsvisning.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Rå HTML-inline-tagger", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Trygge inline-HTML-tagger rendres uten å vise taggene bokstavelig.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Sikkerhetsregler", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Rå HTML analyseres og renses før forhåndsvisning.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Overskrifter", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Avsnitt", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Lister", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Beholdere", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Tekstblokker", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Figurer og bilder", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Forhåndsformatert kode", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Utvidbare blokker", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Beskrivelseslister", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Formateringstagger", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Inline-kodetagger", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Semantiske teksttagger", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Renset forhåndsvisning", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Tillatt HTML konverteres til BusyMark-forhåndsvisningsblokker og rendres ikke i en nettleser.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Kilden bevares", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Uendret rå HTML lagres nøyaktig som kildetekst.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown inni HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-markører inni rå HTML vises som bokstavelig tekst.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Blokkert aktivt innhold", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Skript, stiler, rammer, skjemaer, SVG, MathML, hendelser og usikre attributter blokkeres.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Bare trygge URL-er", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Lenker tillater http, https, mailto, tel, relative URL-er og fragmenter; usikre URI-skjemaer blokkeres.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Legg til i Git", "delete": "Slett", "newFile": "Ny fil", @@ -2370,101 +2499,294 @@ "errorFileOperationOutsideRoot": "Filoperasjonen må holde seg i arbeidsområdet.", "errorFileOperationRoot": "Roten til arbeidsområdet kan ikke endres fra filtreet.", "safeDeleteTopicFile": "Slett emnefilen trygt …", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Fjern element fra innholdsfortegnelsen", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Se gjennom bruk", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Slett emnefil", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Fjern", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Fjern «{topic}» fra den valgte instansen. Emnefilen beholdes.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Slett «{topic}», og oppdater referansene til emnet trygt i hele dette Writerside-prosjektet.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 underemne flyttes ett nivå opp.} other{{count} underemner flyttes ett nivå opp.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Dette emnet brukes som startside for en instans. Se gjennom bruken, og angi en annen startside før du fortsetter.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Bruk ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Fant ingen referanser som ville slutte å fungere.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark fant følgende referanser til dette emnet.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Elementer i innholdsfortegnelsen", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Startsider", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Emnelenker", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Inkluderinger", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, =1{1 bruk} other{{count} bruk}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Refaktoreringsalternativer", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Oppdater bruk automatisk", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Fjern referanser i innholdsfortegnelsen og inkluderinger, og behold lenketeksten.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Noe bruk må endres manuelt før denne refaktoreringen.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Omdiriger til", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Ikke omdiriger den gamle publiserte siden.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Mål for omdirigering", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Se gjennom og oppdater gjenværende bruk før du fortsetter, eller slå på automatiske oppdateringer når de er tilgjengelige.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Bruk av «{topic}»", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Fant ingen bruk.", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "utenfor den valgte instansen", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Utfør refaktorering", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Emnefilen brukes ikke lenger", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Behold emnefilen", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "«{topic}» brukes ikke lenger noe sted i dette Writerside-prosjektet. Slett filen, eller behold den for bruk i en annen instans.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Bruk trygg sletting for Writerside-emnefiler.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "Kunne ikke fullføre søket etter emnebruk. Ingen filer ble endret.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Noen forekomster av emnet krever fortsatt oppfølging. Se gjennom dem før du fortsetter.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Det valgte målet for videresending er ikke lenger gyldig. Velg det på nytt.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Fjerningen av emnet kunne ikke angres fullstendig. Se gjennom disse banene før du fortsetter: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "Eksporter som PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Velg sideoppsett for en gjennomarbeidet, selvstendig PDF.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "Eksterne bilder lastes ikke ned under eksport. Lokale bilder tas med når de er tilgjengelige.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Sidestørrelse", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "US Letter", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Retning", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Stående", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Liggende", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Marger", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Smale", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Normale", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Brede", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Ta med sidetall", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Eksporter", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "Eksporterer PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "PDF-dokument", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "{fileName} ble eksportert.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} ble eksportert. Bilder som ikke kunne tas med: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "PDF-eksportkomponenten mangler. Installer BusyMark på nytt og prøv igjen.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "PDF-eksporten tok for lang tid og ble stoppet.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark kunne ikke eksportere dette dokumentet som PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "Eksporter som PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Velg sideoppsett for en gjennomarbeidet, selvstendig PDF.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Eksterne bilder lastes ikke ned under eksport. Lokale bilder tas med når de er tilgjengelige.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Sidestørrelse", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "US Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Retning", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Stående", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Liggende", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Marger", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Smale", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Normale", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Brede", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Ta med sidetall", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Eksporter", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "Eksporterer PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "PDF-dokument", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} ble eksportert.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} ble eksportert med {count, plural, =1{1 advarsel} other{{count} advarsler}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "PDF-eksportkomponenten mangler. Installer BusyMark på nytt og prøv igjen.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "PDF-eksporten tok for lang tid og ble stoppet.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark kunne ikke eksportere dette dokumentet som PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Gjengir…", "visualizationStale": "Viser siste gyldige gjengivelse", "visualizationShowSource": "Vis kilde", @@ -2485,7 +2807,10 @@ "visualizationRenderFailed": "Denne visualiseringen kunne ikke gjengis.", "visualizationRetry": "Prøv igjen", "visualizationSaved": "Lagret {fileName}", - "shortcutExportPdfDescription": "Eksporter det aktive dokumentet eller Writerside-modulen som PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "Eksporter det aktive dokumentet eller Writerside-modulen som PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Indeksert", "gitUnstaged": "Ikke indeksert", "gitFetch": "Hent", @@ -2602,7 +2927,6 @@ "ai": "KI", "aiLocalOllama": "Lokal Ollama", "aiDisabled": "Deaktivert", - "aiLocalOnlyDescription": "KI-redigering startes bare eksplisitt. BusyMark sender kun den viste konteksten til den valgte leverandøren og bruker aldri et forslag uten gjennomgang.", "aiProvider": "KI-leverandør", "aiDefaultProvider": "Standardleverandør", "aiConfigureProvider": "Konfigurer leverandør", @@ -2716,14 +3040,18 @@ "reloadFromDisk": "Last inn fra disk på nytt", "keepMine": "Behold min versjon", "saveAs": "Lagre som", - "unsavedChangesMultipleMessage": "{count} dokumenter har ulagrede endringer. Lagre dem før du fortsetter?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 dokument har ulagrede endringer. Lagre det før du fortsetter.} other{{count} dokumenter har ulagrede endringer. Lagre dem før du fortsetter.}}", "workspaceReplaceIssuePartialConflict": "Tilbakerullingen ble stoppet fordi filen ble endret samtidig. Noen erstatninger kan fortsatt være utført; forskjøvet innhold ble bevart på banen nedenfor.", "workspaceReplaceIssueApplyFailed": "Ingen erstatninger ble utført fordi det gjennomgåtte settet ikke kunne lagres på en trygg måte.", - "workspaceRecoveryRestored": "{count} ulagrede dokumenter ble gjenopprettet. Se gjennom hvert gjenopprettet dokument før du fortsetter.", - "workspaceRecoveryDamaged": "{count} skadede gjenopprettingsoppføringer kunne ikke gjenopprettes. Gyldige gjenopprettede dokumenter er fortsatt tilgjengelige.", + "workspaceRecoveryRestored": "{count, plural, =1{Gjenopprettet 1 ulagret dokument. Gå gjennom det før du lagrer eller forkaster det.} other{Gjenopprettet {count} ulagrede dokumenter. Gå gjennom hvert ett før du lagrer eller forkaster det.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Kunne ikke gjenopprette 1 skadet gjenopprettingspost. Den opprinnelige gjenopprettingsfilen er bevart for gjennomgang.} other{{count} skadede gjenopprettingsposter kunne ikke gjenopprettes. Gyldige gjenopprettingsposter er fortsatt tilgjengelige.}}", "recoveredDocumentReview": "Ulagret innhold for {fileName} ble gjenopprettet. Se gjennom det, og lagre, lagre som eller forkast det.", "commandUnavailableInContext": "Denne kommandoen er ikke tilgjengelig i gjeldende kontekst.", "mathRenderFailed": "Det matematiske uttrykket kunne ikke gjengis.", "inlineMath": "Integrert matematikk", - "displayMath": "Matematikkblokk" + "displayMath": "Matematikkblokk", + "aiExplicitEditingDescription": "KI-redigering startes bare eksplisitt. BusyMark sender kun den viste konteksten til den valgte leverandøren og bruker aldri et forslag uten gjennomgang.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 208780a8..77b92956 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -1,515 +1,1050 @@ { "@@locale": "nl", "appTitle": "BusyMark", - "@appTitle": {"description":"Application name."}, + "@appTitle": { + "description": "Application name." + }, "appSubtitle": "Editor voor Markdown-bestanden en Writerside-compatibele documentatieprojecten.", - "@appSubtitle": {"description":"Short application description."}, + "@appSubtitle": { + "description": "Short application description." + }, "aboutBusyMark": "Over BusyMark", - "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, "aboutTagline": "Markdown en Writerside-editor", - "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, "aboutLicenseLabel": "Licentie", - "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, "aboutLicenseName": "Apache License 2.0", - "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, "aboutWebsite": "Website", - "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, "aboutSourceCode": "Broncode", - "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, "reportIssue": "Rapporteer een probleem", - "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, "feedbackCategory": "Categorie", - "@feedbackCategory": {"description":"Feedback category field label."}, + "@feedbackCategory": { + "description": "Feedback category field label." + }, "feedbackChooseCategory": "Kies een categorie", - "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, "feedbackCategoryProblem": "Probleem of bug", - "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, "feedbackCategoryFeature": "Functieverzoek", - "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, "feedbackCategoryPrivacySecurity": "Privacy- of beveiligingsproblemen", - "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, "feedbackCategoryUsability": "Bezorgdheid over bruikbaarheid", - "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, "feedbackCategoryOther": "Overig", - "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, "feedbackSubject": "Onderwerp", - "@feedbackSubject": {"description":"Feedback subject field label."}, + "@feedbackSubject": { + "description": "Feedback subject field label." + }, "feedbackMessage": "Gedetailleerd bericht", - "@feedbackMessage": {"description":"Detailed feedback message field label."}, - "feedbackReplyEmail": "E-mail beantwoorden (optioneel)", - "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "E-mailadres voor antwoord (optioneel)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, "feedbackIncludeTechnicalDetails": "Voeg technische details toe", - "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, "feedbackTechnicalDetailsDisclosure": "Indien ingeschakeld, voegt dit alleen uw Linux-besturingssysteemversie en de landinstelling van de BusyMark-toepassing toe. Er zijn geen logbestanden, bestanden, accountgegevens of andere diagnostische gegevens bijgevoegd.", - "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, "feedbackSubmit": "Indienen", - "@feedbackSubmit": {"description":"Button that submits feedback."}, + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, "feedbackSubmitting": "Verzenden…", - "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, "feedbackCategoryRequired": "Kies een categorie.", - "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, "feedbackSubjectLength": "Het onderwerp moet tussen 3 en 120 tekens lang zijn.", - "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, "feedbackMessageLength": "Het bericht moet tussen de 10 en 5.000 tekens lang zijn.", - "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, "feedbackReplyEmailInvalid": "Voer een geldig e-mailadres in of laat dit veld leeg.", - "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, "feedbackConnectionFailure": "BusyMark kan geen verbinding maken. Controleer uw internetverbinding en probeer het opnieuw.", - "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, "feedbackTimeoutFailure": "Er is een time-out opgetreden voor het verzoek. Probeer het opnieuw.", - "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, "feedbackRateLimitedFailure": "Er zijn te veel rapporten verzonden via deze verbinding. Wacht en probeer het opnieuw.", - "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, "feedbackRejectedFailure": "De server heeft dit rapport afgewezen. Controleer de formuliervelden en probeer het opnieuw.", - "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, "feedbackServerFailure": "De server kon het rapport niet accepteren. Probeer het later opnieuw.", - "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, "feedbackSuccess": "Feedback verzonden. Referentie-ID: {id}", - "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "advanced": "Geavanceerd", - "@advanced": {"description":"Settings section title for advanced actions."}, + "@advanced": { + "description": "Settings section title for advanced actions." + }, "addToGit": "Toevoegen aan Git", - "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, "appearance": "Uiterlijk", - "@appearance": {"description":"Settings section title for appearance options."}, + "@appearance": { + "description": "Settings section title for appearance options." + }, "apply": "Toepassen", - "@apply": {"description":"Button label that applies a dialog change."}, + "@apply": { + "description": "Button label that applies a dialog change." + }, "back": "Terug", - "@back": {"description":"Tooltip for navigating back."}, + "@back": { + "description": "Tooltip for navigating back." + }, "bottomLeft": "Linksonder", - "@bottomLeft": {"description":"Editing button position option."}, + "@bottomLeft": { + "description": "Editing button position option." + }, "bottomRight": "Rechtsonder", - "@bottomRight": {"description":"Editing button position option."}, + "@bottomRight": { + "description": "Editing button position option." + }, "cancel": "Annuleren", - "@cancel": {"description":"Cancel button label."}, + "@cancel": { + "description": "Cancel button label." + }, "choose": "Kiezen", - "@choose": {"description":"Button label for choosing a file or path."}, + "@choose": { + "description": "Button label for choosing a file or path." + }, "chooseLocation": "Kies locatie", - "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, "copy": "Kopiëren", - "@copy": {"description":"Copy command label."}, + "@copy": { + "description": "Copy command label." + }, "copyName": "Kopieer naam", - "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, "copyFileName": "Bestandsnaam kopiëren", - "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, "copyPath": "Kopieer pad", - "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, "create": "Maken", - "@create": {"description":"Create action label."}, + "@create": { + "description": "Create action label." + }, "creating": "Maken...", - "@creating": {"description":"Progress label while a project or topic is being created."}, + "@creating": { + "description": "Progress label while a project or topic is being created." + }, "cut": "Knippen", - "@cut": {"description":"Cut command label."}, + "@cut": { + "description": "Cut command label." + }, "promoteSection": "Sectie promoten", - "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, "demoteSection": "Sectie degraderen", - "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, "moveSectionUp": "Verplaats sectie naar boven", - "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, "moveSectionDown": "Verplaats sectie naar beneden", - "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, "confirmDeleteSectionTitle": "Sectie verwijderen?", - "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, "confirmDeleteSectionMessage": "'{name}' en alle inhoud in de bijbehorende sectie verwijderen? Dit kan niet ongedaan worden gemaakt.", - "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "darkTheme": "Donker", - "@darkTheme": {"description":"Dark theme option."}, + "@darkTheme": { + "description": "Dark theme option." + }, "delete": "Verwijderen", - "@delete": {"description":"Delete command label."}, + "@delete": { + "description": "Delete command label." + }, "discard": "Weggooien", - "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, "editor": "Editor", - "@editor": {"description":"Editor view label."}, + "@editor": { + "description": "Editor view label." + }, "file": "Bestand", - "@file": {"description":"Generic file kind label."}, + "@file": { + "description": "Generic file kind label." + }, "fileHistory": "Bestandsgeschiedenis", - "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, "folder": "Map", - "@folder": {"description":"Folder kind label."}, + "@folder": { + "description": "Folder kind label." + }, "insert": "Invoegen", - "@insert": {"description":"Insert button label."}, + "@insert": { + "description": "Insert button label." + }, "keyboardShortcuts": "Sneltoetsen op het toetsenbord", - "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, "commandPalette": "Commandopalet", - "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, "commandPaletteHint": "Typ een opdracht", - "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, "commandPaletteEmpty": "Geen overeenkomende opdrachten", - "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, "commandUnavailableInContext": "Niet beschikbaar in de huidige editorcontext", - "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, "lightTheme": "Licht", - "@lightTheme": {"description":"Light theme option."}, + "@lightTheme": { + "description": "Light theme option." + }, "mainMenu": "Hoofdmenu", - "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, "fullScreen": "Volledig scherm", - "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, "markdown": "Markdown", - "@markdown": {"description":"Markdown format label."}, + "@markdown": { + "description": "Markdown format label." + }, "open": "Openen", - "@open": {"description":"Open action label."}, + "@open": { + "description": "Open action label." + }, "openInFiles": "Openen in Bestandsbeheer", - "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, "pathActions": "Padacties", - "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, "outline": "Overzicht", - "@outline": {"description":"Outline sidebar tab label."}, + "@outline": { + "description": "Outline sidebar tab label." + }, "overwrite": "Overschrijven", - "@overwrite": {"description":"Button label for overwriting a changed file."}, + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, "paste": "Plakken", - "@paste": {"description":"Paste command label."}, + "@paste": { + "description": "Paste command label." + }, "pasteWithoutFormatting": "Plakken zonder opmaak", - "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, "reading": "Lezen", - "@reading": {"description":"Reading view label."}, + "@reading": { + "description": "Reading view label." + }, "removeFromRecent": "Verwijderen uit recent", - "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, "recent": "Recent", - "@recent": {"description":"Recent workspaces section title."}, + "@recent": { + "description": "Recent workspaces section title." + }, "redo": "Opnieuw uitvoeren", - "@redo": {"description":"Redo command label."}, + "@redo": { + "description": "Redo command label." + }, "save": "Opslaan", - "@save": {"description":"Save action label."}, + "@save": { + "description": "Save action label." + }, "search": "Zoeken", - "@search": {"description":"Search action label and field hint."}, + "@search": { + "description": "Search action label and field hint." + }, "selectAll": "Selecteer alles", - "@selectAll": {"description":"Select all command label."}, + "@selectAll": { + "description": "Select all command label." + }, "settings": "Instellingen", - "@settings": {"description":"Settings action label."}, + "@settings": { + "description": "Settings action label." + }, "source": "Bron", - "@source": {"description":"Source view label."}, + "@source": { + "description": "Source view label." + }, "split": "Splitsen", - "@split": {"description":"Split view label."}, + "@split": { + "description": "Split view label." + }, "systemTheme": "Systeem", - "@systemTheme": {"description":"System theme option."}, + "@systemTheme": { + "description": "System theme option." + }, "theme": "Thema", - "@theme": {"description":"Theme setting label."}, + "@theme": { + "description": "Theme setting label." + }, "appLanguage": "Taal", - "@appLanguage": {"description":"Application language setting label."}, + "@appLanguage": { + "description": "Application language setting label." + }, "systemLanguage": "Systeem", - "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, "languageEnglish": "English", - "@languageEnglish": {"description":"Language selector option for English."}, + "@languageEnglish": { + "description": "Language selector option for English." + }, "languageGerman": "Deutsch", - "@languageGerman": {"description":"Language selector option for German."}, + "@languageGerman": { + "description": "Language selector option for German." + }, "languageDutch": "Nederlands", - "@languageDutch": {"description":"Language selector option for Dutch."}, + "@languageDutch": { + "description": "Language selector option for Dutch." + }, "languageTurkish": "Türkçe", - "@languageTurkish": {"description":"Language selector option for Turkish."}, + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", - "@languageItalian": {"description":"Language selector option for Italian."}, - "languageNorwegian": "Norsk", - "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk bokmål", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, "languageFrench": "Français", - "@languageFrench": {"description":"Language selector option for French."}, + "@languageFrench": { + "description": "Language selector option for French." + }, "languageRussian": "Русский", - "@languageRussian": {"description":"Language selector option for Russian."}, + "@languageRussian": { + "description": "Language selector option for Russian." + }, "languageUkrainian": "Українська", - "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, "languagePolish": "Polski", - "@languagePolish": {"description":"Language selector option for Polish."}, + "@languagePolish": { + "description": "Language selector option for Polish." + }, "languageSpanish": "Español", - "@languageSpanish": {"description":"Language selector option for Spanish."}, + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, "languagePortuguese": "Português", - "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, "languageArabic": "العربية", - "@languageArabic": {"description":"Language selector option for Arabic."}, + "@languageArabic": { + "description": "Language selector option for Arabic." + }, "languagePersian": "فارسی", - "@languagePersian": {"description":"Language selector option for Persian."}, + "@languagePersian": { + "description": "Language selector option for Persian." + }, "languageHindi": "हिन्दी", - "@languageHindi": {"description":"Language selector option for Hindi."}, + "@languageHindi": { + "description": "Language selector option for Hindi." + }, "languageIndonesian": "Bahasa Indonesia", - "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", - "@languageEstonian": {"description":"Language selector option for Estonian."}, + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, "languageVietnamese": "Tiếng Việt", - "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, "languageJapanese": "日本語", - "@languageJapanese": {"description":"Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description":"Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", - "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Zijbalk in-/uitschakelen", - "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, "topLeft": "Linksboven", - "@topLeft": {"description":"Editing button position option."}, + "@topLeft": { + "description": "Editing button position option." + }, "topRight": "Rechtsboven", - "@topRight": {"description":"Editing button position option."}, + "@topRight": { + "description": "Editing button position option." + }, "undo": "Ongedaan maken", - "@undo": {"description":"Undo command label."}, + "@undo": { + "description": "Undo command label." + }, "validate": "Valideren", - "@validate": {"description":"Validate action label."}, + "@validate": { + "description": "Validate action label." + }, "validation": "Validatie", - "@validation": {"description":"Settings section title for validation options."}, + "@validation": { + "description": "Settings section title for validation options." + }, "viewMode": "Weergavemodus", - "@viewMode": {"description":"Native header bar view mode control label."}, + "@viewMode": { + "description": "Native header bar view mode control label." + }, "welcome": "Welkom", - "@welcome": {"description":"Welcome screen label and tooltip."}, + "@welcome": { + "description": "Welcome screen label and tooltip." + }, "writerside": "Writerside", - "@writerside": {"description":"Writerside workspace kind label."}, + "@writerside": { + "description": "Writerside workspace kind label." + }, "xml": "XML", - "@xml": {"description":"XML format label."}, + "@xml": { + "description": "XML format label." + }, "fileTypeMarkdown": "Markdown", - "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, "fileTypeImages": "Afbeeldingen", - "@fileTypeImages": {"description":"Native file picker type label for images."}, + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, "openMarkdownFile": "Markdown-bestand openen", - "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, "markdownFileExtensions": ".md of .markdown", - "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, "openFolderOrWritersideProject": "Open een map of Writerside-project", - "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, "markdownFolderOrWritersideProject": "Markdown-map of Writerside-compatibel project", - "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, "noOpenFile": "Geen bestand geopend", - "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, "shortcutDeleteTreeItemDescription": "Verwijder het geselecteerde item uit Bestanden of verwijder het geselecteerde onderwerp uit de inhoudsopgave", - "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Algemeen", - "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, "shortcutNewDocument": "Maken", - "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, "shortcutNewDocumentDescription": "Maak een Markdown-bestand of Writerside-project", - "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, "shortcutOpenDescription": "Open een Markdown-bestand, map of Writerside-project", - "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, "shortcutSaveDescription": "Sla het huidige document op", - "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, "shortcutSearchDescription": "Zoek in de huidige werkruimte", - "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, "shortcutKeyboardShortcutsDescription": "Toon deze sneltoetsreferentie", - "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, "shortcutMarkdownAndHtmlDescription": "Open de Markdown- en HTML-referentie", - "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, "shortcutSettingsDescription": "Open BusyMark-instellingen", - "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, "shortcutNextTab": "Volgende tabblad", - "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, "shortcutNextTabDescription": "Ga naar het volgende geopende tabblad", - "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, "shortcutPreviousTab": "Vorig tabblad", - "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, "shortcutPreviousTabDescription": "Ga naar het vorige geopende tabblad", - "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, "shortcutCloseTab": "Tabblad sluiten", - "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, "shortcutCloseTabDescription": "Sluit het actieve tabblad", - "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, "shortcutCloseAllTabs": "Sluit alle tabbladen", - "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, "shortcutCloseAllTabsDescription": "Sluit alle geopende tabbladen", - "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, "shortcutGroupTextEditing": "Tekstbewerking", - "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, "shortcutSelectAllDescription": "Selecteer in de bronmodus alle tekst; druk in de Editor-modus tweemaal om elk blok te selecteren", - "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, "shortcutCutDescription": "Knip de geselecteerde tekst", - "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, "shortcutCopyDescription": "Kopieer de geselecteerde tekst", - "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, "shortcutPasteDescription": "Plakken vanaf het klembord", - "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, "shortcutPastePlainTextDescription": "Klembordtekst plakken zonder opmaak", - "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, "shortcutUndoDescription": "Maak de laatste bewerking ongedaan", - "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, "shortcutRedoDescription": "Voer de laatste ongedaan gemaakte bewerking opnieuw uit", - "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, "shortcutInsertIndentation": "Inspringing invoegen", - "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Voeg een inspringing toe bij de cursor", - "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Inspringing in bron verminderen", - "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Verwijder één inspringingsniveau in de bronmodus", - "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Zoeken sluiten of blokselectie wissen", - "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, "shortcutEscapeDescription": "Sluit het zoeken in de werkruimte of wis een blokselectie in de Editor-modus", - "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, "shortcutGroupFormatting": "Opmaak", - "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, - "shortcutBoldDescription": "Schakel vetgedrukt in op de geselecteerde tekst", - "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, + "shortcutBoldDescription": "Vetgedrukt in- of uitschakelen voor geselecteerde tekst", + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, "shortcutItalicDescription": "Schakel cursief in op de geselecteerde tekst", - "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, "shortcutUnderlineDescription": "Schakel het onderstrepen van de geselecteerde tekst in of uit", - "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, "shortcutLinkDescription": "Een link invoegen of bewerken", - "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, "shortcutInlineCodeDescription": "Schakel inlinecode voor de geselecteerde tekst in of uit", - "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, "shortcutStrikethroughDescription": "Schakel doorhalen van de geselecteerde tekst in of uit", - "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, "shortcutGroupBlocks": "Blokken", - "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, "shortcutParagraphDescription": "Stel het huidige blok in op alinea", - "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, "shortcutHeading1Description": "Stel het huidige blok in op Kop 1", - "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, "shortcutHeading2Description": "Stel het huidige blok in op Kop 2", - "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, "shortcutHeading3Description": "Stel het huidige blok in op Kop 3", - "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, "shortcutHeading4Description": "Stel het huidige blok in op Kop 4", - "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, "shortcutHeading5Description": "Stel het huidige blok in op Kop 5", - "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, "shortcutHeading6Description": "Stel het huidige blok in op Kop 6", - "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, "shortcutGroupLists": "Lijsten", - "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, "numberedList": "Genummerde lijst", - "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, "shortcutNumberedListDescription": "Schakel genummerde lijstopmaak in of uit", - "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, "bulletedList": "Lijst met opsommingstekens", - "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, "shortcutBulletedListDescription": "Schakel de opmaak van de lijst met opsommingstekens in of uit", - "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, "checklist": "Controlelijst", - "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, "shortcutChecklistDescription": "Schakel de opmaak van de checklist in of uit", - "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, "shortcutGroupSidebar": "Zijbalk", - "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, "sidebarViewMenu": "Zijbalkweergave", - "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, "createMarkdownFile": "Markdown-bestand maken", - "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, "createMarkdownFileDescription": "Start een niet-opgeslagen lokaal Markdown-document", - "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, "createWritersideProject": "Maak een Writerside-project", - "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, "createWritersideProjectDescription": "Start een lokaal Writerside-compatibel project", - "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, "defaultProjectName": "Documentatie", - "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, "defaultInstanceName": "Gebruikershandleiding", - "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, "defaultStartTopicTitle": "Aan de slag", - "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, "projectName": "Projectnaam", - "@projectName": {"description":"Create project dialog field label."}, + "@projectName": { + "description": "Create project dialog field label." + }, "directoryName": "Mapnaam", - "@directoryName": {"description":"Create project dialog field label."}, + "@directoryName": { + "description": "Create project dialog field label." + }, "instanceName": "Instantienaam", - "@instanceName": {"description":"Create project dialog field label."}, + "@instanceName": { + "description": "Create project dialog field label." + }, "instanceId": "Instantie-ID", - "@instanceId": {"description":"Create project dialog field label."}, + "@instanceId": { + "description": "Create project dialog field label." + }, "startTopicTitle": "Titel van startonderwerp", - "@startTopicTitle": {"description":"Create project dialog field label."}, + "@startTopicTitle": { + "description": "Create project dialog field label." + }, "location": "Locatie", - "@location": {"description":"Create dialog location section label."}, + "@location": { + "description": "Create dialog location section label." + }, "projectNameRequired": "Projectnaam is vereist.", - "@projectNameRequired": {"description":"Validation message for missing project name."}, + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, "directoryNameRequired": "Mapnaam is vereist.", - "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, "useSingleSafeDirectoryName": "Gebruik één veilige mapnaam.", - "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, "useLowercaseIdentifier": "Gebruik een identificatiecode in kleine letters met letters, cijfers, onderstrepingstekens of koppeltekens.", - "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, "startTopicTitleRequired": "Titel van startonderwerp is vereist.", - "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, "createWritersideProjectFailed": "Kan Writerside-project niet maken.", - "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, "settingsTitle": "BusyMark-instellingen", - "@settingsTitle": {"description":"Settings screen title."}, + "@settingsTitle": { + "description": "Settings screen title." + }, "autoSave": "Automatisch opslaan", - "@autoSave": {"description":"Editor setting label for saving files automatically."}, - "autoSaveDescription": "Bestandswijzigingen automatisch opslaan na een korte inactieve vertraging.", - "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, + "autoSaveDescription": "Sla bestandswijzigingen automatisch op na een korte periode van inactiviteit.", + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, "wordWrap": "Regelterugloop", - "@wordWrap": {"description":"Word wrap setting label."}, + "@wordWrap": { + "description": "Word wrap setting label." + }, "editorFontSize": "Lettergrootte van de editor", - "@editorFontSize": {"description":"Editor font size setting label."}, + "@editorFontSize": { + "description": "Editor font size setting label." + }, "validateOnEdit": "Valideren bij bewerken", - "@validateOnEdit": {"description":"Validation setting label."}, + "@validateOnEdit": { + "description": "Validation setting label." + }, "clearRecentWorkspaces": "Wis recente werkruimten", - "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, "editingButtonsPosition": "Positie van knoppen bewerken", - "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, "editingButtonsPositionDescription": "Kies waar de zwevende WYSIWYG-bewerkingsknoppen verschijnen.", - "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, "editingButtonsDirection": "Richting van knoppen bewerken", - "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, "editingButtonsDirectionDescription": "Kies of de zwevende WYSIWYG-bewerkingsknoppen horizontaal of verticaal zijn gerangschikt.", - "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, "horizontal": "Horizontaal", - "@horizontal": {"description":"Editing button direction option."}, + "@horizontal": { + "description": "Editing button direction option." + }, "vertical": "Verticaal", - "@vertical": {"description":"Editing button direction option."}, + "@vertical": { + "description": "Editing button direction option." + }, "privacy": "Privacy", - "@privacy": {"description":"Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Laad externe afbeeldingen", - "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Sta toe dat Markdown-voorbeelden en editorafbeeldingen worden geladen vanaf http- en https-URL's.", - "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Wis machtigingen voor externe afbeeldingen", - "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, - "clearRemoteImagePermissionsDescription": "Vergeet werkruimten die externe afbeeldingen mochten laden.", - "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, + "clearRemoteImagePermissionsDescription": "Verwijder de opgeslagen rechten voor werkruimten die externe afbeeldingen mochten laden.", + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Wis vertrouwde Git-werkruimten", - "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Vraag dit voordat u Git-functies inschakelt voor eerder vertrouwde werkruimten.", - "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Raam", - "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, "settingsReopenWorkspaceOnStartupTitle": "Open de vorige werkruimte opnieuw bij het opstarten", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Open de werkruimte en tabbladen van de vorige sessie wanneer BusyMark start.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Bevestig voordat u sluit met niet-opgeslagen wijzigingen", - "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, "settingsConfirmCloseWithUnsavedChangesDescription": "Vraag dit voordat u BusyMark sluit als documenten niet-opgeslagen wijzigingen bevatten.", - "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, "closeUnsavedChangesTitle": "Niet-opgeslagen wijzigingen", - "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, "closeUnsavedChangesSingleMessage": "Dit document bevat niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat u BusyMark sluit?", - "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Wijzigingen opslaan voordat BusyMark wordt gesloten?} =1{1 document bevat niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat BusyMark wordt gesloten?} other{{count} documenten bevatten niet-opgeslagen wijzigingen. Wijzigingen opslaan voordat BusyMark wordt gesloten?}}", - "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "closeUnsavedChangesCancel": "Annuleren", - "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, "closeUnsavedChangesDiscard": "Weggooien", - "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, "closeUnsavedChangesSave": "Opslaan", - "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, "currentFile": "huidig bestand", - "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, "unsavedChanges": "Niet-opgeslagen wijzigingen", - "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, "unsavedChangesMessage": "Er zijn niet-opgeslagen wijzigingen in {fileName}. Sla ze op voordat je verdergaat?", - "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "unsavedChangesMultipleMessage": "{count, plural, =1{1 document bevat niet-opgeslagen wijzigingen. Sla het op voordat u doorgaat?} other{{count} documenten bevatten niet-opgeslagen wijzigingen. Sla ze op voordat u doorgaat?}}", - "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "fileChangedOnDisk": "Bestand gewijzigd op schijf", - "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, "fileChangedOnDiskMessage": "Dit bestand is op schijf gewijzigd sinds u het hebt geopend. Overschrijven?", - "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, "untitledMarkdownFileName": "Untitled.md", - "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, "unorderedList": "Ongenummerde lijst", - "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, "orderedList": "Genummerde lijst", - "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, "taskList": "Takenlijst", - "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, "toggleTaskChecked": "Taak als voltooid markeren", - "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, "indentListItem": "Lijstitem inspringen", - "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, "outdentListItem": "Lijstitem uitspringen", - "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, "blockquote": "Blokcitaat", - "@blockquote": {"description":"Blockquote command label."}, + "@blockquote": { + "description": "Blockquote command label." + }, "codeBlock": "Codeblok", - "@codeBlock": {"description":"Code block command or preview label."}, + "@codeBlock": { + "description": "Code block command or preview label." + }, "codeBlockLanguage": "Codebloktaal", - "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, "image": "Afbeelding", - "@image": {"description":"Image command and document kind label."}, + "@image": { + "description": "Image command and document kind label." + }, "video": "Video", "openVideo": "Video afspelen", "pauseVideo": "Video pauzeren", @@ -517,1268 +1052,3281 @@ "videoPreview": "Videovoorbeeld", "diagnosticWritersideVideoMissingSource": "Video mist het kenmerk src.", "diagnosticWritersideVideoUnsupportedSource": "Niet-ondersteunde videobron: {source}", - "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingFile": "Videobestand bestaat niet: {source}", - "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingPreview": "Videovoorbeeldafbeelding bestaat niet: {preview}", - "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, "inlineImage": "Inline-afbeelding", - "@inlineImage": {"description":"Inline image command label."}, + "@inlineImage": { + "description": "Inline image command label." + }, "table": "Tabel", - "@table": {"description":"Table command label."}, + "@table": { + "description": "Table command label." + }, "htmlBlock": "HTML-blok", - "@htmlBlock": {"description":"HTML block command label."}, + "@htmlBlock": { + "description": "HTML block command label." + }, "htmlContentDefault": "HTML-inhoud", - "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "Voeg een HTML-blok in of bewerk het", - "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, "renderedHtml": "Weergegeven HTML", - "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, "editHtml": "HTML bewerken", - "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, "htmlSource": "HTML-bron", - "@htmlSource": {"description":"Text field label for raw HTML source."}, + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, "thematicBreak": "Horizontale scheidingslijn", - "@thematicBreak": {"description":"Thematic break command label."}, + "@thematicBreak": { + "description": "Thematic break command label." + }, "bold": "Vetgedrukt", - "@bold": {"description":"Bold command label."}, + "@bold": { + "description": "Bold command label." + }, "italic": "Cursief", - "@italic": {"description":"Italic command label."}, + "@italic": { + "description": "Italic command label." + }, "underline": "Onderstrepen", - "@underline": {"description":"Underline command label."}, + "@underline": { + "description": "Underline command label." + }, "strikethrough": "Doorhalen", - "@strikethrough": {"description":"Strikethrough command label."}, + "@strikethrough": { + "description": "Strikethrough command label." + }, "inlineCode": "Inline-code", - "@inlineCode": {"description":"Inline code command label."}, + "@inlineCode": { + "description": "Inline code command label." + }, "link": "Link", - "@link": {"description":"Link command and preview label."}, + "@link": { + "description": "Link command and preview label." + }, "hardLineBreak": "Hard regeleinde", - "@hardLineBreak": {"description":"Hard line break command label."}, + "@hardLineBreak": { + "description": "Hard line break command label." + }, "textStyle": "Tekststijl", - "@textStyle": {"description":"Text style menu tooltip."}, + "@textStyle": { + "description": "Text style menu tooltip." + }, "paragraph": "Alinea", - "@paragraph": {"description":"Paragraph style label."}, + "@paragraph": { + "description": "Paragraph style label." + }, "heading1": "Kop 1", - "@heading1": {"description":"Heading 1 style label."}, + "@heading1": { + "description": "Heading 1 style label." + }, "heading2": "Kop 2", - "@heading2": {"description":"Heading 2 style label."}, + "@heading2": { + "description": "Heading 2 style label." + }, "heading3": "Kop 3", - "@heading3": {"description":"Heading 3 style label."}, + "@heading3": { + "description": "Heading 3 style label." + }, "heading4": "Kop 4", - "@heading4": {"description":"Heading 4 style label."}, + "@heading4": { + "description": "Heading 4 style label." + }, "heading5": "Kop 5", - "@heading5": {"description":"Heading 5 style label."}, + "@heading5": { + "description": "Heading 5 style label." + }, "heading6": "Kop 6", - "@heading6": {"description":"Heading 6 style label."}, + "@heading6": { + "description": "Heading 6 style label." + }, "headingLevelAbbreviation": "H{level}", - "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, "deleteTable": "Tabel verwijderen", - "@deleteTable": {"description":"Tooltip for deleting a table."}, + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, "tableColumnNumber": "Kolom {columnNumber}", - "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "insertColumnLeft": "Kolom links invoegen", - "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, "insertColumnRight": "Kolom rechts invoegen", - "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, "deleteColumn": "Kolom verwijderen", - "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, "tableAlignmentUnspecified": "Uitlijning: niet gespecificeerd", - "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, "tableAlignmentLeft": "Uitlijning: links", - "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, "tableAlignmentCenter": "Uitlijning: midden", - "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, "tableAlignmentRight": "Uitlijning: rechts", - "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, "tableRowNumber": "Rij {rowNumber}", - "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, "insertRowAbove": "Rij erboven invoegen", - "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, "insertRowBelow": "Voeg rij hieronder in", - "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, "deleteRow": "Rij verwijderen", - "@deleteRow": {"description":"Menu item for deleting a table row."}, + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, "tableHeaderHint": "Kolomkop", - "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, "tableCellHint": "Cel", - "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, "language": "Taal", - "@language": {"description":"Code block language field label."}, + "@language": { + "description": "Code block language field label." + }, "hideEditingButtons": "Bewerkingsknoppen verbergen", - "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, "showEditingButtons": "Toon bewerkingsknoppen", - "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, "altText": "Alt-tekst", - "@altText": {"description":"Image alt text field label."}, + "@altText": { + "description": "Image alt text field label." + }, "editorPlaceholderText": "tekst", - "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "code", - "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "alternatieve tekst", - "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Beschrijf de afbeelding", - "@describeTheImage": {"description":"Image alt text hint."}, + "@describeTheImage": { + "description": "Image alt text hint." + }, "columns": "Kolommen", - "@columns": {"description":"Table dialog columns field label."}, + "@columns": { + "description": "Table dialog columns field label." + }, "rows": "Rijen", - "@rows": {"description":"Table dialog rows field label."}, + "@rows": { + "description": "Table dialog rows field label." + }, "tableHeaderNumber": "Kolomkop {columnNumber}", - "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "tableCellDefault": "Cel", - "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, "noImageSource": "Geen afbeeldingsbron", - "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, "remoteImageBlocked": "Externe afbeelding geblokkeerd", - "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Kies of BusyMark externe afbeeldingen kan laden.", - "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Externe afbeeldingen worden geblokkeerd", - "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Dit document verwijst naar afbeeldingen van internet. Als u ze laadt, kan netwerkinformatie aan de afbeeldingshost worden onthuld.", - "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Voor deze werkruimte laden", - "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Externe afbeeldingen altijd laden", - "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Zijbalkpaneel verbergen", - "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, "showSidebar": "Zijbalkpaneel tonen", - "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, "showPreview": "Voorbeeld weergeven", - "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, "hidePreview": "Voorbeeld verbergen", - "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, "workspaceKindUnsavedMarkdown": "Niet-opgeslagen Markdown-bestand", - "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, "workspaceKindSingleMarkdown": "Eén Markdown-bestand", - "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, "workspaceKindMarkdownFolder": "Markdown-map", - "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, "workspaceKindWritersideModule": "Writerside-module", - "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, "problems": "Problemen", - "@problems": {"description":"Diagnostics dialog title."}, + "@problems": { + "description": "Diagnostics dialog title." + }, "diagnosticCount": "{count, plural, =0{Geen diagnoses} =1{1 diagnose} other{{count} diagnoses}}", - "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "files": "Bestanden", - "@files": {"description":"Files sidebar tab label."}, + "@files": { + "description": "Files sidebar tab label." + }, "toc": "TOC", - "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, "tocActions": "TOC-acties", - "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, "markdownUnsaved": "Niet-opgeslagen Markdown", - "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, "workspaceDetail": "{kind} - {count, plural, =1{1 bestand} other{{count} bestanden}}", - "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "noFiles": "Geen bestanden", - "@noFiles": {"description":"Empty state shown when there are no files."}, + "@noFiles": { + "description": "Empty state shown when there are no files." + }, "newFile": "Nieuw bestand", - "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, "noWritersideToc": "Geen Writerside-inhoudsopgave", - "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, "tocSection": "TOC-sectie", - "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, "newTopic": "Nieuw onderwerp", - "@newTopic": {"description":"Create new Writerside topic action label."}, + "@newTopic": { + "description": "Create new Writerside topic action label." + }, "newChildTopic": "Nieuw onderliggend onderwerp", - "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, "newSiblingTopic": "Nieuw naastliggend onderwerp", - "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, "renameTopicFile": "Onderwerpbestand hernoemen", - "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, "topicPlacement": "TOC-plaatsing", - "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, "tocRoot": "Bij TOC-root", - "@tocRoot": {"description":"TOC placement option for the root level."}, + "@tocRoot": { + "description": "TOC placement option for the root level." + }, "afterSelectedTopic": "Na geselecteerd onderwerp", - "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, "insideSelectedTopic": "Binnen geselecteerd onderwerp", - "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, "pasteAfterTopic": "Na onderwerp plakken", - "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, "pasteAsChildTopic": "Als onderliggend onderwerp plakken", - "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, "removeFromToc": "Verwijderen uit inhoudsopgave", - "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, "confirmRemoveFromTocTitle": "Verwijderen uit inhoudsopgave?", - "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, "confirmRemoveFromTocMessage": "{name} verwijderen uit deze inhoudsopgave? Het onderwerpbestand wordt bewaard.", - "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteTopicTitle": "Onderwerpbestand verwijderen?", - "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, "confirmDeleteTopicMessage": "{name} verwijderen en uit elke inhoudsopgave verwijderen? Dit kan niet ongedaan worden gemaakt.", - "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "safeDeleteTopicFile": "Onderwerpbestand veilig verwijderen…", - "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, "removeTocElement": "TOC-element verwijderen", - "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, "reviewUsages": "Gebruik controleren", - "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, "deleteTopicFile": "Onderwerpbestand verwijderen", - "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, "removeAction": "Verwijderen", - "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, "topicRemovalSummary": "Verwijder “{topic}” uit de geselecteerde instantie. Het onderwerpbestand wordt bewaard.", - "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Verwijder “{topic}” en werk de referenties veilig bij in dit Writerside-project.", - "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 onderliggend onderwerp wordt één niveau hoger geplaatst.} other{{count} onderliggende onderwerpen worden één niveau hoger geplaatst.}}", - "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Dit onderwerp wordt gebruikt als startpagina van een instantie. Controleer het gebruik ervan en wijs een andere startpagina toe voordat u verdergaat.", - "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, "topicUsagesCount": "Gebruik ({count})", - "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Er zijn geen verwijzingen gevonden die kunnen worden verbroken.", - "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, "topicUsagesFound": "BusyMark heeft de volgende verwijzingen naar dit onderwerp gevonden.", - "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, "topicUsageTocElements": "TOC-elementen", - "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, "topicUsageStartPages": "Startpagina's", - "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, "topicUsageTopicLinks": "Onderwerplinks", - "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, - "topicUsageIncludes": "Inclusief", - "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, + "topicUsageIncludes": "Include-elementen", + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, "usageCount": "{count, plural, =1{1 gebruik} other{{count} keer gebruikt}}", - "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Refactoring-opties", - "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, "updateUsagesAutomatically": "Gebruik automatisch bijwerken", - "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, "updateUsagesAutomaticallyDescription": "Verwijder inhoudsopgavereferenties en -includes en behoud de linktekst.", - "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, "manualUsageUpdatesRequired": "Voor sommige verwijzingen zijn handmatige wijzigingen vereist voordat deze refactoring plaatsvindt.", - "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, "setRedirectTo": "Omleiding instellen naar", - "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, "noRedirectDescription": "De oude, gepubliceerde pagina niet omleiden.", - "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, "redirectTarget": "Omleidingsdoel", - "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, "remainingUsagesBlockRemoval": "Controleer en werk de resterende verwijzingen bij voordat u doorgaat, of schakel automatische updates in als die beschikbaar zijn.", - "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, "usagesOfTopic": "Gebruik van {topic}", - "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Geen gebruik gevonden", - "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, "outsideSelectedInstance": "buiten de geselecteerde instantie", - "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, "doRefactor": "Refactoring uitvoeren", - "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, "orphanTopicTitle": "Onderwerpbestand wordt niet meer gebruikt", - "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, "keepTopicFile": "Onderwerpbestand behouden", - "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, "orphanTopicMessage": "“{topic}” wordt nergens meer gebruikt in dit Writerside-project. Verwijder het bestand of bewaar het voor gebruik in een andere instantie.", - "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "defaultNewTopicTitle": "Nieuw onderwerp", - "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, "topicTitle": "Onderwerptitel", - "@topicTitle": {"description":"Create topic dialog field label."}, + "@topicTitle": { + "description": "Create topic dialog field label." + }, "fileName": "Bestandsnaam", - "@fileName": {"description":"Create topic dialog field label."}, + "@fileName": { + "description": "Create topic dialog field label." + }, "topicTitleRequired": "Onderwerptitel is vereist.", - "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, "fileNameRequired": "Bestandsnaam is vereist.", - "@fileNameRequired": {"description":"Validation message for missing file name."}, + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, "rename": "Hernoemen", - "@rename": {"description":"Rename command label."}, + "@rename": { + "description": "Rename command label." + }, "confirmDeleteFileTitle": "Bestand verwijderen?", - "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, "confirmDeleteFolderTitle": "Map verwijderen?", - "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, "confirmDeleteFileMessage": "{name} verwijderen? Dit kan niet ongedaan worden gemaakt.", - "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteFolderMessage": "{name} en alle bestanden daarin verwijderen? Dit kan niet ongedaan worden gemaakt.", - "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "useSingleSafeFileName": "Gebruik één veilige bestandsnaam.", - "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, "useExpectedExtension": "Gebruik de extensie {extension} voor het geselecteerde formaat.", - "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "useIdentifierCharacters": "Gebruik letters, cijfers, onderstrepingstekens of koppeltekens vóór de extensie.", - "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, "topicIdAlreadyExists": "Onderwerp-ID bestaat al.", - "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, "createWritersideTopicFailed": "Kan Writerside-onderwerp niet maken.", - "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, "noOutline": "Geen overzicht", - "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, "expandKind": "Vouw {kind} uit", - "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "collapseKind": "{kind} samenvouwen", - "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "foldKindSection": "sectie", - "@foldKindSection": {"description":"Fold kind label for a section."}, + "@foldKindSection": { + "description": "Fold kind label for a section." + }, "foldKindList": "lijst", - "@foldKindList": {"description":"Fold kind label for a list."}, + "@foldKindList": { + "description": "Fold kind label for a list." + }, "foldKindQuote": "citaat", - "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, "foldKindTag": "label", - "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, "sourceSearchPreviousMatch": "Vorige overeenkomst", - "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Volgende overeenkomst", - "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Hoofdlettergevoelig", - "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Heel woord", - "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Regex", - "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchReplacement": "Vervangen door", - "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, - "sourceSearchReplaceCurrent": "Huidige vervangen", - "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "Vervang huidige overeenkomst", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, "sourceSearchReplaceAndFindNext": "Vervangen en volgende zoeken", - "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, "sourceSearchReplaceAll": "Vervang alles", - "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, "workspaceReplace": "Vervangen in werkruimte", - "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, "reviewReplacements": "Vervangingen controleren", - "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, "applyReplacements": "Vervangingen toepassen", - "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, "skippedFiles": "Overgeslagen bestanden", - "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, "workspaceReplaceDirtyBuffer": "Niet-opgeslagen editorinhoud", - "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, "workspaceReplaceDiskContent": "Opgeslagen schijfinhoud", - "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, "selectFileMatches": "Selecteer alle {count} overeenkomsten", - "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceReplaceApplied": "{matches} overeenkomsten in {files} bestanden vervangen; {skipped} overgeslagen.", - "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Met afsluitende nieuwe regel", - "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Zonder afsluitende nieuwe regel", - "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "normalizeLineEndings": "Normaliseer regeleinden", - "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, "mixedLineEndingsSavePrompt": "Dit document bevat gemengde regeleinden. Kies een formaat.", - "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, "workspaceReplaceMixedLineEndings": "{fileName} gebruikt gemengde regeleinden. Kies het formaat dat u wilt gebruiken voordat u het vervangt.", - "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "workspaceReplaceIssueOversized": "Een te groot bestand overgeslagen.", - "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, "workspaceReplaceIssueUnreadable": "Er is een bestand overgeslagen dat niet kon worden gelezen.", - "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, "workspaceReplaceIssueInvalidUtf8": "Er is een bestand overgeslagen dat geen geldige UTF-8 is.", - "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, "workspaceReplaceIssueTruncated": "Het vervangende voorbeeld is ingekort.", - "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, "workspaceReplaceIssueFileChanged": "Een bestand overgeslagen dat na het voorbeeld is gewijzigd.", - "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, "workspaceReplaceIssueBufferChanged": "Er is een editorbuffer overgeslagen die na het voorbeeld is gewijzigd.", - "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, "workspaceReplaceIssueNormalizationRequired": "Kies LF- of CRLF-normalisatie voordat u vervangt.", - "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, "workspaceReplaceIssuePartialConflict": "Het terugdraaien is gestopt omdat het bestand tegelijkertijd is gewijzigd. Er kunnen enkele vervangingen overblijven; verplaatste inhoud werd bewaard op het onderstaande pad.", - "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, "workspaceReplaceIssueApplyFailed": "De herziene vervanging kon niet worden vastgelegd; er zijn geen bestanden gewijzigd.", - "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, "externalChangesTitle": "Externe wijzigingen — {fileName}", - "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "externalFileDeleted": "Dit bestand is van schijf verwijderd.", - "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, "externalFileChanged": "Dit bestand is op schijf gewijzigd terwijl er niet-opgeslagen bewerkingen waren.", - "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, - "recoveredDocumentReview": "Herstelde niet-opgeslagen inhoud voor {fileName}. Controleer de inhoud en sla deze op, gebruik Opslaan als of verwijder deze.", - "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "Niet-opgeslagen inhoud hersteld voor {fileName}. Bekijk de inhoud en sla op, sla op als of verwerp.", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "compare": "Vergelijken", - "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, "reloadFromDisk": "Herladen vanaf schijf", - "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, "keepMine": "Mijn versie behouden", - "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, "saveAs": "Opslaan als", - "@saveAs": {"description":"Action that saves the current document to another path."}, + "@saveAs": { + "description": "Action that saves the current document to another path." + }, "sourceSearchInvalidRegex": "Ongeldige reguliere expressie", - "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Groot bestand: markeren en vouwen worden gepauzeerd", - "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Niets te lezen", - "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, - "admonition": "Vermaning", - "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, + "admonition": "Aandachtspunt", + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, "quote": "Citaat", - "@quote": {"description":"Label for a neutral Writerside quote block."}, + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, "note": "Opmerking", - "@note": {"description":"Preview label for a note admonition."}, + "@note": { + "description": "Preview label for a note admonition." + }, "tip": "Tip", - "@tip": {"description":"Preview label for a tip admonition."}, + "@tip": { + "description": "Preview label for a tip admonition." + }, "warning": "Waarschuwing", - "@warning": {"description":"Preview label for a warning admonition."}, + "@warning": { + "description": "Preview label for a warning admonition." + }, "tabs": "Tabbladen", - "@tabs": {"description":"Preview label for a tabs block."}, + "@tabs": { + "description": "Preview label for a tabs block." + }, "tab": "Tab", - "@tab": {"description":"Preview label for a tab block."}, + "@tab": { + "description": "Preview label for a tab block." + }, "procedure": "Procedure", - "@procedure": {"description":"Preview label for a procedure block."}, + "@procedure": { + "description": "Preview label for a procedure block." + }, "step": "Stap", - "@step": {"description":"Preview label for a procedure step."}, + "@step": { + "description": "Preview label for a procedure step." + }, "topic": "Onderwerp", - "@topic": {"description":"Preview label for a topic element."}, + "@topic": { + "description": "Preview label for a topic element." + }, "chapter": "Hoofdstuk", - "@chapter": {"description":"Preview label for a chapter element."}, + "@chapter": { + "description": "Preview label for a chapter element." + }, "couldNotOpenTarget": "Kon {target} niet openen", - "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, "linkTargetNotFound": "Linkdoel niet gevonden: {targetPath}", - "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "cannotOpenFileTypeInEditor": "Kan dit bestandstype niet openen in de editor", - "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, "anchorNotFound": "Anker niet gevonden: {anchor}", - "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "noProblemsFound": "Geen problemen gevonden", - "@noProblemsFound": {"description":"Diagnostics empty state."}, + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, "noResults": "Geen resultaten", - "@noResults": {"description":"Search empty state."}, + "@noResults": { + "description": "Search empty state." + }, "searchResultLine": "{relativePath} - Regel {lineNumber}", - "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, "untitledResult": "Naamloos resultaat", - "@untitledResult": {"description":"Fallback search result title."}, + "@untitledResult": { + "description": "Fallback search result title." + }, "documentKindMarkdownFile": "Markdown-bestand", - "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, "documentKindWritersideMarkdownTopic": "Writerside Markdown-onderwerp", - "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideXmlTopic": "Writerside XML-onderwerp", - "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideTree": "Writerside-tree", - "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, "documentKindConfigurationFile": "Configuratiebestand", - "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, "documentKindVariablesFile": "Variabelenbestand", - "@documentKindVariablesFile": {"description":"Search result document kind label."}, - "documentKindCategoriesFile": "Categorieën bestand", - "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, + "documentKindCategoriesFile": "Categoriebestand", + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, "documentKindResourceFile": "Bronbestand", - "@documentKindResourceFile": {"description":"Search result document kind label."}, + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, "workspaceErrorOpenFailed": "Openen mislukt: {error}", - "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideProjectFailed": "Kan Writerside-project niet maken: {error}", - "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideTopicFailed": "Kan Writerside-onderwerp niet maken: {error}", - "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCouldNotOpenFile": "Kan bestand niet openen: {error}", - "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorChooseWhereToSaveMarkdown": "Kies waar u dit Markdown-bestand wilt opslaan.", - "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, "workspaceErrorSaveBlockedFileChangedOnDisk": "Opslaan geblokkeerd: bestand gewijzigd op schijf.", - "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, "workspaceErrorSaveFailed": "Opslaan mislukt: {error}", - "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorFileOperationFailed": "Bestandsbewerking mislukt: {error}", - "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorValidationFailed": "Validatie mislukt: {error}", - "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceRecoveryRestored": "{count, plural, =1{1 niet-opgeslagen document is hersteld. Controleer het voordat u het opslaat of weggooit.} other{{count} niet-opgeslagen documenten zijn hersteld. Controleer elk document voordat u het opslaat of weggooit.}}", - "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceRecoveryDamaged": "{count, plural, =1{1 beschadigd herstelrecord kon niet worden hersteld. Het oorspronkelijke herstelbestand is bewaard voor inspectie.} other{{count} beschadigde herstelrecords konden niet worden hersteld. Geldige herstelrecords blijven beschikbaar.}}", - "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "errorPathDoesNotExist": "Pad bestaat niet: {path}", - "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTargetDirectoryNotEmpty": "Doelmap bestaat al en is niet leeg: {path}", - "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTargetPathNotDirectory": "Doelpad bestaat al en is geen map: {path}", - "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorGeneratedFileAlreadyExists": "Gegenereerd bestand bestaat al: {path}", - "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorParentDirectoryRequired": "Bovenliggende map is vereist.", - "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, "errorParentDirectoryMissing": "Bovenliggende map bestaat niet: {path}", - "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorDirectoryMissing": "Map bestaat niet: {path}", - "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorPathAlreadyExists": "Pad bestaat al: {path}", - "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorFileNameRequired": "Bestandsnaam is vereist.", - "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, "errorFileNameUnsafe": "De bestandsnaam moet uit één veilig padsegment bestaan.", - "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, "errorFileOperationInvalidTarget": "Kan een map niet naar zichzelf verplaatsen.", - "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, "errorFileOperationOutsideRoot": "Bestandsbewerkingen moeten binnen de werkruimte blijven.", - "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, "errorFileOperationRoot": "De hoofdmap van de werkruimte kan niet worden gewijzigd vanuit de bestandsboom.", - "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, "errorProjectNameRequired": "Projectnaam is vereist.", - "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, "errorDirectoryNameRequired": "Mapnaam is vereist.", - "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, "errorDirectoryNameUnsafe": "De mapnaam moet uit één veilig padsegment bestaan.", - "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, "errorInstanceIdInvalid": "De instantie-ID moet beginnen met een kleine letter en mag alleen kleine letters, cijfers, onderstrepingstekens en koppeltekens bevatten.", - "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, "errorTopicFileInvalid": "De onderwerpbestandsnaam moet een Markdown-bestandsnaam zijn zonder padscheidingstekens.", - "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, "errorTopicTitleRequired": "Onderwerptitel is vereist.", - "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, "errorWritersideModuleRootMissing": "De root van de Writerside-module bestaat niet: {path}", - "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideModuleNotOpen": "Er moet een Writerside-module geopend zijn om een onderwerp te kunnen maken.", - "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, "errorWritersideInstanceTreeMissing": "De Writerside-module heeft geen instantieboom.", - "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, "errorWritersideTreeFileMissing": "Writerside-treebestand bestaat niet: {path}", - "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTopicIdAlreadyExists": "Onderwerp-ID \"{topicId}\" bestaat al in deze helpmodule.", - "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, "errorTopicFileAlreadyExists": "Onderwerpbestand bestaat al: {path}", - "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorReferenceTopicMissing": "Referentieonderwerp is niet aanwezig in de geselecteerde boom: {topic}", - "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideTocNodeMissing": "Het geselecteerde TOC-item bestaat niet meer.", - "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, "errorWritersideTocInvalidMove": "Een TOC-item kan niet naar zichzelf of naar een van zijn onderliggende items worden verplaatst.", - "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, "errorWritersideStartTopicDelete": "Het startonderwerp {topic} kan niet worden verwijderd. Kies eerst een andere startpagina.", - "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Gebruik Veilig verwijderen voor Writerside-onderwerpbestanden.", - "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, "errorWritersideTopicUsageScanFailed": "Kan de onderwerpgebruikscan niet voltooien. Er zijn geen bestanden gewijzigd.", - "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Sommige verwijzingen naar onderwerpen vereisen nog aandacht. Controleer ze voordat u verdergaat.", - "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Het geselecteerde omleidingsdoel is niet langer geldig. Kies het opnieuw.", - "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Het verwijderen van het onderwerp kan niet volledig worden teruggedraaid. Bekijk deze paden voordat u verdergaat: {paths}", - "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorTopicsRootUnsafe": "De hoofdmap van Onderwerpen moet een veilige relatieve map zijn.", - "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, "errorTopicFileNameUnsafe": "De onderwerpbestandsnaam moet uit één veilig padsegment bestaan.", - "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, "errorTopicFileExtensionMismatch": "De onderwerpbestandsextensie moet overeenkomen met het geselecteerde formaat ({extension}).", - "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "errorTopicFileNameInvalid": "De bestandsnaam van het onderwerp mag alleen letters, cijfers, onderstrepingstekens en koppeltekens bevatten.", - "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, "errorUnknown": "Onbekende fout: {code}", - "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileStatFailed": "Kan de metadata van het bestand niet lezen: {error}", - "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceScanSkipped": "Grote werkruimte gedetecteerd. Sommige bestanden zijn overgeslagen om de app responsief te houden.", - "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, "diagnosticWorkspaceScanInspectFailed": "Kan werkruimte-item niet inspecteren: {error}", - "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileTooLarge": "Bestand is groter dan de limiet voor automatisch parseren van de bèta.", - "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, "diagnosticWorkspaceFileReadFailed": "Kon het Markdown-bestand niet lezen: {error}", - "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticMarkdownAttributeMalformed": "Ongeldig opgemaakt kopattribuutblok in Writerside.", - "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, "diagnosticMarkdownHeadingDuplicateId": "Dubbele kop-ID \"{id}\".", - "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTopicH1ConvertedToChapter": "Extra H1-koppen op het hoogste niveau worden behandeld als hoofdstukken.", - "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, - "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown-onderwerp heeft geen H1- of voorwerktitel.", - "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown-onderwerp heeft geen H1 of front matter-titel.", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, "diagnosticWritersideXmlTopicMissingTitle": "XML-onderwerp mist titel.", - "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, "diagnosticWritersideTopicFileMissingTitle": "Onderwerp \"{fileName}\" mist een titel.", - "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "diagnosticMarkdownFrontMatterMalformed": "Frontmatter is niet afgesloten.", - "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, "diagnosticMarkdownRawHtmlUnsafe": "Onveilig HTML-element.", - "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, "diagnosticMarkdownLinkUnresolvedTarget": "Linkdoel bestaat niet: {targetPath}", - "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "diagnosticMarkdownLinkUnresolvedAnchor": "Anker \"{anchor}\" bestaat niet.", - "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingAlt": "Afbeelding \"{destination}\" mist alt-tekst.", - "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingFile": "Afbeelding bestaat niet: {destination}", - "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticInvalidXml": "Ongeldige XML: {message}", - "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, "diagnosticWritersideConfigInvalidRoot": "writerside.cfg root moet zijn.", - "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, "diagnosticWritersideConfigMissingSnippetsSrc": "snippets-declaratie ontbreekt src.", - "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups-declaratie ontbreekt src.", - "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, "diagnosticWritersideConfigInvalidKeymapsMode": "Niet-ondersteunde toetsenbordmodus: {mode}", - "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceSrc": "Instance-declaratie ontbreekt src.", - "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, "diagnosticWritersideConfigMissingInstance": "writerside.cfg registreert geen instantie.", - "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, "diagnosticWritersideTreeInvalidRoot": ".tree root moet zijn.", - "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, "diagnosticWritersideTreeMissingId": "Instantieprofiel mist ID.", - "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, "diagnosticWritersideTreeIdMismatch": "Boombestandsstam komt niet overeen met instantie-ID '{id}'.", - "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeMissingStartPage": "Niet-bibliotheekinstantie mist startpagina.", - "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, "diagnosticWritersideStartPageMissing": "Startpagina \"{startPage}\" bestaat niet.", - "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, "diagnosticWritersideTreeDuplicateTopic": "Onderwerp \"{topic}\" komt meer dan één keer voor in de inhoudsopgave van deze instantie.", - "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideVariableMalformedDeclaration": "Variabeledeclaratie moet een naam en waarde hebben.", - "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, "diagnosticWritersideVariableDuplicateName": "Variabele \"{name}\" wordt meer dan één keer gedeclareerd.", - "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryMissingId": "Categorie mist ID.", - "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, "diagnosticWritersideCategoryDuplicateId": "Categorie \"{id}\" wordt meer dan één keer gedeclareerd.", - "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryDuplicateOrder": "Categorievolgorde '{order}' wordt meer dan één keer gedeclareerd.", - "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, "diagnosticWritersideTopicInvalidRoot": ".topic root moet zijn.", - "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, "diagnosticWritersideTopicMissingRootId": "XML-onderwerp mist root-ID.", - "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, "diagnosticWritersideTopicRootIdMismatch": "XML-onderwerphoofd-id \"{id}\" moet overeenkomen met de bestandsnaam \"{expectedId}\".", - "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateElementId": "Element-ID \"{elementId}\" komt meerdere keren voor.", - "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAnchorMissingHref": " mist href.", - "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, "diagnosticWritersideConfigMissing": "Voor de Writerside-modus is writerside.cfg vereist.", - "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, "diagnosticWritersideConfigMissingBuildConfigDirectory": "De geconfigureerde build-configuratiemap ontbreekt: {relativePath}", - "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "De geconfigureerde map met API-specificaties ontbreekt: {relativePath}", - "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingSnippetsDirectory": "De map met geconfigureerde fragmenten ontbreekt: {relativePath}", - "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingVarsFile": "Het geconfigureerde variabelenbestand ontbreekt: {relativePath}", - "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingCategoriesFile": "Het geconfigureerde categorieënbestand ontbreekt: {relativePath}", - "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceGroupsFile": "Het geconfigureerde instantiegroepenbestand ontbreekt: {relativePath}", - "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceTree": "Geregistreerde instantiestructuur \"{source}\" bestaat niet.", - "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideTopicReadFailed": "Kan onderwerpbestand niet lezen: {error}", - "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWritersideDefaultTopicsDirectoryMissing": "Standaard onderwerpenmap ontbreekt: {relativePath}", - "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicsDirectoryMissing": "De map met geconfigureerde onderwerpen ontbreekt: {relativePath}", - "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideImagesDirectoryMissing": "Geconfigureerde afbeeldingenmap ontbreekt: {relativePath}", - "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateId": "Element-ID \"{id}\" komt meerdere keren voor.", - "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, - "diagnosticWritersideTreeMissingTopic": "TOC-referenties ontbreken onderwerp \"{topic}\".", - "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingTopic": "De inhoudsopgave verwijst naar het ontbrekende onderwerp \"{topic}\".", + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideTreeInvalidHref": "Externe href \"{href}\" is ongeldig.", - "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, "diagnosticWritersideVariableUnresolved": "Variabele \"%{name}%\" is niet gedeclareerd.", - "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideTopicLinkUnresolved": "Onderwerplink \"{destination}\" werkt niet.", - "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticWritersideAnchorUnresolved": "Anker \"{anchor}\" bestaat niet in \"{targetName}\".", - "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, - "diagnosticWritersideIncludeMissingFrom": " ontbreekt in.", - "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, - "diagnosticWritersideIncludeSourceMissing": "Bron \"{from}\" opnemen bestaat niet.", - "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": " ontbreekt in het from-attribuut.", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, + "diagnosticWritersideIncludeSourceMissing": "Includebron \"{from}\" bestaat niet.", + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, "diagnosticWritersideIncludeElementMissing": "Include-element \"{elementId}\" bestaat niet in \"{from}\".", - "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, - "diagnosticWritersideCategoryUnresolved": "Zie ook categorie \"{ref}\" wordt niet gedeclareerd.", - "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "seealso-categorie \"{ref}\" is niet gedeclareerd.", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAmbiguousReference": "Onderwerpreferentie \"{reference}\" is dubbelzinnig.", - "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, "diagnosticUnknown": "Onbekende diagnose: {code}", - "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, "close": "Sluiten", - "@close": {"description":"Close action label."}, + "@close": { + "description": "Close action label." + }, "git": "Git", - "@git": {"description":"Git sidebar tab label."}, + "@git": { + "description": "Git sidebar tab label." + }, "gitDiff": "Git diff", - "@gitDiff": {"description":"Title for the Git diff viewer."}, + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, "gitShowDiff": "Verschil tonen", - "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "oud {oldRange} → nieuw {newRange}", - "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, "gitDiffNoLines": "geen regels", - "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git is niet beschikbaar", - "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, "gitUnavailableMessage": "{reason, select, other{Installeer Git of configureer BusyMark om een beschikbaar Git-uitvoerbaar bestand te gebruiken. {reason}}}", - "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, "gitTrustRequiredTitle": "Deze werkruimte vertrouwen voor Git?", - "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Git-repository's kunnen programma's uitvoeren via hooks, filters en andere configuraties. Vertrouw deze werkruimte voordat BusyMark repositorygegevens leest of Git-acties inschakelt.", - "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Werkruimte vertrouwen", - "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Geen Git-repository", - "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, "gitNotRepositoryMessage": "Deze werkruimte bevindt zich niet in een Git-repository.", - "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, - "gitInitializeRepository": "Git-opslagplaats initialiseren", - "@gitInitializeRepository": {"description":"Action label for git init."}, + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, + "gitInitializeRepository": "Git-repository initialiseren", + "@gitInitializeRepository": { + "description": "Action label for git init." + }, "gitDetachedHead": "Losgekoppelde HEAD", - "@gitDetachedHead": {"description":"Detached HEAD label."}, + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, "gitDetachedHeadAt": "Vrijstaand bij {commit}", - "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, "gitNoUpstream": "Geen upstream", - "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, "gitAheadCount": "{count, plural, =1{1 niet-gepushte commit} other{{count} niet-gepushte commits}}", - "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitBehindCount": "{count, plural, =1{1 commit om te pullen} other{{count} commits om te pullen}}", - "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, - "gitClean": "Schoon", - "@gitClean": {"description":"Git clean state label."}, + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "Geen wijzigingen", + "@gitClean": { + "description": "Git clean state label." + }, "gitConflicts": "Conflicten", - "@gitConflicts": {"description":"Git conflicts group label."}, + "@gitConflicts": { + "description": "Git conflicts group label." + }, "gitChanges": "Wijzigingen", - "@gitChanges": {"description":"Git changes view label."}, + "@gitChanges": { + "description": "Git changes view label." + }, "gitStaged": "Gestaged", - "@gitStaged": {"description":"Git staged changes group label."}, + "@gitStaged": { + "description": "Git staged changes group label." + }, "gitUnstaged": "Niet-gestaged", - "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, "gitHistory": "Geschiedenis", - "@gitHistory": {"description":"Git history view label."}, + "@gitHistory": { + "description": "Git history view label." + }, "gitBranches": "Takken", - "@gitBranches": {"description":"Git branch menu label."}, + "@gitBranches": { + "description": "Git branch menu label." + }, "gitActions": "Git-acties", - "@gitActions": {"description":"Tooltip for the Git action menu button."}, - "gitPull": "Pull", - "@gitPull": {"description":"Git pull action label."}, - "gitFetch": "Fetch", - "@gitFetch": {"description":"Git fetch action label."}, + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, + "gitPull": "Git pull", + "@gitPull": { + "description": "Git pull action label." + }, + "gitFetch": "Git fetch", + "@gitFetch": { + "description": "Git fetch action label." + }, "gitPush": "Push", - "@gitPush": {"description":"Git push action label."}, + "@gitPush": { + "description": "Git push action label." + }, "gitCommit": "Commit", - "@gitCommit": {"description":"Git commit action label."}, + "@gitCommit": { + "description": "Git commit action label." + }, "gitSelectForCommit": "Voor commit selecteren", - "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, "gitRemoveFromCommit": "Bestand uit staging verwijderen", - "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, "gitDiscard": "Wijzigingen verwerpen", - "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, "gitOpenFile": "Bestand openen", - "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, "gitMarkResolved": "Als opgelost markeren", - "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, "gitUntracked": "Niet-getrackt", - "@gitUntracked": {"description":"Git untracked files group label."}, + "@gitUntracked": { + "description": "Git untracked files group label." + }, "gitCommitMessage": "Commitbericht", - "@gitCommitMessage": {"description":"Commit message field label."}, - "gitCommitSelectedFiles": "Geselecteerde bestanden committen", - "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "@gitCommitMessage": { + "description": "Commit message field label." + }, + "gitCommitSelectedFiles": "Geselecteerde bestanden", + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, "gitCommitNoSelectedFiles": "Stage ten minste één bestand voordat u commit.", - "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, "gitStagedFileCount": "{count, plural, =1{1 gestaged bestand} other{{count} gestagede bestanden}}", - "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitOutsideWorkspace": "Buiten werkruimte", - "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, "gitCommitMessageRequired": "Voer een commit-bericht in.", - "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, "gitCreateBranch": "Branch maken", - "@gitCreateBranch": {"description":"Git create branch action label."}, + "@gitCreateBranch": { + "description": "Git create branch action label." + }, "gitNewBranch": "Nieuwe branch", - "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, "gitBranchName": "Branchnaam", - "@gitBranchName": {"description":"Branch name field label."}, + "@gitBranchName": { + "description": "Branch name field label." + }, "gitSwitchBranch": "Branch wisselen", - "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, "gitNoChanges": "Geen wijzigingen", - "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, "gitNoHistory": "Geen geschiedenis", - "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, "gitNoBranches": "Geen branches", - "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, "gitNoDiff": "Geen verschil om te laten zien", - "@gitNoDiff": {"description":"Git diff empty state."}, + "@gitNoDiff": { + "description": "Git diff empty state." + }, "gitBinaryFile": "Binair bestand. BusyMark geeft geen binaire patches weer.", - "@gitBinaryFile": {"description":"Git diff binary file message."}, + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, "gitBinaryFileInfo": "Binair bestand ({size} bytes). BusyMark geeft geen binaire patches weer.", - "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, "gitUnsavedChangesBanner": "Niet-opgeslagen editorwijzigingen worden pas opgenomen nadat ze zijn opgeslagen.", - "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, - "gitConfirmDiscardTitle": "Git-wijzigingen negeren?", - "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, + "gitConfirmDiscardTitle": "Git-wijzigingen verwerpen?", + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, "gitConfirmDiscardTracked": "{count, plural, =1{Alle gestagede en niet-gestagede wijzigingen in het geselecteerde getrackte bestand worden teruggezet naar HEAD.} other{Alle gestagede en niet-gestagede wijzigingen in de geselecteerde getrackte bestanden worden teruggezet naar HEAD.}}", - "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardUntracked": "{count, plural, =1{Het geselecteerde niet-getrackte bestand wordt verwijderd.} other{De geselecteerde niet-getrackte bestanden worden verwijderd.}}", - "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardMixed": "{count, plural, =1{Het geselecteerde bestand wordt teruggezet of verwijderd op basis van de Git-status.} other{De geselecteerde bestanden worden teruggezet of verwijderd op basis van hun Git-status.}}", - "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmSwitchBranchTitle": "Overstappen naar {branch}?", - "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitConfirmSwitchBranchMessage": "BusyMark laadt de werkruimte opnieuw vanaf schijf nadat Git van branch is gewisseld.", - "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, "gitConfirmPushSetUpstreamTitle": "Upstream-branch instellen?", - "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, "gitConfirmPushSetUpstreamMessage": "Deze branch heeft geen upstream. BusyMark kan {branch} pushen en de upstream instellen als er precies één remote is geconfigureerd.", - "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitProjectHistory": "Projectgeschiedenis", - "@gitProjectHistory": {"description":"Project history action label."}, - "gitFileHistory": "Bestandsgeschiedenis", - "@gitFileHistory": {"description":"Current file history action label."}, + "@gitProjectHistory": { + "description": "Project history action label." + }, + "gitFileHistory": "Bestandshistorie", + "@gitFileHistory": { + "description": "Current file history action label." + }, "gitFileHistoryRequiresOpenFile": "Bestandsgeschiedenis vereist een geopend Markdown-bestand.", - "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, "gitLoadMore": "Meer laden", - "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, "gitChangesInCommit": "Wijzigingen in deze commit", - "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, "gitCompareWithCurrent": "Vergelijk met actueel", - "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, "gitRestoreVersion": "Herstel deze versie", - "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, "gitConfirmRestoreTitle": "Deze bestandsversie herstellen?", - "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, "gitConfirmRestoreMessage": "BusyMark vervangt het huidige werkboombestand door de geselecteerde vastgelegde versie. Het herstelde bestand blijft niet-gestaged.", - "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, "gitCommitActions": "Commitacties", - "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, "gitResetCurrentBranchToHere": "Huidige branch resetten naar hier…", - "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, "gitResetCurrentBranchTitle": "Branch {branch} resetten naar {commit}?", - "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitResetCurrentBranchMessage": "Dit verplaatst branch {branch} naar commit {commit}. Kies hoe Git de index en werkboom bijwerkt.", - "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitReset": "Resetten", - "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, "gitResetModeSoft": "Soft", - "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, "gitResetModeSoftDescription": "Verplaats alleen de branch. Houd de index en werkboom ongewijzigd; verschillen met de geselecteerde commit blijven gestaged.", - "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, "gitResetModeMixed": "Mixed", - "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, "gitResetModeMixedDescription": "Verplaats de branch en reset de index. Houd de werkboom ongewijzigd; de verschillen worden niet-gestaged.", - "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, "gitResetModeHard": "Hard", - "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, "gitResetModeHardDescription": "Verplaats de branch en reset de index en werkboom. Wijzigingen in getrackte bestanden worden genegeerd; niet-getrackte bestanden die in de weg staan kunnen worden verwijderd.", - "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, "gitResetModeKeep": "Keep", - "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, "gitResetModeKeepDescription": "Verplaats de branch en reset getrackte bestanden met behoud van lokale wijzigingen. Git wordt afgebroken als deze wijzigingen in conflict komen met de reset.", - "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, "gitAdditionsDeletions": "+{additions} -{deletions}", - "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, "fileActions": "Bestandsacties", - "@fileActions": {"description":"Tooltip for a file action menu."}, + "@fileActions": { + "description": "Tooltip for a file action menu." + }, "actions": "Acties", - "@actions": {"description":"Tooltip for a general action menu."}, + "@actions": { + "description": "Tooltip for a general action menu." + }, "gitStatusAdded": "Toegevoegd", - "@gitStatusAdded": {"description":"Git file status label."}, + "@gitStatusAdded": { + "description": "Git file status label." + }, "gitStatusDeleted": "Verwijderd", - "@gitStatusDeleted": {"description":"Git file status label."}, + "@gitStatusDeleted": { + "description": "Git file status label." + }, "gitStatusRenamed": "Hernoemd", - "@gitStatusRenamed": {"description":"Git file status label."}, + "@gitStatusRenamed": { + "description": "Git file status label." + }, "gitStatusCopied": "Gekopieerd", - "@gitStatusCopied": {"description":"Git file status label."}, + "@gitStatusCopied": { + "description": "Git file status label." + }, "gitStatusUntracked": "Niet-getrackt", - "@gitStatusUntracked": {"description":"Git file status label."}, + "@gitStatusUntracked": { + "description": "Git file status label." + }, "gitStatusConflicted": "In conflict", - "@gitStatusConflicted": {"description":"Git file status label."}, + "@gitStatusConflicted": { + "description": "Git file status label." + }, "gitStatusIgnored": "Genegeerd", - "@gitStatusIgnored": {"description":"Git file status label."}, + "@gitStatusIgnored": { + "description": "Git file status label." + }, "gitStatusTypeChanged": "Soort gewijzigd", - "@gitStatusTypeChanged": {"description":"Git file status label."}, + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, "gitStatusModified": "Gewijzigd", - "@gitStatusModified": {"description":"Git file status label."}, + "@gitStatusModified": { + "description": "Git file status label." + }, "gitStatusUnknown": "Onbekend", - "@gitStatusUnknown": {"description":"Git file status label."}, + "@gitStatusUnknown": { + "description": "Git file status label." + }, "gitErrorUnavailable": "Git is niet beschikbaar.", - "@gitErrorUnavailable": {"description":"Git error message."}, + "@gitErrorUnavailable": { + "description": "Git error message." + }, "gitErrorNotRepository": "Deze werkruimte is geen Git-opslagplaats.", - "@gitErrorNotRepository": {"description":"Git error message."}, + "@gitErrorNotRepository": { + "description": "Git error message." + }, "gitErrorUnsafePath": "BusyMark heeft een onveilig Git-pad geblokkeerd.", - "@gitErrorUnsafePath": {"description":"Git error message."}, + "@gitErrorUnsafePath": { + "description": "Git error message." + }, "gitErrorInvalidBranchName": "Voer een geldige branchnaam in.", - "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, "gitErrorNoRemote": "Er is geen Git-remote geconfigureerd.", - "@gitErrorNoRemote": {"description":"Git error message."}, + "@gitErrorNoRemote": { + "description": "Git error message." + }, "gitErrorNoUpstream": "Er is geen upstream-branch geconfigureerd.", - "@gitErrorNoUpstream": {"description":"Git error message."}, + "@gitErrorNoUpstream": { + "description": "Git error message." + }, "gitErrorMultipleRemotes": "Er zijn meerdere remotes geconfigureerd. Kies een upstream buiten deze versie van BusyMark.", - "@gitErrorMultipleRemotes": {"description":"Git error message."}, + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, "gitErrorDirtyWorkspace": "Sla wijzigingen in de BusyMark-editor op of verwerp ze voordat u van branch wisselt.", - "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, "gitErrorResetDirtyWorkspace": "Sla wijzigingen in de BusyMark-editor op of verwerp ze voordat u de huidige branch reset.", - "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, "gitErrorRestoreStagedFile": "Haal dit bestand eerst uit staging voordat u een historische versie herstelt.", - "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, "gitErrorResetDetachedHead": "Checkout eerst een branch voordat u deze reset.", - "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, "gitErrorDiverged": "De branches zijn uiteen gelopen. Los het samenvoegen of opnieuw baseren buiten deze versie van BusyMark op.", - "@gitErrorDiverged": {"description":"Git error message."}, + "@gitErrorDiverged": { + "description": "Git error message." + }, "gitErrorAuthorIdentity": "Git heeft een auteursnaam en e-mailadres nodig voordat het kan committen.", - "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, "gitAuthorIdentityTitle": "Git-auteuridentiteit", - "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, "gitAuthorIdentityMessage": "Voer de identiteit in die Git moet vastleggen bij commits. BusyMark zal het opslaan en deze commit opnieuw proberen.", - "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, "gitAuthorName": "Naam", - "@gitAuthorName": {"description":"Git commit author name field label."}, + "@gitAuthorName": { + "description": "Git commit author name field label." + }, "gitAuthorEmail": "E-mail", - "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, "gitAuthorIdentityGlobal": "Gebruik voor alle opslagplaatsen", - "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, "gitAuthorIdentityGlobalDescription": "Als BusyMark als Snap is geïnstalleerd, geldt dit voor alle opslagplaatsen die in BusyMark worden geopend.", - "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, "gitSaveIdentityAndCommit": "Identiteit opslaan en committen", - "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, "gitErrorAuthentication": "Git-authenticatie is mislukt.", - "@gitErrorAuthentication": {"description":"Git error message."}, + "@gitErrorAuthentication": { + "description": "Git error message." + }, "gitErrorNetwork": "Git-netwerkbewerking is mislukt.", - "@gitErrorNetwork": {"description":"Git error message."}, + "@gitErrorNetwork": { + "description": "Git error message." + }, "gitErrorConflict": "Git rapporteerde onopgeloste conflicten.", - "@gitErrorConflict": {"description":"Git error message."}, + "@gitErrorConflict": { + "description": "Git error message." + }, "gitErrorCommandFailed": "Git-opdracht is mislukt.", - "@gitErrorCommandFailed": {"description":"Git error message."}, + "@gitErrorCommandFailed": { + "description": "Git error message." + }, "markdownAndHtml": "Markdown en HTML", - "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdown-blokken", - "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Blokstructuren ondersteund in Markdown-bron en preview.", - "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Inline-opmaak", - "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Opmaak die kan verschijnen in alinea's, lijstitems en tabelcellen.", - "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Ruwe HTML-blokken", - "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Veilige HTML-tags op blokniveau weergegeven via BusyMark-voorbeeldwidgets.", - "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Onbewerkte HTML-inlinetags", - "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Veilige inline HTML-tags weergegeven zonder letterlijke tags weer te geven.", - "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Veiligheidsregels", - "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Onbewerkte HTML wordt geparseerd en opgeschoond voordat de preview wordt weergegeven.", - "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Koppen", - "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Paragrafen", - "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Lijsten", - "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Containers", - "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Tekstblokken", - "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Figuren en afbeeldingen", - "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Voorgeformatteerde code", - "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Openklapbare blokken", - "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Beschrijvingslijsten", - "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Opmaaktags", - "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Inline codetags", - "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Semantische inline-tags", - "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Opgeschoond voorbeeld", - "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Toegestane HTML wordt geconverteerd naar BusyMark-voorbeeldblokken en niet weergegeven in een browser.", - "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Bron behouden", - "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Ruwe HTML wordt exact als brontekst opgeslagen.", - "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown binnen HTML", - "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-markeringen in onbewerkte HTML worden weergegeven als letterlijke tekst.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Actieve inhoud geblokkeerd", - "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Scripts, stijlen, frames, formulieren, SVG, MathML, gebeurtenissen en onveilige attributen worden geblokkeerd.", - "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Alleen veilige URL's", - "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Links staan http-, https-, mailto-, tel-, relatieve en fragment-URL's toe; onveilige schema's worden geblokkeerd.", - "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "exportAsPdf": "Exporteren als PDF", - "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, "pdfExportDescription": "Kies de pagina-indeling voor een verzorgde, op zichzelf staande PDF.", - "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "Externe afbeeldingen worden tijdens het exporteren niet gedownload. Lokale afbeeldingen zijn inbegrepen indien beschikbaar.", - "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "Paginagrootte", - "@pdfPageSize": {"description":"PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "Letter", - "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "Oriëntatie", - "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "Portret", - "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "Landschap", - "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "Marges", - "@pdfMargins": {"description":"PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "Smal", - "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "Normaal", - "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "Breed", - "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "Voeg paginanummers toe", - "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "Exporteren", - "@export": {"description":"Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "PDF exporteren…", - "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "PDF-document", - "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "{fileName} is geëxporteerd.", - "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, - "pdfExportedWithWarnings": "{fileName} is geëxporteerd met {count} waarschuwing(en).", - "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} is geëxporteerd met {count, plural, =1{1 waarschuwing} other{{count} waarschuwingen}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "Het PDF-exportonderdeel ontbreekt. Installeer BusyMark opnieuw en probeer het opnieuw.", - "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "De PDF-export duurde te lang en werd gestopt.", - "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark kon dit document niet als PDF exporteren.", - "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Renderen…", - "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, "visualizationStale": "Laatste geldige weergave wordt getoond", - "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, "visualizationShowSource": "Bron tonen", - "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, "visualizationShowRender": "Render weergeven", - "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, - "visualizationFitWidth": "Aan breedte aanpassen", - "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, + "visualizationFitWidth": "Passend maken op breedte", + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, "visualizationSaveImage": "Afbeelding opslaan", - "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, "visualizationCopyImage": "Afbeelding kopiëren", - "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, "visualizationImageCopied": "Afbeelding gekopieerd", - "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, "visualizationOpenApiReference": "Open API-referentie", - "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, "visualizationValid": "Geldig", - "@visualizationValid": {"description":"OpenAPI validation success state."}, + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, "visualizationInvalid": "Ongeldig", - "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, "visualizationServers": "Servers", - "@visualizationServers": {"description":"OpenAPI server count label."}, + "@visualizationServers": { + "description": "OpenAPI server count label." + }, "visualizationPaths": "Paden", - "@visualizationPaths": {"description":"OpenAPI path count label."}, + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, "visualizationOperations": "Operaties", - "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, "visualizationTags": "Labels", - "@visualizationTags": {"description":"OpenAPI tag summary label."}, + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, "visualizationNoOperations": "Geen overeenkomende bewerkingen", - "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, "visualizationSearchOperations": "Zoekbewerkingen", - "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, "visualizationRenderFailed": "Deze visualisatie kon niet worden weergegeven.", - "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, "visualizationRetry": "Opnieuw proberen", - "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, "visualizationSaved": "{fileName} opgeslagen", - "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "shortcutExportPdfDescription": "Exporteer het actieve document of de Writerside-module als PDF.", - "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "instances": "Instanties", - "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, "newInstance": "Nieuwe instantie", - "@newInstance": {"description":"Action that creates a Writerside instance."}, + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, "newTocLibrary": "Nieuwe TOC-bibliotheek", - "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, "editInstance": "Instantie bewerken", - "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, "openTocFile": "TOC-bestand openen", - "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, "createInstance": "Instantie maken", - "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, "createTocLibrary": "TOC-bibliotheek maken", - "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, "instanceContent": "Inhoud", - "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, "instanceContentSource": "Maken vanuit", - "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, "emptyInstance": "Lege instantie", - "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, "markdownFiles": "Lokale Markdown-bestanden", - "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, "chooseMarkdownFolder": "Kies de Markdown-map", - "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, "errorWritersideInstanceImportSourceRequired": "Kies een map met Markdown-bestanden.", - "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, "instanceAppearance": "Uiterlijk", - "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, "instanceColor": "Pictogramkleur", - "@instanceColor": {"description":"Writerside instance icon-color field."}, + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, "instanceVersion": "Versie", - "@instanceVersion": {"description":"Writerside instance version field."}, + "@instanceVersion": { + "description": "Writerside instance version field." + }, "instanceVersionInherited": "De projectversie is {version} als dit veld leeg is.", - "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, "instanceWebPath": "Webpad", - "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, "instanceStatus": "Status", - "@instanceStatus": {"description":"Writerside instance status field."}, + "@instanceStatus": { + "description": "Writerside instance status field." + }, "instanceStatusRelease": "Release", - "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, "instanceStatusEap": "EAP", - "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, "instanceStatusDeprecated": "Verouderd", - "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, "allowSearchEngineIndexing": "Sta zoekmachine-indexering toe", - "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, "allowSearchEngineIndexingDescription": "Laat externe zoekmachines deze uitvoer indexeren.", - "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, "offlineArtifact": "Offline artefact", - "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, "offlineArtifactDescription": "Bundel bronnen zodat de gebouwde documentatie op zichzelf staat.", - "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, "instanceOutputSettings": "Uitvoerinstellingen", - "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, "markdownImportSource": "Markdown-bron", - "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, "markdownImportFiles": "Markdown-bestanden", - "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, "selectNone": "Selecteer geen", - "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, "markdownFilesFound": "{count} Markdown-bestand(en) gevonden", - "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noMarkdownFilesFound": "Er zijn geen Markdown-bestanden gevonden in deze map.", - "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, "copyReferencedMedia": "Kopieer de media waarnaar wordt verwezen", - "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, "copyReferencedMediaDescription": "Kopieer lokale afbeeldingen en video waarnaar door de geselecteerde bestanden wordt verwezen, terwijl de relatieve paden behouden blijven.", - "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, "instanceIdRenameWarningTitle": "Naam van instantie-ID wijzigen?", - "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, - "instanceIdRenameWarning": "BusyMark zal de naam van het .tree-bestand hernoemen en de Writerside-projectreferenties bijwerken van “{oldId}” naar “{newId}”. Publicatiescripts worden niet gewijzigd en moeten afzonderlijk worden bijgewerkt.", - "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, + "instanceIdRenameWarning": "BusyMark hernoemt het .tree-bestand en werkt de Writerside-projectreferenties bij van “{oldId}” naar “{newId}”. Publicatiescripts worden niet gewijzigd en moeten afzonderlijk worden bijgewerkt.", + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, "renameAndUpdateReferences": "Hernoem en update referenties", - "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, "tocLibraryDescription": "Een TOC-bibliotheek slaat herbruikbare secties op en produceert geen eigen uitvoer.", - "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, "defaultTocLibraryName": "Gedeelde inhoudsopgave", - "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, "instanceColorAutomatic": "Automatisch", - "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, "instanceColorBlue": "Blauw", - "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, "instanceColorGreen": "Groen", - "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, "instanceColorOrange": "Oranje", - "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, "instanceColorPurple": "Paars", - "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, "instanceColorRed": "Rood", - "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, "instanceColorTeal": "Turkoois", - "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, "instanceColorYellow": "Geel", - "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, "errorWritersideInstanceNameRequired": "Voer een instantienaam in.", - "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, "errorWritersideInstanceIdExists": "Er bestaat al een instantie met ID “{id}”.", - "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "errorWritersideInstanceTreeExists": "De instantiestructuur bestaat al: {path}", - "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSourceMissing": "De Markdown-bronmap bestaat niet: {path}", - "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSelectionRequired": "Selecteer ten minste één Markdown-bestand om te importeren.", - "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, "errorWritersideInstanceImportFileInvalid": "Dit is geen leesbaar Markdown-bestand binnen de geselecteerde bron: {path}", - "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportTargetExists": "Importeren zou een bestaand projectbestand overschrijven: {path}", - "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceFilesChanged": "Instantiebestanden gewijzigd op schijf. Bekijk ze en probeer het opnieuw.", - "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, "errorWritersideInstanceRollbackFailed": "BusyMark kon de wijziging aan de instantie niet volledig ongedaan maken. Controleer deze bestanden voordat u verdergaat: {paths}", - "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorWritersideInstanceLibraryImport": "Een inhoudsopgavebibliotheek kan geen Markdown-onderwerpen importeren.", - "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, - "errorWritersideInstanceWebPathInvalid": "Het webpad moet uit één segment bestaan.", - "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, + "errorWritersideInstanceWebPathInvalid": "Het webpad moet uit één regel bestaan.", + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, "errorWritersideInstanceConfigurationInvalid": "De Writerside-instantieconfiguratie is ongeldig. Corrigeer de diagnose en probeer het opnieuw.", - "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, "errorWritersideInstanceTemporaryFile": "BusyMark kon de wijzigingen aan de instantie niet veilig doorvoeren.", - "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, "diagnosticWritersideTreeInvalidStatus": "Onbekende instantiestatus '{status}'. Gebruik release, eap of deprecated.", - "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, "diagnosticWritersideDuplicateInstanceId": "De instantie-ID “{id}” wordt door meer dan één boombestand gebruikt.", - "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml moet een hoofdelement hebben.", - "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, - "diagnosticWritersideBuildProfilesInvalidBoolean": "De waarde voor {name} “{value}” moet waar of onwaar zijn.", - "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "De waarde voor {name} “{value}” moet true of false zijn.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfileMissingInstance": "Een -element moet een instantie-ID specificeren.", - "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, "diagnosticWritersideTreeInvalidInclude": "Een boom moet zowel from als element-id specificeren.", - "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, "diagnosticWritersideTreeMissingSnippetId": "Een boom moet een ID specificeren.", - "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, "diagnosticWritersideTreeInvalidCrossInstanceReference": "Een TOC-referentie tussen meerdere instanties moet zowel ref als in specificeren.", - "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, "diagnosticWritersideTreeConflictingTargets": "Een TOC-element kan niet meer dan één onderwerp, referentie, link of omleiding targeten.", - "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, "diagnosticWritersideTreeDuplicateElementId": "Boomelement-ID “{id}” wordt meer dan één keer gedeclareerd.", - "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideInstanceGroupsInvalidRoot": "Het instantiegroepenbestand moet een hoofdelement hebben.", - "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, "diagnosticWritersideInstanceGroupInvalid": "Een instantiegroep moet een niet-lege ID en lijst met instanties opgeven.", - "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, "diagnosticWritersideInstanceGroupDuplicateId": "Instantiegroep-ID '{id}' wordt meer dan één keer gedeclareerd.", - "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideExternalTreeInclude": "TOC include “{source}#{id}” behoort tot de externe module “{origin}” en kan niet worden uitgebreid in deze werkruimte.", - "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, "diagnosticWritersideTreeIncludeElementMissing": "Boomelement “{id}” bestaat niet in de geregistreerde boom “{source}”.", - "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeCircularInclude": "Boom include “{source}#{id}” creëert een cyclus.", - "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideUnknownInstanceGroup": "Instantievoorwaarde verwijst naar onbekende groep “@{group}”.", - "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceInstanceMissing": "Referentie voor meerdere instanties is gericht op onbekende instantie '{instance}'.", - "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceTopicMissing": "Onderwerp “{topic}” bevindt zich niet in de instantie waarnaar wordt verwezen “{instance}”.", - "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, "download": "Downloaden", - "@download": {"description":"Button label that downloads a required component."}, + "@download": { + "description": "Button label that downloads a required component." + }, "exportWritersideAsPdf": "Exporteer Writerside als PDF", - "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, "writersidePdfContent": "Inhoud exporteren", - "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, "writersidePdfPage": "Pagina", - "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, "exportingWritersidePdf": "Writerside-PDF exporteren...", - "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, "ai": "AI", - "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, "aiLocalOllama": "Lokale Ollama", - "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, "aiDisabled": "Uitgeschakeld", - "@aiDisabled": {"description":"AI provider option that disables AI features."}, - "aiLocalOnlyDescription": "AI-bewerking is uitsluitend lokaal. BusyMark stuurt alleen de weergegeven context naar de geselecteerde provider en past nooit een voorstel toe zonder beoordeling.", - "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, "aiProvider": "AI-provider", - "@aiProvider": {"description":"Label for an AI provider selection."}, + "@aiProvider": { + "description": "Label for an AI provider selection." + }, "aiDefaultProvider": "Standaardprovider", - "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, "aiConfigureProvider": "Provider configureren", - "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, "aiChooseProvider": "Kies een AI-provider", - "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, "aiOllamaEndpoint": "Ollama-eindpunt", - "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, "aiOllamaModel": "Ollama-model", - "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, "aiTestConnection": "Verbinding testen", - "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, "aiTestingConnection": "Testen…", - "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, "aiConnectionReady": "Verbonden. {count} geïnstalleerde modellen gevonden.", - "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiNoModels": "Geen model geselecteerd.", - "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, "aiConnectionFailed": "BusyMark kon het genereren van AI-tekst niet verifiëren.", - "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, "aiConfigureFirst": "Schakel een AI-provider in en verifieer een model in Instellingen → AI.", - "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, "aiEditWithAi": "Bewerken met AI", "aiRefineWithAi": "Verfijn met AI", - "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, "aiInstruction": "Instructie", "aiChangeTarget": "Wat kan er veranderen", "aiSharedContext": "Context gedeeld met AI", @@ -1793,105 +4341,276 @@ "aiContextCurrentSection": "Huidige sectie", "aiContextCompleteDocument": "Volledig document", "aiGenerating": "Voorstel genereren…", - "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, "aiProposal": "AI-voorstel", - "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, "aiGenerateProposal": "Voorstel genereren", - "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, "aiContextDisclosure": "De geselecteerde provider ontvangt {count} tekens uit de weergegeven context.", - "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiOriginal": "Origineel", - "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, "aiSuggested": "Voorgesteld", - "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, "aiApplyProposal": "Voorstel toepassen", - "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, "aiTokenUsage": "{input} invoertokens · {output} uitvoertokens", - "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiStaleProposal": "Het document is gewijzigd terwijl dit voorstel werd gegenereerd. Voer de actie opnieuw uit.", - "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, "gitAiStagedChangesChanged": "De gestagede wijzigingen zijn gewijzigd terwijl dit commitbericht werd gegenereerd. Voer de actie opnieuw uit.", - "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, "aiViewContext": "Verzonden context bekijken", - "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, "aiReviewExactContent": "Controleer de exacte inhoud", - "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, "aiContentToChange": "Te wijzigen inhoud", - "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, "aiContentSentToAi": "Inhoud verzonden naar AI", - "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, "aiApiKey": "API-sleutel", - "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, "aiApiKeyStoredHint": "Er wordt een sleutel opgeslagen in het systeemreferentiearchief", - "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, "aiApiKeyEnterHint": "Voer de API-sleutel van de provider in", - "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, "aiReplaceApiKey": "Vervang de API-sleutel", - "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, "aiSaveApiKey": "API-sleutel veilig opslaan", - "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, "aiRemoveApiKey": "Opgeslagen API-sleutel verwijderen", - "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, "aiCredentialSaved": "API-sleutel opgeslagen in het systeemreferentiesarchief.", - "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, "aiCredentialRemoved": "De opgeslagen API-sleutel is verwijderd.", - "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, "aiModelRouting": "Modelroutering", - "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, "aiAutomaticRouting": "Automatisch per taak", - "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, "aiFixedModelRouting": "Gebruik het geselecteerde model", - "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, "aiPreferredModel": "Voorkeursmodel", - "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, "aiModel": "Model", - "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, "aiUsageThisMonth": "{requests} verzoeken · {input} invoertokens · {output} uitvoertokens", - "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiCloudConsentTitle": "Inhoud naar {provider} sturen?", - "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentEnable": "Schakel {provider} in", - "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentMessage": "Alleen de inhoud die in elk AI-beoordelingsdialoogvenster wordt weergegeven, wordt verzonden. Verzoeken zijn staatloos, voorstellen moeten worden beoordeeld en de API-sleutel wordt opgeslagen in het referentiearchief van het Linux-systeem.", - "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, "aiCloudConsentRequired": "Bevestig eerst het delen van gegevens door {provider} in Instellingen → AI.", - "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiGenerationVerified": "Generatie geverifieerd met {model}. {count} compatibele model(len) beschikbaar.", - "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "aiColdStartObserved": "Er werd een lokale koude start waargenomen.", - "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, "aiNoCompatibleModels": "Er is geen compatibel model voor tekstgeneratie beschikbaar.", - "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, "aiEnableProvider": "Schakel eerst een AI-provider in.", - "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, "aiDraftCommitMessage": "Concept commit-bericht", - "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, "aiDrafting": "Opstellen…", - "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, "aiDraftWithAi": "Met AI opstellen", - "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, "generateOrUpdateMarkdownToc": "Inhoudsopgave genereren/bijwerken", - "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, "markdownTocTitle": "Inhoudsopgave", - "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, "markdownTocUpdated": "Inhoudsopgave bijgewerkt met {count} vermeldingen.", - "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "markdownTocNoHeadings": "Voeg ten minste één sectiekop toe voordat u een inhoudsopgave genereert.", - "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, "markdownTocMalformedMarkers": "De BusyMark-inhoudsopgavemarkeringen ontbreken, zijn gedupliceerd of zijn niet in de juiste volgorde.", - "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, "diagnosticMarkdownHeadingSkippedLevel": "Kopniveau {level} volgt niveau {previousLevel}; controleer de nesting van secties.", - "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, "diagnosticMarkdownLinkEmptyText": "Linktekst is leeg. Geef een toegankelijke naam op die het doel ervan beschrijft.", - "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, "diagnosticMarkdownLinkReviewText": "Controleer of de linktekst “{text}” het doel ervan in de context beschrijft.", - "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, "diagnosticMarkdownTableEmptyHeader": "De cellen van de tabelkop moeten hun kolommen identificeren; voltooi elke lege kop.", - "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, "mathRenderFailed": "De wiskundige uitdrukking kon niet worden weergegeven.", - "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, "inlineMath": "Inline wiskunde", - "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."}, + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, "displayMath": "Wiskunde weergeven", - "@displayMath": {"description":"Editor action that inserts a display mathematical expression."} + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + }, + "aiExplicitEditingDescription": "AI-bewerking is expliciet. BusyMark stuurt alleen de weergegeven context naar de geselecteerde provider en past nooit een voorstel toe zonder beoordeling.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 399adcd4..4fc73cd9 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,8 +329,12 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageKorean": "한국어", "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Usuń wybrany element w widoku Pliki lub usuń wybrany temat ze spisu treści", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Ogólne", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Wstaw wcięcie", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Wstaw wcięcie w miejscu kursora", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Zmniejsz wcięcie źródła", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Usuń jeden poziom wcięcia w trybie Źródło", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Zamknij wyszukiwanie lub wyczyść zaznaczenie bloków", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Prywatność", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Wczytuj obrazy zdalne", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Zezwalaj na wczytywanie obrazów w podglądzie Markdown i edytorze z adresów URL http i https.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Wyczyść uprawnienia do obrazów zdalnych", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Zapomnij obszary robocze, którym zezwolono na wczytywanie obrazów zdalnych.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Wyczyść zaufane obszary robocze Git", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Pytaj przed włączeniem funkcji Git w zaufanych wcześniej obszarach roboczych.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Okno", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Otwieraj poprzedni obszar roboczy przy uruchamianiu", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Otwórz obszar roboczy i karty z poprzedniej sesji podczas uruchamiania BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Potwierdzaj zamknięcie przy niezapisanych zmianach", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -897,7 +928,9 @@ "description": "HTML block command label." }, "htmlContentDefault": "Treść HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "Wstaw lub edytuj blok HTML", "@shortcutHtmlBlockDescription": { "description": "Keyboard shortcut description for inserting or editing an HTML block." @@ -1099,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Zablokowano obraz zdalny", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Wybierz, czy BusyMark może wczytywać obrazy zdalne.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Obrazy zdalne są zablokowane", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Ten dokument odwołuje się do obrazów z internetu. Ich wczytanie może ujawnić informacje o twojej sieci serwerom udostępniającym te obrazy.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Wczytaj w tym obszarze roboczym", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Zawsze wczytuj obrazy zdalne", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Ukryj panel boczny", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1350,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Poprzednie dopasowanie", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Następne dopasowanie", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "Uwzględniaj wielkość liter", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Całe słowo", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Wyrażenie regularne", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Nieprawidłowe wyrażenie regularne", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Duży plik: podświetlanie i zwijanie są wstrzymane", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Brak treści do przeczytania", "admonition": "Adnotacja", "quote": "Cytat", @@ -2201,25 +2259,39 @@ "git": "Git", "gitDiff": "Różnice Git", "gitShowDiff": "Pokaż różnice", - "@gitShowDiff": {"description": "Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "stary zakres {oldRange} → nowy zakres {newRange}", "@gitDiffHunkRange": { "description": "Readable old-to-new line range shown for a Git diff hunk.", "placeholders": { - "oldRange": {"type": "String"}, - "newRange": {"type": "String"} + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } } }, "gitDiffNoLines": "brak wierszy", - "@gitDiffNoLines": {"description": "Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git jest niedostępny", "gitUnavailableMessage": "{reason, select, other{Zainstaluj Git lub skonfiguruj BusyMark tak, aby używał dostępnego pliku wykonywalnego Git. {reason}}}", "gitTrustRequiredTitle": "Zaufać temu obszarowi roboczemu na potrzeby Git?", - "@gitTrustRequiredTitle": {"description": "Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Repozytoria Git mogą uruchamiać programy za pomocą hooków, filtrów i innych elementów konfiguracji. Zaufaj temu obszarowi roboczemu, zanim BusyMark odczyta dane repozytorium lub włączy działania Git.", - "@gitTrustRequiredMessage": {"description": "Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Zaufaj obszarowi roboczemu", - "@gitTrustWorkspace": {"description": "Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "To nie jest repozytorium Git", "gitNotRepositoryMessage": "Ten obszar roboczy nie znajduje się w repozytorium Git.", "gitInitializeRepository": "Zainicjuj repozytorium", @@ -2261,15 +2333,15 @@ "gitBinaryFile": "Plik binarny. BusyMark nie wyświetla binarnych poprawek.", "gitUnsavedChangesBanner": "Niezapisane zmiany w edytorze nie zostaną uwzględnione, dopóki ich nie zapiszesz.", "gitConfirmDiscardTitle": "Odrzucić zmiany Git?", - "gitConfirmDiscardTracked": "{count, plural, one{Wybrany śledzony plik zostanie przywrócony z Git.} few{Wybrane śledzone pliki zostaną przywrócone z Git.} many{Wybrane śledzone pliki zostaną przywrócone z Git.} other{Wybrane śledzone pliki zostaną przywrócone z Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Wszystkie oznaczone i nieoznaczone zmiany w wybranym śledzonym pliku zostaną przywrócone do HEAD.} other{Wszystkie oznaczone i nieoznaczone zmiany w wybranych śledzonych plikach zostaną przywrócone do HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, one{Wybrany nieśledzony plik zostanie usunięty.} few{Wybrane nieśledzone pliki zostaną usunięte.} many{Wybrane nieśledzone pliki zostaną usunięte.} other{Wybrane nieśledzone pliki zostaną usunięte.}}", "gitConfirmDiscardMixed": "{count, plural, one{Wybrany plik zostanie przywrócony lub usunięty zależnie od jego stanu Git.} few{Wybrane pliki zostaną przywrócone lub usunięte zależnie od ich stanu Git.} many{Wybrane pliki zostaną przywrócone lub usunięte zależnie od ich stanu Git.} other{Wybrane pliki zostaną przywrócone lub usunięte zależnie od ich stanu Git.}}", "gitConfirmSwitchBranchTitle": "Przełączyć na {branch}?", "gitConfirmSwitchBranchMessage": "BusyMark ponownie wczyta obszar roboczy z dysku po przełączeniu gałęzi przez Git.", "gitConfirmPushSetUpstreamTitle": "Ustawić gałąź upstream?", "gitConfirmPushSetUpstreamMessage": "Ta gałąź nie ma gałęzi upstream. BusyMark może wypchnąć gałąź {branch} i ustawić ją jako upstream, jeśli skonfigurowano dokładnie jedno repozytorium zdalne.", - "gitProjectHistory": "Projekt", - "gitFileHistory": "Bieżący plik", + "gitProjectHistory": "Historia projektu", + "gitFileHistory": "Historia pliku", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Działania na pliku", "actions": "Działania", @@ -2304,73 +2376,138 @@ "gitErrorNetwork": "Operacja sieciowa Git nie powiodła się.", "gitErrorConflict": "Git zgłosił nierozwiązane konflikty.", "gitErrorCommandFailed": "Polecenie Git nie powiodło się.", - "markdownAndHtml": "Markdown i HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Bloki Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Struktury blokowe obsługiwane w źródle Markdown i podglądzie.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Markdown w tekście", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Formatowanie w akapitach, elementach list i komórkach tabel.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Surowe bloki HTML", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Bezpieczne blokowe tagi HTML renderowane przez widżety podglądu BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Surowe tagi HTML w tekście", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Bezpieczne tagi HTML w tekście renderowane bez pokazywania dosłownych tagów.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Reguły bezpieczeństwa", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Surowy HTML jest analizowany i oczyszczany przed renderowaniem podglądu.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Nagłówki", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Akapity", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Listy", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Kontenery", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Bloki tekstowe", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Figury i obrazy", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Kod preformatowany", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Bloki rozwijane", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Listy opisów", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Tagi formatowania", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Tagi kodu w tekście", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Semantyczne tagi tekstu", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Oczyszczony podgląd", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Dozwolony HTML jest konwertowany na bloki podglądu BusyMark, a nie renderowany w przeglądarce.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Źródło jest zachowane", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Nieedytowany surowy HTML jest zapisywany dokładnie jako tekst źródłowy.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown wewnątrz HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Znaczniki Markdown wewnątrz surowego HTML są wyświetlane jako tekst dosłowny.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Zablokowana aktywna zawartość", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Skrypty, style, ramki, formularze, SVG, MathML, zdarzenia i niebezpieczne atrybuty są blokowane.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Tylko bezpieczne adresy URL", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Łącza dopuszczają http, https, mailto, tel, względne adresy URL i fragmenty; niebezpieczne schematy są blokowane.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Dodaj do Git", "delete": "Usuń", "newFile": "Nowy plik", @@ -2388,101 +2525,294 @@ "errorFileOperationOutsideRoot": "Operacja na pliku musi pozostać w obrębie obszaru roboczego.", "errorFileOperationRoot": "Nie można zmienić katalogu głównego obszaru roboczego z poziomu drzewa plików.", "safeDeleteTopicFile": "Bezpiecznie usuń plik tematu…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Usuń element spisu treści", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Przejrzyj użycia", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Usuń plik tematu", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Usuń", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Usuń „{topic}” z wybranej instancji. Plik tematu zostanie zachowany.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Usuń „{topic}” i bezpiecznie zaktualizuj odwołania do niego w całym tym projekcie Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, one{1 temat podrzędny zostanie przeniesiony o poziom wyżej.} few{{count} tematy podrzędne zostaną przeniesione o poziom wyżej.} many{{count} tematów podrzędnych zostanie przeniesionych o poziom wyżej.} other{{count} tematu podrzędnego zostanie przeniesione o poziom wyżej.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Ten temat jest używany jako strona początkowa instancji. Przejrzyj jego użycia i przypisz inną stronę początkową przed kontynuowaniem.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Użycia ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Nie znaleziono odwołań, które przestałyby działać.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark znalazł następujące odwołania do tego tematu.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Elementy spisu treści", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Strony początkowe", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Linki do tematów", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Dołączenia", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, one{1 użycie} few{{count} użycia} many{{count} użyć} other{{count} użycia}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Opcje refaktoryzacji", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Aktualizuj użycia automatycznie", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Usuń odwołania w spisie treści i dołączenia oraz zachowaj tekst linków.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Niektóre użycia wymagają ręcznych zmian przed tą refaktoryzacją.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Ustaw przekierowanie do", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Nie przekierowuj starej opublikowanej strony.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Cel przekierowania", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Przejrzyj i zaktualizuj pozostałe użycia przed kontynuowaniem albo włącz automatyczne aktualizacje, jeśli są dostępne.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Użycia tematu {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Nie znaleziono użyć", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "poza wybraną instancją", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Wykonaj refaktoryzację", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Plik tematu nie jest już używany", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Zachowaj plik tematu", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "„{topic}” nie jest już używany nigdzie w tym projekcie Writerside. Usuń plik albo zachowaj go do użycia w innej instancji.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Użyj bezpiecznego usuwania dla plików tematów Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "Nie udało się zakończyć wyszukiwania użyć tematu. Nie zmieniono żadnych plików.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Niektóre użycia tematu nadal wymagają uwagi. Przejrzyj je przed kontynuowaniem.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Wybrany cel przekierowania nie jest już prawidłowy. Wybierz go ponownie.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Nie udało się całkowicie wycofać usunięcia tematu. Przed kontynuowaniem przejrzyj te ścieżki: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "Eksportuj jako PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Wybierz układ strony dla dopracowanego, samodzielnego pliku PDF.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "Obrazy zdalne nie są pobierane podczas eksportu. Dostępne obrazy lokalne zostaną dołączone.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Rozmiar strony", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "US Letter", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Orientacja", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Pionowa", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Pozioma", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Marginesy", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Wąskie", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Normalne", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Szerokie", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Dodaj numery stron", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Eksportuj", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "Eksportowanie PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "Dokument PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "Wyeksportowano {fileName}.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "Wyeksportowano {fileName}. Obrazy, których nie udało się dołączyć: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "Brakuje składnika eksportu PDF. Zainstaluj ponownie BusyMark i spróbuj jeszcze raz.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "Eksport PDF trwał zbyt długo i został zatrzymany.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark nie mógł wyeksportować tego dokumentu jako PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "Eksportuj jako PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Wybierz układ strony dla dopracowanego, samodzielnego pliku PDF.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Obrazy zdalne nie są pobierane podczas eksportu. Dostępne obrazy lokalne zostaną dołączone.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Rozmiar strony", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "US Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Orientacja", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Pionowa", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Pozioma", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Marginesy", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Wąskie", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Normalne", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Szerokie", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Dodaj numery stron", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Eksportuj", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "Eksportowanie PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "Dokument PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "Wyeksportowano {fileName}.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} został wyeksportowany z {count, plural, =1{1 ostrzeżeniem} other{{count} ostrzeżeniami}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "Brakuje składnika eksportu PDF. Zainstaluj ponownie BusyMark i spróbuj jeszcze raz.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "Eksport PDF trwał zbyt długo i został zatrzymany.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark nie mógł wyeksportować tego dokumentu jako PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Renderowanie…", "visualizationStale": "Wyświetlanie ostatniego poprawnego renderingu", "visualizationShowSource": "Pokaż źródło", @@ -2503,11 +2833,14 @@ "visualizationRenderFailed": "Nie udało się wyrenderować tej wizualizacji.", "visualizationRetry": "Spróbuj ponownie", "visualizationSaved": "Zapisano {fileName}", - "shortcutExportPdfDescription": "Eksportuj aktywny dokument lub moduł Writerside jako PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "Eksportuj aktywny dokument lub moduł Writerside jako PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "W indeksie", "gitUnstaged": "Poza indeksem", "gitFetch": "Pobierz", - "gitStagedFileCount": "{count, plural, =1{1 plik w indeksie} other{{count} plików w indeksie}}", + "gitStagedFileCount": "{count, plural, =1{1 plik w indeksie} few{{count} pliki w indeksie} many{{count} plików w indeksie} other{{count} plików w indeksie}}", "gitOutsideWorkspace": "Poza obszarem roboczym", "gitFileHistoryRequiresOpenFile": "Historia pliku wymaga otwartego pliku Markdown.", "gitLoadMore": "Wczytaj więcej", @@ -2620,7 +2953,6 @@ "ai": "SI", "aiLocalOllama": "Lokalny Ollama", "aiDisabled": "Wyłączone", - "aiLocalOnlyDescription": "Edycja z użyciem SI jest uruchamiana wyłącznie jawnie. BusyMark wysyła do wybranego dostawcy tylko pokazany kontekst i nigdy nie stosuje propozycji bez jej sprawdzenia.", "aiProvider": "Dostawca SI", "aiDefaultProvider": "Domyślny dostawca", "aiConfigureProvider": "Skonfiguruj dostawcę", @@ -2704,7 +3036,7 @@ "tableAlignmentCenter": "Wyrównanie: do środka", "tableAlignmentRight": "Wyrównanie: do prawej", "sourceSearchReplacement": "Zamień na", - "sourceSearchReplaceCurrent": "Zamień bieżące", + "sourceSearchReplaceCurrent": "Zamień bieżące dopasowanie", "sourceSearchReplaceAndFindNext": "Zamień i znajdź następne", "sourceSearchReplaceAll": "Zamień wszystko", "workspaceReplace": "Zamień w obszarze roboczym", @@ -2734,14 +3066,18 @@ "reloadFromDisk": "Wczytaj ponownie z dysku", "keepMine": "Zachowaj moją wersję", "saveAs": "Zapisz jako", - "unsavedChangesMultipleMessage": "{count} dokumenty zawierają niezapisane zmiany. Zapisać je przed kontynuowaniem?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 dokument ma niezapisane zmiany. Zapisz go przed kontynuowaniem.} other{{count} dokumenty mają niezapisane zmiany. Zapisz każdy przed kontynuowaniem.}}", "workspaceReplaceIssuePartialConflict": "Wycofywanie zatrzymano, ponieważ plik został jednocześnie zmieniony. Niektóre zamiany mogą pozostać; zastąpioną zawartość zachowano w poniższej ścieżce.", "workspaceReplaceIssueApplyFailed": "Nie zastosowano żadnych zamian, ponieważ sprawdzonego zestawu nie można było bezpiecznie zapisać.", - "workspaceRecoveryRestored": "Odzyskano {count} niezapisanych dokumentów. Przejrzyj każdy odzyskany dokument przed kontynuowaniem.", - "workspaceRecoveryDamaged": "Nie udało się przywrócić {count} uszkodzonych rekordów odzyskiwania. Prawidłowe odzyskane dokumenty są nadal dostępne.", + "workspaceRecoveryRestored": "{count, plural, =1{Przywrócono 1 dokument bez zapisania. Przed zapisaniem lub usunięciem sprawdź go.} other{Przywrócono {count} dokumentów bez zapisania. Sprawdź każdy przed zapisaniem lub usunięciem.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Nie udało się przywrócić 1 uszkodzonego rekordu odzyskiwania. Oryginalny plik odzyskiwania zachowano do przeglądu.} other{Nie udało się przywrócić {count} uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.}}", "recoveredDocumentReview": "Odzyskano niezapisaną treść pliku {fileName}. Przejrzyj ją, a następnie zapisz, zapisz jako lub odrzuć.", "commandUnavailableInContext": "To polecenie nie jest dostępne w bieżącym kontekście.", "mathRenderFailed": "Nie udało się wyrenderować wyrażenia matematycznego.", "inlineMath": "Matematyka w tekście", - "displayMath": "Matematyka blokowa" + "displayMath": "Matematyka blokowa", + "aiExplicitEditingDescription": "Edycja z użyciem SI jest uruchamiana wyłącznie jawnie. BusyMark wysyła do wybranego dostawcy tylko pokazany kontekst i nigdy nie stosuje propozycji bez jej sprawdzenia.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 5867c6e1..66838741 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -1,2729 +1,3 @@ { - "@@locale": "pt", - "reportIssue": "Comunicar um problema", - "feedbackCategory": "Categoria", - "feedbackChooseCategory": "Escolha uma categoria", - "feedbackCategoryProblem": "Problema ou erro", - "feedbackCategoryFeature": "Pedido de funcionalidade", - "feedbackCategoryPrivacySecurity": "Preocupação com privacidade ou segurança", - "feedbackCategoryUsability": "Preocupação de usabilidade", - "feedbackCategoryOther": "Outro", - "feedbackSubject": "Assunto", - "feedbackMessage": "Mensagem detalhada", - "feedbackReplyEmail": "E-mail para resposta (opcional)", - "feedbackIncludeTechnicalDetails": "Incluir detalhes técnicos", - "feedbackTechnicalDetailsDisclosure": "Quando esta opção está ativada, são adicionados apenas a versão do sistema operativo Linux e as definições regionais da aplicação BusyMark. Não são anexados registos, ficheiros, dados de conta nem outros diagnósticos.", - "feedbackSubmit": "Enviar", - "feedbackSubmitting": "A enviar…", - "feedbackCategoryRequired": "Escolha uma categoria.", - "feedbackSubjectLength": "O assunto deve ter entre 3 e 120 carateres.", - "feedbackMessageLength": "A mensagem deve ter entre 10 e 5000 carateres.", - "feedbackReplyEmailInvalid": "Introduza um endereço de e-mail válido ou deixe este campo vazio.", - "feedbackConnectionFailure": "O BusyMark não conseguiu estabelecer ligação. Verifique a ligação à Internet e tente novamente.", - "feedbackTimeoutFailure": "O pedido excedeu o tempo limite. Tente novamente.", - "feedbackRateLimitedFailure": "Foram enviados demasiados relatórios a partir desta ligação. Aguarde e tente novamente.", - "feedbackRejectedFailure": "O servidor rejeitou o relatório. Verifique os campos do formulário e tente novamente.", - "feedbackServerFailure": "O servidor não conseguiu aceitar o relatório. Tente novamente mais tarde.", - "feedbackSuccess": "Comentários enviados. ID de referência: {id}", - "appTitle": "BusyMark", - "@appTitle": { - "description": "Application name." - }, - "appSubtitle": "Editor de arquivos Markdown e projetos de documentação compatíveis com o Writerside.", - "@appSubtitle": { - "description": "Short application description." - }, - "aboutBusyMark": "Sobre BusyMark", - "@aboutBusyMark": { - "description": "Menu item and tooltip for the About dialog." - }, - "aboutTagline": "Editor de Markdown e Writerside", - "@aboutTagline": { - "description": "Short tagline shown under the app name in the About dialog." - }, - "aboutLicenseLabel": "Licença", - "@aboutLicenseLabel": { - "description": "Label for the license row in the About dialog." - }, - "aboutLicenseName": "Apache License 2.0", - "@aboutLicenseName": { - "description": "Formal license name shown in the About dialog. Keep the legal license name exact." - }, - "aboutWebsite": "Site", - "@aboutWebsite": { - "description": "Label for the website row in the About dialog." - }, - "aboutSourceCode": "Código-fonte", - "@aboutSourceCode": { - "description": "Label for the source-code repository row in the About dialog." - }, - "advanced": "Avançado", - "@advanced": { - "description": "Settings section title for advanced actions." - }, - "appearance": "Aparência", - "@appearance": { - "description": "Settings section title for appearance options." - }, - "apply": "Aplicar", - "@apply": { - "description": "Button label that applies a dialog change." - }, - "back": "Voltar", - "@back": { - "description": "Tooltip for navigating back." - }, - "bottomLeft": "Canto inferior esquerdo", - "@bottomLeft": { - "description": "Editing button position option." - }, - "bottomRight": "Canto inferior direito", - "@bottomRight": { - "description": "Editing button position option." - }, - "cancel": "Cancelar", - "@cancel": { - "description": "Cancel button label." - }, - "choose": "Escolher", - "@choose": { - "description": "Button label for choosing a file or path." - }, - "chooseLocation": "Escolher local", - "@chooseLocation": { - "description": "File picker confirmation label for choosing a directory." - }, - "copy": "Copiar", - "@copy": { - "description": "Copy command label." - }, - "copyName": "Copiar nome", - "@copyName": { - "description": "Menu action that copies the selected file, folder, or workspace name." - }, - "copyFileName": "Copiar nome do arquivo", - "@copyFileName": { - "description": "Menu action that copies the active document file name." - }, - "copyPath": "Copiar caminho", - "@copyPath": { - "description": "Menu action that copies the selected file, folder, or workspace path." - }, - "create": "Criar", - "@create": { - "description": "Create action label." - }, - "creating": "Criando...", - "@creating": { - "description": "Progress label while a project or topic is being created." - }, - "cut": "Recortar", - "@cut": { - "description": "Cut command label." - }, - "promoteSection": "Promover seção", - "demoteSection": "Rebaixar seção", - "moveSectionUp": "Mover seção para cima", - "moveSectionDown": "Mover seção para baixo", - "confirmDeleteSectionTitle": "Excluir seção?", - "confirmDeleteSectionMessage": "Excluir “{name}” e todo o conteúdo da seção? Isso não pode ser desfeito.", - "darkTheme": "Escuro", - "@darkTheme": { - "description": "Dark theme option." - }, - "discard": "Descartar", - "@discard": { - "description": "Discard unsaved changes button label." - }, - "editor": "Editor", - "@editor": { - "description": "Editor view label." - }, - "file": "Arquivo", - "@file": { - "description": "Generic file kind label." - }, - "fileHistory": "Histórico do arquivo", - "@fileHistory": { - "description": "Menu action and sidebar title for showing Git history for a single file." - }, - "folder": "Pasta", - "@folder": { - "description": "Folder kind label." - }, - "insert": "Inserir", - "@insert": { - "description": "Insert button label." - }, - "keyboardShortcuts": "Atalhos de teclado", - "@keyboardShortcuts": { - "description": "Keyboard shortcuts dialog title and menu item." - }, - "lightTheme": "Claro", - "@lightTheme": { - "description": "Light theme option." - }, - "mainMenu": "Menu principal", - "@mainMenu": { - "description": "Native header bar main menu tooltip." - }, - "fullScreen": "Tela cheia", - "@fullScreen": { - "description": "Command that toggles full-screen window mode." - }, - "markdown": "Markdown", - "@markdown": { - "description": "Markdown format label." - }, - "open": "Abrir", - "@open": { - "description": "Open action label." - }, - "openInFiles": "Abrir em Arquivos", - "@openInFiles": { - "description": "Menu action that opens the selected file or folder location in the system file manager." - }, - "pathActions": "Ações do caminho", - "@pathActions": { - "description": "Tooltip for the workspace path action menu button." - }, - "outline": "Estrutura", - "@outline": { - "description": "Outline sidebar tab label." - }, - "overwrite": "Sobrescrever", - "@overwrite": { - "description": "Button label for overwriting a changed file." - }, - "paste": "Colar", - "@paste": { - "description": "Paste command label." - }, - "pasteWithoutFormatting": "Colar sem formatar", - "@pasteWithoutFormatting": { - "description": "Plain text paste command label." - }, - "reading": "Leitura", - "@reading": { - "description": "Reading view label." - }, - "removeFromRecent": "Remover dos recentes", - "recent": "Recentes", - "@recent": { - "description": "Recent workspaces section title." - }, - "redo": "Refazer", - "@redo": { - "description": "Redo command label." - }, - "save": "Salvar", - "@save": { - "description": "Save action label." - }, - "search": "Pesquisar", - "@search": { - "description": "Search action label and field hint." - }, - "selectAll": "Selecionar tudo", - "@selectAll": { - "description": "Select all command label." - }, - "settings": "Configurações", - "@settings": { - "description": "Settings action label." - }, - "source": "Código-fonte", - "@source": { - "description": "Source view label." - }, - "split": "Dividido", - "@split": { - "description": "Split view label." - }, - "systemTheme": "Sistema", - "@systemTheme": { - "description": "System theme option." - }, - "theme": "Tema", - "@theme": { - "description": "Theme setting label." - }, - "appLanguage": "Idioma", - "@appLanguage": { - "description": "Application language setting label." - }, - "systemLanguage": "Sistema", - "@systemLanguage": { - "description": "Language selector option that follows the operating system locale." - }, - "languageEnglish": "English", - "@languageEnglish": { - "description": "Language selector option for English." - }, - "languageGerman": "Deutsch", - "@languageGerman": { - "description": "Language selector option for German." - }, - "languageDutch": "Nederlands", - "@languageDutch": { - "description": "Language selector option for Dutch." - }, - "languageTurkish": "Türkçe", - "@languageTurkish": { - "description": "Language selector option for Turkish." - }, - "languageItalian": "Italiano", - "@languageItalian": { - "description": "Language selector option for Italian." - }, - "languageNorwegian": "Norsk", - "@languageNorwegian": { - "description": "Language selector option for Norwegian." - }, - "languageFrench": "Français", - "@languageFrench": { - "description": "Language selector option for French." - }, - "languageRussian": "Русский", - "@languageRussian": { - "description": "Language selector option for Russian." - }, - "languageUkrainian": "Українська", - "@languageUkrainian": { - "description": "Language selector option for Ukrainian." - }, - "languagePolish": "Polski", - "@languagePolish": { - "description": "Language selector option for Polish." - }, - "languageSpanish": "Español", - "@languageSpanish": { - "description": "Language selector option for Spanish." - }, - "languagePortuguese": "Português", - "@languagePortuguese": { - "description": "Language selector option for Portuguese." - }, - "languageArabic": "العربية", - "@languageArabic": { - "description": "Language selector option for Arabic." - }, - "languagePersian": "فارسی", - "@languagePersian": { - "description": "Language selector option for Persian." - }, - "languageHindi": "हिन्दी", - "@languageHindi": { - "description": "Language selector option for Hindi." - }, - "languageIndonesian": "Bahasa Indonesia", - "@languageIndonesian": { - "description": "Language selector option for Indonesian." - }, - "languageEstonian": "Eesti", - "@languageEstonian": { - "description": "Language selector option for Estonian." - }, - "languageVietnamese": "Tiếng Việt", - "@languageVietnamese": { - "description": "Language selector option for Vietnamese." - }, - "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, - "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, - "languageSimplifiedChinese": "简体中文", - "@languageSimplifiedChinese": { - "description": "Language selector option for Simplified Chinese." - }, - "toggleSidebar": "Painel lateral", - "@toggleSidebar": { - "description": "Native header bar sidebar toggle tooltip." - }, - "topLeft": "Canto superior esquerdo", - "@topLeft": { - "description": "Editing button position option." - }, - "topRight": "Canto superior direito", - "@topRight": { - "description": "Editing button position option." - }, - "undo": "Desfazer", - "@undo": { - "description": "Undo command label." - }, - "validate": "Validar", - "@validate": { - "description": "Validate action label." - }, - "validation": "Validação", - "@validation": { - "description": "Settings section title for validation options." - }, - "viewMode": "Modo de exibição", - "@viewMode": { - "description": "Native header bar view mode control label." - }, - "welcome": "Bem-vindo", - "@welcome": { - "description": "Welcome screen label and tooltip." - }, - "writerside": "Writerside", - "@writerside": { - "description": "Writerside workspace kind label." - }, - "xml": "XML", - "@xml": { - "description": "XML format label." - }, - "fileTypeMarkdown": "Markdown", - "@fileTypeMarkdown": { - "description": "Native file picker type label for Markdown files." - }, - "fileTypeImages": "Imagens", - "@fileTypeImages": { - "description": "Native file picker type label for images." - }, - "openMarkdownFile": "Abrir arquivo Markdown", - "@openMarkdownFile": { - "description": "Action label for opening a Markdown file." - }, - "markdownFileExtensions": ".md ou .markdown", - "@markdownFileExtensions": { - "description": "Subtitle describing supported Markdown file extensions." - }, - "openFolderOrWritersideProject": "Abrir pasta ou projeto Writerside", - "@openFolderOrWritersideProject": { - "description": "Action label for opening a folder or Writerside project." - }, - "markdownFolderOrWritersideProject": "Pasta Markdown ou projeto compatível com Writerside", - "@markdownFolderOrWritersideProject": { - "description": "Subtitle describing supported folder workspace types." - }, - "noOpenFile": "Nenhum arquivo aberto", - "@noOpenFile": { - "description": "Header title when a folder or Writerside workspace has no open editor tab." - }, - "shortcutDeleteTreeItemDescription": "Excluir o item selecionado em Arquivos ou remover o tópico selecionado do sumário", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, - "shortcutGroupGeneral": "Geral", - "@shortcutGroupGeneral": { - "description": "Keyboard shortcut group for general application commands." - }, - "shortcutNewDocument": "Criar", - "@shortcutNewDocument": { - "description": "Keyboard shortcut label for creating a document." - }, - "shortcutNewDocumentDescription": "Criar arquivo Markdown ou projeto Writerside", - "@shortcutNewDocumentDescription": { - "description": "Keyboard shortcut description for creating a document." - }, - "shortcutOpenDescription": "Abrir um arquivo Markdown, uma pasta ou um projeto Writerside", - "@shortcutOpenDescription": { - "description": "Keyboard shortcut description for opening content." - }, - "shortcutSaveDescription": "Salvar o documento atual", - "@shortcutSaveDescription": { - "description": "Keyboard shortcut description for saving content." - }, - "shortcutSearchDescription": "Pesquisar no espaço de trabalho atual", - "@shortcutSearchDescription": { - "description": "Keyboard shortcut description for search." - }, - "shortcutKeyboardShortcutsDescription": "Mostrar esta referência de atalhos de teclado", - "@shortcutKeyboardShortcutsDescription": { - "description": "Keyboard shortcut description for opening shortcuts." - }, - "shortcutMarkdownAndHtmlDescription": "Abrir a referência de Markdown e HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." - }, - "shortcutSettingsDescription": "Abrir as configurações do BusyMark", - "@shortcutSettingsDescription": { - "description": "Keyboard shortcut description for opening settings." - }, - "shortcutNextTab": "Próxima guia", - "@shortcutNextTab": { - "description": "Keyboard shortcut label for moving to the next tab." - }, - "shortcutNextTabDescription": "Ir para a próxima guia aberta", - "@shortcutNextTabDescription": { - "description": "Keyboard shortcut description for moving to the next tab." - }, - "shortcutPreviousTab": "Guia anterior", - "@shortcutPreviousTab": { - "description": "Keyboard shortcut label for moving to the previous tab." - }, - "shortcutPreviousTabDescription": "Ir para a guia aberta anterior", - "@shortcutPreviousTabDescription": { - "description": "Keyboard shortcut description for moving to the previous tab." - }, - "shortcutCloseTab": "Fechar guia", - "@shortcutCloseTab": { - "description": "Keyboard shortcut label for closing the active tab." - }, - "shortcutCloseTabDescription": "Fechar a guia ativa", - "@shortcutCloseTabDescription": { - "description": "Keyboard shortcut description for closing the active tab." - }, - "shortcutCloseAllTabs": "Fechar todas as guias", - "@shortcutCloseAllTabs": { - "description": "Keyboard shortcut label for closing all tabs." - }, - "shortcutCloseAllTabsDescription": "Fechar todas as guias abertas", - "@shortcutCloseAllTabsDescription": { - "description": "Keyboard shortcut description for closing all tabs." - }, - "shortcutGroupTextEditing": "Edição de texto", - "@shortcutGroupTextEditing": { - "description": "Keyboard shortcut group for text editing commands." - }, - "shortcutSelectAllDescription": "No modo Código-fonte, selecionar todo o texto; no modo Editor, pressionar duas vezes para selecionar todos os blocos", - "@shortcutSelectAllDescription": { - "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." - }, - "shortcutCutDescription": "Recortar o texto selecionado", - "@shortcutCutDescription": { - "description": "Keyboard shortcut description for cut." - }, - "shortcutCopyDescription": "Copiar o texto selecionado", - "@shortcutCopyDescription": { - "description": "Keyboard shortcut description for copy." - }, - "shortcutPasteDescription": "Colar da área de transferência", - "@shortcutPasteDescription": { - "description": "Keyboard shortcut description for paste." - }, - "shortcutPastePlainTextDescription": "Colar o texto da área de transferência sem formatação", - "@shortcutPastePlainTextDescription": { - "description": "Keyboard shortcut description for plain text paste." - }, - "shortcutUndoDescription": "Desfazer a última edição", - "@shortcutUndoDescription": { - "description": "Keyboard shortcut description for undo." - }, - "shortcutRedoDescription": "Refazer a última edição desfeita", - "@shortcutRedoDescription": { - "description": "Keyboard shortcut description for redo." - }, - "shortcutInsertIndentation": "Inserir recuo", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, - "shortcutInsertIndentationDescription": "Inserir recuo na posição do cursor", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, - "shortcutOutdentSource": "Diminuir recuo do código-fonte", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, - "shortcutOutdentSourceDescription": "Remover um nível de recuo no modo Código-fonte", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, - "shortcutEscape": "Fechar a pesquisa ou limpar a seleção de blocos", - "@shortcutEscape": { - "description": "Keyboard shortcut label for closing search or clearing a block selection." - }, - "shortcutEscapeDescription": "Fechar a pesquisa do espaço de trabalho ou limpar uma seleção de blocos no modo Editor", - "@shortcutEscapeDescription": { - "description": "Keyboard shortcut description for closing search or clearing a block selection." - }, - "shortcutGroupFormatting": "Formatação", - "@shortcutGroupFormatting": { - "description": "Keyboard shortcut group for inline formatting." - }, - "shortcutBoldDescription": "Alternar negrito no texto selecionado", - "@shortcutBoldDescription": { - "description": "Keyboard shortcut description for bold." - }, - "shortcutItalicDescription": "Alternar itálico no texto selecionado", - "@shortcutItalicDescription": { - "description": "Keyboard shortcut description for italic." - }, - "shortcutUnderlineDescription": "Alternar sublinhado no texto selecionado", - "@shortcutUnderlineDescription": { - "description": "Keyboard shortcut description for underline." - }, - "shortcutLinkDescription": "Inserir ou editar um link", - "@shortcutLinkDescription": { - "description": "Keyboard shortcut description for link insertion." - }, - "shortcutInlineCodeDescription": "Alternar código embutido no texto selecionado", - "@shortcutInlineCodeDescription": { - "description": "Keyboard shortcut description for inline code." - }, - "shortcutStrikethroughDescription": "Alternar tachado no texto selecionado", - "@shortcutStrikethroughDescription": { - "description": "Keyboard shortcut description for strikethrough." - }, - "shortcutGroupBlocks": "Blocos", - "@shortcutGroupBlocks": { - "description": "Keyboard shortcut group for block styles." - }, - "shortcutParagraphDescription": "Definir o bloco atual como parágrafo", - "@shortcutParagraphDescription": { - "description": "Keyboard shortcut description for paragraph style." - }, - "shortcutHeading1Description": "Definir o bloco atual como Título 1", - "@shortcutHeading1Description": { - "description": "Keyboard shortcut description for heading 1." - }, - "shortcutHeading2Description": "Definir o bloco atual como Título 2", - "@shortcutHeading2Description": { - "description": "Keyboard shortcut description for heading 2." - }, - "shortcutHeading3Description": "Definir o bloco atual como Título 3", - "@shortcutHeading3Description": { - "description": "Keyboard shortcut description for heading 3." - }, - "shortcutHeading4Description": "Definir o bloco atual como Título 4", - "@shortcutHeading4Description": { - "description": "Keyboard shortcut description for heading 4." - }, - "shortcutHeading5Description": "Definir o bloco atual como Título 5", - "@shortcutHeading5Description": { - "description": "Keyboard shortcut description for heading 5." - }, - "shortcutHeading6Description": "Definir o bloco atual como Título 6", - "@shortcutHeading6Description": { - "description": "Keyboard shortcut description for heading 6." - }, - "shortcutGroupLists": "Listas", - "@shortcutGroupLists": { - "description": "Keyboard shortcut group for list commands." - }, - "numberedList": "Lista numerada", - "@numberedList": { - "description": "Keyboard shortcut label for numbered list formatting." - }, - "shortcutNumberedListDescription": "Alternar formatação de lista numerada", - "@shortcutNumberedListDescription": { - "description": "Keyboard shortcut description for numbered list." - }, - "bulletedList": "Lista com marcadores", - "@bulletedList": { - "description": "Keyboard shortcut label for bulleted list formatting." - }, - "shortcutBulletedListDescription": "Alternar formatação de lista com marcadores", - "@shortcutBulletedListDescription": { - "description": "Keyboard shortcut description for bulleted list." - }, - "checklist": "Lista de verificação", - "@checklist": { - "description": "Keyboard shortcut label for checklist formatting." - }, - "shortcutChecklistDescription": "Alternar formatação de lista de verificação", - "@shortcutChecklistDescription": { - "description": "Keyboard shortcut description for checklist." - }, - "shortcutGroupSidebar": "Barra lateral", - "@shortcutGroupSidebar": { - "description": "Keyboard shortcut group for sidebar view switching." - }, - "sidebarViewMenu": "Visualização da barra lateral", - "@sidebarViewMenu": { - "description": "Tooltip for the sidebar view selector button." - }, - "createMarkdownFile": "Criar arquivo Markdown", - "@createMarkdownFile": { - "description": "Welcome screen action for creating a Markdown file." - }, - "createMarkdownFileDescription": "Iniciar um documento Markdown local não salvo", - "@createMarkdownFileDescription": { - "description": "Welcome screen subtitle for creating a Markdown file." - }, - "createWritersideProject": "Criar projeto Writerside", - "@createWritersideProject": { - "description": "Welcome screen action for creating a Writerside project." - }, - "createWritersideProjectDescription": "Iniciar um projeto local compatível com Writerside", - "@createWritersideProjectDescription": { - "description": "Welcome screen subtitle for creating a Writerside project." - }, - "defaultProjectName": "Documentação", - "@defaultProjectName": { - "description": "Default project name shown in the create project dialog." - }, - "defaultInstanceName": "Guia do usuário", - "@defaultInstanceName": { - "description": "Default Writerside instance name shown in the create project dialog." - }, - "defaultStartTopicTitle": "Primeiros passos", - "@defaultStartTopicTitle": { - "description": "Default start topic title shown in the create project dialog." - }, - "projectName": "Nome do projeto", - "@projectName": { - "description": "Create project dialog field label." - }, - "directoryName": "Nome do diretório", - "@directoryName": { - "description": "Create project dialog field label." - }, - "instanceName": "Nome da instância", - "@instanceName": { - "description": "Create project dialog field label." - }, - "instanceId": "ID da instância", - "@instanceId": { - "description": "Create project dialog field label." - }, - "startTopicTitle": "Título do tópico inicial", - "@startTopicTitle": { - "description": "Create project dialog field label." - }, - "location": "Local", - "@location": { - "description": "Create dialog location section label." - }, - "projectNameRequired": "O nome do projeto é obrigatório.", - "@projectNameRequired": { - "description": "Validation message for missing project name." - }, - "directoryNameRequired": "O nome do diretório é obrigatório.", - "@directoryNameRequired": { - "description": "Validation message for missing directory name." - }, - "useSingleSafeDirectoryName": "Use um único nome de diretório seguro.", - "@useSingleSafeDirectoryName": { - "description": "Validation message for unsafe directory names." - }, - "useLowercaseIdentifier": "Use um identificador em minúsculas com letras, números, sublinhados ou hifens.", - "@useLowercaseIdentifier": { - "description": "Validation message for invalid Writerside instance IDs." - }, - "startTopicTitleRequired": "O título do tópico inicial é obrigatório.", - "@startTopicTitleRequired": { - "description": "Validation message for missing start topic title." - }, - "createWritersideProjectFailed": "Não foi possível criar o projeto Writerside.", - "@createWritersideProjectFailed": { - "description": "Fallback error shown when Writerside project creation fails." - }, - "settingsTitle": "Configurações do BusyMark", - "@settingsTitle": { - "description": "Settings screen title." - }, - "autoSave": "Salvamento automático", - "@autoSave": { - "description": "Editor setting label for saving files automatically." - }, - "autoSaveDescription": "Salva automaticamente as alterações do arquivo após um curto período de inatividade.", - "@autoSaveDescription": { - "description": "Editor setting description for saving files automatically." - }, - "wordWrap": "Quebra de linha", - "@wordWrap": { - "description": "Word wrap setting label." - }, - "editorFontSize": "Tamanho da fonte do editor", - "@editorFontSize": { - "description": "Editor font size setting label." - }, - "validateOnEdit": "Validar ao editar", - "@validateOnEdit": { - "description": "Validation setting label." - }, - "clearRecentWorkspaces": "Limpar espaços de trabalho recentes", - "@clearRecentWorkspaces": { - "description": "Settings action label for clearing recent workspaces." - }, - "editingButtonsPosition": "Posição dos botões de edição", - "@editingButtonsPosition": { - "description": "Settings label for WYSIWYG editing button position." - }, - "editingButtonsPositionDescription": "Escolha onde os botões flutuantes de edição WYSIWYG aparecem.", - "@editingButtonsPositionDescription": { - "description": "Description for WYSIWYG editing button position setting." - }, - "editingButtonsDirection": "Orientação dos botões de edição", - "@editingButtonsDirection": { - "description": "Settings label for WYSIWYG editing button direction." - }, - "editingButtonsDirectionDescription": "Escolha se os botões flutuantes de edição WYSIWYG ficam dispostos horizontalmente ou verticalmente.", - "@editingButtonsDirectionDescription": { - "description": "Description for WYSIWYG editing button direction setting." - }, - "horizontal": "Horizontal", - "@horizontal": { - "description": "Editing button direction option." - }, - "vertical": "Vertical", - "@vertical": { - "description": "Editing button direction option." - }, - "privacy": "Privacidade", - "@privacy": {"description": "Settings section title for privacy options."}, - "allowRemoteImages": "Carregar imagens remotas", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, - "allowRemoteImagesDescription": "Permitir que a pré-visualização do Markdown e o editor carreguem imagens de URLs HTTP e HTTPS.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, - "clearRemoteImagePermissions": "Limpar permissões de imagens remotas", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, - "clearRemoteImagePermissionsDescription": "Esquecer os espaços de trabalho autorizados a carregar imagens remotas.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, - "clearGitWorkspaceTrust": "Limpar espaços de trabalho confiáveis para o Git", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, - "clearGitWorkspaceTrustDescription": "Perguntar antes de ativar recursos do Git em espaços de trabalho considerados confiáveis anteriormente.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - - "settingsWindowSectionTitle": "Janela", - "@settingsWindowSectionTitle": { - "description": "Settings section title for native window behavior." - }, - "settingsReopenWorkspaceOnStartupTitle": "Reabrir o espaço de trabalho anterior ao iniciar", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, - "settingsReopenWorkspaceOnStartupDescription": "Abra o espaço de trabalho e as abas da sessão anterior quando o BusyMark iniciar.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, - "settingsConfirmCloseWithUnsavedChangesTitle": "Confirmar antes de fechar com alterações não salvas", - "@settingsConfirmCloseWithUnsavedChangesTitle": { - "description": "Settings switch title for close confirmation when documents have unsaved changes." - }, - "settingsConfirmCloseWithUnsavedChangesDescription": "Perguntar antes de fechar o BusyMark quando documentos tiverem alterações não salvas.", - "@settingsConfirmCloseWithUnsavedChangesDescription": { - "description": "Settings switch description for close confirmation when documents have unsaved changes." - }, - "closeUnsavedChangesTitle": "Alterações não salvas", - "@closeUnsavedChangesTitle": { - "description": "Window close confirmation dialog title when documents have unsaved changes." - }, - "closeUnsavedChangesSingleMessage": "Este documento tem alterações não salvas. Salvar as alterações antes de fechar o BusyMark?", - "@closeUnsavedChangesSingleMessage": { - "description": "Window close confirmation message when one document has unsaved changes." - }, - "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Salvar as alterações antes de fechar o BusyMark?} =1{1 documento tem alterações não salvas. Salvar as alterações antes de fechar o BusyMark?} other{{count} documentos têm alterações não salvas. Salvar as alterações antes de fechar o BusyMark?}}", - "@closeUnsavedChangesMultipleMessage": { - "description": "Window close confirmation message when multiple documents have unsaved changes.", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "closeUnsavedChangesCancel": "Cancelar", - "@closeUnsavedChangesCancel": { - "description": "Cancel button label in the window close unsaved-changes dialog." - }, - "closeUnsavedChangesDiscard": "Descartar", - "@closeUnsavedChangesDiscard": { - "description": "Discard button label in the window close unsaved-changes dialog." - }, - "closeUnsavedChangesSave": "Salvar", - "@closeUnsavedChangesSave": { - "description": "Save button label in the window close unsaved-changes dialog." - }, - "currentFile": "arquivo atual", - "@currentFile": { - "description": "Fallback file name in unsaved changes dialog." - }, - "unsavedChanges": "Alterações não salvas", - "@unsavedChanges": { - "description": "Unsaved changes dialog title." - }, - "unsavedChangesMessage": "Você tem alterações não salvas em {fileName}. Salvá-las antes de continuar?", - "@unsavedChangesMessage": { - "description": "Unsaved changes confirmation message.", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "fileChangedOnDisk": "Arquivo alterado no disco", - "@fileChangedOnDisk": { - "description": "File changed confirmation dialog title." - }, - "fileChangedOnDiskMessage": "Este arquivo foi alterado no disco desde que foi aberto. Sobrescrever?", - "@fileChangedOnDiskMessage": { - "description": "File changed confirmation dialog message." - }, - "untitledMarkdownFileName": "Sem título.md", - "@untitledMarkdownFileName": { - "description": "Display name for a new unsaved Markdown document." - }, - "unorderedList": "Lista não ordenada", - "@unorderedList": { - "description": "WYSIWYG toolbar tooltip for unordered list." - }, - "orderedList": "Lista ordenada", - "@orderedList": { - "description": "WYSIWYG toolbar tooltip for ordered list." - }, - "taskList": "Lista de tarefas", - "@taskList": { - "description": "WYSIWYG toolbar tooltip for task list." - }, - "toggleTaskChecked": "Marcar/desmarcar tarefa", - "@toggleTaskChecked": { - "description": "WYSIWYG toolbar tooltip for toggling task state." - }, - "indentListItem": "Recuar item da lista", - "@indentListItem": { - "description": "WYSIWYG toolbar tooltip for indenting a list item." - }, - "outdentListItem": "Remover recuo do item da lista", - "@outdentListItem": { - "description": "WYSIWYG toolbar tooltip for outdenting a list item." - }, - "blockquote": "Citação em bloco", - "@blockquote": { - "description": "Blockquote command label." - }, - "codeBlock": "Bloco de código", - "@codeBlock": { - "description": "Code block command or preview label." - }, - "codeBlockLanguage": "Linguagem do bloco de código", - "@codeBlockLanguage": { - "description": "Dialog title and toolbar tooltip for code block language." - }, - "image": "Imagem", - "video": "Vídeo", - "openVideo": "Reproduzir vídeo", - "pauseVideo": "Pausar vídeo", - "videoUnavailable": "Vídeo indisponível", - "videoPreview": "Pré-visualização do vídeo", - "diagnosticWritersideVideoMissingSource": "O vídeo não tem o atributo src.", - "diagnosticWritersideVideoUnsupportedSource": "Fonte de vídeo não suportada: {source}", - "diagnosticWritersideVideoMissingFile": "O ficheiro de vídeo não existe: {source}", - "diagnosticWritersideVideoMissingPreview": "A imagem de pré-visualização do vídeo não existe: {preview}", - "@image": { - "description": "Image command and document kind label." - }, - "inlineImage": "Imagem embutida", - "@inlineImage": { - "description": "Inline image command label." - }, - "table": "Tabela", - "@table": { - "description": "Table command label." - }, - "htmlBlock": "Bloco HTML", - "@htmlBlock": { - "description": "HTML block command label." - }, - "shortcutHtmlBlockDescription": "Inserir ou editar um bloco HTML", - "@shortcutHtmlBlockDescription": { - "description": "Keyboard shortcut description for inserting or editing an HTML block." - }, - "renderedHtml": "HTML renderizado", - "@renderedHtml": { - "description": "Badge label for HTML rendered in the WYSIWYG editor." - }, - "editHtml": "Editar HTML", - "@editHtml": { - "description": "Dialog title and tooltip for editing raw HTML source." - }, - "htmlSource": "Código-fonte HTML", - "@htmlSource": { - "description": "Text field label for raw HTML source." - }, - "htmlContentDefault": "Conteúdo HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, - "thematicBreak": "Separador temático", - "@thematicBreak": { - "description": "Thematic break command label." - }, - "bold": "Negrito", - "@bold": { - "description": "Bold command label." - }, - "italic": "Itálico", - "@italic": { - "description": "Italic command label." - }, - "underline": "Sublinhado", - "@underline": { - "description": "Underline command label." - }, - "strikethrough": "Tachado", - "@strikethrough": { - "description": "Strikethrough command label." - }, - "inlineCode": "Código embutido", - "@inlineCode": { - "description": "Inline code command label." - }, - "link": "Link", - "@link": { - "description": "Link command and preview label." - }, - "hardLineBreak": "Quebra de linha forçada", - "@hardLineBreak": { - "description": "Hard line break command label." - }, - "textStyle": "Estilo de texto", - "@textStyle": { - "description": "Text style menu tooltip." - }, - "paragraph": "Parágrafo", - "@paragraph": { - "description": "Paragraph style label." - }, - "heading1": "Título 1", - "@heading1": { - "description": "Heading 1 style label." - }, - "heading2": "Título 2", - "@heading2": { - "description": "Heading 2 style label." - }, - "heading3": "Título 3", - "@heading3": { - "description": "Heading 3 style label." - }, - "heading4": "Título 4", - "@heading4": { - "description": "Heading 4 style label." - }, - "heading5": "Título 5", - "@heading5": { - "description": "Heading 5 style label." - }, - "heading6": "Título 6", - "@heading6": { - "description": "Heading 6 style label." - }, - "headingLevelAbbreviation": "H{level}", - "@headingLevelAbbreviation": { - "description": "Compact outline badge for a heading level.", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "deleteTable": "Excluir tabela", - "@deleteTable": { - "description": "Tooltip for deleting a table." - }, - "tableColumnNumber": "Coluna {columnNumber}", - "@tableColumnNumber": { - "description": "Tooltip for a table column control.", - "placeholders": { - "columnNumber": { - "type": "int" - } - } - }, - "insertColumnLeft": "Inserir coluna à esquerda", - "@insertColumnLeft": { - "description": "Menu item for inserting a table column to the left." - }, - "insertColumnRight": "Inserir coluna à direita", - "@insertColumnRight": { - "description": "Menu item for inserting a table column to the right." - }, - "deleteColumn": "Excluir coluna", - "@deleteColumn": { - "description": "Menu item for deleting a table column." - }, - "tableRowNumber": "Linha {rowNumber}", - "@tableRowNumber": { - "description": "Tooltip for a table row control.", - "placeholders": { - "rowNumber": { - "type": "int" - } - } - }, - "insertRowAbove": "Inserir linha acima", - "@insertRowAbove": { - "description": "Menu item for inserting a table row above." - }, - "insertRowBelow": "Inserir linha abaixo", - "@insertRowBelow": { - "description": "Menu item for inserting a table row below." - }, - "deleteRow": "Excluir linha", - "@deleteRow": { - "description": "Menu item for deleting a table row." - }, - "tableHeaderHint": "Cabeçalho", - "@tableHeaderHint": { - "description": "Hint for an empty table header cell." - }, - "tableCellHint": "Célula", - "@tableCellHint": { - "description": "Hint for an empty table body cell." - }, - "language": "Linguagem", - "@language": { - "description": "Code block language field label." - }, - "hideEditingButtons": "Ocultar botões de edição", - "@hideEditingButtons": { - "description": "Tooltip for hiding floating editing buttons." - }, - "showEditingButtons": "Mostrar botões de edição", - "@showEditingButtons": { - "description": "Tooltip for showing floating editing buttons." - }, - "altText": "Texto alternativo", - "@altText": { - "description": "Image alt text field label." - }, - "editorPlaceholderText": "texto", - "@editorPlaceholderText": {"description": "Default selected text inserted by a source-editor formatting command."}, - "editorPlaceholderCode": "código", - "@editorPlaceholderCode": {"description": "Default selected code inserted by a source-editor code command."}, - "editorPlaceholderAltText": "texto alternativo", - "@editorPlaceholderAltText": {"description": "Default selected image description inserted by a source-editor image command."}, - "describeTheImage": "Descreva a imagem", - "@describeTheImage": { - "description": "Image alt text hint." - }, - "columns": "Colunas", - "@columns": { - "description": "Table dialog columns field label." - }, - "rows": "Linhas", - "@rows": { - "description": "Table dialog rows field label." - }, - "tableHeaderNumber": "Cabeçalho {columnNumber}", - "@tableHeaderNumber": { - "description": "Default header text for a newly inserted table column.", - "placeholders": { - "columnNumber": { - "type": "int" - } - } - }, - "tableCellDefault": "Célula", - "@tableCellDefault": { - "description": "Default cell text for newly inserted table cells." - }, - "noImageSource": "Nenhuma origem de imagem", - "@noImageSource": { - "description": "Placeholder shown when an image has no source." - }, - "remoteImageBlocked": "Imagem remota bloqueada", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, - "remoteImageBlockedTooltip": "Escolha se o BusyMark pode carregar imagens remotas.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, - "remoteImagesBlockedTitle": "As imagens remotas estão bloqueadas", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, - "remoteImagesBlockedMessage": "Este documento faz referência a imagens da Internet. Carregá-las pode revelar informações de rede ao servidor que as hospeda.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, - "loadRemoteImagesForWorkspace": "Carregar neste espaço de trabalho", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, - "alwaysLoadRemoteImages": "Sempre carregar imagens remotas", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - - "hideSidebar": "Ocultar painel lateral", - "@hideSidebar": { - "description": "Tooltip for hiding the workspace sidebar." - }, - "showSidebar": "Mostrar painel lateral", - "@showSidebar": { - "description": "Tooltip for showing the workspace sidebar." - }, - "showPreview": "Mostrar pré-visualização", - "@showPreview": { - "description": "Tooltip for showing the preview pane." - }, - "hidePreview": "Ocultar pré-visualização", - "@hidePreview": { - "description": "Tooltip for hiding the preview pane." - }, - "workspaceKindUnsavedMarkdown": "Arquivo Markdown não salvo", - "@workspaceKindUnsavedMarkdown": { - "description": "Workspace kind label for an unsaved Markdown file." - }, - "workspaceKindSingleMarkdown": "Arquivo Markdown único", - "@workspaceKindSingleMarkdown": { - "description": "Workspace kind label for a single Markdown file." - }, - "workspaceKindMarkdownFolder": "Pasta Markdown", - "@workspaceKindMarkdownFolder": { - "description": "Workspace kind label for a Markdown folder." - }, - "workspaceKindWritersideModule": "Módulo Writerside", - "@workspaceKindWritersideModule": { - "description": "Workspace kind label for a Writerside module." - }, - "problems": "Problemas", - "@problems": { - "description": "Diagnostics dialog title." - }, - "diagnosticCount": "{count, plural, =0{Nenhum diagnóstico} =1{1 diagnóstico} other{{count} diagnósticos}}", - "@diagnosticCount": { - "description": "Count of diagnostics in the workspace.", - "placeholders": { - "count": { - "type": "int" - } - } - }, - "files": "Arquivos", - "@files": { - "description": "Files sidebar tab label." - }, - "toc": "TOC", - "@toc": { - "description": "Writerside table of contents sidebar tab label." - }, - "tocActions": "Ações do sumário", - "@tocActions": { - "description": "Tooltip for the Writerside TOC action menu button." - }, - "markdownUnsaved": "Markdown - não salvo", - "@markdownUnsaved": { - "description": "Workspace detail label for an unsaved Markdown file." - }, - "workspaceDetail": "{kind} - {count, plural, =1{1 arquivo} other{{count} arquivos}}", - "@workspaceDetail": { - "description": "Workspace detail with kind and file count.", - "placeholders": { - "kind": { - "type": "String" - }, - "count": { - "type": "int" - } - } - }, - "noFiles": "Nenhum arquivo", - "@noFiles": { - "description": "Empty state shown when there are no files." - }, - "noWritersideToc": "Nenhum TOC do Writerside", - "@noWritersideToc": { - "description": "Empty state shown when there is no Writerside TOC." - }, - "tocSection": "Seção do TOC", - "@tocSection": { - "description": "Fallback label for a Writerside TOC section." - }, - "newTopic": "Novo tópico", - "@newTopic": { - "description": "Create new Writerside topic action label." - }, - "newChildTopic": "Novo subtópico", - "@newChildTopic": { - "description": "Create new child Writerside topic action label." - }, - "newSiblingTopic": "Novo tópico no mesmo nível", - "@newSiblingTopic": { - "description": "Create new sibling Writerside topic action label." - }, - "renameTopicFile": "Renomear arquivo do tópico", - "@renameTopicFile": { - "description": "Context-menu action that renames a Writerside topic file." - }, - "topicPlacement": "Posição no TOC", - "@topicPlacement": { - "description": "Create topic dialog label for selecting TOC placement." - }, - "tocRoot": "Na raiz do TOC", - "@tocRoot": { - "description": "TOC placement option for the root level." - }, - "afterSelectedTopic": "Após o tópico selecionado", - "@afterSelectedTopic": { - "description": "TOC placement option after the selected topic." - }, - "insideSelectedTopic": "Dentro do tópico selecionado", - "@insideSelectedTopic": { - "description": "TOC placement option inside the selected topic." - }, - "pasteAfterTopic": "Colar depois", - "@pasteAfterTopic": { - "description": "Action that moves a cut TOC entry after the selected topic." - }, - "pasteAsChildTopic": "Colar como subtópico", - "@pasteAsChildTopic": { - "description": "Action that moves a cut TOC entry inside the selected topic." - }, - "removeFromToc": "Remover do TOC", - "@removeFromToc": { - "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." - }, - "confirmRemoveFromTocTitle": "Remover do TOC?", - "@confirmRemoveFromTocTitle": { - "description": "Confirmation title before removing a Writerside TOC entry." - }, - "confirmRemoveFromTocMessage": "Remover {name} deste TOC? O arquivo do tópico será mantido.", - "@confirmRemoveFromTocMessage": { - "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", - "placeholders": { - "name": { - "type": "String" - } - } - }, - "confirmDeleteTopicTitle": "Excluir o arquivo do tópico?", - "@confirmDeleteTopicTitle": { - "description": "Confirmation title before deleting a Writerside topic file." - }, - "confirmDeleteTopicMessage": "Excluir {name} e removê-lo de todos os TOCs? Isso não pode ser desfeito.", - "@confirmDeleteTopicMessage": { - "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", - "placeholders": { - "name": { - "type": "String" - } - } - }, - "defaultNewTopicTitle": "Novo tópico", - "@defaultNewTopicTitle": { - "description": "Default topic title in the create topic dialog." - }, - "topicTitle": "Título do tópico", - "@topicTitle": { - "description": "Create topic dialog field label." - }, - "fileName": "Nome do arquivo", - "@fileName": { - "description": "Create topic dialog field label." - }, - "topicTitleRequired": "O título do tópico é obrigatório.", - "@topicTitleRequired": { - "description": "Validation message for missing topic title." - }, - "fileNameRequired": "O nome do arquivo é obrigatório.", - "@fileNameRequired": { - "description": "Validation message for missing file name." - }, - "useSingleSafeFileName": "Use um único nome de arquivo seguro.", - "@useSingleSafeFileName": { - "description": "Validation message for unsafe file names." - }, - "useExpectedExtension": "Use a extensão {extension} para o formato selecionado.", - "@useExpectedExtension": { - "description": "Validation message for an unexpected file extension.", - "placeholders": { - "extension": { - "type": "String" - } - } - }, - "useIdentifierCharacters": "Use letras, números, sublinhados ou hifens antes da extensão.", - "@useIdentifierCharacters": { - "description": "Validation message for invalid topic IDs." - }, - "topicIdAlreadyExists": "O ID do tópico já existe.", - "@topicIdAlreadyExists": { - "description": "Validation message for duplicate topic IDs." - }, - "createWritersideTopicFailed": "Não foi possível criar o tópico do Writerside.", - "@createWritersideTopicFailed": { - "description": "Fallback error shown when topic creation fails." - }, - "noOutline": "Sem estrutura", - "@noOutline": { - "description": "Empty state shown when a document has no outline." - }, - "expandKind": "Expandir {kind}", - "@expandKind": { - "description": "Tooltip for expanding a foldable source section.", - "placeholders": { - "kind": { - "type": "String" - } - } - }, - "collapseKind": "Recolher {kind}", - "@collapseKind": { - "description": "Tooltip for collapsing a foldable source section.", - "placeholders": { - "kind": { - "type": "String" - } - } - }, - "foldKindSection": "seção", - "@foldKindSection": { - "description": "Fold kind label for a section." - }, - "foldKindList": "lista", - "@foldKindList": { - "description": "Fold kind label for a list." - }, - "foldKindQuote": "citação", - "@foldKindQuote": { - "description": "Fold kind label for a blockquote." - }, - "foldKindTag": "tag", - "@foldKindTag": { - "description": "Fold kind label for an XML tag." - }, - "sourceSearchPreviousMatch": "Correspondência anterior", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, - "sourceSearchNextMatch": "Próxima correspondência", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, - "sourceSearchCaseSensitive": "Diferenciar maiúsculas de minúsculas", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, - "sourceSearchWholeWord": "Palavra inteira", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, - "sourceSearchRegex": "Expressão regular", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, - "sourceSearchInvalidRegex": "Expressão regular inválida", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, - "sourceLargeFileFeaturesPaused": "Arquivo grande: o realce e o recolhimento estão pausados", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, - "nothingToRead": "Nenhum conteúdo para ler", - "admonition": "Aviso", - "quote": "Citação", - "@nothingToRead": { - "description": "Empty state shown when there is no content to read." - }, - "note": "Observação", - "@note": { - "description": "Preview label for a note admonition." - }, - "tip": "Dica", - "@tip": { - "description": "Preview label for a tip admonition." - }, - "warning": "Aviso", - "@warning": { - "description": "Preview label for a warning admonition." - }, - "tabs": "Guias", - "@tabs": { - "description": "Preview label for a tabs block." - }, - "tab": "Guia", - "@tab": { - "description": "Preview label for a tab block." - }, - "procedure": "Procedimento", - "@procedure": { - "description": "Preview label for a procedure block." - }, - "step": "Etapa", - "@step": { - "description": "Preview label for a procedure step." - }, - "topic": "Tópico", - "@topic": { - "description": "Preview label for a topic element." - }, - "chapter": "Capítulo", - "@chapter": { - "description": "Preview label for a chapter element." - }, - "couldNotOpenTarget": "Não foi possível abrir {target}", - "@couldNotOpenTarget": { - "description": "Toast shown when a link target cannot be opened.", - "placeholders": { - "target": { - "type": "String" - } - } - }, - "linkTargetNotFound": "Destino do link não encontrado: {targetPath}", - "@linkTargetNotFound": { - "description": "Toast shown when a link target path is missing.", - "placeholders": { - "targetPath": { - "type": "String" - } - } - }, - "cannotOpenFileTypeInEditor": "Não é possível abrir este tipo de arquivo no editor", - "@cannotOpenFileTypeInEditor": { - "description": "Toast shown when a file type cannot be opened in the editor." - }, - "anchorNotFound": "Âncora não encontrada: {anchor}", - "@anchorNotFound": { - "description": "Toast shown when a link anchor is missing.", - "placeholders": { - "anchor": { - "type": "String" - } - } - }, - "noProblemsFound": "Nenhum problema encontrado", - "@noProblemsFound": { - "description": "Diagnostics empty state." - }, - "noResults": "Nenhum resultado", - "@noResults": { - "description": "Search empty state." - }, - "searchResultLine": "{relativePath} - linha {lineNumber}", - "@searchResultLine": { - "description": "Search result subtitle with file path and line number.", - "placeholders": { - "relativePath": { - "type": "String" - }, - "lineNumber": { - "type": "int" - } - } - }, - "untitledResult": "Resultado sem título", - "@untitledResult": { - "description": "Fallback search result title." - }, - "documentKindMarkdownFile": "Arquivo Markdown", - "@documentKindMarkdownFile": { - "description": "Search result document kind label." - }, - "documentKindWritersideMarkdownTopic": "Tópico Markdown do Writerside", - "@documentKindWritersideMarkdownTopic": { - "description": "Search result document kind label." - }, - "documentKindWritersideXmlTopic": "Tópico XML do Writerside", - "@documentKindWritersideXmlTopic": { - "description": "Search result document kind label." - }, - "documentKindWritersideTree": "Árvore do Writerside", - "@documentKindWritersideTree": { - "description": "Search result document kind label." - }, - "documentKindConfigurationFile": "Arquivo de configuração", - "@documentKindConfigurationFile": { - "description": "Search result document kind label." - }, - "documentKindVariablesFile": "Arquivo de variáveis", - "@documentKindVariablesFile": { - "description": "Search result document kind label." - }, - "documentKindCategoriesFile": "Arquivo de categorias", - "@documentKindCategoriesFile": { - "description": "Search result document kind label." - }, - "documentKindResourceFile": "Arquivo de recursos", - "@documentKindResourceFile": { - "description": "Search result document kind label." - }, - "workspaceErrorOpenFailed": "Falha ao abrir: {error}", - "@workspaceErrorOpenFailed": { - "description": "Workspace error message shown when opening a path fails.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "workspaceErrorCreateWritersideProjectFailed": "Não foi possível criar o projeto Writerside: {error}", - "@workspaceErrorCreateWritersideProjectFailed": { - "description": "Workspace error message shown when Writerside project creation fails.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "workspaceErrorCreateWritersideTopicFailed": "Não foi possível criar o tópico do Writerside: {error}", - "@workspaceErrorCreateWritersideTopicFailed": { - "description": "Workspace error message shown when Writerside topic creation fails.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "workspaceErrorCouldNotOpenFile": "Não foi possível abrir o arquivo: {error}", - "@workspaceErrorCouldNotOpenFile": { - "description": "Workspace error message shown when opening a file fails.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "workspaceErrorChooseWhereToSaveMarkdown": "Escolha onde salvar este arquivo Markdown.", - "@workspaceErrorChooseWhereToSaveMarkdown": { - "description": "Workspace error message shown when an untitled file needs a save location." - }, - "workspaceErrorSaveBlockedFileChangedOnDisk": "Salvamento bloqueado: o arquivo foi alterado no disco.", - "@workspaceErrorSaveBlockedFileChangedOnDisk": { - "description": "Workspace error message shown when a save is blocked by external changes." - }, - "workspaceErrorSaveFailed": "Falha ao salvar: {error}", - "@workspaceErrorSaveFailed": { - "description": "Workspace error message shown when saving fails.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "workspaceErrorValidationFailed": "Falha na validação: {error}", - "@workspaceErrorValidationFailed": { - "description": "Workspace error message shown when validation fails.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "errorPathDoesNotExist": "O caminho não existe: {path}", - "@errorPathDoesNotExist": { - "description": "Detail for a missing path error.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorTargetDirectoryNotEmpty": "O diretório de destino já existe e não está vazio: {path}", - "@errorTargetDirectoryNotEmpty": { - "description": "Detail for a non-empty target directory error.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorTargetPathNotDirectory": "O caminho de destino já existe e não é um diretório: {path}", - "@errorTargetPathNotDirectory": { - "description": "Detail for a target path that is not a directory.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorGeneratedFileAlreadyExists": "O arquivo gerado já existe: {path}", - "@errorGeneratedFileAlreadyExists": { - "description": "Detail for a generated file conflict.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorParentDirectoryRequired": "O diretório pai é obrigatório.", - "@errorParentDirectoryRequired": { - "description": "Detail for missing parent directory input." - }, - "errorParentDirectoryMissing": "O diretório pai não existe: {path}", - "@errorParentDirectoryMissing": { - "description": "Detail for a missing parent directory.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorProjectNameRequired": "O nome do projeto é obrigatório.", - "@errorProjectNameRequired": { - "description": "Detail for a missing project name." - }, - "errorDirectoryNameRequired": "O nome do diretório é obrigatório.", - "@errorDirectoryNameRequired": { - "description": "Detail for a missing directory name." - }, - "errorDirectoryNameUnsafe": "O nome do diretório deve ser um único segmento de caminho seguro.", - "@errorDirectoryNameUnsafe": { - "description": "Detail for an unsafe directory name." - }, - "errorInstanceIdInvalid": "O ID da instância deve começar com uma letra minúscula e conter apenas letras minúsculas, números, sublinhados e hifens.", - "@errorInstanceIdInvalid": { - "description": "Detail for an invalid Writerside instance ID." - }, - "errorTopicFileInvalid": "O nome do arquivo do tópico deve ser um nome de arquivo Markdown sem separadores de caminho.", - "@errorTopicFileInvalid": { - "description": "Detail for an invalid topic file name." - }, - "errorTopicTitleRequired": "O título do tópico é obrigatório.", - "@errorTopicTitleRequired": { - "description": "Detail for a missing topic title." - }, - "errorWritersideModuleRootMissing": "A raiz do módulo Writerside não existe: {path}", - "@errorWritersideModuleRootMissing": { - "description": "Detail for a missing Writerside module root.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorWritersideModuleNotOpen": "Um módulo Writerside deve estar aberto para criar um tópico.", - "@errorWritersideModuleNotOpen": { - "description": "Detail shown when creating a topic without an open Writerside module." - }, - "errorWritersideInstanceTreeMissing": "O módulo Writerside não tem uma árvore de instância.", - "@errorWritersideInstanceTreeMissing": { - "description": "Detail shown when creating a topic without a Writerside instance tree." - }, - "errorWritersideTreeFileMissing": "O arquivo de árvore do Writerside não existe: {path}", - "@errorWritersideTreeFileMissing": { - "description": "Detail for a missing Writerside tree file.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorTopicIdAlreadyExists": "O ID do tópico \"{topicId}\" já existe neste módulo de ajuda.", - "@errorTopicIdAlreadyExists": { - "description": "Detail for a duplicate topic ID.", - "placeholders": { - "topicId": { - "type": "String" - } - } - }, - "errorTopicFileAlreadyExists": "O arquivo do tópico já existe: {path}", - "@errorTopicFileAlreadyExists": { - "description": "Detail for an existing topic file.", - "placeholders": { - "path": { - "type": "String" - } - } - }, - "errorReferenceTopicMissing": "O tópico de referência não está presente na árvore selecionada: {topic}", - "@errorReferenceTopicMissing": { - "description": "Detail for a missing reference topic in a tree.", - "placeholders": { - "topic": { - "type": "String" - } - } - }, - "errorWritersideTocNodeMissing": "A entrada selecionada do TOC não existe mais.", - "@errorWritersideTocNodeMissing": { - "description": "Detail shown when a selected Writerside TOC entry no longer exists." - }, - "errorWritersideTocInvalidMove": "Uma entrada do TOC não pode ser movida para dentro de si mesma nem de um de seus descendentes.", - "@errorWritersideTocInvalidMove": { - "description": "Detail shown when a Writerside TOC move would create a cycle." - }, - "errorWritersideStartTopicDelete": "O tópico inicial {topic} não pode ser excluído. Escolha primeiro outra página inicial.", - "@errorWritersideStartTopicDelete": { - "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", - "placeholders": { - "topic": { - "type": "String" - } - } - }, - "errorTopicsRootUnsafe": "A raiz dos tópicos deve ser um diretório relativo seguro.", - "@errorTopicsRootUnsafe": { - "description": "Detail for an unsafe topics root directory." - }, - "errorTopicFileNameUnsafe": "O nome do arquivo do tópico deve ser um único segmento de caminho seguro.", - "@errorTopicFileNameUnsafe": { - "description": "Detail for an unsafe topic file name." - }, - "errorTopicFileExtensionMismatch": "A extensão do arquivo do tópico deve corresponder ao formato selecionado ({extension}).", - "@errorTopicFileExtensionMismatch": { - "description": "Detail for a topic file extension mismatch.", - "placeholders": { - "extension": { - "type": "String" - } - } - }, - "errorTopicFileNameInvalid": "O nome do arquivo do tópico deve conter apenas letras, números, sublinhados e hifens.", - "@errorTopicFileNameInvalid": { - "description": "Detail for a topic file name with invalid characters." - }, - "errorUnknown": "Erro desconhecido: {code}", - "@errorUnknown": { - "description": "Fallback detail for an unknown coded application error.", - "placeholders": { - "code": { - "type": "String" - } - } - }, - "diagnosticWorkspaceFileStatFailed": "Não foi possível ler os metadados do arquivo: {error}", - "@diagnosticWorkspaceFileStatFailed": { - "description": "Diagnostic shown when file metadata cannot be read.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "diagnosticWorkspaceScanSkipped": "Espaço de trabalho grande detectado. Alguns arquivos foram ignorados para manter o aplicativo responsivo.", - "@diagnosticWorkspaceScanSkipped": { - "description": "Diagnostic shown when workspace scanning skips files." - }, - "diagnosticWorkspaceScanInspectFailed": "Não foi possível inspecionar a entrada do espaço de trabalho: {error}", - "@diagnosticWorkspaceScanInspectFailed": { - "description": "Diagnostic shown when a workspace entry cannot be inspected.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "diagnosticWorkspaceFileTooLarge": "O arquivo excede o limite beta de análise automática.", - "@diagnosticWorkspaceFileTooLarge": { - "description": "Diagnostic shown when a file is too large to parse automatically." - }, - "diagnosticWorkspaceFileReadFailed": "Não foi possível ler o arquivo Markdown: {error}", - "@diagnosticWorkspaceFileReadFailed": { - "description": "Diagnostic shown when a Markdown file cannot be read.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "diagnosticMarkdownAttributeMalformed": "O bloco de atributos de título do Writerside está malformado.", - "@diagnosticMarkdownAttributeMalformed": { - "description": "Markdown parser diagnostic for malformed Writerside heading attributes." - }, - "diagnosticMarkdownHeadingDuplicateId": "ID de título duplicado \"{id}\".", - "@diagnosticMarkdownHeadingDuplicateId": { - "description": "Markdown parser diagnostic for duplicate heading IDs.", - "placeholders": { - "id": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicH1ConvertedToChapter": "Títulos H1 adicionais no nível superior são tratados como capítulos.", - "@diagnosticWritersideTopicH1ConvertedToChapter": { - "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." - }, - "diagnosticWritersideMarkdownTopicMissingTitle": "O tópico Markdown do Writerside não tem H1 nem título no front matter.", - "@diagnosticWritersideMarkdownTopicMissingTitle": { - "description": "Diagnostic for a Writerside Markdown topic without a title." - }, - "diagnosticWritersideXmlTopicMissingTitle": "O tópico XML não tem título.", - "@diagnosticWritersideXmlTopicMissingTitle": { - "description": "Diagnostic for a Writerside XML topic without a title." - }, - "diagnosticWritersideTopicFileMissingTitle": "O tópico \"{fileName}\" não tem título.", - "@diagnosticWritersideTopicFileMissingTitle": { - "description": "Diagnostic for a Writerside topic file without a title.", - "placeholders": { - "fileName": { - "type": "String" - } - } - }, - "diagnosticMarkdownFrontMatterMalformed": "O front matter não foi fechado.", - "@diagnosticMarkdownFrontMatterMalformed": { - "description": "Markdown parser diagnostic for unclosed front matter." - }, - "diagnosticMarkdownRawHtmlUnsafe": "Elemento HTML inseguro.", - "@diagnosticMarkdownRawHtmlUnsafe": { - "description": "Markdown parser diagnostic for unsafe raw HTML." - }, - "diagnosticMarkdownLinkUnresolvedTarget": "O destino do link não existe: {targetPath}", - "@diagnosticMarkdownLinkUnresolvedTarget": { - "description": "Markdown parser diagnostic for a missing link target.", - "placeholders": { - "targetPath": { - "type": "String" - } - } - }, - "diagnosticMarkdownLinkUnresolvedAnchor": "A âncora \"{anchor}\" não existe.", - "@diagnosticMarkdownLinkUnresolvedAnchor": { - "description": "Markdown parser diagnostic for a missing local anchor.", - "placeholders": { - "anchor": { - "type": "String" - } - } - }, - "diagnosticMarkdownImageMissingAlt": "A imagem \"{destination}\" não tem texto alternativo.", - "@diagnosticMarkdownImageMissingAlt": { - "description": "Markdown parser diagnostic for a missing image alt text.", - "placeholders": { - "destination": { - "type": "String" - } - } - }, - "diagnosticMarkdownImageMissingFile": "A imagem não existe: {destination}", - "@diagnosticMarkdownImageMissingFile": { - "description": "Markdown parser diagnostic for a missing image file.", - "placeholders": { - "destination": { - "type": "String" - } - } - }, - "diagnosticInvalidXml": "XML inválido: {message}", - "@diagnosticInvalidXml": { - "description": "XML parser diagnostic for invalid XML.", - "placeholders": { - "message": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigInvalidRoot": "A raiz do arquivo writerside.cfg deve ser .", - "@diagnosticWritersideConfigInvalidRoot": { - "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." - }, - "diagnosticWritersideConfigMissingSnippetsSrc": "A declaração de snippets está sem o atributo src.", - "@diagnosticWritersideConfigMissingSnippetsSrc": { - "description": "Writerside parser diagnostic for a snippets declaration without src." - }, - "diagnosticWritersideConfigMissingInstanceGroupsSrc": "A declaração de instance-groups está sem o atributo src.", - "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { - "description": "Writerside parser diagnostic for an instance-groups declaration without src." - }, - "diagnosticWritersideConfigInvalidKeymapsMode": "Modo de keymaps não suportado: {mode}", - "@diagnosticWritersideConfigInvalidKeymapsMode": { - "description": "Writerside parser diagnostic for an unsupported keymaps mode.", - "placeholders": { - "mode": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingInstanceSrc": "A declaração de instância está sem o atributo src.", - "@diagnosticWritersideConfigMissingInstanceSrc": { - "description": "Writerside parser diagnostic for an instance declaration without src." - }, - "diagnosticWritersideConfigMissingInstance": "O arquivo writerside.cfg não registra uma instância.", - "@diagnosticWritersideConfigMissingInstance": { - "description": "Writerside parser diagnostic for a config with no instance." - }, - "diagnosticWritersideTreeInvalidRoot": "A raiz do arquivo .tree deve ser .", - "@diagnosticWritersideTreeInvalidRoot": { - "description": "Writerside parser diagnostic for an invalid tree root element." - }, - "diagnosticWritersideTreeMissingId": "O perfil da instância está sem o atributo id.", - "@diagnosticWritersideTreeMissingId": { - "description": "Writerside parser diagnostic for an instance profile without id." - }, - "diagnosticWritersideTreeIdMismatch": "O nome-base do arquivo .tree não corresponde ao ID da instância \"{id}\".", - "@diagnosticWritersideTreeIdMismatch": { - "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", - "placeholders": { - "id": { - "type": "String" - } - } - }, - "diagnosticWritersideTreeMissingStartPage": "A instância que não é de biblioteca não tem start-page.", - "@diagnosticWritersideTreeMissingStartPage": { - "description": "Writerside parser diagnostic for a tree missing start-page." - }, - "diagnosticWritersideStartPageMissing": "A página inicial \"{startPage}\" não existe.", - "@diagnosticWritersideStartPageMissing": { - "description": "Writerside diagnostic for a missing start page.", - "placeholders": { - "startPage": { - "type": "String" - } - } - }, - "diagnosticWritersideTreeDuplicateTopic": "O tópico \"{topic}\" aparece mais de uma vez no TOC desta instância.", - "@diagnosticWritersideTreeDuplicateTopic": { - "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", - "placeholders": { - "topic": { - "type": "String" - } - } - }, - "diagnosticWritersideVariableMalformedDeclaration": "A declaração de variável deve ter nome e valor.", - "@diagnosticWritersideVariableMalformedDeclaration": { - "description": "Writerside parser diagnostic for a malformed variable declaration." - }, - "diagnosticWritersideVariableDuplicateName": "A variável \"{name}\" é declarada mais de uma vez.", - "@diagnosticWritersideVariableDuplicateName": { - "description": "Writerside parser diagnostic for a duplicate variable name.", - "placeholders": { - "name": { - "type": "String" - } - } - }, - "diagnosticWritersideCategoryMissingId": "A categoria está sem o atributo id.", - "@diagnosticWritersideCategoryMissingId": { - "description": "Writerside parser diagnostic for a category without id." - }, - "diagnosticWritersideCategoryDuplicateId": "A categoria \"{id}\" é declarada mais de uma vez.", - "@diagnosticWritersideCategoryDuplicateId": { - "description": "Writerside parser diagnostic for a duplicate category ID.", - "placeholders": { - "id": { - "type": "String" - } - } - }, - "diagnosticWritersideCategoryDuplicateOrder": "A ordem da categoria \"{order}\" foi declarada mais de uma vez.", - "@diagnosticWritersideCategoryDuplicateOrder": { - "description": "Writerside parser diagnostic for a duplicate category order.", - "placeholders": { - "order": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicInvalidRoot": "A raiz do arquivo .topic deve ser .", - "@diagnosticWritersideTopicInvalidRoot": { - "description": "Writerside parser diagnostic for an invalid XML topic root." - }, - "diagnosticWritersideTopicMissingRootId": "A raiz do tópico XML está sem o atributo id.", - "@diagnosticWritersideTopicMissingRootId": { - "description": "Writerside parser diagnostic for an XML topic missing root id." - }, - "diagnosticWritersideTopicRootIdMismatch": "O ID raiz do tópico XML \"{id}\" deve corresponder ao nome do arquivo \"{expectedId}\".", - "@diagnosticWritersideTopicRootIdMismatch": { - "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", - "placeholders": { - "id": { - "type": "String" - }, - "expectedId": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicDuplicateElementId": "O ID do elemento \"{elementId}\" aparece mais de uma vez.", - "@diagnosticWritersideTopicDuplicateElementId": { - "description": "Writerside parser diagnostic for a duplicate XML element ID.", - "placeholders": { - "elementId": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicAnchorMissingHref": " está sem o atributo href.", - "@diagnosticWritersideTopicAnchorMissingHref": { - "description": "Writerside parser diagnostic for an anchor without href." - }, - "diagnosticWritersideConfigMissing": "O modo Writerside requer o arquivo writerside.cfg.", - "@diagnosticWritersideConfigMissing": { - "description": "Writerside module diagnostic for a missing writerside.cfg." - }, - "diagnosticWritersideConfigMissingBuildConfigDirectory": "O diretório configurado para a compilação está ausente: {relativePath}", - "@diagnosticWritersideConfigMissingBuildConfigDirectory": { - "description": "Writerside module diagnostic for a missing build config directory.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "O diretório de especificações de API configurado está ausente: {relativePath}", - "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { - "description": "Writerside module diagnostic for a missing API specifications directory.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingSnippetsDirectory": "O diretório de snippets configurado está ausente: {relativePath}", - "@diagnosticWritersideConfigMissingSnippetsDirectory": { - "description": "Writerside module diagnostic for a missing snippets directory.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingVarsFile": "O arquivo de variáveis configurado está ausente: {relativePath}", - "@diagnosticWritersideConfigMissingVarsFile": { - "description": "Writerside module diagnostic for a missing variables file.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingCategoriesFile": "O arquivo de categorias configurado está ausente: {relativePath}", - "@diagnosticWritersideConfigMissingCategoriesFile": { - "description": "Writerside module diagnostic for a missing categories file.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingInstanceGroupsFile": "O arquivo de grupos de instâncias configurado está ausente: {relativePath}", - "@diagnosticWritersideConfigMissingInstanceGroupsFile": { - "description": "Writerside module diagnostic for a missing instance groups file.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideConfigMissingInstanceTree": "A árvore de instância registrada \"{source}\" não existe.", - "@diagnosticWritersideConfigMissingInstanceTree": { - "description": "Writerside module diagnostic for a missing registered instance tree.", - "placeholders": { - "source": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicReadFailed": "Não foi possível ler o arquivo do tópico: {error}", - "@diagnosticWritersideTopicReadFailed": { - "description": "Writerside module diagnostic for a topic file read failure.", - "placeholders": { - "error": { - "type": "String" - } - } - }, - "diagnosticWritersideDefaultTopicsDirectoryMissing": "O diretório de tópicos padrão está ausente: {relativePath}", - "@diagnosticWritersideDefaultTopicsDirectoryMissing": { - "description": "Writerside module diagnostic for a missing default topics directory.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicsDirectoryMissing": "O diretório de tópicos configurado está ausente: {relativePath}", - "@diagnosticWritersideTopicsDirectoryMissing": { - "description": "Writerside module diagnostic for a missing topics directory.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideImagesDirectoryMissing": "O diretório de imagens configurado está ausente: {relativePath}", - "@diagnosticWritersideImagesDirectoryMissing": { - "description": "Writerside module diagnostic for a missing images directory.", - "placeholders": { - "relativePath": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicDuplicateId": "O ID do elemento \"{id}\" aparece mais de uma vez.", - "@diagnosticWritersideTopicDuplicateId": { - "description": "Writerside module diagnostic for a duplicate topic element ID.", - "placeholders": { - "id": { - "type": "String" - } - } - }, - "diagnosticWritersideTreeMissingTopic": "O TOC faz referência ao tópico ausente \"{topic}\".", - "@diagnosticWritersideTreeMissingTopic": { - "description": "Writerside module diagnostic for a TOC reference to a missing topic.", - "placeholders": { - "topic": { - "type": "String" - } - } - }, - "diagnosticWritersideTreeInvalidHref": "O href externo \"{href}\" é inválido.", - "@diagnosticWritersideTreeInvalidHref": { - "description": "Writerside module diagnostic for an invalid external href.", - "placeholders": { - "href": { - "type": "String" - } - } - }, - "diagnosticWritersideVariableUnresolved": "A variável \"%{name}%\" não foi declarada.", - "@diagnosticWritersideVariableUnresolved": { - "description": "Writerside module diagnostic for an undeclared variable.", - "placeholders": { - "name": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicLinkUnresolved": "O link para o tópico \"{destination}\" não pode ser resolvido.", - "@diagnosticWritersideTopicLinkUnresolved": { - "description": "Writerside module diagnostic for an unresolved topic link.", - "placeholders": { - "destination": { - "type": "String" - } - } - }, - "diagnosticWritersideAnchorUnresolved": "A âncora \"{anchor}\" não existe em \"{targetName}\".", - "@diagnosticWritersideAnchorUnresolved": { - "description": "Writerside module diagnostic for an unresolved topic anchor.", - "placeholders": { - "anchor": { - "type": "String" - }, - "targetName": { - "type": "String" - } - } - }, - "diagnosticWritersideIncludeMissingFrom": " está sem o atributo from.", - "@diagnosticWritersideIncludeMissingFrom": { - "description": "Writerside module diagnostic for an include without a from attribute." - }, - "diagnosticWritersideIncludeSourceMissing": "A origem da inclusão \"{from}\" não existe.", - "@diagnosticWritersideIncludeSourceMissing": { - "description": "Writerside module diagnostic for a missing include source.", - "placeholders": { - "from": { - "type": "String" - } - } - }, - "diagnosticWritersideIncludeElementMissing": "O elemento incluído \"{elementId}\" não existe em \"{from}\".", - "@diagnosticWritersideIncludeElementMissing": { - "description": "Writerside module diagnostic for a missing include element.", - "placeholders": { - "elementId": { - "type": "String" - }, - "from": { - "type": "String" - } - } - }, - "diagnosticWritersideCategoryUnresolved": "A categoria seealso \"{ref}\" não foi declarada.", - "@diagnosticWritersideCategoryUnresolved": { - "description": "Writerside module diagnostic for an unresolved seealso category.", - "placeholders": { - "ref": { - "type": "String" - } - } - }, - "diagnosticWritersideTopicAmbiguousReference": "A referência de tópico \"{reference}\" é ambígua.", - "@diagnosticWritersideTopicAmbiguousReference": { - "description": "Writerside module diagnostic for an ambiguous topic reference.", - "placeholders": { - "reference": { - "type": "String" - } - } - }, - "diagnosticUnknown": "Diagnóstico desconhecido: {code}", - "@diagnosticUnknown": { - "description": "Fallback text for an unknown diagnostic code.", - "placeholders": { - "code": { - "type": "String" - } - } - }, - "close": "Fechar", - "git": "Git", - "gitDiff": "Diff do Git", - "gitShowDiff": "Mostrar diff", - "gitDiffHunkRange": "anterior {oldRange} → novo {newRange}", - "gitDiffNoLines": "sem linhas", - "gitUnavailableTitle": "Git não está disponível", - "gitUnavailableMessage": "{reason, select, other{Instale o Git ou configure o BusyMark para usar um executável do Git disponível. {reason}}}", - "gitTrustRequiredTitle": "Confiar neste espaço de trabalho para o Git?", - "gitTrustRequiredMessage": "Os repositórios Git podem executar programas por meio de hooks, filtros e outras configurações. Confie neste espaço de trabalho antes que o BusyMark leia os dados do repositório ou ative ações do Git.", - "gitTrustWorkspace": "Confiar no espaço de trabalho", - "gitNotRepositoryTitle": "Não é um repositório Git", - "gitNotRepositoryMessage": "Este espaço de trabalho não está em um repositório Git.", - "gitInitializeRepository": "Inicializar repositório", - "gitDetachedHead": "HEAD desanexado", - "gitDetachedHeadAt": "Desanexado em {commit}", - "gitNoUpstream": "Sem upstream", - "gitAheadCount": "{count, plural, =1{1 commit não enviado} other{{count} commits não enviados}}", - "gitBehindCount": "{count, plural, =1{1 commit para obter} other{{count} commits para obter}}", - "gitClean": "Limpo", - "gitConflicts": "Conflitos", - "gitChanges": "Alterações", - "gitHistory": "Histórico", - "gitBranches": "Branches", - "gitActions": "Ações do Git", - "@gitActions": { - "description": "Tooltip for the Git action menu button." - }, - "gitPull": "Pull", - "gitPush": "Push", - "gitCommit": "Commit", - "gitSelectForCommit": "Adicionar arquivo ao índice", - "gitRemoveFromCommit": "Remover arquivo do índice", - "gitDiscard": "Descartar", - "gitOpenFile": "Abrir arquivo", - "gitMarkResolved": "Marcar como resolvido", - "gitUntracked": "Arquivos não rastreados", - "gitCommitMessage": "Mensagem de commit", - "gitCommitSelectedFiles": "Arquivos selecionados", - "gitCommitNoSelectedFiles": "Adicione pelo menos um arquivo ao índice antes de criar o commit.", - "gitCommitMessageRequired": "Digite uma mensagem de commit.", - "gitCreateBranch": "Criar branch", - "gitNewBranch": "Nova branch", - "gitBranchName": "Nome da branch", - "gitSwitchBranch": "Trocar", - "gitNoChanges": "Nenhuma alteração", - "gitNoHistory": "Nenhum histórico", - "gitNoBranches": "Nenhuma branch", - "gitNoDiff": "Nenhum diff para exibir", - "gitBinaryFile": "Arquivo binário. O BusyMark não exibe patches binários.", - "gitUnsavedChangesBanner": "As alterações não salvas do editor não são incluídas até serem salvas.", - "gitConfirmDiscardTitle": "Descartar alterações do Git?", - "gitConfirmDiscardTracked": "{count, plural, =1{O arquivo rastreado selecionado será restaurado pelo Git.} other{Os arquivos rastreados selecionados serão restaurados pelo Git.}}", - "gitConfirmDiscardUntracked": "{count, plural, =1{O arquivo não rastreado selecionado será excluído.} other{Os arquivos não rastreados selecionados serão excluídos.}}", - "gitConfirmDiscardMixed": "{count, plural, =1{O arquivo selecionado será restaurado ou excluído de acordo com o status do Git.} other{Os arquivos selecionados serão restaurados ou excluídos de acordo com o status do Git.}}", - "gitConfirmSwitchBranchTitle": "Trocar para {branch}?", - "gitConfirmSwitchBranchMessage": "O BusyMark recarregará o espaço de trabalho do disco depois que o Git trocar de branch.", - "gitConfirmPushSetUpstreamTitle": "Definir branch upstream?", - "gitConfirmPushSetUpstreamMessage": "Esta branch não tem upstream. O BusyMark pode enviar {branch} e definir seu upstream quando houver exatamente um remoto configurado.", - "gitProjectHistory": "Projeto", - "gitFileHistory": "Arquivo atual", - "gitAdditionsDeletions": "+{additions} -{deletions}", - "fileActions": "Ações do arquivo", - "actions": "Ações", - "gitStatusAdded": "Adicionado", - "gitStatusDeleted": "Excluído", - "gitStatusRenamed": "Renomeado", - "gitStatusCopied": "Copiado", - "gitStatusUntracked": "Não rastreado", - "gitStatusConflicted": "Em conflito", - "gitStatusIgnored": "Ignorado", - "gitStatusTypeChanged": "Tipo alterado", - "gitStatusModified": "Modificado", - "gitStatusUnknown": "Desconhecido", - "gitErrorUnavailable": "Git não está disponível.", - "gitErrorNotRepository": "Este espaço de trabalho não é um repositório Git.", - "gitErrorUnsafePath": "O BusyMark bloqueou um caminho Git inseguro.", - "gitErrorInvalidBranchName": "Digite um nome de branch válido.", - "gitErrorNoRemote": "Nenhum remoto Git está configurado.", - "gitErrorNoUpstream": "Nenhuma branch upstream está configurada.", - "gitErrorMultipleRemotes": "Há vários remotos configurados. Escolha um upstream fora desta versão do BusyMark.", - "gitErrorDirtyWorkspace": "Salve ou descarte as alterações do editor do BusyMark antes de trocar de branch.", - "gitErrorDiverged": "A branch divergiu. Resolva o merge ou o rebase fora desta versão do BusyMark.", - "gitErrorAuthorIdentity": "O Git precisa do nome e do e-mail do autor antes de criar um commit.", - "gitAuthorIdentityTitle": "Identidade do autor do Git", - "gitAuthorIdentityMessage": "Informe a identidade que o Git deve registrar nos commits. O BusyMark irá salvá-la e tentar este commit novamente.", - "gitAuthorName": "Nome", - "gitAuthorEmail": "E-mail", - "gitAuthorIdentityGlobal": "Usar em todos os repositórios", - "gitAuthorIdentityGlobalDescription": "Quando instalado como Snap, isto se aplica aos repositórios abertos no BusyMark.", - "gitSaveIdentityAndCommit": "Salvar e criar commit", - "gitErrorAuthentication": "A autenticação do Git falhou.", - "gitErrorNetwork": "A operação de rede do Git falhou.", - "gitErrorConflict": "O Git relatou conflitos não resolvidos.", - "gitErrorCommandFailed": "O comando Git falhou.", - - "markdownAndHtml": "Markdown e HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, - "markdownHtmlMarkdownBlocks": "Blocos Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, - "markdownHtmlMarkdownBlocksDescription": "Estruturas de bloco compatíveis no código Markdown e na pré-visualização.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, - "markdownHtmlInlineFormatting": "Markdown em linha", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, - "markdownHtmlInlineFormattingDescription": "Formatação dentro de parágrafos, itens de lista e células de tabela.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, - "markdownHtmlRawHtmlBlocks": "Blocos de HTML bruto", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, - "markdownHtmlRawHtmlBlocksDescription": "Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, - "markdownHtmlRawHtmlInline": "Tags de HTML bruto em linha", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, - "markdownHtmlRawHtmlInlineDescription": "Tags HTML em linha seguras renderizadas sem mostrar as tags literais.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, - "markdownHtmlSafety": "Regras de segurança", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, - "markdownHtmlSafetyDescription": "O HTML bruto é analisado e higienizado antes da pré-visualização.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, - "markdownHtmlHeadings": "Títulos", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, - "markdownHtmlParagraphs": "Parágrafos", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, - "markdownHtmlLists": "Listas", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, - "markdownHtmlHtmlContainers": "Contêineres", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, - "markdownHtmlHtmlTextBlocks": "Blocos de texto", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, - "markdownHtmlHtmlFigures": "Figuras e imagens", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, - "markdownHtmlHtmlPreformatted": "Código pré-formatado", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, - "markdownHtmlHtmlDisclosure": "Blocos expansíveis", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, - "markdownHtmlHtmlDescriptionLists": "Listas de descrição", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, - "markdownHtmlHtmlFormattingTags": "Tags de formatação", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, - "markdownHtmlHtmlInlineCodeTags": "Tags de código em linha", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, - "markdownHtmlHtmlNeutralInlineTags": "Tags de texto semântico", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, - "markdownHtmlSanitizedPreview": "Pré-visualização higienizada", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, - "markdownHtmlSanitizedPreviewDescription": "O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, - "markdownHtmlSourcePreserved": "Código-fonte preservado", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, - "markdownHtmlSourcePreservedDescription": "HTML bruto não editado é salvo exatamente como texto fonte.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, - "markdownHtmlMarkdownInsideHtml": "Markdown dentro de HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, - "markdownHtmlMarkdownInsideHtmlDescription": "Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, - "markdownHtmlBlockedContent": "Conteúdo ativo bloqueado", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, - "markdownHtmlBlockedContentDescription": "Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, - "markdownHtmlSafeUrls": "Somente URLs seguras", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, - "markdownHtmlSafeUrlsDescription": "Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, - "addToGit": "Adicionar ao Git", - "delete": "Excluir", - "newFile": "Novo arquivo", - "rename": "Renomear", - "confirmDeleteFileTitle": "Excluir arquivo?", - "confirmDeleteFolderTitle": "Excluir pasta?", - "confirmDeleteFileMessage": "Excluir {name}? Isso não pode ser desfeito.", - "confirmDeleteFolderMessage": "Excluir {name} e todos os arquivos dentro dela? Isso não pode ser desfeito.", - "workspaceErrorFileOperationFailed": "Falha na operação de arquivo: {error}", - "errorDirectoryMissing": "O diretório não existe: {path}", - "errorPathAlreadyExists": "O caminho já existe: {path}", - "errorFileNameRequired": "O nome do arquivo é obrigatório.", - "errorFileNameUnsafe": "O nome do arquivo deve ser um único segmento de caminho seguro.", - "errorFileOperationInvalidTarget": "Não é possível mover uma pasta para dentro dela mesma.", - "errorFileOperationOutsideRoot": "A operação de arquivo deve permanecer dentro do espaço de trabalho.", - "errorFileOperationRoot": "A raiz do espaço de trabalho não pode ser alterada pela árvore de arquivos.", - "safeDeleteTopicFile": "Excluir o arquivo do tópico com segurança…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, - "removeTocElement": "Remover elemento do TOC", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, - "reviewUsages": "Revisar usos", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, - "deleteTopicFile": "Excluir arquivo do tópico", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, - "removeAction": "Remover", - "@removeAction": {"description": "Generic remove action label."}, - "topicRemovalSummary": "Remova “{topic}” da instância selecionada. O arquivo do tópico será mantido.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, - "safeDeleteTopicSummary": "Exclua “{topic}” e atualize com segurança as referências a ele em todo este projeto Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, - "childTopicsPromoted": "{count, plural, =1{O tópico filho subirá um nível.} other{Os {count} tópicos filhos subirão um nível.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, - "topicIsStartPageRemovalWarning": "Este tópico é usado como página inicial de uma instância. Revise os usos dele e atribua outra página inicial antes de continuar.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, - "topicUsagesCount": "Usos ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, - "noBreakingTopicUsages": "Não foram encontradas referências que deixariam de funcionar.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, - "topicUsagesFound": "O BusyMark encontrou as seguintes referências a este tópico.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, - "topicUsageTocElements": "Elementos do TOC", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, - "topicUsageStartPages": "Páginas iniciais", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, - "topicUsageTopicLinks": "Links para tópicos", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, - "topicUsageIncludes": "Inclusões", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, - "usageCount": "{count, plural, =1{1 uso} other{{count} usos}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, - "refactoringOptions": "Opções de refatoração", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, - "updateUsagesAutomatically": "Atualizar usos automaticamente", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, - "updateUsagesAutomaticallyDescription": "Remova referências dos TOCs e inclusões e preserve o texto dos links.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, - "manualUsageUpdatesRequired": "Alguns usos exigem alterações manuais antes desta refatoração.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, - "setRedirectTo": "Redirecionar para", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, - "noRedirectDescription": "Não redirecionar a página publicada antiga.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, - "redirectTarget": "Destino do redirecionamento", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, - "remainingUsagesBlockRemoval": "Revise e atualize os usos restantes antes de continuar ou ative as atualizações automáticas quando estiverem disponíveis.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, - "usagesOfTopic": "Usos de {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, - "noUsagesFound": "Nenhum uso encontrado.", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, - "outsideSelectedInstance": "Fora da instância selecionada", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, - "doRefactor": "Refatorar", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, - "orphanTopicTitle": "O arquivo do tópico não é mais usado", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, - "keepTopicFile": "Manter o arquivo do tópico", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, - "orphanTopicMessage": "“{topic}” não é mais usado em nenhum lugar deste projeto Writerside. Exclua o arquivo ou mantenha-o para uso em outra instância.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, - "errorWritersideSafeDeleteRequired": "Use a exclusão segura para arquivos de tópicos do Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, - "errorWritersideTopicUsageScanFailed": "Não foi possível concluir a verificação dos usos do tópico. Nenhum arquivo foi alterado.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, - "errorWritersideTopicUsagesRemain": "Alguns usos do tópico ainda precisam de atenção. Revise-os antes de continuar.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, - "errorWritersideRedirectInvalid": "O destino de redirecionamento selecionado não é mais válido. Selecione-o novamente.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, - "errorWritersideRollbackFailed": "Não foi possível reverter completamente a remoção do tópico. Revise estes caminhos antes de continuar: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "Exportar como PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Escolha o esquema da página para criar um PDF bem acabado e independente.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "As imagens remotas não são transferidas durante a exportação. As imagens locais são incluídas quando disponíveis.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Tamanho da página", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "Carta", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Orientação", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Vertical", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Horizontal", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Margens", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Estreitas", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Normais", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Largas", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Incluir números de página", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Exportar", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "A exportar PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "Documento PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "{fileName} foi exportado.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "{fileName} foi exportado. Imagens que não foi possível incluir: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "O componente de exportação para PDF está em falta. Reinstale o BusyMark e tente novamente.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "A exportação para PDF demorou demasiado e foi interrompida.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "O BusyMark não conseguiu exportar este documento como PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, - "visualizationRendering": "A renderizar…", - "visualizationStale": "A mostrar a última renderização válida", - "visualizationShowSource": "Mostrar código-fonte", - "visualizationShowRender": "Mostrar renderização", - "visualizationFitWidth": "Ajustar à largura", - "visualizationSaveImage": "Guardar imagem", - "visualizationCopyImage": "Copiar imagem", - "visualizationImageCopied": "Imagem copiada", - "visualizationOpenApiReference": "Abrir referência da API", - "visualizationValid": "Válido", - "visualizationInvalid": "Inválido", - "visualizationServers": "Servidores", - "visualizationPaths": "Caminhos", - "visualizationOperations": "Operações", - "visualizationTags": "Etiquetas", - "visualizationNoOperations": "Nenhuma operação correspondente", - "visualizationSearchOperations": "Pesquisar operações", - "visualizationRenderFailed": "Não foi possível renderizar esta visualização.", - "visualizationRetry": "Tentar novamente", - "visualizationSaved": "{fileName} guardado", - "shortcutExportPdfDescription": "Exportar o documento ativo ou o módulo do Writerside como PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, - "gitStaged": "Preparados", - "gitUnstaged": "Não preparados", - "gitFetch": "Buscar", - "gitStagedFileCount": "{count, plural, =1{1 arquivo preparado} other{{count} arquivos preparados}}", - "gitOutsideWorkspace": "Fora do espaço de trabalho", - "gitFileHistoryRequiresOpenFile": "O histórico do arquivo requer um arquivo Markdown aberto.", - "gitLoadMore": "Carregar mais", - "gitChangesInCommit": "Alterações neste commit", - "gitCompareWithCurrent": "Comparar com a versão atual", - "gitRestoreVersion": "Restaurar esta versão", - "gitConfirmRestoreTitle": "Restaurar esta versão do arquivo?", - "gitConfirmRestoreMessage": "O BusyMark substituirá o arquivo atual da árvore de trabalho pela versão selecionada do commit. O arquivo restaurado permanecerá não preparado.", - "gitBinaryFileInfo": "Arquivo binário ({size} bytes). O BusyMark não exibe patches binários.", - "gitErrorRestoreStagedFile": "Remova o arquivo do índice antes de restaurar uma versão anterior.", - "gitCommitActions": "Ações do commit", - "gitResetCurrentBranchToHere": "Redefinir a branch atual aqui…", - "gitResetCurrentBranchTitle": "Redefinir {branch} para {commit}?", - "gitResetCurrentBranchMessage": "Isto move a branch {branch} para o commit {commit}. Escolha como o Git deve atualizar o índice e a árvore de trabalho.", - "gitReset": "Redefinir", - "gitResetModeSoft": "Soft", - "gitResetModeSoftDescription": "Mover apenas a branch. Manter o índice e a árvore de trabalho inalterados; as diferenças em relação ao commit selecionado permanecem preparadas.", - "gitResetModeMixed": "Mixed", - "gitResetModeMixedDescription": "Mover a branch e redefinir o índice. Manter a árvore de trabalho inalterada, deixando as diferenças não preparadas.", - "gitResetModeHard": "Hard", - "gitResetModeHardDescription": "Mover a branch e redefinir o índice e a árvore de trabalho. As alterações monitorizadas são descartadas; os arquivos não monitorizados que bloqueiam a operação podem ser eliminados.", - "gitResetModeKeep": "Keep", - "gitResetModeKeepDescription": "Mover a branch e redefinir os arquivos monitorizados, preservando as alterações locais. O Git aborta se essas alterações entrarem em conflito com a redefinição.", - "gitErrorResetDirtyWorkspace": "Guarde ou descarte as alterações no editor do BusyMark antes de redefinir a branch atual.", - "gitErrorResetDetachedHead": "Mude para uma branch antes de a redefinir.", - "instances": "Instâncias", - "newInstance": "Nova instância", - "newTocLibrary": "Nova biblioteca de sumário", - "editInstance": "Editar instância", - "openTocFile": "Abrir ficheiro de sumário", - "createInstance": "Criar instância", - "createTocLibrary": "Criar biblioteca de sumário", - "instanceContent": "Conteúdo", - "instanceContentSource": "Criar a partir de", - "emptyInstance": "Instância vazia", - "markdownFiles": "Ficheiros Markdown locais", - "chooseMarkdownFolder": "Escolher pasta de Markdown", - "errorWritersideInstanceImportSourceRequired": "Escolha uma pasta que contenha ficheiros Markdown.", - "instanceAppearance": "Aspeto", - "instanceColor": "Cor do ícone", - "instanceVersion": "Versão", - "instanceVersionInherited": "Quando este campo está vazio, é usada a versão do projeto {version}.", - "instanceWebPath": "Caminho web", - "instanceStatus": "Estado", - "instanceStatusRelease": "Lançamento", - "instanceStatusEap": "Acesso antecipado", - "instanceStatusDeprecated": "Obsoleta", - "allowSearchEngineIndexing": "Permitir indexação por motores de pesquisa", - "allowSearchEngineIndexingDescription": "Permita que motores de pesquisa externos indexem esta saída.", - "offlineArtifact": "Artefacto offline", - "offlineArtifactDescription": "Inclua os recursos para que a documentação gerada seja autónoma.", - "instanceOutputSettings": "Definições de saída", - "markdownImportSource": "Origem Markdown", - "markdownImportFiles": "Ficheiros Markdown", - "selectNone": "Não selecionar nenhum", - "markdownFilesFound": "Foram encontrados {count} ficheiro(s) Markdown", - "noMarkdownFilesFound": "Não foram encontrados ficheiros Markdown neste diretório.", - "copyReferencedMedia": "Copiar multimédia referenciada", - "copyReferencedMediaDescription": "Copie imagens e vídeos locais referenciados pelos ficheiros selecionados, preservando os caminhos relativos.", - "instanceIdRenameWarningTitle": "Mudar o nome do ID da instância?", - "instanceIdRenameWarning": "O BusyMark mudará o nome do ficheiro .tree e atualizará as referências do projeto Writerside de “{oldId}” para “{newId}”. Os scripts de publicação não são alterados e devem ser atualizados separadamente.", - "renameAndUpdateReferences": "Mudar o nome e atualizar referências", - "tocLibraryDescription": "Uma biblioteca de sumário armazena secções reutilizáveis e não produz uma saída própria.", - "defaultTocLibraryName": "Sumário partilhado", - "instanceColorAutomatic": "Automático", - "instanceColorBlue": "Azul", - "instanceColorGreen": "Verde", - "instanceColorOrange": "Laranja", - "instanceColorPurple": "Roxo", - "instanceColorRed": "Vermelho", - "instanceColorTeal": "Verde-azulado", - "instanceColorYellow": "Amarelo", - "errorWritersideInstanceNameRequired": "Introduza um nome para a instância.", - "errorWritersideInstanceIdExists": "Já existe uma instância com o ID “{id}”.", - "errorWritersideInstanceTreeExists": "A árvore da instância já existe: {path}", - "errorWritersideInstanceImportSourceMissing": "O diretório de origem Markdown não existe: {path}", - "errorWritersideInstanceImportSelectionRequired": "Selecione pelo menos um ficheiro Markdown para importar.", - "errorWritersideInstanceImportFileInvalid": "Este não é um ficheiro Markdown legível dentro da origem selecionada: {path}", - "errorWritersideInstanceImportTargetExists": "A importação substituiria um ficheiro existente do projeto: {path}", - "errorWritersideInstanceFilesChanged": "Os ficheiros da instância foram alterados no disco. Reveja-os e tente novamente.", - "errorWritersideInstanceRollbackFailed": "O BusyMark não conseguiu reverter completamente a alteração da instância. Reveja estes ficheiros antes de continuar: {paths}", - "errorWritersideInstanceLibraryImport": "Uma biblioteca de sumário não pode importar tópicos Markdown.", - "errorWritersideInstanceWebPathInvalid": "O caminho web deve ter uma única linha.", - "errorWritersideInstanceConfigurationInvalid": "A configuração da instância do Writerside é inválida. Corrija os diagnósticos e tente novamente.", - "errorWritersideInstanceTemporaryFile": "O BusyMark não conseguiu preparar com segurança as alterações da instância.", - "diagnosticWritersideTreeInvalidStatus": "Estado de instância desconhecido “{status}”. Use release, eap ou deprecated.", - "diagnosticWritersideDuplicateInstanceId": "O ID de instância “{id}” é usado por mais de um ficheiro de árvore.", - "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml deve ter um elemento raiz .", - "diagnosticWritersideBuildProfilesInvalidBoolean": "O valor {name} “{value}” deve ser true ou false.", - "diagnosticWritersideBuildProfileMissingInstance": "Um elemento deve especificar um ID de instância.", - "diagnosticWritersideTreeInvalidInclude": "Um da árvore deve especificar from e element-id.", - "diagnosticWritersideTreeMissingSnippetId": "Um da árvore deve especificar um id.", - "diagnosticWritersideTreeInvalidCrossInstanceReference": "Uma referência de sumário entre instâncias deve especificar ref e in.", - "diagnosticWritersideTreeConflictingTargets": "Um elemento do sumário não pode apontar para mais do que um tópico, referência, link ou redirecionamento.", - "diagnosticWritersideTreeDuplicateElementId": "O ID de elemento da árvore “{id}” foi declarado mais de uma vez.", - "diagnosticWritersideInstanceGroupsInvalidRoot": "O ficheiro de grupos de instâncias deve ter um elemento raiz .", - "diagnosticWritersideInstanceGroupInvalid": "Um grupo de instâncias deve especificar um id e uma lista de instâncias não vazios.", - "diagnosticWritersideInstanceGroupDuplicateId": "O ID do grupo de instâncias “{id}” foi declarado mais de uma vez.", - "diagnosticWritersideExternalTreeInclude": "A inclusão de sumário “{source}#{id}” pertence ao módulo externo “{origin}” e não pode ser expandida neste espaço de trabalho.", - "diagnosticWritersideTreeIncludeElementMissing": "O elemento de árvore “{id}” não existe na árvore registada “{source}”.", - "diagnosticWritersideTreeCircularInclude": "A inclusão de árvore “{source}#{id}” cria um ciclo.", - "diagnosticWritersideUnknownInstanceGroup": "A condição de instância referencia o grupo desconhecido “@{group}”.", - "diagnosticWritersideReferenceInstanceMissing": "A referência entre instâncias aponta para a instância desconhecida “{instance}”.", - "diagnosticWritersideReferenceTopicMissing": "O tópico “{topic}” não está na instância referenciada “{instance}”.", - "download": "Baixar", - "exportWritersideAsPdf": "Exportar Writerside como PDF", - "writersidePdfContent": "Conteúdo da exportação", - "writersidePdfPage": "Página", - "exportingWritersidePdf": "Exportando PDF do Writerside…", - "ai": "IA", - "aiLocalOllama": "Ollama local", - "aiDisabled": "Desativado", - "aiLocalOnlyDescription": "A edição com IA é iniciada apenas de forma explícita. O BusyMark envia somente o contexto exibido ao provedor selecionado e nunca aplica uma proposta sem revisão.", - "aiProvider": "Provedor de IA", - "aiDefaultProvider": "Provedor predefinido", - "aiConfigureProvider": "Configurar provedor", - "aiChooseProvider": "Escolher provedor de IA", - "aiOllamaEndpoint": "Endpoint do Ollama", - "aiOllamaModel": "Modelo do Ollama", - "aiTestConnection": "Testar conexão", - "aiTestingConnection": "Testando…", - "aiConnectionReady": "Conectado. {count} modelo(s) instalado(s) encontrado(s).", - "aiNoModels": "Nenhum modelo selecionado.", - "aiConnectionFailed": "O BusyMark não conseguiu verificar a geração de texto por IA.", - "aiConfigureFirst": "Ative um provedor de IA e verifique um modelo em Configurações → IA.", - "aiEditWithAi": "Editar com IA", - "aiRefineWithAi": "Melhorar com IA", - "aiInstruction": "Instrução", - "aiChangeTarget": "O que pode ser alterado", - "aiSharedContext": "Contexto compartilhado com a IA", - "aiTargetSelection": "Conteúdo selecionado", - "aiTargetInsertAfterBlock": "Inserir após o bloco atual", - "aiTargetCurrentBlock": "Bloco atual", - "aiTargetCurrentSection": "Seção atual", - "aiTargetCompleteDocument": "Documento completo", - "aiContextNone": "Sem contexto do documento", - "aiContextSelection": "Conteúdo selecionado", - "aiContextCurrentBlock": "Bloco atual", - "aiContextCurrentSection": "Seção atual", - "aiContextCompleteDocument": "Documento completo", - "aiGenerating": "Gerando proposta…", - "aiProposal": "Proposta de IA", - "aiGenerateProposal": "Gerar proposta", - "aiContextDisclosure": "O provedor selecionado receberá {count} caracteres do contexto exibido.", - "aiOriginal": "Texto original", - "aiSuggested": "Sugestão", - "aiApplyProposal": "Aplicar proposta", - "aiTokenUsage": "{input} tokens de entrada · {output} tokens de saída", - "aiStaleProposal": "O documento foi alterado enquanto esta proposta era gerada. Execute a ação novamente.", - "gitAiStagedChangesChanged": "As alterações preparadas mudaram enquanto esta mensagem de commit era gerada. Execute a ação novamente.", - "aiViewContext": "Ver contexto enviado", - "aiReviewExactContent": "Revisar conteúdo exato", - "aiContentToChange": "Conteúdo a alterar", - "aiContentSentToAi": "Conteúdo enviado à IA", - "aiApiKey": "Chave de API", - "aiApiKeyStoredHint": "Uma chave está armazenada no cofre de credenciais do sistema", - "aiApiKeyEnterHint": "Insira uma chave de API do provedor", - "aiReplaceApiKey": "Substituir chave de API", - "aiSaveApiKey": "Salvar chave de API com segurança", - "aiRemoveApiKey": "Remover chave de API salva", - "aiCredentialSaved": "A chave de API foi salva no cofre de credenciais do sistema.", - "aiCredentialRemoved": "A chave de API salva foi removida.", - "aiModelRouting": "Seleção de modelo", - "aiAutomaticRouting": "Automática conforme a tarefa", - "aiFixedModelRouting": "Usar o modelo selecionado", - "aiPreferredModel": "Modelo preferido", - "aiModel": "Modelo", - "aiUsageThisMonth": "{requests} solicitações · {input} tokens de entrada · {output} tokens de saída", - "aiCloudConsentTitle": "Enviar conteúdo para {provider}?", - "aiCloudConsentEnable": "Ativar {provider}", - "aiCloudConsentMessage": "Somente o conteúdo exibido em cada caixa de diálogo de revisão de IA é enviado. As solicitações não mantêm estado, as propostas exigem revisão e a chave de API é armazenada no cofre de credenciais do sistema Linux.", - "aiCloudConsentRequired": "Primeiro, confirme o compartilhamento de dados com {provider} em Configurações → IA.", - "aiGenerationVerified": "Geração verificada com {model}. Há {count} modelos compatíveis disponíveis.", - "aiColdStartObserved": "Foi detetado um arranque a frio do modelo local.", - "aiNoCompatibleModels": "Não há nenhum modelo compatível de geração de texto disponível.", - "aiEnableProvider": "Primeiro, ative um provedor de IA.", - "aiDraftCommitMessage": "Criar rascunho da mensagem de commit", - "aiDrafting": "Criando rascunho…", - "aiDraftWithAi": "Criar rascunho com IA", - "generateOrUpdateMarkdownToc": "Gerar/atualizar sumário", - "markdownTocTitle": "Sumário", - "markdownTocUpdated": "Sumário atualizado com {count} entradas.", - "markdownTocNoHeadings": "Adicione pelo menos um título de seção antes de gerar um sumário.", - "markdownTocMalformedMarkers": "Os marcadores de sumário do BusyMark estão ausentes, duplicados ou fora de ordem.", - "diagnosticMarkdownHeadingSkippedLevel": "O título de nível {level} vem após o nível {previousLevel}; revise o aninhamento das seções.", - "diagnosticMarkdownLinkEmptyText": "O texto do link está vazio; forneça um nome acessível que descreva sua finalidade.", - "diagnosticMarkdownLinkReviewText": "Verifique se o texto do link “{text}” descreve sua finalidade no contexto.", - "diagnosticMarkdownTableEmptyHeader": "Os cabeçalhos da tabela devem identificar suas colunas; preencha cada cabeçalho vazio.", - "commandPalette": "Paleta de comandos", - "commandPaletteHint": "Digite um comando", - "commandPaletteEmpty": "Nenhum comando correspondente", - "tableAlignmentUnspecified": "Alinhamento: não especificado", - "tableAlignmentLeft": "Alinhamento: esquerda", - "tableAlignmentCenter": "Alinhamento: centro", - "tableAlignmentRight": "Alinhamento: direita", - "sourceSearchReplacement": "Substituir por", - "sourceSearchReplaceCurrent": "Substituir atual", - "sourceSearchReplaceAndFindNext": "Substituir e localizar próximo", - "sourceSearchReplaceAll": "Substituir tudo", - "workspaceReplace": "Substituir no espaço de trabalho", - "reviewReplacements": "Revisar substituições", - "applyReplacements": "Aplicar substituições", - "skippedFiles": "Arquivos ignorados", - "workspaceReplaceDirtyBuffer": "Conteúdo não salvo do editor", - "workspaceReplaceDiskContent": "Conteúdo salvo no disco", - "selectFileMatches": "Selecionar todas as {count} correspondências", - "workspaceReplaceApplied": "Foram substituídas {matches} correspondências em {files} arquivos; {skipped} ignoradas.", - "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Quebra de linha final", - "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Sem quebra de linha final", - "normalizeLineEndings": "Normalizar finais de linha", - "workspaceReplaceMixedLineEndings": "{fileName} usa finais de linha mistos. Escolha o formato antes de substituir.", - "mixedLineEndingsSavePrompt": "Este documento contém finais de linha mistos. Escolha um formato.", - "workspaceReplaceIssueOversized": "Um arquivo grande demais foi ignorado.", - "workspaceReplaceIssueUnreadable": "Um arquivo que não pôde ser lido foi ignorado.", - "workspaceReplaceIssueInvalidUtf8": "Um arquivo que não é UTF-8 válido foi ignorado.", - "workspaceReplaceIssueTruncated": "A prévia de substituições foi truncada.", - "workspaceReplaceIssueFileChanged": "Um arquivo alterado após a prévia foi ignorado.", - "workspaceReplaceIssueBufferChanged": "Um buffer do editor alterado após a prévia foi ignorado.", - "workspaceReplaceIssueNormalizationRequired": "Escolha a normalização LF ou CRLF antes de substituir.", - "externalChangesTitle": "Alterações externas — {fileName}", - "externalFileDeleted": "Este arquivo foi excluído do disco.", - "externalFileChanged": "Este arquivo mudou no disco enquanto você tem alterações não salvas.", - "compare": "Comparar", - "reloadFromDisk": "Recarregar do disco", - "keepMine": "Manter minha versão", - "saveAs": "Salvar como", - "unsavedChangesMultipleMessage": "Há {count} documentos com alterações não salvas. Deseja salvá-los antes de continuar?", - "workspaceReplaceIssuePartialConflict": "A reversão foi interrompida porque o ficheiro foi alterado em simultâneo. Algumas substituições podem permanecer; o conteúdo deslocado foi preservado no caminho abaixo.", - "workspaceReplaceIssueApplyFailed": "Nenhuma substituição foi aplicada porque o conjunto revisado não pôde ser salvo com segurança.", - "workspaceRecoveryRestored": "Foram recuperados {count} documentos não salvos. Revise cada documento recuperado antes de continuar.", - "workspaceRecoveryDamaged": "Não foi possível restaurar {count} registros de recuperação danificados. Os documentos recuperados válidos continuam disponíveis.", - "recoveredDocumentReview": "O conteúdo não salvo de {fileName} foi recuperado. Revise-o e depois salve, salve como ou descarte-o.", - "commandUnavailableInContext": "Este comando não está disponível no contexto atual.", - "mathRenderFailed": "Não foi possível renderizar a expressão matemática.", - "inlineMath": "Matemática em linha", - "displayMath": "Matemática em bloco" + "@@locale": "pt" } diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb new file mode 100644 index 00000000..5cf5d654 --- /dev/null +++ b/lib/l10n/app_pt_BR.arb @@ -0,0 +1,3057 @@ +{ + "@@locale": "pt_BR", + "reportIssue": "Comunicar um problema", + "feedbackCategory": "Categoria", + "feedbackChooseCategory": "Escolha uma categoria", + "feedbackCategoryProblem": "Problema ou erro", + "feedbackCategoryFeature": "Pedido de funcionalidade", + "feedbackCategoryPrivacySecurity": "Preocupação com privacidade ou segurança", + "feedbackCategoryUsability": "Preocupação de usabilidade", + "feedbackCategoryOther": "Outro", + "feedbackSubject": "Assunto", + "feedbackMessage": "Mensagem detalhada", + "feedbackReplyEmail": "E-mail para resposta (opcional)", + "feedbackIncludeTechnicalDetails": "Incluir detalhes técnicos", + "feedbackTechnicalDetailsDisclosure": "Quando esta opção está ativada, adiciona apenas a versão do sistema operacional Linux e o locale do BusyMark. Nenhum log, arquivo, dados de conta ou outro diagnóstico é anexado.", + "feedbackSubmit": "Enviar", + "feedbackSubmitting": "A enviar…", + "feedbackCategoryRequired": "Escolha uma categoria.", + "feedbackSubjectLength": "O assunto deve ter entre 3 e 120 caracteres.", + "feedbackMessageLength": "A mensagem deve ter entre 10 e 5000 caracteres.", + "feedbackReplyEmailInvalid": "Introduza um endereço de e-mail válido ou deixe este campo vazio.", + "feedbackConnectionFailure": "O BusyMark não conseguiu estabelecer conexão. Verifique a conexão com a Internet e tente novamente.", + "feedbackTimeoutFailure": "O pedido excedeu o tempo limite. Tente novamente.", + "feedbackRateLimitedFailure": "Foram enviados relatórios demais a partir desta conexão. Aguarde e tente novamente.", + "feedbackRejectedFailure": "O servidor rejeitou o relatório. Verifique os campos do formulário e tente novamente.", + "feedbackServerFailure": "O servidor não conseguiu aceitar o relatório. Tente novamente mais tarde.", + "feedbackSuccess": "Comentários enviados. ID de referência: {id}", + "appTitle": "BusyMark", + "@appTitle": { + "description": "Application name." + }, + "appSubtitle": "Editor para arquivos Markdown e projetos de documentação compatíveis com o Writerside.", + "@appSubtitle": { + "description": "Short application description." + }, + "aboutBusyMark": "Sobre BusyMark", + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, + "aboutTagline": "Editor de Markdown e Writerside", + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, + "aboutLicenseLabel": "Licença", + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, + "aboutLicenseName": "Apache License 2.0", + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, + "aboutWebsite": "Site", + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, + "aboutSourceCode": "Código-fonte", + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, + "advanced": "Avançado", + "@advanced": { + "description": "Settings section title for advanced actions." + }, + "appearance": "Aparência", + "@appearance": { + "description": "Settings section title for appearance options." + }, + "apply": "Aplicar", + "@apply": { + "description": "Button label that applies a dialog change." + }, + "back": "Voltar", + "@back": { + "description": "Tooltip for navigating back." + }, + "bottomLeft": "Canto inferior esquerdo", + "@bottomLeft": { + "description": "Editing button position option." + }, + "bottomRight": "Canto inferior direito", + "@bottomRight": { + "description": "Editing button position option." + }, + "cancel": "Cancelar", + "@cancel": { + "description": "Cancel button label." + }, + "choose": "Escolher", + "@choose": { + "description": "Button label for choosing a file or path." + }, + "chooseLocation": "Escolher local", + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, + "copy": "Copiar", + "@copy": { + "description": "Copy command label." + }, + "copyName": "Copiar nome", + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, + "copyFileName": "Copiar nome do arquivo", + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, + "copyPath": "Copiar caminho", + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, + "create": "Criar", + "@create": { + "description": "Create action label." + }, + "creating": "Criando...", + "@creating": { + "description": "Progress label while a project or topic is being created." + }, + "cut": "Recortar", + "@cut": { + "description": "Cut command label." + }, + "promoteSection": "Promover seção", + "demoteSection": "Rebaixar seção", + "moveSectionUp": "Mover seção para cima", + "moveSectionDown": "Mover seção para baixo", + "confirmDeleteSectionTitle": "Excluir seção?", + "confirmDeleteSectionMessage": "Excluir “{name}” e todo o conteúdo da seção? Isso não pode ser desfeito.", + "darkTheme": "Escuro", + "@darkTheme": { + "description": "Dark theme option." + }, + "discard": "Descartar", + "@discard": { + "description": "Discard unsaved changes button label." + }, + "editor": "Editor", + "@editor": { + "description": "Editor view label." + }, + "file": "Arquivo", + "@file": { + "description": "Generic file kind label." + }, + "fileHistory": "Histórico do arquivo", + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, + "folder": "Pasta", + "@folder": { + "description": "Folder kind label." + }, + "insert": "Inserir", + "@insert": { + "description": "Insert button label." + }, + "keyboardShortcuts": "Atalhos de teclado", + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, + "lightTheme": "Claro", + "@lightTheme": { + "description": "Light theme option." + }, + "mainMenu": "Menu principal", + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, + "fullScreen": "Tela cheia", + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, + "markdown": "Markdown", + "@markdown": { + "description": "Markdown format label." + }, + "open": "Abrir", + "@open": { + "description": "Open action label." + }, + "openInFiles": "Abrir em Arquivos", + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, + "pathActions": "Ações do caminho", + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, + "outline": "Estrutura", + "@outline": { + "description": "Outline sidebar tab label." + }, + "overwrite": "Sobrescrever", + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, + "paste": "Colar", + "@paste": { + "description": "Paste command label." + }, + "pasteWithoutFormatting": "Colar sem formatar", + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, + "reading": "Leitura", + "@reading": { + "description": "Reading view label." + }, + "removeFromRecent": "Remover dos recentes", + "recent": "Recentes", + "@recent": { + "description": "Recent workspaces section title." + }, + "redo": "Refazer", + "@redo": { + "description": "Redo command label." + }, + "save": "Salvar", + "@save": { + "description": "Save action label." + }, + "search": "Pesquisar", + "@search": { + "description": "Search action label and field hint." + }, + "selectAll": "Selecionar tudo", + "@selectAll": { + "description": "Select all command label." + }, + "settings": "Configurações", + "@settings": { + "description": "Settings action label." + }, + "source": "Código-fonte", + "@source": { + "description": "Source view label." + }, + "split": "Dividido", + "@split": { + "description": "Split view label." + }, + "systemTheme": "Sistema", + "@systemTheme": { + "description": "System theme option." + }, + "theme": "Tema", + "@theme": { + "description": "Theme setting label." + }, + "appLanguage": "Idioma", + "@appLanguage": { + "description": "Application language setting label." + }, + "systemLanguage": "Sistema", + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, + "languageEnglish": "English", + "@languageEnglish": { + "description": "Language selector option for English." + }, + "languageGerman": "Deutsch", + "@languageGerman": { + "description": "Language selector option for German." + }, + "languageDutch": "Nederlands", + "@languageDutch": { + "description": "Language selector option for Dutch." + }, + "languageTurkish": "Türkçe", + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, + "languageItalian": "Italiano", + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk bokmål", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, + "languageFrench": "Français", + "@languageFrench": { + "description": "Language selector option for French." + }, + "languageRussian": "Русский", + "@languageRussian": { + "description": "Language selector option for Russian." + }, + "languageUkrainian": "Українська", + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, + "languagePolish": "Polski", + "@languagePolish": { + "description": "Language selector option for Polish." + }, + "languageSpanish": "Español", + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, + "languagePortuguese": "Português", + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, + "languageArabic": "العربية", + "@languageArabic": { + "description": "Language selector option for Arabic." + }, + "languagePersian": "فارسی", + "@languagePersian": { + "description": "Language selector option for Persian." + }, + "languageHindi": "हिन्दी", + "@languageHindi": { + "description": "Language selector option for Hindi." + }, + "languageIndonesian": "Bahasa Indonesia", + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, + "languageEstonian": "Eesti", + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, + "languageVietnamese": "Tiếng Việt", + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, + "languageJapanese": "日本語", + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, + "languageKorean": "한국어", + "@languageKorean": { + "description": "Language selector option for Korean." + }, + "languageSimplifiedChinese": "简体中文", + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, + "toggleSidebar": "Painel lateral", + "@toggleSidebar": { + "description": "Native header bar sidebar toggle tooltip." + }, + "topLeft": "Canto superior esquerdo", + "@topLeft": { + "description": "Editing button position option." + }, + "topRight": "Canto superior direito", + "@topRight": { + "description": "Editing button position option." + }, + "undo": "Desfazer", + "@undo": { + "description": "Undo command label." + }, + "validate": "Validar", + "@validate": { + "description": "Validate action label." + }, + "validation": "Validação", + "@validation": { + "description": "Settings section title for validation options." + }, + "viewMode": "Modo de exibição", + "@viewMode": { + "description": "Native header bar view mode control label." + }, + "welcome": "Bem-vindo", + "@welcome": { + "description": "Welcome screen label and tooltip." + }, + "writerside": "Writerside", + "@writerside": { + "description": "Writerside workspace kind label." + }, + "xml": "XML", + "@xml": { + "description": "XML format label." + }, + "fileTypeMarkdown": "Markdown", + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, + "fileTypeImages": "Imagens", + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, + "openMarkdownFile": "Abrir arquivo Markdown", + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, + "markdownFileExtensions": ".md ou .markdown", + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, + "openFolderOrWritersideProject": "Abrir pasta ou projeto Writerside", + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, + "markdownFolderOrWritersideProject": "Pasta Markdown ou projeto compatível com Writerside", + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, + "noOpenFile": "Nenhum arquivo aberto", + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, + "shortcutDeleteTreeItemDescription": "Excluir o item selecionado em Arquivos ou remover o tópico selecionado do sumário", + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, + "shortcutGroupGeneral": "Geral", + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, + "shortcutNewDocument": "Criar", + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for creating a document." + }, + "shortcutNewDocumentDescription": "Criar arquivo Markdown ou projeto Writerside", + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating a document." + }, + "shortcutOpenDescription": "Abrir um arquivo Markdown, uma pasta ou um projeto Writerside", + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, + "shortcutSaveDescription": "Salvar o documento atual", + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, + "shortcutSearchDescription": "Pesquisar no espaço de trabalho atual", + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, + "shortcutKeyboardShortcutsDescription": "Mostrar esta referência de atalhos de teclado", + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, + "shortcutMarkdownAndHtmlDescription": "Abrir a referência de Markdown e HTML", + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, + "shortcutSettingsDescription": "Abrir as configurações do BusyMark", + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, + "shortcutNextTab": "Próxima guia", + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, + "shortcutNextTabDescription": "Ir para a próxima guia aberta", + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, + "shortcutPreviousTab": "Guia anterior", + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, + "shortcutPreviousTabDescription": "Ir para a guia aberta anterior", + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, + "shortcutCloseTab": "Fechar guia", + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, + "shortcutCloseTabDescription": "Fechar a guia ativa", + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, + "shortcutCloseAllTabs": "Fechar todas as guias", + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, + "shortcutCloseAllTabsDescription": "Fechar todas as guias abertas", + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, + "shortcutGroupTextEditing": "Edição de texto", + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, + "shortcutSelectAllDescription": "No modo Código-fonte, selecionar todo o texto; no modo Editor, pressionar duas vezes para selecionar todos os blocos", + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, + "shortcutCutDescription": "Recortar o texto selecionado", + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, + "shortcutCopyDescription": "Copiar o texto selecionado", + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, + "shortcutPasteDescription": "Colar da área de transferência", + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, + "shortcutPastePlainTextDescription": "Colar o texto da área de transferência sem formatação", + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, + "shortcutUndoDescription": "Desfazer a última edição", + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, + "shortcutRedoDescription": "Refazer a última edição desfeita", + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, + "shortcutInsertIndentation": "Inserir recuo", + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, + "shortcutInsertIndentationDescription": "Inserir recuo na posição do cursor", + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, + "shortcutOutdentSource": "Diminuir recuo do código-fonte", + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, + "shortcutOutdentSourceDescription": "Remover um nível de recuo no modo Código-fonte", + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, + "shortcutEscape": "Fechar a pesquisa ou limpar a seleção de blocos", + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, + "shortcutEscapeDescription": "Fechar a pesquisa do espaço de trabalho ou limpar uma seleção de blocos no modo Editor", + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, + "shortcutGroupFormatting": "Formatação", + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, + "shortcutBoldDescription": "Alternar negrito no texto selecionado", + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, + "shortcutItalicDescription": "Alternar itálico no texto selecionado", + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, + "shortcutUnderlineDescription": "Alternar sublinhado no texto selecionado", + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, + "shortcutLinkDescription": "Inserir ou editar um link", + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, + "shortcutInlineCodeDescription": "Alternar código embutido no texto selecionado", + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, + "shortcutStrikethroughDescription": "Alternar tachado no texto selecionado", + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, + "shortcutGroupBlocks": "Blocos", + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, + "shortcutParagraphDescription": "Definir o bloco atual como parágrafo", + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, + "shortcutHeading1Description": "Definir o bloco atual como Título 1", + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, + "shortcutHeading2Description": "Definir o bloco atual como Título 2", + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, + "shortcutHeading3Description": "Definir o bloco atual como Título 3", + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, + "shortcutHeading4Description": "Definir o bloco atual como Título 4", + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, + "shortcutHeading5Description": "Definir o bloco atual como Título 5", + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, + "shortcutHeading6Description": "Definir o bloco atual como Título 6", + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, + "shortcutGroupLists": "Listas", + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, + "numberedList": "Lista numerada", + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, + "shortcutNumberedListDescription": "Alternar formatação de lista numerada", + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, + "bulletedList": "Lista com marcadores", + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, + "shortcutBulletedListDescription": "Alternar formatação de lista com marcadores", + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, + "checklist": "Lista de verificação", + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, + "shortcutChecklistDescription": "Alternar formatação de lista de verificação", + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, + "shortcutGroupSidebar": "Barra lateral", + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, + "sidebarViewMenu": "Visualização da barra lateral", + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, + "createMarkdownFile": "Criar arquivo Markdown", + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, + "createMarkdownFileDescription": "Iniciar um documento Markdown local não salvo", + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, + "createWritersideProject": "Criar projeto Writerside", + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, + "createWritersideProjectDescription": "Iniciar um projeto local compatível com Writerside", + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, + "defaultProjectName": "Documentação", + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, + "defaultInstanceName": "Guia do usuário", + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, + "defaultStartTopicTitle": "Primeiros passos", + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, + "projectName": "Nome do projeto", + "@projectName": { + "description": "Create project dialog field label." + }, + "directoryName": "Nome do diretório", + "@directoryName": { + "description": "Create project dialog field label." + }, + "instanceName": "Nome da instância", + "@instanceName": { + "description": "Create project dialog field label." + }, + "instanceId": "ID da instância", + "@instanceId": { + "description": "Create project dialog field label." + }, + "startTopicTitle": "Título do tópico inicial", + "@startTopicTitle": { + "description": "Create project dialog field label." + }, + "location": "Local", + "@location": { + "description": "Create dialog location section label." + }, + "projectNameRequired": "O nome do projeto é obrigatório.", + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, + "directoryNameRequired": "O nome do diretório é obrigatório.", + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, + "useSingleSafeDirectoryName": "Use um único nome de diretório seguro.", + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, + "useLowercaseIdentifier": "Use um identificador em minúsculas com letras, números, sublinhados ou hifens.", + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, + "startTopicTitleRequired": "O título do tópico inicial é obrigatório.", + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, + "createWritersideProjectFailed": "Não foi possível criar o projeto Writerside.", + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, + "settingsTitle": "Configurações do BusyMark", + "@settingsTitle": { + "description": "Settings screen title." + }, + "autoSave": "Salvamento automático", + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, + "autoSaveDescription": "Salva automaticamente as alterações do arquivo após um curto período de inatividade.", + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, + "wordWrap": "Quebra de linha", + "@wordWrap": { + "description": "Word wrap setting label." + }, + "editorFontSize": "Tamanho da fonte do editor", + "@editorFontSize": { + "description": "Editor font size setting label." + }, + "validateOnEdit": "Validar ao editar", + "@validateOnEdit": { + "description": "Validation setting label." + }, + "clearRecentWorkspaces": "Limpar espaços de trabalho recentes", + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, + "editingButtonsPosition": "Posição dos botões de edição", + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, + "editingButtonsPositionDescription": "Escolha onde os botões flutuantes de edição WYSIWYG aparecem.", + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, + "editingButtonsDirection": "Orientação dos botões de edição", + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, + "editingButtonsDirectionDescription": "Escolha se os botões flutuantes de edição WYSIWYG ficam dispostos horizontalmente ou verticalmente.", + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, + "horizontal": "Horizontal", + "@horizontal": { + "description": "Editing button direction option." + }, + "vertical": "Vertical", + "@vertical": { + "description": "Editing button direction option." + }, + "privacy": "Privacidade", + "@privacy": { + "description": "Settings section title for privacy options." + }, + "allowRemoteImages": "Carregar imagens remotas", + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, + "allowRemoteImagesDescription": "Permitir que a pré-visualização do Markdown e o editor carreguem imagens de URLs HTTP e HTTPS.", + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, + "clearRemoteImagePermissions": "Limpar permissões de imagens remotas", + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, + "clearRemoteImagePermissionsDescription": "Esquecer os espaços de trabalho autorizados a carregar imagens remotas.", + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, + "clearGitWorkspaceTrust": "Limpar espaços de trabalho confiáveis para o Git", + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, + "clearGitWorkspaceTrustDescription": "Perguntar antes de ativar recursos do Git em espaços de trabalho considerados confiáveis anteriormente.", + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, + "settingsWindowSectionTitle": "Janela", + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, + "settingsReopenWorkspaceOnStartupTitle": "Reabrir o espaço de trabalho anterior ao iniciar", + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, + "settingsReopenWorkspaceOnStartupDescription": "Abra o espaço de trabalho e as abas da sessão anterior quando o BusyMark iniciar.", + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, + "settingsConfirmCloseWithUnsavedChangesTitle": "Confirmar antes de fechar com alterações não salvas", + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, + "settingsConfirmCloseWithUnsavedChangesDescription": "Perguntar antes de fechar o BusyMark quando documentos tiverem alterações não salvas.", + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, + "closeUnsavedChangesTitle": "Alterações não salvas", + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, + "closeUnsavedChangesSingleMessage": "Este documento tem alterações não salvas. Salvar as alterações antes de fechar o BusyMark?", + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{Salvar as alterações antes de fechar o BusyMark?} =1{1 documento tem alterações não salvas. Salvar as alterações antes de fechar o BusyMark?} other{{count} documentos têm alterações não salvas. Salvar as alterações antes de fechar o BusyMark?}}", + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "closeUnsavedChangesCancel": "Cancelar", + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesDiscard": "Descartar", + "@closeUnsavedChangesDiscard": { + "description": "Discard button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesSave": "Salvar", + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, + "currentFile": "arquivo atual", + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, + "unsavedChanges": "Alterações não salvas", + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, + "unsavedChangesMessage": "Você tem alterações não salvas em {fileName}. Salvá-las antes de continuar?", + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "fileChangedOnDisk": "Arquivo alterado no disco", + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, + "fileChangedOnDiskMessage": "Este arquivo foi alterado no disco desde que foi aberto. Sobrescrever?", + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, + "untitledMarkdownFileName": "Sem título.md", + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, + "unorderedList": "Lista não ordenada", + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, + "orderedList": "Lista ordenada", + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, + "taskList": "Lista de tarefas", + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, + "toggleTaskChecked": "Marcar/desmarcar tarefa", + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, + "indentListItem": "Recuar item da lista", + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, + "outdentListItem": "Remover recuo do item da lista", + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, + "blockquote": "Citação em bloco", + "@blockquote": { + "description": "Blockquote command label." + }, + "codeBlock": "Bloco de código", + "@codeBlock": { + "description": "Code block command or preview label." + }, + "codeBlockLanguage": "Linguagem do bloco de código", + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, + "image": "Imagem", + "video": "Vídeo", + "openVideo": "Reproduzir vídeo", + "pauseVideo": "Pausar vídeo", + "videoUnavailable": "Vídeo indisponível", + "videoPreview": "Pré-visualização do vídeo", + "diagnosticWritersideVideoMissingSource": "O vídeo não tem o atributo src.", + "diagnosticWritersideVideoUnsupportedSource": "Fonte de vídeo não suportada: {source}", + "diagnosticWritersideVideoMissingFile": "O arquivo de vídeo não existe: {source}", + "diagnosticWritersideVideoMissingPreview": "A imagem de pré-visualização do vídeo não existe: {preview}", + "@image": { + "description": "Image command and document kind label." + }, + "inlineImage": "Imagem embutida", + "@inlineImage": { + "description": "Inline image command label." + }, + "table": "Tabela", + "@table": { + "description": "Table command label." + }, + "htmlBlock": "Bloco HTML", + "@htmlBlock": { + "description": "HTML block command label." + }, + "shortcutHtmlBlockDescription": "Inserir ou editar um bloco HTML", + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, + "renderedHtml": "HTML renderizado", + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, + "editHtml": "Editar HTML", + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, + "htmlSource": "Código-fonte HTML", + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, + "htmlContentDefault": "Conteúdo HTML", + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, + "thematicBreak": "Separador temático", + "@thematicBreak": { + "description": "Thematic break command label." + }, + "bold": "Negrito", + "@bold": { + "description": "Bold command label." + }, + "italic": "Itálico", + "@italic": { + "description": "Italic command label." + }, + "underline": "Sublinhado", + "@underline": { + "description": "Underline command label." + }, + "strikethrough": "Tachado", + "@strikethrough": { + "description": "Strikethrough command label." + }, + "inlineCode": "Código embutido", + "@inlineCode": { + "description": "Inline code command label." + }, + "link": "Link", + "@link": { + "description": "Link command and preview label." + }, + "hardLineBreak": "Quebra de linha forçada", + "@hardLineBreak": { + "description": "Hard line break command label." + }, + "textStyle": "Estilo de texto", + "@textStyle": { + "description": "Text style menu tooltip." + }, + "paragraph": "Parágrafo", + "@paragraph": { + "description": "Paragraph style label." + }, + "heading1": "Título 1", + "@heading1": { + "description": "Heading 1 style label." + }, + "heading2": "Título 2", + "@heading2": { + "description": "Heading 2 style label." + }, + "heading3": "Título 3", + "@heading3": { + "description": "Heading 3 style label." + }, + "heading4": "Título 4", + "@heading4": { + "description": "Heading 4 style label." + }, + "heading5": "Título 5", + "@heading5": { + "description": "Heading 5 style label." + }, + "heading6": "Título 6", + "@heading6": { + "description": "Heading 6 style label." + }, + "headingLevelAbbreviation": "H{level}", + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "deleteTable": "Excluir tabela", + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, + "tableColumnNumber": "Coluna {columnNumber}", + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "insertColumnLeft": "Inserir coluna à esquerda", + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, + "insertColumnRight": "Inserir coluna à direita", + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, + "deleteColumn": "Excluir coluna", + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, + "tableRowNumber": "Linha {rowNumber}", + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, + "insertRowAbove": "Inserir linha acima", + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, + "insertRowBelow": "Inserir linha abaixo", + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, + "deleteRow": "Excluir linha", + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, + "tableHeaderHint": "Cabeçalho", + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, + "tableCellHint": "Célula", + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, + "language": "Linguagem", + "@language": { + "description": "Code block language field label." + }, + "hideEditingButtons": "Ocultar botões de edição", + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, + "showEditingButtons": "Mostrar botões de edição", + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, + "altText": "Texto alternativo", + "@altText": { + "description": "Image alt text field label." + }, + "editorPlaceholderText": "texto", + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, + "editorPlaceholderCode": "código", + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, + "editorPlaceholderAltText": "texto alternativo", + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, + "describeTheImage": "Descreva a imagem", + "@describeTheImage": { + "description": "Image alt text hint." + }, + "columns": "Colunas", + "@columns": { + "description": "Table dialog columns field label." + }, + "rows": "Linhas", + "@rows": { + "description": "Table dialog rows field label." + }, + "tableHeaderNumber": "Cabeçalho {columnNumber}", + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, + "tableCellDefault": "Célula", + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, + "noImageSource": "Nenhuma origem de imagem", + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, + "remoteImageBlocked": "Imagem remota bloqueada", + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, + "remoteImageBlockedTooltip": "Escolha se o BusyMark pode carregar imagens remotas.", + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, + "remoteImagesBlockedTitle": "As imagens remotas estão bloqueadas", + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, + "remoteImagesBlockedMessage": "Este documento faz referência a imagens da Internet. Carregá-las pode revelar informações de rede ao servidor que as hospeda.", + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, + "loadRemoteImagesForWorkspace": "Carregar neste espaço de trabalho", + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, + "alwaysLoadRemoteImages": "Sempre carregar imagens remotas", + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, + "hideSidebar": "Ocultar painel lateral", + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar." + }, + "showSidebar": "Mostrar painel lateral", + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar." + }, + "showPreview": "Mostrar pré-visualização", + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, + "hidePreview": "Ocultar pré-visualização", + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, + "workspaceKindUnsavedMarkdown": "Arquivo Markdown não salvo", + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, + "workspaceKindSingleMarkdown": "Arquivo Markdown único", + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, + "workspaceKindMarkdownFolder": "Pasta Markdown", + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, + "workspaceKindWritersideModule": "Módulo Writerside", + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, + "problems": "Problemas", + "@problems": { + "description": "Diagnostics dialog title." + }, + "diagnosticCount": "{count, plural, =0{Nenhum diagnóstico} =1{1 diagnóstico} other{{count} diagnósticos}}", + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "files": "Arquivos", + "@files": { + "description": "Files sidebar tab label." + }, + "toc": "TOC", + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, + "tocActions": "Ações do sumário", + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, + "markdownUnsaved": "Markdown - não salvo", + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, + "workspaceDetail": "{kind} - {count, plural, =1{1 arquivo} other{{count} arquivos}}", + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "noFiles": "Nenhum arquivo", + "@noFiles": { + "description": "Empty state shown when there are no files." + }, + "noWritersideToc": "Nenhum TOC do Writerside", + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, + "tocSection": "Seção do TOC", + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, + "newTopic": "Novo tópico", + "@newTopic": { + "description": "Create new Writerside topic action label." + }, + "newChildTopic": "Novo subtópico", + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, + "newSiblingTopic": "Novo tópico no mesmo nível", + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, + "renameTopicFile": "Renomear arquivo do tópico", + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, + "topicPlacement": "Posição no TOC", + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, + "tocRoot": "Na raiz do TOC", + "@tocRoot": { + "description": "TOC placement option for the root level." + }, + "afterSelectedTopic": "Após o tópico selecionado", + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, + "insideSelectedTopic": "Dentro do tópico selecionado", + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, + "pasteAfterTopic": "Colar depois", + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, + "pasteAsChildTopic": "Colar como subtópico", + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, + "removeFromToc": "Remover do TOC", + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, + "confirmRemoveFromTocTitle": "Remover do TOC?", + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, + "confirmRemoveFromTocMessage": "Remover {name} deste TOC? O arquivo do tópico será mantido.", + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "confirmDeleteTopicTitle": "Excluir o arquivo do tópico?", + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, + "confirmDeleteTopicMessage": "Excluir {name} e removê-lo de todos os TOCs? Isso não pode ser desfeito.", + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "defaultNewTopicTitle": "Novo tópico", + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, + "topicTitle": "Título do tópico", + "@topicTitle": { + "description": "Create topic dialog field label." + }, + "fileName": "Nome do arquivo", + "@fileName": { + "description": "Create topic dialog field label." + }, + "topicTitleRequired": "O título do tópico é obrigatório.", + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, + "fileNameRequired": "O nome do arquivo é obrigatório.", + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, + "useSingleSafeFileName": "Use um único nome de arquivo seguro.", + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, + "useExpectedExtension": "Use a extensão {extension} para o formato selecionado.", + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "useIdentifierCharacters": "Use letras, números, sublinhados ou hifens antes da extensão.", + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, + "topicIdAlreadyExists": "O ID do tópico já existe.", + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, + "createWritersideTopicFailed": "Não foi possível criar o tópico do Writerside.", + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, + "noOutline": "Sem estrutura", + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, + "expandKind": "Expandir {kind}", + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "collapseKind": "Recolher {kind}", + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, + "foldKindSection": "seção", + "@foldKindSection": { + "description": "Fold kind label for a section." + }, + "foldKindList": "lista", + "@foldKindList": { + "description": "Fold kind label for a list." + }, + "foldKindQuote": "citação", + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, + "foldKindTag": "tag", + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, + "sourceSearchPreviousMatch": "Correspondência anterior", + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, + "sourceSearchNextMatch": "Próxima correspondência", + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, + "sourceSearchCaseSensitive": "Diferenciar maiúsculas de minúsculas", + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, + "sourceSearchWholeWord": "Palavra inteira", + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, + "sourceSearchRegex": "Expressão regular", + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, + "sourceSearchInvalidRegex": "Expressão regular inválida", + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, + "sourceLargeFileFeaturesPaused": "Arquivo grande: o realce e o recolhimento estão pausados", + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, + "nothingToRead": "Nenhum conteúdo para ler", + "admonition": "Aviso", + "quote": "Citação", + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, + "note": "Observação", + "@note": { + "description": "Preview label for a note admonition." + }, + "tip": "Dica", + "@tip": { + "description": "Preview label for a tip admonition." + }, + "warning": "Aviso", + "@warning": { + "description": "Preview label for a warning admonition." + }, + "tabs": "Guias", + "@tabs": { + "description": "Preview label for a tabs block." + }, + "tab": "Guia", + "@tab": { + "description": "Preview label for a tab block." + }, + "procedure": "Procedimento", + "@procedure": { + "description": "Preview label for a procedure block." + }, + "step": "Etapa", + "@step": { + "description": "Preview label for a procedure step." + }, + "topic": "Tópico", + "@topic": { + "description": "Preview label for a topic element." + }, + "chapter": "Capítulo", + "@chapter": { + "description": "Preview label for a chapter element." + }, + "couldNotOpenTarget": "Não foi possível abrir {target}", + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, + "linkTargetNotFound": "Destino do link não encontrado: {targetPath}", + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "cannotOpenFileTypeInEditor": "Não é possível abrir este tipo de arquivo no editor", + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, + "anchorNotFound": "Âncora não encontrada: {anchor}", + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "noProblemsFound": "Nenhum problema encontrado", + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, + "noResults": "Nenhum resultado", + "@noResults": { + "description": "Search empty state." + }, + "searchResultLine": "{relativePath} - linha {lineNumber}", + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, + "untitledResult": "Resultado sem título", + "@untitledResult": { + "description": "Fallback search result title." + }, + "documentKindMarkdownFile": "Arquivo Markdown", + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, + "documentKindWritersideMarkdownTopic": "Tópico Markdown do Writerside", + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideXmlTopic": "Tópico XML do Writerside", + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, + "documentKindWritersideTree": "Árvore do Writerside", + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, + "documentKindConfigurationFile": "Arquivo de configuração", + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, + "documentKindVariablesFile": "Arquivo de variáveis", + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, + "documentKindCategoriesFile": "Arquivo de categorias", + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, + "documentKindResourceFile": "Arquivo de recursos", + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, + "workspaceErrorOpenFailed": "Falha ao abrir: {error}", + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideProjectFailed": "Não foi possível criar o projeto Writerside: {error}", + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCreateWritersideTopicFailed": "Não foi possível criar o tópico do Writerside: {error}", + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorCouldNotOpenFile": "Não foi possível abrir o arquivo: {error}", + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorChooseWhereToSaveMarkdown": "Escolha onde salvar este arquivo Markdown.", + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, + "workspaceErrorSaveBlockedFileChangedOnDisk": "Salvamento bloqueado: o arquivo foi alterado no disco.", + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, + "workspaceErrorSaveFailed": "Falha ao salvar: {error}", + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "workspaceErrorValidationFailed": "Falha na validação: {error}", + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "errorPathDoesNotExist": "O caminho não existe: {path}", + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetDirectoryNotEmpty": "O diretório de destino já existe e não está vazio: {path}", + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTargetPathNotDirectory": "O caminho de destino já existe e não é um diretório: {path}", + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorGeneratedFileAlreadyExists": "O arquivo gerado já existe: {path}", + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorParentDirectoryRequired": "O diretório pai é obrigatório.", + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, + "errorParentDirectoryMissing": "O diretório pai não existe: {path}", + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorProjectNameRequired": "O nome do projeto é obrigatório.", + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, + "errorDirectoryNameRequired": "O nome do diretório é obrigatório.", + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, + "errorDirectoryNameUnsafe": "O nome do diretório deve ser um único segmento de caminho seguro.", + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, + "errorInstanceIdInvalid": "O ID da instância deve começar com uma letra minúscula e conter apenas letras minúsculas, números, sublinhados e hifens.", + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, + "errorTopicFileInvalid": "O nome do arquivo do tópico deve ser um nome de arquivo Markdown sem separadores de caminho.", + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, + "errorTopicTitleRequired": "O título do tópico é obrigatório.", + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, + "errorWritersideModuleRootMissing": "A raiz do módulo Writerside não existe: {path}", + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorWritersideModuleNotOpen": "Um módulo Writerside deve estar aberto para criar um tópico.", + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, + "errorWritersideInstanceTreeMissing": "O módulo Writerside não tem uma árvore de instância.", + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, + "errorWritersideTreeFileMissing": "O arquivo de árvore do Writerside não existe: {path}", + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorTopicIdAlreadyExists": "O ID do tópico \"{topicId}\" já existe neste módulo de ajuda.", + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, + "errorTopicFileAlreadyExists": "O arquivo do tópico já existe: {path}", + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, + "errorReferenceTopicMissing": "O tópico de referência não está presente na árvore selecionada: {topic}", + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideTocNodeMissing": "A entrada selecionada do TOC não existe mais.", + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, + "errorWritersideTocInvalidMove": "Uma entrada do TOC não pode ser movida para dentro de si mesma nem de um de seus descendentes.", + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, + "errorWritersideStartTopicDelete": "O tópico inicial {topic} não pode ser excluído. Escolha primeiro outra página inicial.", + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorTopicsRootUnsafe": "A raiz dos tópicos deve ser um diretório relativo seguro.", + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, + "errorTopicFileNameUnsafe": "O nome do arquivo do tópico deve ser um único segmento de caminho seguro.", + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, + "errorTopicFileExtensionMismatch": "A extensão do arquivo do tópico deve corresponder ao formato selecionado ({extension}).", + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, + "errorTopicFileNameInvalid": "O nome do arquivo do tópico deve conter apenas letras, números, sublinhados e hifens.", + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, + "errorUnknown": "Erro desconhecido: {code}", + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileStatFailed": "Não foi possível ler os metadados do arquivo: {error}", + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceScanSkipped": "Espaço de trabalho grande detectado. Alguns arquivos foram ignorados para manter o aplicativo responsivo.", + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, + "diagnosticWorkspaceScanInspectFailed": "Não foi possível inspecionar a entrada do espaço de trabalho: {error}", + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWorkspaceFileTooLarge": "O arquivo excede o limite beta de análise automática.", + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, + "diagnosticWorkspaceFileReadFailed": "Não foi possível ler o arquivo Markdown: {error}", + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticMarkdownAttributeMalformed": "O bloco de atributos de título do Writerside está malformado.", + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, + "diagnosticMarkdownHeadingDuplicateId": "ID de título duplicado \"{id}\".", + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicH1ConvertedToChapter": "Títulos H1 adicionais no nível superior são tratados como capítulos.", + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, + "diagnosticWritersideMarkdownTopicMissingTitle": "O tópico Markdown do Writerside não tem H1 nem título no front matter.", + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, + "diagnosticWritersideXmlTopicMissingTitle": "O tópico XML não tem título.", + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, + "diagnosticWritersideTopicFileMissingTitle": "O tópico \"{fileName}\" não tem título.", + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "diagnosticMarkdownFrontMatterMalformed": "O front matter não foi fechado.", + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, + "diagnosticMarkdownRawHtmlUnsafe": "Elemento HTML inseguro.", + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, + "diagnosticMarkdownLinkUnresolvedTarget": "O destino do link não existe: {targetPath}", + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, + "diagnosticMarkdownLinkUnresolvedAnchor": "A âncora \"{anchor}\" não existe.", + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingAlt": "A imagem \"{destination}\" não tem texto alternativo.", + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticMarkdownImageMissingFile": "A imagem não existe: {destination}", + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticInvalidXml": "XML inválido: {message}", + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigInvalidRoot": "A raiz do arquivo writerside.cfg deve ser .", + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, + "diagnosticWritersideConfigMissingSnippetsSrc": "A declaração de snippets está sem o atributo src.", + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, + "diagnosticWritersideConfigMissingInstanceGroupsSrc": "A declaração de instance-groups está sem o atributo src.", + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, + "diagnosticWritersideConfigInvalidKeymapsMode": "Modo de keymaps não suportado: {mode}", + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceSrc": "A declaração de instância está sem o atributo src.", + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, + "diagnosticWritersideConfigMissingInstance": "O arquivo writerside.cfg não registra uma instância.", + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, + "diagnosticWritersideTreeInvalidRoot": "A raiz do arquivo .tree deve ser .", + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, + "diagnosticWritersideTreeMissingId": "O perfil da instância está sem o atributo id.", + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, + "diagnosticWritersideTreeIdMismatch": "O nome-base do arquivo .tree não corresponde ao ID da instância \"{id}\".", + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "A instância que não é de biblioteca não tem start-page.", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, + "diagnosticWritersideStartPageMissing": "A página inicial \"{startPage}\" não existe.", + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeDuplicateTopic": "O tópico \"{topic}\" aparece mais de uma vez no TOC desta instância.", + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableMalformedDeclaration": "A declaração de variável deve ter nome e valor.", + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, + "diagnosticWritersideVariableDuplicateName": "A variável \"{name}\" é declarada mais de uma vez.", + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryMissingId": "A categoria está sem o atributo id.", + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, + "diagnosticWritersideCategoryDuplicateId": "A categoria \"{id}\" é declarada mais de uma vez.", + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryDuplicateOrder": "A ordem da categoria \"{order}\" foi declarada mais de uma vez.", + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicInvalidRoot": "A raiz do arquivo .topic deve ser .", + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, + "diagnosticWritersideTopicMissingRootId": "A raiz do tópico XML está sem o atributo id.", + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, + "diagnosticWritersideTopicRootIdMismatch": "O ID raiz do tópico XML \"{id}\" deve corresponder ao nome do arquivo \"{expectedId}\".", + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateElementId": "O ID do elemento \"{elementId}\" aparece mais de uma vez.", + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAnchorMissingHref": " está sem o atributo href.", + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, + "diagnosticWritersideConfigMissing": "O modo Writerside requer o arquivo writerside.cfg.", + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, + "diagnosticWritersideConfigMissingBuildConfigDirectory": "O diretório configurado para a compilação está ausente: {relativePath}", + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "O diretório de especificações de API configurado está ausente: {relativePath}", + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingSnippetsDirectory": "O diretório de snippets configurado está ausente: {relativePath}", + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingVarsFile": "O arquivo de variáveis configurado está ausente: {relativePath}", + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingCategoriesFile": "O arquivo de categorias configurado está ausente: {relativePath}", + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceGroupsFile": "O arquivo de grupos de instâncias configurado está ausente: {relativePath}", + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideConfigMissingInstanceTree": "A árvore de instância registrada \"{source}\" não existe.", + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicReadFailed": "Não foi possível ler o arquivo do tópico: {error}", + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, + "diagnosticWritersideDefaultTopicsDirectoryMissing": "O diretório de tópicos padrão está ausente: {relativePath}", + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicsDirectoryMissing": "O diretório de tópicos configurado está ausente: {relativePath}", + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideImagesDirectoryMissing": "O diretório de imagens configurado está ausente: {relativePath}", + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicDuplicateId": "O ID do elemento \"{id}\" aparece mais de uma vez.", + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingTopic": "O TOC faz referência ao tópico ausente \"{topic}\".", + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeInvalidHref": "O href externo \"{href}\" é inválido.", + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, + "diagnosticWritersideVariableUnresolved": "A variável \"%{name}%\" não foi declarada.", + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicLinkUnresolved": "O link para o tópico \"{destination}\" não pode ser resolvido.", + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, + "diagnosticWritersideAnchorUnresolved": "A âncora \"{anchor}\" não existe em \"{targetName}\".", + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": " está sem o atributo from.", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, + "diagnosticWritersideIncludeSourceMissing": "A origem da inclusão \"{from}\" não existe.", + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeElementMissing": "O elemento incluído \"{elementId}\" não existe em \"{from}\".", + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "A categoria seealso \"{ref}\" não foi declarada.", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, + "diagnosticWritersideTopicAmbiguousReference": "A referência de tópico \"{reference}\" é ambígua.", + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, + "diagnosticUnknown": "Diagnóstico desconhecido: {code}", + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, + "close": "Fechar", + "git": "Git", + "gitDiff": "Diff do Git", + "gitShowDiff": "Mostrar diff", + "gitDiffHunkRange": "anterior {oldRange} → novo {newRange}", + "gitDiffNoLines": "sem linhas", + "gitUnavailableTitle": "Git não está disponível", + "gitUnavailableMessage": "{reason, select, other{Instale o Git ou configure o BusyMark para usar um executável do Git disponível. {reason}}}", + "gitTrustRequiredTitle": "Confiar neste espaço de trabalho para o Git?", + "gitTrustRequiredMessage": "Os repositórios Git podem executar programas por meio de hooks, filtros e outras configurações. Confie neste espaço de trabalho antes que o BusyMark leia os dados do repositório ou ative ações do Git.", + "gitTrustWorkspace": "Confiar no espaço de trabalho", + "gitNotRepositoryTitle": "Não é um repositório Git", + "gitNotRepositoryMessage": "Este espaço de trabalho não está em um repositório Git.", + "gitInitializeRepository": "Inicializar repositório", + "gitDetachedHead": "HEAD desanexado", + "gitDetachedHeadAt": "Desanexado em {commit}", + "gitNoUpstream": "Sem upstream", + "gitAheadCount": "{count, plural, =1{1 commit não enviado} other{{count} commits não enviados}}", + "gitBehindCount": "{count, plural, =1{1 commit para obter} other{{count} commits para obter}}", + "gitClean": "Limpo", + "gitConflicts": "Conflitos", + "gitChanges": "Alterações", + "gitHistory": "Histórico", + "gitBranches": "Branches", + "gitActions": "Ações do Git", + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, + "gitPull": "Pull", + "gitPush": "Push", + "gitCommit": "Commit", + "gitSelectForCommit": "Adicionar arquivo ao índice", + "gitRemoveFromCommit": "Remover arquivo do índice", + "gitDiscard": "Descartar", + "gitOpenFile": "Abrir arquivo", + "gitMarkResolved": "Marcar como resolvido", + "gitUntracked": "Arquivos não rastreados", + "gitCommitMessage": "Mensagem de commit", + "gitCommitSelectedFiles": "Arquivos selecionados", + "gitCommitNoSelectedFiles": "Adicione pelo menos um arquivo ao índice antes de criar o commit.", + "gitCommitMessageRequired": "Digite uma mensagem de commit.", + "gitCreateBranch": "Criar branch", + "gitNewBranch": "Nova branch", + "gitBranchName": "Nome da branch", + "gitSwitchBranch": "Trocar", + "gitNoChanges": "Nenhuma alteração", + "gitNoHistory": "Nenhum histórico", + "gitNoBranches": "Nenhuma branch", + "gitNoDiff": "Nenhum diff para exibir", + "gitBinaryFile": "Arquivo binário. O BusyMark não exibe patches binários.", + "gitUnsavedChangesBanner": "As alterações não salvas do editor não são incluídas até serem salvas.", + "gitConfirmDiscardTitle": "Descartar alterações do Git?", + "gitConfirmDiscardTracked": "{count, plural, =1{Todas as mudanças staged e unstaged no arquivo selecionado rastreado serão restauradas para HEAD.} other{Todas as mudanças staged e unstaged nos arquivos rastreados selecionados serão restauradas para HEAD.}}", + "gitConfirmDiscardUntracked": "{count, plural, =1{O arquivo não rastreado selecionado será excluído.} other{Os arquivos não rastreados selecionados serão excluídos.}}", + "gitConfirmDiscardMixed": "{count, plural, =1{O arquivo selecionado será restaurado ou excluído de acordo com o status do Git.} other{Os arquivos selecionados serão restaurados ou excluídos de acordo com o status do Git.}}", + "gitConfirmSwitchBranchTitle": "Trocar para {branch}?", + "gitConfirmSwitchBranchMessage": "O BusyMark recarregará o espaço de trabalho do disco depois que o Git trocar de branch.", + "gitConfirmPushSetUpstreamTitle": "Definir branch upstream?", + "gitConfirmPushSetUpstreamMessage": "Esta branch não tem upstream. O BusyMark pode enviar {branch} e definir seu upstream quando houver exatamente um remoto configurado.", + "gitProjectHistory": "Histórico do projeto", + "gitFileHistory": "Histórico do arquivo", + "gitAdditionsDeletions": "+{additions} -{deletions}", + "fileActions": "Ações do arquivo", + "actions": "Ações", + "gitStatusAdded": "Adicionado", + "gitStatusDeleted": "Excluído", + "gitStatusRenamed": "Renomeado", + "gitStatusCopied": "Copiado", + "gitStatusUntracked": "Não rastreado", + "gitStatusConflicted": "Em conflito", + "gitStatusIgnored": "Ignorado", + "gitStatusTypeChanged": "Tipo alterado", + "gitStatusModified": "Modificado", + "gitStatusUnknown": "Desconhecido", + "gitErrorUnavailable": "Git não está disponível.", + "gitErrorNotRepository": "Este espaço de trabalho não é um repositório Git.", + "gitErrorUnsafePath": "O BusyMark bloqueou um caminho Git inseguro.", + "gitErrorInvalidBranchName": "Digite um nome de branch válido.", + "gitErrorNoRemote": "Nenhum remoto Git está configurado.", + "gitErrorNoUpstream": "Nenhuma branch upstream está configurada.", + "gitErrorMultipleRemotes": "Há vários remotos configurados. Escolha um upstream fora desta versão do BusyMark.", + "gitErrorDirtyWorkspace": "Salve ou descarte as alterações do editor do BusyMark antes de trocar de branch.", + "gitErrorDiverged": "A branch divergiu. Resolva o merge ou o rebase fora desta versão do BusyMark.", + "gitErrorAuthorIdentity": "O Git precisa do nome e do e-mail do autor antes de criar um commit.", + "gitAuthorIdentityTitle": "Identidade do autor do Git", + "gitAuthorIdentityMessage": "Informe a identidade que o Git deve registrar nos commits. O BusyMark irá salvá-la e tentar este commit novamente.", + "gitAuthorName": "Nome", + "gitAuthorEmail": "E-mail", + "gitAuthorIdentityGlobal": "Usar em todos os repositórios", + "gitAuthorIdentityGlobalDescription": "Quando instalado como Snap, isto se aplica aos repositórios abertos no BusyMark.", + "gitSaveIdentityAndCommit": "Salvar e criar commit", + "gitErrorAuthentication": "A autenticação do Git falhou.", + "gitErrorNetwork": "A operação de rede do Git falhou.", + "gitErrorConflict": "O Git relatou conflitos não resolvidos.", + "gitErrorCommandFailed": "O comando Git falhou.", + "markdownAndHtml": "Markdown e HTML", + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, + "markdownHtmlMarkdownBlocks": "Blocos Markdown", + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, + "markdownHtmlMarkdownBlocksDescription": "Estruturas de bloco compatíveis no código Markdown e na pré-visualização.", + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, + "markdownHtmlInlineFormatting": "Markdown em linha", + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, + "markdownHtmlInlineFormattingDescription": "Formatação dentro de parágrafos, itens de lista e células de tabela.", + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, + "markdownHtmlRawHtmlBlocks": "Blocos de HTML bruto", + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlBlocksDescription": "Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.", + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, + "markdownHtmlRawHtmlInline": "Tags de HTML bruto em linha", + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, + "markdownHtmlRawHtmlInlineDescription": "Tags HTML em linha seguras renderizadas sem mostrar as tags literais.", + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, + "markdownHtmlSafety": "Regras de segurança", + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, + "markdownHtmlSafetyDescription": "O HTML bruto é analisado e higienizado antes da pré-visualização.", + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, + "markdownHtmlHeadings": "Títulos", + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, + "markdownHtmlParagraphs": "Parágrafos", + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, + "markdownHtmlLists": "Listas", + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, + "markdownHtmlHtmlContainers": "Contêineres", + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, + "markdownHtmlHtmlTextBlocks": "Blocos de texto", + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, + "markdownHtmlHtmlFigures": "Figuras e imagens", + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, + "markdownHtmlHtmlPreformatted": "Código pré-formatado", + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, + "markdownHtmlHtmlDisclosure": "Blocos expansíveis", + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, + "markdownHtmlHtmlDescriptionLists": "Listas de descrição", + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, + "markdownHtmlHtmlFormattingTags": "Tags de formatação", + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, + "markdownHtmlHtmlInlineCodeTags": "Tags de código em linha", + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, + "markdownHtmlHtmlNeutralInlineTags": "Tags de texto semântico", + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, + "markdownHtmlSanitizedPreview": "Pré-visualização higienizada", + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, + "markdownHtmlSanitizedPreviewDescription": "O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.", + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, + "markdownHtmlSourcePreserved": "Código-fonte preservado", + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, + "markdownHtmlSourcePreservedDescription": "HTML bruto não editado é salvo exatamente como texto fonte.", + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, + "markdownHtmlMarkdownInsideHtml": "Markdown dentro de HTML", + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, + "markdownHtmlMarkdownInsideHtmlDescription": "Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.", + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, + "markdownHtmlBlockedContent": "Conteúdo ativo bloqueado", + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, + "markdownHtmlBlockedContentDescription": "Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.", + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, + "markdownHtmlSafeUrls": "Somente URLs seguras", + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, + "markdownHtmlSafeUrlsDescription": "Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.", + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, + "addToGit": "Adicionar ao Git", + "delete": "Excluir", + "newFile": "Novo arquivo", + "rename": "Renomear", + "confirmDeleteFileTitle": "Excluir arquivo?", + "confirmDeleteFolderTitle": "Excluir pasta?", + "confirmDeleteFileMessage": "Excluir {name}? Isso não pode ser desfeito.", + "confirmDeleteFolderMessage": "Excluir {name} e todos os arquivos dentro dela? Isso não pode ser desfeito.", + "workspaceErrorFileOperationFailed": "Falha na operação de arquivo: {error}", + "errorDirectoryMissing": "O diretório não existe: {path}", + "errorPathAlreadyExists": "O caminho já existe: {path}", + "errorFileNameRequired": "O nome do arquivo é obrigatório.", + "errorFileNameUnsafe": "O nome do arquivo deve ser um único segmento de caminho seguro.", + "errorFileOperationInvalidTarget": "Não é possível mover uma pasta para dentro dela mesma.", + "errorFileOperationOutsideRoot": "A operação de arquivo deve permanecer dentro do espaço de trabalho.", + "errorFileOperationRoot": "A raiz do espaço de trabalho não pode ser alterada pela árvore de arquivos.", + "safeDeleteTopicFile": "Excluir o arquivo do tópico com segurança…", + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, + "removeTocElement": "Remover elemento do TOC", + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, + "reviewUsages": "Revisar usos", + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, + "deleteTopicFile": "Excluir arquivo do tópico", + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, + "removeAction": "Remover", + "@removeAction": { + "description": "Generic remove action label." + }, + "topicRemovalSummary": "Remova “{topic}” da instância selecionada. O arquivo do tópico será mantido.", + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "safeDeleteTopicSummary": "Exclua “{topic}” e atualize com segurança as referências a ele em todo este projeto Writerside.", + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "childTopicsPromoted": "{count, plural, =1{O tópico filho subirá um nível.} other{Os {count} tópicos filhos subirão um nível.}}", + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "topicIsStartPageRemovalWarning": "Este tópico é usado como página inicial de uma instância. Revise os usos dele e atribua outra página inicial antes de continuar.", + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, + "topicUsagesCount": "Usos ({count})", + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "noBreakingTopicUsages": "Não foram encontradas referências que deixariam de funcionar.", + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, + "topicUsagesFound": "O BusyMark encontrou as seguintes referências a este tópico.", + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, + "topicUsageTocElements": "Elementos do TOC", + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, + "topicUsageStartPages": "Páginas iniciais", + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, + "topicUsageTopicLinks": "Links para tópicos", + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, + "topicUsageIncludes": "Inclusões", + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, + "usageCount": "{count, plural, =1{1 uso} other{{count} usos}}", + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "refactoringOptions": "Opções de refatoração", + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, + "updateUsagesAutomatically": "Atualizar usos automaticamente", + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, + "updateUsagesAutomaticallyDescription": "Remova referências dos TOCs e inclusões e preserve o texto dos links.", + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, + "manualUsageUpdatesRequired": "Alguns usos exigem alterações manuais antes desta refatoração.", + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, + "setRedirectTo": "Redirecionar para", + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, + "noRedirectDescription": "Não redirecionar a página publicada antiga.", + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, + "redirectTarget": "Destino do redirecionamento", + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, + "remainingUsagesBlockRemoval": "Revise e atualize os usos restantes antes de continuar ou ative as atualizações automáticas quando estiverem disponíveis.", + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, + "usagesOfTopic": "Usos de {topic}", + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "noUsagesFound": "Nenhum uso encontrado.", + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, + "outsideSelectedInstance": "Fora da instância selecionada", + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, + "doRefactor": "Refatorar", + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, + "orphanTopicTitle": "O arquivo do tópico não é mais usado", + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, + "keepTopicFile": "Manter o arquivo do tópico", + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, + "orphanTopicMessage": "“{topic}” não é mais usado em nenhum lugar deste projeto Writerside. Exclua o arquivo ou mantenha-o para uso em outra instância.", + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, + "errorWritersideSafeDeleteRequired": "Use a exclusão segura para arquivos de tópicos do Writerside.", + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, + "errorWritersideTopicUsageScanFailed": "Não foi possível concluir a verificação dos usos do tópico. Nenhum arquivo foi alterado.", + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, + "errorWritersideTopicUsagesRemain": "Alguns usos do tópico ainda precisam de atenção. Revise-os antes de continuar.", + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, + "errorWritersideRedirectInvalid": "O destino de redirecionamento selecionado não é mais válido. Selecione-o novamente.", + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, + "errorWritersideRollbackFailed": "Não foi possível reverter completamente a remoção do tópico. Revise estes caminhos antes de continuar: {paths}", + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "Exportar como PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Escolha o esquema da página para criar um PDF bem acabado e independente.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "As imagens remotas não são transferidas durante a exportação. As imagens locais são incluídas quando disponíveis.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Tamanho da página", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "Carta", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Orientação", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Vertical", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Horizontal", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Margens", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Estreitas", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Normais", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Largas", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Incluir números de página", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Exportar", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "A exportar PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "Documento PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "{fileName} foi exportado.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} foi exportado com {count, plural, =1{1 aviso} other{{count} avisos}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "O componente de exportação para PDF está em falta. Reinstale o BusyMark e tente novamente.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "A exportação para PDF demorou demasiado e foi interrompida.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "O BusyMark não conseguiu exportar este documento como PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, + "visualizationRendering": "A renderizar…", + "visualizationStale": "A mostrar a última renderização válida", + "visualizationShowSource": "Mostrar código-fonte", + "visualizationShowRender": "Mostrar renderização", + "visualizationFitWidth": "Ajustar à largura", + "visualizationSaveImage": "Salvar imagem", + "visualizationCopyImage": "Copiar imagem", + "visualizationImageCopied": "Imagem copiada", + "visualizationOpenApiReference": "Abrir referência da API", + "visualizationValid": "Válido", + "visualizationInvalid": "Inválido", + "visualizationServers": "Servidores", + "visualizationPaths": "Caminhos", + "visualizationOperations": "Operações", + "visualizationTags": "Etiquetas", + "visualizationNoOperations": "Nenhuma operação correspondente", + "visualizationSearchOperations": "Pesquisar operações", + "visualizationRenderFailed": "Não foi possível renderizar esta visualização.", + "visualizationRetry": "Tentar novamente", + "visualizationSaved": "{fileName} guardado", + "shortcutExportPdfDescription": "Exportar o documento ativo ou o módulo do Writerside como PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, + "gitStaged": "Preparados", + "gitUnstaged": "Não preparados", + "gitFetch": "Buscar", + "gitStagedFileCount": "{count, plural, =1{1 arquivo preparado} other{{count} arquivos preparados}}", + "gitOutsideWorkspace": "Fora do espaço de trabalho", + "gitFileHistoryRequiresOpenFile": "O histórico do arquivo requer um arquivo Markdown aberto.", + "gitLoadMore": "Carregar mais", + "gitChangesInCommit": "Alterações neste commit", + "gitCompareWithCurrent": "Comparar com a versão atual", + "gitRestoreVersion": "Restaurar esta versão", + "gitConfirmRestoreTitle": "Restaurar esta versão do arquivo?", + "gitConfirmRestoreMessage": "O BusyMark substituirá o arquivo atual da árvore de trabalho pela versão selecionada do commit. O arquivo restaurado permanecerá não preparado.", + "gitBinaryFileInfo": "Arquivo binário ({size} bytes). O BusyMark não exibe patches binários.", + "gitErrorRestoreStagedFile": "Remova o arquivo do índice antes de restaurar uma versão anterior.", + "gitCommitActions": "Ações do commit", + "gitResetCurrentBranchToHere": "Redefinir a branch atual aqui…", + "gitResetCurrentBranchTitle": "Redefinir {branch} para {commit}?", + "gitResetCurrentBranchMessage": "Isto move a branch {branch} para o commit {commit}. Escolha como o Git deve atualizar o índice e a árvore de trabalho.", + "gitReset": "Redefinir", + "gitResetModeSoft": "Soft", + "gitResetModeSoftDescription": "Mover apenas a branch. Manter o índice e a árvore de trabalho inalterados; as diferenças em relação ao commit selecionado permanecem preparadas.", + "gitResetModeMixed": "Mixed", + "gitResetModeMixedDescription": "Mover a branch e redefinir o índice. Manter a árvore de trabalho inalterada, deixando as diferenças não preparadas.", + "gitResetModeHard": "Hard", + "gitResetModeHardDescription": "Mover a branch e redefinir o índice e a árvore de trabalho. As alterações monitorizadas são descartadas; os arquivos não monitorizados que bloqueiam a operação podem ser eliminados.", + "gitResetModeKeep": "Keep", + "gitResetModeKeepDescription": "Mover a branch e redefinir os arquivos monitorizados, preservando as alterações locais. O Git aborta se essas alterações entrarem em conflito com a redefinição.", + "gitErrorResetDirtyWorkspace": "Guarde ou descarte as alterações no editor do BusyMark antes de redefinir a branch atual.", + "gitErrorResetDetachedHead": "Mude para uma branch antes de a redefinir.", + "instances": "Instâncias", + "newInstance": "Nova instância", + "newTocLibrary": "Nova biblioteca de sumário", + "editInstance": "Editar instância", + "openTocFile": "Abrir arquivo do índice", + "createInstance": "Criar instância", + "createTocLibrary": "Criar biblioteca de sumário", + "instanceContent": "Conteúdo", + "instanceContentSource": "Criar a partir de", + "emptyInstance": "Instância vazia", + "markdownFiles": "Ficheiros Markdown locais", + "chooseMarkdownFolder": "Escolher pasta de Markdown", + "errorWritersideInstanceImportSourceRequired": "Escolha uma pasta que contenha arquivos Markdown.", + "instanceAppearance": "Aspeto", + "instanceColor": "Cor do ícone", + "instanceVersion": "Versão", + "instanceVersionInherited": "Quando este campo está vazio, é usada a versão do projeto {version}.", + "instanceWebPath": "Caminho web", + "instanceStatus": "Estado", + "instanceStatusRelease": "Lançamento", + "instanceStatusEap": "Acesso antecipado", + "instanceStatusDeprecated": "Obsoleta", + "allowSearchEngineIndexing": "Permitir indexação por motores de pesquisa", + "allowSearchEngineIndexingDescription": "Permita que motores de pesquisa externos indexem esta saída.", + "offlineArtifact": "Artefacto offline", + "offlineArtifactDescription": "Inclua os recursos para que a documentação gerada seja autónoma.", + "instanceOutputSettings": "Definições de saída", + "markdownImportSource": "Origem Markdown", + "markdownImportFiles": "Ficheiros Markdown", + "selectNone": "Não selecionar nenhum", + "markdownFilesFound": "Foram encontrados {count} arquivo(s) Markdown", + "noMarkdownFilesFound": "Não foram encontrados arquivos Markdown neste diretório.", + "copyReferencedMedia": "Copiar multimédia referenciada", + "copyReferencedMediaDescription": "Copie imagens e vídeos locais referenciados pelos arquivos selecionados, preservando os caminhos relativos.", + "instanceIdRenameWarningTitle": "Mudar o nome do ID da instância?", + "instanceIdRenameWarning": "O BusyMark vai renomear o arquivo .tree e atualizar as referências do projeto Writerside de “{oldId}” para “{newId}”. Os scripts de publicação não são alterados e devem ser atualizados separadamente.", + "renameAndUpdateReferences": "Mudar o nome e atualizar referências", + "tocLibraryDescription": "Uma biblioteca de sumário armazena secções reutilizáveis e não produz uma saída própria.", + "defaultTocLibraryName": "Sumário partilhado", + "instanceColorAutomatic": "Automático", + "instanceColorBlue": "Azul", + "instanceColorGreen": "Verde", + "instanceColorOrange": "Laranja", + "instanceColorPurple": "Roxo", + "instanceColorRed": "Vermelho", + "instanceColorTeal": "Verde-azulado", + "instanceColorYellow": "Amarelo", + "errorWritersideInstanceNameRequired": "Introduza um nome para a instância.", + "errorWritersideInstanceIdExists": "Já existe uma instância com o ID “{id}”.", + "errorWritersideInstanceTreeExists": "A árvore da instância já existe: {path}", + "errorWritersideInstanceImportSourceMissing": "O diretório de origem Markdown não existe: {path}", + "errorWritersideInstanceImportSelectionRequired": "Selecione pelo menos um arquivo Markdown para importar.", + "errorWritersideInstanceImportFileInvalid": "Este não é um arquivo Markdown legível dentro da origem selecionada: {path}", + "errorWritersideInstanceImportTargetExists": "A importação substituiria um arquivo existente do projeto: {path}", + "errorWritersideInstanceFilesChanged": "Os arquivos da instância foram alterados no disco. Revise-os e tente novamente.", + "errorWritersideInstanceRollbackFailed": "O BusyMark não conseguiu reverter completamente a alteração da instância. Revise estes arquivos antes de continuar: {paths}", + "errorWritersideInstanceLibraryImport": "Uma biblioteca de sumário não pode importar tópicos Markdown.", + "errorWritersideInstanceWebPathInvalid": "O caminho web deve ter uma única linha.", + "errorWritersideInstanceConfigurationInvalid": "A configuração da instância do Writerside é inválida. Corrija os diagnósticos e tente novamente.", + "errorWritersideInstanceTemporaryFile": "O BusyMark não conseguiu preparar com segurança as alterações da instância.", + "diagnosticWritersideTreeInvalidStatus": "Estado de instância desconhecido “{status}”. Use release, eap ou deprecated.", + "diagnosticWritersideDuplicateInstanceId": "O ID de instância “{id}” é usado por mais de um ficheiro de árvore.", + "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml deve ter um elemento raiz .", + "diagnosticWritersideBuildProfilesInvalidBoolean": "O valor {name} “{value}” deve ser true ou false.", + "diagnosticWritersideBuildProfileMissingInstance": "Um elemento deve especificar um ID de instância.", + "diagnosticWritersideTreeInvalidInclude": "Um da árvore deve especificar from e element-id.", + "diagnosticWritersideTreeMissingSnippetId": "Um da árvore deve especificar um id.", + "diagnosticWritersideTreeInvalidCrossInstanceReference": "Uma referência de sumário entre instâncias deve especificar ref e in.", + "diagnosticWritersideTreeConflictingTargets": "Um elemento do sumário não pode apontar para mais do que um tópico, referência, link ou redirecionamento.", + "diagnosticWritersideTreeDuplicateElementId": "O ID de elemento da árvore “{id}” foi declarado mais de uma vez.", + "diagnosticWritersideInstanceGroupsInvalidRoot": "O ficheiro de grupos de instâncias deve ter um elemento raiz .", + "diagnosticWritersideInstanceGroupInvalid": "Um grupo de instâncias deve especificar um id e uma lista de instâncias não vazios.", + "diagnosticWritersideInstanceGroupDuplicateId": "O ID do grupo de instâncias “{id}” foi declarado mais de uma vez.", + "diagnosticWritersideExternalTreeInclude": "A inclusão de sumário “{source}#{id}” pertence ao módulo externo “{origin}” e não pode ser expandida neste espaço de trabalho.", + "diagnosticWritersideTreeIncludeElementMissing": "O elemento de árvore “{id}” não existe na árvore registada “{source}”.", + "diagnosticWritersideTreeCircularInclude": "A inclusão de árvore “{source}#{id}” cria um ciclo.", + "diagnosticWritersideUnknownInstanceGroup": "A condição de instância referencia o grupo desconhecido “@{group}”.", + "diagnosticWritersideReferenceInstanceMissing": "A referência entre instâncias aponta para a instância desconhecida “{instance}”.", + "diagnosticWritersideReferenceTopicMissing": "O tópico “{topic}” não está na instância referenciada “{instance}”.", + "download": "Baixar", + "exportWritersideAsPdf": "Exportar Writerside como PDF", + "writersidePdfContent": "Conteúdo da exportação", + "writersidePdfPage": "Página", + "exportingWritersidePdf": "Exportando PDF do Writerside…", + "ai": "IA", + "aiLocalOllama": "Ollama local", + "aiDisabled": "Desativado", + "aiProvider": "Provedor de IA", + "aiDefaultProvider": "Provedor predefinido", + "aiConfigureProvider": "Configurar provedor", + "aiChooseProvider": "Escolher provedor de IA", + "aiOllamaEndpoint": "Endpoint do Ollama", + "aiOllamaModel": "Modelo do Ollama", + "aiTestConnection": "Testar conexão", + "aiTestingConnection": "Testando…", + "aiConnectionReady": "Conectado. {count} modelo(s) instalado(s) encontrado(s).", + "aiNoModels": "Nenhum modelo selecionado.", + "aiConnectionFailed": "O BusyMark não conseguiu verificar a geração de texto por IA.", + "aiConfigureFirst": "Ative um provedor de IA e verifique um modelo em Configurações → IA.", + "aiEditWithAi": "Editar com IA", + "aiRefineWithAi": "Melhorar com IA", + "aiInstruction": "Instrução", + "aiChangeTarget": "O que pode ser alterado", + "aiSharedContext": "Contexto compartilhado com a IA", + "aiTargetSelection": "Conteúdo selecionado", + "aiTargetInsertAfterBlock": "Inserir após o bloco atual", + "aiTargetCurrentBlock": "Bloco atual", + "aiTargetCurrentSection": "Seção atual", + "aiTargetCompleteDocument": "Documento completo", + "aiContextNone": "Sem contexto do documento", + "aiContextSelection": "Conteúdo selecionado", + "aiContextCurrentBlock": "Bloco atual", + "aiContextCurrentSection": "Seção atual", + "aiContextCompleteDocument": "Documento completo", + "aiGenerating": "Gerando proposta…", + "aiProposal": "Proposta de IA", + "aiGenerateProposal": "Gerar proposta", + "aiContextDisclosure": "O provedor selecionado receberá {count} caracteres do contexto exibido.", + "aiOriginal": "Texto original", + "aiSuggested": "Sugestão", + "aiApplyProposal": "Aplicar proposta", + "aiTokenUsage": "{input} tokens de entrada · {output} tokens de saída", + "aiStaleProposal": "O documento foi alterado enquanto esta proposta era gerada. Execute a ação novamente.", + "gitAiStagedChangesChanged": "As alterações preparadas mudaram enquanto esta mensagem de commit era gerada. Execute a ação novamente.", + "aiViewContext": "Ver contexto enviado", + "aiReviewExactContent": "Revisar conteúdo exato", + "aiContentToChange": "Conteúdo a alterar", + "aiContentSentToAi": "Conteúdo enviado à IA", + "aiApiKey": "Chave de API", + "aiApiKeyStoredHint": "Uma chave está armazenada no cofre de credenciais do sistema", + "aiApiKeyEnterHint": "Insira uma chave de API do provedor", + "aiReplaceApiKey": "Substituir chave de API", + "aiSaveApiKey": "Salvar chave de API com segurança", + "aiRemoveApiKey": "Remover chave de API salva", + "aiCredentialSaved": "A chave de API foi salva no cofre de credenciais do sistema.", + "aiCredentialRemoved": "A chave de API salva foi removida.", + "aiModelRouting": "Seleção de modelo", + "aiAutomaticRouting": "Automática conforme a tarefa", + "aiFixedModelRouting": "Usar o modelo selecionado", + "aiPreferredModel": "Modelo preferido", + "aiModel": "Modelo", + "aiUsageThisMonth": "{requests} solicitações · {input} tokens de entrada · {output} tokens de saída", + "aiCloudConsentTitle": "Enviar conteúdo para {provider}?", + "aiCloudConsentEnable": "Ativar {provider}", + "aiCloudConsentMessage": "Somente o conteúdo exibido em cada caixa de diálogo de revisão de IA é enviado. As solicitações não mantêm estado, as propostas exigem revisão e a chave de API é armazenada no cofre de credenciais do sistema Linux.", + "aiCloudConsentRequired": "Primeiro, confirme o compartilhamento de dados com {provider} em Configurações → IA.", + "aiGenerationVerified": "Geração verificada com {model}. Há {count} modelos compatíveis disponíveis.", + "aiColdStartObserved": "Foi detetado um arranque a frio do modelo local.", + "aiNoCompatibleModels": "Não há nenhum modelo compatível de geração de texto disponível.", + "aiEnableProvider": "Primeiro, ative um provedor de IA.", + "aiDraftCommitMessage": "Criar rascunho da mensagem de commit", + "aiDrafting": "Criando rascunho…", + "aiDraftWithAi": "Criar rascunho com IA", + "generateOrUpdateMarkdownToc": "Gerar/atualizar sumário", + "markdownTocTitle": "Sumário", + "markdownTocUpdated": "Sumário atualizado com {count} entradas.", + "markdownTocNoHeadings": "Adicione pelo menos um título de seção antes de gerar um sumário.", + "markdownTocMalformedMarkers": "Os marcadores de sumário do BusyMark estão ausentes, duplicados ou fora de ordem.", + "diagnosticMarkdownHeadingSkippedLevel": "O título de nível {level} vem após o nível {previousLevel}; revise o aninhamento das seções.", + "diagnosticMarkdownLinkEmptyText": "O texto do link está vazio; forneça um nome acessível que descreva sua finalidade.", + "diagnosticMarkdownLinkReviewText": "Verifique se o texto do link “{text}” descreve sua finalidade no contexto.", + "diagnosticMarkdownTableEmptyHeader": "Os cabeçalhos da tabela devem identificar suas colunas; preencha cada cabeçalho vazio.", + "commandPalette": "Paleta de comandos", + "commandPaletteHint": "Digite um comando", + "commandPaletteEmpty": "Nenhum comando correspondente", + "tableAlignmentUnspecified": "Alinhamento: não especificado", + "tableAlignmentLeft": "Alinhamento: esquerda", + "tableAlignmentCenter": "Alinhamento: centro", + "tableAlignmentRight": "Alinhamento: direita", + "sourceSearchReplacement": "Substituir por", + "sourceSearchReplaceCurrent": "Substituir correspondência atual", + "sourceSearchReplaceAndFindNext": "Substituir e localizar próximo", + "sourceSearchReplaceAll": "Substituir tudo", + "workspaceReplace": "Substituir no espaço de trabalho", + "reviewReplacements": "Revisar substituições", + "applyReplacements": "Aplicar substituições", + "skippedFiles": "Arquivos ignorados", + "workspaceReplaceDirtyBuffer": "Conteúdo não salvo do editor", + "workspaceReplaceDiskContent": "Conteúdo salvo no disco", + "selectFileMatches": "Selecionar todas as {count} correspondências", + "workspaceReplaceApplied": "Foram substituídas {matches} correspondências em {files} arquivos; {skipped} ignoradas.", + "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Quebra de linha final", + "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Sem quebra de linha final", + "normalizeLineEndings": "Normalizar finais de linha", + "workspaceReplaceMixedLineEndings": "{fileName} usa finais de linha mistos. Escolha o formato antes de substituir.", + "mixedLineEndingsSavePrompt": "Este documento contém finais de linha mistos. Escolha um formato.", + "workspaceReplaceIssueOversized": "Um arquivo grande demais foi ignorado.", + "workspaceReplaceIssueUnreadable": "Um arquivo que não pôde ser lido foi ignorado.", + "workspaceReplaceIssueInvalidUtf8": "Um arquivo que não é UTF-8 válido foi ignorado.", + "workspaceReplaceIssueTruncated": "A prévia de substituições foi truncada.", + "workspaceReplaceIssueFileChanged": "Um arquivo alterado após a prévia foi ignorado.", + "workspaceReplaceIssueBufferChanged": "Um buffer do editor alterado após a prévia foi ignorado.", + "workspaceReplaceIssueNormalizationRequired": "Escolha a normalização LF ou CRLF antes de substituir.", + "externalChangesTitle": "Alterações externas — {fileName}", + "externalFileDeleted": "Este arquivo foi excluído do disco.", + "externalFileChanged": "Este arquivo mudou no disco enquanto você tem alterações não salvas.", + "compare": "Comparar", + "reloadFromDisk": "Recarregar do disco", + "keepMine": "Manter minha versão", + "saveAs": "Salvar como", + "unsavedChangesMultipleMessage": "{count, plural, =1{Há 1 documento com alterações não salvas. Deseja salvá-lo antes de continuar?} other{{count} documentos com alterações não salvas. Deseja salvá-los antes de continuar?}}", + "workspaceReplaceIssuePartialConflict": "A reversão foi interrompida porque o ficheiro foi alterado em simultâneo. Algumas substituições podem permanecer; o conteúdo deslocado foi preservado no caminho abaixo.", + "workspaceReplaceIssueApplyFailed": "Nenhuma substituição foi aplicada porque o conjunto revisado não pôde ser salvo com segurança.", + "workspaceRecoveryRestored": "{count, plural, =1{1 documento sem salvamento recuperado. Revise antes de salvar ou descartar.} other{{count} documentos sem salvamento recuperados. Revise cada um antes de salvar ou descartar.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{1 registro de recuperação danificado não pôde ser restaurado. O arquivo de recuperação original foi preservado para inspeção.} other{{count} registros de recuperação danificados não puderam ser restaurados. Os registros de recuperação válidos permanecem disponíveis.}}", + "recoveredDocumentReview": "O conteúdo não salvo de {fileName} foi recuperado. Revise-o e depois salve, salve como ou descarte-o.", + "commandUnavailableInContext": "Este comando não está disponível no contexto atual.", + "mathRenderFailed": "Não foi possível renderizar a expressão matemática.", + "inlineMath": "Matemática em linha", + "displayMath": "Matemática em bloco", + "aiExplicitEditingDescription": "A edição com IA é iniciada apenas de forma explícita. O BusyMark envia somente o contexto exibido ao provedor selecionado e nunca aplica uma proposta sem revisão.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } +} diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 2b6a490d..db874c3d 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -10,7 +10,7 @@ "feedbackCategoryOther": "Другое", "feedbackSubject": "Тема", "feedbackMessage": "Подробное сообщение", - "feedbackReplyEmail": "Эл. почта для ответа (необязательно)", + "feedbackReplyEmail": "Эл. адрес для ответа (необязательно)", "feedbackIncludeTechnicalDetails": "Включить технические сведения", "feedbackTechnicalDetailsDisclosure": "Если этот параметр включён, добавляются только версия операционной системы Linux и язык и регион приложения BusyMark. Журналы, файлы, данные учётной записи и другие диагностические сведения не прикрепляются.", "feedbackSubmit": "Отправить", @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Удалить выбранный элемент в разделе «Файлы» или убрать выбранную тему из оглавления", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Общие", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Вставить отступ", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Вставить отступ в позицию курсора", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Уменьшить отступ в исходном тексте", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Убрать один уровень отступа в режиме исходного текста", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Закрыть поиск или снять выделение блоков", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Конфиденциальность", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Загружать удалённые изображения", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Разрешить загрузку изображений в предварительном просмотре Markdown и редакторе по URL-адресам http и https.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Сбросить разрешения на удалённые изображения", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Забыть рабочие области, которым было разрешено загружать удалённые изображения.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Очистить список доверенных рабочих областей Git", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Спрашивать перед включением функций Git для ранее доверенных рабочих областей.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Окно", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Открывать предыдущее рабочее пространство при запуске", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Открывать рабочее пространство и вкладки предыдущего сеанса при запуске BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Подтверждать закрытие при несохранённых изменениях", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -897,7 +928,9 @@ "description": "HTML block command label." }, "htmlContentDefault": "Содержимое HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "Вставить или изменить блок HTML", "@shortcutHtmlBlockDescription": { "description": "Keyboard shortcut description for inserting or editing an HTML block." @@ -1099,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Удалённое изображение заблокировано", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Выберите, может ли BusyMark загружать удалённые изображения.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Удалённые изображения заблокированы", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Этот документ ссылается на изображения из интернета. Их загрузка может раскрыть сведения о вашей сети серверам, на которых размещены изображения.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Загрузить для этой рабочей области", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Всегда загружать удалённые изображения", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Скрыть боковую панель", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1350,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Предыдущее совпадение", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Следующее совпадение", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "С учётом регистра", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Слово целиком", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Регулярное выражение", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Некорректное регулярное выражение", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Большой файл: подсветка и сворачивание приостановлены", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Нет содержимого для чтения", "admonition": "Блок-уведомление", "quote": "Цитата", @@ -2201,25 +2259,39 @@ "git": "Git", "gitDiff": "Различия Git", "gitShowDiff": "Показать различия", - "@gitShowDiff": {"description": "Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "старый диапазон {oldRange} → новый {newRange}", "@gitDiffHunkRange": { "description": "Readable old-to-new line range shown for a Git diff hunk.", "placeholders": { - "oldRange": {"type": "String"}, - "newRange": {"type": "String"} + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } } }, "gitDiffNoLines": "нет строк", - "@gitDiffNoLines": {"description": "Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git недоступен", "gitUnavailableMessage": "{reason, select, other{Установите Git или настройте BusyMark для использования доступного исполняемого файла Git. {reason}}}", "gitTrustRequiredTitle": "Доверять этой рабочей области при работе с Git?", - "@gitTrustRequiredTitle": {"description": "Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Репозитории Git могут запускать программы с помощью хуков, фильтров и других настроек. Подтвердите доверие к этой рабочей области, прежде чем BusyMark прочитает данные репозитория или включит действия Git.", - "@gitTrustRequiredMessage": {"description": "Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Доверять рабочей области", - "@gitTrustWorkspace": {"description": "Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Это не репозиторий Git", "gitNotRepositoryMessage": "Эта рабочая область не находится в репозитории Git.", "gitInitializeRepository": "Инициализировать репозиторий", @@ -2261,15 +2333,15 @@ "gitBinaryFile": "Двоичный файл. BusyMark не отображает двоичные патчи.", "gitUnsavedChangesBanner": "Несохранённые изменения в редакторе не будут включены, пока вы их не сохраните.", "gitConfirmDiscardTitle": "Отменить изменения Git?", - "gitConfirmDiscardTracked": "{count, plural, one{Выбранный отслеживаемый файл будет восстановлен из Git.} few{Выбранные отслеживаемые файлы будут восстановлены из Git.} many{Выбранные отслеживаемые файлы будут восстановлены из Git.} other{Выбранные отслеживаемые файлы будут восстановлены из Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{В выбранный отслеживаемый файл и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.} other{Во все выбранные отслеживаемые файлы и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.}}", "gitConfirmDiscardUntracked": "{count, plural, one{Выбранный неотслеживаемый файл будет удалён.} few{Выбранные неотслеживаемые файлы будут удалены.} many{Выбранные неотслеживаемые файлы будут удалены.} other{Выбранные неотслеживаемые файлы будут удалены.}}", "gitConfirmDiscardMixed": "{count, plural, one{Выбранный файл будет восстановлен или удалён в зависимости от его статуса Git.} few{Выбранные файлы будут восстановлены или удалены в зависимости от их статуса Git.} many{Выбранные файлы будут восстановлены или удалены в зависимости от их статуса Git.} other{Выбранные файлы будут восстановлены или удалены в зависимости от их статуса Git.}}", "gitConfirmSwitchBranchTitle": "Переключиться на {branch}?", "gitConfirmSwitchBranchMessage": "BusyMark перезагрузит рабочую область с диска после переключения ветки в Git.", "gitConfirmPushSetUpstreamTitle": "Настроить upstream-ветку?", "gitConfirmPushSetUpstreamMessage": "У этой ветки нет upstream-ветки. BusyMark может отправить ветку {branch} и назначить её upstream-веткой, если настроен ровно один удалённый репозиторий.", - "gitProjectHistory": "Проект", - "gitFileHistory": "Текущий файл", + "gitProjectHistory": "История проекта", + "gitFileHistory": "История файла", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Действия с файлом", "actions": "Действия", @@ -2304,73 +2376,138 @@ "gitErrorNetwork": "Сетевая операция Git не удалась.", "gitErrorConflict": "Git сообщил о неразрешённых конфликтах.", "gitErrorCommandFailed": "Не удалось выполнить команду Git.", - "markdownAndHtml": "Markdown и HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Блоки Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Блочные структуры, поддерживаемые в исходном Markdown и предварительном просмотре.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Встроенный Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Форматирование внутри абзацев, элементов списков и ячеек таблиц.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Блоки исходного HTML", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Безопасные блочные HTML-теги, отображаемые через виджеты предварительного просмотра BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Встроенные HTML-теги", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Безопасные встроенные HTML-теги отображаются без показа самих тегов.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Правила безопасности", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Исходный HTML разбирается и очищается перед отображением в предварительном просмотре.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Заголовки", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Абзацы", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Списки", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Контейнеры", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Текстовые блоки", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Фигуры и изображения", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Предформатированный код", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Раскрывающиеся блоки", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Списки описаний", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Теги форматирования", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Встроенные теги кода", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Семантические текстовые теги", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Очищенный предварительный просмотр", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Разрешённый HTML преобразуется в блоки предварительного просмотра BusyMark, а не отображается в браузере.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Исходный текст сохраняется", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Неизменённый исходный HTML сохраняется в точности как исходный текст.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown внутри HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-разметка внутри исходного HTML отображается как обычный текст.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Активный контент заблокирован", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Скрипты, стили, фреймы, формы, SVG, MathML, события и небезопасные атрибуты блокируются.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Только безопасные URL", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Ссылки допускают http, https, mailto, tel, относительные URL и фрагменты; небезопасные схемы блокируются.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Добавить в Git", "delete": "Удалить", "newFile": "Новый файл", @@ -2388,101 +2525,294 @@ "errorFileOperationOutsideRoot": "Операция с файлом должна выполняться в пределах рабочей области.", "errorFileOperationRoot": "Корень рабочей области нельзя изменить через дерево файлов.", "safeDeleteTopicFile": "Безопасно удалить файл темы…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Удалить элемент оглавления", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Просмотреть использования", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Удалить файл темы", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Удалить", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Удалить «{topic}» из выбранного экземпляра. Файл темы будет сохранён.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Удалить «{topic}» и безопасно обновить ссылки на неё во всём этом проекте Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, one{1 дочерняя тема будет перемещена на уровень выше.} few{{count} дочерние темы будут перемещены на уровень выше.} many{{count} дочерних тем будут перемещены на уровень выше.} other{{count} дочерней темы будут перемещены на уровень выше.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Эта тема используется как стартовая страница экземпляра. Просмотрите её использования и назначьте другую стартовую страницу, прежде чем продолжить.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Использования ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Ссылок, которые перестали бы работать, не найдено.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark нашёл следующие ссылки на эту тему.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Элементы оглавления", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Стартовые страницы", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Ссылки на темы", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Включения", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, one{1 использование} few{{count} использования} many{{count} использований} other{{count} использования}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Параметры рефакторинга", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Обновить использования автоматически", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Удалить ссылки из оглавлений и включения, сохранив текст ссылок.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Некоторые использования необходимо изменить вручную перед этим рефакторингом.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Перенаправить на", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Не перенаправлять старую опубликованную страницу.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Цель перенаправления", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Просмотрите и обновите оставшиеся использования, прежде чем продолжить, или включите автоматическое обновление, если оно доступно.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Использования темы {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Использований не найдено", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "вне выбранного экземпляра", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Выполнить рефакторинг", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Файл темы больше не используется", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Сохранить файл темы", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "«{topic}» больше нигде не используется в этом проекте Writerside. Удалите файл или сохраните его для использования в другом экземпляре.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Используйте безопасное удаление для файлов тем Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "Не удалось завершить поиск использований темы. Файлы не были изменены.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Некоторые использования темы всё ещё требуют внимания. Просмотрите их перед продолжением.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Выбранная цель перенаправления больше недействительна. Выберите её снова.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Не удалось полностью откатить удаление темы. Перед продолжением проверьте следующие пути: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "Экспортировать в PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Выберите макет страницы для аккуратного автономного PDF-файла.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "Удалённые изображения при экспорте не загружаются. Доступные локальные изображения будут добавлены.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Размер страницы", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "US Letter", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Ориентация", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Книжная", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Альбомная", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Поля", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Узкие", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Обычные", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Широкие", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Добавить номера страниц", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Экспортировать", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "Экспорт PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "Документ PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "Файл {fileName} экспортирован.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "Файл {fileName} экспортирован. Не удалось добавить изображений: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "Компонент экспорта PDF отсутствует. Переустановите BusyMark и повторите попытку.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "Экспорт PDF занял слишком много времени и был остановлен.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark не удалось экспортировать этот документ в PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "Экспортировать в PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Выберите макет страницы для аккуратного автономного PDF-файла.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Удалённые изображения при экспорте не загружаются. Доступные локальные изображения будут добавлены.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Размер страницы", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "US Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Ориентация", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Книжная", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Альбомная", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Поля", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Узкие", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Обычные", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Широкие", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Добавить номера страниц", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Экспортировать", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "Экспорт PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "Документ PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "Файл {fileName} экспортирован.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} экспортирован с {count, plural, =1{1 предупреждением} other{{count} предупреждениями}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "Компонент экспорта PDF отсутствует. Переустановите BusyMark и повторите попытку.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "Экспорт PDF занял слишком много времени и был остановлен.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark не удалось экспортировать этот документ в PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Отрисовка…", "visualizationStale": "Показан последний корректный результат", "visualizationShowSource": "Показать исходный код", @@ -2503,11 +2833,14 @@ "visualizationRenderFailed": "Не удалось отобразить эту визуализацию.", "visualizationRetry": "Повторить", "visualizationSaved": "Файл {fileName} сохранён", - "shortcutExportPdfDescription": "Экспортировать активный документ или модуль Writerside в PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "Экспортировать активный документ или модуль Writerside в PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Индексированные", "gitUnstaged": "Неиндексированные", "gitFetch": "Получить", - "gitStagedFileCount": "{count, plural, =1{1 индексированный файл} other{{count} индексированных файлов}}", + "gitStagedFileCount": "{count, plural, =1{1 файл в индексе} few{{count} файла в индексе} many{{count} файлов в индексе} other{{count} файлов в индексе}}", "gitOutsideWorkspace": "Вне рабочего пространства", "gitFileHistoryRequiresOpenFile": "Для истории файла требуется открытый файл Markdown.", "gitLoadMore": "Загрузить ещё", @@ -2620,7 +2953,6 @@ "ai": "ИИ", "aiLocalOllama": "Локальный Ollama", "aiDisabled": "Отключено", - "aiLocalOnlyDescription": "Редактирование с помощью ИИ запускается только явно. BusyMark отправляет выбранному поставщику только показанный контекст и никогда не применяет предложение без проверки.", "aiProvider": "Поставщик ИИ", "aiDefaultProvider": "Поставщик по умолчанию", "aiConfigureProvider": "Настроить поставщика", @@ -2704,7 +3036,7 @@ "tableAlignmentCenter": "Выравнивание: по центру", "tableAlignmentRight": "Выравнивание: по правому краю", "sourceSearchReplacement": "Заменить на", - "sourceSearchReplaceCurrent": "Заменить текущее", + "sourceSearchReplaceCurrent": "Заменить текущее совпадение", "sourceSearchReplaceAndFindNext": "Заменить и найти следующее", "sourceSearchReplaceAll": "Заменить всё", "workspaceReplace": "Заменить в рабочей области", @@ -2734,14 +3066,18 @@ "reloadFromDisk": "Перезагрузить с диска", "keepMine": "Оставить мою версию", "saveAs": "Сохранить как", - "unsavedChangesMultipleMessage": "В документах ({count}) есть несохранённые изменения. Сохранить их перед продолжением?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 документ содержит несохранённые изменения. Сохраните его перед продолжением.} other{{count} документа содержат несохранённые изменения. Сохраните каждое перед продолжением.}}", "workspaceReplaceIssuePartialConflict": "Откат остановлен, поскольку файл был одновременно изменён. Некоторые замены могли сохраниться; вытесненное содержимое сохранено по указанному ниже пути.", "workspaceReplaceIssueApplyFailed": "Замены не применены, поскольку проверенный набор не удалось безопасно сохранить.", - "workspaceRecoveryRestored": "Восстановлено несохранённых документов: {count}. Проверьте каждый восстановленный документ перед продолжением.", - "workspaceRecoveryDamaged": "Не удалось восстановить повреждённые записи ({count}). Корректные восстановленные документы остаются доступными.", + "workspaceRecoveryRestored": "{count, plural, =1{Восстановлен 1 несохранённый документ. Проверьте его перед сохранением или отменой.} other{Восстановлено {count} несохранённых документов. Проверьте каждый перед сохранением или отменой.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Не удалось восстановить 1 повреждённую запись восстановления. Оригинальный файл восстановления сохранён для проверки.} other{{count} повреждённых записей восстановления не удалось восстановить. Корректные записи восстановления остаются доступны.}}", "recoveredDocumentReview": "Восстановлено несохранённое содержимое файла {fileName}. Проверьте его, затем сохраните, сохраните как новый файл или отбросьте.", "commandUnavailableInContext": "Эта команда недоступна в текущем контексте.", "mathRenderFailed": "Не удалось отобразить математическое выражение.", "inlineMath": "Формула в строке", - "displayMath": "Формула отдельным блоком" + "displayMath": "Формула отдельным блоком", + "aiExplicitEditingDescription": "Редактирование с помощью ИИ запускается только явно. BusyMark отправляет выбранному поставщику только показанный контекст и никогда не применяет предложение без проверки.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 3575f749..6810b425 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -1,515 +1,1050 @@ { "@@locale": "tr", "appTitle": "BusyMark", - "@appTitle": {"description":"Application name."}, + "@appTitle": { + "description": "Application name." + }, "appSubtitle": "Markdown dosyaları ve Writerside uyumlu dokümantasyon projeleri için düzenleyici.", - "@appSubtitle": {"description":"Short application description."}, + "@appSubtitle": { + "description": "Short application description." + }, "aboutBusyMark": "BusyMark Hakkında", - "@aboutBusyMark": {"description":"Menu item and tooltip for the About dialog."}, + "@aboutBusyMark": { + "description": "Menu item and tooltip for the About dialog." + }, "aboutTagline": "Markdown ve Writerside Düzenleyicisi", - "@aboutTagline": {"description":"Short tagline shown under the app name in the About dialog."}, + "@aboutTagline": { + "description": "Short tagline shown under the app name in the About dialog." + }, "aboutLicenseLabel": "Lisans", - "@aboutLicenseLabel": {"description":"Label for the license row in the About dialog."}, + "@aboutLicenseLabel": { + "description": "Label for the license row in the About dialog." + }, "aboutLicenseName": "Apache License 2.0", - "@aboutLicenseName": {"description":"Formal license name shown in the About dialog. Keep the legal license name exact."}, + "@aboutLicenseName": { + "description": "Formal license name shown in the About dialog. Keep the legal license name exact." + }, "aboutWebsite": "Web sitesi", - "@aboutWebsite": {"description":"Label for the website row in the About dialog."}, + "@aboutWebsite": { + "description": "Label for the website row in the About dialog." + }, "aboutSourceCode": "Kaynak kodu", - "@aboutSourceCode": {"description":"Label for the source-code repository row in the About dialog."}, + "@aboutSourceCode": { + "description": "Label for the source-code repository row in the About dialog." + }, "reportIssue": "Bir sorunu bildirin", - "@reportIssue": {"description":"Menu action and dialog title for reporting an issue."}, + "@reportIssue": { + "description": "Menu action and dialog title for reporting an issue." + }, "feedbackCategory": "Kategori", - "@feedbackCategory": {"description":"Feedback category field label."}, + "@feedbackCategory": { + "description": "Feedback category field label." + }, "feedbackChooseCategory": "Bir kategori seçin", - "@feedbackChooseCategory": {"description":"Placeholder for the feedback category selector."}, + "@feedbackChooseCategory": { + "description": "Placeholder for the feedback category selector." + }, "feedbackCategoryProblem": "Sorun veya hata", - "@feedbackCategoryProblem": {"description":"Feedback category for a problem or bug."}, + "@feedbackCategoryProblem": { + "description": "Feedback category for a problem or bug." + }, "feedbackCategoryFeature": "Özellik isteği", - "@feedbackCategoryFeature": {"description":"Feedback category for a feature request."}, + "@feedbackCategoryFeature": { + "description": "Feedback category for a feature request." + }, "feedbackCategoryPrivacySecurity": "Gizlilik veya güvenlik endişesi", - "@feedbackCategoryPrivacySecurity": {"description":"Feedback category for a privacy or security concern."}, + "@feedbackCategoryPrivacySecurity": { + "description": "Feedback category for a privacy or security concern." + }, "feedbackCategoryUsability": "Kullanılabilirlik endişesi", - "@feedbackCategoryUsability": {"description":"Feedback category for a usability concern."}, + "@feedbackCategoryUsability": { + "description": "Feedback category for a usability concern." + }, "feedbackCategoryOther": "Diğer", - "@feedbackCategoryOther": {"description":"Feedback category for other concerns."}, + "@feedbackCategoryOther": { + "description": "Feedback category for other concerns." + }, "feedbackSubject": "Konu", - "@feedbackSubject": {"description":"Feedback subject field label."}, + "@feedbackSubject": { + "description": "Feedback subject field label." + }, "feedbackMessage": "Ayrıntılı mesaj", - "@feedbackMessage": {"description":"Detailed feedback message field label."}, - "feedbackReplyEmail": "E-postayı yanıtla (isteğe bağlı)", - "@feedbackReplyEmail": {"description":"Optional reply email field label."}, + "@feedbackMessage": { + "description": "Detailed feedback message field label." + }, + "feedbackReplyEmail": "Yanıt e-postası adresi (isteğe bağlı)", + "@feedbackReplyEmail": { + "description": "Optional reply email field label." + }, "feedbackIncludeTechnicalDetails": "Teknik ayrıntıları ekleyin", - "@feedbackIncludeTechnicalDetails": {"description":"Checkbox label for optional technical details."}, + "@feedbackIncludeTechnicalDetails": { + "description": "Checkbox label for optional technical details." + }, "feedbackTechnicalDetailsDisclosure": "Etkinleştirildiğinde bu, yalnızca Linux işletim sistemi sürümünüzü ve BusyMark uygulama yerel ayarını ekler. Hiçbir günlük, dosya, hesap verisi veya başka tanılama eklenmez.", - "@feedbackTechnicalDetailsDisclosure": {"description":"Disclosure explaining exactly which optional technical details are submitted."}, + "@feedbackTechnicalDetailsDisclosure": { + "description": "Disclosure explaining exactly which optional technical details are submitted." + }, "feedbackSubmit": "Gönder", - "@feedbackSubmit": {"description":"Button that submits feedback."}, + "@feedbackSubmit": { + "description": "Button that submits feedback." + }, "feedbackSubmitting": "Gönderiliyor…", - "@feedbackSubmitting": {"description":"Button label while feedback is being submitted."}, + "@feedbackSubmitting": { + "description": "Button label while feedback is being submitted." + }, "feedbackCategoryRequired": "Bir kategori seçin.", - "@feedbackCategoryRequired": {"description":"Validation error for a missing feedback category."}, + "@feedbackCategoryRequired": { + "description": "Validation error for a missing feedback category." + }, "feedbackSubjectLength": "Konu 3 ila 120 karakter arasında olmalıdır.", - "@feedbackSubjectLength": {"description":"Validation error for feedback subject length."}, + "@feedbackSubjectLength": { + "description": "Validation error for feedback subject length." + }, "feedbackMessageLength": "Mesaj 10 ila 5.000 karakter arasında olmalıdır.", - "@feedbackMessageLength": {"description":"Validation error for feedback message length."}, + "@feedbackMessageLength": { + "description": "Validation error for feedback message length." + }, "feedbackReplyEmailInvalid": "Geçerli bir e-posta adresi girin veya bu alanı boş bırakın.", - "@feedbackReplyEmailInvalid": {"description":"Validation error for an invalid optional reply email."}, + "@feedbackReplyEmailInvalid": { + "description": "Validation error for an invalid optional reply email." + }, "feedbackConnectionFailure": "BusyMark bağlanamadı. İnternet bağlantınızı kontrol edip tekrar deneyin.", - "@feedbackConnectionFailure": {"description":"Feedback submission error for a connection failure."}, + "@feedbackConnectionFailure": { + "description": "Feedback submission error for a connection failure." + }, "feedbackTimeoutFailure": "İstek zaman aşımına uğradı. Tekrar deneyin.", - "@feedbackTimeoutFailure": {"description":"Feedback submission error for a timeout."}, + "@feedbackTimeoutFailure": { + "description": "Feedback submission error for a timeout." + }, "feedbackRateLimitedFailure": "Bu bağlantıdan çok fazla rapor gönderildi. Bekleyin ve tekrar deneyin.", - "@feedbackRateLimitedFailure": {"description":"Feedback submission error when the server rate limit is reached."}, + "@feedbackRateLimitedFailure": { + "description": "Feedback submission error when the server rate limit is reached." + }, "feedbackRejectedFailure": "Sunucu bu raporu reddetti. Form alanlarını kontrol edip tekrar deneyin.", - "@feedbackRejectedFailure": {"description":"Feedback submission error when the server rejects invalid request data."}, + "@feedbackRejectedFailure": { + "description": "Feedback submission error when the server rejects invalid request data." + }, "feedbackServerFailure": "Sunucu raporu kabul edemedi. Daha sonra tekrar deneyin.", - "@feedbackServerFailure": {"description":"Generic feedback submission server error."}, + "@feedbackServerFailure": { + "description": "Generic feedback submission server error." + }, "feedbackSuccess": "Geri bildirim gönderildi. Referans Kimliği: {id}", - "@feedbackSuccess": {"description":"Success message containing the server reference ID.","placeholders":{"id":{"type":"String"}}}, + "@feedbackSuccess": { + "description": "Success message containing the server reference ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "advanced": "Gelişmiş", - "@advanced": {"description":"Settings section title for advanced actions."}, + "@advanced": { + "description": "Settings section title for advanced actions." + }, "addToGit": "Git'e ekle", - "@addToGit": {"description":"Menu action that stages the selected file or folder in Git."}, + "@addToGit": { + "description": "Menu action that stages the selected file or folder in Git." + }, "appearance": "Görünüm", - "@appearance": {"description":"Settings section title for appearance options."}, + "@appearance": { + "description": "Settings section title for appearance options." + }, "apply": "Uygula", - "@apply": {"description":"Button label that applies a dialog change."}, + "@apply": { + "description": "Button label that applies a dialog change." + }, "back": "Geri", - "@back": {"description":"Tooltip for navigating back."}, + "@back": { + "description": "Tooltip for navigating back." + }, "bottomLeft": "Sol alt", - "@bottomLeft": {"description":"Editing button position option."}, + "@bottomLeft": { + "description": "Editing button position option." + }, "bottomRight": "Sağ alt", - "@bottomRight": {"description":"Editing button position option."}, + "@bottomRight": { + "description": "Editing button position option." + }, "cancel": "İptal", - "@cancel": {"description":"Cancel button label."}, + "@cancel": { + "description": "Cancel button label." + }, "choose": "Seç", - "@choose": {"description":"Button label for choosing a file or path."}, + "@choose": { + "description": "Button label for choosing a file or path." + }, "chooseLocation": "Konum seçin", - "@chooseLocation": {"description":"File picker confirmation label for choosing a directory."}, + "@chooseLocation": { + "description": "File picker confirmation label for choosing a directory." + }, "copy": "Kopyala", - "@copy": {"description":"Copy command label."}, + "@copy": { + "description": "Copy command label." + }, "copyName": "Adı kopyala", - "@copyName": {"description":"Menu action that copies the selected file, folder, or workspace name."}, + "@copyName": { + "description": "Menu action that copies the selected file, folder, or workspace name." + }, "copyFileName": "Dosya adını kopyala", - "@copyFileName": {"description":"Menu action that copies the active document file name."}, + "@copyFileName": { + "description": "Menu action that copies the active document file name." + }, "copyPath": "Yolu kopyala", - "@copyPath": {"description":"Menu action that copies the selected file, folder, or workspace path."}, + "@copyPath": { + "description": "Menu action that copies the selected file, folder, or workspace path." + }, "create": "Oluştur", - "@create": {"description":"Create action label."}, + "@create": { + "description": "Create action label." + }, "creating": "Oluşturuluyor...", - "@creating": {"description":"Progress label while a project or topic is being created."}, + "@creating": { + "description": "Progress label while a project or topic is being created." + }, "cut": "Kes", - "@cut": {"description":"Cut command label."}, + "@cut": { + "description": "Cut command label." + }, "promoteSection": "Bölümü yükselt", - "@promoteSection": {"description":"Outline action that raises a heading section, including descendant headings, by one rank."}, + "@promoteSection": { + "description": "Outline action that raises a heading section, including descendant headings, by one rank." + }, "demoteSection": "Bölümü düşür", - "@demoteSection": {"description":"Outline action that lowers a heading section, including descendant headings, by one rank."}, + "@demoteSection": { + "description": "Outline action that lowers a heading section, including descendant headings, by one rank." + }, "moveSectionUp": "Bölümü yukarı taşı", - "@moveSectionUp": {"description":"Outline action that swaps a heading section with its previous sibling section."}, + "@moveSectionUp": { + "description": "Outline action that swaps a heading section with its previous sibling section." + }, "moveSectionDown": "Bölümü aşağı taşı", - "@moveSectionDown": {"description":"Outline action that swaps a heading section with its next sibling section."}, + "@moveSectionDown": { + "description": "Outline action that swaps a heading section with its next sibling section." + }, "confirmDeleteSectionTitle": "Bölüm silinsin mi?", - "@confirmDeleteSectionTitle": {"description":"Confirmation title before deleting a Markdown heading section."}, + "@confirmDeleteSectionTitle": { + "description": "Confirmation title before deleting a Markdown heading section." + }, "confirmDeleteSectionMessage": "“{name}” ve bölümündeki tüm içerik silinsin mi? Bu geri alınamaz.", - "@confirmDeleteSectionMessage": {"description":"Confirmation message before deleting a Markdown heading section.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteSectionMessage": { + "description": "Confirmation message before deleting a Markdown heading section.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "darkTheme": "Karanlık", - "@darkTheme": {"description":"Dark theme option."}, + "@darkTheme": { + "description": "Dark theme option." + }, "delete": "Sil", - "@delete": {"description":"Delete command label."}, + "@delete": { + "description": "Delete command label." + }, "discard": "Değişiklikleri yok say", - "@discard": {"description":"Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel."}, + "@discard": { + "description": "Destructive button that throws away unsaved editor changes. Translate it distinctly from Cancel." + }, "editor": "Editör", - "@editor": {"description":"Editor view label."}, + "@editor": { + "description": "Editor view label." + }, "file": "Dosya", - "@file": {"description":"Generic file kind label."}, + "@file": { + "description": "Generic file kind label." + }, "fileHistory": "Dosya Geçmişi", - "@fileHistory": {"description":"Menu action and sidebar title for showing Git history for a single file."}, + "@fileHistory": { + "description": "Menu action and sidebar title for showing Git history for a single file." + }, "folder": "Klasör", - "@folder": {"description":"Folder kind label."}, + "@folder": { + "description": "Folder kind label." + }, "insert": "Ekle", - "@insert": {"description":"Insert button label."}, + "@insert": { + "description": "Insert button label." + }, "keyboardShortcuts": "Klavye Kısayolları", - "@keyboardShortcuts": {"description":"Keyboard shortcuts dialog title and menu item."}, + "@keyboardShortcuts": { + "description": "Keyboard shortcuts dialog title and menu item." + }, "commandPalette": "Komut Paleti", - "@commandPalette": {"description":"Title and command label for the searchable command palette."}, + "@commandPalette": { + "description": "Title and command label for the searchable command palette." + }, "commandPaletteHint": "Bir komut yazın", - "@commandPaletteHint": {"description":"Search hint in the command palette."}, + "@commandPaletteHint": { + "description": "Search hint in the command palette." + }, "commandPaletteEmpty": "Eşleşen komut yok", - "@commandPaletteEmpty": {"description":"Empty state in the command palette."}, + "@commandPaletteEmpty": { + "description": "Empty state in the command palette." + }, "commandUnavailableInContext": "Mevcut düzenleyici bağlamında kullanılamıyor", - "@commandUnavailableInContext": {"description":"Reason shown for a disabled contextual command."}, + "@commandUnavailableInContext": { + "description": "Reason shown for a disabled contextual command." + }, "lightTheme": "Açık", - "@lightTheme": {"description":"Light theme option."}, + "@lightTheme": { + "description": "Light theme option." + }, "mainMenu": "Ana menü", - "@mainMenu": {"description":"Native header bar main menu tooltip."}, + "@mainMenu": { + "description": "Native header bar main menu tooltip." + }, "fullScreen": "Tam ekran", - "@fullScreen": {"description":"Command that toggles full-screen window mode."}, + "@fullScreen": { + "description": "Command that toggles full-screen window mode." + }, "markdown": "Markdown", - "@markdown": {"description":"Markdown format label."}, + "@markdown": { + "description": "Markdown format label." + }, "open": "Aç", - "@open": {"description":"Open action label."}, + "@open": { + "description": "Open action label." + }, "openInFiles": "Dosya yöneticisinde aç", - "@openInFiles": {"description":"Menu action that opens the selected file or folder location in the system file manager."}, + "@openInFiles": { + "description": "Menu action that opens the selected file or folder location in the system file manager." + }, "pathActions": "Yol eylemleri", - "@pathActions": {"description":"Tooltip for the workspace path action menu button."}, + "@pathActions": { + "description": "Tooltip for the workspace path action menu button." + }, "outline": "Anahat", - "@outline": {"description":"Outline sidebar tab label."}, + "@outline": { + "description": "Outline sidebar tab label." + }, "overwrite": "Üzerine yaz", - "@overwrite": {"description":"Button label for overwriting a changed file."}, + "@overwrite": { + "description": "Button label for overwriting a changed file." + }, "paste": "Yapıştır", - "@paste": {"description":"Paste command label."}, + "@paste": { + "description": "Paste command label." + }, "pasteWithoutFormatting": "Biçimlendirmeden yapıştır", - "@pasteWithoutFormatting": {"description":"Plain text paste command label."}, + "@pasteWithoutFormatting": { + "description": "Plain text paste command label." + }, "reading": "Okuma", - "@reading": {"description":"Reading view label."}, + "@reading": { + "description": "Reading view label." + }, "removeFromRecent": "Son kullanılanlardan kaldır", - "@removeFromRecent": {"description":"Action that removes a workspace from the Recent list without deleting its files."}, - "recent": "Son", - "@recent": {"description":"Recent workspaces section title."}, + "@removeFromRecent": { + "description": "Action that removes a workspace from the Recent list without deleting its files." + }, + "recent": "Son öğeler", + "@recent": { + "description": "Recent workspaces section title." + }, "redo": "Yinele", - "@redo": {"description":"Redo command label."}, + "@redo": { + "description": "Redo command label." + }, "save": "Kaydet", - "@save": {"description":"Save action label."}, + "@save": { + "description": "Save action label." + }, "search": "Ara", - "@search": {"description":"Search action label and field hint."}, + "@search": { + "description": "Search action label and field hint." + }, "selectAll": "Tümünü seç", - "@selectAll": {"description":"Select all command label."}, + "@selectAll": { + "description": "Select all command label." + }, "settings": "Ayarlar", - "@settings": {"description":"Settings action label."}, + "@settings": { + "description": "Settings action label." + }, "source": "Kaynak", - "@source": {"description":"Source view label."}, + "@source": { + "description": "Source view label." + }, "split": "Bölünmüş görünüm", - "@split": {"description":"Split view label."}, + "@split": { + "description": "Split view label." + }, "systemTheme": "Sistem", - "@systemTheme": {"description":"System theme option."}, + "@systemTheme": { + "description": "System theme option." + }, "theme": "Tema", - "@theme": {"description":"Theme setting label."}, + "@theme": { + "description": "Theme setting label." + }, "appLanguage": "Dil", - "@appLanguage": {"description":"Application language setting label."}, + "@appLanguage": { + "description": "Application language setting label." + }, "systemLanguage": "Sistem", - "@systemLanguage": {"description":"Language selector option that follows the operating system locale."}, + "@systemLanguage": { + "description": "Language selector option that follows the operating system locale." + }, "languageEnglish": "English", - "@languageEnglish": {"description":"Language selector option for English."}, + "@languageEnglish": { + "description": "Language selector option for English." + }, "languageGerman": "Deutsch", - "@languageGerman": {"description":"Language selector option for German."}, + "@languageGerman": { + "description": "Language selector option for German." + }, "languageDutch": "Nederlands", - "@languageDutch": {"description":"Language selector option for Dutch."}, + "@languageDutch": { + "description": "Language selector option for Dutch." + }, "languageTurkish": "Türkçe", - "@languageTurkish": {"description":"Language selector option for Turkish."}, + "@languageTurkish": { + "description": "Language selector option for Turkish." + }, "languageItalian": "Italiano", - "@languageItalian": {"description":"Language selector option for Italian."}, - "languageNorwegian": "Norsk", - "@languageNorwegian": {"description":"Language selector option for Norwegian."}, + "@languageItalian": { + "description": "Language selector option for Italian." + }, + "languageNorwegian": "Norsk bokmål", + "@languageNorwegian": { + "description": "Language selector option for Norwegian." + }, "languageFrench": "Français", - "@languageFrench": {"description":"Language selector option for French."}, + "@languageFrench": { + "description": "Language selector option for French." + }, "languageRussian": "Русский", - "@languageRussian": {"description":"Language selector option for Russian."}, + "@languageRussian": { + "description": "Language selector option for Russian." + }, "languageUkrainian": "Українська", - "@languageUkrainian": {"description":"Language selector option for Ukrainian."}, + "@languageUkrainian": { + "description": "Language selector option for Ukrainian." + }, "languagePolish": "Polski", - "@languagePolish": {"description":"Language selector option for Polish."}, + "@languagePolish": { + "description": "Language selector option for Polish." + }, "languageSpanish": "Español", - "@languageSpanish": {"description":"Language selector option for Spanish."}, + "@languageSpanish": { + "description": "Language selector option for Spanish." + }, "languagePortuguese": "Português", - "@languagePortuguese": {"description":"Language selector option for Portuguese."}, + "@languagePortuguese": { + "description": "Language selector option for Portuguese." + }, "languageArabic": "العربية", - "@languageArabic": {"description":"Language selector option for Arabic."}, + "@languageArabic": { + "description": "Language selector option for Arabic." + }, "languagePersian": "فارسی", - "@languagePersian": {"description":"Language selector option for Persian."}, + "@languagePersian": { + "description": "Language selector option for Persian." + }, "languageHindi": "हिन्दी", - "@languageHindi": {"description":"Language selector option for Hindi."}, + "@languageHindi": { + "description": "Language selector option for Hindi." + }, "languageIndonesian": "Bahasa Indonesia", - "@languageIndonesian": {"description":"Language selector option for Indonesian."}, + "@languageIndonesian": { + "description": "Language selector option for Indonesian." + }, "languageEstonian": "Eesti", - "@languageEstonian": {"description":"Language selector option for Estonian."}, + "@languageEstonian": { + "description": "Language selector option for Estonian." + }, "languageVietnamese": "Tiếng Việt", - "@languageVietnamese": {"description":"Language selector option for Vietnamese."}, + "@languageVietnamese": { + "description": "Language selector option for Vietnamese." + }, "languageJapanese": "日本語", - "@languageJapanese": {"description":"Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description":"Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", - "@languageSimplifiedChinese": {"description":"Language selector option for Simplified Chinese."}, + "@languageSimplifiedChinese": { + "description": "Language selector option for Simplified Chinese." + }, "toggleSidebar": "Kenar çubuğu paneli", - "@toggleSidebar": {"description":"Keyboard shortcuts label for the sidebar panel toggle."}, + "@toggleSidebar": { + "description": "Keyboard shortcuts label for the sidebar panel toggle." + }, "topLeft": "Sol üst", - "@topLeft": {"description":"Editing button position option."}, + "@topLeft": { + "description": "Editing button position option." + }, "topRight": "Sağ üst", - "@topRight": {"description":"Editing button position option."}, + "@topRight": { + "description": "Editing button position option." + }, "undo": "Geri al", - "@undo": {"description":"Undo command label."}, + "@undo": { + "description": "Undo command label." + }, "validate": "Doğrula", - "@validate": {"description":"Validate action label."}, + "@validate": { + "description": "Validate action label." + }, "validation": "Doğrulama", - "@validation": {"description":"Settings section title for validation options."}, + "@validation": { + "description": "Settings section title for validation options." + }, "viewMode": "Görünüm modu", - "@viewMode": {"description":"Native header bar view mode control label."}, + "@viewMode": { + "description": "Native header bar view mode control label." + }, "welcome": "Hoş geldiniz", - "@welcome": {"description":"Welcome screen label and tooltip."}, + "@welcome": { + "description": "Welcome screen label and tooltip." + }, "writerside": "Writerside", - "@writerside": {"description":"Writerside workspace kind label."}, + "@writerside": { + "description": "Writerside workspace kind label." + }, "xml": "XML", - "@xml": {"description":"XML format label."}, + "@xml": { + "description": "XML format label." + }, "fileTypeMarkdown": "Markdown", - "@fileTypeMarkdown": {"description":"Native file picker type label for Markdown files."}, + "@fileTypeMarkdown": { + "description": "Native file picker type label for Markdown files." + }, "fileTypeImages": "Görseller", - "@fileTypeImages": {"description":"Native file picker type label for images."}, + "@fileTypeImages": { + "description": "Native file picker type label for images." + }, "openMarkdownFile": "Markdown Dosyasını Aç", - "@openMarkdownFile": {"description":"Action label for opening a Markdown file."}, + "@openMarkdownFile": { + "description": "Action label for opening a Markdown file." + }, "markdownFileExtensions": ".md veya .markdown", - "@markdownFileExtensions": {"description":"Subtitle describing supported Markdown file extensions."}, + "@markdownFileExtensions": { + "description": "Subtitle describing supported Markdown file extensions." + }, "openFolderOrWritersideProject": "Klasör veya Writerside projesi aç", - "@openFolderOrWritersideProject": {"description":"Action label for opening a folder or Writerside project."}, + "@openFolderOrWritersideProject": { + "description": "Action label for opening a folder or Writerside project." + }, "markdownFolderOrWritersideProject": "Markdown klasörü veya Writerside uyumlu proje", - "@markdownFolderOrWritersideProject": {"description":"Subtitle describing supported folder workspace types."}, + "@markdownFolderOrWritersideProject": { + "description": "Subtitle describing supported folder workspace types." + }, "noOpenFile": "Açık dosya yok", - "@noOpenFile": {"description":"Header title when a folder or Writerside workspace has no open editor tab."}, + "@noOpenFile": { + "description": "Header title when a folder or Writerside workspace has no open editor tab." + }, "shortcutDeleteTreeItemDescription": "Seçilen Dosyalar öğesini silin veya seçilen konuyu içindekiler tablosundan kaldırın", - "@shortcutDeleteTreeItemDescription": {"description":"Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Genel", - "@shortcutGroupGeneral": {"description":"Keyboard shortcut group for general application commands."}, - "shortcutNewDocument": "Yeni belge", - "@shortcutNewDocument": {"description":"Keyboard shortcut label for opening the content creation chooser."}, + "@shortcutGroupGeneral": { + "description": "Keyboard shortcut group for general application commands." + }, + "shortcutNewDocument": "Oluştur", + "@shortcutNewDocument": { + "description": "Keyboard shortcut label for opening the content creation chooser." + }, "shortcutNewDocumentDescription": "Markdown dosyası veya Writerside projesi oluştur", - "@shortcutNewDocumentDescription": {"description":"Keyboard shortcut description for creating Markdown files or Writerside projects."}, + "@shortcutNewDocumentDescription": { + "description": "Keyboard shortcut description for creating Markdown files or Writerside projects." + }, "shortcutOpenDescription": "Markdown dosyasını, klasörünü veya Writerside projesini açın", - "@shortcutOpenDescription": {"description":"Keyboard shortcut description for opening content."}, + "@shortcutOpenDescription": { + "description": "Keyboard shortcut description for opening content." + }, "shortcutSaveDescription": "Geçerli belgeyi kaydet", - "@shortcutSaveDescription": {"description":"Keyboard shortcut description for saving content."}, + "@shortcutSaveDescription": { + "description": "Keyboard shortcut description for saving content." + }, "shortcutSearchDescription": "Mevcut çalışma alanında arama yapın", - "@shortcutSearchDescription": {"description":"Keyboard shortcut description for search."}, + "@shortcutSearchDescription": { + "description": "Keyboard shortcut description for search." + }, "shortcutKeyboardShortcutsDescription": "Bu klavye kısayolu referansını göster", - "@shortcutKeyboardShortcutsDescription": {"description":"Keyboard shortcut description for opening shortcuts."}, + "@shortcutKeyboardShortcutsDescription": { + "description": "Keyboard shortcut description for opening shortcuts." + }, "shortcutMarkdownAndHtmlDescription": "Markdown ve HTML referansını açın", - "@shortcutMarkdownAndHtmlDescription": {"description":"Keyboard shortcut description for opening the Markdown and HTML reference."}, + "@shortcutMarkdownAndHtmlDescription": { + "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + }, "shortcutSettingsDescription": "BusyMark ayarlarını aç", - "@shortcutSettingsDescription": {"description":"Keyboard shortcut description for opening settings."}, + "@shortcutSettingsDescription": { + "description": "Keyboard shortcut description for opening settings." + }, "shortcutNextTab": "Sonraki sekme", - "@shortcutNextTab": {"description":"Keyboard shortcut label for moving to the next tab."}, + "@shortcutNextTab": { + "description": "Keyboard shortcut label for moving to the next tab." + }, "shortcutNextTabDescription": "Sonraki açık sekmeye git", - "@shortcutNextTabDescription": {"description":"Keyboard shortcut description for moving to the next tab."}, + "@shortcutNextTabDescription": { + "description": "Keyboard shortcut description for moving to the next tab." + }, "shortcutPreviousTab": "Önceki sekme", - "@shortcutPreviousTab": {"description":"Keyboard shortcut label for moving to the previous tab."}, + "@shortcutPreviousTab": { + "description": "Keyboard shortcut label for moving to the previous tab." + }, "shortcutPreviousTabDescription": "Önceki açık sekmeye git", - "@shortcutPreviousTabDescription": {"description":"Keyboard shortcut description for moving to the previous tab."}, + "@shortcutPreviousTabDescription": { + "description": "Keyboard shortcut description for moving to the previous tab." + }, "shortcutCloseTab": "Sekmeyi kapat", - "@shortcutCloseTab": {"description":"Keyboard shortcut label for closing the active tab."}, + "@shortcutCloseTab": { + "description": "Keyboard shortcut label for closing the active tab." + }, "shortcutCloseTabDescription": "Etkin sekmeyi kapat", - "@shortcutCloseTabDescription": {"description":"Keyboard shortcut description for closing the active tab."}, + "@shortcutCloseTabDescription": { + "description": "Keyboard shortcut description for closing the active tab." + }, "shortcutCloseAllTabs": "Tüm sekmeleri kapat", - "@shortcutCloseAllTabs": {"description":"Keyboard shortcut label for closing all tabs."}, + "@shortcutCloseAllTabs": { + "description": "Keyboard shortcut label for closing all tabs." + }, "shortcutCloseAllTabsDescription": "Tüm açık sekmeleri kapat", - "@shortcutCloseAllTabsDescription": {"description":"Keyboard shortcut description for closing all tabs."}, + "@shortcutCloseAllTabsDescription": { + "description": "Keyboard shortcut description for closing all tabs." + }, "shortcutGroupTextEditing": "Metin Düzenleme", - "@shortcutGroupTextEditing": {"description":"Keyboard shortcut group for text editing commands."}, + "@shortcutGroupTextEditing": { + "description": "Keyboard shortcut group for text editing commands." + }, "shortcutSelectAllDescription": "Kaynak modunda tüm metni seçin; Editör modunda her bloğu seçmek için iki kez basın", - "@shortcutSelectAllDescription": {"description":"Keyboard shortcut description for selecting source text or visual-editor blocks."}, + "@shortcutSelectAllDescription": { + "description": "Keyboard shortcut description for selecting source text or visual-editor blocks." + }, "shortcutCutDescription": "Seçilen metni kes", - "@shortcutCutDescription": {"description":"Keyboard shortcut description for cut."}, + "@shortcutCutDescription": { + "description": "Keyboard shortcut description for cut." + }, "shortcutCopyDescription": "Seçilen metni kopyala", - "@shortcutCopyDescription": {"description":"Keyboard shortcut description for copy."}, + "@shortcutCopyDescription": { + "description": "Keyboard shortcut description for copy." + }, "shortcutPasteDescription": "Panodan yapıştır", - "@shortcutPasteDescription": {"description":"Keyboard shortcut description for paste."}, - "shortcutPastePlainTextDescription": "Pano metnini biçimlendirmeden yapıştırma", - "@shortcutPastePlainTextDescription": {"description":"Keyboard shortcut description for plain text paste."}, + "@shortcutPasteDescription": { + "description": "Keyboard shortcut description for paste." + }, + "shortcutPastePlainTextDescription": "Panodan biçimlendirme olmadan yapıştır", + "@shortcutPastePlainTextDescription": { + "description": "Keyboard shortcut description for plain text paste." + }, "shortcutUndoDescription": "Son düzenlemeyi geri al", - "@shortcutUndoDescription": {"description":"Keyboard shortcut description for undo."}, + "@shortcutUndoDescription": { + "description": "Keyboard shortcut description for undo." + }, "shortcutRedoDescription": "Geri alınan son düzenlemeyi yeniden yap", - "@shortcutRedoDescription": {"description":"Keyboard shortcut description for redo."}, + "@shortcutRedoDescription": { + "description": "Keyboard shortcut description for redo." + }, "shortcutInsertIndentation": "Girinti ekle", - "@shortcutInsertIndentation": {"description":"Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "İmlecin bulunduğu yere girinti ekle", - "@shortcutInsertIndentationDescription": {"description":"Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Kaynakta girintiyi azalt", - "@shortcutOutdentSource": {"description":"Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Kaynak modunda bir girinti düzeyini kaldırın", - "@shortcutOutdentSourceDescription": {"description":"Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Aramayı kapat veya blok seçimini temizle", - "@shortcutEscape": {"description":"Keyboard shortcut label for closing search or clearing a block selection."}, + "@shortcutEscape": { + "description": "Keyboard shortcut label for closing search or clearing a block selection." + }, "shortcutEscapeDescription": "Editör modunda çalışma alanı aramasını kapatın veya bir blok seçimini temizleyin", - "@shortcutEscapeDescription": {"description":"Keyboard shortcut description for closing search or clearing a block selection."}, + "@shortcutEscapeDescription": { + "description": "Keyboard shortcut description for closing search or clearing a block selection." + }, "shortcutGroupFormatting": "Biçimlendirme", - "@shortcutGroupFormatting": {"description":"Keyboard shortcut group for inline formatting."}, + "@shortcutGroupFormatting": { + "description": "Keyboard shortcut group for inline formatting." + }, "shortcutBoldDescription": "Seçili metinde kalın yazıya geçiş yap", - "@shortcutBoldDescription": {"description":"Keyboard shortcut description for bold."}, + "@shortcutBoldDescription": { + "description": "Keyboard shortcut description for bold." + }, "shortcutItalicDescription": "Seçilen metinde italik özelliğini aç/kapat", - "@shortcutItalicDescription": {"description":"Keyboard shortcut description for italic."}, + "@shortcutItalicDescription": { + "description": "Keyboard shortcut description for italic." + }, "shortcutUnderlineDescription": "Seçili metnin altını çizmeyi aç/kapat", - "@shortcutUnderlineDescription": {"description":"Keyboard shortcut description for underline."}, + "@shortcutUnderlineDescription": { + "description": "Keyboard shortcut description for underline." + }, "shortcutLinkDescription": "Bağlantı ekleme veya düzenleme", - "@shortcutLinkDescription": {"description":"Keyboard shortcut description for link insertion."}, + "@shortcutLinkDescription": { + "description": "Keyboard shortcut description for link insertion." + }, "shortcutInlineCodeDescription": "Seçilen metinde satır içi kodu değiştir", - "@shortcutInlineCodeDescription": {"description":"Keyboard shortcut description for inline code."}, + "@shortcutInlineCodeDescription": { + "description": "Keyboard shortcut description for inline code." + }, "shortcutStrikethroughDescription": "Seçili metnin üstü çizili özelliğini aç/kapat", - "@shortcutStrikethroughDescription": {"description":"Keyboard shortcut description for strikethrough."}, + "@shortcutStrikethroughDescription": { + "description": "Keyboard shortcut description for strikethrough." + }, "shortcutGroupBlocks": "Bloklar", - "@shortcutGroupBlocks": {"description":"Keyboard shortcut group for block styles."}, + "@shortcutGroupBlocks": { + "description": "Keyboard shortcut group for block styles." + }, "shortcutParagraphDescription": "Geçerli bloğu paragrafa ayarla", - "@shortcutParagraphDescription": {"description":"Keyboard shortcut description for paragraph style."}, + "@shortcutParagraphDescription": { + "description": "Keyboard shortcut description for paragraph style." + }, "shortcutHeading1Description": "Geçerli bloğu Başlık 1 olarak ayarlayın", - "@shortcutHeading1Description": {"description":"Keyboard shortcut description for heading 1."}, + "@shortcutHeading1Description": { + "description": "Keyboard shortcut description for heading 1." + }, "shortcutHeading2Description": "Geçerli bloğu Başlık 2'ye ayarlayın", - "@shortcutHeading2Description": {"description":"Keyboard shortcut description for heading 2."}, + "@shortcutHeading2Description": { + "description": "Keyboard shortcut description for heading 2." + }, "shortcutHeading3Description": "Geçerli bloğu Başlık 3'e ayarlayın", - "@shortcutHeading3Description": {"description":"Keyboard shortcut description for heading 3."}, + "@shortcutHeading3Description": { + "description": "Keyboard shortcut description for heading 3." + }, "shortcutHeading4Description": "Geçerli bloğu Başlık 4'e ayarlayın", - "@shortcutHeading4Description": {"description":"Keyboard shortcut description for heading 4."}, + "@shortcutHeading4Description": { + "description": "Keyboard shortcut description for heading 4." + }, "shortcutHeading5Description": "Geçerli bloğu Başlık 5'e ayarlayın", - "@shortcutHeading5Description": {"description":"Keyboard shortcut description for heading 5."}, + "@shortcutHeading5Description": { + "description": "Keyboard shortcut description for heading 5." + }, "shortcutHeading6Description": "Geçerli bloğu Başlık 6'ya ayarlayın", - "@shortcutHeading6Description": {"description":"Keyboard shortcut description for heading 6."}, + "@shortcutHeading6Description": { + "description": "Keyboard shortcut description for heading 6." + }, "shortcutGroupLists": "Listeler", - "@shortcutGroupLists": {"description":"Keyboard shortcut group for list commands."}, + "@shortcutGroupLists": { + "description": "Keyboard shortcut group for list commands." + }, "numberedList": "Numaralı liste", - "@numberedList": {"description":"Keyboard shortcut label for numbered list formatting."}, + "@numberedList": { + "description": "Keyboard shortcut label for numbered list formatting." + }, "shortcutNumberedListDescription": "Numaralı liste formatını değiştir", - "@shortcutNumberedListDescription": {"description":"Keyboard shortcut description for numbered list."}, + "@shortcutNumberedListDescription": { + "description": "Keyboard shortcut description for numbered list." + }, "bulletedList": "Madde işaretli liste", - "@bulletedList": {"description":"Keyboard shortcut label for bulleted list formatting."}, + "@bulletedList": { + "description": "Keyboard shortcut label for bulleted list formatting." + }, "shortcutBulletedListDescription": "Madde işaretli liste biçimlendirmesini değiştir", - "@shortcutBulletedListDescription": {"description":"Keyboard shortcut description for bulleted list."}, + "@shortcutBulletedListDescription": { + "description": "Keyboard shortcut description for bulleted list." + }, "checklist": "Kontrol listesi", - "@checklist": {"description":"Keyboard shortcut label for checklist formatting."}, + "@checklist": { + "description": "Keyboard shortcut label for checklist formatting." + }, "shortcutChecklistDescription": "Denetim listesi biçimlendirmesini değiştir", - "@shortcutChecklistDescription": {"description":"Keyboard shortcut description for checklist."}, + "@shortcutChecklistDescription": { + "description": "Keyboard shortcut description for checklist." + }, "shortcutGroupSidebar": "Kenar çubuğu", - "@shortcutGroupSidebar": {"description":"Keyboard shortcut group for sidebar view switching."}, + "@shortcutGroupSidebar": { + "description": "Keyboard shortcut group for sidebar view switching." + }, "sidebarViewMenu": "Kenar çubuğu görünümü", - "@sidebarViewMenu": {"description":"Tooltip for the sidebar view selector button."}, + "@sidebarViewMenu": { + "description": "Tooltip for the sidebar view selector button." + }, "createMarkdownFile": "Markdown dosyası oluştur", - "@createMarkdownFile": {"description":"Welcome screen action for creating a Markdown file."}, + "@createMarkdownFile": { + "description": "Welcome screen action for creating a Markdown file." + }, "createMarkdownFileDescription": "Kaydedilmemiş bir yerel Markdown belgesi başlatın", - "@createMarkdownFileDescription": {"description":"Welcome screen subtitle for creating a Markdown file."}, + "@createMarkdownFileDescription": { + "description": "Welcome screen subtitle for creating a Markdown file." + }, "createWritersideProject": "Writerside projesi oluştur", - "@createWritersideProject": {"description":"Welcome screen action for creating a Writerside project."}, + "@createWritersideProject": { + "description": "Welcome screen action for creating a Writerside project." + }, "createWritersideProjectDescription": "Yerel, Writerside uyumlu bir proje başlat", - "@createWritersideProjectDescription": {"description":"Welcome screen subtitle for creating a Writerside project."}, + "@createWritersideProjectDescription": { + "description": "Welcome screen subtitle for creating a Writerside project." + }, "defaultProjectName": "Dokümantasyon", - "@defaultProjectName": {"description":"Default project name shown in the create project dialog."}, + "@defaultProjectName": { + "description": "Default project name shown in the create project dialog." + }, "defaultInstanceName": "Kullanım Kılavuzu", - "@defaultInstanceName": {"description":"Default Writerside instance name shown in the create project dialog."}, + "@defaultInstanceName": { + "description": "Default Writerside instance name shown in the create project dialog." + }, "defaultStartTopicTitle": "Başlarken", - "@defaultStartTopicTitle": {"description":"Default start topic title shown in the create project dialog."}, + "@defaultStartTopicTitle": { + "description": "Default start topic title shown in the create project dialog." + }, "projectName": "Proje adı", - "@projectName": {"description":"Create project dialog field label."}, + "@projectName": { + "description": "Create project dialog field label." + }, "directoryName": "Klasör adı", - "@directoryName": {"description":"Create project dialog field label."}, + "@directoryName": { + "description": "Create project dialog field label." + }, "instanceName": "Örnek adı", - "@instanceName": {"description":"Create project dialog field label."}, + "@instanceName": { + "description": "Create project dialog field label." + }, "instanceId": "Örnek kimliği", - "@instanceId": {"description":"Create project dialog field label."}, + "@instanceId": { + "description": "Create project dialog field label." + }, "startTopicTitle": "Başlangıç konusu başlığı", - "@startTopicTitle": {"description":"Create project dialog field label."}, + "@startTopicTitle": { + "description": "Create project dialog field label." + }, "location": "Konum", - "@location": {"description":"Create dialog location section label."}, + "@location": { + "description": "Create dialog location section label." + }, "projectNameRequired": "Proje adı gerekli.", - "@projectNameRequired": {"description":"Validation message for missing project name."}, + "@projectNameRequired": { + "description": "Validation message for missing project name." + }, "directoryNameRequired": "Klasör adı gerekli.", - "@directoryNameRequired": {"description":"Validation message for missing directory name."}, + "@directoryNameRequired": { + "description": "Validation message for missing directory name." + }, "useSingleSafeDirectoryName": "Tek bir güvenli klasör adı kullanın.", - "@useSingleSafeDirectoryName": {"description":"Validation message for unsafe directory names."}, + "@useSingleSafeDirectoryName": { + "description": "Validation message for unsafe directory names." + }, "useLowercaseIdentifier": "Harfler, sayılar, alt çizgiler veya kısa çizgiler içeren küçük harfli bir tanımlayıcı kullanın.", - "@useLowercaseIdentifier": {"description":"Validation message for invalid Writerside instance IDs."}, + "@useLowercaseIdentifier": { + "description": "Validation message for invalid Writerside instance IDs." + }, "startTopicTitleRequired": "Başlangıç konusu başlığı gerekli.", - "@startTopicTitleRequired": {"description":"Validation message for missing start topic title."}, + "@startTopicTitleRequired": { + "description": "Validation message for missing start topic title." + }, "createWritersideProjectFailed": "Writerside projesi oluşturulamadı.", - "@createWritersideProjectFailed": {"description":"Fallback error shown when Writerside project creation fails."}, + "@createWritersideProjectFailed": { + "description": "Fallback error shown when Writerside project creation fails." + }, "settingsTitle": "BusyMark Ayarları", - "@settingsTitle": {"description":"Settings screen title."}, + "@settingsTitle": { + "description": "Settings screen title." + }, "autoSave": "Otomatik Kaydet", - "@autoSave": {"description":"Editor setting label for saving files automatically."}, + "@autoSave": { + "description": "Editor setting label for saving files automatically." + }, "autoSaveDescription": "Kısa bir bekleme gecikmesinden sonra dosya değişikliklerini otomatik olarak kaydedin.", - "@autoSaveDescription": {"description":"Editor setting description for saving files automatically."}, + "@autoSaveDescription": { + "description": "Editor setting description for saving files automatically." + }, "wordWrap": "Satır kaydırma", - "@wordWrap": {"description":"Word wrap setting label."}, + "@wordWrap": { + "description": "Word wrap setting label." + }, "editorFontSize": "Düzenleyici yazı tipi boyutu", - "@editorFontSize": {"description":"Editor font size setting label."}, + "@editorFontSize": { + "description": "Editor font size setting label." + }, "validateOnEdit": "Düzenlemede doğrula", - "@validateOnEdit": {"description":"Validation setting label."}, + "@validateOnEdit": { + "description": "Validation setting label." + }, "clearRecentWorkspaces": "Son çalışma alanlarını temizle", - "@clearRecentWorkspaces": {"description":"Settings action label for clearing recent workspaces."}, - "editingButtonsPosition": "Düğmelerin konumunu düzenleme", - "@editingButtonsPosition": {"description":"Settings label for WYSIWYG editing button position."}, + "@clearRecentWorkspaces": { + "description": "Settings action label for clearing recent workspaces." + }, + "editingButtonsPosition": "Düzenleme düğmelerinin konumu", + "@editingButtonsPosition": { + "description": "Settings label for WYSIWYG editing button position." + }, "editingButtonsPositionDescription": "Kayan WYSIWYG düzenleme düğmelerinin nerede görüneceğini seçin.", - "@editingButtonsPositionDescription": {"description":"Description for WYSIWYG editing button position setting."}, - "editingButtonsDirection": "Düğmelerin yönünü düzenleme", - "@editingButtonsDirection": {"description":"Settings label for WYSIWYG editing button direction."}, + "@editingButtonsPositionDescription": { + "description": "Description for WYSIWYG editing button position setting." + }, + "editingButtonsDirection": "Düzenleme düğmelerinin yönü", + "@editingButtonsDirection": { + "description": "Settings label for WYSIWYG editing button direction." + }, "editingButtonsDirectionDescription": "Kayan WYSIWYG düzenleme düğmelerinin yatay mı yoksa dikey mi düzenleneceğini seçin.", - "@editingButtonsDirectionDescription": {"description":"Description for WYSIWYG editing button direction setting."}, + "@editingButtonsDirectionDescription": { + "description": "Description for WYSIWYG editing button direction setting." + }, "horizontal": "Yatay", - "@horizontal": {"description":"Editing button direction option."}, + "@horizontal": { + "description": "Editing button direction option." + }, "vertical": "Dikey", - "@vertical": {"description":"Editing button direction option."}, + "@vertical": { + "description": "Editing button direction option." + }, "privacy": "Gizlilik", - "@privacy": {"description":"Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Harici görselleri yükle", - "@allowRemoteImages": {"description":"Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Markdown önizleme ve düzenleme görsellerinin http ve https URL'lerinden yüklenmesine izin verin.", - "@allowRemoteImagesDescription": {"description":"Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Harici görsel izinlerini temizle", - "@clearRemoteImagePermissions": {"description":"Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Harici görsellerin yüklenmesine izin verilen çalışma alanlarını unutun.", - "@clearRemoteImagePermissionsDescription": {"description":"Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Güvenilir Git çalışma alanlarını temizleyin", - "@clearGitWorkspaceTrust": {"description":"Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Daha önce güvenilen çalışma alanları için Git özelliklerini etkinleştirmeden önce sorun.", - "@clearGitWorkspaceTrustDescription": {"description":"Settings action description for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Pencere", - "@settingsWindowSectionTitle": {"description":"Settings section title for native window behavior."}, + "@settingsWindowSectionTitle": { + "description": "Settings section title for native window behavior." + }, "settingsReopenWorkspaceOnStartupTitle": "Başlangıçta önceki çalışma alanını yeniden aç", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "BusyMark başladığında önceki oturumdaki çalışma alanını ve sekmeleri açın.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Kaydedilmemiş değişikliklerle kapatmadan önce onaylayın", - "@settingsConfirmCloseWithUnsavedChangesTitle": {"description":"Settings switch title for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesTitle": { + "description": "Settings switch title for close confirmation when documents have unsaved changes." + }, "settingsConfirmCloseWithUnsavedChangesDescription": "Belgelerde kaydedilmemiş değişiklikler olduğunda BusyMark'ı kapatmadan önce sorun.", - "@settingsConfirmCloseWithUnsavedChangesDescription": {"description":"Settings switch description for close confirmation when documents have unsaved changes."}, + "@settingsConfirmCloseWithUnsavedChangesDescription": { + "description": "Settings switch description for close confirmation when documents have unsaved changes." + }, "closeUnsavedChangesTitle": "Kaydedilmemiş değişiklikler", - "@closeUnsavedChangesTitle": {"description":"Window close confirmation dialog title when documents have unsaved changes."}, + "@closeUnsavedChangesTitle": { + "description": "Window close confirmation dialog title when documents have unsaved changes." + }, "closeUnsavedChangesSingleMessage": "Bu belgede kaydedilmemiş değişiklikler var. BusyMark'ı kapatmadan önce değişiklikler kaydedilsin mi?", - "@closeUnsavedChangesSingleMessage": {"description":"Window close confirmation message when one document has unsaved changes."}, + "@closeUnsavedChangesSingleMessage": { + "description": "Window close confirmation message when one document has unsaved changes." + }, "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?} =1{1 belgede kaydedilmemiş değişiklik var. BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?} other{{count} belgede kaydedilmemiş değişiklik var. BusyMark kapatılmadan önce değişiklikler kaydedilsin mi?}}", - "@closeUnsavedChangesMultipleMessage": {"description":"Window close confirmation message when multiple documents have unsaved changes.","placeholders":{"count":{"type":"int"}}}, - "closeUnsavedChangesCancel": "İptal etmek", - "@closeUnsavedChangesCancel": {"description":"Cancel button label in the window close unsaved-changes dialog."}, - "closeUnsavedChangesDiscard": "At", - "@closeUnsavedChangesDiscard": {"description":"Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel."}, + "@closeUnsavedChangesMultipleMessage": { + "description": "Window close confirmation message when multiple documents have unsaved changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "closeUnsavedChangesCancel": "İptal", + "@closeUnsavedChangesCancel": { + "description": "Cancel button label in the window close unsaved-changes dialog." + }, + "closeUnsavedChangesDiscard": "Değişiklikleri yok say", + "@closeUnsavedChangesDiscard": { + "description": "Destructive button that closes BusyMark without saving editor changes. Translate it distinctly from Cancel." + }, "closeUnsavedChangesSave": "Kaydet", - "@closeUnsavedChangesSave": {"description":"Save button label in the window close unsaved-changes dialog."}, + "@closeUnsavedChangesSave": { + "description": "Save button label in the window close unsaved-changes dialog." + }, "currentFile": "geçerli dosya", - "@currentFile": {"description":"Fallback file name in unsaved changes dialog."}, + "@currentFile": { + "description": "Fallback file name in unsaved changes dialog." + }, "unsavedChanges": "Kaydedilmemiş değişiklikler", - "@unsavedChanges": {"description":"Unsaved changes dialog title."}, + "@unsavedChanges": { + "description": "Unsaved changes dialog title." + }, "unsavedChangesMessage": "{fileName}'te kaydedilmemiş değişiklikleriniz var. Devam etmeden önce kaydedilsin mi?", - "@unsavedChangesMessage": {"description":"Unsaved changes confirmation message.","placeholders":{"fileName":{"type":"String"}}}, + "@unsavedChangesMessage": { + "description": "Unsaved changes confirmation message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "unsavedChangesMultipleMessage": "{count, plural, =1{1 belgede kaydedilmemiş değişiklik var. Devam etmeden önce kaydedilsin mi?} other{{count} belgede kaydedilmemiş değişiklik var. Devam etmeden önce kaydedilsin mi?}}", - "@unsavedChangesMultipleMessage": {"description":"Confirmation message before replacing workspace state when several documents are dirty.","placeholders":{"count":{"type":"int"}}}, + "@unsavedChangesMultipleMessage": { + "description": "Confirmation message before replacing workspace state when several documents are dirty.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "fileChangedOnDisk": "Diskteki dosya değiştirildi", - "@fileChangedOnDisk": {"description":"File changed confirmation dialog title."}, + "@fileChangedOnDisk": { + "description": "File changed confirmation dialog title." + }, "fileChangedOnDiskMessage": "Bu dosya, siz onu açtığınızdan beri diskte değişti. Üzerine yazılsın mı?", - "@fileChangedOnDiskMessage": {"description":"File changed confirmation dialog message."}, + "@fileChangedOnDiskMessage": { + "description": "File changed confirmation dialog message." + }, "untitledMarkdownFileName": "İsimsiz.md", - "@untitledMarkdownFileName": {"description":"Display name for a new unsaved Markdown document."}, + "@untitledMarkdownFileName": { + "description": "Display name for a new unsaved Markdown document." + }, "unorderedList": "Sırasız liste", - "@unorderedList": {"description":"WYSIWYG toolbar tooltip for unordered list."}, + "@unorderedList": { + "description": "WYSIWYG toolbar tooltip for unordered list." + }, "orderedList": "Sıralı liste", - "@orderedList": {"description":"WYSIWYG toolbar tooltip for ordered list."}, + "@orderedList": { + "description": "WYSIWYG toolbar tooltip for ordered list." + }, "taskList": "Görev listesi", - "@taskList": {"description":"WYSIWYG toolbar tooltip for task list."}, - "toggleTaskChecked": "Görevi değiştir işaretlendi", - "@toggleTaskChecked": {"description":"WYSIWYG toolbar tooltip for toggling task state."}, + "@taskList": { + "description": "WYSIWYG toolbar tooltip for task list." + }, + "toggleTaskChecked": "Görevi işaretle veya işaretini kaldır", + "@toggleTaskChecked": { + "description": "WYSIWYG toolbar tooltip for toggling task state." + }, "indentListItem": "Liste öğesine girinti ekle", - "@indentListItem": {"description":"WYSIWYG toolbar tooltip for indenting a list item."}, + "@indentListItem": { + "description": "WYSIWYG toolbar tooltip for indenting a list item." + }, "outdentListItem": "Liste öğesinin çıkıntısı", - "@outdentListItem": {"description":"WYSIWYG toolbar tooltip for outdenting a list item."}, + "@outdentListItem": { + "description": "WYSIWYG toolbar tooltip for outdenting a list item." + }, "blockquote": "Blok alıntı", - "@blockquote": {"description":"Blockquote command label."}, + "@blockquote": { + "description": "Blockquote command label." + }, "codeBlock": "Kod bloğu", - "@codeBlock": {"description":"Code block command or preview label."}, + "@codeBlock": { + "description": "Code block command or preview label." + }, "codeBlockLanguage": "Kod bloğu dili", - "@codeBlockLanguage": {"description":"Dialog title and toolbar tooltip for code block language."}, + "@codeBlockLanguage": { + "description": "Dialog title and toolbar tooltip for code block language." + }, "image": "Resim", - "@image": {"description":"Image command and document kind label."}, + "@image": { + "description": "Image command and document kind label." + }, "video": "Video", "openVideo": "Videoyu oynat", "pauseVideo": "Videoyu duraklat", @@ -517,1268 +1052,3281 @@ "videoPreview": "Video önizlemesi", "diagnosticWritersideVideoMissingSource": "Videonun src özelliği eksik.", "diagnosticWritersideVideoUnsupportedSource": "Desteklenmeyen video kaynağı: {source}", - "@diagnosticWritersideVideoUnsupportedSource": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoUnsupportedSource": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingFile": "Video dosyası mevcut değil: {source}", - "@diagnosticWritersideVideoMissingFile": {"placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingFile": { + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideVideoMissingPreview": "Video önizleme görüntüsü mevcut değil: {preview}", - "@diagnosticWritersideVideoMissingPreview": {"placeholders":{"preview":{"type":"String"}}}, + "@diagnosticWritersideVideoMissingPreview": { + "placeholders": { + "preview": { + "type": "String" + } + } + }, "inlineImage": "Satır içi resim", - "@inlineImage": {"description":"Inline image command label."}, + "@inlineImage": { + "description": "Inline image command label." + }, "table": "Tablo", - "@table": {"description":"Table command label."}, + "@table": { + "description": "Table command label." + }, "htmlBlock": "HTML bloğu", - "@htmlBlock": {"description":"HTML block command label."}, + "@htmlBlock": { + "description": "HTML block command label." + }, "htmlContentDefault": "HTML içeriği", - "@htmlContentDefault": {"description":"Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "HTML bloğu ekleme veya düzenleme", - "@shortcutHtmlBlockDescription": {"description":"Keyboard shortcut description for inserting or editing an HTML block."}, + "@shortcutHtmlBlockDescription": { + "description": "Keyboard shortcut description for inserting or editing an HTML block." + }, "renderedHtml": "İşlenen HTML", - "@renderedHtml": {"description":"Badge label for HTML rendered in the WYSIWYG editor."}, + "@renderedHtml": { + "description": "Badge label for HTML rendered in the WYSIWYG editor." + }, "editHtml": "HTML'yi düzenle", - "@editHtml": {"description":"Dialog title and tooltip for editing raw HTML source."}, + "@editHtml": { + "description": "Dialog title and tooltip for editing raw HTML source." + }, "htmlSource": "HTML kaynağı", - "@htmlSource": {"description":"Text field label for raw HTML source."}, + "@htmlSource": { + "description": "Text field label for raw HTML source." + }, "thematicBreak": "Yatay ayraç", - "@thematicBreak": {"description":"Thematic break command label."}, + "@thematicBreak": { + "description": "Thematic break command label." + }, "bold": "Kalın", - "@bold": {"description":"Bold command label."}, + "@bold": { + "description": "Bold command label." + }, "italic": "İtalik", - "@italic": {"description":"Italic command label."}, + "@italic": { + "description": "Italic command label." + }, "underline": "Altı çizili", - "@underline": {"description":"Underline command label."}, + "@underline": { + "description": "Underline command label." + }, "strikethrough": "Üstü çizili", - "@strikethrough": {"description":"Strikethrough command label."}, + "@strikethrough": { + "description": "Strikethrough command label." + }, "inlineCode": "Satır içi kod", - "@inlineCode": {"description":"Inline code command label."}, + "@inlineCode": { + "description": "Inline code command label." + }, "link": "Bağlantı", - "@link": {"description":"Link command and preview label."}, + "@link": { + "description": "Link command and preview label." + }, "hardLineBreak": "Zorunlu satır sonu", - "@hardLineBreak": {"description":"Hard line break command label."}, + "@hardLineBreak": { + "description": "Hard line break command label." + }, "textStyle": "Metin stili", - "@textStyle": {"description":"Text style menu tooltip."}, + "@textStyle": { + "description": "Text style menu tooltip." + }, "paragraph": "Paragraf", - "@paragraph": {"description":"Paragraph style label."}, + "@paragraph": { + "description": "Paragraph style label." + }, "heading1": "Başlık 1", - "@heading1": {"description":"Heading 1 style label."}, + "@heading1": { + "description": "Heading 1 style label." + }, "heading2": "Başlık 2", - "@heading2": {"description":"Heading 2 style label."}, + "@heading2": { + "description": "Heading 2 style label." + }, "heading3": "Başlık 3", - "@heading3": {"description":"Heading 3 style label."}, + "@heading3": { + "description": "Heading 3 style label." + }, "heading4": "Başlık 4", - "@heading4": {"description":"Heading 4 style label."}, + "@heading4": { + "description": "Heading 4 style label." + }, "heading5": "Başlık 5", - "@heading5": {"description":"Heading 5 style label."}, + "@heading5": { + "description": "Heading 5 style label." + }, "heading6": "Başlık 6", - "@heading6": {"description":"Heading 6 style label."}, + "@heading6": { + "description": "Heading 6 style label." + }, "headingLevelAbbreviation": "H{level}", - "@headingLevelAbbreviation": {"description":"Compact outline badge for a heading level.","placeholders":{"level":{"type":"int"}}}, + "@headingLevelAbbreviation": { + "description": "Compact outline badge for a heading level.", + "placeholders": { + "level": { + "type": "int" + } + } + }, "deleteTable": "Tabloyu sil", - "@deleteTable": {"description":"Tooltip for deleting a table."}, + "@deleteTable": { + "description": "Tooltip for deleting a table." + }, "tableColumnNumber": "Sütun {columnNumber}", - "@tableColumnNumber": {"description":"Tooltip for a table column control.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableColumnNumber": { + "description": "Tooltip for a table column control.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "insertColumnLeft": "Sola sütun ekle", - "@insertColumnLeft": {"description":"Menu item for inserting a table column to the left."}, + "@insertColumnLeft": { + "description": "Menu item for inserting a table column to the left." + }, "insertColumnRight": "Sağa sütun ekle", - "@insertColumnRight": {"description":"Menu item for inserting a table column to the right."}, + "@insertColumnRight": { + "description": "Menu item for inserting a table column to the right." + }, "deleteColumn": "Sütunu sil", - "@deleteColumn": {"description":"Menu item for deleting a table column."}, + "@deleteColumn": { + "description": "Menu item for deleting a table column." + }, "tableAlignmentUnspecified": "Hizalama: belirtilmemiş", - "@tableAlignmentUnspecified": {"description":"Menu item for using unspecified Markdown table-column alignment."}, + "@tableAlignmentUnspecified": { + "description": "Menu item for using unspecified Markdown table-column alignment." + }, "tableAlignmentLeft": "Hizalama: sol", - "@tableAlignmentLeft": {"description":"Menu item for left-aligning a Markdown table column."}, + "@tableAlignmentLeft": { + "description": "Menu item for left-aligning a Markdown table column." + }, "tableAlignmentCenter": "Hizalama: orta", - "@tableAlignmentCenter": {"description":"Menu item for centering a Markdown table column."}, + "@tableAlignmentCenter": { + "description": "Menu item for centering a Markdown table column." + }, "tableAlignmentRight": "Hizalama: sağ", - "@tableAlignmentRight": {"description":"Menu item for right-aligning a Markdown table column."}, + "@tableAlignmentRight": { + "description": "Menu item for right-aligning a Markdown table column." + }, "tableRowNumber": "Satır {rowNumber}", - "@tableRowNumber": {"description":"Tooltip for a table row control.","placeholders":{"rowNumber":{"type":"int"}}}, + "@tableRowNumber": { + "description": "Tooltip for a table row control.", + "placeholders": { + "rowNumber": { + "type": "int" + } + } + }, "insertRowAbove": "Yukarıya satır ekle", - "@insertRowAbove": {"description":"Menu item for inserting a table row above."}, + "@insertRowAbove": { + "description": "Menu item for inserting a table row above." + }, "insertRowBelow": "Aşağıya satır ekle", - "@insertRowBelow": {"description":"Menu item for inserting a table row below."}, + "@insertRowBelow": { + "description": "Menu item for inserting a table row below." + }, "deleteRow": "Satırı sil", - "@deleteRow": {"description":"Menu item for deleting a table row."}, + "@deleteRow": { + "description": "Menu item for deleting a table row." + }, "tableHeaderHint": "Sütun başlığı", - "@tableHeaderHint": {"description":"Hint for an empty table header cell."}, + "@tableHeaderHint": { + "description": "Hint for an empty table header cell." + }, "tableCellHint": "Hücre", - "@tableCellHint": {"description":"Hint for an empty table body cell."}, + "@tableCellHint": { + "description": "Hint for an empty table body cell." + }, "language": "Dil", - "@language": {"description":"Code block language field label."}, + "@language": { + "description": "Code block language field label." + }, "hideEditingButtons": "Düzenleme düğmelerini gizle", - "@hideEditingButtons": {"description":"Tooltip for hiding floating editing buttons."}, + "@hideEditingButtons": { + "description": "Tooltip for hiding floating editing buttons." + }, "showEditingButtons": "Düzenleme düğmelerini göster", - "@showEditingButtons": {"description":"Tooltip for showing floating editing buttons."}, + "@showEditingButtons": { + "description": "Tooltip for showing floating editing buttons." + }, "altText": "Alternatif metin", - "@altText": {"description":"Image alt text field label."}, + "@altText": { + "description": "Image alt text field label." + }, "editorPlaceholderText": "metin", - "@editorPlaceholderText": {"description":"Default selected text inserted by a source-editor formatting command."}, + "@editorPlaceholderText": { + "description": "Default selected text inserted by a source-editor formatting command." + }, "editorPlaceholderCode": "kod", - "@editorPlaceholderCode": {"description":"Default selected code inserted by a source-editor code command."}, + "@editorPlaceholderCode": { + "description": "Default selected code inserted by a source-editor code command." + }, "editorPlaceholderAltText": "alternatif metin", - "@editorPlaceholderAltText": {"description":"Default selected image description inserted by a source-editor image command."}, + "@editorPlaceholderAltText": { + "description": "Default selected image description inserted by a source-editor image command." + }, "describeTheImage": "Resmi açıklayın", - "@describeTheImage": {"description":"Image alt text hint."}, + "@describeTheImage": { + "description": "Image alt text hint." + }, "columns": "Sütunlar", - "@columns": {"description":"Table dialog columns field label."}, + "@columns": { + "description": "Table dialog columns field label." + }, "rows": "Satırlar", - "@rows": {"description":"Table dialog rows field label."}, + "@rows": { + "description": "Table dialog rows field label." + }, "tableHeaderNumber": "Sütun başlığı {columnNumber}", - "@tableHeaderNumber": {"description":"Default header text for a newly inserted table column.","placeholders":{"columnNumber":{"type":"int"}}}, + "@tableHeaderNumber": { + "description": "Default header text for a newly inserted table column.", + "placeholders": { + "columnNumber": { + "type": "int" + } + } + }, "tableCellDefault": "Hücre", - "@tableCellDefault": {"description":"Default cell text for newly inserted table cells."}, + "@tableCellDefault": { + "description": "Default cell text for newly inserted table cells." + }, "noImageSource": "Resim kaynağı yok", - "@noImageSource": {"description":"Placeholder shown when an image has no source."}, + "@noImageSource": { + "description": "Placeholder shown when an image has no source." + }, "remoteImageBlocked": "Harici görsel engellendi", - "@remoteImageBlocked": {"description":"Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "BusyMark'ın harici görselleri yükleyip yükleyemeyeceğini seçin.", - "@remoteImageBlockedTooltip": {"description":"Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Harici görseller engellendi", - "@remoteImagesBlockedTitle": {"description":"Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Bu belge internetteki görsellere başvuruyor. Bunları yüklemek ağ bilgilerini görselin barındırıldığı sunucuya açığa çıkarabilir.", - "@remoteImagesBlockedMessage": {"description":"Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Bu çalışma alanı için yükleme", - "@loadRemoteImagesForWorkspace": {"description":"Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Harici görselleri her zaman yükle", - "@alwaysLoadRemoteImages": {"description":"Dialog button that enables remote images globally."}, + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Kenar çubuğu panelini gizle", - "@hideSidebar": {"description":"Tooltip for hiding the workspace sidebar panel."}, + "@hideSidebar": { + "description": "Tooltip for hiding the workspace sidebar panel." + }, "showSidebar": "Kenar çubuğu panelini göster", - "@showSidebar": {"description":"Tooltip for showing the workspace sidebar panel."}, + "@showSidebar": { + "description": "Tooltip for showing the workspace sidebar panel." + }, "showPreview": "Önizlemeyi göster", - "@showPreview": {"description":"Tooltip for showing the preview pane."}, + "@showPreview": { + "description": "Tooltip for showing the preview pane." + }, "hidePreview": "Önizlemeyi gizle", - "@hidePreview": {"description":"Tooltip for hiding the preview pane."}, + "@hidePreview": { + "description": "Tooltip for hiding the preview pane." + }, "workspaceKindUnsavedMarkdown": "Kaydedilmemiş Markdown dosyası", - "@workspaceKindUnsavedMarkdown": {"description":"Workspace kind label for an unsaved Markdown file."}, + "@workspaceKindUnsavedMarkdown": { + "description": "Workspace kind label for an unsaved Markdown file." + }, "workspaceKindSingleMarkdown": "Tek Markdown dosyası", - "@workspaceKindSingleMarkdown": {"description":"Workspace kind label for a single Markdown file."}, + "@workspaceKindSingleMarkdown": { + "description": "Workspace kind label for a single Markdown file." + }, "workspaceKindMarkdownFolder": "Markdown klasörü", - "@workspaceKindMarkdownFolder": {"description":"Workspace kind label for a Markdown folder."}, + "@workspaceKindMarkdownFolder": { + "description": "Workspace kind label for a Markdown folder." + }, "workspaceKindWritersideModule": "Writerside modülü", - "@workspaceKindWritersideModule": {"description":"Workspace kind label for a Writerside module."}, + "@workspaceKindWritersideModule": { + "description": "Workspace kind label for a Writerside module." + }, "problems": "Sorunlar", - "@problems": {"description":"Diagnostics dialog title."}, + "@problems": { + "description": "Diagnostics dialog title." + }, "diagnosticCount": "{count, plural, =0{Tanılama yok} =1{1 tanılama} other{{count} tanılama}}", - "@diagnosticCount": {"description":"Count of diagnostics in the workspace.","placeholders":{"count":{"type":"int"}}}, + "@diagnosticCount": { + "description": "Count of diagnostics in the workspace.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "files": "Dosyalar", - "@files": {"description":"Files sidebar tab label."}, + "@files": { + "description": "Files sidebar tab label." + }, "toc": "İçindekiler", - "@toc": {"description":"Writerside table of contents sidebar tab label."}, + "@toc": { + "description": "Writerside table of contents sidebar tab label." + }, "tocActions": "İçindekiler eylemleri", - "@tocActions": {"description":"Tooltip for the Writerside TOC action menu button."}, + "@tocActions": { + "description": "Tooltip for the Writerside TOC action menu button." + }, "markdownUnsaved": "Kaydedilmemiş Markdown", - "@markdownUnsaved": {"description":"Workspace detail label for an unsaved Markdown file."}, + "@markdownUnsaved": { + "description": "Workspace detail label for an unsaved Markdown file." + }, "workspaceDetail": "{kind} - {count, plural, =1{1 dosya} other{{count} dosya}}", - "@workspaceDetail": {"description":"Workspace detail with kind and file count.","placeholders":{"kind":{"type":"String"},"count":{"type":"int"}}}, + "@workspaceDetail": { + "description": "Workspace detail with kind and file count.", + "placeholders": { + "kind": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "noFiles": "Dosya yok", - "@noFiles": {"description":"Empty state shown when there are no files."}, + "@noFiles": { + "description": "Empty state shown when there are no files." + }, "newFile": "Yeni dosya", - "@newFile": {"description":"Menu action and dialog title for creating a new file."}, + "@newFile": { + "description": "Menu action and dialog title for creating a new file." + }, "noWritersideToc": "Writerside TOC'si yok", - "@noWritersideToc": {"description":"Empty state shown when there is no Writerside TOC."}, + "@noWritersideToc": { + "description": "Empty state shown when there is no Writerside TOC." + }, "tocSection": "İçindekiler bölümü", - "@tocSection": {"description":"Fallback label for a Writerside TOC section."}, + "@tocSection": { + "description": "Fallback label for a Writerside TOC section." + }, "newTopic": "Yeni konu", - "@newTopic": {"description":"Create new Writerside topic action label."}, + "@newTopic": { + "description": "Create new Writerside topic action label." + }, "newChildTopic": "Yeni alt konu", - "@newChildTopic": {"description":"Create new child Writerside topic action label."}, + "@newChildTopic": { + "description": "Create new child Writerside topic action label." + }, "newSiblingTopic": "Yeni kardeş konu", - "@newSiblingTopic": {"description":"Create new sibling Writerside topic action label."}, + "@newSiblingTopic": { + "description": "Create new sibling Writerside topic action label." + }, "renameTopicFile": "Konu dosyasını yeniden adlandır", - "@renameTopicFile": {"description":"Context-menu action that renames a Writerside topic file."}, + "@renameTopicFile": { + "description": "Context-menu action that renames a Writerside topic file." + }, "topicPlacement": "İçindekiler yerleşimi", - "@topicPlacement": {"description":"Create topic dialog label for selecting TOC placement."}, + "@topicPlacement": { + "description": "Create topic dialog label for selecting TOC placement." + }, "tocRoot": "TOC kökünde", - "@tocRoot": {"description":"TOC placement option for the root level."}, - "afterSelectedTopic": "Konu seçildikten sonra", - "@afterSelectedTopic": {"description":"TOC placement option after the selected topic."}, + "@tocRoot": { + "description": "TOC placement option for the root level." + }, + "afterSelectedTopic": "Seçili konunun ardından", + "@afterSelectedTopic": { + "description": "TOC placement option after the selected topic." + }, "insideSelectedTopic": "Seçilen konunun içinde", - "@insideSelectedTopic": {"description":"TOC placement option inside the selected topic."}, + "@insideSelectedTopic": { + "description": "TOC placement option inside the selected topic." + }, "pasteAfterTopic": "Sonrasına yapıştır", - "@pasteAfterTopic": {"description":"Action that moves a cut TOC entry after the selected topic."}, + "@pasteAfterTopic": { + "description": "Action that moves a cut TOC entry after the selected topic." + }, "pasteAsChildTopic": "Alt konu olarak yapıştır", - "@pasteAsChildTopic": {"description":"Action that moves a cut TOC entry inside the selected topic."}, + "@pasteAsChildTopic": { + "description": "Action that moves a cut TOC entry inside the selected topic." + }, "removeFromToc": "TOC'den kaldır", - "@removeFromToc": {"description":"Action that removes an entry from a Writerside table of contents without deleting its topic file."}, + "@removeFromToc": { + "description": "Action that removes an entry from a Writerside table of contents without deleting its topic file." + }, "confirmRemoveFromTocTitle": "TOC'den kaldırılsın mı?", - "@confirmRemoveFromTocTitle": {"description":"Confirmation title before removing a Writerside TOC entry."}, + "@confirmRemoveFromTocTitle": { + "description": "Confirmation title before removing a Writerside TOC entry." + }, "confirmRemoveFromTocMessage": "{name} bu içindekiler tablosundan kaldırılsın mı? Konu dosyası saklanacaktır.", - "@confirmRemoveFromTocMessage": {"description":"Confirmation message before removing a Writerside TOC entry without deleting its topic file.","placeholders":{"name":{"type":"String"}}}, + "@confirmRemoveFromTocMessage": { + "description": "Confirmation message before removing a Writerside TOC entry without deleting its topic file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteTopicTitle": "Konu dosyası silinsin mi?", - "@confirmDeleteTopicTitle": {"description":"Confirmation title before deleting a Writerside topic file."}, + "@confirmDeleteTopicTitle": { + "description": "Confirmation title before deleting a Writerside topic file." + }, "confirmDeleteTopicMessage": "{name} silinip tüm içindekilerden kaldırılsın mı? Bu geri alınamaz.", - "@confirmDeleteTopicMessage": {"description":"Confirmation message before deleting a Writerside topic file and removing its TOC entries.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteTopicMessage": { + "description": "Confirmation message before deleting a Writerside topic file and removing its TOC entries.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "safeDeleteTopicFile": "Konu dosyasını güvenle sil…", - "@safeDeleteTopicFile": {"description":"Writerside action that safely deletes a topic after checking usages."}, + "@safeDeleteTopicFile": { + "description": "Writerside action that safely deletes a topic after checking usages." + }, "removeTocElement": "TOC öğesini kaldır", - "@removeTocElement": {"description":"Writerside action and dialog title for removing a topic from one table of contents."}, + "@removeTocElement": { + "description": "Writerside action and dialog title for removing a topic from one table of contents." + }, "reviewUsages": "Kullanımları incele", - "@reviewUsages": {"description":"Action that opens the Writerside topic usages review."}, + "@reviewUsages": { + "description": "Action that opens the Writerside topic usages review." + }, "deleteTopicFile": "Konu dosyasını sil", - "@deleteTopicFile": {"description":"Action that deletes a Writerside topic source file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic source file." + }, "removeAction": "Kaldır", - "@removeAction": {"description":"Short action label for removing an item without deleting its source file."}, + "@removeAction": { + "description": "Short action label for removing an item without deleting its source file." + }, "topicRemovalSummary": "Seçili örnekten “{topic}” konusunu kaldır. Konu dosyası korunur.", - "@topicRemovalSummary": {"description":"Summary in the dialog for removing a topic from one Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@topicRemovalSummary": { + "description": "Summary in the dialog for removing a topic from one Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "“{topic}” konusunu sil ve bu Writerside projesindeki referanslarını güvenle güncelle.", - "@safeDeleteTopicSummary": {"description":"Summary in the Writerside safe-delete dialog.","placeholders":{"topic":{"type":"String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary in the Writerside safe-delete dialog.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, =1{1 alt konu bir seviye yukarı taşınacak.} other{{count} alt konu bir seviye yukarı taşınacak.}}", - "@childTopicsPromoted": {"description":"Disclosure that children of a removed TOC element are promoted.","placeholders":{"count":{"type":"int"}}}, + "@childTopicsPromoted": { + "description": "Disclosure that children of a removed TOC element are promoted.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Bu konu bir Writerside örneğinin başlangıç sayfası olarak kullanılıyor. Devam etmeden önce kullanımlarını inceleyin ve başka bir başlangıç sayfası atayın.", - "@topicIsStartPageRemovalWarning": {"description":"Warning that blocks deletion of a Writerside start-page topic."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning that blocks deletion of a Writerside start-page topic." + }, "topicUsagesCount": "Kullanımlar ({count})", - "@topicUsagesCount": {"description":"Heading with the number of Writerside topic usages.","placeholders":{"count":{"type":"int"}}}, + "@topicUsagesCount": { + "description": "Heading with the number of Writerside topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Bozulacak referans bulunamadı.", - "@noBreakingTopicUsages": {"description":"Safe-delete message when no breaking references were found."}, + "@noBreakingTopicUsages": { + "description": "Safe-delete message when no breaking references were found." + }, "topicUsagesFound": "BusyMark bu konuya yönelik aşağıdaki referansları buldu.", - "@topicUsagesFound": {"description":"Description above Writerside topic usage groups."}, + "@topicUsagesFound": { + "description": "Description above Writerside topic usage groups." + }, "topicUsageTocElements": "İçindekiler öğeleri", - "@topicUsageTocElements": {"description":"Usage group label for Writerside TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for Writerside TOC elements." + }, "topicUsageStartPages": "Başlangıç sayfaları", - "@topicUsageStartPages": {"description":"Usage group label for Writerside instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for Writerside instance start pages." + }, "topicUsageTopicLinks": "Konu bağlantıları", - "@topicUsageTopicLinks": {"description":"Usage group label for links to a Writerside topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to a Writerside topic." + }, "topicUsageIncludes": "Dahil etmeler", - "@topicUsageIncludes": {"description":"Usage group label for Writerside include elements."}, + "@topicUsageIncludes": { + "description": "Usage group label for Writerside include elements." + }, "usageCount": "{count, plural, =1{1 kullanım} other{{count} kullanım}}", - "@usageCount": {"description":"Number of references that use a Writerside topic.","placeholders":{"count":{"type":"int"}}}, + "@usageCount": { + "description": "Number of references that use a Writerside topic.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Yeniden düzenleme seçenekleri", - "@refactoringOptions": {"description":"Heading for Writerside topic removal options."}, + "@refactoringOptions": { + "description": "Heading for Writerside topic removal options." + }, "updateUsagesAutomatically": "Kullanımları otomatik güncelle", - "@updateUsagesAutomatically": {"description":"Option to rewrite Writerside topic usages during removal."}, - "updateUsagesAutomaticallyDescription": "İçindekiler referanslarını ve içeriklerini kaldırın ve bağlantı metnini koruyun.", - "@updateUsagesAutomaticallyDescription": {"description":"Description of automatic Writerside usage updates."}, + "@updateUsagesAutomatically": { + "description": "Option to rewrite Writerside topic usages during removal." + }, + "updateUsagesAutomaticallyDescription": "TOC başvurularını ve include öğelerini kaldırın, bağlantı metnini koruyun.", + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic Writerside usage updates." + }, "manualUsageUpdatesRequired": "Bazı kullanımlar bu yeniden düzenleme işleminden önce el ile değişiklik yapılmasını gerektirir.", - "@manualUsageUpdatesRequired": {"description":"Message when some Writerside usages cannot be updated automatically."}, + "@manualUsageUpdatesRequired": { + "description": "Message when some Writerside usages cannot be updated automatically." + }, "setRedirectTo": "Yönlendirme hedefi:", - "@setRedirectTo": {"description":"Option to redirect an old Writerside page to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect an old Writerside page to another topic." + }, "noRedirectDescription": "Eski yayımlanmış sayfayı yönlendirme.", - "@noRedirectDescription": {"description":"Description when no Writerside page redirect is selected."}, + "@noRedirectDescription": { + "description": "Description when no Writerside page redirect is selected." + }, "redirectTarget": "Yönlendirme hedefi", - "@redirectTarget": {"description":"Field label for a Writerside redirect destination."}, + "@redirectTarget": { + "description": "Field label for a Writerside redirect destination." + }, "remainingUsagesBlockRemoval": "Devam etmeden önce kalan kullanımları inceleyin ve güncelleyin veya mümkün olduğunda otomatik güncellemeleri etkinleştirin.", - "@remainingUsagesBlockRemoval": {"description":"Instruction shown when unresolved usages block topic removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Instruction shown when unresolved usages block topic removal." + }, "usagesOfTopic": "{topic} konusunun kullanımları", - "@usagesOfTopic": {"description":"Writerside usages sidebar title.","placeholders":{"topic":{"type":"String"}}}, + "@usagesOfTopic": { + "description": "Writerside usages sidebar title.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Hiçbir kullanım bulunamadı", - "@noUsagesFound": {"description":"Empty state in the Writerside usages review."}, + "@noUsagesFound": { + "description": "Empty state in the Writerside usages review." + }, "outsideSelectedInstance": "seçilen örneğin dışında", - "@outsideSelectedInstance": {"description":"Marker for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Marker for a usage outside the selected Writerside instance." + }, "doRefactor": "Yeniden düzenle", - "@doRefactor": {"description":"Action to return from usage review and continue the topic refactoring."}, + "@doRefactor": { + "description": "Action to return from usage review and continue the topic refactoring." + }, "orphanTopicTitle": "Konu dosyası artık kullanılmıyor", - "@orphanTopicTitle": {"description":"Dialog title after a topic is removed from its last table of contents."}, + "@orphanTopicTitle": { + "description": "Dialog title after a topic is removed from its last table of contents." + }, "keepTopicFile": "Konu Dosyasını Sakla", - "@keepTopicFile": {"description":"Action that keeps an orphaned Writerside topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned Writerside topic file." + }, "orphanTopicMessage": "“{topic}” artık bu Writerside projesinin hiçbir yerinde kullanılmıyor. Dosyayı silin veya başka bir örnekte kullanmak üzere saklayın.", - "@orphanTopicMessage": {"description":"Prompt to delete or keep an orphaned Writerside topic file.","placeholders":{"topic":{"type":"String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to delete or keep an orphaned Writerside topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "defaultNewTopicTitle": "Yeni konu", - "@defaultNewTopicTitle": {"description":"Default topic title in the create topic dialog."}, + "@defaultNewTopicTitle": { + "description": "Default topic title in the create topic dialog." + }, "topicTitle": "Konu başlığı", - "@topicTitle": {"description":"Create topic dialog field label."}, + "@topicTitle": { + "description": "Create topic dialog field label." + }, "fileName": "Dosya adı", - "@fileName": {"description":"Create topic dialog field label."}, + "@fileName": { + "description": "Create topic dialog field label." + }, "topicTitleRequired": "Konu başlığı zorunludur.", - "@topicTitleRequired": {"description":"Validation message for missing topic title."}, + "@topicTitleRequired": { + "description": "Validation message for missing topic title." + }, "fileNameRequired": "Dosya adı gerekli.", - "@fileNameRequired": {"description":"Validation message for missing file name."}, + "@fileNameRequired": { + "description": "Validation message for missing file name." + }, "rename": "Yeniden adlandır", - "@rename": {"description":"Rename command label."}, + "@rename": { + "description": "Rename command label." + }, "confirmDeleteFileTitle": "Dosya silinsin mi?", - "@confirmDeleteFileTitle": {"description":"Confirmation dialog title before deleting a file."}, + "@confirmDeleteFileTitle": { + "description": "Confirmation dialog title before deleting a file." + }, "confirmDeleteFolderTitle": "Klasör silinsin mi?", - "@confirmDeleteFolderTitle": {"description":"Confirmation dialog title before deleting a folder."}, + "@confirmDeleteFolderTitle": { + "description": "Confirmation dialog title before deleting a folder." + }, "confirmDeleteFileMessage": "{name} silinsin mi? Bu geri alınamaz.", - "@confirmDeleteFileMessage": {"description":"Confirmation dialog message before deleting a file.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFileMessage": { + "description": "Confirmation dialog message before deleting a file.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "confirmDeleteFolderMessage": "{name} ve içindeki tüm dosyalar silinsin mi? Bu geri alınamaz.", - "@confirmDeleteFolderMessage": {"description":"Confirmation dialog message before deleting a folder.","placeholders":{"name":{"type":"String"}}}, + "@confirmDeleteFolderMessage": { + "description": "Confirmation dialog message before deleting a folder.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "useSingleSafeFileName": "Tek bir güvenli dosya adı kullanın.", - "@useSingleSafeFileName": {"description":"Validation message for unsafe file names."}, + "@useSingleSafeFileName": { + "description": "Validation message for unsafe file names." + }, "useExpectedExtension": "Seçilen format için {extension} uzantısını kullanın.", - "@useExpectedExtension": {"description":"Validation message for an unexpected file extension.","placeholders":{"extension":{"type":"String"}}}, + "@useExpectedExtension": { + "description": "Validation message for an unexpected file extension.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "useIdentifierCharacters": "Uzantının önünde harf, rakam, alt çizgi veya kısa çizgi kullanın.", - "@useIdentifierCharacters": {"description":"Validation message for invalid topic IDs."}, + "@useIdentifierCharacters": { + "description": "Validation message for invalid topic IDs." + }, "topicIdAlreadyExists": "Konu kimliği zaten mevcut.", - "@topicIdAlreadyExists": {"description":"Validation message for duplicate topic IDs."}, + "@topicIdAlreadyExists": { + "description": "Validation message for duplicate topic IDs." + }, "createWritersideTopicFailed": "Writerside konusu oluşturulamadı.", - "@createWritersideTopicFailed": {"description":"Fallback error shown when topic creation fails."}, + "@createWritersideTopicFailed": { + "description": "Fallback error shown when topic creation fails." + }, "noOutline": "Anahat yok", - "@noOutline": {"description":"Empty state shown when a document has no outline."}, + "@noOutline": { + "description": "Empty state shown when a document has no outline." + }, "expandKind": "{kind} öğesini genişlet", - "@expandKind": {"description":"Tooltip for expanding a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@expandKind": { + "description": "Tooltip for expanding a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "collapseKind": "{kind} öğesini daralt", - "@collapseKind": {"description":"Tooltip for collapsing a foldable source section.","placeholders":{"kind":{"type":"String"}}}, + "@collapseKind": { + "description": "Tooltip for collapsing a foldable source section.", + "placeholders": { + "kind": { + "type": "String" + } + } + }, "foldKindSection": "bölüm", - "@foldKindSection": {"description":"Fold kind label for a section."}, + "@foldKindSection": { + "description": "Fold kind label for a section." + }, "foldKindList": "liste", - "@foldKindList": {"description":"Fold kind label for a list."}, + "@foldKindList": { + "description": "Fold kind label for a list." + }, "foldKindQuote": "alıntı", - "@foldKindQuote": {"description":"Fold kind label for a blockquote."}, + "@foldKindQuote": { + "description": "Fold kind label for a blockquote." + }, "foldKindTag": "etiket", - "@foldKindTag": {"description":"Fold kind label for an XML tag."}, + "@foldKindTag": { + "description": "Fold kind label for an XML tag." + }, "sourceSearchPreviousMatch": "Önceki eşleşme", - "@sourceSearchPreviousMatch": {"description":"Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Sonraki eşleşme", - "@sourceSearchNextMatch": {"description":"Tooltip for moving to the next source search match."}, - "sourceSearchCaseSensitive": "Harfe duyarlı", - "@sourceSearchCaseSensitive": {"description":"Tooltip for toggling case-sensitive source search."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, + "sourceSearchCaseSensitive": "Büyük-küçük harf duyarlı", + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Tam sözcük", - "@sourceSearchWholeWord": {"description":"Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Düzenli ifade", - "@sourceSearchRegex": {"description":"Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchReplacement": "Şununla değiştir:", - "@sourceSearchReplacement": {"description":"Placeholder for the active-document replacement field."}, - "sourceSearchReplaceCurrent": "Geçerli olanı değiştir", - "@sourceSearchReplaceCurrent": {"description":"Tooltip for replacing the current search match."}, + "@sourceSearchReplacement": { + "description": "Placeholder for the active-document replacement field." + }, + "sourceSearchReplaceCurrent": "Mevcut eşleşmeyi değiştir", + "@sourceSearchReplaceCurrent": { + "description": "Tooltip for replacing the current search match." + }, "sourceSearchReplaceAndFindNext": "Değiştir ve sonrakini bul", - "@sourceSearchReplaceAndFindNext": {"description":"Tooltip for replacing the current match and moving to the next."}, + "@sourceSearchReplaceAndFindNext": { + "description": "Tooltip for replacing the current match and moving to the next." + }, "sourceSearchReplaceAll": "Tümünü değiştir", - "@sourceSearchReplaceAll": {"description":"Tooltip for replacing every active-document search match."}, + "@sourceSearchReplaceAll": { + "description": "Tooltip for replacing every active-document search match." + }, "workspaceReplace": "Çalışma alanında değiştir", - "@workspaceReplace": {"description":"Action that previews replacements across the workspace."}, + "@workspaceReplace": { + "description": "Action that previews replacements across the workspace." + }, "reviewReplacements": "Değiştirmeleri incele", - "@reviewReplacements": {"description":"Action and dialog title for reviewing workspace replacements."}, + "@reviewReplacements": { + "description": "Action and dialog title for reviewing workspace replacements." + }, "applyReplacements": "Değişiklikleri uygula", - "@applyReplacements": {"description":"Action that applies selected workspace replacements."}, + "@applyReplacements": { + "description": "Action that applies selected workspace replacements." + }, "skippedFiles": "Atlanan dosyalar", - "@skippedFiles": {"description":"Heading for files excluded from a workspace replacement."}, + "@skippedFiles": { + "description": "Heading for files excluded from a workspace replacement." + }, "workspaceReplaceDirtyBuffer": "Kaydedilmemiş düzenleyici içeriği", - "@workspaceReplaceDirtyBuffer": {"description":"Source label for a workspace replacement preview using a dirty document buffer."}, + "@workspaceReplaceDirtyBuffer": { + "description": "Source label for a workspace replacement preview using a dirty document buffer." + }, "workspaceReplaceDiskContent": "Kaydedilen disk içeriği", - "@workspaceReplaceDiskContent": {"description":"Source label for a workspace replacement preview using disk content."}, + "@workspaceReplaceDiskContent": { + "description": "Source label for a workspace replacement preview using disk content." + }, "selectFileMatches": "Tüm {count} eşleşmeyi seç", - "@selectFileMatches": {"description":"Checkbox label for selecting every replacement match in a file.","placeholders":{"count":{"type":"int"}}}, + "@selectFileMatches": { + "description": "Checkbox label for selecting every replacement match in a file.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceReplaceApplied": "{files} dosyada {matches} eşleşme değiştirildi; {skipped} dosya atlandı.", - "@workspaceReplaceApplied": {"description":"Summary shown after applying workspace replacements.","placeholders":{"matches":{"type":"int"},"files":{"type":"int"},"skipped":{"type":"int"}}}, + "@workspaceReplaceApplied": { + "description": "Summary shown after applying workspace replacements.", + "placeholders": { + "matches": { + "type": "int" + }, + "files": { + "type": "int" + }, + "skipped": { + "type": "int" + } + } + }, "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · Son satır sonu var", - "@documentFormatWithFinalNewline": {"description":"Document format tooltip when the file ends with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithFinalNewline": { + "description": "Document format tooltip when the file ends with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · Son satır sonu yok", - "@documentFormatWithoutFinalNewline": {"description":"Document format tooltip when the file does not end with a newline.","placeholders":{"encoding":{"type":"String"},"lineEnding":{"type":"String"}}}, + "@documentFormatWithoutFinalNewline": { + "description": "Document format tooltip when the file does not end with a newline.", + "placeholders": { + "encoding": { + "type": "String" + }, + "lineEnding": { + "type": "String" + } + } + }, "normalizeLineEndings": "Satır sonlarını normalleştir", - "@normalizeLineEndings": {"description":"Dialog title for selecting a line-ending style."}, + "@normalizeLineEndings": { + "description": "Dialog title for selecting a line-ending style." + }, "mixedLineEndingsSavePrompt": "Bu belge karışık satır sonları içeriyor. Bir format seçin.", - "@mixedLineEndingsSavePrompt": {"description":"Prompt shown before saving a document with mixed line endings."}, + "@mixedLineEndingsSavePrompt": { + "description": "Prompt shown before saving a document with mixed line endings." + }, "workspaceReplaceMixedLineEndings": "{fileName} karışık satır sonları kullanır. Değiştirmeden önce kullanılacak formatı seçin.", - "@workspaceReplaceMixedLineEndings": {"description":"Prompt shown before replacing content in a mixed-line-ending file.","placeholders":{"fileName":{"type":"String"}}}, + "@workspaceReplaceMixedLineEndings": { + "description": "Prompt shown before replacing content in a mixed-line-ending file.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "workspaceReplaceIssueOversized": "Büyük boyutlu bir dosya atlandı.", - "@workspaceReplaceIssueOversized": {"description":"Workspace replacement issue for a file above the size limit."}, + "@workspaceReplaceIssueOversized": { + "description": "Workspace replacement issue for a file above the size limit." + }, "workspaceReplaceIssueUnreadable": "Okunamayan bir dosya atlandı.", - "@workspaceReplaceIssueUnreadable": {"description":"Workspace replacement issue for an unreadable file."}, + "@workspaceReplaceIssueUnreadable": { + "description": "Workspace replacement issue for an unreadable file." + }, "workspaceReplaceIssueInvalidUtf8": "Geçerli UTF-8 olmayan bir dosya atlandı.", - "@workspaceReplaceIssueInvalidUtf8": {"description":"Workspace replacement issue for invalid UTF-8 content."}, + "@workspaceReplaceIssueInvalidUtf8": { + "description": "Workspace replacement issue for invalid UTF-8 content." + }, "workspaceReplaceIssueTruncated": "Değiştirme önizlemesi kesildi.", - "@workspaceReplaceIssueTruncated": {"description":"Workspace replacement issue when the match limit is reached."}, + "@workspaceReplaceIssueTruncated": { + "description": "Workspace replacement issue when the match limit is reached." + }, "workspaceReplaceIssueFileChanged": "Önizlemeden sonra değişen bir dosya atlandı.", - "@workspaceReplaceIssueFileChanged": {"description":"Workspace replacement issue for stale disk content."}, + "@workspaceReplaceIssueFileChanged": { + "description": "Workspace replacement issue for stale disk content." + }, "workspaceReplaceIssueBufferChanged": "Önizlemeden sonra değişen düzenleyici arabelleği atlandı.", - "@workspaceReplaceIssueBufferChanged": {"description":"Workspace replacement issue for stale in-memory content."}, + "@workspaceReplaceIssueBufferChanged": { + "description": "Workspace replacement issue for stale in-memory content." + }, "workspaceReplaceIssueNormalizationRequired": "Değiştirmeden önce LF veya CRLF normalizasyonunu seçin.", - "@workspaceReplaceIssueNormalizationRequired": {"description":"Workspace replacement issue for mixed line endings without a selected format."}, + "@workspaceReplaceIssueNormalizationRequired": { + "description": "Workspace replacement issue for mixed line endings without a selected format." + }, "workspaceReplaceIssuePartialConflict": "Dosya aynı anda değiştiği için geri alma durduruldu. Bazı değişiklikler kalabilir; yeri değiştirilen içerik aşağıdaki yolda korundu.", - "@workspaceReplaceIssuePartialConflict": {"description":"Workspace replacement issue when a concurrent edit prevents safe transactional rollback."}, + "@workspaceReplaceIssuePartialConflict": { + "description": "Workspace replacement issue when a concurrent edit prevents safe transactional rollback." + }, "workspaceReplaceIssueApplyFailed": "İncelenen değiştirme işlemi gerçekleştirilemedi; hiçbir dosya değiştirilmedi.", - "@workspaceReplaceIssueApplyFailed": {"description":"Workspace replacement issue when the transactional file commit fails."}, + "@workspaceReplaceIssueApplyFailed": { + "description": "Workspace replacement issue when the transactional file commit fails." + }, "externalChangesTitle": "Harici değişiklikler — {fileName}", - "@externalChangesTitle": {"description":"Title of the external-file comparison dialog.","placeholders":{"fileName":{"type":"String"}}}, + "@externalChangesTitle": { + "description": "Title of the external-file comparison dialog.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "externalFileDeleted": "Bu dosya diskte silindi.", - "@externalFileDeleted": {"description":"Persistent banner shown when an open file is deleted externally."}, + "@externalFileDeleted": { + "description": "Persistent banner shown when an open file is deleted externally." + }, "externalFileChanged": "Kaydedilmemiş düzenlemeleriniz varken bu dosya diskte değişti.", - "@externalFileChanged": {"description":"Persistent banner shown when a dirty file changes externally."}, - "recoveredDocumentReview": "{fileName} için kaydedilmemiş içerik kurtarıldı. İnceleyin, ardından kaydedin, farklı kaydedin veya atın.", - "@recoveredDocumentReview": {"description":"Persistent recovery review banner.","placeholders":{"fileName":{"type":"String"}}}, + "@externalFileChanged": { + "description": "Persistent banner shown when a dirty file changes externally." + }, + "recoveredDocumentReview": "{fileName} için kurtarılan kaydedilmemiş içerik. İnceleyin, sonra kaydedin, farklı kaydedin veya vazgeçin.", + "@recoveredDocumentReview": { + "description": "Persistent recovery review banner.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "compare": "Karşılaştır", - "@compare": {"description":"Action that compares the editor buffer with the disk version."}, + "@compare": { + "description": "Action that compares the editor buffer with the disk version." + }, "reloadFromDisk": "Diskten Yeniden Yükle", - "@reloadFromDisk": {"description":"Action that replaces the editor buffer with the disk version."}, + "@reloadFromDisk": { + "description": "Action that replaces the editor buffer with the disk version." + }, "keepMine": "Benimkini koru", - "@keepMine": {"description":"Action that keeps the editor buffer after an external change."}, + "@keepMine": { + "description": "Action that keeps the editor buffer after an external change." + }, "saveAs": "Farklı Kaydet", - "@saveAs": {"description":"Action that saves the current document to another path."}, + "@saveAs": { + "description": "Action that saves the current document to another path." + }, "sourceSearchInvalidRegex": "Geçersiz düzenli ifade", - "@sourceSearchInvalidRegex": {"description":"Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Büyük dosya: vurgulama ve katlama duraklatıldı", - "@sourceLargeFileFeaturesPaused": {"description":"Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Okunacak bir şey yok", - "@nothingToRead": {"description":"Empty state shown when there is no content to read."}, + "@nothingToRead": { + "description": "Empty state shown when there is no content to read." + }, "admonition": "Bilgi kutusu", - "@admonition": {"description":"Tooltip for the Writerside admonition editing menu."}, + "@admonition": { + "description": "Tooltip for the Writerside admonition editing menu." + }, "quote": "Alıntı", - "@quote": {"description":"Label for a neutral Writerside quote block."}, + "@quote": { + "description": "Label for a neutral Writerside quote block." + }, "note": "Not", - "@note": {"description":"Preview label for a note admonition."}, + "@note": { + "description": "Preview label for a note admonition." + }, "tip": "İpucu", - "@tip": {"description":"Preview label for a tip admonition."}, + "@tip": { + "description": "Preview label for a tip admonition." + }, "warning": "Uyarı", - "@warning": {"description":"Preview label for a warning admonition."}, + "@warning": { + "description": "Preview label for a warning admonition." + }, "tabs": "Sekmeler", - "@tabs": {"description":"Preview label for a tabs block."}, + "@tabs": { + "description": "Preview label for a tabs block." + }, "tab": "Sekme", - "@tab": {"description":"Preview label for a tab block."}, + "@tab": { + "description": "Preview label for a tab block." + }, "procedure": "Prosedür", - "@procedure": {"description":"Preview label for a procedure block."}, + "@procedure": { + "description": "Preview label for a procedure block." + }, "step": "Adım", - "@step": {"description":"Preview label for a procedure step."}, + "@step": { + "description": "Preview label for a procedure step." + }, "topic": "Konu", - "@topic": {"description":"Preview label for a topic element."}, + "@topic": { + "description": "Preview label for a topic element." + }, "chapter": "Bölüm", - "@chapter": {"description":"Preview label for a chapter element."}, + "@chapter": { + "description": "Preview label for a chapter element." + }, "couldNotOpenTarget": "{target} açılamadı", - "@couldNotOpenTarget": {"description":"Toast shown when a link target cannot be opened.","placeholders":{"target":{"type":"String"}}}, + "@couldNotOpenTarget": { + "description": "Toast shown when a link target cannot be opened.", + "placeholders": { + "target": { + "type": "String" + } + } + }, "linkTargetNotFound": "Bağlantı hedefi bulunamadı: {targetPath}", - "@linkTargetNotFound": {"description":"Toast shown when a link target path is missing.","placeholders":{"targetPath":{"type":"String"}}}, + "@linkTargetNotFound": { + "description": "Toast shown when a link target path is missing.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "cannotOpenFileTypeInEditor": "Bu dosya türü düzenleyicide açılamıyor", - "@cannotOpenFileTypeInEditor": {"description":"Toast shown when a file type cannot be opened in the editor."}, - "anchorNotFound": "Bağlantı bulunamadı: {anchor}", - "@anchorNotFound": {"description":"Toast shown when a link anchor is missing.","placeholders":{"anchor":{"type":"String"}}}, + "@cannotOpenFileTypeInEditor": { + "description": "Toast shown when a file type cannot be opened in the editor." + }, + "anchorNotFound": "Bağlantı noktası bulunamadı: {anchor}", + "@anchorNotFound": { + "description": "Toast shown when a link anchor is missing.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "noProblemsFound": "Hiçbir sorun bulunamadı", - "@noProblemsFound": {"description":"Diagnostics empty state."}, + "@noProblemsFound": { + "description": "Diagnostics empty state." + }, "noResults": "Sonuç yok", - "@noResults": {"description":"Search empty state."}, + "@noResults": { + "description": "Search empty state." + }, "searchResultLine": "{relativePath} - Satır {lineNumber}", - "@searchResultLine": {"description":"Search result subtitle with file path and line number.","placeholders":{"relativePath":{"type":"String"},"lineNumber":{"type":"int"}}}, + "@searchResultLine": { + "description": "Search result subtitle with file path and line number.", + "placeholders": { + "relativePath": { + "type": "String" + }, + "lineNumber": { + "type": "int" + } + } + }, "untitledResult": "Başlıksız sonuç", - "@untitledResult": {"description":"Fallback search result title."}, + "@untitledResult": { + "description": "Fallback search result title." + }, "documentKindMarkdownFile": "Markdown dosyası", - "@documentKindMarkdownFile": {"description":"Search result document kind label."}, + "@documentKindMarkdownFile": { + "description": "Search result document kind label." + }, "documentKindWritersideMarkdownTopic": "Writerside Markdown konusu", - "@documentKindWritersideMarkdownTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideMarkdownTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideXmlTopic": "Writerside XML konusu", - "@documentKindWritersideXmlTopic": {"description":"Search result document kind label."}, + "@documentKindWritersideXmlTopic": { + "description": "Search result document kind label." + }, "documentKindWritersideTree": "Writerside ağacı", - "@documentKindWritersideTree": {"description":"Search result document kind label."}, + "@documentKindWritersideTree": { + "description": "Search result document kind label." + }, "documentKindConfigurationFile": "Yapılandırma dosyası", - "@documentKindConfigurationFile": {"description":"Search result document kind label."}, + "@documentKindConfigurationFile": { + "description": "Search result document kind label." + }, "documentKindVariablesFile": "Değişkenler dosyası", - "@documentKindVariablesFile": {"description":"Search result document kind label."}, + "@documentKindVariablesFile": { + "description": "Search result document kind label." + }, "documentKindCategoriesFile": "Kategoriler dosyası", - "@documentKindCategoriesFile": {"description":"Search result document kind label."}, + "@documentKindCategoriesFile": { + "description": "Search result document kind label." + }, "documentKindResourceFile": "Kaynak dosyası", - "@documentKindResourceFile": {"description":"Search result document kind label."}, + "@documentKindResourceFile": { + "description": "Search result document kind label." + }, "workspaceErrorOpenFailed": "Açma başarısız oldu: {error}", - "@workspaceErrorOpenFailed": {"description":"Workspace error message shown when opening a path fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorOpenFailed": { + "description": "Workspace error message shown when opening a path fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideProjectFailed": "Writerside projesi oluşturulamadı: {error}", - "@workspaceErrorCreateWritersideProjectFailed": {"description":"Workspace error message shown when Writerside project creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideProjectFailed": { + "description": "Workspace error message shown when Writerside project creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCreateWritersideTopicFailed": "Writerside konusu oluşturulamadı: {error}", - "@workspaceErrorCreateWritersideTopicFailed": {"description":"Workspace error message shown when Writerside topic creation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCreateWritersideTopicFailed": { + "description": "Workspace error message shown when Writerside topic creation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorCouldNotOpenFile": "Dosya açılamadı: {error}", - "@workspaceErrorCouldNotOpenFile": {"description":"Workspace error message shown when opening a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorCouldNotOpenFile": { + "description": "Workspace error message shown when opening a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorChooseWhereToSaveMarkdown": "Bu Markdown dosyasının nereye kaydedileceğini seçin.", - "@workspaceErrorChooseWhereToSaveMarkdown": {"description":"Workspace error message shown when an untitled file needs a save location."}, + "@workspaceErrorChooseWhereToSaveMarkdown": { + "description": "Workspace error message shown when an untitled file needs a save location." + }, "workspaceErrorSaveBlockedFileChangedOnDisk": "Kaydetme engellendi: diskteki dosya değiştirildi.", - "@workspaceErrorSaveBlockedFileChangedOnDisk": {"description":"Workspace error message shown when a save is blocked by external changes."}, + "@workspaceErrorSaveBlockedFileChangedOnDisk": { + "description": "Workspace error message shown when a save is blocked by external changes." + }, "workspaceErrorSaveFailed": "Kaydetme başarısız oldu: {error}", - "@workspaceErrorSaveFailed": {"description":"Workspace error message shown when saving fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorSaveFailed": { + "description": "Workspace error message shown when saving fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorFileOperationFailed": "Dosya işlemi başarısız oldu: {error}", - "@workspaceErrorFileOperationFailed": {"description":"Workspace error message shown when creating, renaming, moving, or deleting a file fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorFileOperationFailed": { + "description": "Workspace error message shown when creating, renaming, moving, or deleting a file fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceErrorValidationFailed": "Doğrulama başarısız oldu: {error}", - "@workspaceErrorValidationFailed": {"description":"Workspace error message shown when validation fails.","placeholders":{"error":{"type":"String"}}}, + "@workspaceErrorValidationFailed": { + "description": "Workspace error message shown when validation fails.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "workspaceRecoveryRestored": "{count, plural, =1{1 kaydedilmemiş belge kurtarıldı. Kaydetmeden veya silmeden önce inceleyin.} other{{count} kaydedilmemiş belge kurtarıldı. Kaydetmeden veya silmeden önce her birini inceleyin.}}", - "@workspaceRecoveryRestored": {"description":"Notice shown after crash recovery restores documents.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryRestored": { + "description": "Notice shown after crash recovery restores documents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "workspaceRecoveryDamaged": "{count, plural, =1{Hasarlı bir kurtarma kaydı geri yüklenemedi. Özgün kurtarma dosyası incelenmek üzere korundu.} other{{count} hasarlı kurtarma kaydı geri yüklenemedi. Geçerli kurtarma kayıtları kullanılabilir durumda.}}", - "@workspaceRecoveryDamaged": {"description":"Notice shown when recovery data is partly or wholly malformed.","placeholders":{"count":{"type":"int"}}}, + "@workspaceRecoveryDamaged": { + "description": "Notice shown when recovery data is partly or wholly malformed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "errorPathDoesNotExist": "Yol mevcut değil: {path}", - "@errorPathDoesNotExist": {"description":"Detail for a missing path error.","placeholders":{"path":{"type":"String"}}}, + "@errorPathDoesNotExist": { + "description": "Detail for a missing path error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTargetDirectoryNotEmpty": "Hedef dizin zaten mevcut ve boş değil: {path}", - "@errorTargetDirectoryNotEmpty": {"description":"Detail for a non-empty target directory error.","placeholders":{"path":{"type":"String"}}}, + "@errorTargetDirectoryNotEmpty": { + "description": "Detail for a non-empty target directory error.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTargetPathNotDirectory": "Hedef yol zaten mevcut ve bir dizin değil: {path}", - "@errorTargetPathNotDirectory": {"description":"Detail for a target path that is not a directory.","placeholders":{"path":{"type":"String"}}}, + "@errorTargetPathNotDirectory": { + "description": "Detail for a target path that is not a directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorGeneratedFileAlreadyExists": "Oluşturulan dosya zaten mevcut: {path}", - "@errorGeneratedFileAlreadyExists": {"description":"Detail for a generated file conflict.","placeholders":{"path":{"type":"String"}}}, + "@errorGeneratedFileAlreadyExists": { + "description": "Detail for a generated file conflict.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorParentDirectoryRequired": "Ana dizin gerekli.", - "@errorParentDirectoryRequired": {"description":"Detail for missing parent directory input."}, + "@errorParentDirectoryRequired": { + "description": "Detail for missing parent directory input." + }, "errorParentDirectoryMissing": "Ana dizin mevcut değil: {path}", - "@errorParentDirectoryMissing": {"description":"Detail for a missing parent directory.","placeholders":{"path":{"type":"String"}}}, + "@errorParentDirectoryMissing": { + "description": "Detail for a missing parent directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorDirectoryMissing": "Dizin mevcut değil: {path}", - "@errorDirectoryMissing": {"description":"Detail for a missing directory.","placeholders":{"path":{"type":"String"}}}, + "@errorDirectoryMissing": { + "description": "Detail for a missing directory.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorPathAlreadyExists": "Yol zaten mevcut: {path}", - "@errorPathAlreadyExists": {"description":"Detail for a file operation target that already exists.","placeholders":{"path":{"type":"String"}}}, + "@errorPathAlreadyExists": { + "description": "Detail for a file operation target that already exists.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorFileNameRequired": "Dosya adı gerekli.", - "@errorFileNameRequired": {"description":"Detail for a missing file name in a file operation."}, + "@errorFileNameRequired": { + "description": "Detail for a missing file name in a file operation." + }, "errorFileNameUnsafe": "Dosya adı tek bir güvenli yol bölümü olmalıdır.", - "@errorFileNameUnsafe": {"description":"Detail for an unsafe file name in a file operation."}, + "@errorFileNameUnsafe": { + "description": "Detail for an unsafe file name in a file operation." + }, "errorFileOperationInvalidTarget": "Bir klasör kendi içine taşınamaz.", - "@errorFileOperationInvalidTarget": {"description":"Detail for an invalid file operation target."}, + "@errorFileOperationInvalidTarget": { + "description": "Detail for an invalid file operation target." + }, "errorFileOperationOutsideRoot": "Dosya işlemi çalışma alanının içinde kalmalıdır.", - "@errorFileOperationOutsideRoot": {"description":"Detail for a file operation outside the workspace root."}, + "@errorFileOperationOutsideRoot": { + "description": "Detail for a file operation outside the workspace root." + }, "errorFileOperationRoot": "Çalışma alanı kökü dosya ağacından değiştirilemez.", - "@errorFileOperationRoot": {"description":"Detail for a file operation attempted on the workspace root."}, + "@errorFileOperationRoot": { + "description": "Detail for a file operation attempted on the workspace root." + }, "errorProjectNameRequired": "Proje adı gerekli.", - "@errorProjectNameRequired": {"description":"Detail for a missing project name."}, + "@errorProjectNameRequired": { + "description": "Detail for a missing project name." + }, "errorDirectoryNameRequired": "Klasör adı gerekli.", - "@errorDirectoryNameRequired": {"description":"Detail for a missing directory name."}, + "@errorDirectoryNameRequired": { + "description": "Detail for a missing directory name." + }, "errorDirectoryNameUnsafe": "Klasör adı tek bir güvenli yol bölümü olmalıdır.", - "@errorDirectoryNameUnsafe": {"description":"Detail for an unsafe directory name."}, + "@errorDirectoryNameUnsafe": { + "description": "Detail for an unsafe directory name." + }, "errorInstanceIdInvalid": "Örnek kimliği küçük harfle başlamalı ve yalnızca küçük harfler, sayılar, alt çizgiler ve kısa çizgiler içermelidir.", - "@errorInstanceIdInvalid": {"description":"Detail for an invalid Writerside instance ID."}, + "@errorInstanceIdInvalid": { + "description": "Detail for an invalid Writerside instance ID." + }, "errorTopicFileInvalid": "Konu dosyası adı, yol ayırıcıları olmayan bir Markdown dosya adı olmalıdır.", - "@errorTopicFileInvalid": {"description":"Detail for an invalid topic file name."}, + "@errorTopicFileInvalid": { + "description": "Detail for an invalid topic file name." + }, "errorTopicTitleRequired": "Konu başlığı zorunludur.", - "@errorTopicTitleRequired": {"description":"Detail for a missing topic title."}, + "@errorTopicTitleRequired": { + "description": "Detail for a missing topic title." + }, "errorWritersideModuleRootMissing": "Writerside modül kökü mevcut değil: {path}", - "@errorWritersideModuleRootMissing": {"description":"Detail for a missing Writerside module root.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideModuleRootMissing": { + "description": "Detail for a missing Writerside module root.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideModuleNotOpen": "Konu oluşturmak için Writerside modülünün açık olması gerekir.", - "@errorWritersideModuleNotOpen": {"description":"Detail shown when creating a topic without an open Writerside module."}, + "@errorWritersideModuleNotOpen": { + "description": "Detail shown when creating a topic without an open Writerside module." + }, "errorWritersideInstanceTreeMissing": "Writerside modülünün örnek ağacı yoktur.", - "@errorWritersideInstanceTreeMissing": {"description":"Detail shown when creating a topic without a Writerside instance tree."}, + "@errorWritersideInstanceTreeMissing": { + "description": "Detail shown when creating a topic without a Writerside instance tree." + }, "errorWritersideTreeFileMissing": "Writerside ağaç dosyası mevcut değil: {path}", - "@errorWritersideTreeFileMissing": {"description":"Detail for a missing Writerside tree file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideTreeFileMissing": { + "description": "Detail for a missing Writerside tree file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorTopicIdAlreadyExists": "Konu Kimliği \"{topicId}\" bu yardım modülünde zaten mevcut.", - "@errorTopicIdAlreadyExists": {"description":"Detail for a duplicate topic ID.","placeholders":{"topicId":{"type":"String"}}}, + "@errorTopicIdAlreadyExists": { + "description": "Detail for a duplicate topic ID.", + "placeholders": { + "topicId": { + "type": "String" + } + } + }, "errorTopicFileAlreadyExists": "Konu dosyası zaten mevcut: {path}", - "@errorTopicFileAlreadyExists": {"description":"Detail for an existing topic file.","placeholders":{"path":{"type":"String"}}}, + "@errorTopicFileAlreadyExists": { + "description": "Detail for an existing topic file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorReferenceTopicMissing": "Referans konusu seçilen ağaçta mevcut değil: {topic}", - "@errorReferenceTopicMissing": {"description":"Detail for a missing reference topic in a tree.","placeholders":{"topic":{"type":"String"}}}, + "@errorReferenceTopicMissing": { + "description": "Detail for a missing reference topic in a tree.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideTocNodeMissing": "Seçilen TOC girişi artık mevcut değil.", - "@errorWritersideTocNodeMissing": {"description":"Detail shown when a selected Writerside TOC entry no longer exists."}, + "@errorWritersideTocNodeMissing": { + "description": "Detail shown when a selected Writerside TOC entry no longer exists." + }, "errorWritersideTocInvalidMove": "Bir TOC girişi kendisine veya alt öğelerinden birine taşınamaz.", - "@errorWritersideTocInvalidMove": {"description":"Detail shown when a Writerside TOC move would create a cycle."}, + "@errorWritersideTocInvalidMove": { + "description": "Detail shown when a Writerside TOC move would create a cycle." + }, "errorWritersideStartTopicDelete": "{topic} başlangıç konusu silinemez. Önce başka bir başlangıç sayfası seçin.", - "@errorWritersideStartTopicDelete": {"description":"Detail shown when attempting to delete the start topic of a Writerside instance.","placeholders":{"topic":{"type":"String"}}}, + "@errorWritersideStartTopicDelete": { + "description": "Detail shown when attempting to delete the start topic of a Writerside instance.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Writerside konu dosyaları için Güvenli Silme'yi kullanın.", - "@errorWritersideSafeDeleteRequired": {"description":"Error shown when generic file deletion is attempted for a Writerside topic."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Error shown when generic file deletion is attempted for a Writerside topic." + }, "errorWritersideTopicUsageScanFailed": "Konu kullanımı taraması tamamlanamadı. Hiçbir dosya değiştirilmedi.", - "@errorWritersideTopicUsageScanFailed": {"description":"Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Bazı konu kullanımları hâlâ dikkat gerektiriyor. Devam etmeden önce bunları inceleyin.", - "@errorWritersideTopicUsagesRemain": {"description":"Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Seçilen yönlendirme hedefi artık geçerli değil. Tekrar seçin.", - "@errorWritersideRedirectInvalid": {"description":"Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Konu kaldırma işlemi tamamen geri alınamadı. Devam etmeden önce şu yolları inceleyin: {paths}", - "@errorWritersideRollbackFailed": {"description":"Error shown when safe-delete recovery leaves files requiring manual review.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorTopicsRootUnsafe": "Konu kökü güvenli bir göreli dizin olmalıdır.", - "@errorTopicsRootUnsafe": {"description":"Detail for an unsafe topics root directory."}, + "@errorTopicsRootUnsafe": { + "description": "Detail for an unsafe topics root directory." + }, "errorTopicFileNameUnsafe": "Konu dosyası adı tek bir güvenli yol bölümü olmalıdır.", - "@errorTopicFileNameUnsafe": {"description":"Detail for an unsafe topic file name."}, + "@errorTopicFileNameUnsafe": { + "description": "Detail for an unsafe topic file name." + }, "errorTopicFileExtensionMismatch": "Konu dosyası uzantısı seçilen formatla ({extension}) eşleşmelidir.", - "@errorTopicFileExtensionMismatch": {"description":"Detail for a topic file extension mismatch.","placeholders":{"extension":{"type":"String"}}}, + "@errorTopicFileExtensionMismatch": { + "description": "Detail for a topic file extension mismatch.", + "placeholders": { + "extension": { + "type": "String" + } + } + }, "errorTopicFileNameInvalid": "Konu dosyası adı yalnızca harf, rakam, alt çizgi ve kısa çizgi içermelidir.", - "@errorTopicFileNameInvalid": {"description":"Detail for a topic file name with invalid characters."}, + "@errorTopicFileNameInvalid": { + "description": "Detail for a topic file name with invalid characters." + }, "errorUnknown": "Bilinmeyen hata: {code}", - "@errorUnknown": {"description":"Fallback detail for an unknown coded application error.","placeholders":{"code":{"type":"String"}}}, + "@errorUnknown": { + "description": "Fallback detail for an unknown coded application error.", + "placeholders": { + "code": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileStatFailed": "Dosya meta verileri okunamadı: {error}", - "@diagnosticWorkspaceFileStatFailed": {"description":"Diagnostic shown when file metadata cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileStatFailed": { + "description": "Diagnostic shown when file metadata cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceScanSkipped": "Büyük çalışma alanı algılandı. Uygulamanın duyarlı kalması için bazı dosyalar atlandı.", - "@diagnosticWorkspaceScanSkipped": {"description":"Diagnostic shown when workspace scanning skips files."}, + "@diagnosticWorkspaceScanSkipped": { + "description": "Diagnostic shown when workspace scanning skips files." + }, "diagnosticWorkspaceScanInspectFailed": "Çalışma alanı girişi incelenemedi: {error}", - "@diagnosticWorkspaceScanInspectFailed": {"description":"Diagnostic shown when a workspace entry cannot be inspected.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceScanInspectFailed": { + "description": "Diagnostic shown when a workspace entry cannot be inspected.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWorkspaceFileTooLarge": "Dosya beta otomatik ayrıştırma sınırından daha büyük.", - "@diagnosticWorkspaceFileTooLarge": {"description":"Diagnostic shown when a file is too large to parse automatically."}, + "@diagnosticWorkspaceFileTooLarge": { + "description": "Diagnostic shown when a file is too large to parse automatically." + }, "diagnosticWorkspaceFileReadFailed": "Markdown dosyası okunamadı: {error}", - "@diagnosticWorkspaceFileReadFailed": {"description":"Diagnostic shown when a Markdown file cannot be read.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWorkspaceFileReadFailed": { + "description": "Diagnostic shown when a Markdown file cannot be read.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticMarkdownAttributeMalformed": "Biçimi bozuk Writerside başlık öznitelik bloğu.", - "@diagnosticMarkdownAttributeMalformed": {"description":"Markdown parser diagnostic for malformed Writerside heading attributes."}, + "@diagnosticMarkdownAttributeMalformed": { + "description": "Markdown parser diagnostic for malformed Writerside heading attributes." + }, "diagnosticMarkdownHeadingDuplicateId": "Yinelenen başlık kimliği \"{id}\".", - "@diagnosticMarkdownHeadingDuplicateId": {"description":"Markdown parser diagnostic for duplicate heading IDs.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticMarkdownHeadingDuplicateId": { + "description": "Markdown parser diagnostic for duplicate heading IDs.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTopicH1ConvertedToChapter": "Ek üst düzey H1 başlıkları bölümler olarak ele alınır.", - "@diagnosticWritersideTopicH1ConvertedToChapter": {"description":"Markdown parser diagnostic for additional H1 headings in Writerside mode."}, + "@diagnosticWritersideTopicH1ConvertedToChapter": { + "description": "Markdown parser diagnostic for additional H1 headings in Writerside mode." + }, "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown konusunun H1 veya frontmatter başlığı yok.", - "@diagnosticWritersideMarkdownTopicMissingTitle": {"description":"Diagnostic for a Writerside Markdown topic without a title."}, + "@diagnosticWritersideMarkdownTopicMissingTitle": { + "description": "Diagnostic for a Writerside Markdown topic without a title." + }, "diagnosticWritersideXmlTopicMissingTitle": "XML konusunun başlığı eksik.", - "@diagnosticWritersideXmlTopicMissingTitle": {"description":"Diagnostic for a Writerside XML topic without a title."}, + "@diagnosticWritersideXmlTopicMissingTitle": { + "description": "Diagnostic for a Writerside XML topic without a title." + }, "diagnosticWritersideTopicFileMissingTitle": "\"{fileName}\" konusunun başlığı eksik.", - "@diagnosticWritersideTopicFileMissingTitle": {"description":"Diagnostic for a Writerside topic file without a title.","placeholders":{"fileName":{"type":"String"}}}, + "@diagnosticWritersideTopicFileMissingTitle": { + "description": "Diagnostic for a Writerside topic file without a title.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "diagnosticMarkdownFrontMatterMalformed": "Frontmatter kapatılmamış.", - "@diagnosticMarkdownFrontMatterMalformed": {"description":"Markdown parser diagnostic for unclosed front matter."}, + "@diagnosticMarkdownFrontMatterMalformed": { + "description": "Markdown parser diagnostic for unclosed front matter." + }, "diagnosticMarkdownRawHtmlUnsafe": "Güvenli olmayan HTML öğesi.", - "@diagnosticMarkdownRawHtmlUnsafe": {"description":"Markdown parser diagnostic for unsafe raw HTML."}, + "@diagnosticMarkdownRawHtmlUnsafe": { + "description": "Markdown parser diagnostic for unsafe raw HTML." + }, "diagnosticMarkdownLinkUnresolvedTarget": "Bağlantı hedefi mevcut değil: {targetPath}", - "@diagnosticMarkdownLinkUnresolvedTarget": {"description":"Markdown parser diagnostic for a missing link target.","placeholders":{"targetPath":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedTarget": { + "description": "Markdown parser diagnostic for a missing link target.", + "placeholders": { + "targetPath": { + "type": "String" + } + } + }, "diagnosticMarkdownLinkUnresolvedAnchor": "\"{anchor}\" çapası mevcut değil.", - "@diagnosticMarkdownLinkUnresolvedAnchor": {"description":"Markdown parser diagnostic for a missing local anchor.","placeholders":{"anchor":{"type":"String"}}}, + "@diagnosticMarkdownLinkUnresolvedAnchor": { + "description": "Markdown parser diagnostic for a missing local anchor.", + "placeholders": { + "anchor": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingAlt": "\"{destination}\" görselinde alternatif metin eksik.", - "@diagnosticMarkdownImageMissingAlt": {"description":"Markdown parser diagnostic for a missing image alt text.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingAlt": { + "description": "Markdown parser diagnostic for a missing image alt text.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticMarkdownImageMissingFile": "Resim mevcut değil: {destination}", - "@diagnosticMarkdownImageMissingFile": {"description":"Markdown parser diagnostic for a missing image file.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticMarkdownImageMissingFile": { + "description": "Markdown parser diagnostic for a missing image file.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticInvalidXml": "Geçersiz XML: {message}", - "@diagnosticInvalidXml": {"description":"XML parser diagnostic for invalid XML.","placeholders":{"message":{"type":"String"}}}, + "@diagnosticInvalidXml": { + "description": "XML parser diagnostic for invalid XML.", + "placeholders": { + "message": { + "type": "String" + } + } + }, "diagnosticWritersideConfigInvalidRoot": "writerside.cfg kökü olmalıdır.", - "@diagnosticWritersideConfigInvalidRoot": {"description":"Writerside parser diagnostic for an invalid writerside.cfg root element."}, + "@diagnosticWritersideConfigInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid writerside.cfg root element." + }, "diagnosticWritersideConfigMissingSnippetsSrc": "snippet bildiriminde src eksik.", - "@diagnosticWritersideConfigMissingSnippetsSrc": {"description":"Writerside parser diagnostic for a snippets declaration without src."}, + "@diagnosticWritersideConfigMissingSnippetsSrc": { + "description": "Writerside parser diagnostic for a snippets declaration without src." + }, "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups bildiriminde src eksik.", - "@diagnosticWritersideConfigMissingInstanceGroupsSrc": {"description":"Writerside parser diagnostic for an instance-groups declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceGroupsSrc": { + "description": "Writerside parser diagnostic for an instance-groups declaration without src." + }, "diagnosticWritersideConfigInvalidKeymapsMode": "Desteklenmeyen tuş haritaları modu: {mode}", - "@diagnosticWritersideConfigInvalidKeymapsMode": {"description":"Writerside parser diagnostic for an unsupported keymaps mode.","placeholders":{"mode":{"type":"String"}}}, + "@diagnosticWritersideConfigInvalidKeymapsMode": { + "description": "Writerside parser diagnostic for an unsupported keymaps mode.", + "placeholders": { + "mode": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceSrc": "Instance bildiriminde src eksik.", - "@diagnosticWritersideConfigMissingInstanceSrc": {"description":"Writerside parser diagnostic for an instance declaration without src."}, + "@diagnosticWritersideConfigMissingInstanceSrc": { + "description": "Writerside parser diagnostic for an instance declaration without src." + }, "diagnosticWritersideConfigMissingInstance": "writerside.cfg bir instance kaydetmiyor.", - "@diagnosticWritersideConfigMissingInstance": {"description":"Writerside parser diagnostic for a config with no instance."}, + "@diagnosticWritersideConfigMissingInstance": { + "description": "Writerside parser diagnostic for a config with no instance." + }, "diagnosticWritersideTreeInvalidRoot": ".tree kökü olmalıdır.", - "@diagnosticWritersideTreeInvalidRoot": {"description":"Writerside parser diagnostic for an invalid tree root element."}, + "@diagnosticWritersideTreeInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid tree root element." + }, "diagnosticWritersideTreeMissingId": "Instance profilinde kimlik eksik.", - "@diagnosticWritersideTreeMissingId": {"description":"Writerside parser diagnostic for an instance profile without id."}, + "@diagnosticWritersideTreeMissingId": { + "description": "Writerside parser diagnostic for an instance profile without id." + }, "diagnosticWritersideTreeIdMismatch": "Ağaç dosyası kökü \"{id}\" instance kimliğiyle eşleşmiyor.", - "@diagnosticWritersideTreeIdMismatch": {"description":"Writerside parser diagnostic for a tree filename and ID mismatch.","placeholders":{"id":{"type":"String"}}}, - "diagnosticWritersideTreeMissingStartPage": "Kitaplık olmayan instance'ın başlangıç sayfası eksik.", - "@diagnosticWritersideTreeMissingStartPage": {"description":"Writerside parser diagnostic for a tree missing start-page."}, + "@diagnosticWritersideTreeIdMismatch": { + "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideTreeMissingStartPage": "Kütüphane olmayan örnek start-page içermiyor.", + "@diagnosticWritersideTreeMissingStartPage": { + "description": "Writerside parser diagnostic for a tree missing start-page." + }, "diagnosticWritersideStartPageMissing": "\"{startPage}\" başlangıç sayfası mevcut değil.", - "@diagnosticWritersideStartPageMissing": {"description":"Writerside diagnostic for a missing start page.","placeholders":{"startPage":{"type":"String"}}}, + "@diagnosticWritersideStartPageMissing": { + "description": "Writerside diagnostic for a missing start page.", + "placeholders": { + "startPage": { + "type": "String" + } + } + }, "diagnosticWritersideTreeDuplicateTopic": "Bu instance'ın TOC'sinde \"{topic}\" konusu birden fazla kez görünüyor.", - "@diagnosticWritersideTreeDuplicateTopic": {"description":"Writerside parser diagnostic for a duplicate topic in a TOC.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateTopic": { + "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideVariableMalformedDeclaration": "Değişken bildiriminin adı ve değeri olmalıdır.", - "@diagnosticWritersideVariableMalformedDeclaration": {"description":"Writerside parser diagnostic for a malformed variable declaration."}, + "@diagnosticWritersideVariableMalformedDeclaration": { + "description": "Writerside parser diagnostic for a malformed variable declaration." + }, "diagnosticWritersideVariableDuplicateName": "\"{name}\" değişkeni birden fazla kez bildirildi.", - "@diagnosticWritersideVariableDuplicateName": {"description":"Writerside parser diagnostic for a duplicate variable name.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableDuplicateName": { + "description": "Writerside parser diagnostic for a duplicate variable name.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryMissingId": "Kategorinin kimliği eksik.", - "@diagnosticWritersideCategoryMissingId": {"description":"Writerside parser diagnostic for a category without id."}, + "@diagnosticWritersideCategoryMissingId": { + "description": "Writerside parser diagnostic for a category without id." + }, "diagnosticWritersideCategoryDuplicateId": "\"{id}\" kategorisi birden fazla kez bildirildi.", - "@diagnosticWritersideCategoryDuplicateId": {"description":"Writerside parser diagnostic for a duplicate category ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateId": { + "description": "Writerside parser diagnostic for a duplicate category ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideCategoryDuplicateOrder": "Kategori sırası \"{order}\" birden fazla kez bildirildi.", - "@diagnosticWritersideCategoryDuplicateOrder": {"description":"Writerside parser diagnostic for a duplicate category order.","placeholders":{"order":{"type":"String"}}}, + "@diagnosticWritersideCategoryDuplicateOrder": { + "description": "Writerside parser diagnostic for a duplicate category order.", + "placeholders": { + "order": { + "type": "String" + } + } + }, "diagnosticWritersideTopicInvalidRoot": ".topic kökü olmalıdır.", - "@diagnosticWritersideTopicInvalidRoot": {"description":"Writerside parser diagnostic for an invalid XML topic root."}, + "@diagnosticWritersideTopicInvalidRoot": { + "description": "Writerside parser diagnostic for an invalid XML topic root." + }, "diagnosticWritersideTopicMissingRootId": "XML konusunun kök kimliği eksik.", - "@diagnosticWritersideTopicMissingRootId": {"description":"Writerside parser diagnostic for an XML topic missing root id."}, + "@diagnosticWritersideTopicMissingRootId": { + "description": "Writerside parser diagnostic for an XML topic missing root id." + }, "diagnosticWritersideTopicRootIdMismatch": "XML konu kök kimliği \"{id}\", \"{expectedId}\" dosya adıyla eşleşmelidir.", - "@diagnosticWritersideTopicRootIdMismatch": {"description":"Writerside parser diagnostic for an XML topic root ID mismatch.","placeholders":{"id":{"type":"String"},"expectedId":{"type":"String"}}}, + "@diagnosticWritersideTopicRootIdMismatch": { + "description": "Writerside parser diagnostic for an XML topic root ID mismatch.", + "placeholders": { + "id": { + "type": "String" + }, + "expectedId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateElementId": "Öğe kimliği \"{elementId}\" birden fazla görünüyor.", - "@diagnosticWritersideTopicDuplicateElementId": {"description":"Writerside parser diagnostic for a duplicate XML element ID.","placeholders":{"elementId":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateElementId": { + "description": "Writerside parser diagnostic for a duplicate XML element ID.", + "placeholders": { + "elementId": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAnchorMissingHref": "'da href eksik.", - "@diagnosticWritersideTopicAnchorMissingHref": {"description":"Writerside parser diagnostic for an anchor without href."}, + "@diagnosticWritersideTopicAnchorMissingHref": { + "description": "Writerside parser diagnostic for an anchor without href." + }, "diagnosticWritersideConfigMissing": "Writerside modu için writerside.cfg gereklidir.", - "@diagnosticWritersideConfigMissing": {"description":"Writerside module diagnostic for a missing writerside.cfg."}, + "@diagnosticWritersideConfigMissing": { + "description": "Writerside module diagnostic for a missing writerside.cfg." + }, "diagnosticWritersideConfigMissingBuildConfigDirectory": "Yapılandırılmış yapı yapılandırma dizini eksik: {relativePath}", - "@diagnosticWritersideConfigMissingBuildConfigDirectory": {"description":"Writerside module diagnostic for a missing build config directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingBuildConfigDirectory": { + "description": "Writerside module diagnostic for a missing build config directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "Yapılandırılmış API spesifikasyonları dizini eksik: {relativePath}", - "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": {"description":"Writerside module diagnostic for a missing API specifications directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingApiSpecificationsDirectory": { + "description": "Writerside module diagnostic for a missing API specifications directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingSnippetsDirectory": "Yapılandırılmış snippet dizini eksik: {relativePath}", - "@diagnosticWritersideConfigMissingSnippetsDirectory": {"description":"Writerside module diagnostic for a missing snippets directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingSnippetsDirectory": { + "description": "Writerside module diagnostic for a missing snippets directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingVarsFile": "Yapılandırılmış değişkenler dosyası eksik: {relativePath}", - "@diagnosticWritersideConfigMissingVarsFile": {"description":"Writerside module diagnostic for a missing variables file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingVarsFile": { + "description": "Writerside module diagnostic for a missing variables file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingCategoriesFile": "Yapılandırılmış kategoriler dosyası eksik: {relativePath}", - "@diagnosticWritersideConfigMissingCategoriesFile": {"description":"Writerside module diagnostic for a missing categories file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingCategoriesFile": { + "description": "Writerside module diagnostic for a missing categories file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceGroupsFile": "Yapılandırılmış instance grupları dosyası eksik: {relativePath}", - "@diagnosticWritersideConfigMissingInstanceGroupsFile": {"description":"Writerside module diagnostic for a missing instance groups file.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceGroupsFile": { + "description": "Writerside module diagnostic for a missing instance groups file.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideConfigMissingInstanceTree": "Kayıtlı instance ağacı \"{source}\" mevcut değil.", - "@diagnosticWritersideConfigMissingInstanceTree": {"description":"Writerside module diagnostic for a missing registered instance tree.","placeholders":{"source":{"type":"String"}}}, + "@diagnosticWritersideConfigMissingInstanceTree": { + "description": "Writerside module diagnostic for a missing registered instance tree.", + "placeholders": { + "source": { + "type": "String" + } + } + }, "diagnosticWritersideTopicReadFailed": "Konu dosyası okunamadı: {error}", - "@diagnosticWritersideTopicReadFailed": {"description":"Writerside module diagnostic for a topic file read failure.","placeholders":{"error":{"type":"String"}}}, + "@diagnosticWritersideTopicReadFailed": { + "description": "Writerside module diagnostic for a topic file read failure.", + "placeholders": { + "error": { + "type": "String" + } + } + }, "diagnosticWritersideDefaultTopicsDirectoryMissing": "Varsayılan konu dizini eksik: {relativePath}", - "@diagnosticWritersideDefaultTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing default topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideDefaultTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing default topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicsDirectoryMissing": "Yapılandırılmış konular dizini eksik: {relativePath}", - "@diagnosticWritersideTopicsDirectoryMissing": {"description":"Writerside module diagnostic for a missing topics directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideTopicsDirectoryMissing": { + "description": "Writerside module diagnostic for a missing topics directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideImagesDirectoryMissing": "Yapılandırılmış görüntüler dizini eksik: {relativePath}", - "@diagnosticWritersideImagesDirectoryMissing": {"description":"Writerside module diagnostic for a missing images directory.","placeholders":{"relativePath":{"type":"String"}}}, + "@diagnosticWritersideImagesDirectoryMissing": { + "description": "Writerside module diagnostic for a missing images directory.", + "placeholders": { + "relativePath": { + "type": "String" + } + } + }, "diagnosticWritersideTopicDuplicateId": "Öğe kimliği \"{id}\" birden fazla görünüyor.", - "@diagnosticWritersideTopicDuplicateId": {"description":"Writerside module diagnostic for a duplicate topic element ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTopicDuplicateId": { + "description": "Writerside module diagnostic for a duplicate topic element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeMissingTopic": "TOC, eksik \"{topic}\" konusuna atıfta bulunuyor.", - "@diagnosticWritersideTreeMissingTopic": {"description":"Writerside module diagnostic for a TOC reference to a missing topic.","placeholders":{"topic":{"type":"String"}}}, + "@diagnosticWritersideTreeMissingTopic": { + "description": "Writerside module diagnostic for a TOC reference to a missing topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "diagnosticWritersideTreeInvalidHref": "Harici href \"{href}\" geçersiz.", - "@diagnosticWritersideTreeInvalidHref": {"description":"Writerside module diagnostic for an invalid external href.","placeholders":{"href":{"type":"String"}}}, + "@diagnosticWritersideTreeInvalidHref": { + "description": "Writerside module diagnostic for an invalid external href.", + "placeholders": { + "href": { + "type": "String" + } + } + }, "diagnosticWritersideVariableUnresolved": "\"%{name}%\" değişkeni bildirilmedi.", - "@diagnosticWritersideVariableUnresolved": {"description":"Writerside module diagnostic for an undeclared variable.","placeholders":{"name":{"type":"String"}}}, + "@diagnosticWritersideVariableUnresolved": { + "description": "Writerside module diagnostic for an undeclared variable.", + "placeholders": { + "name": { + "type": "String" + } + } + }, "diagnosticWritersideTopicLinkUnresolved": "\"{destination}\" konu bağlantısı çözülmüyor.", - "@diagnosticWritersideTopicLinkUnresolved": {"description":"Writerside module diagnostic for an unresolved topic link.","placeholders":{"destination":{"type":"String"}}}, + "@diagnosticWritersideTopicLinkUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic link.", + "placeholders": { + "destination": { + "type": "String" + } + } + }, "diagnosticWritersideAnchorUnresolved": "\"{anchor}\" çapası \"{targetName}\"te mevcut değil.", - "@diagnosticWritersideAnchorUnresolved": {"description":"Writerside module diagnostic for an unresolved topic anchor.","placeholders":{"anchor":{"type":"String"},"targetName":{"type":"String"}}}, - "diagnosticWritersideIncludeMissingFrom": " öğesi eksik.", - "@diagnosticWritersideIncludeMissingFrom": {"description":"Writerside module diagnostic for an include without a from attribute."}, - "diagnosticWritersideIncludeSourceMissing": "Kaynak ekle \"{from}\" mevcut değil.", - "@diagnosticWritersideIncludeSourceMissing": {"description":"Writerside module diagnostic for a missing include source.","placeholders":{"from":{"type":"String"}}}, + "@diagnosticWritersideAnchorUnresolved": { + "description": "Writerside module diagnostic for an unresolved topic anchor.", + "placeholders": { + "anchor": { + "type": "String" + }, + "targetName": { + "type": "String" + } + } + }, + "diagnosticWritersideIncludeMissingFrom": " öğesinde from niteliği eksik.", + "@diagnosticWritersideIncludeMissingFrom": { + "description": "Writerside module diagnostic for an include without a from attribute." + }, + "diagnosticWritersideIncludeSourceMissing": "Include kaynağı \"{from}\" mevcut değil.", + "@diagnosticWritersideIncludeSourceMissing": { + "description": "Writerside module diagnostic for a missing include source.", + "placeholders": { + "from": { + "type": "String" + } + } + }, "diagnosticWritersideIncludeElementMissing": "\"{elementId}\" dahil etme öğesi \"{from}\"te mevcut değil.", - "@diagnosticWritersideIncludeElementMissing": {"description":"Writerside module diagnostic for a missing include element.","placeholders":{"elementId":{"type":"String"},"from":{"type":"String"}}}, - "diagnosticWritersideCategoryUnresolved": "Ayrıca bkz. \"{ref}\" kategorisi bildirilmedi.", - "@diagnosticWritersideCategoryUnresolved": {"description":"Writerside module diagnostic for an unresolved seealso category.","placeholders":{"ref":{"type":"String"}}}, + "@diagnosticWritersideIncludeElementMissing": { + "description": "Writerside module diagnostic for a missing include element.", + "placeholders": { + "elementId": { + "type": "String" + }, + "from": { + "type": "String" + } + } + }, + "diagnosticWritersideCategoryUnresolved": "seealso kategorisi \"{ref}\" bildirilmemiş.", + "@diagnosticWritersideCategoryUnresolved": { + "description": "Writerside module diagnostic for an unresolved seealso category.", + "placeholders": { + "ref": { + "type": "String" + } + } + }, "diagnosticWritersideTopicAmbiguousReference": "Konu referansı \"{reference}\" belirsiz.", - "@diagnosticWritersideTopicAmbiguousReference": {"description":"Writerside module diagnostic for an ambiguous topic reference.","placeholders":{"reference":{"type":"String"}}}, + "@diagnosticWritersideTopicAmbiguousReference": { + "description": "Writerside module diagnostic for an ambiguous topic reference.", + "placeholders": { + "reference": { + "type": "String" + } + } + }, "diagnosticUnknown": "Bilinmeyen teşhis: {code}", - "@diagnosticUnknown": {"description":"Fallback text for an unknown diagnostic code.","placeholders":{"code":{"type":"String"}}}, + "@diagnosticUnknown": { + "description": "Fallback text for an unknown diagnostic code.", + "placeholders": { + "code": { + "type": "String" + } + } + }, "close": "Kapat", - "@close": {"description":"Close action label."}, + "@close": { + "description": "Close action label." + }, "git": "Git", - "@git": {"description":"Git sidebar tab label."}, + "@git": { + "description": "Git sidebar tab label." + }, "gitDiff": "Git farkı", - "@gitDiff": {"description":"Title for the Git diff viewer."}, + "@gitDiff": { + "description": "Title for the Git diff viewer." + }, "gitShowDiff": "Farkı göster", - "@gitShowDiff": {"description":"Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "eski {oldRange} → yeni {newRange}", - "@gitDiffHunkRange": {"description":"Readable old-to-new line range shown for a Git diff hunk.","placeholders":{"oldRange":{"type":"String"},"newRange":{"type":"String"}}}, + "@gitDiffHunkRange": { + "description": "Readable old-to-new line range shown for a Git diff hunk.", + "placeholders": { + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } + } + }, "gitDiffNoLines": "satır yok", - "@gitDiffNoLines": {"description":"Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git kullanılamıyor", - "@gitUnavailableTitle": {"description":"Git empty state title when Git cannot be used."}, + "@gitUnavailableTitle": { + "description": "Git empty state title when Git cannot be used." + }, "gitUnavailableMessage": "{reason, select, other{Git'i yükleyin veya BusyMark'i kullanılabilir bir Git çalıştırılabilir dosyası kullanacak şekilde yapılandırın. {reason}}}", - "@gitUnavailableMessage": {"description":"Git empty state message when Git cannot be used.","placeholders":{"reason":{"type":"String"}}}, + "@gitUnavailableMessage": { + "description": "Git empty state message when Git cannot be used.", + "placeholders": { + "reason": { + "type": "String" + } + } + }, "gitTrustRequiredTitle": "Git için bu çalışma alanına güveniyor musunuz?", - "@gitTrustRequiredTitle": {"description":"Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Git depoları programları kancalar, filtreler ve diğer yapılandırmalar aracılığıyla çalıştırabilir. BusyMark depo verilerini okumadan veya Git eylemlerini etkinleştirmeden önce bu çalışma alanına güvenin.", - "@gitTrustRequiredMessage": {"description":"Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Çalışma alanına güven", - "@gitTrustWorkspace": {"description":"Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Git deposu değil", - "@gitNotRepositoryTitle": {"description":"Git empty state title for non-repository workspaces."}, + "@gitNotRepositoryTitle": { + "description": "Git empty state title for non-repository workspaces." + }, "gitNotRepositoryMessage": "Bu çalışma alanı Git deposunun içinde değil.", - "@gitNotRepositoryMessage": {"description":"Git empty state message for non-repository workspaces."}, + "@gitNotRepositoryMessage": { + "description": "Git empty state message for non-repository workspaces." + }, "gitInitializeRepository": "Git deposunu başlat", - "@gitInitializeRepository": {"description":"Action label for git init."}, + "@gitInitializeRepository": { + "description": "Action label for git init." + }, "gitDetachedHead": "Ayrık HEAD", - "@gitDetachedHead": {"description":"Detached HEAD label."}, + "@gitDetachedHead": { + "description": "Detached HEAD label." + }, "gitDetachedHeadAt": "{commit}'te ayrılmış", - "@gitDetachedHeadAt": {"description":"Detached HEAD label with short commit.","placeholders":{"commit":{"type":"String"}}}, + "@gitDetachedHeadAt": { + "description": "Detached HEAD label with short commit.", + "placeholders": { + "commit": { + "type": "String" + } + } + }, "gitNoUpstream": "Upstream yok", - "@gitNoUpstream": {"description":"Repository label when no upstream branch is configured."}, + "@gitNoUpstream": { + "description": "Repository label when no upstream branch is configured." + }, "gitAheadCount": "{count, plural, =1{1 gönderilmemiş commit} other{{count} gönderilmemiş commit}}", - "@gitAheadCount": {"description":"Count of local commits not pushed to the upstream branch.","placeholders":{"count":{"type":"int"}}}, + "@gitAheadCount": { + "description": "Count of local commits not pushed to the upstream branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitBehindCount": "{count, plural, =1{1 çekilecek commit} other{{count} çekilecek commit}}", - "@gitBehindCount": {"description":"Count of upstream commits not pulled into the local branch.","placeholders":{"count":{"type":"int"}}}, - "gitClean": "Temiz", - "@gitClean": {"description":"Git clean state label."}, + "@gitBehindCount": { + "description": "Count of upstream commits not pulled into the local branch.", + "placeholders": { + "count": { + "type": "int" + } + } + }, + "gitClean": "Değişiklik yok", + "@gitClean": { + "description": "Git clean state label." + }, "gitConflicts": "Çatışmalar", - "@gitConflicts": {"description":"Git conflicts group label."}, + "@gitConflicts": { + "description": "Git conflicts group label." + }, "gitChanges": "Değişiklikler", - "@gitChanges": {"description":"Git changes view label."}, + "@gitChanges": { + "description": "Git changes view label." + }, "gitStaged": "Stage edilmiş", - "@gitStaged": {"description":"Git staged changes group label."}, + "@gitStaged": { + "description": "Git staged changes group label." + }, "gitUnstaged": "Stage edilmemiş", - "@gitUnstaged": {"description":"Git unstaged changes group label."}, + "@gitUnstaged": { + "description": "Git unstaged changes group label." + }, "gitHistory": "Geçmiş", - "@gitHistory": {"description":"Git history view label."}, + "@gitHistory": { + "description": "Git history view label." + }, "gitBranches": "Dallar", - "@gitBranches": {"description":"Git branch menu label."}, + "@gitBranches": { + "description": "Git branch menu label." + }, "gitActions": "Git işlemleri", - "@gitActions": {"description":"Tooltip for the Git action menu button."}, + "@gitActions": { + "description": "Tooltip for the Git action menu button." + }, "gitPull": "Pull", - "@gitPull": {"description":"Git pull action label."}, + "@gitPull": { + "description": "Git pull action label." + }, "gitFetch": "Getir", - "@gitFetch": {"description":"Git fetch action label."}, + "@gitFetch": { + "description": "Git fetch action label." + }, "gitPush": "Push", - "@gitPush": {"description":"Git push action label."}, + "@gitPush": { + "description": "Git push action label." + }, "gitCommit": "Commit et", - "@gitCommit": {"description":"Git commit action label."}, + "@gitCommit": { + "description": "Git commit action label." + }, "gitSelectForCommit": "Commit için seç", - "@gitSelectForCommit": {"description":"Tooltip for staging a Git file."}, + "@gitSelectForCommit": { + "description": "Tooltip for staging a Git file." + }, "gitRemoveFromCommit": "Commit'ten çıkar", - "@gitRemoveFromCommit": {"description":"Tooltip for unstaging a Git file."}, + "@gitRemoveFromCommit": { + "description": "Tooltip for unstaging a Git file." + }, "gitDiscard": "Değişikliklerden vazgeç", - "@gitDiscard": {"description":"Action that rolls a tracked file back to HEAD."}, + "@gitDiscard": { + "description": "Action that rolls a tracked file back to HEAD." + }, "gitOpenFile": "Dosyayı aç", - "@gitOpenFile": {"description":"Action label for opening a file from a Git row or diff."}, + "@gitOpenFile": { + "description": "Action label for opening a file from a Git row or diff." + }, "gitMarkResolved": "Çözüldü olarak işaretle", - "@gitMarkResolved": {"description":"Tooltip for marking a conflicted Git file as resolved."}, + "@gitMarkResolved": { + "description": "Tooltip for marking a conflicted Git file as resolved." + }, "gitUntracked": "İzlenmiyor", - "@gitUntracked": {"description":"Git untracked files group label."}, + "@gitUntracked": { + "description": "Git untracked files group label." + }, "gitCommitMessage": "Commit mesajı", - "@gitCommitMessage": {"description":"Commit message field label."}, - "gitCommitSelectedFiles": "Seçili dosyaları commit et", - "@gitCommitSelectedFiles": {"description":"Commit panel selected files section label."}, + "@gitCommitMessage": { + "description": "Commit message field label." + }, + "gitCommitSelectedFiles": "Seçili dosyalar", + "@gitCommitSelectedFiles": { + "description": "Commit panel selected files section label." + }, "gitCommitNoSelectedFiles": "Commit etmeden önce en az bir dosyayı stage edin.", - "@gitCommitNoSelectedFiles": {"description":"Commit validation error when the repository index is empty."}, + "@gitCommitNoSelectedFiles": { + "description": "Commit validation error when the repository index is empty." + }, "gitStagedFileCount": "{count, plural, =1{1 stage edilmiş dosya} other{{count} stage edilmiş dosya}}", - "@gitStagedFileCount": {"description":"Number of repository files currently staged for commit.","placeholders":{"count":{"type":"int"}}}, + "@gitStagedFileCount": { + "description": "Number of repository files currently staged for commit.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitOutsideWorkspace": "Çalışma alanı dışında", - "@gitOutsideWorkspace": {"description":"Marker for a staged repository file outside the opened workspace."}, + "@gitOutsideWorkspace": { + "description": "Marker for a staged repository file outside the opened workspace." + }, "gitCommitMessageRequired": "Bir commit mesajı girin.", - "@gitCommitMessageRequired": {"description":"Commit validation error when the message is empty."}, + "@gitCommitMessageRequired": { + "description": "Commit validation error when the message is empty." + }, "gitCreateBranch": "Dal oluştur", - "@gitCreateBranch": {"description":"Git create branch action label."}, + "@gitCreateBranch": { + "description": "Git create branch action label." + }, "gitNewBranch": "Yeni dal", - "@gitNewBranch": {"description":"Git branch dropdown action for creating a new branch."}, + "@gitNewBranch": { + "description": "Git branch dropdown action for creating a new branch." + }, "gitBranchName": "Dal adı", - "@gitBranchName": {"description":"Branch name field label."}, + "@gitBranchName": { + "description": "Branch name field label." + }, "gitSwitchBranch": "Dal değiştir", - "@gitSwitchBranch": {"description":"Git switch branch action label."}, + "@gitSwitchBranch": { + "description": "Git switch branch action label." + }, "gitNoChanges": "Değişiklik yok", - "@gitNoChanges": {"description":"Git empty state when there are no changes."}, + "@gitNoChanges": { + "description": "Git empty state when there are no changes." + }, "gitNoHistory": "Geçmiş yok", - "@gitNoHistory": {"description":"Git empty state when history is empty."}, + "@gitNoHistory": { + "description": "Git empty state when history is empty." + }, "gitNoBranches": "Dal yok", - "@gitNoBranches": {"description":"Git empty state when branch list is empty."}, + "@gitNoBranches": { + "description": "Git empty state when branch list is empty." + }, "gitNoDiff": "Gösterilecek fark yok", - "@gitNoDiff": {"description":"Git diff empty state."}, + "@gitNoDiff": { + "description": "Git diff empty state." + }, "gitBinaryFile": "İkili dosya. BusyMark ikili yamaları göstermez.", - "@gitBinaryFile": {"description":"Git diff binary file message."}, + "@gitBinaryFile": { + "description": "Git diff binary file message." + }, "gitBinaryFileInfo": "İkili dosya ({size} bayt). BusyMark ikili yamaları göstermez.", - "@gitBinaryFileInfo": {"description":"Git diff binary file message with file size.","placeholders":{"size":{"type":"int"}}}, + "@gitBinaryFileInfo": { + "description": "Git diff binary file message with file size.", + "placeholders": { + "size": { + "type": "int" + } + } + }, "gitUnsavedChangesBanner": "Kaydedilmemiş düzenleyici değişiklikleri kaydedilene kadar dahil edilmez.", - "@gitUnsavedChangesBanner": {"description":"Git diff banner for unsaved editor changes."}, + "@gitUnsavedChangesBanner": { + "description": "Git diff banner for unsaved editor changes." + }, "gitConfirmDiscardTitle": "Git değişikliklerinden vazgeçilsin mi?", - "@gitConfirmDiscardTitle": {"description":"Confirmation title for discarding Git changes."}, + "@gitConfirmDiscardTitle": { + "description": "Confirmation title for discarding Git changes." + }, "gitConfirmDiscardTracked": "{count, plural, =1{Seçili izlenen dosyadaki tüm stage edilmiş ve stage edilmemiş değişiklikler HEAD sürümüne geri yüklenecek.} other{Seçili izlenen dosyalardaki tüm stage edilmiş ve stage edilmemiş değişiklikler HEAD sürümüne geri yüklenecek.}}", - "@gitConfirmDiscardTracked": {"description":"Confirmation body for discarding tracked changes.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardTracked": { + "description": "Confirmation body for discarding tracked changes.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardUntracked": "{count, plural, =1{Seçili izlenmeyen dosya silinecek.} other{Seçili izlenmeyen dosyalar silinecek.}}", - "@gitConfirmDiscardUntracked": {"description":"Confirmation body for deleting untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardUntracked": { + "description": "Confirmation body for deleting untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmDiscardMixed": "{count, plural, =1{Seçili dosya Git durumuna göre geri yüklenecek veya silinecek.} other{Seçili dosyalar Git durumlarına göre geri yüklenecek veya silinecek.}}", - "@gitConfirmDiscardMixed": {"description":"Confirmation body for discarding mixed tracked and untracked files.","placeholders":{"count":{"type":"int"}}}, + "@gitConfirmDiscardMixed": { + "description": "Confirmation body for discarding mixed tracked and untracked files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "gitConfirmSwitchBranchTitle": "{branch}'e geçilsin mi?", - "@gitConfirmSwitchBranchTitle": {"description":"Confirmation title for switching branches.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmSwitchBranchTitle": { + "description": "Confirmation title for switching branches.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitConfirmSwitchBranchMessage": "Git başka bir dala geçtikten sonra BusyMark çalışma alanını diskten yeniden yükleyecek.", - "@gitConfirmSwitchBranchMessage": {"description":"Confirmation body for switching branches."}, + "@gitConfirmSwitchBranchMessage": { + "description": "Confirmation body for switching branches." + }, "gitConfirmPushSetUpstreamTitle": "Upstream dalı ayarlansın mı?", - "@gitConfirmPushSetUpstreamTitle": {"description":"Confirmation title for pushing with set-upstream."}, + "@gitConfirmPushSetUpstreamTitle": { + "description": "Confirmation title for pushing with set-upstream." + }, "gitConfirmPushSetUpstreamMessage": "Bu dalın upstream'i yok. Tam olarak bir remote yapılandırılmışsa BusyMark {branch} dalını push edip upstream'i ayarlayabilir.", - "@gitConfirmPushSetUpstreamMessage": {"description":"Confirmation body for pushing with set-upstream.","placeholders":{"branch":{"type":"String"}}}, + "@gitConfirmPushSetUpstreamMessage": { + "description": "Confirmation body for pushing with set-upstream.", + "placeholders": { + "branch": { + "type": "String" + } + } + }, "gitProjectHistory": "Proje Geçmişi", - "@gitProjectHistory": {"description":"Project history action label."}, + "@gitProjectHistory": { + "description": "Project history action label." + }, "gitFileHistory": "Dosya Geçmişi", - "@gitFileHistory": {"description":"Current file history action label."}, + "@gitFileHistory": { + "description": "Current file history action label." + }, "gitFileHistoryRequiresOpenFile": "Dosya Geçmişi açık bir Markdown dosyası gerektirir.", - "@gitFileHistoryRequiresOpenFile": {"description":"File History empty state when no Markdown file is active."}, + "@gitFileHistoryRequiresOpenFile": { + "description": "File History empty state when no Markdown file is active." + }, "gitLoadMore": "Daha Fazla Yükle", - "@gitLoadMore": {"description":"Action to load another page of Git history."}, + "@gitLoadMore": { + "description": "Action to load another page of Git history." + }, "gitChangesInCommit": "Bu commit'teki değişiklikler", - "@gitChangesInCommit": {"description":"Historical comparison between a commit and its parent."}, + "@gitChangesInCommit": { + "description": "Historical comparison between a commit and its parent." + }, "gitCompareWithCurrent": "Mevcut sürümle karşılaştır", - "@gitCompareWithCurrent": {"description":"Historical comparison between a commit and the working-tree file."}, + "@gitCompareWithCurrent": { + "description": "Historical comparison between a commit and the working-tree file." + }, "gitRestoreVersion": "Bu sürümü geri yükle", - "@gitRestoreVersion": {"description":"Action to restore one file from a selected commit."}, + "@gitRestoreVersion": { + "description": "Action to restore one file from a selected commit." + }, "gitConfirmRestoreTitle": "Bu dosya sürümü geri yüklensin mi?", - "@gitConfirmRestoreTitle": {"description":"Confirmation title for restoring a historical file version."}, + "@gitConfirmRestoreTitle": { + "description": "Confirmation title for restoring a historical file version." + }, "gitConfirmRestoreMessage": "BusyMark mevcut çalışma ağacı dosyasını seçili commit sürümüyle değiştirir. Geri yüklenen dosya stage edilmemiş durumda kalır.", - "@gitConfirmRestoreMessage": {"description":"Confirmation body for restoring a historical file version."}, + "@gitConfirmRestoreMessage": { + "description": "Confirmation body for restoring a historical file version." + }, "gitCommitActions": "Commit işlemleri", - "@gitCommitActions": {"description":"Tooltip for actions on a selected Git commit."}, + "@gitCommitActions": { + "description": "Tooltip for actions on a selected Git commit." + }, "gitResetCurrentBranchToHere": "Mevcut dalı buraya sıfırla…", - "@gitResetCurrentBranchToHere": {"description":"Project History action that moves the current branch to the selected commit."}, + "@gitResetCurrentBranchToHere": { + "description": "Project History action that moves the current branch to the selected commit." + }, "gitResetCurrentBranchTitle": "{branch}, {commit}'e sıfırlansın mı?", - "@gitResetCurrentBranchTitle": {"description":"Title for choosing how to reset the current branch to a selected commit.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchTitle": { + "description": "Title for choosing how to reset the current branch to a selected commit.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitResetCurrentBranchMessage": "Bu işlem {branch} dalını {commit} commit'ine taşır. Git'in dizini ve çalışma ağacını nasıl güncelleyeceğini seçin.", - "@gitResetCurrentBranchMessage": {"description":"Explanation shown before resetting the current branch.","placeholders":{"branch":{"type":"String"},"commit":{"type":"String"}}}, + "@gitResetCurrentBranchMessage": { + "description": "Explanation shown before resetting the current branch.", + "placeholders": { + "branch": { + "type": "String" + }, + "commit": { + "type": "String" + } + } + }, "gitReset": "Sıfırla", - "@gitReset": {"description":"Action that confirms resetting the current Git branch."}, + "@gitReset": { + "description": "Action that confirms resetting the current Git branch." + }, "gitResetModeSoft": "Soft", - "@gitResetModeSoft": {"description":"Git soft reset mode label."}, + "@gitResetModeSoft": { + "description": "Git soft reset mode label." + }, "gitResetModeSoftDescription": "Yalnızca dalı taşıyın. Dizini ve çalışma ağacını değiştirmeyin; seçili commit ile arasındaki farklar stage edilmiş olarak kalır.", - "@gitResetModeSoftDescription": {"description":"Git soft reset mode explanation."}, + "@gitResetModeSoftDescription": { + "description": "Git soft reset mode explanation." + }, "gitResetModeMixed": "Mixed", - "@gitResetModeMixed": {"description":"Git mixed reset mode label."}, + "@gitResetModeMixed": { + "description": "Git mixed reset mode label." + }, "gitResetModeMixedDescription": "Dalı taşıyın ve dizini sıfırlayın. Çalışma ağacını değiştirmeyin; farkları stage edilmemiş durumda bırakın.", - "@gitResetModeMixedDescription": {"description":"Git mixed reset mode explanation."}, + "@gitResetModeMixedDescription": { + "description": "Git mixed reset mode explanation." + }, "gitResetModeHard": "Hard", - "@gitResetModeHard": {"description":"Git hard reset mode label."}, + "@gitResetModeHard": { + "description": "Git hard reset mode label." + }, "gitResetModeHardDescription": "Dalı taşıyın ve dizini ve çalışma ağacını sıfırlayın. İzlenen değişiklikler atılır; yolu engelleyen izlenmeyen dosyalar silinebilir.", - "@gitResetModeHardDescription": {"description":"Git hard reset mode explanation."}, + "@gitResetModeHardDescription": { + "description": "Git hard reset mode explanation." + }, "gitResetModeKeep": "Keep", - "@gitResetModeKeep": {"description":"Git keep reset mode label."}, + "@gitResetModeKeep": { + "description": "Git keep reset mode label." + }, "gitResetModeKeepDescription": "Yerel değişiklikleri koruyarak dalı taşıyın ve izlenen dosyaları sıfırlayın. Bu değişiklikler sıfırlamayla çakışırsa Git işlemi iptal eder.", - "@gitResetModeKeepDescription": {"description":"Git keep reset mode explanation."}, + "@gitResetModeKeepDescription": { + "description": "Git keep reset mode explanation." + }, "gitAdditionsDeletions": "+{additions} -{deletions}", - "@gitAdditionsDeletions": {"description":"Diff additions and deletions count.","placeholders":{"additions":{"type":"int"},"deletions":{"type":"int"}}}, + "@gitAdditionsDeletions": { + "description": "Diff additions and deletions count.", + "placeholders": { + "additions": { + "type": "int" + }, + "deletions": { + "type": "int" + } + } + }, "fileActions": "Dosya eylemleri", - "@fileActions": {"description":"Tooltip for a file action menu."}, + "@fileActions": { + "description": "Tooltip for a file action menu." + }, "actions": "Eylemler", - "@actions": {"description":"Tooltip for a general action menu."}, + "@actions": { + "description": "Tooltip for a general action menu." + }, "gitStatusAdded": "Eklendi", - "@gitStatusAdded": {"description":"Git file status label."}, + "@gitStatusAdded": { + "description": "Git file status label." + }, "gitStatusDeleted": "Silindi", - "@gitStatusDeleted": {"description":"Git file status label."}, + "@gitStatusDeleted": { + "description": "Git file status label." + }, "gitStatusRenamed": "Yeniden adlandırıldı", - "@gitStatusRenamed": {"description":"Git file status label."}, + "@gitStatusRenamed": { + "description": "Git file status label." + }, "gitStatusCopied": "Kopyalandı", - "@gitStatusCopied": {"description":"Git file status label."}, + "@gitStatusCopied": { + "description": "Git file status label." + }, "gitStatusUntracked": "İzlenmiyor", - "@gitStatusUntracked": {"description":"Git file status label."}, + "@gitStatusUntracked": { + "description": "Git file status label." + }, "gitStatusConflicted": "Çatışmalı", - "@gitStatusConflicted": {"description":"Git file status label."}, + "@gitStatusConflicted": { + "description": "Git file status label." + }, "gitStatusIgnored": "Yoksayıldı", - "@gitStatusIgnored": {"description":"Git file status label."}, + "@gitStatusIgnored": { + "description": "Git file status label." + }, "gitStatusTypeChanged": "Tür değiştirildi", - "@gitStatusTypeChanged": {"description":"Git file status label."}, + "@gitStatusTypeChanged": { + "description": "Git file status label." + }, "gitStatusModified": "Değiştirildi", - "@gitStatusModified": {"description":"Git file status label."}, + "@gitStatusModified": { + "description": "Git file status label." + }, "gitStatusUnknown": "Bilinmiyor", - "@gitStatusUnknown": {"description":"Git file status label."}, + "@gitStatusUnknown": { + "description": "Git file status label." + }, "gitErrorUnavailable": "Git kullanılamıyor.", - "@gitErrorUnavailable": {"description":"Git error message."}, + "@gitErrorUnavailable": { + "description": "Git error message." + }, "gitErrorNotRepository": "Bu çalışma alanı bir Git deposu değil.", - "@gitErrorNotRepository": {"description":"Git error message."}, + "@gitErrorNotRepository": { + "description": "Git error message." + }, "gitErrorUnsafePath": "BusyMark güvenli olmayan bir Git yolunu engelledi.", - "@gitErrorUnsafePath": {"description":"Git error message."}, + "@gitErrorUnsafePath": { + "description": "Git error message." + }, "gitErrorInvalidBranchName": "Geçerli bir dal adı girin.", - "@gitErrorInvalidBranchName": {"description":"Git error message."}, + "@gitErrorInvalidBranchName": { + "description": "Git error message." + }, "gitErrorNoRemote": "Git remote'u yapılandırılmamış.", - "@gitErrorNoRemote": {"description":"Git error message."}, + "@gitErrorNoRemote": { + "description": "Git error message." + }, "gitErrorNoUpstream": "Upstream dalı yapılandırılmamış.", - "@gitErrorNoUpstream": {"description":"Git error message."}, + "@gitErrorNoUpstream": { + "description": "Git error message." + }, "gitErrorMultipleRemotes": "Birden fazla remote yapılandırılmış. Bu BusyMark sürümünün dışında bir upstream seçin.", - "@gitErrorMultipleRemotes": {"description":"Git error message."}, - "gitErrorDirtyWorkspace": "Dal değiştirmeden önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.", - "@gitErrorDirtyWorkspace": {"description":"Git error message."}, + "@gitErrorMultipleRemotes": { + "description": "Git error message." + }, + "gitErrorDirtyWorkspace": "Dal değiştirmeden önce BusyMark düzenleyici değişikliklerini kaydedin veya göz ardı edin.", + "@gitErrorDirtyWorkspace": { + "description": "Git error message." + }, "gitErrorResetDirtyWorkspace": "Geçerli dalı sıfırlamadan önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.", - "@gitErrorResetDirtyWorkspace": {"description":"Git reset error shown when the editor has unsaved content."}, + "@gitErrorResetDirtyWorkspace": { + "description": "Git reset error shown when the editor has unsaved content." + }, "gitErrorRestoreStagedFile": "Geçmiş bir sürümü geri yüklemeden önce bu dosyayı staging'den çıkarın.", - "@gitErrorRestoreStagedFile": {"description":"Git error shown when historical restoration is blocked because the current file is staged."}, + "@gitErrorRestoreStagedFile": { + "description": "Git error shown when historical restoration is blocked because the current file is staged." + }, "gitErrorResetDetachedHead": "Sıfırlamadan önce bir dala geçin.", - "@gitErrorResetDetachedHead": {"description":"Git reset error shown while HEAD is detached."}, + "@gitErrorResetDetachedHead": { + "description": "Git reset error shown while HEAD is detached." + }, "gitErrorDiverged": "Dallar birbirinden ayrılmış. Birleştirme veya yeniden temellendirme işlemini bu BusyMark sürümünün dışında çözün.", - "@gitErrorDiverged": {"description":"Git error message."}, + "@gitErrorDiverged": { + "description": "Git error message." + }, "gitErrorAuthorIdentity": "Git'in commit atabilmesi için bir yazar adına ve e-posta adresine ihtiyacı var.", - "@gitErrorAuthorIdentity": {"description":"Git error shown when no commit author identity is configured."}, + "@gitErrorAuthorIdentity": { + "description": "Git error shown when no commit author identity is configured." + }, "gitAuthorIdentityTitle": "Git yazar kimliği", - "@gitAuthorIdentityTitle": {"description":"Title of the Git author identity recovery dialog."}, + "@gitAuthorIdentityTitle": { + "description": "Title of the Git author identity recovery dialog." + }, "gitAuthorIdentityMessage": "Git'in commit'lerde kullanacağı kimliği girin. BusyMark bu kimliği kaydedecek ve commit'i yeniden deneyecek.", - "@gitAuthorIdentityMessage": {"description":"Explanation in the Git author identity recovery dialog."}, + "@gitAuthorIdentityMessage": { + "description": "Explanation in the Git author identity recovery dialog." + }, "gitAuthorName": "İsim", - "@gitAuthorName": {"description":"Git commit author name field label."}, + "@gitAuthorName": { + "description": "Git commit author name field label." + }, "gitAuthorEmail": "E-posta", - "@gitAuthorEmail": {"description":"Git commit author email field label."}, + "@gitAuthorEmail": { + "description": "Git commit author email field label." + }, "gitAuthorIdentityGlobal": "Tüm depolar için kullanın", - "@gitAuthorIdentityGlobal": {"description":"Switch label for saving Git identity globally."}, + "@gitAuthorIdentityGlobal": { + "description": "Switch label for saving Git identity globally." + }, "gitAuthorIdentityGlobalDescription": "BusyMark Snap olarak kurulduysa bu ayar BusyMark'ta açılan tüm depolar için geçerlidir.", - "@gitAuthorIdentityGlobalDescription": {"description":"Description of global Git identity scope in the Snap."}, + "@gitAuthorIdentityGlobalDescription": { + "description": "Description of global Git identity scope in the Snap." + }, "gitSaveIdentityAndCommit": "Kimliği kaydet ve commit et", - "@gitSaveIdentityAndCommit": {"description":"Action that saves Git author identity and retries a commit."}, + "@gitSaveIdentityAndCommit": { + "description": "Action that saves Git author identity and retries a commit." + }, "gitErrorAuthentication": "Git kimlik doğrulaması başarısız oldu.", - "@gitErrorAuthentication": {"description":"Git error message."}, + "@gitErrorAuthentication": { + "description": "Git error message." + }, "gitErrorNetwork": "Git ağ işlemi başarısız oldu.", - "@gitErrorNetwork": {"description":"Git error message."}, + "@gitErrorNetwork": { + "description": "Git error message." + }, "gitErrorConflict": "Git çözülmemiş çakışmaları bildirdi.", - "@gitErrorConflict": {"description":"Git error message."}, + "@gitErrorConflict": { + "description": "Git error message." + }, "gitErrorCommandFailed": "Git komutu başarısız oldu.", - "@gitErrorCommandFailed": {"description":"Git error message."}, + "@gitErrorCommandFailed": { + "description": "Git error message." + }, "markdownAndHtml": "Markdown ve HTML", - "@markdownAndHtml": {"description":"Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Markdown blokları", - "@markdownHtmlMarkdownBlocks": {"description":"Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Markdown kaynağında ve önizlemesinde desteklenen blok yapıları.", - "@markdownHtmlMarkdownBlocksDescription": {"description":"Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Satır içi biçimlendirme", - "@markdownHtmlInlineFormatting": {"description":"Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Paragrafların, liste öğelerinin ve tablo hücrelerinin içinde görünebilecek biçimlendirme.", - "@markdownHtmlInlineFormattingDescription": {"description":"Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Ham HTML Blokları", - "@markdownHtmlRawHtmlBlocks": {"description":"Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "BusyMark önizleme widget'ları aracılığıyla oluşturulan güvenli blok düzeyinde HTML etiketleri.", - "@markdownHtmlRawHtmlBlocksDescription": {"description":"Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Ham HTML Satır İçi Etiketleri", - "@markdownHtmlRawHtmlInline": {"description":"Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Gerçek etiketler gösterilmeden oluşturulan güvenli satır içi HTML etiketleri.", - "@markdownHtmlRawHtmlInlineDescription": {"description":"Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Güvenlik Kuralları", - "@markdownHtmlSafety": {"description":"Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Ham HTML, önizleme oluşturmadan önce ayrıştırılır ve arındırılır.", - "@markdownHtmlSafetyDescription": {"description":"Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Başlıklar", - "@markdownHtmlHeadings": {"description":"Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Paragraflar", - "@markdownHtmlParagraphs": {"description":"Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Listeler", - "@markdownHtmlLists": {"description":"Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Konteynerler", - "@markdownHtmlHtmlContainers": {"description":"Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Metin blokları", - "@markdownHtmlHtmlTextBlocks": {"description":"Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Şekiller ve görseller", - "@markdownHtmlHtmlFigures": {"description":"Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Önceden biçimlendirilmiş kod", - "@markdownHtmlHtmlPreformatted": {"description":"Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Açıklama blokları", - "@markdownHtmlHtmlDisclosure": {"description":"Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Açıklama listeleri", - "@markdownHtmlHtmlDescriptionLists": {"description":"Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Etiketleri biçimlendirme", - "@markdownHtmlHtmlFormattingTags": {"description":"Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Satır içi kod etiketleri", - "@markdownHtmlHtmlInlineCodeTags": {"description":"Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Anlamsal metin etiketleri", - "@markdownHtmlHtmlNeutralInlineTags": {"description":"Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Temizlenmiş önizleme", - "@markdownHtmlSanitizedPreview": {"description":"Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "İzin verilen HTML, tarayıcıda oluşturulmaz, BusyMark önizleme bloklarına dönüştürülür.", - "@markdownHtmlSanitizedPreviewDescription": {"description":"Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Kaynak korunur", - "@markdownHtmlSourcePreserved": {"description":"Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Düzenlenmemiş ham HTML, tam olarak kaynak metin olarak kaydedilir.", - "@markdownHtmlSourcePreservedDescription": {"description":"Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "HTML içindeki Markdown", - "@markdownHtmlMarkdownInsideHtml": {"description":"Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Ham HTML içindeki Markdown işaretleri düz metin olarak görüntülenir.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description":"Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Engellenen etkin içerik", - "@markdownHtmlBlockedContent": {"description":"Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Komut dosyaları, stiller, çerçeveler, formlar, SVG, MathML, olaylar ve güvenli olmayan özellikler engellenir.", - "@markdownHtmlBlockedContentDescription": {"description":"Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Yalnızca güvenli URL'ler", - "@markdownHtmlSafeUrls": {"description":"Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Bağlantılar http, https, mailto, tel, göreli ve parça URL'lerine izin verir; güvenli olmayan şemalar engellenir.", - "@markdownHtmlSafeUrlsDescription": {"description":"Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "exportAsPdf": "PDF olarak dışa aktar", - "@exportAsPdf": {"description":"Menu action and dialog title for exporting the active document or Writerside module as PDF."}, + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." + }, "pdfExportDescription": "Kendi başına kullanılabilen, düzenli bir PDF için sayfa düzenini seçin.", - "@pdfExportDescription": {"description":"Introductory text in the PDF export options dialog."}, + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, "pdfRemoteImagesNote": "Dışa aktarma sırasında harici görseller indirilmez. Varsa yerel görseller eklenir.", - "@pdfRemoteImagesNote": {"description":"Privacy note explaining image handling during PDF export."}, + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, "pdfPageSize": "Sayfa boyutu", - "@pdfPageSize": {"description":"PDF export page-size setting."}, + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, "pdfPageSizeA4": "A4", - "@pdfPageSizeA4": {"description":"A4 PDF page-size option."}, + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, "pdfPageSizeLetter": "Letter boyutu", - "@pdfPageSizeLetter": {"description":"US Letter PDF page-size option."}, + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, "pdfOrientation": "Yönlendirme", - "@pdfOrientation": {"description":"PDF export page-orientation setting."}, + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, "pdfPortrait": "Portre", - "@pdfPortrait": {"description":"Portrait PDF page-orientation option."}, + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, "pdfLandscape": "Manzara", - "@pdfLandscape": {"description":"Landscape PDF page-orientation option."}, + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, "pdfMargins": "Kenar boşlukları", - "@pdfMargins": {"description":"PDF export page-margin setting."}, + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, "pdfMarginNarrow": "Dar", - "@pdfMarginNarrow": {"description":"Narrow PDF page-margin option."}, + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, "pdfMarginNormal": "Standart", - "@pdfMarginNormal": {"description":"Normal PDF page-margin option."}, + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, "pdfMarginWide": "Geniş", - "@pdfMarginWide": {"description":"Wide PDF page-margin option."}, + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, "pdfIncludePageNumbers": "Sayfa numaralarını dahil et", - "@pdfIncludePageNumbers": {"description":"Toggle for page numbers in an exported PDF."}, + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, "export": "Dışa aktar", - "@export": {"description":"Button label that starts an export."}, + "@export": { + "description": "Button label that starts an export." + }, "exportingPdf": "PDF dışa aktarılıyor…", - "@exportingPdf": {"description":"Progress dialog title while a PDF is being exported."}, + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, "fileTypePdf": "PDF belgesi", - "@fileTypePdf": {"description":"File picker label for PDF documents."}, + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, "pdfExported": "{fileName} dışa aktarıldı.", - "@pdfExported": {"description":"PDF export success message.","placeholders":{"fileName":{"type":"String"}}}, - "pdfExportedWithWarnings": "{fileName}, {count} uyarı(lar)ıyla birlikte dışa aktarıldı.", - "@pdfExportedWithWarnings": {"description":"PDF export success message when some content fell back or was omitted.","placeholders":{"fileName":{"type":"String"},"count":{"type":"int"}}}, + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName}, {count, plural, =1{1 uyarıyla} other{{count} uyarıyla}} birlikte dışa aktarıldı.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some content fell back or was omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "pdfExportUnavailable": "PDF dışa aktarma bileşeni eksik. BusyMark'ı yeniden yükleyin ve tekrar deneyin.", - "@pdfExportUnavailable": {"description":"Error shown when the bundled PDF compiler is unavailable."}, + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, "pdfExportTimedOut": "PDF dışa aktarımı çok uzun sürdü ve durduruldu.", - "@pdfExportTimedOut": {"description":"Error shown when PDF compilation times out."}, + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, "pdfExportFailed": "BusyMark bu belgeyi PDF olarak dışa aktaramadı.", - "@pdfExportFailed": {"description":"Generic PDF export failure message."}, + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Oluşturuluyor…", - "@visualizationRendering": {"description":"Status shown while a fenced visualization is rendering."}, + "@visualizationRendering": { + "description": "Status shown while a fenced visualization is rendering." + }, "visualizationStale": "Son geçerli görünüm gösteriliyor", - "@visualizationStale": {"description":"Status shown when a visualization displays its last valid result while newer source renders or is invalid."}, + "@visualizationStale": { + "description": "Status shown when a visualization displays its last valid result while newer source renders or is invalid." + }, "visualizationShowSource": "Kaynağı göster", - "@visualizationShowSource": {"description":"Action that reveals the original source fence for a visualization."}, + "@visualizationShowSource": { + "description": "Action that reveals the original source fence for a visualization." + }, "visualizationShowRender": "Görünümü göster", - "@visualizationShowRender": {"description":"Action that returns from visualization source to its rendered output."}, + "@visualizationShowRender": { + "description": "Action that returns from visualization source to its rendered output." + }, "visualizationFitWidth": "Genişliğe sığdır", - "@visualizationFitWidth": {"description":"Action that resets diagram zoom to fit its card."}, + "@visualizationFitWidth": { + "description": "Action that resets diagram zoom to fit its card." + }, "visualizationSaveImage": "Görseli kaydet", - "@visualizationSaveImage": {"description":"Action that saves a rendered diagram as an SVG or PNG file."}, + "@visualizationSaveImage": { + "description": "Action that saves a rendered diagram as an SVG or PNG file." + }, "visualizationCopyImage": "Görseli kopyala", - "@visualizationCopyImage": {"description":"Action that copies a rendered diagram to the image clipboard."}, + "@visualizationCopyImage": { + "description": "Action that copies a rendered diagram to the image clipboard." + }, "visualizationImageCopied": "Resim kopyalandı", - "@visualizationImageCopied": {"description":"Confirmation after copying a rendered diagram to the clipboard."}, + "@visualizationImageCopied": { + "description": "Confirmation after copying a rendered diagram to the clipboard." + }, "visualizationOpenApiReference": "API Referansını Aç", - "@visualizationOpenApiReference": {"description":"Action that opens the complete interactive OpenAPI reference window."}, + "@visualizationOpenApiReference": { + "description": "Action that opens the complete interactive OpenAPI reference window." + }, "visualizationValid": "Geçerli", - "@visualizationValid": {"description":"OpenAPI validation success state."}, + "@visualizationValid": { + "description": "OpenAPI validation success state." + }, "visualizationInvalid": "Geçersiz", - "@visualizationInvalid": {"description":"OpenAPI validation failure state."}, + "@visualizationInvalid": { + "description": "OpenAPI validation failure state." + }, "visualizationServers": "Sunucular", - "@visualizationServers": {"description":"OpenAPI server count label."}, + "@visualizationServers": { + "description": "OpenAPI server count label." + }, "visualizationPaths": "Yollar", - "@visualizationPaths": {"description":"OpenAPI path count label."}, + "@visualizationPaths": { + "description": "OpenAPI path count label." + }, "visualizationOperations": "Operasyonlar", - "@visualizationOperations": {"description":"OpenAPI operation count label."}, + "@visualizationOperations": { + "description": "OpenAPI operation count label." + }, "visualizationTags": "Etiketler", - "@visualizationTags": {"description":"OpenAPI tag summary label."}, - "visualizationNoOperations": "Eşleştirme işlemi yok", - "@visualizationNoOperations": {"description":"Empty state for the filtered OpenAPI operation list."}, - "visualizationSearchOperations": "Arama işlemleri", - "@visualizationSearchOperations": {"description":"Hint for the OpenAPI operation search field."}, + "@visualizationTags": { + "description": "OpenAPI tag summary label." + }, + "visualizationNoOperations": "Eşleşen işlem bulunamadı", + "@visualizationNoOperations": { + "description": "Empty state for the filtered OpenAPI operation list." + }, + "visualizationSearchOperations": "İşlemleri ara", + "@visualizationSearchOperations": { + "description": "Hint for the OpenAPI operation search field." + }, "visualizationRenderFailed": "Bu görselleştirme oluşturulamadı.", - "@visualizationRenderFailed": {"description":"Fallback message for a failed visualization render."}, + "@visualizationRenderFailed": { + "description": "Fallback message for a failed visualization render." + }, "visualizationRetry": "Yeniden dene", - "@visualizationRetry": {"description":"Action that retries a failed visualization render."}, + "@visualizationRetry": { + "description": "Action that retries a failed visualization render." + }, "visualizationSaved": "{fileName} kaydedildi", - "@visualizationSaved": {"description":"Confirmation after saving a rendered diagram.","placeholders":{"fileName":{"type":"String"}}}, + "@visualizationSaved": { + "description": "Confirmation after saving a rendered diagram.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, "shortcutExportPdfDescription": "Etkin belgeyi veya Writerside modülünü PDF olarak dışa aktarın.", - "@shortcutExportPdfDescription": {"description":"Keyboard-shortcut description for PDF export."}, + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "instances": "Örnekler", - "@instances": {"description":"Heading for the Writerside instances shown in the TOC sidebar."}, + "@instances": { + "description": "Heading for the Writerside instances shown in the TOC sidebar." + }, "newInstance": "Yeni örnek", - "@newInstance": {"description":"Action that creates a Writerside instance."}, + "@newInstance": { + "description": "Action that creates a Writerside instance." + }, "newTocLibrary": "Yeni TOC kitaplığı", - "@newTocLibrary": {"description":"Action that creates a Writerside library instance for reusable TOC sections."}, + "@newTocLibrary": { + "description": "Action that creates a Writerside library instance for reusable TOC sections." + }, "editInstance": "Örneği düzenle", - "@editInstance": {"description":"Action and dialog title for editing a Writerside instance."}, + "@editInstance": { + "description": "Action and dialog title for editing a Writerside instance." + }, "openTocFile": "TOC dosyasını aç", - "@openTocFile": {"description":"Action that opens the selected Writerside instance tree file."}, + "@openTocFile": { + "description": "Action that opens the selected Writerside instance tree file." + }, "createInstance": "Örnek oluştur", - "@createInstance": {"description":"Dialog title for creating a Writerside instance."}, + "@createInstance": { + "description": "Dialog title for creating a Writerside instance." + }, "createTocLibrary": "İçindekiler kitaplığı oluştur", - "@createTocLibrary": {"description":"Dialog title for creating a Writerside TOC library instance."}, + "@createTocLibrary": { + "description": "Dialog title for creating a Writerside TOC library instance." + }, "instanceContent": "İçerik", - "@instanceContent": {"description":"Group title for choosing the initial content of a Writerside instance."}, + "@instanceContent": { + "description": "Group title for choosing the initial content of a Writerside instance." + }, "instanceContentSource": "İçerik kaynağı:", - "@instanceContentSource": {"description":"Field for choosing how a Writerside instance is initialized."}, + "@instanceContentSource": { + "description": "Field for choosing how a Writerside instance is initialized." + }, "emptyInstance": "Boş örnek", - "@emptyInstance": {"description":"Option to create a Writerside instance without imported topics."}, + "@emptyInstance": { + "description": "Option to create a Writerside instance without imported topics." + }, "markdownFiles": "Yerel Markdown dosyaları", - "@markdownFiles": {"description":"Option to initialize a Writerside instance from Markdown files."}, + "@markdownFiles": { + "description": "Option to initialize a Writerside instance from Markdown files." + }, "chooseMarkdownFolder": "Markdown klasörünü seçin", - "@chooseMarkdownFolder": {"description":"Action to choose a folder containing Markdown files."}, + "@chooseMarkdownFolder": { + "description": "Action to choose a folder containing Markdown files." + }, "errorWritersideInstanceImportSourceRequired": "Markdown dosyalarını içeren bir klasör seçin.", - "@errorWritersideInstanceImportSourceRequired": {"description":"Validation shown when an imported instance has no source folder."}, + "@errorWritersideInstanceImportSourceRequired": { + "description": "Validation shown when an imported instance has no source folder." + }, "instanceAppearance": "Görünüm", - "@instanceAppearance": {"description":"Group title for the local appearance of a Writerside instance."}, + "@instanceAppearance": { + "description": "Group title for the local appearance of a Writerside instance." + }, "instanceColor": "Simge rengi", - "@instanceColor": {"description":"Writerside instance icon-color field."}, + "@instanceColor": { + "description": "Writerside instance icon-color field." + }, "instanceVersion": "Sürüm", - "@instanceVersion": {"description":"Writerside instance version field."}, + "@instanceVersion": { + "description": "Writerside instance version field." + }, "instanceVersionInherited": "Bu alan boş olduğunda proje sürümü {version}'tir.", - "@instanceVersionInherited": {"description":"Explanation of an inherited Writerside project version.","placeholders":{"version":{"type":"String"}}}, + "@instanceVersionInherited": { + "description": "Explanation of an inherited Writerside project version.", + "placeholders": { + "version": { + "type": "String" + } + } + }, "instanceWebPath": "Web yolu", - "@instanceWebPath": {"description":"Writerside instance publication web-path field."}, + "@instanceWebPath": { + "description": "Writerside instance publication web-path field." + }, "instanceStatus": "Durum", - "@instanceStatus": {"description":"Writerside instance status field."}, + "@instanceStatus": { + "description": "Writerside instance status field." + }, "instanceStatusRelease": "release", - "@instanceStatusRelease": {"description":"Regular Writerside instance status."}, + "@instanceStatusRelease": { + "description": "Regular Writerside instance status." + }, "instanceStatusEap": "EAP", - "@instanceStatusEap": {"description":"Writerside early-access instance status."}, + "@instanceStatusEap": { + "description": "Writerside early-access instance status." + }, "instanceStatusDeprecated": "Kullanımdan kaldırıldı", - "@instanceStatusDeprecated": {"description":"Writerside deprecated instance status."}, + "@instanceStatusDeprecated": { + "description": "Writerside deprecated instance status." + }, "allowSearchEngineIndexing": "Arama motoru dizine eklenmesine izin ver", - "@allowSearchEngineIndexing": {"description":"Per-instance Writerside search-engine indexing setting."}, + "@allowSearchEngineIndexing": { + "description": "Per-instance Writerside search-engine indexing setting." + }, "allowSearchEngineIndexingDescription": "Harici arama motorlarının bu çıktıyı dizine eklemesine izin verin.", - "@allowSearchEngineIndexingDescription": {"description":"Description of the Writerside indexing setting."}, + "@allowSearchEngineIndexingDescription": { + "description": "Description of the Writerside indexing setting." + }, "offlineArtifact": "Çevrimdışı artefakt", - "@offlineArtifact": {"description":"Per-instance Writerside offline artifact setting."}, + "@offlineArtifact": { + "description": "Per-instance Writerside offline artifact setting." + }, "offlineArtifactDescription": "Kaynakları, yerleşik belgelerin bağımsız olmasını sağlayacak şekilde paketleyin.", - "@offlineArtifactDescription": {"description":"Description of the Writerside offline artifact setting."}, + "@offlineArtifactDescription": { + "description": "Description of the Writerside offline artifact setting." + }, "instanceOutputSettings": "Çıktı ayarları", - "@instanceOutputSettings": {"description":"Group title for Writerside instance build and publication settings."}, + "@instanceOutputSettings": { + "description": "Group title for Writerside instance build and publication settings." + }, "markdownImportSource": "Markdown kaynağı", - "@markdownImportSource": {"description":"Group title for the source directory of a Writerside Markdown import."}, + "@markdownImportSource": { + "description": "Group title for the source directory of a Writerside Markdown import." + }, "markdownImportFiles": "Markdown dosyaları", - "@markdownImportFiles": {"description":"Group title for files selected for a Writerside Markdown import."}, + "@markdownImportFiles": { + "description": "Group title for files selected for a Writerside Markdown import." + }, "selectNone": "Hiçbirini seçme", - "@selectNone": {"description":"Action that clears all items in a multiple selection."}, + "@selectNone": { + "description": "Action that clears all items in a multiple selection." + }, "markdownFilesFound": "{count} Markdown dosyası/dosyaları bulundu", - "@markdownFilesFound": {"description":"Count of discovered Markdown import files.","placeholders":{"count":{"type":"int"}}}, + "@markdownFilesFound": { + "description": "Count of discovered Markdown import files.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noMarkdownFilesFound": "Bu dizinde Markdown dosyası bulunamadı.", - "@noMarkdownFilesFound": {"description":"Empty state for a Writerside Markdown import source."}, + "@noMarkdownFilesFound": { + "description": "Empty state for a Writerside Markdown import source." + }, "copyReferencedMedia": "Başvurulan medyayı kopyala", - "@copyReferencedMedia": {"description":"Option to copy media used by imported Markdown files."}, + "@copyReferencedMedia": { + "description": "Option to copy media used by imported Markdown files." + }, "copyReferencedMediaDescription": "Göreli yolları koruyarak, seçilen dosyaların referans verdiği yerel görüntüleri ve videoları kopyalayın.", - "@copyReferencedMediaDescription": {"description":"Description of the Writerside Markdown media import option."}, + "@copyReferencedMediaDescription": { + "description": "Description of the Writerside Markdown media import option." + }, "instanceIdRenameWarningTitle": "Örnek kimliği yeniden adlandırılsın mı?", - "@instanceIdRenameWarningTitle": {"description":"Confirmation title before refactoring a Writerside instance ID."}, + "@instanceIdRenameWarningTitle": { + "description": "Confirmation title before refactoring a Writerside instance ID." + }, "instanceIdRenameWarning": "BusyMark, .tree dosyasını yeniden adlandıracak ve Writerside proje referanslarını \"{oldId}\"ten \"{newId}\"e güncelleyecektir. Yayın komut dosyaları değiştirilmez ve ayrı olarak güncellenmeleri gerekir.", - "@instanceIdRenameWarning": {"description":"Warning shown before a Writerside instance ID refactor.","placeholders":{"oldId":{"type":"String"},"newId":{"type":"String"}}}, + "@instanceIdRenameWarning": { + "description": "Warning shown before a Writerside instance ID refactor.", + "placeholders": { + "oldId": { + "type": "String" + }, + "newId": { + "type": "String" + } + } + }, "renameAndUpdateReferences": "Referansları yeniden adlandırın ve güncelleyin", - "@renameAndUpdateReferences": {"description":"Confirmation action for a Writerside instance ID refactor."}, + "@renameAndUpdateReferences": { + "description": "Confirmation action for a Writerside instance ID refactor." + }, "tocLibraryDescription": "Bir TOC kütüphanesi yeniden kullanılabilir bölümleri saklar ve kendi çıktısını üretmez.", - "@tocLibraryDescription": {"description":"Explanation shown while creating a Writerside TOC library."}, + "@tocLibraryDescription": { + "description": "Explanation shown while creating a Writerside TOC library." + }, "defaultTocLibraryName": "Paylaşılan İçindekiler", - "@defaultTocLibraryName": {"description":"Default name for a new Writerside TOC library instance."}, + "@defaultTocLibraryName": { + "description": "Default name for a new Writerside TOC library instance." + }, "instanceColorAutomatic": "Otomatik", - "@instanceColorAutomatic": {"description":"Automatic Writerside instance icon color option."}, + "@instanceColorAutomatic": { + "description": "Automatic Writerside instance icon color option." + }, "instanceColorBlue": "Mavi", - "@instanceColorBlue": {"description":"Blue Writerside instance icon color option."}, + "@instanceColorBlue": { + "description": "Blue Writerside instance icon color option." + }, "instanceColorGreen": "Yeşil", - "@instanceColorGreen": {"description":"Green Writerside instance icon color option."}, + "@instanceColorGreen": { + "description": "Green Writerside instance icon color option." + }, "instanceColorOrange": "Turuncu", - "@instanceColorOrange": {"description":"Orange Writerside instance icon color option."}, + "@instanceColorOrange": { + "description": "Orange Writerside instance icon color option." + }, "instanceColorPurple": "Mor", - "@instanceColorPurple": {"description":"Purple Writerside instance icon color option."}, + "@instanceColorPurple": { + "description": "Purple Writerside instance icon color option." + }, "instanceColorRed": "Kırmızı", - "@instanceColorRed": {"description":"Red Writerside instance icon color option."}, + "@instanceColorRed": { + "description": "Red Writerside instance icon color option." + }, "instanceColorTeal": "turkuaz", - "@instanceColorTeal": {"description":"Teal Writerside instance icon color option."}, + "@instanceColorTeal": { + "description": "Teal Writerside instance icon color option." + }, "instanceColorYellow": "Sarı", - "@instanceColorYellow": {"description":"Yellow Writerside instance icon color option."}, + "@instanceColorYellow": { + "description": "Yellow Writerside instance icon color option." + }, "errorWritersideInstanceNameRequired": "Bir örnek adı girin.", - "@errorWritersideInstanceNameRequired": {"description":"Validation error for an empty Writerside instance name."}, + "@errorWritersideInstanceNameRequired": { + "description": "Validation error for an empty Writerside instance name." + }, "errorWritersideInstanceIdExists": "\"{id}\" kimliğine sahip bir örnek zaten mevcut.", - "@errorWritersideInstanceIdExists": {"description":"Error for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@errorWritersideInstanceIdExists": { + "description": "Error for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "errorWritersideInstanceTreeExists": "Örnek ağacı zaten mevcut: {path}", - "@errorWritersideInstanceTreeExists": {"description":"Error for an existing Writerside instance tree path.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceTreeExists": { + "description": "Error for an existing Writerside instance tree path.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSourceMissing": "Markdown kaynak dizini mevcut değil: {path}", - "@errorWritersideInstanceImportSourceMissing": {"description":"Error for a missing Writerside Markdown import source.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportSourceMissing": { + "description": "Error for a missing Writerside Markdown import source.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportSelectionRequired": "İçe aktarılacak en az bir Markdown dosyası seçin.", - "@errorWritersideInstanceImportSelectionRequired": {"description":"Validation error when no Markdown import files are selected."}, + "@errorWritersideInstanceImportSelectionRequired": { + "description": "Validation error when no Markdown import files are selected." + }, "errorWritersideInstanceImportFileInvalid": "Bu, seçilen kaynağın içindeki okunabilir bir Markdown dosyası değil: {path}", - "@errorWritersideInstanceImportFileInvalid": {"description":"Error for an invalid Writerside Markdown import file.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportFileInvalid": { + "description": "Error for an invalid Writerside Markdown import file.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceImportTargetExists": "İçe aktarma, mevcut bir proje dosyasının üzerine yazılmasına neden olur: {path}", - "@errorWritersideInstanceImportTargetExists": {"description":"Error for a colliding Writerside Markdown import target.","placeholders":{"path":{"type":"String"}}}, + "@errorWritersideInstanceImportTargetExists": { + "description": "Error for a colliding Writerside Markdown import target.", + "placeholders": { + "path": { + "type": "String" + } + } + }, "errorWritersideInstanceFilesChanged": "Örnek dosyalar diskte değiştirildi. Bunları inceleyin ve tekrar deneyin.", - "@errorWritersideInstanceFilesChanged": {"description":"Concurrent-change error for a Writerside instance mutation."}, + "@errorWritersideInstanceFilesChanged": { + "description": "Concurrent-change error for a Writerside instance mutation." + }, "errorWritersideInstanceRollbackFailed": "BusyMark, örnek değişikliğini tamamen geri alamadı. Devam etmeden önce bu dosyaları inceleyin: {paths}", - "@errorWritersideInstanceRollbackFailed": {"description":"Error when a Writerside instance mutation rollback is incomplete.","placeholders":{"paths":{"type":"String"}}}, + "@errorWritersideInstanceRollbackFailed": { + "description": "Error when a Writerside instance mutation rollback is incomplete.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, "errorWritersideInstanceLibraryImport": "İçindekiler kitaplığı Markdown konularını içe aktaramaz.", - "@errorWritersideInstanceLibraryImport": {"description":"Error when Markdown import is requested for a TOC library."}, + "@errorWritersideInstanceLibraryImport": { + "description": "Error when Markdown import is requested for a TOC library." + }, "errorWritersideInstanceWebPathInvalid": "Web yolu tek bir segmentten oluşmalıdır.", - "@errorWritersideInstanceWebPathInvalid": {"description":"Validation error for an invalid Writerside instance web path."}, + "@errorWritersideInstanceWebPathInvalid": { + "description": "Validation error for an invalid Writerside instance web path." + }, "errorWritersideInstanceConfigurationInvalid": "Writerside örnek yapılandırması geçersiz. Teşhislerini düzeltip tekrar deneyin.", - "@errorWritersideInstanceConfigurationInvalid": {"description":"Error when an instance tree, project config, or build profiles file cannot be safely edited."}, + "@errorWritersideInstanceConfigurationInvalid": { + "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." + }, "errorWritersideInstanceTemporaryFile": "BusyMark örnek değişikliklerini güvenli bir şekilde gerçekleştiremedi.", - "@errorWritersideInstanceTemporaryFile": {"description":"Error when a temporary file for an instance mutation cannot be created."}, - "diagnosticWritersideTreeInvalidStatus": "Bilinmeyen instance durumu \"{status}\". release, eap veya deprecated kullanın.", - "@diagnosticWritersideTreeInvalidStatus": {"description":"Diagnostic for an unsupported Writerside instance status.","placeholders":{"status":{"type":"String"}}}, + "@errorWritersideInstanceTemporaryFile": { + "description": "Error when a temporary file for an instance mutation cannot be created." + }, + "diagnosticWritersideTreeInvalidStatus": "Bilinmeyen örnek durumu \"{status}\". Release, eap veya deprecated kullanın.", + "@diagnosticWritersideTreeInvalidStatus": { + "description": "Diagnostic for an unsupported Writerside instance status.", + "placeholders": { + "status": { + "type": "String" + } + } + }, "diagnosticWritersideDuplicateInstanceId": "“{id}” örnek kimliği birden fazla ağaç dosyası tarafından kullanılıyor.", - "@diagnosticWritersideDuplicateInstanceId": {"description":"Diagnostic for a duplicate Writerside instance ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideDuplicateInstanceId": { + "description": "Diagnostic for a duplicate Writerside instance ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml bir kök öğesine sahip olmalıdır.", - "@diagnosticWritersideBuildProfilesInvalidRoot": {"description":"Diagnostic for an invalid Writerside build profiles root."}, - "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} değeri “{value}” doğru veya yanlış olmalıdır.", - "@diagnosticWritersideBuildProfilesInvalidBoolean": {"description":"Diagnostic for an invalid Writerside build profile Boolean.","placeholders":{"name":{"type":"String"},"value":{"type":"String"}}}, + "@diagnosticWritersideBuildProfilesInvalidRoot": { + "description": "Diagnostic for an invalid Writerside build profiles root." + }, + "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} değeri “{value}” true veya false olmalıdır.", + "@diagnosticWritersideBuildProfilesInvalidBoolean": { + "description": "Diagnostic for an invalid Writerside build profile Boolean.", + "placeholders": { + "name": { + "type": "String" + }, + "value": { + "type": "String" + } + } + }, "diagnosticWritersideBuildProfileMissingInstance": "Bir öğesi bir örnek kimliği belirtmelidir.", - "@diagnosticWritersideBuildProfileMissingInstance": {"description":"Diagnostic for a Writerside build profile without an instance attribute."}, - "diagnosticWritersideTreeInvalidInclude": "Bir ağaç hem from hem de element kimliğini belirtmelidir.", - "@diagnosticWritersideTreeInvalidInclude": {"description":"Diagnostic for an incomplete Writerside tree include."}, + "@diagnosticWritersideBuildProfileMissingInstance": { + "description": "Diagnostic for a Writerside build profile without an instance attribute." + }, + "diagnosticWritersideTreeInvalidInclude": "Bir ağaç , hem from hem de element-id belirtmelidir.", + "@diagnosticWritersideTreeInvalidInclude": { + "description": "Diagnostic for an incomplete Writerside tree include." + }, "diagnosticWritersideTreeMissingSnippetId": "Bir ağaç 'i bir kimlik belirtmelidir.", - "@diagnosticWritersideTreeMissingSnippetId": {"description":"Diagnostic for a Writerside tree snippet without an ID."}, + "@diagnosticWritersideTreeMissingSnippetId": { + "description": "Diagnostic for a Writerside tree snippet without an ID." + }, "diagnosticWritersideTreeInvalidCrossInstanceReference": "Çapraz örnek TOC referansı hem ref hem de in'i belirtmelidir.", - "@diagnosticWritersideTreeInvalidCrossInstanceReference": {"description":"Diagnostic for an incomplete Writerside ref/in pair."}, + "@diagnosticWritersideTreeInvalidCrossInstanceReference": { + "description": "Diagnostic for an incomplete Writerside ref/in pair." + }, "diagnosticWritersideTreeConflictingTargets": "Bir TOC öğesi birden fazla konuyu, referansı, bağlantıyı veya yönlendirmeyi hedefleyemez.", - "@diagnosticWritersideTreeConflictingTargets": {"description":"Diagnostic for conflicting Writerside TOC targets."}, + "@diagnosticWritersideTreeConflictingTargets": { + "description": "Diagnostic for conflicting Writerside TOC targets." + }, "diagnosticWritersideTreeDuplicateElementId": "Ağaç öğesi kimliği \"{id}\" birden fazla kez bildirildi.", - "@diagnosticWritersideTreeDuplicateElementId": {"description":"Diagnostic for a duplicate Writerside tree element ID.","placeholders":{"id":{"type":"String"}}}, + "@diagnosticWritersideTreeDuplicateElementId": { + "description": "Diagnostic for a duplicate Writerside tree element ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, "diagnosticWritersideInstanceGroupsInvalidRoot": "Örnek grupları dosyasında bir kök öğesi bulunmalıdır.", - "@diagnosticWritersideInstanceGroupsInvalidRoot": {"description":"Diagnostic for an invalid Writerside instance groups root."}, + "@diagnosticWritersideInstanceGroupsInvalidRoot": { + "description": "Diagnostic for an invalid Writerside instance groups root." + }, "diagnosticWritersideInstanceGroupInvalid": "Bir örnek grubunun boş olmayan bir kimlik ve örnek listesi belirtmesi gerekir.", - "@diagnosticWritersideInstanceGroupInvalid": {"description":"Diagnostic for an invalid Writerside instance group."}, + "@diagnosticWritersideInstanceGroupInvalid": { + "description": "Diagnostic for an invalid Writerside instance group." + }, "diagnosticWritersideInstanceGroupDuplicateId": "Örnek grubu kimliği \"{id}\" birden fazla kez bildirildi.", - "@diagnosticWritersideInstanceGroupDuplicateId": {"description":"Diagnostic for a duplicate Writerside instance group ID.","placeholders":{"id":{"type":"String"}}}, - "diagnosticWritersideExternalTreeInclude": "TOC şunları içerir: “{source}#{id}”, “{origin}” harici modülüne aittir ve bu çalışma alanında genişletilemez.", - "@diagnosticWritersideExternalTreeInclude": {"description":"Diagnostic for a tree include from another Writerside module.","placeholders":{"source":{"type":"String"},"id":{"type":"String"},"origin":{"type":"String"}}}, + "@diagnosticWritersideInstanceGroupDuplicateId": { + "description": "Diagnostic for a duplicate Writerside instance group ID.", + "placeholders": { + "id": { + "type": "String" + } + } + }, + "diagnosticWritersideExternalTreeInclude": "TOC include “{source}#{id}”, harici “{origin}” modülüne aittir ve bu çalışma alanında genişletilemez.", + "@diagnosticWritersideExternalTreeInclude": { + "description": "Diagnostic for a tree include from another Writerside module.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + }, + "origin": { + "type": "String" + } + } + }, "diagnosticWritersideTreeIncludeElementMissing": "\"{id}\" ağaç öğesi kayıtlı \"{source}\" ağacında mevcut değil.", - "@diagnosticWritersideTreeIncludeElementMissing": {"description":"Diagnostic for a missing reusable tree element.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeIncludeElementMissing": { + "description": "Diagnostic for a missing reusable tree element.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideTreeCircularInclude": "“{source}#{id}” içeren ağaç bir döngü oluşturur.", - "@diagnosticWritersideTreeCircularInclude": {"description":"Diagnostic for a circular Writerside tree include.","placeholders":{"source":{"type":"String"},"id":{"type":"String"}}}, + "@diagnosticWritersideTreeCircularInclude": { + "description": "Diagnostic for a circular Writerside tree include.", + "placeholders": { + "source": { + "type": "String" + }, + "id": { + "type": "String" + } + } + }, "diagnosticWritersideUnknownInstanceGroup": "Örnek koşulu, bilinmeyen \"@{group}\" grubuna referans veriyor.", - "@diagnosticWritersideUnknownInstanceGroup": {"description":"Diagnostic for an unknown Writerside instance group.","placeholders":{"group":{"type":"String"}}}, + "@diagnosticWritersideUnknownInstanceGroup": { + "description": "Diagnostic for an unknown Writerside instance group.", + "placeholders": { + "group": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceInstanceMissing": "Çapraz örnek referansı, bilinmeyen \"{instance}\" örneğini hedefliyor.", - "@diagnosticWritersideReferenceInstanceMissing": {"description":"Diagnostic for a missing Writerside reference instance.","placeholders":{"instance":{"type":"String"}}}, + "@diagnosticWritersideReferenceInstanceMissing": { + "description": "Diagnostic for a missing Writerside reference instance.", + "placeholders": { + "instance": { + "type": "String" + } + } + }, "diagnosticWritersideReferenceTopicMissing": "“{topic}” konusu başvurulan “{instance}” örneğinde değil.", - "@diagnosticWritersideReferenceTopicMissing": {"description":"Diagnostic for a missing topic in a cross-instance Writerside reference.","placeholders":{"topic":{"type":"String"},"instance":{"type":"String"}}}, - "download": "İndirmek", - "@download": {"description":"Button label that downloads a required component."}, + "@diagnosticWritersideReferenceTopicMissing": { + "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", + "placeholders": { + "topic": { + "type": "String" + }, + "instance": { + "type": "String" + } + } + }, + "download": "İndir", + "@download": { + "description": "Button label that downloads a required component." + }, "exportWritersideAsPdf": "Writerside'ı PDF olarak dışa aktar", - "@exportWritersideAsPdf": {"description":"Menu action and dialog title for exporting a Writerside instance as PDF."}, + "@exportWritersideAsPdf": { + "description": "Menu action and dialog title for exporting a Writerside instance as PDF." + }, "writersidePdfContent": "İçeriği dışa aktar", - "@writersidePdfContent": {"description":"Group title for selecting Writerside PDF content."}, + "@writersidePdfContent": { + "description": "Group title for selecting Writerside PDF content." + }, "writersidePdfPage": "Sayfa", - "@writersidePdfPage": {"description":"Writerside PDF page settings group title."}, + "@writersidePdfPage": { + "description": "Writerside PDF page settings group title." + }, "exportingWritersidePdf": "Writerside PDF'si dışa aktarılıyor…", - "@exportingWritersidePdf": {"description":"Progress title while building a Writerside PDF."}, + "@exportingWritersidePdf": { + "description": "Progress title while building a Writerside PDF." + }, "ai": "AI", - "@ai": {"description":"Settings section and editing menu label for artificial-intelligence features."}, + "@ai": { + "description": "Settings section and editing menu label for artificial-intelligence features." + }, "aiLocalOllama": "Yerel Ollama", - "@aiLocalOllama": {"description":"AI provider option for a loopback Ollama service."}, + "@aiLocalOllama": { + "description": "AI provider option for a loopback Ollama service." + }, "aiDisabled": "Devre dışı", - "@aiDisabled": {"description":"AI provider option that disables AI features."}, - "aiLocalOnlyDescription": "AI düzenlemesi yalnızca yereldir. BusyMark yalnızca seçili sağlayıcıya gösterilen bağlamı gönderir ve hiçbir öneriyi incelemeden uygulamaz.", - "@aiLocalOnlyDescription": {"description":"Privacy description for BusyMark local AI."}, + "@aiDisabled": { + "description": "AI provider option that disables AI features." + }, "aiProvider": "AI sağlayıcısı", - "@aiProvider": {"description":"Label for an AI provider selection."}, + "@aiProvider": { + "description": "Label for an AI provider selection." + }, "aiDefaultProvider": "Varsayılan sağlayıcı", - "@aiDefaultProvider": {"description":"Settings label for the provider selected by default for AI actions."}, + "@aiDefaultProvider": { + "description": "Settings label for the provider selected by default for AI actions." + }, "aiConfigureProvider": "Sağlayıcıyı yapılandır", - "@aiConfigureProvider": {"description":"Settings label for choosing which AI provider configuration to edit."}, + "@aiConfigureProvider": { + "description": "Settings label for choosing which AI provider configuration to edit." + }, "aiChooseProvider": "AI sağlayıcısını seç", - "@aiChooseProvider": {"description":"Dialog title shown before selecting the AI provider for an action."}, + "@aiChooseProvider": { + "description": "Dialog title shown before selecting the AI provider for an action." + }, "aiOllamaEndpoint": "Ollama uç noktası", - "@aiOllamaEndpoint": {"description":"Settings label for the local Ollama origin."}, + "@aiOllamaEndpoint": { + "description": "Settings label for the local Ollama origin." + }, "aiOllamaModel": "Ollama modeli", - "@aiOllamaModel": {"description":"Settings label for the installed Ollama model."}, + "@aiOllamaModel": { + "description": "Settings label for the installed Ollama model." + }, "aiTestConnection": "Bağlantıyı test edin", - "@aiTestConnection": {"description":"Button that verifies generation with the configured AI provider and model."}, + "@aiTestConnection": { + "description": "Button that verifies generation with the configured AI provider and model." + }, "aiTestingConnection": "Test ediliyor…", - "@aiTestingConnection": {"description":"Status while BusyMark verifies the configured AI provider and model."}, + "@aiTestingConnection": { + "description": "Status while BusyMark verifies the configured AI provider and model." + }, "aiConnectionReady": "Bağlandı. {count} yüklü model bulundu.", - "@aiConnectionReady": {"description":"Successful Ollama connection status.","placeholders":{"count":{"type":"int"}}}, + "@aiConnectionReady": { + "description": "Successful Ollama connection status.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiNoModels": "Hiçbir model seçilmedi.", - "@aiNoModels": {"description":"AI model setting shown before a model has been selected or discovered."}, + "@aiNoModels": { + "description": "AI model setting shown before a model has been selected or discovered." + }, "aiConnectionFailed": "BusyMark, AI metin oluşturma işlemini doğrulayamadı.", - "@aiConnectionFailed": {"description":"Generic failure shown while testing AI generation."}, + "@aiConnectionFailed": { + "description": "Generic failure shown while testing AI generation." + }, "aiConfigureFirst": "Bir AI sağlayıcısını etkinleştirin ve Ayarlar → AI bölümünde bir modeli doğrulayın.", - "@aiConfigureFirst": {"description":"Message shown when an AI action is unavailable."}, + "@aiConfigureFirst": { + "description": "Message shown when an AI action is unavailable." + }, "aiEditWithAi": "AI ile düzenle", "aiRefineWithAi": "AI ile iyileştir", - "@aiRefineWithAi": {"description":"Selected-text context-menu action that opens AI refinement."}, + "@aiRefineWithAi": { + "description": "Selected-text context-menu action that opens AI refinement." + }, "aiInstruction": "Talimat", "aiChangeTarget": "Neler değişebilir?", "aiSharedContext": "AI ile paylaşılan bağlam", @@ -1793,105 +4341,276 @@ "aiContextCurrentSection": "Mevcut bölüm", "aiContextCompleteDocument": "Belgenin tamamı", "aiGenerating": "Teklif oluşturuluyor…", - "@aiGenerating": {"description":"Progress text while an AI proposal streams."}, + "@aiGenerating": { + "description": "Progress text while an AI proposal streams." + }, "aiProposal": "AI önerisi", - "@aiProposal": {"description":"Title of the AI proposal review dialog."}, + "@aiProposal": { + "description": "Title of the AI proposal review dialog." + }, "aiGenerateProposal": "Teklif oluştur", - "@aiGenerateProposal": {"description":"Button that starts generation after the user reviews the AI instruction, change target, and shared context."}, - "aiContextDisclosure": "Seçilen sağlayıcı, görüntülenen bağlamdan {count} karakterlerini alacaktır.", - "@aiContextDisclosure": {"description":"Disclosure of AI context size.","placeholders":{"count":{"type":"int"}}}, + "@aiGenerateProposal": { + "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." + }, + "aiContextDisclosure": "Seçilen sağlayıcı {count} karakterlik gösterilen bağlam alacaktır.", + "@aiContextDisclosure": { + "description": "Disclosure of AI context size.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "aiOriginal": "Orijinal", - "@aiOriginal": {"description":"Label for original text in an AI proposal review."}, + "@aiOriginal": { + "description": "Label for original text in an AI proposal review." + }, "aiSuggested": "Önerilen", - "@aiSuggested": {"description":"Label for proposed text in an AI proposal review."}, + "@aiSuggested": { + "description": "Label for proposed text in an AI proposal review." + }, "aiApplyProposal": "Teklifi uygula", - "@aiApplyProposal": {"description":"Button that applies a reviewed AI proposal."}, + "@aiApplyProposal": { + "description": "Button that applies a reviewed AI proposal." + }, "aiTokenUsage": "{input} girdi tokenı · {output} çıktı tokenı", - "@aiTokenUsage": {"description":"Local Ollama token usage for one proposal.","placeholders":{"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiTokenUsage": { + "description": "Local Ollama token usage for one proposal.", + "placeholders": { + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiStaleProposal": "Bu teklif oluşturulurken belge değiştirildi. Eylemi yeniden çalıştırın.", - "@aiStaleProposal": {"description":"Message for an AI result based on an old editor revision."}, + "@aiStaleProposal": { + "description": "Message for an AI result based on an old editor revision." + }, "gitAiStagedChangesChanged": "Bu commit mesajı oluşturulurken stage edilmiş değişiklikler değişti. İşlemi yeniden çalıştırın.", - "@gitAiStagedChangesChanged": {"description":"Warning shown when an AI commit-message proposal was generated from an obsolete staged diff."}, + "@gitAiStagedChangesChanged": { + "description": "Warning shown when an AI commit-message proposal was generated from an obsolete staged diff." + }, "aiViewContext": "Gönderilen bağlamı görüntüle", - "@aiViewContext": {"description":"Action that reveals the exact AI input context."}, + "@aiViewContext": { + "description": "Action that reveals the exact AI input context." + }, "aiReviewExactContent": "Tam içeriği incele", - "@aiReviewExactContent": {"description":"Action that reveals the exact content affected by and shared with an AI edit."}, + "@aiReviewExactContent": { + "description": "Action that reveals the exact content affected by and shared with an AI edit." + }, "aiContentToChange": "Değiştirilecek içerik", - "@aiContentToChange": {"description":"Label for the exact Markdown that an AI proposal may change."}, + "@aiContentToChange": { + "description": "Label for the exact Markdown that an AI proposal may change." + }, "aiContentSentToAi": "AI'ye gönderilen içerik", - "@aiContentSentToAi": {"description":"Label for the exact document context that will be sent to the configured AI provider."}, + "@aiContentSentToAi": { + "description": "Label for the exact document context that will be sent to the configured AI provider." + }, "aiApiKey": "API anahtarı", - "@aiApiKey": {"description":"Label for a cloud AI provider API key."}, + "@aiApiKey": { + "description": "Label for a cloud AI provider API key." + }, "aiApiKeyStoredHint": "Sistemin kimlik bilgileri deposunda bir anahtar saklanır", - "@aiApiKeyStoredHint": {"description":"Hint when a cloud API key is already stored."}, + "@aiApiKeyStoredHint": { + "description": "Hint when a cloud API key is already stored." + }, "aiApiKeyEnterHint": "Sağlayıcının API anahtarını girin", - "@aiApiKeyEnterHint": {"description":"Hint for entering a cloud provider API key."}, + "@aiApiKeyEnterHint": { + "description": "Hint for entering a cloud provider API key." + }, "aiReplaceApiKey": "API anahtarını değiştir", - "@aiReplaceApiKey": {"description":"Action that replaces a stored cloud provider key."}, + "@aiReplaceApiKey": { + "description": "Action that replaces a stored cloud provider key." + }, "aiSaveApiKey": "API anahtarını güvenle kaydet", - "@aiSaveApiKey": {"description":"Action that saves a cloud provider key to the system credential store."}, + "@aiSaveApiKey": { + "description": "Action that saves a cloud provider key to the system credential store." + }, "aiRemoveApiKey": "Kaydedilen API anahtarını kaldır", - "@aiRemoveApiKey": {"description":"Action that removes a cloud provider key from the system credential store."}, + "@aiRemoveApiKey": { + "description": "Action that removes a cloud provider key from the system credential store." + }, "aiCredentialSaved": "API anahtarı sistem kimlik bilgileri deposuna kaydedildi.", - "@aiCredentialSaved": {"description":"Confirmation after saving an AI provider key."}, + "@aiCredentialSaved": { + "description": "Confirmation after saving an AI provider key." + }, "aiCredentialRemoved": "Kaydedilen API anahtarı kaldırıldı.", - "@aiCredentialRemoved": {"description":"Confirmation after removing an AI provider key."}, + "@aiCredentialRemoved": { + "description": "Confirmation after removing an AI provider key." + }, "aiModelRouting": "Model yönlendirme", - "@aiModelRouting": {"description":"Settings label for AI model routing."}, + "@aiModelRouting": { + "description": "Settings label for AI model routing." + }, "aiAutomaticRouting": "Göreve göre otomatik", - "@aiAutomaticRouting": {"description":"AI model routing option that chooses by task class."}, + "@aiAutomaticRouting": { + "description": "AI model routing option that chooses by task class." + }, "aiFixedModelRouting": "Seçilen modeli kullan", - "@aiFixedModelRouting": {"description":"AI model routing option that always uses the preferred model."}, + "@aiFixedModelRouting": { + "description": "AI model routing option that always uses the preferred model." + }, "aiPreferredModel": "Tercih edilen model", - "@aiPreferredModel": {"description":"Settings label for a preferred cloud AI model."}, + "@aiPreferredModel": { + "description": "Settings label for a preferred cloud AI model." + }, "aiModel": "AI modeli", - "@aiModel": {"description":"Label for selecting a model for one AI request."}, + "@aiModel": { + "description": "Label for selecting a model for one AI request." + }, "aiUsageThisMonth": "{requests} istek · {input} girdi tokenı · {output} çıktı tokenı", - "@aiUsageThisMonth": {"description":"Local monthly AI usage summary.","placeholders":{"requests":{"type":"int"},"input":{"type":"int"},"output":{"type":"int"}}}, + "@aiUsageThisMonth": { + "description": "Local monthly AI usage summary.", + "placeholders": { + "requests": { + "type": "int" + }, + "input": { + "type": "int" + }, + "output": { + "type": "int" + } + } + }, "aiCloudConsentTitle": "{provider}'e içerik gönderilsin mi?", - "@aiCloudConsentTitle": {"description":"Cloud AI data-sharing confirmation title.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentTitle": { + "description": "Cloud AI data-sharing confirmation title.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentEnable": "{provider}'i etkinleştir", - "@aiCloudConsentEnable": {"description":"Action that confirms use of a cloud AI provider.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentEnable": { + "description": "Action that confirms use of a cloud AI provider.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiCloudConsentMessage": "Yalnızca her AI inceleme iletişim kutusunda gösterilen içerik gönderilir. İstekler durum bilgisine sahip değildir, tekliflerin incelenmesi gerekir ve API anahtarı Linux sisteminin kimlik bilgileri deposunda saklanır.", - "@aiCloudConsentMessage": {"description":"Cloud AI data-sharing and credential disclosure."}, + "@aiCloudConsentMessage": { + "description": "Cloud AI data-sharing and credential disclosure." + }, "aiCloudConsentRequired": "Önce Ayarlar → AI bölümünden {provider} ile veri paylaşımını onaylayın.", - "@aiCloudConsentRequired": {"description":"AI action error when cloud consent is missing.","placeholders":{"provider":{"type":"String"}}}, + "@aiCloudConsentRequired": { + "description": "AI action error when cloud consent is missing.", + "placeholders": { + "provider": { + "type": "String" + } + } + }, "aiGenerationVerified": "Oluşturma {model} ile doğrulandı. {count} uyumlu model kullanılabilir.", - "@aiGenerationVerified": {"description":"Successful AI model generation qualification.","placeholders":{"model":{"type":"String"},"count":{"type":"int"}}}, + "@aiGenerationVerified": { + "description": "Successful AI model generation qualification.", + "placeholders": { + "model": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, "aiColdStartObserved": "Yerel model için soğuk başlangıç gözlemlendi.", - "@aiColdStartObserved": {"description":"Additional model qualification status when local generation required a cold start."}, + "@aiColdStartObserved": { + "description": "Additional model qualification status when local generation required a cold start." + }, "aiNoCompatibleModels": "Uyumlu bir metin oluşturma modeli mevcut değil.", - "@aiNoCompatibleModels": {"description":"AI connection status when no compatible generation model is available."}, + "@aiNoCompatibleModels": { + "description": "AI connection status when no compatible generation model is available." + }, "aiEnableProvider": "Önce bir AI sağlayıcısını etkinleştirin.", - "@aiEnableProvider": {"description":"AI settings error when no provider is enabled."}, + "@aiEnableProvider": { + "description": "AI settings error when no provider is enabled." + }, "aiDraftCommitMessage": "Taslak commit mesajı", - "@aiDraftCommitMessage": {"description":"AI action that drafts a Git commit message."}, + "@aiDraftCommitMessage": { + "description": "AI action that drafts a Git commit message." + }, "aiDrafting": "Taslak hazırlanıyor…", - "@aiDrafting": {"description":"Progress label while AI drafts a commit message."}, + "@aiDrafting": { + "description": "Progress label while AI drafts a commit message." + }, "aiDraftWithAi": "AI ile taslak oluştur", - "@aiDraftWithAi": {"description":"Action that drafts a Git commit message with AI."}, + "@aiDraftWithAi": { + "description": "Action that drafts a Git commit message with AI." + }, "generateOrUpdateMarkdownToc": "İçindekiler tablosu oluştur/güncelle", - "@generateOrUpdateMarkdownToc": {"description":"Deterministic action that creates or refreshes a Markdown table of contents."}, + "@generateOrUpdateMarkdownToc": { + "description": "Deterministic action that creates or refreshes a Markdown table of contents." + }, "markdownTocTitle": "İçindekiler", - "@markdownTocTitle": {"description":"Heading inserted above a generated Markdown table of contents."}, + "@markdownTocTitle": { + "description": "Heading inserted above a generated Markdown table of contents." + }, "markdownTocUpdated": "İçindekiler tablosu {count} girişle güncellendi.", - "@markdownTocUpdated": {"description":"Confirmation after generating a Markdown table of contents.","placeholders":{"count":{"type":"int"}}}, + "@markdownTocUpdated": { + "description": "Confirmation after generating a Markdown table of contents.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "markdownTocNoHeadings": "İçindekiler tablosu oluşturmadan önce en az bir bölüm başlığı ekleyin.", - "@markdownTocNoHeadings": {"description":"Message when a Markdown document has no section headings for a generated table of contents."}, + "@markdownTocNoHeadings": { + "description": "Message when a Markdown document has no section headings for a generated table of contents." + }, "markdownTocMalformedMarkers": "BusyMark içindekiler tablosu işaretçileri eksik, yinelenmiş veya hatalı.", - "@markdownTocMalformedMarkers": {"description":"Message when a generated Markdown table-of-contents region cannot be safely updated."}, + "@markdownTocMalformedMarkers": { + "description": "Message when a generated Markdown table-of-contents region cannot be safely updated." + }, "diagnosticMarkdownHeadingSkippedLevel": "{level} başlık seviyesi {previousLevel} seviyesini takip eder; bölümün iç içe geçmesini inceleyin.", - "@diagnosticMarkdownHeadingSkippedLevel": {"description":"Accessibility diagnostic for a skipped Markdown heading level.","placeholders":{"level":{"type":"int"},"previousLevel":{"type":"int"}}}, + "@diagnosticMarkdownHeadingSkippedLevel": { + "description": "Accessibility diagnostic for a skipped Markdown heading level.", + "placeholders": { + "level": { + "type": "int" + }, + "previousLevel": { + "type": "int" + } + } + }, "diagnosticMarkdownLinkEmptyText": "Bağlantı metni boş; amacını açıklayan erişilebilir bir ad sağlayın.", - "@diagnosticMarkdownLinkEmptyText": {"description":"Accessibility diagnostic for a Markdown link without text."}, + "@diagnosticMarkdownLinkEmptyText": { + "description": "Accessibility diagnostic for a Markdown link without text." + }, "diagnosticMarkdownLinkReviewText": "“{text}” bağlantı metninin bağlamda amacını açıklayıp açıklamadığını inceleyin.", - "@diagnosticMarkdownLinkReviewText": {"description":"Accessibility hint for potentially non-descriptive Markdown link text.","placeholders":{"text":{"type":"String"}}}, + "@diagnosticMarkdownLinkReviewText": { + "description": "Accessibility hint for potentially non-descriptive Markdown link text.", + "placeholders": { + "text": { + "type": "String" + } + } + }, "diagnosticMarkdownTableEmptyHeader": "Tablo başlığı hücreleri sütunlarını tanımlamalıdır; her boş başlığı tamamlayın.", - "@diagnosticMarkdownTableEmptyHeader": {"description":"Accessibility diagnostic for an empty Markdown table header cell."}, + "@diagnosticMarkdownTableEmptyHeader": { + "description": "Accessibility diagnostic for an empty Markdown table header cell." + }, "mathRenderFailed": "Matematiksel ifade işlenemedi.", - "@mathRenderFailed": {"description":"Tooltip and diagnostic text shown when a mathematical expression cannot be rendered."}, + "@mathRenderFailed": { + "description": "Tooltip and diagnostic text shown when a mathematical expression cannot be rendered." + }, "displayMath": "Blok matematik", - "@displayMath": {"description":"Editor action that inserts a display mathematical expression."}, + "@displayMath": { + "description": "Editor action that inserts a display mathematical expression." + }, "inlineMath": "Satır içi matematik", - "@inlineMath": {"description":"Editor action that inserts an inline mathematical expression."} + "@inlineMath": { + "description": "Editor action that inserts an inline mathematical expression." + }, + "aiExplicitEditingDescription": "AI düzenleme açıkça kullanıcının isteğiyle başlatılır. BusyMark yalnızca seçili sağlayıcı için gösterilen bağlamı gönderir ve bir öneriyi hiçbiri onaylama olmadan uygulamaz.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index f8674c41..6071be66 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -276,7 +276,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -329,9 +329,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -405,7 +409,9 @@ "description": "Header title when a folder or Writerside workspace has no open editor tab." }, "shortcutDeleteTreeItemDescription": "Видалити вибраний елемент у розділі «Файли» або вилучити вибрану тему зі змісту", - "@shortcutDeleteTreeItemDescription": {"description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents."}, + "@shortcutDeleteTreeItemDescription": { + "description": "Keyboard shortcut description for deleting the selected Files item or removing the selected topic from the table of contents." + }, "shortcutGroupGeneral": "Загальні", "@shortcutGroupGeneral": { "description": "Keyboard shortcut group for general application commands." @@ -507,13 +513,21 @@ "description": "Keyboard shortcut description for redo." }, "shortcutInsertIndentation": "Вставити відступ", - "@shortcutInsertIndentation": {"description": "Keyboard shortcut label for inserting indentation."}, + "@shortcutInsertIndentation": { + "description": "Keyboard shortcut label for inserting indentation." + }, "shortcutInsertIndentationDescription": "Вставити відступ у позицію курсора", - "@shortcutInsertIndentationDescription": {"description": "Keyboard shortcut description for inserting indentation."}, + "@shortcutInsertIndentationDescription": { + "description": "Keyboard shortcut description for inserting indentation." + }, "shortcutOutdentSource": "Зменшити відступ у вихідному тексті", - "@shortcutOutdentSource": {"description": "Keyboard shortcut label for outdenting in Source mode."}, + "@shortcutOutdentSource": { + "description": "Keyboard shortcut label for outdenting in Source mode." + }, "shortcutOutdentSourceDescription": "Прибрати один рівень відступу в режимі вихідного тексту", - "@shortcutOutdentSourceDescription": {"description": "Keyboard shortcut description for outdenting in Source mode."}, + "@shortcutOutdentSourceDescription": { + "description": "Keyboard shortcut description for outdenting in Source mode." + }, "shortcutEscape": "Закрити пошук або зняти виділення блоків", "@shortcutEscape": { "description": "Keyboard shortcut label for closing search or clearing a block selection." @@ -747,28 +761,45 @@ "description": "Editing button direction option." }, "privacy": "Конфіденційність", - "@privacy": {"description": "Settings section title for privacy options."}, + "@privacy": { + "description": "Settings section title for privacy options." + }, "allowRemoteImages": "Завантажувати віддалені зображення", - "@allowRemoteImages": {"description": "Settings switch title for loading remote images."}, + "@allowRemoteImages": { + "description": "Settings switch title for loading remote images." + }, "allowRemoteImagesDescription": "Дозволяти завантаження зображень у попередньому перегляді Markdown і редакторі з URL-адрес http та https.", - "@allowRemoteImagesDescription": {"description": "Settings switch description for loading remote images."}, + "@allowRemoteImagesDescription": { + "description": "Settings switch description for loading remote images." + }, "clearRemoteImagePermissions": "Очистити дозволи для віддалених зображень", - "@clearRemoteImagePermissions": {"description": "Settings action label for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissions": { + "description": "Settings action label for clearing per-workspace remote image permissions." + }, "clearRemoteImagePermissionsDescription": "Забути робочі області, яким було дозволено завантажувати віддалені зображення.", - "@clearRemoteImagePermissionsDescription": {"description": "Settings action description for clearing per-workspace remote image permissions."}, + "@clearRemoteImagePermissionsDescription": { + "description": "Settings action description for clearing per-workspace remote image permissions." + }, "clearGitWorkspaceTrust": "Очистити список довірених робочих областей Git", - "@clearGitWorkspaceTrust": {"description": "Settings action label for clearing trusted Git workspaces."}, + "@clearGitWorkspaceTrust": { + "description": "Settings action label for clearing trusted Git workspaces." + }, "clearGitWorkspaceTrustDescription": "Запитувати перед увімкненням функцій Git для раніше довірених робочих областей.", - "@clearGitWorkspaceTrustDescription": {"description": "Settings action description for clearing trusted Git workspaces."}, - + "@clearGitWorkspaceTrustDescription": { + "description": "Settings action description for clearing trusted Git workspaces." + }, "settingsWindowSectionTitle": "Вікно", "@settingsWindowSectionTitle": { "description": "Settings section title for native window behavior." }, "settingsReopenWorkspaceOnStartupTitle": "Відкривати попередній робочий простір під час запуску", - "@settingsReopenWorkspaceOnStartupTitle": {"description":"Settings switch title for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupTitle": { + "description": "Settings switch title for reopening the previous workspace on a normal startup." + }, "settingsReopenWorkspaceOnStartupDescription": "Відкривати робочий простір і вкладки попереднього сеансу під час запуску BusyMark.", - "@settingsReopenWorkspaceOnStartupDescription": {"description":"Settings switch description for reopening the previous workspace on a normal startup."}, + "@settingsReopenWorkspaceOnStartupDescription": { + "description": "Settings switch description for reopening the previous workspace on a normal startup." + }, "settingsConfirmCloseWithUnsavedChangesTitle": "Підтверджувати закриття за наявності незбережених змін", "@settingsConfirmCloseWithUnsavedChangesTitle": { "description": "Settings switch title for close confirmation when documents have unsaved changes." @@ -897,7 +928,9 @@ "description": "HTML block command label." }, "htmlContentDefault": "Вміст HTML", - "@htmlContentDefault": {"description": "Default editable text inserted into a new HTML block."}, + "@htmlContentDefault": { + "description": "Default editable text inserted into a new HTML block." + }, "shortcutHtmlBlockDescription": "Вставити або редагувати блок HTML", "@shortcutHtmlBlockDescription": { "description": "Keyboard shortcut description for inserting or editing an HTML block." @@ -1099,18 +1132,29 @@ "description": "Placeholder shown when an image has no source." }, "remoteImageBlocked": "Віддалене зображення заблоковано", - "@remoteImageBlocked": {"description": "Placeholder label shown when a remote image is blocked."}, + "@remoteImageBlocked": { + "description": "Placeholder label shown when a remote image is blocked." + }, "remoteImageBlockedTooltip": "Виберіть, чи може BusyMark завантажувати віддалені зображення.", - "@remoteImageBlockedTooltip": {"description": "Tooltip for a blocked remote image placeholder."}, + "@remoteImageBlockedTooltip": { + "description": "Tooltip for a blocked remote image placeholder." + }, "remoteImagesBlockedTitle": "Віддалені зображення заблоковано", - "@remoteImagesBlockedTitle": {"description": "Dialog title for remote image loading permission."}, + "@remoteImagesBlockedTitle": { + "description": "Dialog title for remote image loading permission." + }, "remoteImagesBlockedMessage": "Цей документ посилається на зображення з інтернету. Їх завантаження може розкрити відомості про вашу мережу серверам, на яких розміщено зображення.", - "@remoteImagesBlockedMessage": {"description": "Dialog message explaining the privacy risk of remote images."}, + "@remoteImagesBlockedMessage": { + "description": "Dialog message explaining the privacy risk of remote images." + }, "loadRemoteImagesForWorkspace": "Завантажити для цієї робочої області", - "@loadRemoteImagesForWorkspace": {"description": "Dialog button that allows remote images for the current workspace."}, + "@loadRemoteImagesForWorkspace": { + "description": "Dialog button that allows remote images for the current workspace." + }, "alwaysLoadRemoteImages": "Завжди завантажувати віддалені зображення", - "@alwaysLoadRemoteImages": {"description": "Dialog button that enables remote images globally."}, - + "@alwaysLoadRemoteImages": { + "description": "Dialog button that enables remote images globally." + }, "hideSidebar": "Приховати бічну панель", "@hideSidebar": { "description": "Tooltip for hiding the workspace sidebar." @@ -1350,19 +1394,33 @@ "description": "Fold kind label for an XML tag." }, "sourceSearchPreviousMatch": "Попередній збіг", - "@sourceSearchPreviousMatch": {"description": "Tooltip for moving to the previous source search match."}, + "@sourceSearchPreviousMatch": { + "description": "Tooltip for moving to the previous source search match." + }, "sourceSearchNextMatch": "Наступний збіг", - "@sourceSearchNextMatch": {"description": "Tooltip for moving to the next source search match."}, + "@sourceSearchNextMatch": { + "description": "Tooltip for moving to the next source search match." + }, "sourceSearchCaseSensitive": "З урахуванням регістру", - "@sourceSearchCaseSensitive": {"description": "Tooltip for toggling case-sensitive source search."}, + "@sourceSearchCaseSensitive": { + "description": "Tooltip for toggling case-sensitive source search." + }, "sourceSearchWholeWord": "Ціле слово", - "@sourceSearchWholeWord": {"description": "Tooltip for toggling whole-word source search."}, + "@sourceSearchWholeWord": { + "description": "Tooltip for toggling whole-word source search." + }, "sourceSearchRegex": "Регулярний вираз", - "@sourceSearchRegex": {"description": "Tooltip for toggling regular-expression source search."}, + "@sourceSearchRegex": { + "description": "Tooltip for toggling regular-expression source search." + }, "sourceSearchInvalidRegex": "Некоректний регулярний вираз", - "@sourceSearchInvalidRegex": {"description": "Source search status shown when the regular expression is invalid."}, + "@sourceSearchInvalidRegex": { + "description": "Source search status shown when the regular expression is invalid." + }, "sourceLargeFileFeaturesPaused": "Великий файл: підсвічування та згортання призупинено", - "@sourceLargeFileFeaturesPaused": {"description": "Status banner shown when source highlighting and folding are disabled for a large file."}, + "@sourceLargeFileFeaturesPaused": { + "description": "Status banner shown when source highlighting and folding are disabled for a large file." + }, "nothingToRead": "Немає вмісту для читання", "admonition": "Блок-примітка", "quote": "Цитата", @@ -2201,25 +2259,39 @@ "git": "Git", "gitDiff": "Відмінності Git", "gitShowDiff": "Показати відмінності", - "@gitShowDiff": {"description": "Menu action that opens the diff for a file in Git history."}, + "@gitShowDiff": { + "description": "Menu action that opens the diff for a file in Git history." + }, "gitDiffHunkRange": "старий діапазон {oldRange} → новий {newRange}", "@gitDiffHunkRange": { "description": "Readable old-to-new line range shown for a Git diff hunk.", "placeholders": { - "oldRange": {"type": "String"}, - "newRange": {"type": "String"} + "oldRange": { + "type": "String" + }, + "newRange": { + "type": "String" + } } }, "gitDiffNoLines": "немає рядків", - "@gitDiffNoLines": {"description": "Line range text for an empty side of a Git diff hunk."}, + "@gitDiffNoLines": { + "description": "Line range text for an empty side of a Git diff hunk." + }, "gitUnavailableTitle": "Git недоступний", "gitUnavailableMessage": "{reason, select, other{Установіть Git або налаштуйте BusyMark на використання доступного виконуваного файлу Git. {reason}}}", "gitTrustRequiredTitle": "Довіряти цій робочій області під час роботи з Git?", - "@gitTrustRequiredTitle": {"description": "Git empty state title shown before repository-controlled commands may run."}, + "@gitTrustRequiredTitle": { + "description": "Git empty state title shown before repository-controlled commands may run." + }, "gitTrustRequiredMessage": "Репозиторії Git можуть запускати програми за допомогою хуків, фільтрів та інших налаштувань. Позначте цю робочу область як довірену, перш ніж BusyMark прочитає дані репозиторію або ввімкне дії Git.", - "@gitTrustRequiredMessage": {"description": "Security warning shown before Git repository access is enabled for a workspace."}, + "@gitTrustRequiredMessage": { + "description": "Security warning shown before Git repository access is enabled for a workspace." + }, "gitTrustWorkspace": "Довіряти робочій області", - "@gitTrustWorkspace": {"description": "Action label for trusting a workspace before enabling Git."}, + "@gitTrustWorkspace": { + "description": "Action label for trusting a workspace before enabling Git." + }, "gitNotRepositoryTitle": "Це не репозиторій Git", "gitNotRepositoryMessage": "Ця робоча область не належить до репозиторію Git.", "gitInitializeRepository": "Ініціалізувати репозиторій", @@ -2261,15 +2333,15 @@ "gitBinaryFile": "Двійковий файл. BusyMark не відображає двійкові патчі.", "gitUnsavedChangesBanner": "Незбережені зміни в редакторі не буде враховано, доки ви їх не збережете.", "gitConfirmDiscardTitle": "Відкинути зміни Git?", - "gitConfirmDiscardTracked": "{count, plural, one{Вибраний відстежуваний файл буде відновлено з Git.} few{Вибрані відстежувані файли буде відновлено з Git.} many{Вибрані відстежувані файли буде відновлено з Git.} other{Вибрані відстежувані файли буде відновлено з Git.}}", + "gitConfirmDiscardTracked": "{count, plural, =1{Усі індексовані та неіндексовані зміни у вибраному файлі з відстеженням будуть відновлені в HEAD.} other{Усі індексовані та неіндексовані зміни в обраних файлах з відстеженням будуть відновлені в HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, one{Вибраний невідстежуваний файл буде видалено.} few{Вибрані невідстежувані файли буде видалено.} many{Вибрані невідстежувані файли буде видалено.} other{Вибрані невідстежувані файли буде видалено.}}", "gitConfirmDiscardMixed": "{count, plural, one{Вибраний файл буде відновлено або видалено залежно від його стану Git.} few{Вибрані файли буде відновлено або видалено залежно від їхнього стану Git.} many{Вибрані файли буде відновлено або видалено залежно від їхнього стану Git.} other{Вибрані файли буде відновлено або видалено залежно від їхнього стану Git.}}", "gitConfirmSwitchBranchTitle": "Перемкнутися на {branch}?", "gitConfirmSwitchBranchMessage": "BusyMark перезавантажить робочу область із диска після перемикання гілки в Git.", "gitConfirmPushSetUpstreamTitle": "Налаштувати upstream-гілку?", "gitConfirmPushSetUpstreamMessage": "Ця гілка не має upstream-гілки. BusyMark може надіслати гілку {branch} і призначити її upstream-гілкою, якщо налаштовано рівно один віддалений репозиторій.", - "gitProjectHistory": "Проєкт", - "gitFileHistory": "Поточний файл", + "gitProjectHistory": "Історія проєкту", + "gitFileHistory": "Історія файлу", "gitAdditionsDeletions": "+{additions} -{deletions}", "fileActions": "Дії з файлом", "actions": "Дії", @@ -2304,73 +2376,138 @@ "gitErrorNetwork": "Не вдалося виконати мережеву операцію Git.", "gitErrorConflict": "Git повідомив про нерозв’язані конфлікти.", "gitErrorCommandFailed": "Не вдалося виконати команду Git.", - "markdownAndHtml": "Markdown і HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, + "@markdownAndHtml": { + "description": "Markdown and HTML reference dialog title and menu item." + }, "markdownHtmlMarkdownBlocks": "Блоки Markdown", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocks": { + "description": "Reference section title for Markdown block syntax." + }, "markdownHtmlMarkdownBlocksDescription": "Блокові структури, що підтримуються у вихідному Markdown і попередньому перегляді.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "@markdownHtmlMarkdownBlocksDescription": { + "description": "Reference section description for Markdown block syntax." + }, "markdownHtmlInlineFormatting": "Вбудований Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "@markdownHtmlInlineFormatting": { + "description": "Reference section title for Markdown inline syntax." + }, "markdownHtmlInlineFormattingDescription": "Форматування всередині абзаців, елементів списків і комірок таблиць.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "@markdownHtmlInlineFormattingDescription": { + "description": "Reference section description for Markdown inline syntax." + }, "markdownHtmlRawHtmlBlocks": "Блоки необробленого HTML", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocks": { + "description": "Reference section title for supported raw HTML block tags." + }, "markdownHtmlRawHtmlBlocksDescription": "Безпечні блокові HTML-теги, що відображаються через віджети перегляду BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "@markdownHtmlRawHtmlBlocksDescription": { + "description": "Reference section description for supported raw HTML block tags." + }, "markdownHtmlRawHtmlInline": "Вбудовані HTML-теги", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInline": { + "description": "Reference section title for supported raw HTML inline tags." + }, "markdownHtmlRawHtmlInlineDescription": "Безпечні вбудовані HTML-теги відображаються без показу самих тегів.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "@markdownHtmlRawHtmlInlineDescription": { + "description": "Reference section description for supported raw HTML inline tags." + }, "markdownHtmlSafety": "Правила безпеки", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, + "@markdownHtmlSafety": { + "description": "Reference section title for raw HTML safety rules." + }, "markdownHtmlSafetyDescription": "Необроблений HTML аналізується й очищується перед попереднім переглядом.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "@markdownHtmlSafetyDescription": { + "description": "Reference section description for raw HTML safety rules." + }, "markdownHtmlHeadings": "Заголовки", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, + "@markdownHtmlHeadings": { + "description": "Reference row label for Markdown headings." + }, "markdownHtmlParagraphs": "Абзаци", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "@markdownHtmlParagraphs": { + "description": "Reference row label for Markdown paragraphs." + }, "markdownHtmlLists": "Списки", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, + "@markdownHtmlLists": { + "description": "Reference row label for list syntax." + }, "markdownHtmlHtmlContainers": "Контейнери", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "@markdownHtmlHtmlContainers": { + "description": "Reference row label for HTML container tags." + }, "markdownHtmlHtmlTextBlocks": "Текстові блоки", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "@markdownHtmlHtmlTextBlocks": { + "description": "Reference row label for HTML text block tags." + }, "markdownHtmlHtmlFigures": "Фігури та зображення", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "@markdownHtmlHtmlFigures": { + "description": "Reference row label for HTML figure and image tags." + }, "markdownHtmlHtmlPreformatted": "Попередньо форматований код", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "@markdownHtmlHtmlPreformatted": { + "description": "Reference row label for HTML preformatted/code tags." + }, "markdownHtmlHtmlDisclosure": "Розкривні блоки", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "@markdownHtmlHtmlDisclosure": { + "description": "Reference row label for HTML details/summary tags." + }, "markdownHtmlHtmlDescriptionLists": "Списки описів", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "@markdownHtmlHtmlDescriptionLists": { + "description": "Reference row label for HTML description list tags." + }, "markdownHtmlHtmlFormattingTags": "Теги форматування", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "@markdownHtmlHtmlFormattingTags": { + "description": "Reference row label for HTML inline formatting tags." + }, "markdownHtmlHtmlInlineCodeTags": "Вбудовані теги коду", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "@markdownHtmlHtmlInlineCodeTags": { + "description": "Reference row label for HTML inline code-related tags." + }, "markdownHtmlHtmlNeutralInlineTags": "Семантичні текстові теги", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "@markdownHtmlHtmlNeutralInlineTags": { + "description": "Reference row label for HTML inline semantic tags that render as text." + }, "markdownHtmlSanitizedPreview": "Очищений перегляд", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreview": { + "description": "Reference row label for sanitized preview behavior." + }, "markdownHtmlSanitizedPreviewDescription": "Дозволений HTML перетворюється на блоки перегляду BusyMark, а не відтворюється в браузері.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "@markdownHtmlSanitizedPreviewDescription": { + "description": "Reference row description for sanitized preview behavior." + }, "markdownHtmlSourcePreserved": "Вихідний текст зберігається", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "@markdownHtmlSourcePreserved": { + "description": "Reference row label for raw source preservation." + }, "markdownHtmlSourcePreservedDescription": "Незмінений необроблений HTML зберігається точно як вихідний текст.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "@markdownHtmlSourcePreservedDescription": { + "description": "Reference row description for raw source preservation." + }, "markdownHtmlMarkdownInsideHtml": "Markdown всередині HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtml": { + "description": "Reference row label for Markdown inside raw HTML." + }, "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-розмітка всередині необробленого HTML відображається як звичайний текст.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "@markdownHtmlMarkdownInsideHtmlDescription": { + "description": "Reference row description for Markdown inside raw HTML." + }, "markdownHtmlBlockedContent": "Активний вміст заблоковано", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "@markdownHtmlBlockedContent": { + "description": "Reference row label for blocked HTML content." + }, "markdownHtmlBlockedContentDescription": "Скрипти, стилі, фрейми, форми, SVG, MathML, події та небезпечні атрибути блокуються.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "@markdownHtmlBlockedContentDescription": { + "description": "Reference row description for blocked HTML content." + }, "markdownHtmlSafeUrls": "Лише безпечні URL", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, + "@markdownHtmlSafeUrls": { + "description": "Reference row label for safe URL policy." + }, "markdownHtmlSafeUrlsDescription": "Посилання дозволяють http, https, mailto, tel, відносні URL і фрагменти; небезпечні схеми блокуються.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "@markdownHtmlSafeUrlsDescription": { + "description": "Reference row description for safe URL policy." + }, "addToGit": "Додати до Git", "delete": "Видалити", "newFile": "Новий файл", @@ -2388,101 +2525,294 @@ "errorFileOperationOutsideRoot": "Файлова операція має виконуватися в межах робочої області.", "errorFileOperationRoot": "Корінь робочої області не можна змінити з дерева файлів.", "safeDeleteTopicFile": "Безпечно видалити файл теми…", - "@safeDeleteTopicFile": {"description": "Action that safely deletes a Writerside topic file after finding usages."}, + "@safeDeleteTopicFile": { + "description": "Action that safely deletes a Writerside topic file after finding usages." + }, "removeTocElement": "Вилучити елемент змісту", - "@removeTocElement": {"description": "Action that removes a topic element from the selected table of contents."}, + "@removeTocElement": { + "description": "Action that removes a topic element from the selected table of contents." + }, "reviewUsages": "Переглянути використання", - "@reviewUsages": {"description": "Action that opens the topic usage review."}, + "@reviewUsages": { + "description": "Action that opens the topic usage review." + }, "deleteTopicFile": "Видалити файл теми", - "@deleteTopicFile": {"description": "Action that deletes a Writerside topic file."}, + "@deleteTopicFile": { + "description": "Action that deletes a Writerside topic file." + }, "removeAction": "Вилучити", - "@removeAction": {"description": "Generic remove action label."}, + "@removeAction": { + "description": "Generic remove action label." + }, "topicRemovalSummary": "Вилучити «{topic}» із вибраного екземпляра. Файл теми буде збережено.", - "@topicRemovalSummary": {"description": "Summary of removing a topic from one TOC while keeping its file.", "placeholders": {"topic": {"type": "String"}}}, + "@topicRemovalSummary": { + "description": "Summary of removing a topic from one TOC while keeping its file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "safeDeleteTopicSummary": "Видалити «{topic}» і безпечно оновити посилання на неї в усьому цьому проєкті Writerside.", - "@safeDeleteTopicSummary": {"description": "Summary of safely deleting a topic file.", "placeholders": {"topic": {"type": "String"}}}, + "@safeDeleteTopicSummary": { + "description": "Summary of safely deleting a topic file.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "childTopicsPromoted": "{count, plural, one{1 дочірню тему буде переміщено на рівень вище.} few{{count} дочірні теми буде переміщено на рівень вище.} many{{count} дочірніх тем буде переміщено на рівень вище.} other{{count} дочірньої теми буде переміщено на рівень вище.}}", - "@childTopicsPromoted": {"description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", "placeholders": {"count": {"type": "int"}}}, + "@childTopicsPromoted": { + "description": "Explains that direct child topics will be promoted when their parent TOC element is removed.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "topicIsStartPageRemovalWarning": "Ця тема використовується як початкова сторінка екземпляра. Перегляньте її використання та призначте іншу початкову сторінку, перш ніж продовжити.", - "@topicIsStartPageRemovalWarning": {"description": "Warning shown when the topic is used as an instance start page."}, + "@topicIsStartPageRemovalWarning": { + "description": "Warning shown when the topic is used as an instance start page." + }, "topicUsagesCount": "Використання ({count})", - "@topicUsagesCount": {"description": "Number of discovered topic usages.", "placeholders": {"count": {"type": "int"}}}, + "@topicUsagesCount": { + "description": "Number of discovered topic usages.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "noBreakingTopicUsages": "Посилань, які перестали б працювати, не знайдено.", - "@noBreakingTopicUsages": {"description": "Message shown when removal will not leave breaking topic usages."}, + "@noBreakingTopicUsages": { + "description": "Message shown when removal will not leave breaking topic usages." + }, "topicUsagesFound": "BusyMark знайшов наведені нижче посилання на цю тему.", - "@topicUsagesFound": {"description": "Heading for topic usages found by safe delete."}, + "@topicUsagesFound": { + "description": "Heading for topic usages found by safe delete." + }, "topicUsageTocElements": "Елементи змісту", - "@topicUsageTocElements": {"description": "Usage group label for TOC elements."}, + "@topicUsageTocElements": { + "description": "Usage group label for TOC elements." + }, "topicUsageStartPages": "Початкові сторінки", - "@topicUsageStartPages": {"description": "Usage group label for instance start pages."}, + "@topicUsageStartPages": { + "description": "Usage group label for instance start pages." + }, "topicUsageTopicLinks": "Посилання на теми", - "@topicUsageTopicLinks": {"description": "Usage group label for links to the topic."}, + "@topicUsageTopicLinks": { + "description": "Usage group label for links to the topic." + }, "topicUsageIncludes": "Включення", - "@topicUsageIncludes": {"description": "Usage group label for topic includes."}, + "@topicUsageIncludes": { + "description": "Usage group label for topic includes." + }, "usageCount": "{count, plural, one{1 використання} few{{count} використання} many{{count} використань} other{{count} використання}}", - "@usageCount": {"description": "Compact topic usage count.", "placeholders": {"count": {"type": "int"}}}, + "@usageCount": { + "description": "Compact topic usage count.", + "placeholders": { + "count": { + "type": "int" + } + } + }, "refactoringOptions": "Параметри рефакторингу", - "@refactoringOptions": {"description": "Heading for safe-delete refactoring options."}, + "@refactoringOptions": { + "description": "Heading for safe-delete refactoring options." + }, "updateUsagesAutomatically": "Оновити використання автоматично", - "@updateUsagesAutomatically": {"description": "Option to update supported topic usages automatically."}, + "@updateUsagesAutomatically": { + "description": "Option to update supported topic usages automatically." + }, "updateUsagesAutomaticallyDescription": "Вилучити посилання зі змісту й включення та зберегти текст посилань.", - "@updateUsagesAutomaticallyDescription": {"description": "Description of automatic topic usage updates."}, + "@updateUsagesAutomaticallyDescription": { + "description": "Description of automatic topic usage updates." + }, "manualUsageUpdatesRequired": "Деякі використання потрібно змінити вручну перед цим рефакторингом.", - "@manualUsageUpdatesRequired": {"description": "Message shown when usages require manual updates."}, + "@manualUsageUpdatesRequired": { + "description": "Message shown when usages require manual updates." + }, "setRedirectTo": "Переспрямувати на", - "@setRedirectTo": {"description": "Option to redirect the removed topic URL to another topic."}, + "@setRedirectTo": { + "description": "Option to redirect the removed topic URL to another topic." + }, "noRedirectDescription": "Не переспрямовувати стару опубліковану сторінку.", - "@noRedirectDescription": {"description": "Description for choosing no redirect target."}, + "@noRedirectDescription": { + "description": "Description for choosing no redirect target." + }, "redirectTarget": "Ціль переспрямування", - "@redirectTarget": {"description": "Field label for selecting a redirect target."}, + "@redirectTarget": { + "description": "Field label for selecting a redirect target." + }, "remainingUsagesBlockRemoval": "Перегляньте й оновіть решту використань, перш ніж продовжити, або ввімкніть автоматичне оновлення, якщо воно доступне.", - "@remainingUsagesBlockRemoval": {"description": "Message explaining that unresolved usages block removal."}, + "@remainingUsagesBlockRemoval": { + "description": "Message explaining that unresolved usages block removal." + }, "usagesOfTopic": "Використання теми {topic}", - "@usagesOfTopic": {"description": "Title for the usage review of a topic.", "placeholders": {"topic": {"type": "String"}}}, + "@usagesOfTopic": { + "description": "Title for the usage review of a topic.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "noUsagesFound": "Використань не знайдено", - "@noUsagesFound": {"description": "Empty state shown when no topic usages were found."}, + "@noUsagesFound": { + "description": "Empty state shown when no topic usages were found." + }, "outsideSelectedInstance": "поза вибраним екземпляром", - "@outsideSelectedInstance": {"description": "Label for a usage outside the selected Writerside instance."}, + "@outsideSelectedInstance": { + "description": "Label for a usage outside the selected Writerside instance." + }, "doRefactor": "Виконати рефакторинг", - "@doRefactor": {"description": "Action that applies the selected safe-delete refactoring."}, + "@doRefactor": { + "description": "Action that applies the selected safe-delete refactoring." + }, "orphanTopicTitle": "Файл теми більше не використовується", - "@orphanTopicTitle": {"description": "Title shown when a removed topic file has become orphaned."}, + "@orphanTopicTitle": { + "description": "Title shown when a removed topic file has become orphaned." + }, "keepTopicFile": "Зберегти файл теми", - "@keepTopicFile": {"description": "Action that keeps an orphaned topic file."}, + "@keepTopicFile": { + "description": "Action that keeps an orphaned topic file." + }, "orphanTopicMessage": "«{topic}» більше ніде не використовується в цьому проєкті Writerside. Видаліть файл або збережіть його для використання в іншому екземплярі.", - "@orphanTopicMessage": {"description": "Prompt to safely delete a topic after its final TOC element is removed.", "placeholders": {"topic": {"type": "String"}}}, + "@orphanTopicMessage": { + "description": "Prompt to safely delete a topic after its final TOC element is removed.", + "placeholders": { + "topic": { + "type": "String" + } + } + }, "errorWritersideSafeDeleteRequired": "Використовуйте безпечне видалення для файлів тем Writerside.", - "@errorWritersideSafeDeleteRequired": {"description": "Detail shown when a Writerside topic file must be deleted through Safe Delete."}, + "@errorWritersideSafeDeleteRequired": { + "description": "Detail shown when a Writerside topic file must be deleted through Safe Delete." + }, "errorWritersideTopicUsageScanFailed": "Не вдалося завершити пошук використань теми. Жоден файл не змінено.", - "@errorWritersideTopicUsageScanFailed": {"description": "Error shown when safe-delete usage analysis cannot complete reliably."}, + "@errorWritersideTopicUsageScanFailed": { + "description": "Error shown when safe-delete usage analysis cannot complete reliably." + }, "errorWritersideTopicUsagesRemain": "Деякі використання теми все ще потребують уваги. Перегляньте їх, перш ніж продовжити.", - "@errorWritersideTopicUsagesRemain": {"description": "Error shown when unresolved topic usages block removal."}, + "@errorWritersideTopicUsagesRemain": { + "description": "Error shown when unresolved topic usages block removal." + }, "errorWritersideRedirectInvalid": "Вибрана ціль переспрямування більше не дійсна. Виберіть її знову.", - "@errorWritersideRedirectInvalid": {"description": "Error shown when a safe-delete redirect target is stale or conflicts."}, + "@errorWritersideRedirectInvalid": { + "description": "Error shown when a safe-delete redirect target is stale or conflicts." + }, "errorWritersideRollbackFailed": "Не вдалося повністю відкотити видалення теми. Перш ніж продовжити, перевірте такі шляхи: {paths}", - "@errorWritersideRollbackFailed": {"description": "Error shown when safe-delete recovery leaves files requiring manual review.", "placeholders": {"paths": {"type": "String"}}}, - "exportAsPdf": "Експортувати як PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active Markdown document as PDF."}, - "pdfExportDescription": "Виберіть макет сторінки для охайного автономного PDF-файлу.", "@pdfExportDescription": {"description": "Introductory text in the PDF export options dialog."}, - "pdfRemoteImagesNote": "Віддалені зображення під час експорту не завантажуються. Доступні локальні зображення буде додано.", "@pdfRemoteImagesNote": {"description": "Privacy note explaining image handling during PDF export."}, - "pdfPageSize": "Розмір сторінки", "@pdfPageSize": {"description": "PDF export page-size setting."}, - "pdfPageSizeA4": "A4", "@pdfPageSizeA4": {"description": "A4 PDF page-size option."}, - "pdfPageSizeLetter": "US Letter", "@pdfPageSizeLetter": {"description": "US Letter PDF page-size option."}, - "pdfOrientation": "Орієнтація", "@pdfOrientation": {"description": "PDF export page-orientation setting."}, - "pdfPortrait": "Книжкова", "@pdfPortrait": {"description": "Portrait PDF page-orientation option."}, - "pdfLandscape": "Альбомна", "@pdfLandscape": {"description": "Landscape PDF page-orientation option."}, - "pdfMargins": "Поля", "@pdfMargins": {"description": "PDF export page-margin setting."}, - "pdfMarginNarrow": "Вузькі", "@pdfMarginNarrow": {"description": "Narrow PDF page-margin option."}, - "pdfMarginNormal": "Звичайні", "@pdfMarginNormal": {"description": "Normal PDF page-margin option."}, - "pdfMarginWide": "Широкі", "@pdfMarginWide": {"description": "Wide PDF page-margin option."}, - "pdfIncludePageNumbers": "Додати номери сторінок", "@pdfIncludePageNumbers": {"description": "Toggle for page numbers in an exported PDF."}, - "export": "Експортувати", "@export": {"description": "Button label that starts an export."}, - "exportingPdf": "Експорт PDF…", "@exportingPdf": {"description": "Progress dialog title while a PDF is being exported."}, - "fileTypePdf": "Документ PDF", "@fileTypePdf": {"description": "File picker label for PDF documents."}, - "pdfExported": "Файл {fileName} експортовано.", "@pdfExported": {"description": "PDF export success message.", "placeholders": {"fileName": {"type": "String"}}}, - "pdfExportedWithWarnings": "Файл {fileName} експортовано. Не вдалося додати зображень: {count}.", "@pdfExportedWithWarnings": {"description": "PDF export success message when some images were omitted.", "placeholders": {"fileName": {"type": "String"}, "count": {"type": "int"}}}, - "pdfExportUnavailable": "Компонент експорту PDF відсутній. Перевстановіть BusyMark і повторіть спробу.", "@pdfExportUnavailable": {"description": "Error shown when the bundled PDF compiler is unavailable."}, - "pdfExportTimedOut": "Експорт PDF тривав надто довго й був зупинений.", "@pdfExportTimedOut": {"description": "Error shown when PDF compilation times out."}, - "pdfExportFailed": "BusyMark не вдалося експортувати цей документ як PDF.", "@pdfExportFailed": {"description": "Generic PDF export failure message."}, + "@errorWritersideRollbackFailed": { + "description": "Error shown when safe-delete recovery leaves files requiring manual review.", + "placeholders": { + "paths": { + "type": "String" + } + } + }, + "exportAsPdf": "Експортувати як PDF", + "@exportAsPdf": { + "description": "Menu action and dialog title for exporting the active Markdown document as PDF." + }, + "pdfExportDescription": "Виберіть макет сторінки для охайного автономного PDF-файлу.", + "@pdfExportDescription": { + "description": "Introductory text in the PDF export options dialog." + }, + "pdfRemoteImagesNote": "Віддалені зображення під час експорту не завантажуються. Доступні локальні зображення буде додано.", + "@pdfRemoteImagesNote": { + "description": "Privacy note explaining image handling during PDF export." + }, + "pdfPageSize": "Розмір сторінки", + "@pdfPageSize": { + "description": "PDF export page-size setting." + }, + "pdfPageSizeA4": "A4", + "@pdfPageSizeA4": { + "description": "A4 PDF page-size option." + }, + "pdfPageSizeLetter": "US Letter", + "@pdfPageSizeLetter": { + "description": "US Letter PDF page-size option." + }, + "pdfOrientation": "Орієнтація", + "@pdfOrientation": { + "description": "PDF export page-orientation setting." + }, + "pdfPortrait": "Книжкова", + "@pdfPortrait": { + "description": "Portrait PDF page-orientation option." + }, + "pdfLandscape": "Альбомна", + "@pdfLandscape": { + "description": "Landscape PDF page-orientation option." + }, + "pdfMargins": "Поля", + "@pdfMargins": { + "description": "PDF export page-margin setting." + }, + "pdfMarginNarrow": "Вузькі", + "@pdfMarginNarrow": { + "description": "Narrow PDF page-margin option." + }, + "pdfMarginNormal": "Звичайні", + "@pdfMarginNormal": { + "description": "Normal PDF page-margin option." + }, + "pdfMarginWide": "Широкі", + "@pdfMarginWide": { + "description": "Wide PDF page-margin option." + }, + "pdfIncludePageNumbers": "Додати номери сторінок", + "@pdfIncludePageNumbers": { + "description": "Toggle for page numbers in an exported PDF." + }, + "export": "Експортувати", + "@export": { + "description": "Button label that starts an export." + }, + "exportingPdf": "Експорт PDF…", + "@exportingPdf": { + "description": "Progress dialog title while a PDF is being exported." + }, + "fileTypePdf": "Документ PDF", + "@fileTypePdf": { + "description": "File picker label for PDF documents." + }, + "pdfExported": "Файл {fileName} експортовано.", + "@pdfExported": { + "description": "PDF export success message.", + "placeholders": { + "fileName": { + "type": "String" + } + } + }, + "pdfExportedWithWarnings": "{fileName} експортовано з {count, plural, =1{1 попередженням} other{{count} попередженнями}}.", + "@pdfExportedWithWarnings": { + "description": "PDF export success message when some images were omitted.", + "placeholders": { + "fileName": { + "type": "String" + }, + "count": { + "type": "int" + } + } + }, + "pdfExportUnavailable": "Компонент експорту PDF відсутній. Перевстановіть BusyMark і повторіть спробу.", + "@pdfExportUnavailable": { + "description": "Error shown when the bundled PDF compiler is unavailable." + }, + "pdfExportTimedOut": "Експорт PDF тривав надто довго й був зупинений.", + "@pdfExportTimedOut": { + "description": "Error shown when PDF compilation times out." + }, + "pdfExportFailed": "BusyMark не вдалося експортувати цей документ як PDF.", + "@pdfExportFailed": { + "description": "Generic PDF export failure message." + }, "visualizationRendering": "Візуалізація…", "visualizationStale": "Відображається останній коректний результат", "visualizationShowSource": "Показати вихідний код", @@ -2503,11 +2833,14 @@ "visualizationRenderFailed": "Не вдалося відобразити цю візуалізацію.", "visualizationRetry": "Повторити", "visualizationSaved": "Файл {fileName} збережено", - "shortcutExportPdfDescription": "Експортувати активний документ або модуль Writerside як PDF.", "@shortcutExportPdfDescription": {"description": "Keyboard-shortcut description for PDF export."}, + "shortcutExportPdfDescription": "Експортувати активний документ або модуль Writerside як PDF.", + "@shortcutExportPdfDescription": { + "description": "Keyboard-shortcut description for PDF export." + }, "gitStaged": "Індексовані", "gitUnstaged": "Неіндексовані", "gitFetch": "Отримати", - "gitStagedFileCount": "{count, plural, =1{1 індексований файл} other{{count} індексованих файлів}}", + "gitStagedFileCount": "{count, plural, =1{1 проіндексований файл} few{{count} проіндексовані файли} many{{count} проіндексованих файлів} other{{count} проіндексованих файлів}}", "gitOutsideWorkspace": "Поза робочим простором", "gitFileHistoryRequiresOpenFile": "Для історії файлу потрібен відкритий файл Markdown.", "gitLoadMore": "Завантажити ще", @@ -2620,7 +2953,6 @@ "ai": "ШІ", "aiLocalOllama": "Локальний Ollama", "aiDisabled": "Вимкнено", - "aiLocalOnlyDescription": "Редагування за допомогою ШІ запускається лише явно. BusyMark надсилає вибраному постачальнику тільки показаний контекст і ніколи не застосовує пропозицію без перевірки.", "aiProvider": "Постачальник ШІ", "aiDefaultProvider": "Постачальник за замовчуванням", "aiConfigureProvider": "Налаштувати постачальника", @@ -2704,7 +3036,7 @@ "tableAlignmentCenter": "Вирівнювання: по центру", "tableAlignmentRight": "Вирівнювання: праворуч", "sourceSearchReplacement": "Замінити на", - "sourceSearchReplaceCurrent": "Замінити поточне", + "sourceSearchReplaceCurrent": "Замінити поточний збіг", "sourceSearchReplaceAndFindNext": "Замінити й знайти наступне", "sourceSearchReplaceAll": "Замінити все", "workspaceReplace": "Замінити в робочій області", @@ -2734,14 +3066,18 @@ "reloadFromDisk": "Перезавантажити з диска", "keepMine": "Залишити мою версію", "saveAs": "Зберегти як", - "unsavedChangesMultipleMessage": "У документах ({count}) є незбережені зміни. Зберегти їх перед продовженням?", + "unsavedChangesMultipleMessage": "{count, plural, =1{1 документ має незбережені зміни. Збережіть його перед продовженням.} other{{count} документів мають незбережені зміни. Збережіть кожен перед продовженням.}}", "workspaceReplaceIssuePartialConflict": "Відкат зупинено, оскільки файл було одночасно змінено. Деякі заміни могли залишитися; витіснений вміст збережено за шляхом нижче.", "workspaceReplaceIssueApplyFailed": "Заміни не застосовано, оскільки перевірений набір не вдалося безпечно зберегти.", - "workspaceRecoveryRestored": "Відновлено незбережених документів: {count}. Перегляньте кожен відновлений документ перед продовженням.", - "workspaceRecoveryDamaged": "Не вдалося відновити пошкоджені записи ({count}). Коректні відновлені документи залишаються доступними.", + "workspaceRecoveryRestored": "{count, plural, =1{Відновлено 1 незбережений документ. Перегляньте його перед збереженням або відхиленням.} other{Відновлено {count} незбережених документів. Перегляньте кожен перед збереженням або відхиленням.}}", + "workspaceRecoveryDamaged": "{count, plural, =1{Не вдалося відновити 1 пошкоджений запис відновлення. Оригінальний файл відновлення збережено для перегляду.} other{{count} пошкоджених записів відновлення не вдалося відновити. Дійсні записи відновлення залишаються доступними.}}", "recoveredDocumentReview": "Відновлено незбережений вміст файлу {fileName}. Перегляньте його, потім збережіть, збережіть як новий файл або відкиньте.", "commandUnavailableInContext": "Ця команда недоступна в поточному контексті.", "mathRenderFailed": "Не вдалося відобразити математичний вираз.", "inlineMath": "Формула в рядку", - "displayMath": "Формула окремим блоком" + "displayMath": "Формула окремим блоком", + "aiExplicitEditingDescription": "Редагування за допомогою ШІ запускається лише явно. BusyMark надсилає вибраному постачальнику тільки показаний контекст і ніколи не застосовує пропозицію без перевірки.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." + } } diff --git a/lib/l10n/app_vi.arb b/lib/l10n/app_vi.arb index d84675a2..cfc9ea87 100644 --- a/lib/l10n/app_vi.arb +++ b/lib/l10n/app_vi.arb @@ -72,7 +72,7 @@ "@feedbackMessage": { "description": "Detailed feedback message field label." }, - "feedbackReplyEmail": "Email nhận phản hồi (tùy chọn)", + "feedbackReplyEmail": "Email để trả lời (tùy chọn)", "@feedbackReplyEmail": { "description": "Optional reply email field label." }, @@ -406,7 +406,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -459,9 +459,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -486,7 +490,7 @@ "@validate": { "description": "Validate action label." }, - "validation": "Xác thực", + "validation": "Xác minh", "@validation": { "description": "Settings section title for validation options." }, @@ -794,11 +798,11 @@ "@directoryName": { "description": "Create project dialog field label." }, - "instanceName": "Tên phiên bản", + "instanceName": "Tên thực thể", "@instanceName": { "description": "Create project dialog field label." }, - "instanceId": "ID phiên bản", + "instanceId": "ID thực thể", "@instanceId": { "description": "Create project dialog field label." }, @@ -1494,7 +1498,7 @@ "@removeTocElement": { "description": "Writerside action and dialog title for removing a topic from one table of contents." }, - "reviewUsages": "Xem lại cách sử dụng", + "reviewUsages": "Xem lại các tham chiếu", "@reviewUsages": { "description": "Action that opens the Writerside topic usages review." }, @@ -1506,7 +1510,7 @@ "@removeAction": { "description": "Short action label for removing an item without deleting its source file." }, - "topicRemovalSummary": "Xóa “{topic}” khỏi phiên bản đã chọn. Tệp chủ đề sẽ được giữ lại.", + "topicRemovalSummary": "Xóa “{topic}” khỏi thực thể đã chọn. Tệp chủ đề sẽ được giữ lại.", "@topicRemovalSummary": { "description": "Summary in the dialog for removing a topic from one Writerside instance.", "placeholders": { @@ -1533,11 +1537,11 @@ } } }, - "topicIsStartPageRemovalWarning": "Chủ đề này đang được dùng làm trang bắt đầu của một phiên bản. Hãy xem lại cách sử dụng và chỉ định trang bắt đầu khác trước khi tiếp tục.", + "topicIsStartPageRemovalWarning": "Chủ đề này đang được dùng làm trang bắt đầu của một thực thể. Hãy xem lại cách sử dụng và chỉ định trang bắt đầu khác trước khi tiếp tục.", "@topicIsStartPageRemovalWarning": { "description": "Warning that blocks deletion of a Writerside start-page topic." }, - "topicUsagesCount": "Cách sử dụng ({count})", + "topicUsagesCount": "Các tham chiếu ({count})", "@topicUsagesCount": { "description": "Heading with the number of Writerside topic usages.", "placeholders": { @@ -1566,7 +1570,7 @@ "@topicUsageTopicLinks": { "description": "Usage group label for links to a Writerside topic." }, - "topicUsageIncludes": "Nội dung bao gồm", + "topicUsageIncludes": "Các phần tử include", "@topicUsageIncludes": { "description": "Usage group label for Writerside include elements." }, @@ -1624,7 +1628,7 @@ "@noUsagesFound": { "description": "Empty state in the Writerside usages review." }, - "outsideSelectedInstance": "bên ngoài phiên bản đã chọn", + "outsideSelectedInstance": "bên ngoài thực thể đã chọn", "@outsideSelectedInstance": { "description": "Marker for a usage outside the selected Writerside instance." }, @@ -1640,7 +1644,7 @@ "@keepTopicFile": { "description": "Action that keeps an orphaned Writerside topic file." }, - "orphanTopicMessage": "“{topic}” không còn được sử dụng ở đâu trong dự án Writerside này. Xóa tệp hoặc giữ lại để dùng trong phiên bản khác.", + "orphanTopicMessage": "“{topic}” không còn được sử dụng ở đâu trong dự án Writerside này. Xóa tệp hoặc giữ lại để dùng trong thực thể khác.", "@orphanTopicMessage": { "description": "Prompt to delete or keep an orphaned Writerside topic file.", "placeholders": { @@ -2296,7 +2300,7 @@ "@errorDirectoryNameUnsafe": { "description": "Detail for an unsafe directory name." }, - "errorInstanceIdInvalid": "ID phiên bản phải bắt đầu bằng chữ thường và chỉ gồm chữ thường, chữ số, dấu gạch dưới và dấu gạch nối.", + "errorInstanceIdInvalid": "ID thực thể phải bắt đầu bằng chữ thường và chỉ gồm chữ thường, chữ số, dấu gạch dưới và dấu gạch nối.", "@errorInstanceIdInvalid": { "description": "Detail for an invalid Writerside instance ID." }, @@ -2321,7 +2325,7 @@ "@errorWritersideModuleNotOpen": { "description": "Detail shown when creating a topic without an open Writerside module." }, - "errorWritersideInstanceTreeMissing": "Mô-đun Writerside không có cây phiên bản.", + "errorWritersideInstanceTreeMissing": "Mô-đun Writerside không có cây thực thể.", "@errorWritersideInstanceTreeMissing": { "description": "Detail shown when creating a topic without a Writerside instance tree." }, @@ -2580,7 +2584,7 @@ "@diagnosticWritersideConfigMissingInstanceSrc": { "description": "Writerside parser diagnostic for an instance declaration without src." }, - "diagnosticWritersideConfigMissingInstance": "writerside.cfg không đăng ký phiên bản nào.", + "diagnosticWritersideConfigMissingInstance": "writerside.cfg không đăng ký thực thể nào.", "@diagnosticWritersideConfigMissingInstance": { "description": "Writerside parser diagnostic for a config with no instance." }, @@ -2588,11 +2592,11 @@ "@diagnosticWritersideTreeInvalidRoot": { "description": "Writerside parser diagnostic for an invalid tree root element." }, - "diagnosticWritersideTreeMissingId": "Hồ sơ phiên bản thiếu id.", + "diagnosticWritersideTreeMissingId": "Hồ sơ thực thể thiếu id.", "@diagnosticWritersideTreeMissingId": { "description": "Writerside parser diagnostic for an instance profile without id." }, - "diagnosticWritersideTreeIdMismatch": "Tên gốc của tệp cây không khớp với ID phiên bản \"{id}\".", + "diagnosticWritersideTreeIdMismatch": "Tên gốc của tệp cây không khớp với ID thực thể \"{id}\".", "@diagnosticWritersideTreeIdMismatch": { "description": "Writerside parser diagnostic for a tree filename and ID mismatch.", "placeholders": { @@ -2614,7 +2618,7 @@ } } }, - "diagnosticWritersideTreeDuplicateTopic": "Chủ đề \"{topic}\" xuất hiện nhiều hơn một lần trong mục lục của phiên bản này.", + "diagnosticWritersideTreeDuplicateTopic": "Chủ đề \"{topic}\" xuất hiện nhiều hơn một lần trong mục lục của thực thể này.", "@diagnosticWritersideTreeDuplicateTopic": { "description": "Writerside parser diagnostic for a duplicate topic in a TOC.", "placeholders": { @@ -2740,7 +2744,7 @@ } } }, - "diagnosticWritersideConfigMissingInstanceGroupsFile": "Tệp nhóm phiên bản đã định không tồn tại: {relativePath}", + "diagnosticWritersideConfigMissingInstanceGroupsFile": "Tệp nhóm thực thể đã định không tồn tại: {relativePath}", "@diagnosticWritersideConfigMissingInstanceGroupsFile": { "description": "Writerside module diagnostic for a missing instance groups file.", "placeholders": { @@ -2749,7 +2753,7 @@ } } }, - "diagnosticWritersideConfigMissingInstanceTree": "Cây phiên bản đã đăng ký \"{source}\" không tồn tại.", + "diagnosticWritersideConfigMissingInstanceTree": "Cây thực thể đã đăng ký \"{source}\" không tồn tại.", "@diagnosticWritersideConfigMissingInstanceTree": { "description": "Writerside module diagnostic for a missing registered instance tree.", "placeholders": { @@ -3007,7 +3011,7 @@ } } }, - "gitClean": "Sạch", + "gitClean": "Không có thay đổi", "@gitClean": { "description": "Git clean state label." }, @@ -3402,7 +3406,7 @@ "@gitErrorNoUpstream": { "description": "Git error message." }, - "gitErrorMultipleRemotes": "Có nhiều remote được cấu hình. Hãy chọn upstream bên ngoài phiên bản BusyMark này.", + "gitErrorMultipleRemotes": "Có nhiều remote được cấu hình. Hãy chọn upstream bên ngoài thực thể BusyMark này.", "@gitErrorMultipleRemotes": { "description": "Git error message." }, @@ -3422,7 +3426,7 @@ "@gitErrorResetDetachedHead": { "description": "Git reset error shown while HEAD is detached." }, - "gitErrorDiverged": "Nhánh đã phân kỳ. Hãy giải quyết thao tác merge hoặc rebase bên ngoài phiên bản BusyMark này.", + "gitErrorDiverged": "Nhánh đã phân kỳ. Hãy giải quyết thao tác merge hoặc rebase bên ngoài thực thể BusyMark này.", "@gitErrorDiverged": { "description": "Git error message." }, @@ -3538,7 +3542,7 @@ "@markdownHtmlHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Hình và hình ảnh", + "markdownHtmlHtmlFigures": "Figure và hình ảnh", "@markdownHtmlHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, @@ -3683,7 +3687,7 @@ } } }, - "pdfExportedWithWarnings": "Đã xuất {fileName} với {count} cảnh báo.", + "pdfExportedWithWarnings": "Đã xuất {fileName} với {count, plural, =1{1 cảnh báo} other{{count} cảnh báo}}.", "@pdfExportedWithWarnings": { "description": "PDF export success message when some content fell back or was omitted.", "placeholders": { @@ -3796,11 +3800,11 @@ "@shortcutExportPdfDescription": { "description": "Keyboard-shortcut description for PDF export." }, - "instances": "Các phiên bản", + "instances": "Các thực thể", "@instances": { "description": "Heading for the Writerside instances shown in the TOC sidebar." }, - "newInstance": "Phiên bản mới", + "newInstance": "Thực thể mới", "@newInstance": { "description": "Action that creates a Writerside instance." }, @@ -3808,7 +3812,7 @@ "@newTocLibrary": { "description": "Action that creates a Writerside library instance for reusable TOC sections." }, - "editInstance": "Chỉnh sửa phiên bản", + "editInstance": "Chỉnh sửa thực thể", "@editInstance": { "description": "Action and dialog title for editing a Writerside instance." }, @@ -3816,7 +3820,7 @@ "@openTocFile": { "description": "Action that opens the selected Writerside instance tree file." }, - "createInstance": "Tạo phiên bản", + "createInstance": "Tạo thực thể", "@createInstance": { "description": "Dialog title for creating a Writerside instance." }, @@ -3942,7 +3946,7 @@ "@copyReferencedMediaDescription": { "description": "Description of the Writerside Markdown media import option." }, - "instanceIdRenameWarningTitle": "Đổi tên ID phiên bản?", + "instanceIdRenameWarningTitle": "Đổi tên ID thực thể?", "@instanceIdRenameWarningTitle": { "description": "Confirmation title before refactoring a Writerside instance ID." }, @@ -4002,11 +4006,11 @@ "@instanceColorYellow": { "description": "Yellow Writerside instance icon color option." }, - "errorWritersideInstanceNameRequired": "Nhập tên phiên bản.", + "errorWritersideInstanceNameRequired": "Nhập tên thực thể.", "@errorWritersideInstanceNameRequired": { "description": "Validation error for an empty Writerside instance name." }, - "errorWritersideInstanceIdExists": "Đã có phiên bản với ID “{id}”.", + "errorWritersideInstanceIdExists": "Đã có thực thể với ID “{id}”.", "@errorWritersideInstanceIdExists": { "description": "Error for a duplicate Writerside instance ID.", "placeholders": { @@ -4015,7 +4019,7 @@ } } }, - "errorWritersideInstanceTreeExists": "Cây phiên bản đã tồn tại: {path}", + "errorWritersideInstanceTreeExists": "Cây thực thể đã tồn tại: {path}", "@errorWritersideInstanceTreeExists": { "description": "Error for an existing Writerside instance tree path.", "placeholders": { @@ -4055,11 +4059,11 @@ } } }, - "errorWritersideInstanceFilesChanged": "Các tệp phiên bản đã thay đổi trên đĩa. Hãy xem lại và thử lại.", + "errorWritersideInstanceFilesChanged": "Các tệp thực thể đã thay đổi trên đĩa. Hãy xem lại và thử lại.", "@errorWritersideInstanceFilesChanged": { "description": "Concurrent-change error for a Writerside instance mutation." }, - "errorWritersideInstanceRollbackFailed": "BusyMark không thể khôi phục hoàn toàn thay đổi phiên bản. Hãy xem lại các tệp này trước khi tiếp tục: {paths}", + "errorWritersideInstanceRollbackFailed": "BusyMark không thể khôi phục hoàn toàn thay đổi của thực thể. Hãy xem lại các tệp này trước khi tiếp tục: {paths}", "@errorWritersideInstanceRollbackFailed": { "description": "Error when a Writerside instance mutation rollback is incomplete.", "placeholders": { @@ -4076,15 +4080,15 @@ "@errorWritersideInstanceWebPathInvalid": { "description": "Validation error for an invalid Writerside instance web path." }, - "errorWritersideInstanceConfigurationInvalid": "Cấu hình phiên bản Writerside không hợp lệ. Hãy sửa các chẩn đoán rồi thử lại.", + "errorWritersideInstanceConfigurationInvalid": "Cấu hình thực thể Writerside không hợp lệ. Hãy sửa các chẩn đoán rồi thử lại.", "@errorWritersideInstanceConfigurationInvalid": { "description": "Error when an instance tree, project config, or build profiles file cannot be safely edited." }, - "errorWritersideInstanceTemporaryFile": "BusyMark không thể đưa các thay đổi phiên bản vào stage một cách an toàn.", + "errorWritersideInstanceTemporaryFile": "BusyMark không thể đưa các thay đổi của thực thể vào stage một cách an toàn.", "@errorWritersideInstanceTemporaryFile": { "description": "Error when a temporary file for an instance mutation cannot be created." }, - "diagnosticWritersideTreeInvalidStatus": "Trạng thái phiên bản không xác định “{status}”. Sử dụng release, eap hoặc deprecated.", + "diagnosticWritersideTreeInvalidStatus": "Trạng thái thực thể không xác định “{status}”. Sử dụng release, eap hoặc deprecated.", "@diagnosticWritersideTreeInvalidStatus": { "description": "Diagnostic for an unsupported Writerside instance status.", "placeholders": { @@ -4093,7 +4097,7 @@ } } }, - "diagnosticWritersideDuplicateInstanceId": "ID phiên bản “{id}” được nhiều tệp cây sử dụng.", + "diagnosticWritersideDuplicateInstanceId": "ID thực thể “{id}” được nhiều tệp cây sử dụng.", "@diagnosticWritersideDuplicateInstanceId": { "description": "Diagnostic for a duplicate Writerside instance ID.", "placeholders": { @@ -4118,7 +4122,7 @@ } } }, - "diagnosticWritersideBuildProfileMissingInstance": "Phần tử phải chỉ định ID phiên bản.", + "diagnosticWritersideBuildProfileMissingInstance": "Phần tử phải chỉ định ID thực thể.", "@diagnosticWritersideBuildProfileMissingInstance": { "description": "Diagnostic for a Writerside build profile without an instance attribute." }, @@ -4130,7 +4134,7 @@ "@diagnosticWritersideTreeMissingSnippetId": { "description": "Diagnostic for a Writerside tree snippet without an ID." }, - "diagnosticWritersideTreeInvalidCrossInstanceReference": "Tham chiếu mục lục giữa các phiên bản phải chỉ định cả ref và in.", + "diagnosticWritersideTreeInvalidCrossInstanceReference": "Tham chiếu mục lục giữa các thực thể phải chỉ định cả ref và in.", "@diagnosticWritersideTreeInvalidCrossInstanceReference": { "description": "Diagnostic for an incomplete Writerside ref/in pair." }, @@ -4147,15 +4151,15 @@ } } }, - "diagnosticWritersideInstanceGroupsInvalidRoot": "Tệp nhóm phiên bản phải có phần tử gốc .", + "diagnosticWritersideInstanceGroupsInvalidRoot": "Tệp nhóm thực thể phải có phần tử gốc .", "@diagnosticWritersideInstanceGroupsInvalidRoot": { "description": "Diagnostic for an invalid Writerside instance groups root." }, - "diagnosticWritersideInstanceGroupInvalid": "Một nhóm phiên bản phải chỉ định id không trống và danh sách phiên bản.", + "diagnosticWritersideInstanceGroupInvalid": "Một nhóm thực thể phải chỉ định id không trống và danh sách thực thể.", "@diagnosticWritersideInstanceGroupInvalid": { "description": "Diagnostic for an invalid Writerside instance group." }, - "diagnosticWritersideInstanceGroupDuplicateId": "ID nhóm phiên bản “{id}” được khai báo nhiều hơn một lần.", + "diagnosticWritersideInstanceGroupDuplicateId": "ID nhóm thực thể “{id}” được khai báo nhiều hơn một lần.", "@diagnosticWritersideInstanceGroupDuplicateId": { "description": "Diagnostic for a duplicate Writerside instance group ID.", "placeholders": { @@ -4203,7 +4207,7 @@ } } }, - "diagnosticWritersideUnknownInstanceGroup": "Điều kiện phiên bản tham chiếu đến nhóm không xác định “@{group}”.", + "diagnosticWritersideUnknownInstanceGroup": "Điều kiện thực thể tham chiếu đến nhóm không xác định “@{group}”.", "@diagnosticWritersideUnknownInstanceGroup": { "description": "Diagnostic for an unknown Writerside instance group.", "placeholders": { @@ -4212,7 +4216,7 @@ } } }, - "diagnosticWritersideReferenceInstanceMissing": "Tham chiếu giữa các phiên bản nhắm đến phiên bản không xác định “{instance}”.", + "diagnosticWritersideReferenceInstanceMissing": "Tham chiếu giữa các thực thể nhắm đến thực thể không xác định “{instance}”.", "@diagnosticWritersideReferenceInstanceMissing": { "description": "Diagnostic for a missing Writerside reference instance.", "placeholders": { @@ -4221,7 +4225,7 @@ } } }, - "diagnosticWritersideReferenceTopicMissing": "Chủ đề “{topic}” không nằm trong phiên bản được tham chiếu “{instance}”.", + "diagnosticWritersideReferenceTopicMissing": "Chủ đề “{topic}” không nằm trong thực thể được tham chiếu “{instance}”.", "@diagnosticWritersideReferenceTopicMissing": { "description": "Diagnostic for a missing topic in a cross-instance Writerside reference.", "placeholders": { @@ -4265,10 +4269,6 @@ "@aiDisabled": { "description": "AI provider option that disables AI features." }, - "aiLocalOnlyDescription": "Chỉnh sửa bằng AI chỉ được thực hiện theo yêu cầu rõ ràng. BusyMark chỉ gửi ngữ cảnh được hiển thị cho nhà cung cấp đã chọn và không bao giờ áp dụng đề xuất khi chưa xem lại.", - "@aiLocalOnlyDescription": { - "description": "Privacy description for BusyMark local AI." - }, "aiProvider": "Nhà cung cấp AI", "@aiProvider": { "description": "Label for an AI provider selection." @@ -4608,5 +4608,9 @@ "displayMath": "Toán hiển thị", "@displayMath": { "description": "Editor action that inserts a display mathematical expression." + }, + "aiExplicitEditingDescription": "Chỉnh sửa bằng AI chỉ được thực hiện theo yêu cầu rõ ràng. BusyMark chỉ gửi ngữ cảnh được hiển thị cho nhà cung cấp đã chọn và không bao giờ áp dụng đề xuất khi chưa xem lại.", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." } } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index ce1effb4..90fcd9f3 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -1,960 +1,3 @@ { - "@@locale": "zh", - "appTitle": "BusyMark", - "appSubtitle": "Markdown 文件和兼容 Writerside 的文档项目编辑器。", - "aboutBusyMark": "关于 BusyMark", - "aboutTagline": "Markdown 和 Writerside 编辑器", - "aboutLicenseLabel": "许可证", - "aboutLicenseName": "Apache License 2.0", - "aboutWebsite": "网站", - "aboutSourceCode": "源代码", - "reportIssue": "报告问题", - "feedbackCategory": "类别", - "feedbackChooseCategory": "选择类别", - "feedbackCategoryProblem": "问题或错误", - "feedbackCategoryFeature": "功能请求", - "feedbackCategoryPrivacySecurity": "隐私或安全问题", - "feedbackCategoryUsability": "可用性问题", - "feedbackCategoryOther": "其他", - "feedbackSubject": "主题", - "feedbackMessage": "详细信息", - "feedbackReplyEmail": "回复邮箱(可选)", - "feedbackIncludeTechnicalDetails": "包含技术详细信息", - "feedbackTechnicalDetailsDisclosure": "启用后,此选项仅会添加您的 Linux 操作系统版本和 BusyMark 应用语言。不会附加日志、文件、账户数据或其他诊断信息。", - "feedbackSubmit": "提交", - "feedbackSubmitting": "正在提交…", - "feedbackCategoryRequired": "请选择类别。", - "feedbackSubjectLength": "主题必须包含 3 到 120 个字符。", - "feedbackMessageLength": "信息必须包含 10 到 5,000 个字符。", - "feedbackReplyEmailInvalid": "请输入有效的邮箱地址,或将此字段留空。", - "feedbackConnectionFailure": "BusyMark 无法连接。请检查网络连接后重试。", - "feedbackTimeoutFailure": "请求超时。请重试。", - "feedbackRateLimitedFailure": "此连接发送的报告过多。请稍候再试。", - "feedbackRejectedFailure": "服务器拒绝了此报告。请检查表单字段后重试。", - "feedbackServerFailure": "服务器无法接收此报告。请稍后重试。", - "feedbackSuccess": "反馈已发送。参考 ID:{id}", - "advanced": "高级", - "addToGit": "添加到 Git", - "appearance": "外观", - "apply": "应用", - "back": "返回", - "bottomLeft": "左下", - "bottomRight": "右下", - "cancel": "取消", - "choose": "选择", - "chooseLocation": "选择位置", - "copy": "复制", - "copyName": "复制名称", - "copyFileName": "复制文件名", - "copyPath": "复制路径", - "create": "创建", - "creating": "正在创建…", - "cut": "剪切", - "promoteSection": "提升节级别", - "demoteSection": "降低节级别", - "moveSectionUp": "上移节", - "moveSectionDown": "下移节", - "confirmDeleteSectionTitle": "删除此节?", - "confirmDeleteSectionMessage": "删除“{name}”及其节中的全部内容?此操作无法撤销。", - "darkTheme": "深色", - "delete": "删除", - "discard": "放弃", - "editor": "编辑器", - "file": "文件", - "fileHistory": "文件历史记录", - "folder": "文件夹", - "insert": "插入", - "keyboardShortcuts": "键盘快捷键", - "commandPalette": "命令面板", - "commandPaletteHint": "输入命令", - "commandPaletteEmpty": "没有匹配的命令", - "commandUnavailableInContext": "当前编辑器上下文中无法使用此命令", - "lightTheme": "浅色", - "mainMenu": "主菜单", - "fullScreen": "全屏", - "markdown": "Markdown", - "open": "打开", - "openInFiles": "在文件中打开", - "pathActions": "路径操作", - "outline": "大纲", - "overwrite": "覆盖", - "paste": "粘贴", - "pasteWithoutFormatting": "粘贴为无格式文本", - "reading": "阅读", - "removeFromRecent": "从最近使用记录中移除", - "recent": "最近使用", - "redo": "重做", - "save": "保存", - "search": "搜索", - "selectAll": "全选", - "settings": "设置", - "source": "源代码", - "split": "拆分", - "systemTheme": "系统", - "theme": "主题", - "appLanguage": "语言", - "systemLanguage": "系统", - "languageEnglish": "English", - "languageGerman": "Deutsch", - "languageDutch": "Nederlands", - "languageTurkish": "Türkçe", - "languageItalian": "Italiano", - "languageNorwegian": "Norsk", - "languageFrench": "Français", - "languageRussian": "Русский", - "languageUkrainian": "Українська", - "languagePolish": "Polski", - "languageSpanish": "Español", - "languagePortuguese": "Português", - "languageArabic": "العربية", - "languagePersian": "فارسی", - "languageHindi": "हिन्दी", - "languageIndonesian": "Bahasa Indonesia", - "languageEstonian": "Eesti", - "languageVietnamese": "Tiếng Việt", - "languageJapanese": "日本語", - "languageKorean": "한국어", - "languageSimplifiedChinese": "简体中文", - "toggleSidebar": "侧边栏面板", - "topLeft": "左上", - "topRight": "右上", - "undo": "撤销", - "validate": "验证", - "validation": "验证", - "viewMode": "视图模式", - "welcome": "欢迎", - "writerside": "Writerside", - "xml": "XML", - "fileTypeMarkdown": "Markdown", - "fileTypeImages": "图像", - "openMarkdownFile": "打开 Markdown 文件", - "markdownFileExtensions": ".md 或 .markdown", - "openFolderOrWritersideProject": "打开文件夹或 Writerside 项目", - "markdownFolderOrWritersideProject": "Markdown 文件夹或兼容 Writerside 的项目", - "noOpenFile": "没有打开的文件", - "shortcutDeleteTreeItemDescription": "删除选中的文件项,或从目录中移除选中的主题", - "shortcutGroupGeneral": "常规", - "shortcutNewDocument": "创建", - "shortcutNewDocumentDescription": "创建 Markdown 文件或 Writerside 项目", - "shortcutOpenDescription": "打开 Markdown 文件、文件夹或 Writerside 项目", - "shortcutSaveDescription": "保存当前文档", - "shortcutSearchDescription": "搜索当前工作区", - "shortcutKeyboardShortcutsDescription": "显示此键盘快捷键参考", - "shortcutMarkdownAndHtmlDescription": "打开 Markdown 和 HTML 参考", - "shortcutSettingsDescription": "打开 BusyMark 设置", - "shortcutNextTab": "下一个标签页", - "shortcutNextTabDescription": "移至下一个打开的标签页", - "shortcutPreviousTab": "上一个标签页", - "shortcutPreviousTabDescription": "移至上一个打开的标签页", - "shortcutCloseTab": "关闭标签页", - "shortcutCloseTabDescription": "关闭当前标签页", - "shortcutCloseAllTabs": "关闭所有标签页", - "shortcutCloseAllTabsDescription": "关闭所有打开的标签页", - "shortcutGroupTextEditing": "文本编辑", - "shortcutSelectAllDescription": "在源代码模式下选择全部文本;在编辑器模式下按两次以选择所有块", - "shortcutCutDescription": "剪切选中的文本", - "shortcutCopyDescription": "复制选中的文本", - "shortcutPasteDescription": "从剪贴板粘贴", - "shortcutPastePlainTextDescription": "粘贴剪贴板中的无格式文本", - "shortcutUndoDescription": "撤销上次编辑", - "shortcutRedoDescription": "重做上次撤销的编辑", - "shortcutInsertIndentation": "插入缩进", - "shortcutInsertIndentationDescription": "在光标处插入缩进", - "shortcutOutdentSource": "减少源代码缩进", - "shortcutOutdentSourceDescription": "在源代码模式下减少一级缩进", - "shortcutEscape": "关闭搜索或清除块选择", - "shortcutEscapeDescription": "关闭工作区搜索,或在编辑器模式下清除块选择", - "shortcutGroupFormatting": "格式", - "shortcutBoldDescription": "切换选中文本的粗体", - "shortcutItalicDescription": "切换选中文本的斜体", - "shortcutUnderlineDescription": "切换选中文本的下划线", - "shortcutLinkDescription": "插入或编辑链接", - "shortcutInlineCodeDescription": "切换选中文本的行内代码格式", - "shortcutStrikethroughDescription": "切换选中文本的删除线", - "shortcutGroupBlocks": "块", - "shortcutParagraphDescription": "将当前块设为段落", - "shortcutHeading1Description": "将当前块设为标题 1", - "shortcutHeading2Description": "将当前块设为标题 2", - "shortcutHeading3Description": "将当前块设为标题 3", - "shortcutHeading4Description": "将当前块设为标题 4", - "shortcutHeading5Description": "将当前块设为标题 5", - "shortcutHeading6Description": "将当前块设为标题 6", - "shortcutGroupLists": "列表", - "numberedList": "编号列表", - "shortcutNumberedListDescription": "切换编号列表格式", - "bulletedList": "项目符号列表", - "shortcutBulletedListDescription": "切换项目符号列表格式", - "checklist": "检查清单", - "shortcutChecklistDescription": "切换检查清单格式", - "shortcutGroupSidebar": "侧边栏", - "sidebarViewMenu": "侧边栏视图", - "createMarkdownFile": "创建 Markdown 文件", - "createMarkdownFileDescription": "开始创建未保存的本地 Markdown 文档", - "createWritersideProject": "创建 Writerside 项目", - "createWritersideProjectDescription": "开始创建本地兼容 Writerside 的项目", - "defaultProjectName": "文档", - "defaultInstanceName": "用户指南", - "defaultStartTopicTitle": "开始使用", - "projectName": "项目名称", - "directoryName": "目录名称", - "instanceName": "实例名称", - "instanceId": "实例 ID", - "startTopicTitle": "起始主题标题", - "location": "位置", - "projectNameRequired": "项目名称为必填项。", - "directoryNameRequired": "目录名称为必填项。", - "useSingleSafeDirectoryName": "使用单一且安全的目录名称。", - "useLowercaseIdentifier": "使用仅包含小写字母、数字、下划线或连字符的小写标识符。", - "startTopicTitleRequired": "起始主题标题为必填项。", - "createWritersideProjectFailed": "无法创建 Writerside 项目。", - "settingsTitle": "BusyMark 设置", - "autoSave": "自动保存", - "autoSaveDescription": "在短暂空闲后自动保存文件更改。", - "wordWrap": "自动换行", - "editorFontSize": "编辑器字体大小", - "validateOnEdit": "编辑时验证", - "clearRecentWorkspaces": "清除最近使用的工作区", - "editingButtonsPosition": "编辑按钮位置", - "editingButtonsPositionDescription": "选择浮动 WYSIWYG 编辑按钮的显示位置。", - "editingButtonsDirection": "编辑按钮方向", - "editingButtonsDirectionDescription": "选择水平或垂直排列浮动 WYSIWYG 编辑按钮。", - "horizontal": "水平", - "vertical": "垂直", - "privacy": "隐私", - "allowRemoteImages": "加载远程图像", - "allowRemoteImagesDescription": "允许 Markdown 预览和编辑器从 http 和 https URL 加载图像。", - "clearRemoteImagePermissions": "清除远程图像权限", - "clearRemoteImagePermissionsDescription": "忘记已获准加载远程图像的工作区。", - "clearGitWorkspaceTrust": "清除受信任的 Git 工作区", - "clearGitWorkspaceTrustDescription": "为之前受信任的工作区启用 Git 功能前先进行询问。", - "settingsWindowSectionTitle": "窗口", - "settingsReopenWorkspaceOnStartupTitle": "启动时重新打开上次的工作区", - "settingsReopenWorkspaceOnStartupDescription": "BusyMark 启动时打开上次会话中的工作区和标签页。", - "settingsConfirmCloseWithUnsavedChangesTitle": "有未保存更改时关闭前进行确认", - "settingsConfirmCloseWithUnsavedChangesDescription": "文档有未保存更改时,关闭 BusyMark 前先进行询问。", - "closeUnsavedChangesTitle": "未保存的更改", - "closeUnsavedChangesSingleMessage": "此文档有未保存的更改。关闭 BusyMark 前保存更改?", - "closeUnsavedChangesMultipleMessage": "{count, plural, =0{关闭 BusyMark 前保存更改?} =1{有 1 个文档包含未保存的更改。关闭 BusyMark 前保存更改?} other{有 {count} 个文档包含未保存的更改。关闭 BusyMark 前保存更改?}}", - "closeUnsavedChangesCancel": "取消", - "closeUnsavedChangesDiscard": "放弃", - "closeUnsavedChangesSave": "保存", - "currentFile": "当前文件", - "unsavedChanges": "未保存的更改", - "unsavedChangesMessage": "{fileName} 中有未保存的更改。继续前保存这些更改?", - "unsavedChangesMultipleMessage": "{count, plural, =1{有 1 个文档包含未保存的更改。继续前保存它?} other{有 {count} 个文档包含未保存的更改。继续前保存它们?}}", - "fileChangedOnDisk": "文件已在磁盘上更改", - "fileChangedOnDiskMessage": "自打开此文件后,它已在磁盘上发生更改。覆盖它?", - "untitledMarkdownFileName": "未命名.md", - "unorderedList": "无序列表", - "orderedList": "有序列表", - "taskList": "任务列表", - "toggleTaskChecked": "切换任务选中状态", - "indentListItem": "增加列表项缩进", - "outdentListItem": "减少列表项缩进", - "blockquote": "引用块", - "codeBlock": "代码块", - "codeBlockLanguage": "代码块语言", - "image": "图像", - "video": "视频", - "openVideo": "播放视频", - "pauseVideo": "暂停视频", - "videoUnavailable": "视频不可用", - "videoPreview": "视频预览", - "diagnosticWritersideVideoMissingSource": "视频缺少 src 属性。", - "diagnosticWritersideVideoUnsupportedSource": "不支持的视频源:{source}", - "diagnosticWritersideVideoMissingFile": "视频文件不存在:{source}", - "diagnosticWritersideVideoMissingPreview": "视频预览图像不存在:{preview}", - "inlineImage": "行内图像", - "table": "表格", - "htmlBlock": "HTML 块", - "htmlContentDefault": "HTML 内容", - "shortcutHtmlBlockDescription": "插入或编辑 HTML 块", - "renderedHtml": "已渲染的 HTML", - "editHtml": "编辑 HTML", - "htmlSource": "HTML 源代码", - "thematicBreak": "分隔线", - "bold": "粗体", - "italic": "斜体", - "underline": "下划线", - "strikethrough": "删除线", - "inlineCode": "行内代码", - "link": "链接", - "hardLineBreak": "硬换行", - "textStyle": "文本样式", - "paragraph": "段落", - "heading1": "标题 1", - "heading2": "标题 2", - "heading3": "标题 3", - "heading4": "标题 4", - "heading5": "标题 5", - "heading6": "标题 6", - "headingLevelAbbreviation": "H{level}", - "deleteTable": "删除表格", - "tableColumnNumber": "列 {columnNumber}", - "insertColumnLeft": "在左侧插入列", - "insertColumnRight": "在右侧插入列", - "deleteColumn": "删除列", - "tableAlignmentUnspecified": "对齐方式:未指定", - "tableAlignmentLeft": "对齐方式:左对齐", - "tableAlignmentCenter": "对齐方式:居中", - "tableAlignmentRight": "对齐方式:右对齐", - "tableRowNumber": "行 {rowNumber}", - "insertRowAbove": "在上方插入行", - "insertRowBelow": "在下方插入行", - "deleteRow": "删除行", - "tableHeaderHint": "标题", - "tableCellHint": "单元格", - "language": "语言", - "hideEditingButtons": "隐藏编辑按钮", - "showEditingButtons": "显示编辑按钮", - "altText": "替代文本", - "editorPlaceholderText": "文本", - "editorPlaceholderCode": "代码", - "editorPlaceholderAltText": "替代文本", - "describeTheImage": "描述图像", - "columns": "列", - "rows": "行", - "tableHeaderNumber": "标题 {columnNumber}", - "tableCellDefault": "单元格", - "noImageSource": "没有图像源", - "remoteImageBlocked": "远程图像已阻止", - "remoteImageBlockedTooltip": "选择是否允许 BusyMark 加载远程图像。", - "remoteImagesBlockedTitle": "远程图像已阻止", - "remoteImagesBlockedMessage": "本文档引用了来自互联网的图像。加载这些图像可能会向图像托管方泄露网络信息。", - "loadRemoteImagesForWorkspace": "为此工作区加载", - "alwaysLoadRemoteImages": "始终加载远程图像", - "hideSidebar": "隐藏侧边栏面板", - "showSidebar": "显示侧边栏面板", - "showPreview": "显示预览", - "hidePreview": "隐藏预览", - "workspaceKindUnsavedMarkdown": "未保存的 Markdown 文件", - "workspaceKindSingleMarkdown": "单个 Markdown 文件", - "workspaceKindMarkdownFolder": "Markdown 文件夹", - "workspaceKindWritersideModule": "Writerside 模块", - "problems": "问题", - "diagnosticCount": "{count, plural, =0{没有诊断信息} =1{1 条诊断信息} other{{count} 条诊断信息}}", - "files": "文件", - "toc": "目录", - "tocActions": "目录操作", - "markdownUnsaved": "Markdown - 未保存", - "workspaceDetail": "{kind} - {count, plural, =1{1 个文件} other{{count} 个文件}}", - "noFiles": "没有文件", - "newFile": "新建文件", - "noWritersideToc": "没有 Writerside 目录", - "tocSection": "目录节", - "newTopic": "新建主题", - "newChildTopic": "新建子主题", - "newSiblingTopic": "新建同级主题", - "renameTopicFile": "重命名主题文件", - "topicPlacement": "目录位置", - "tocRoot": "位于目录根级别", - "afterSelectedTopic": "位于选中主题之后", - "insideSelectedTopic": "位于选中主题内", - "pasteAfterTopic": "粘贴到主题之后", - "pasteAsChildTopic": "粘贴为子主题", - "removeFromToc": "从目录中移除", - "confirmRemoveFromTocTitle": "从目录中移除?", - "confirmRemoveFromTocMessage": "从此目录中移除 {name}?主题文件将被保留。", - "confirmDeleteTopicTitle": "删除主题文件?", - "confirmDeleteTopicMessage": "删除 {name} 并从每个目录中移除它?此操作无法撤销。", - "safeDeleteTopicFile": "安全删除主题文件…", - "removeTocElement": "移除目录元素", - "reviewUsages": "查看使用情况", - "deleteTopicFile": "删除主题文件", - "removeAction": "移除", - "topicRemovalSummary": "从选中的实例中移除“{topic}”。主题文件将被保留。", - "safeDeleteTopicSummary": "删除“{topic}”,并在整个 Writerside 项目中安全更新其引用。", - "childTopicsPromoted": "{count, plural, =1{1 个子主题将上移一级。} other{{count} 个子主题将上移一级。}}", - "topicIsStartPageRemovalWarning": "此主题被用作实例的起始页。请查看其使用情况,并在继续前指定其他起始页。", - "topicUsagesCount": "使用情况({count})", - "noBreakingTopicUsages": "未找到会导致引用失效的引用。", - "topicUsagesFound": "BusyMark 找到了以下对该主题的引用。", - "topicUsageTocElements": "目录元素", - "topicUsageStartPages": "起始页", - "topicUsageTopicLinks": "主题链接", - "topicUsageIncludes": "包含项", - "usageCount": "{count, plural, =1{1 次使用} other{{count} 次使用}}", - "refactoringOptions": "重构选项", - "updateUsagesAutomatically": "自动更新使用情况", - "updateUsagesAutomaticallyDescription": "移除目录引用和包含项,同时保留链接文本。", - "manualUsageUpdatesRequired": "执行此重构前,某些使用情况需要手动更改。", - "setRedirectTo": "设置重定向到", - "noRedirectDescription": "不重定向旧的已发布页面。", - "redirectTarget": "重定向目标", - "remainingUsagesBlockRemoval": "请在继续前查看并更新剩余的使用情况,或在可用时启用自动更新。", - "usagesOfTopic": "{topic} 的使用情况", - "noUsagesFound": "未找到使用情况", - "outsideSelectedInstance": "在选中的实例之外", - "doRefactor": "执行重构", - "orphanTopicTitle": "主题文件已不再使用", - "keepTopicFile": "保留主题文件", - "orphanTopicMessage": "“{topic}”在此 Writerside 项目中已不再使用。删除该文件,或保留它以供其他实例使用。", - "defaultNewTopicTitle": "新主题", - "topicTitle": "主题标题", - "fileName": "文件名", - "topicTitleRequired": "主题标题为必填项。", - "fileNameRequired": "文件名为必填项。", - "rename": "重命名", - "confirmDeleteFileTitle": "删除文件?", - "confirmDeleteFolderTitle": "删除文件夹?", - "confirmDeleteFileMessage": "删除 {name}?此操作无法撤销。", - "confirmDeleteFolderMessage": "删除 {name} 及其中的所有文件?此操作无法撤销。", - "useSingleSafeFileName": "使用单一且安全的文件名。", - "useExpectedExtension": "为选中的格式使用 {extension} 扩展名。", - "useIdentifierCharacters": "在扩展名之前仅使用字母、数字、下划线或连字符。", - "topicIdAlreadyExists": "主题 ID 已存在。", - "createWritersideTopicFailed": "无法创建 Writerside 主题。", - "noOutline": "没有大纲", - "expandKind": "展开 {kind}", - "collapseKind": "折叠 {kind}", - "foldKindSection": "节", - "foldKindList": "列表", - "foldKindQuote": "引用", - "foldKindTag": "标签", - "sourceSearchPreviousMatch": "上一个匹配项", - "sourceSearchNextMatch": "下一个匹配项", - "sourceSearchCaseSensitive": "区分大小写", - "sourceSearchWholeWord": "全字匹配", - "sourceSearchRegex": "正则表达式", - "sourceSearchReplacement": "替换为", - "sourceSearchReplaceCurrent": "替换当前匹配项", - "sourceSearchReplaceAndFindNext": "替换并查找下一个", - "sourceSearchReplaceAll": "全部替换", - "workspaceReplace": "在工作区中替换", - "reviewReplacements": "查看替换内容", - "applyReplacements": "应用替换", - "skippedFiles": "跳过的文件", - "workspaceReplaceDirtyBuffer": "未保存的编辑器内容", - "workspaceReplaceDiskContent": "磁盘上的已保存内容", - "selectFileMatches": "选择全部 {count} 个匹配项", - "workspaceReplaceApplied": "已在 {files} 个文件中替换 {matches} 个匹配项;跳过 {skipped} 个。", - "documentFormatWithFinalNewline": "{encoding} · {lineEnding} · 末尾有换行符", - "documentFormatWithoutFinalNewline": "{encoding} · {lineEnding} · 末尾无换行符", - "normalizeLineEndings": "规范化行尾", - "mixedLineEndingsSavePrompt": "此文档包含混合的行尾格式。请选择一种格式。", - "workspaceReplaceMixedLineEndings": "{fileName} 使用混合的行尾格式。请在替换前选择要使用的格式。", - "workspaceReplaceIssueOversized": "已跳过过大的文件。", - "workspaceReplaceIssueUnreadable": "已跳过无法读取的文件。", - "workspaceReplaceIssueInvalidUtf8": "已跳过不是有效 UTF-8 的文件。", - "workspaceReplaceIssueTruncated": "替换预览已被截断。", - "workspaceReplaceIssueFileChanged": "已跳过预览后发生变化的文件。", - "workspaceReplaceIssueBufferChanged": "已跳过预览后发生变化的编辑器缓冲区。", - "workspaceReplaceIssueNormalizationRequired": "请在替换前选择 LF 或 CRLF 规范化。", - "workspaceReplaceIssuePartialConflict": "由于文件同时发生了变化,回滚已停止。部分替换可能仍然存在;被移出的内容已保留在下方路径中。", - "workspaceReplaceIssueApplyFailed": "无法提交经过审查的替换;没有文件发生更改。", - "externalChangesTitle": "外部更改 — {fileName}", - "externalFileDeleted": "此文件已从磁盘删除。", - "externalFileChanged": "在您有未保存编辑时,此文件已在磁盘上发生变化。", - "recoveredDocumentReview": "已恢复 {fileName} 的未保存内容。请检查后保存、另存为或放弃。", - "compare": "比较", - "reloadFromDisk": "从磁盘重新加载", - "keepMine": "保留我的版本", - "saveAs": "另存为", - "sourceSearchInvalidRegex": "无效的正则表达式", - "sourceLargeFileFeaturesPaused": "大文件:已暂停语法突出显示和折叠", - "nothingToRead": "没有可读取的内容", - "admonition": "提示块", - "quote": "引用", - "note": "备注", - "tip": "提示", - "warning": "警告", - "tabs": "标签页", - "tab": "标签页", - "procedure": "操作步骤", - "step": "步骤", - "topic": "主题", - "chapter": "章节", - "couldNotOpenTarget": "无法打开 {target}", - "linkTargetNotFound": "找不到链接目标:{targetPath}", - "cannotOpenFileTypeInEditor": "无法在编辑器中打开此文件类型", - "anchorNotFound": "找不到锚点:{anchor}", - "noProblemsFound": "未发现问题", - "noResults": "无结果", - "searchResultLine": "{relativePath} - 第 {lineNumber} 行", - "untitledResult": "未命名结果", - "documentKindMarkdownFile": "Markdown 文件", - "documentKindWritersideMarkdownTopic": "Writerside Markdown 主题", - "documentKindWritersideXmlTopic": "Writerside XML 主题", - "documentKindWritersideTree": "Writerside 树", - "documentKindConfigurationFile": "配置文件", - "documentKindVariablesFile": "变量文件", - "documentKindCategoriesFile": "类别文件", - "documentKindResourceFile": "资源文件", - "workspaceErrorOpenFailed": "打开失败:{error}", - "workspaceErrorCreateWritersideProjectFailed": "无法创建 Writerside 项目:{error}", - "workspaceErrorCreateWritersideTopicFailed": "无法创建 Writerside 主题:{error}", - "workspaceErrorCouldNotOpenFile": "无法打开文件:{error}", - "workspaceErrorChooseWhereToSaveMarkdown": "选择保存此 Markdown 文件的位置。", - "workspaceErrorSaveBlockedFileChangedOnDisk": "保存已阻止:文件已在磁盘上发生变化。", - "workspaceErrorSaveFailed": "保存失败:{error}", - "workspaceErrorFileOperationFailed": "文件操作失败:{error}", - "workspaceErrorValidationFailed": "验证失败:{error}", - "workspaceRecoveryRestored": "{count, plural, =1{已恢复 1 个未保存的文档。请在保存或放弃前进行检查。} other{已恢复 {count} 个未保存的文档。请在保存或放弃前逐一检查。}}", - "workspaceRecoveryDamaged": "{count, plural, =1{无法恢复一条损坏的恢复记录。原始恢复文件已保留以供检查。} other{无法恢复 {count} 条损坏的恢复记录。有效的恢复记录仍可用。}}", - "errorPathDoesNotExist": "路径不存在:{path}", - "errorTargetDirectoryNotEmpty": "目标目录已存在且不为空:{path}", - "errorTargetPathNotDirectory": "目标路径已存在但不是目录:{path}", - "errorGeneratedFileAlreadyExists": "生成的文件已存在:{path}", - "errorParentDirectoryRequired": "必须指定父目录。", - "errorParentDirectoryMissing": "父目录不存在:{path}", - "errorDirectoryMissing": "目录不存在:{path}", - "errorPathAlreadyExists": "路径已存在:{path}", - "errorFileNameRequired": "文件名为必填项。", - "errorFileNameUnsafe": "文件名必须是单一且安全的路径段。", - "errorFileOperationInvalidTarget": "无法将文件夹移动到其自身中。", - "errorFileOperationOutsideRoot": "文件操作必须在工作区内进行。", - "errorFileOperationRoot": "无法从文件树更改工作区根目录。", - "errorProjectNameRequired": "项目名称为必填项。", - "errorDirectoryNameRequired": "目录名称为必填项。", - "errorDirectoryNameUnsafe": "目录名称必须是单一且安全的路径段。", - "errorInstanceIdInvalid": "实例 ID 必须以小写字母开头,且只能包含小写字母、数字、下划线和连字符。", - "errorTopicFileInvalid": "主题文件名必须是没有路径分隔符的 Markdown 文件名。", - "errorTopicTitleRequired": "主题标题为必填项。", - "errorWritersideModuleRootMissing": "Writerside 模块根目录不存在:{path}", - "errorWritersideModuleNotOpen": "必须打开 Writerside 模块才能创建主题。", - "errorWritersideInstanceTreeMissing": "Writerside 模块没有实例树。", - "errorWritersideTreeFileMissing": "Writerside 树文件不存在:{path}", - "errorTopicIdAlreadyExists": "主题 ID \"{topicId}\" 已存在于此帮助模块中。", - "errorTopicFileAlreadyExists": "主题文件已存在:{path}", - "errorReferenceTopicMissing": "选中的树中不存在引用主题:{topic}", - "errorWritersideTocNodeMissing": "选中的目录项已不存在。", - "errorWritersideTocInvalidMove": "目录项无法移动到自身或其子项中。", - "errorWritersideStartTopicDelete": "无法删除起始主题 {topic}。请先选择其他起始页。", - "errorWritersideSafeDeleteRequired": "请对 Writerside 主题文件使用安全删除。", - "errorWritersideTopicUsageScanFailed": "无法完成主题使用情况扫描。没有文件发生更改。", - "errorWritersideTopicUsagesRemain": "某些主题使用情况仍需处理。请先查看后再继续。", - "errorWritersideRedirectInvalid": "选中的重定向目标已无效。请重新选择。", - "errorWritersideRollbackFailed": "无法完全回滚主题移除。请在继续前查看这些路径:{paths}", - "errorTopicsRootUnsafe": "主题根目录必须是安全的相对目录。", - "errorTopicFileNameUnsafe": "主题文件名必须是单一且安全的路径段。", - "errorTopicFileExtensionMismatch": "主题文件扩展名必须与选中的格式匹配({extension})。", - "errorTopicFileNameInvalid": "主题文件名只能包含字母、数字、下划线和连字符。", - "errorUnknown": "未知错误:{code}", - "diagnosticWorkspaceFileStatFailed": "无法读取文件元数据:{error}", - "diagnosticWorkspaceScanSkipped": "检测到大型工作区。为保持应用响应速度,已跳过部分文件。", - "diagnosticWorkspaceScanInspectFailed": "无法检查工作区项:{error}", - "diagnosticWorkspaceFileTooLarge": "文件超过 beta 自动解析限制。", - "diagnosticWorkspaceFileReadFailed": "无法读取 Markdown 文件:{error}", - "diagnosticMarkdownAttributeMalformed": "Writerside 标题属性块格式错误。", - "diagnosticMarkdownHeadingDuplicateId": "标题 ID“{id}”重复。", - "diagnosticWritersideTopicH1ConvertedToChapter": "额外的顶级 H1 标题将被视为章节。", - "diagnosticWritersideMarkdownTopicMissingTitle": "Writerside Markdown 主题没有 H1 或 front matter 标题。", - "diagnosticWritersideXmlTopicMissingTitle": "XML 主题缺少标题。", - "diagnosticWritersideTopicFileMissingTitle": "主题“{fileName}”缺少标题。", - "diagnosticMarkdownFrontMatterMalformed": "front matter 未闭合。", - "diagnosticMarkdownRawHtmlUnsafe": "不安全的 HTML 元素。", - "diagnosticMarkdownLinkUnresolvedTarget": "链接目标不存在:{targetPath}", - "diagnosticMarkdownLinkUnresolvedAnchor": "锚点“{anchor}”不存在。", - "diagnosticMarkdownImageMissingAlt": "图像“{destination}”缺少替代文本。", - "diagnosticMarkdownImageMissingFile": "图像不存在:{destination}", - "diagnosticInvalidXml": "无效的 XML:{message}", - "diagnosticWritersideConfigInvalidRoot": "writerside.cfg 根元素必须是 。", - "diagnosticWritersideConfigMissingSnippetsSrc": "snippets 声明缺少 src。", - "diagnosticWritersideConfigMissingInstanceGroupsSrc": "instance-groups 声明缺少 src。", - "diagnosticWritersideConfigInvalidKeymapsMode": "不支持的 keymaps 模式:{mode}", - "diagnosticWritersideConfigMissingInstanceSrc": "instance 声明缺少 src。", - "diagnosticWritersideConfigMissingInstance": "writerside.cfg 未注册实例。", - "diagnosticWritersideTreeInvalidRoot": ".tree 根元素必须是 。", - "diagnosticWritersideTreeMissingId": "实例配置文件缺少 id。", - "diagnosticWritersideTreeIdMismatch": "树文件名(不含扩展名)与实例 ID“{id}”不匹配。", - "diagnosticWritersideTreeMissingStartPage": "非库实例缺少 start-page。", - "diagnosticWritersideStartPageMissing": "起始页“{startPage}”不存在。", - "diagnosticWritersideTreeDuplicateTopic": "主题“{topic}”在此实例目录中出现多次。", - "diagnosticWritersideVariableMalformedDeclaration": "变量声明必须包含名称和值。", - "diagnosticWritersideVariableDuplicateName": "变量“{name}”被声明了多次。", - "diagnosticWritersideCategoryMissingId": "类别缺少 id。", - "diagnosticWritersideCategoryDuplicateId": "类别“{id}”被声明了多次。", - "diagnosticWritersideCategoryDuplicateOrder": "类别顺序“{order}”被声明了多次。", - "diagnosticWritersideTopicInvalidRoot": ".topic 根元素必须是 。", - "diagnosticWritersideTopicMissingRootId": "XML 主题缺少根 id。", - "diagnosticWritersideTopicRootIdMismatch": "XML 主题根 ID“{id}”必须与文件名“{expectedId}”匹配。", - "diagnosticWritersideTopicDuplicateElementId": "元素 ID“{elementId}”出现多次。", - "diagnosticWritersideTopicAnchorMissingHref": " 缺少 href。", - "diagnosticWritersideConfigMissing": "Writerside 模式需要 writerside.cfg。", - "diagnosticWritersideConfigMissingBuildConfigDirectory": "配置的构建配置目录不存在:{relativePath}", - "diagnosticWritersideConfigMissingApiSpecificationsDirectory": "配置的 API 规范目录不存在:{relativePath}", - "diagnosticWritersideConfigMissingSnippetsDirectory": "配置的 snippets 目录不存在:{relativePath}", - "diagnosticWritersideConfigMissingVarsFile": "配置的变量文件不存在:{relativePath}", - "diagnosticWritersideConfigMissingCategoriesFile": "配置的类别文件不存在:{relativePath}", - "diagnosticWritersideConfigMissingInstanceGroupsFile": "配置的实例组文件不存在:{relativePath}", - "diagnosticWritersideConfigMissingInstanceTree": "已注册的实例树“{source}”不存在。", - "diagnosticWritersideTopicReadFailed": "无法读取主题文件:{error}", - "diagnosticWritersideDefaultTopicsDirectoryMissing": "默认主题目录不存在:{relativePath}", - "diagnosticWritersideTopicsDirectoryMissing": "配置的主题目录不存在:{relativePath}", - "diagnosticWritersideImagesDirectoryMissing": "配置的图像目录不存在:{relativePath}", - "diagnosticWritersideTopicDuplicateId": "元素 ID“{id}”出现多次。", - "diagnosticWritersideTreeMissingTopic": "目录引用了缺失的主题“{topic}”。", - "diagnosticWritersideTreeInvalidHref": "外部 href“{href}”无效。", - "diagnosticWritersideVariableUnresolved": "变量“%{name}%”未声明。", - "diagnosticWritersideTopicLinkUnresolved": "主题链接“{destination}”无法解析。", - "diagnosticWritersideAnchorUnresolved": "“{targetName}”中不存在锚点“{anchor}”。", - "diagnosticWritersideIncludeMissingFrom": " 缺少 from。", - "diagnosticWritersideIncludeSourceMissing": "包含源“{from}”不存在。", - "diagnosticWritersideIncludeElementMissing": "“{from}”中不存在包含元素“{elementId}”。", - "diagnosticWritersideCategoryUnresolved": "seealso 类别“{ref}”未声明。", - "diagnosticWritersideTopicAmbiguousReference": "主题引用“{reference}”不明确。", - "diagnosticUnknown": "未知诊断信息:{code}", - "close": "关闭", - "git": "Git", - "gitDiff": "Git 差异", - "gitShowDiff": "显示差异", - "gitDiffHunkRange": "旧 {oldRange} → 新 {newRange}", - "gitDiffNoLines": "无行", - "gitUnavailableTitle": "Git 不可用", - "gitUnavailableMessage": "{reason, select, other{安装 Git,或配置 BusyMark 以使用可用的 Git 可执行文件。{reason}}}", - "gitTrustRequiredTitle": "信任此工作区以使用 Git?", - "gitTrustRequiredMessage": "Git 存储库可以通过 hook、过滤器和其他配置运行程序。在 BusyMark 读取存储库数据或启用 Git 操作前,请先信任此工作区。", - "gitTrustWorkspace": "信任工作区", - "gitNotRepositoryTitle": "不是 Git 存储库", - "gitNotRepositoryMessage": "此工作区不在 Git 存储库中。", - "gitInitializeRepository": "初始化存储库", - "gitDetachedHead": "分离的 HEAD", - "gitDetachedHeadAt": "分离于 {commit}", - "gitNoUpstream": "没有上游分支", - "gitAheadCount": "{count, plural, =1{1 个未推送的提交} other{{count} 个未推送的提交}}", - "gitBehindCount": "{count, plural, =1{1 个待拉取的提交} other{{count} 个待拉取的提交}}", - "gitClean": "干净", - "gitConflicts": "冲突", - "gitChanges": "更改", - "gitStaged": "已暂存", - "gitUnstaged": "未暂存", - "gitHistory": "历史记录", - "gitBranches": "分支", - "gitActions": "Git 操作", - "gitPull": "Pull", - "gitFetch": "Fetch", - "gitPush": "Push", - "gitCommit": "Commit", - "gitSelectForCommit": "暂存文件", - "gitRemoveFromCommit": "取消暂存文件", - "gitDiscard": "还原", - "gitOpenFile": "打开文件", - "gitMarkResolved": "标记为已解决", - "gitUntracked": "未跟踪", - "gitCommitMessage": "提交消息", - "gitCommitSelectedFiles": "选中的文件", - "gitCommitNoSelectedFiles": "提交前至少暂存一个文件。", - "gitStagedFileCount": "{count, plural, =1{1 个已暂存文件} other{{count} 个已暂存文件}}", - "gitOutsideWorkspace": "工作区之外", - "gitCommitMessageRequired": "请输入提交消息。", - "gitCreateBranch": "创建分支", - "gitNewBranch": "新分支", - "gitBranchName": "分支名称", - "gitSwitchBranch": "切换", - "gitNoChanges": "没有更改", - "gitNoHistory": "没有历史记录", - "gitNoBranches": "没有分支", - "gitNoDiff": "没有可显示的差异", - "gitBinaryFile": "二进制文件。BusyMark 不渲染二进制补丁。", - "gitBinaryFileInfo": "二进制文件({size} 字节)。BusyMark 不渲染二进制补丁。", - "gitUnsavedChangesBanner": "保存前不会包含未保存的编辑器更改。", - "gitConfirmDiscardTitle": "放弃 Git 更改?", - "gitConfirmDiscardTracked": "{count, plural, =1{选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。} other{选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。}}", - "gitConfirmDiscardUntracked": "{count, plural, =1{选中的未跟踪文件将被删除。} other{选中的未跟踪文件将被删除。}}", - "gitConfirmDiscardMixed": "{count, plural, =1{将根据其 Git 状态还原或删除选中的文件。} other{将根据其 Git 状态还原或删除选中的文件。}}", - "gitConfirmSwitchBranchTitle": "切换到 {branch}?", - "gitConfirmSwitchBranchMessage": "Git 切换分支后,BusyMark 将从磁盘重新加载工作区。", - "gitConfirmPushSetUpstreamTitle": "设置上游分支?", - "gitConfirmPushSetUpstreamMessage": "此分支没有上游分支。当只配置了一个远程仓库时,BusyMark 可以推送 {branch} 并设置其上游分支。", - "gitProjectHistory": "项目历史记录", - "gitFileHistory": "文件历史记录", - "gitFileHistoryRequiresOpenFile": "文件历史记录需要打开的 Markdown 文件。", - "gitLoadMore": "加载更多", - "gitChangesInCommit": "此提交中的更改", - "gitCompareWithCurrent": "与当前版本比较", - "gitRestoreVersion": "还原此版本", - "gitConfirmRestoreTitle": "还原此文件版本?", - "gitConfirmRestoreMessage": "BusyMark 将使用选中的已提交版本替换当前工作树中的文件。还原后的文件将保持未暂存状态。", - "gitCommitActions": "提交操作", - "gitResetCurrentBranchToHere": "将当前分支重置到此处…", - "gitResetCurrentBranchTitle": "将 {branch} 重置到 {commit}?", - "gitResetCurrentBranchMessage": "这会将分支 {branch} 移动到提交 {commit}。请选择 Git 更新索引和工作树的方式。", - "gitReset": "重置", - "gitResetModeSoft": "软", - "gitResetModeSoftDescription": "仅移动分支。保持索引和工作树不变;与选中提交之间的差异仍会保持暂存状态。", - "gitResetModeMixed": "混合", - "gitResetModeMixedDescription": "移动分支并重置索引。保持工作树不变,使差异处于未暂存状态。", - "gitResetModeHard": "硬", - "gitResetModeHardDescription": "移动分支并重置索引和工作树。已跟踪的更改将被放弃;造成阻碍的未跟踪文件可能会被删除。", - "gitResetModeKeep": "保留", - "gitResetModeKeepDescription": "移动分支并重置已跟踪文件,同时保留本地更改。如果这些更改与重置冲突,Git 将中止操作。", - "gitAdditionsDeletions": "+{additions} -{deletions}", - "fileActions": "文件操作", - "actions": "操作", - "gitStatusAdded": "已添加", - "gitStatusDeleted": "已删除", - "gitStatusRenamed": "已重命名", - "gitStatusCopied": "已复制", - "gitStatusUntracked": "未跟踪", - "gitStatusConflicted": "有冲突", - "gitStatusIgnored": "已忽略", - "gitStatusTypeChanged": "类型已更改", - "gitStatusModified": "已修改", - "gitStatusUnknown": "未知", - "gitErrorUnavailable": "Git 不可用。", - "gitErrorNotRepository": "此工作区不是 Git 存储库。", - "gitErrorUnsafePath": "BusyMark 阻止了不安全的 Git 路径。", - "gitErrorInvalidBranchName": "请输入有效的分支名称。", - "gitErrorNoRemote": "未配置 Git 远程仓库。", - "gitErrorNoUpstream": "未配置上游分支。", - "gitErrorMultipleRemotes": "配置了多个远程仓库。请在此 BusyMark 版本之外选择上游分支。", - "gitErrorDirtyWorkspace": "切换分支前,请保存或放弃 BusyMark 编辑器中的更改。", - "gitErrorResetDirtyWorkspace": "重置当前分支前,请保存或放弃 BusyMark 编辑器中的更改。", - "gitErrorRestoreStagedFile": "还原历史版本前,请取消暂存此文件。", - "gitErrorResetDetachedHead": "重置前请先检出一个分支。", - "gitErrorDiverged": "分支已发生分歧。请在此 BusyMark 版本之外解决合并或变基问题。", - "gitErrorAuthorIdentity": "Git 需要作者姓名和邮箱地址才能提交。", - "gitAuthorIdentityTitle": "Git 作者身份", - "gitAuthorIdentityMessage": "请输入 Git 应记录在提交中的身份信息。BusyMark 将保存它并重试此次提交。", - "gitAuthorName": "姓名", - "gitAuthorEmail": "Email", - "gitAuthorIdentityGlobal": "用于所有存储库", - "gitAuthorIdentityGlobalDescription": "作为 Snap 安装时,此设置适用于在 BusyMark 中打开的存储库。", - "gitSaveIdentityAndCommit": "保存并提交", - "gitErrorAuthentication": "Git 身份验证失败。", - "gitErrorNetwork": "Git 网络操作失败。", - "gitErrorConflict": "Git 报告存在未解决的冲突。", - "gitErrorCommandFailed": "Git 命令失败。", - "markdownAndHtml": "Markdown 和 HTML", - "markdownHtmlMarkdownBlocks": "Markdown 块", - "markdownHtmlMarkdownBlocksDescription": "Markdown 源代码和预览中支持的块结构。", - "markdownHtmlInlineFormatting": "行内 Markdown", - "markdownHtmlInlineFormattingDescription": "可出现在段落、列表项和表格单元格中的格式。", - "markdownHtmlRawHtmlBlocks": "原始 HTML 块", - "markdownHtmlRawHtmlBlocksDescription": "通过 BusyMark 预览组件渲染的安全块级 HTML 标签。", - "markdownHtmlRawHtmlInline": "原始 HTML 行内标签", - "markdownHtmlRawHtmlInlineDescription": "安全的行内 HTML 标签,渲染时不会显示字面标签。", - "markdownHtmlSafety": "安全规则", - "markdownHtmlSafetyDescription": "原始 HTML 会在预览前进行解析和清理。", - "markdownHtmlHeadings": "标题", - "markdownHtmlParagraphs": "段落", - "markdownHtmlLists": "列表", - "markdownHtmlHtmlContainers": "容器", - "markdownHtmlHtmlTextBlocks": "文本块", - "markdownHtmlHtmlFigures": "图和图像", - "markdownHtmlHtmlPreformatted": "预格式化代码", - "markdownHtmlHtmlDisclosure": "折叠块", - "markdownHtmlHtmlDescriptionLists": "描述列表", - "markdownHtmlHtmlFormattingTags": "格式标签", - "markdownHtmlHtmlInlineCodeTags": "行内代码标签", - "markdownHtmlHtmlNeutralInlineTags": "语义文本标签", - "markdownHtmlSanitizedPreview": "已清理的预览", - "markdownHtmlSanitizedPreviewDescription": "允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。", - "markdownHtmlSourcePreserved": "保留源代码", - "markdownHtmlSourcePreservedDescription": "未经编辑的原始 HTML 会按源文本原样保存。", - "markdownHtmlMarkdownInsideHtml": "HTML 内的 Markdown", - "markdownHtmlMarkdownInsideHtmlDescription": "原始 HTML 内的 Markdown 标记会按字面文本渲染。", - "markdownHtmlBlockedContent": "被阻止的活动内容", - "markdownHtmlBlockedContentDescription": "脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。", - "markdownHtmlSafeUrls": "仅允许安全 URL", - "markdownHtmlSafeUrlsDescription": "链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。", - "exportAsPdf": "导出为 PDF", - "pdfExportDescription": "选择页面布局,生成精美且自包含的 PDF。", - "pdfRemoteImagesNote": "导出过程中不会下载远程图像。有可用的本地图像时将包含它们。", - "pdfPageSize": "页面大小", - "pdfPageSizeA4": "A4", - "pdfPageSizeLetter": "Letter", - "pdfOrientation": "方向", - "pdfPortrait": "纵向", - "pdfLandscape": "横向", - "pdfMargins": "页边距", - "pdfMarginNarrow": "窄", - "pdfMarginNormal": "普通", - "pdfMarginWide": "宽", - "pdfIncludePageNumbers": "包含页码", - "export": "导出", - "exportingPdf": "正在导出 PDF…", - "fileTypePdf": "PDF 文档", - "pdfExported": "已导出 {fileName}。", - "pdfExportedWithWarnings": "已导出 {fileName},包含 {count} 条警告。", - "pdfExportUnavailable": "缺少 PDF 导出组件。请重新安装 BusyMark 后重试。", - "pdfExportTimedOut": "PDF 导出耗时过长,已停止。", - "pdfExportFailed": "BusyMark 无法将此文档导出为 PDF。", - "visualizationRendering": "正在渲染…", - "visualizationStale": "正在显示上次有效的渲染结果", - "visualizationShowSource": "显示源代码", - "visualizationShowRender": "显示渲染结果", - "visualizationFitWidth": "适应宽度", - "visualizationSaveImage": "保存图像", - "visualizationCopyImage": "复制图像", - "visualizationImageCopied": "图像已复制", - "visualizationOpenApiReference": "打开 API 参考", - "visualizationValid": "有效", - "visualizationInvalid": "无效", - "visualizationServers": "服务器", - "visualizationPaths": "路径", - "visualizationOperations": "操作", - "visualizationTags": "标签", - "visualizationNoOperations": "没有匹配的操作", - "visualizationSearchOperations": "搜索操作", - "visualizationRenderFailed": "无法渲染此可视化内容。", - "visualizationRetry": "重试", - "visualizationSaved": "已保存 {fileName}", - "shortcutExportPdfDescription": "将当前文档或 Writerside 模块导出为 PDF。", - "instances": "实例", - "newInstance": "新建实例", - "newTocLibrary": "新建目录库", - "editInstance": "编辑实例", - "openTocFile": "打开目录文件", - "createInstance": "创建实例", - "createTocLibrary": "创建目录库", - "instanceContent": "内容", - "instanceContentSource": "创建来源", - "emptyInstance": "空实例", - "markdownFiles": "本地 Markdown 文件", - "chooseMarkdownFolder": "选择 Markdown 文件夹", - "errorWritersideInstanceImportSourceRequired": "选择包含 Markdown 文件的文件夹。", - "instanceAppearance": "外观", - "instanceColor": "图标颜色", - "instanceVersion": "版本", - "instanceVersionInherited": "此字段为空时,项目版本为 {version}。", - "instanceWebPath": "Web 路径", - "instanceStatus": "状态", - "instanceStatusRelease": "发布", - "instanceStatusEap": "抢先体验", - "instanceStatusDeprecated": "已弃用", - "allowSearchEngineIndexing": "允许搜索引擎建立索引", - "allowSearchEngineIndexingDescription": "允许外部搜索引擎为此输出建立索引。", - "offlineArtifact": "离线构件", - "offlineArtifactDescription": "捆绑资源,使构建的文档可以自包含。", - "instanceOutputSettings": "输出设置", - "markdownImportSource": "Markdown 源", - "markdownImportFiles": "Markdown 文件", - "selectNone": "全部取消选择", - "markdownFilesFound": "找到 {count} 个 Markdown 文件", - "noMarkdownFilesFound": "在此目录中未找到 Markdown 文件。", - "copyReferencedMedia": "复制引用的媒体", - "copyReferencedMediaDescription": "复制选中文件引用的本地图像和视频,同时保留相对路径。", - "instanceIdRenameWarningTitle": "重命名实例 ID?", - "instanceIdRenameWarning": "BusyMark 将重命名 .tree 文件,并将 Writerside 项目引用从“{oldId}”更新为“{newId}”。发布脚本不会更改,必须单独更新。", - "renameAndUpdateReferences": "重命名并更新引用", - "tocLibraryDescription": "目录库用于存储可复用的节,不会生成自己的输出。", - "defaultTocLibraryName": "共享目录", - "instanceColorAutomatic": "自动", - "instanceColorBlue": "蓝色", - "instanceColorGreen": "绿色", - "instanceColorOrange": "橙色", - "instanceColorPurple": "紫色", - "instanceColorRed": "红色", - "instanceColorTeal": "青绿色", - "instanceColorYellow": "黄色", - "errorWritersideInstanceNameRequired": "请输入实例名称。", - "errorWritersideInstanceIdExists": "已存在 ID 为“{id}”的实例。", - "errorWritersideInstanceTreeExists": "实例树已存在:{path}", - "errorWritersideInstanceImportSourceMissing": "Markdown 源目录不存在:{path}", - "errorWritersideInstanceImportSelectionRequired": "请选择至少一个 Markdown 文件进行导入。", - "errorWritersideInstanceImportFileInvalid": "选中的源中有一个不是可读取的 Markdown 文件:{path}", - "errorWritersideInstanceImportTargetExists": "导入将覆盖现有项目文件:{path}", - "errorWritersideInstanceFilesChanged": "实例文件已在磁盘上发生变化。请查看后重试。", - "errorWritersideInstanceRollbackFailed": "BusyMark 无法完全回滚实例更改。请在继续前查看这些文件:{paths}", - "errorWritersideInstanceLibraryImport": "目录库无法导入 Markdown 主题。", - "errorWritersideInstanceWebPathInvalid": "Web 路径必须为单行文本。", - "errorWritersideInstanceConfigurationInvalid": "Writerside 实例配置无效。请修正其诊断信息后重试。", - "errorWritersideInstanceTemporaryFile": "BusyMark 无法安全暂存实例更改。", - "diagnosticWritersideTreeInvalidStatus": "未知的实例状态“{status}”。请使用 release、eap 或 deprecated。", - "diagnosticWritersideDuplicateInstanceId": "实例 ID“{id}”被多个树文件使用。", - "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml 必须包含 根元素。", - "diagnosticWritersideBuildProfilesInvalidBoolean": "{name} 值“{value}”必须为 true 或 false。", - "diagnosticWritersideBuildProfileMissingInstance": " 元素必须指定实例 ID。", - "diagnosticWritersideTreeInvalidInclude": "树中的 必须同时指定 from 和 element-id。", - "diagnosticWritersideTreeMissingSnippetId": "树中的 必须指定 id。", - "diagnosticWritersideTreeInvalidCrossInstanceReference": "跨实例目录引用必须同时指定 ref 和 in。", - "diagnosticWritersideTreeConflictingTargets": "目录元素不能同时指向多个主题、引用、链接或重定向。", - "diagnosticWritersideTreeDuplicateElementId": "树元素 ID“{id}”被声明了多次。", - "diagnosticWritersideInstanceGroupsInvalidRoot": "实例组文件必须包含 根元素。", - "diagnosticWritersideInstanceGroupInvalid": "实例组必须指定非空 ID 和实例列表。", - "diagnosticWritersideInstanceGroupDuplicateId": "实例组 ID“{id}”被声明了多次。", - "diagnosticWritersideExternalTreeInclude": "目录包含项“{source}#{id}”属于外部模块“{origin}”,无法在此工作区中展开。", - "diagnosticWritersideTreeIncludeElementMissing": "已注册树“{source}”中不存在树元素“{id}”。", - "diagnosticWritersideTreeCircularInclude": "树包含项“{source}#{id}”创建了循环。", - "diagnosticWritersideUnknownInstanceGroup": "实例条件引用了未知组“@{group}”。", - "diagnosticWritersideReferenceInstanceMissing": "跨实例引用指向未知实例“{instance}”。", - "diagnosticWritersideReferenceTopicMissing": "主题“{topic}”不在被引用的实例“{instance}”中。", - "download": "下载", - "exportWritersideAsPdf": "将 Writerside 导出为 PDF", - "writersidePdfContent": "导出内容", - "writersidePdfPage": "页面", - "exportingWritersidePdf": "正在导出 Writerside PDF…", - "ai": "AI", - "aiLocalOllama": "本地 Ollama", - "aiDisabled": "已禁用", - "aiLocalOnlyDescription": "AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。", - "aiProvider": "AI 提供商", - "aiDefaultProvider": "默认提供商", - "aiConfigureProvider": "配置提供商", - "aiChooseProvider": "选择 AI 提供商", - "aiOllamaEndpoint": "Ollama 端点", - "aiOllamaModel": "Ollama 模型", - "aiTestConnection": "测试连接", - "aiTestingConnection": "正在测试…", - "aiConnectionReady": "已连接。找到 {count} 个已安装模型。", - "aiNoModels": "未选择模型。", - "aiConnectionFailed": "BusyMark 无法验证 AI 文本生成。", - "aiConfigureFirst": "请先在设置 → AI 中启用 AI 提供商并验证模型。", - "aiEditWithAi": "使用 AI 编辑", - "aiRefineWithAi": "使用 AI 优化", - "aiInstruction": "指令", - "aiChangeTarget": "可更改内容", - "aiSharedContext": "与 AI 共享的上下文", - "aiTargetSelection": "选中的内容", - "aiTargetInsertAfterBlock": "插入到当前块之后", - "aiTargetCurrentBlock": "当前块", - "aiTargetCurrentSection": "当前节", - "aiTargetCompleteDocument": "完整文档", - "aiContextNone": "没有文档上下文", - "aiContextSelection": "选中的内容", - "aiContextCurrentBlock": "当前块", - "aiContextCurrentSection": "当前节", - "aiContextCompleteDocument": "完整文档", - "aiGenerating": "正在生成建议…", - "aiProposal": "AI 建议", - "aiGenerateProposal": "生成建议", - "aiContextDisclosure": "所选提供商将接收显示上下文中的 {count} 个字符。", - "aiOriginal": "原始内容", - "aiSuggested": "建议内容", - "aiApplyProposal": "应用建议", - "aiTokenUsage": "输入 token:{input} · 输出 token:{output}", - "aiStaleProposal": "生成此建议期间文档发生了变化。请重新执行操作。", - "gitAiStagedChangesChanged": "生成此提交消息期间,已暂存的更改发生了变化。请重新执行操作。", - "aiViewContext": "查看已发送的上下文", - "aiReviewExactContent": "查看确切内容", - "aiContentToChange": "要更改的内容", - "aiContentSentToAi": "发送给 AI 的内容", - "aiApiKey": "API 密钥", - "aiApiKeyStoredHint": "密钥已存储在系统凭据存储中", - "aiApiKeyEnterHint": "输入提供商 API 密钥", - "aiReplaceApiKey": "替换 API 密钥", - "aiSaveApiKey": "安全保存 API 密钥", - "aiRemoveApiKey": "移除已保存的 API 密钥", - "aiCredentialSaved": "API 密钥已保存到系统凭据存储中。", - "aiCredentialRemoved": "已移除保存的 API 密钥。", - "aiModelRouting": "模型路由", - "aiAutomaticRouting": "按任务自动选择", - "aiFixedModelRouting": "使用选中的模型", - "aiPreferredModel": "首选模型", - "aiModel": "模型", - "aiUsageThisMonth": "{requests} 个请求 · {input} 个输入 token · {output} 个输出 token", - "aiCloudConsentTitle": "将内容发送给 {provider}?", - "aiCloudConsentEnable": "启用 {provider}", - "aiCloudConsentMessage": "只会发送每个 AI 审核对话框中显示的内容。请求不保存状态,建议需要审核,API 密钥存储在 Linux 系统凭据存储中。", - "aiCloudConsentRequired": "请先在设置 → AI 中确认与 {provider} 共享数据。", - "aiGenerationVerified": "已通过 {model} 验证生成能力。有 {count} 个兼容模型可用。", - "aiColdStartObserved": "检测到本地模型冷启动。", - "aiNoCompatibleModels": "没有可用的兼容文本生成模型。", - "aiEnableProvider": "请先启用 AI 提供商。", - "aiDraftCommitMessage": "起草提交消息", - "aiDrafting": "正在起草…", - "aiDraftWithAi": "使用 AI 起草", - "generateOrUpdateMarkdownToc": "生成/更新目录", - "markdownTocTitle": "目录", - "markdownTocUpdated": "目录已更新,包含 {count} 个条目。", - "markdownTocNoHeadings": "请先添加至少一个节标题,再生成目录。", - "markdownTocMalformedMarkers": "BusyMark 目录标记缺失、重复或顺序错误。", - "diagnosticMarkdownHeadingSkippedLevel": "标题级别 {level} 跟在级别 {previousLevel} 之后;请检查节的嵌套结构。", - "diagnosticMarkdownLinkEmptyText": "链接文本为空;请提供能描述其用途的可访问名称。", - "diagnosticMarkdownLinkReviewText": "请检查链接文本“{text}”是否在上下文中描述了其用途。", - "diagnosticMarkdownTableEmptyHeader": "表头单元格必须标识其列;请补全每个空表头。", - "mathRenderFailed": "无法渲染数学表达式。", - "inlineMath": "行内数学", - "displayMath": "显示数学" + "@@locale": "zh" } diff --git a/lib/l10n/app_zh_CN.arb b/lib/l10n/app_zh_CN.arb index 48a8d688..9925ea17 100644 --- a/lib/l10n/app_zh_CN.arb +++ b/lib/l10n/app_zh_CN.arb @@ -68,7 +68,7 @@ "@feedbackSubject": { "description": "Feedback subject field label." }, - "feedbackMessage": "详细信息", + "feedbackMessage": "详细留言", "@feedbackMessage": { "description": "Detailed feedback message field label." }, @@ -406,7 +406,7 @@ "@languageItalian": { "description": "Language selector option for Italian." }, - "languageNorwegian": "Norsk", + "languageNorwegian": "Norsk bokmål", "@languageNorwegian": { "description": "Language selector option for Norwegian." }, @@ -459,9 +459,13 @@ "description": "Language selector option for Vietnamese." }, "languageJapanese": "日本語", - "@languageJapanese": {"description": "Language selector option for Japanese."}, + "@languageJapanese": { + "description": "Language selector option for Japanese." + }, "languageKorean": "한국어", - "@languageKorean": {"description": "Language selector option for Korean."}, + "@languageKorean": { + "description": "Language selector option for Korean." + }, "languageSimplifiedChinese": "简体中文", "@languageSimplifiedChinese": { "description": "Language selector option for Simplified Chinese." @@ -3683,7 +3687,7 @@ } } }, - "pdfExportedWithWarnings": "已导出 {fileName},包含 {count} 条警告。", + "pdfExportedWithWarnings": "{fileName} 已导出,包含 {count, plural, =1{1 条警告} other{{count} 条警告}}。", "@pdfExportedWithWarnings": { "description": "PDF export success message when some content fell back or was omitted.", "placeholders": { @@ -4265,10 +4269,6 @@ "@aiDisabled": { "description": "AI provider option that disables AI features." }, - "aiLocalOnlyDescription": "AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。", - "@aiLocalOnlyDescription": { - "description": "Privacy description for BusyMark local AI." - }, "aiProvider": "AI 提供商", "@aiProvider": { "description": "Label for an AI provider selection." @@ -4608,5 +4608,9 @@ "displayMath": "显示数学", "@displayMath": { "description": "Editor action that inserts a display mathematical expression." + }, + "aiExplicitEditingDescription": "AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。", + "@aiExplicitEditingDescription": { + "description": "Privacy disclosure for explicit AI editing with selected-provider context visibility." } } diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 8ff8f1b2..8f921aea 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -130,6 +130,7 @@ abstract class AppLocalizations { Locale('nl'), Locale('pl'), Locale('pt'), + Locale('pt', 'BR'), Locale('ru'), Locale('tr'), Locale('uk'), @@ -249,7 +250,7 @@ abstract class AppLocalizations { /// Optional reply email field label. /// /// In en, this message translates to: - /// **'Reply email (optional)'** + /// **'Email address for replies (optional)'** String get feedbackReplyEmail; /// Checkbox label for optional technical details. @@ -735,7 +736,7 @@ abstract class AppLocalizations { /// Language selector option for Norwegian. /// /// In en, this message translates to: - /// **'Norsk'** + /// **'Norsk bokmål'** String get languageNorwegian; /// Language selector option for French. @@ -2643,7 +2644,7 @@ abstract class AppLocalizations { /// Tooltip for replacing the current search match. /// /// In en, this message translates to: - /// **'Replace current'** + /// **'Replace current match'** String get sourceSearchReplaceCurrent; /// Tooltip for replacing the current match and moving to the next. @@ -2697,7 +2698,7 @@ abstract class AppLocalizations { /// Checkbox label for selecting every replacement match in a file. /// /// In en, this message translates to: - /// **'Select all {count} matches'** + /// **'{count, plural, =1{Select 1 match} other{Select all {count} matches}}'** String selectFileMatches(int count); /// Summary shown after applying workspace replacements. @@ -3677,7 +3678,7 @@ abstract class AppLocalizations { /// Writerside module diagnostic for an include without a from attribute. /// /// In en, this message translates to: - /// **' is missing from.'** + /// **' is missing the from attribute.'** String get diagnosticWritersideIncludeMissingFrom; /// Writerside module diagnostic for a missing include source. @@ -4748,7 +4749,7 @@ abstract class AppLocalizations { /// PDF export success message when some content fell back or was omitted. /// /// In en, this message translates to: - /// **'{fileName} was exported with {count} warning(s).'** + /// **'{fileName} was exported with {count, plural, =1{1 warning} other{{count} warnings}}.'** String pdfExportedWithWarnings(String fileName, int count); /// Error shown when the bundled PDF compiler is unavailable. @@ -5078,7 +5079,7 @@ abstract class AppLocalizations { /// Count of discovered Markdown import files. /// /// In en, this message translates to: - /// **'{count} Markdown file(s) found'** + /// **'{count, plural, =1{1 Markdown file found} other{{count} Markdown files found}}'** String markdownFilesFound(int count); /// Empty state for a Writerside Markdown import source. @@ -5430,11 +5431,11 @@ abstract class AppLocalizations { /// **'Disabled'** String get aiDisabled; - /// Privacy description for BusyMark local AI. + /// Privacy disclosure for explicit AI editing with selected-provider context visibility. /// /// In en, this message translates to: /// **'AI editing is explicit. BusyMark sends only the context shown for the selected provider and never applies a proposal without review.'** - String get aiLocalOnlyDescription; + String get aiExplicitEditingDescription; /// Label for an AI provider selection. /// @@ -5487,7 +5488,7 @@ abstract class AppLocalizations { /// Successful Ollama connection status. /// /// In en, this message translates to: - /// **'Connected. {count} installed model(s) found.'** + /// **'Connected. {count, plural, =1{1 installed model found} other{{count} installed models found}}.'** String aiConnectionReady(int count); /// AI model setting shown before a model has been selected or discovered. @@ -5619,7 +5620,7 @@ abstract class AppLocalizations { /// Disclosure of AI context size. /// /// In en, this message translates to: - /// **'The selected provider will receive {count} characters from the displayed context.'** + /// **'The selected provider will receive {count, plural, =1{1 character} other{{count} characters}} from the displayed context.'** String aiContextDisclosure(int count); /// Label for original text in an AI proposal review. @@ -5793,7 +5794,7 @@ abstract class AppLocalizations { /// Successful AI model generation qualification. /// /// In en, this message translates to: - /// **'Generation verified with {model}. {count} compatible model(s) available.'** + /// **'Generation verified with {model}. {count, plural, =1{1 compatible model available} other{{count} compatible models available}}.'** String aiGenerationVerified(String model, int count); /// Additional model qualification status when local generation required a cold start. @@ -5847,7 +5848,7 @@ abstract class AppLocalizations { /// Confirmation after generating a Markdown table of contents. /// /// In en, this message translates to: - /// **'Table of contents updated with {count} entries.'** + /// **'Table of contents updated with {count, plural, =1{1 entry} other{{count} entries}}.'** String markdownTocUpdated(int count); /// Message when a Markdown document has no section headings for a generated table of contents. @@ -5946,6 +5947,14 @@ class _AppLocalizationsDelegate AppLocalizations lookupAppLocalizations(Locale locale) { // Lookup logic when language+country codes are specified. switch (locale.languageCode) { + case 'pt': + { + switch (locale.countryCode) { + case 'BR': + return AppLocalizationsPtBr(); + } + break; + } case 'zh': { switch (locale.countryCode) { diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index feda322f..2651e933 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -321,7 +321,7 @@ class AppLocalizationsAr extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -798,7 +798,14 @@ class AppLocalizationsAr extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return 'يحتوي $count من المستندات على تغييرات غير محفوظة. هل تريد حفظها قبل المتابعة؟'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count مستندات تحتوي على تغييرات غير محفوظة. احفظها قبل المتابعة؟', + one: 'يوجد 1 مستند يحتوي على تغييرات غير محفوظة. احفظه قبل المتابعة؟', + ); + return '$_temp0'; } @override @@ -1689,12 +1696,27 @@ class AppLocalizationsAr extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'تمت استعادة $count من المستندات غير المحفوظة. راجع كل مستند تمت استعادته قبل المتابعة.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'تم استعادة $count مستندات غير محفوظة. راجع كل واحد قبل الحفظ أو تجاهله.', + one: 'تم استعادة مستند غير محفوظ واحد. راجعه قبل الحفظ أو تجاهله.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'تعذرت استعادة $count من سجلات الاستعادة التالفة. تظل المستندات الصالحة التي تمت استعادتها متاحة.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'تعذر استعادة $count سجلات استرداد تالف. لا تزال سجلات الاسترداد الصالحة متاحة.', + one: + 'تعذر استعادة سجل استعادة تالف واحد. تم الاحتفاظ بملف الاسترداد الأصلي للفحص.', + ); + return '$_temp0'; } @override @@ -2336,7 +2358,10 @@ class AppLocalizationsAr extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count ملفات مُرحَّلة', + other: '$count ملفات مرحّلة', + many: '$count ملفات مرحّلة', + few: '$count ملفات مرحّلة', + two: 'ملفان مرحّلان', one: 'ملف مُرحَّل واحد', ); return '$_temp0'; @@ -2393,12 +2418,10 @@ class AppLocalizationsAr extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'ستتم استعادة الملفات المتعقبة المحددة من Git.', - many: 'ستتم استعادة الملفات المتعقبة المحددة من Git.', - few: 'ستتم استعادة الملفات المتعقبة المحددة من Git.', - two: 'ستتم استعادة الملفين المتعقبين المحددين من Git.', - one: 'ستتم استعادة الملف المتعقب المحدد من Git.', - zero: 'لا توجد ملفات متعقبة محددة لاستعادتها من Git.', + other: + 'ستتم استعادة جميع تغييرات المرحلة وغير المرحلة في الملفات المتعقبة المحددة إلى HEAD.', + one: + 'ستتم استعادة جميع تغييرات المرحلة وغير المرحلة في الملف المتعقب المحدد إلى HEAD.', ); return '$_temp0'; } @@ -2451,10 +2474,10 @@ class AppLocalizationsAr extends AppLocalizations { } @override - String get gitProjectHistory => 'المشروع'; + String get gitProjectHistory => 'تاريخ المشروع'; @override - String get gitFileHistory => 'الملف الحالي'; + String get gitFileHistory => 'تاريخ الملف'; @override String get gitFileHistoryRequiresOpenFile => @@ -2816,7 +2839,13 @@ class AppLocalizationsAr extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return 'تم تصدير $fileName. صور تعذر تضمينها: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count تحذيرات', + one: 'تحذير واحد', + ); + return '$fileName تم تصديره مع $_temp0.'; } @override @@ -3233,7 +3262,7 @@ class AppLocalizationsAr extends AppLocalizations { String get aiDisabled => 'معطّل'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'لا يبدأ التحرير بالذكاء الاصطناعي إلا بإجراء صريح. لا يرسل BusyMark إلا السياق المعروض إلى المزوّد المحدد، ولا يطبّق أي اقتراح من دون مراجعته.'; @override diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index d1133e45..f3918d08 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -325,7 +325,7 @@ class AppLocalizationsDe extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -818,7 +818,15 @@ class AppLocalizationsDe extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count Dokumente enthalten ungespeicherte Änderungen. Vor dem Fortfahren speichern?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count Dokumente haben ungespeicherte Änderungen. Speichern Sie diese vor dem Fortfahren.', + one: + '1 Dokument hat ungespeicherte Änderungen. Speichern Sie es vor dem Fortfahren.', + ); + return '$_temp0'; } @override @@ -1705,12 +1713,28 @@ class AppLocalizationsDe extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return '$count ungespeicherte Dokumente wurden wiederhergestellt. Prüfen Sie jedes wiederhergestellte Dokument, bevor Sie fortfahren.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count nicht gespeicherte Dokumente wiederhergestellt. Überprüfen Sie jedes wiederhergestellte Dokument vor dem Speichern oder Verwerfen.', + one: + '1 nicht gespeichertes Dokument wiederhergestellt. Überprüfen Sie es vor dem Speichern oder Verwerfen.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return '$count beschädigte Wiederherstellungsdatensätze konnten nicht wiederhergestellt werden. Gültige wiederhergestellte Dokumente bleiben verfügbar.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count beschädigte Wiederherstellungsdatensätze konnten nicht wiederhergestellt werden. Die gültigen Wiederherstellungsdatensätze bleiben verfügbar.', + one: + 'Ein beschädigter Wiederherstellungsdatensatz konnte nicht wiederhergestellt werden. Die Originaldatei der Wiederherstellung wurde zur Überprüfung aufbewahrt.', + ); + return '$_temp0'; } @override @@ -2406,9 +2430,9 @@ class AppLocalizationsDe extends AppLocalizations { count, locale: localeName, other: - 'Die ausgewählten versionierten Dateien werden auf den Stand in Git zurückgesetzt.', + 'Alle gestageten und nicht gestageten Änderungen der ausgewählten versionierten Dateien werden auf den Stand in Git zurückgesetzt.', one: - 'Die ausgewählte versionierte Datei wird auf den Stand in Git zurückgesetzt.', + 'Alle gestageten und nicht gestageten Änderungen der ausgewählten versionierten Datei werden auf den Stand in Git zurückgesetzt.', ); return '$_temp0'; } @@ -2455,10 +2479,10 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String get gitProjectHistory => 'Projekt'; + String get gitProjectHistory => 'Projektverlauf'; @override - String get gitFileHistory => 'Aktuelle Datei'; + String get gitFileHistory => 'Dateiverlauf'; @override String get gitFileHistoryRequiresOpenFile => @@ -2825,7 +2849,13 @@ class AppLocalizationsDe extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName wurde exportiert. Nicht einbezogene Bilder: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Warnungen', + one: '1 Warnung', + ); + return '$fileName wurde mit $_temp0 exportiert.'; } @override @@ -3245,7 +3275,7 @@ class AppLocalizationsDe extends AppLocalizations { String get aiDisabled => 'Deaktiviert'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'KI-Bearbeitung erfolgt nur auf ausdrücklichen Befehl. BusyMark sendet ausschließlich den angezeigten Kontext an den ausgewählten Anbieter und übernimmt keinen Vorschlag ohne Prüfung.'; @override diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index a420b7b4..c6efe6f9 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -66,7 +66,7 @@ class AppLocalizationsEn extends AppLocalizations { String get feedbackMessage => 'Detailed message'; @override - String get feedbackReplyEmail => 'Reply email (optional)'; + String get feedbackReplyEmail => 'Email address for replies (optional)'; @override String get feedbackIncludeTechnicalDetails => 'Include technical details'; @@ -322,7 +322,7 @@ class AppLocalizationsEn extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -1420,7 +1420,7 @@ class AppLocalizationsEn extends AppLocalizations { String get sourceSearchReplacement => 'Replace with'; @override - String get sourceSearchReplaceCurrent => 'Replace current'; + String get sourceSearchReplaceCurrent => 'Replace current match'; @override String get sourceSearchReplaceAndFindNext => 'Replace and find next'; @@ -1448,7 +1448,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String selectFileMatches(int count) { - return 'Select all $count matches'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Select all $count matches', + one: 'Select 1 match', + ); + return '$_temp0'; } @override @@ -2159,7 +2165,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String get diagnosticWritersideIncludeMissingFrom => - ' is missing from.'; + ' is missing the from attribute.'; @override String diagnosticWritersideIncludeSourceMissing(String from) { @@ -2816,7 +2822,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName was exported with $count warning(s).'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count warnings', + one: '1 warning', + ); + return '$fileName was exported with $_temp0.'; } @override @@ -2994,7 +3006,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String markdownFilesFound(int count) { - return '$count Markdown file(s) found'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Markdown files found', + one: '1 Markdown file found', + ); + return '$_temp0'; } @override @@ -3232,7 +3250,7 @@ class AppLocalizationsEn extends AppLocalizations { String get aiDisabled => 'Disabled'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'AI editing is explicit. BusyMark sends only the context shown for the selected provider and never applies a proposal without review.'; @override @@ -3261,7 +3279,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String aiConnectionReady(int count) { - return 'Connected. $count installed model(s) found.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count installed models found', + one: '1 installed model found', + ); + return 'Connected. $_temp0.'; } @override @@ -3331,7 +3355,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String aiContextDisclosure(int count) { - return 'The selected provider will receive $count characters from the displayed context.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count characters', + one: '1 character', + ); + return 'The selected provider will receive $_temp0 from the displayed context.'; } @override @@ -3435,7 +3465,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String aiGenerationVerified(String model, int count) { - return 'Generation verified with $model. $count compatible model(s) available.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count compatible models available', + one: '1 compatible model available', + ); + return 'Generation verified with $model. $_temp0.'; } @override @@ -3465,7 +3501,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String markdownTocUpdated(int count) { - return 'Table of contents updated with $count entries.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count entries', + one: '1 entry', + ); + return 'Table of contents updated with $_temp0.'; } @override diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index 2a38369e..4f3ae191 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -324,7 +324,7 @@ class AppLocalizationsEs extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -816,7 +816,15 @@ class AppLocalizationsEs extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return 'Hay $count documentos con cambios sin guardar. ¿Desea guardarlos antes de continuar?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Hay $count documentos con cambios sin guardar. ¿Desea guardarlos antes de continuar?', + one: + 'Hay 1 documento con cambios sin guardar. ¿Desea guardarlo antes de continuar?', + ); + return '$_temp0'; } @override @@ -1433,7 +1441,7 @@ class AppLocalizationsEs extends AppLocalizations { String get sourceSearchReplacement => 'Reemplazar por'; @override - String get sourceSearchReplaceCurrent => 'Reemplazar actual'; + String get sourceSearchReplaceCurrent => 'Reemplazar la coincidencia actual'; @override String get sourceSearchReplaceAndFindNext => 'Reemplazar y buscar siguiente'; @@ -1702,12 +1710,28 @@ class AppLocalizationsEs extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Se recuperaron $count documentos sin guardar. Revise cada documento recuperado antes de continuar.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Se recuperaron $count documentos sin guardar. Revise cada uno antes de guardar o descartarlo.', + one: + 'Se recuperó 1 documento sin guardar. Revísalo antes de guardarlo o descartarlo.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'No se pudieron restaurar $count registros de recuperación dañados. Los documentos recuperados válidos siguen disponibles.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'No se pudieron recuperar $count registros de recuperación dañados. Los registros de recuperación válidos siguen disponibles.', + one: + 'No se pudo recuperar 1 registro de recuperación dañado. Se conservó el archivo de recuperación original para su revisión.', + ); + return '$_temp0'; } @override @@ -2406,9 +2430,9 @@ class AppLocalizationsEs extends AppLocalizations { count, locale: localeName, other: - 'Los archivos seleccionados que están bajo seguimiento se restaurarán desde Git.', + 'Se restaurarán en HEAD todos los cambios staged y no staged de los archivos rastreados seleccionados.', one: - 'El archivo seleccionado que está bajo seguimiento se restaurará desde Git.', + 'Se restaurarán en HEAD todos los cambios staged y no staged del archivo rastreado seleccionado.', ); return '$_temp0'; } @@ -2455,10 +2479,10 @@ class AppLocalizationsEs extends AppLocalizations { } @override - String get gitProjectHistory => 'Proyecto'; + String get gitProjectHistory => 'Historial del proyecto'; @override - String get gitFileHistory => 'Archivo actual'; + String get gitFileHistory => 'Historial del archivo'; @override String get gitFileHistoryRequiresOpenFile => @@ -2826,7 +2850,13 @@ class AppLocalizationsEs extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return 'Se exportó $fileName. Imágenes que no se pudieron incluir: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count advertencias', + one: '1 advertencia', + ); + return '$fileName se exportó con $_temp0.'; } @override @@ -3246,7 +3276,7 @@ class AppLocalizationsEs extends AppLocalizations { String get aiDisabled => 'Desactivado'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'La edición con IA solo se ejecuta de forma explícita. BusyMark envía únicamente el contexto mostrado al proveedor seleccionado y nunca aplica una propuesta sin revisarla.'; @override diff --git a/lib/l10n/generated/app_localizations_et.dart b/lib/l10n/generated/app_localizations_et.dart index 489202e0..888e8451 100644 --- a/lib/l10n/generated/app_localizations_et.dart +++ b/lib/l10n/generated/app_localizations_et.dart @@ -321,7 +321,7 @@ class AppLocalizationsEt extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -805,7 +805,15 @@ class AppLocalizationsEt extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count dokumendis on salvestamata muudatusi. Kas salvestada need enne jätkamist?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count dokumendil on salvestamata muudatusi. Salvestage need enne jätkamist.', + one: + '1 dokumendil on salvestamata muudatusi. Salvestage see enne jätkamist.', + ); + return '$_temp0'; } @override @@ -1684,12 +1692,28 @@ class AppLocalizationsEt extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Taastati $count salvestamata dokumenti. Vaadake iga taastatud dokument enne jätkamist üle.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Taastati $count salvestamata dokumenti. Kontrolli igaüht enne salvestamist või hülgamist.', + one: + 'Taastati 1 salvestamata dokumendi. Kontrolli see enne salvestamist või hülgamist.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return '$count rikutud taastekirjet ei saanud taastada. Kehtivad taastatud dokumendid on endiselt saadaval.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count kahjustunud taastamiskirjet ei õnnestunud taastada. Kehtivad taastamiskirjed jäävad alles.', + one: + 'Ühte kahjustunud taastamiskirjet ei õnnestunud taastada. Algne taastamisfail on ülevaatuseks alles jäetud.', + ); + return '$_temp0'; } @override @@ -2379,8 +2403,10 @@ class AppLocalizationsEt extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Valitud jälgitavad failid taastatakse Gitist.', - one: 'Valitud jälgitav fail taastatakse Gitist.', + other: + 'Valitud jälgitavate failide kõiki indekseeritud ja indekseerimata muudatusi taastatakse HEAD-ile.', + one: + 'Valitud jälgitava faili kõiki indekseeritud ja indekseerimata muudatusi taastatakse HEAD-ile.', ); return '$_temp0'; } @@ -2427,10 +2453,10 @@ class AppLocalizationsEt extends AppLocalizations { } @override - String get gitProjectHistory => 'Projekt'; + String get gitProjectHistory => 'Projekti ajalugu'; @override - String get gitFileHistory => 'Praegune fail'; + String get gitFileHistory => 'Faili ajalugu'; @override String get gitFileHistoryRequiresOpenFile => @@ -2795,7 +2821,13 @@ class AppLocalizationsEt extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName eksporditi. Lisamata jäänud pilte: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count hoiatusaga', + one: '1 hoiatusuga', + ); + return '$fileName eksporditi $_temp0.'; } @override @@ -3213,7 +3245,7 @@ class AppLocalizationsEt extends AppLocalizations { String get aiDisabled => 'Keelatud'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'Tehisintellektiga redigeerimine käivitatakse ainult selgesõnaliselt. BusyMark saadab valitud teenusepakkujale üksnes kuvatud konteksti ega rakenda ettepanekut ilma ülevaatuseta.'; @override diff --git a/lib/l10n/generated/app_localizations_fa.dart b/lib/l10n/generated/app_localizations_fa.dart index 9c00a0c5..53a81866 100644 --- a/lib/l10n/generated/app_localizations_fa.dart +++ b/lib/l10n/generated/app_localizations_fa.dart @@ -321,7 +321,7 @@ class AppLocalizationsFa extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -801,7 +801,14 @@ class AppLocalizationsFa extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return 'تعداد $count سند تغییرات ذخیره‌نشده دارند. پیش از ادامه ذخیره شوند؟'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count سند دارای تغییرات ذخیره‌نشده هستند. قبل از ادامه ذخیره کنید.', + one: '۱ سند دارای تغییرات ذخیره‌نشده است. قبل از ادامه ذخیره کنید.', + ); + return '$_temp0'; } @override @@ -1454,7 +1461,7 @@ class AppLocalizationsFa extends AppLocalizations { String get sourceSearchReplacement => 'جایگزینی با'; @override - String get sourceSearchReplaceCurrent => 'جایگزینی مورد فعلی'; + String get sourceSearchReplaceCurrent => 'جایگزینی تطابق فعلی'; @override String get sourceSearchReplaceAndFindNext => 'جایگزینی و یافتن بعدی'; @@ -1726,12 +1733,27 @@ class AppLocalizationsFa extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'تعداد $count سند ذخیره‌نشده بازیابی شد. پیش از ادامه هر سند بازیابی‌شده را بررسی کنید.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count سند ذخیره‌نشده بازیابی شدند. هر کدام را قبل از ذخیره یا حذف بازبینی کنید.', + one: 'یک سند ذخیره‌نشده بازیابی شد. قبل از ذخیره یا حذف آن بازبینی کنید.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'تعداد $count رکورد بازیابی آسیب‌دیده قابل بازیابی نبود. سندهای معتبر بازیابی‌شده همچنان در دسترس‌اند.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count رکورد بازیابی آسیب‌دیده نتوانستیم بازیابی کنیم. رکوردهای بازیابی معتبر همچنان در دسترس هستند.', + one: + 'یک رکورد بازیابی آسیب‌دیده را نتوانستیم بازیابی کنیم. فایل بازیابی اولیه برای بررسی حفظ شده است.', + ); + return '$_temp0'; } @override @@ -2330,10 +2352,10 @@ class AppLocalizationsFa extends AppLocalizations { String get gitActions => 'عملیات Git'; @override - String get gitPull => 'دریافت'; + String get gitPull => 'کشیدن'; @override - String get gitFetch => 'دریافت'; + String get gitFetch => 'واکشی'; @override String get gitPush => 'ارسال'; @@ -2431,8 +2453,10 @@ class AppLocalizationsFa extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'فایل‌های رهگیری‌شدهٔ انتخابی از Git بازیابی خواهند شد.', - one: 'فایل رهگیری‌شدهٔ انتخابی از Git بازیابی خواهد شد.', + other: + 'تمام تغییرات مرحله‌بندی‌شده و مرحله‌نشده فایل‌های رهگیری‌شدهٔ انتخاب‌شده به HEAD بازگردانده می‌شود.', + one: + 'تمام تغییرات مرحله‌بندی‌شده و مرحله‌نشده فایل رهگیری‌شدهٔ انتخاب‌شده به HEAD بازگردانده می‌شود.', ); return '$_temp0'; } @@ -2478,10 +2502,10 @@ class AppLocalizationsFa extends AppLocalizations { } @override - String get gitProjectHistory => 'پروژه'; + String get gitProjectHistory => 'سابقه پروژه'; @override - String get gitFileHistory => 'فایل فعلی'; + String get gitFileHistory => 'سابقه فایل'; @override String get gitFileHistoryRequiresOpenFile => @@ -2850,7 +2874,13 @@ class AppLocalizationsFa extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName صادر شد. تصاویر افزوده‌نشده: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count هشدار', + one: '1 هشدار', + ); + return '$fileName با $_temp0 صادر شد.'; } @override @@ -3264,7 +3294,7 @@ class AppLocalizationsFa extends AppLocalizations { String get aiDisabled => 'غیرفعال'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'ویرایش با هوش مصنوعی فقط با اقدام صریح آغاز می‌شود. BusyMark تنها زمینهٔ نمایش‌داده‌شده را برای ارائه‌دهندهٔ انتخابی می‌فرستد و هیچ پیشنهادی را بدون بازبینی اعمال نمی‌کند.'; @override diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 6516475f..7e0ddb5c 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -324,7 +324,7 @@ class AppLocalizationsFr extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -426,7 +426,7 @@ class AppLocalizationsFr extends AppLocalizations { @override String get shortcutDeleteTreeItemDescription => - 'Supprimer l’élément sélectionné dans « Fichiers » ou retirer la rubrique sélectionnée de la table des matières'; + 'Supprimer l’élément sélectionné dans « Fichiers » ou retirer le sujet sélectionné de la table des matières'; @override String get shortcutGroupGeneral => 'Général'; @@ -815,7 +815,15 @@ class AppLocalizationsFr extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count documents contiennent des modifications non enregistrées. Les enregistrer avant de continuer ?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documents contiennent des modifications non enregistrées. Enregistrez-les avant de continuer.', + one: + '1 document contient des modifications non enregistrées. Enregistrez-le avant de continuer.', + ); + return '$_temp0'; } @override @@ -1432,7 +1440,8 @@ class AppLocalizationsFr extends AppLocalizations { String get sourceSearchReplacement => 'Remplacer par'; @override - String get sourceSearchReplaceCurrent => 'Remplacer la sélection actuelle'; + String get sourceSearchReplaceCurrent => + 'Remplacer la correspondance actuelle'; @override String get sourceSearchReplaceAndFindNext => @@ -1702,12 +1711,28 @@ class AppLocalizationsFr extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return '$count documents non enregistrés ont été récupérés. Vérifiez chaque document récupéré avant de continuer.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documents non enregistrés ont été récupérés. Vérifiez chacun avant de l’enregistrer ou de l’ignorer.', + one: + '1 document non enregistré a été récupéré. Vérifiez-le avant de l’enregistrer ou de l’ignorer.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return '$count enregistrements de récupération endommagés n’ont pas pu être restaurés. Les documents valides récupérés restent disponibles.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count enregistrements de récupération endommagés n’ont pas pu être restaurés. Les enregistrements de récupération valides restent disponibles.', + one: + 'Un enregistrement de récupération endommagé n’a pas pu être restauré. Le fichier de récupération d’origine a été conservé pour inspection.', + ); + return '$_temp0'; } @override @@ -2403,8 +2428,10 @@ class AppLocalizationsFr extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Les fichiers suivis sélectionnés seront restaurés depuis Git.', - one: 'Le fichier suivi sélectionné sera restauré depuis Git.', + other: + 'Toutes les modifications staged et unstaged des fichiers suivis sélectionnés seront restaurées vers HEAD.', + one: + 'Toutes les modifications staged et unstaged du fichier suivi sélectionné seront restaurées vers HEAD.', ); return '$_temp0'; } @@ -2451,10 +2478,10 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String get gitProjectHistory => 'Projet'; + String get gitProjectHistory => 'Historique du projet'; @override - String get gitFileHistory => 'Fichier actuel'; + String get gitFileHistory => 'Historique du fichier'; @override String get gitFileHistoryRequiresOpenFile => @@ -2819,7 +2846,13 @@ class AppLocalizationsFr extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName a été exporté. Images non incluses : $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count avertissements', + one: '1 avertissement', + ); + return '$fileName a été exporté avec $_temp0.'; } @override @@ -3101,7 +3134,7 @@ class AppLocalizationsFr extends AppLocalizations { @override String get errorWritersideInstanceLibraryImport => - 'Une bibliothèque de sommaire ne peut pas importer de rubriques Markdown.'; + 'Une bibliothèque TOC ne peut pas importer de sujets Markdown.'; @override String get errorWritersideInstanceWebPathInvalid => @@ -3155,7 +3188,7 @@ class AppLocalizationsFr extends AppLocalizations { @override String get diagnosticWritersideTreeConflictingTargets => - 'Un élément de sommaire ne peut pas cibler plusieurs rubriques, références, liens ou redirections.'; + 'Un élément de sommaire ne peut pas cibler plusieurs sujets, références, liens ou redirections.'; @override String diagnosticWritersideTreeDuplicateElementId(String id) { @@ -3212,7 +3245,7 @@ class AppLocalizationsFr extends AppLocalizations { String topic, String instance, ) { - return 'La rubrique « $topic » ne fait pas partie de l’instance référencée « $instance ».'; + return 'Le sujet « $topic » n’est pas dans l’instance référencée « $instance ».'; } @override @@ -3240,7 +3273,7 @@ class AppLocalizationsFr extends AppLocalizations { String get aiDisabled => 'Désactivé'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'L’édition par IA est déclenchée explicitement. BusyMark envoie uniquement le contexte affiché au fournisseur sélectionné et n’applique jamais une proposition sans validation.'; @override diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart index 9a85b54a..013d1555 100644 --- a/lib/l10n/generated/app_localizations_hi.dart +++ b/lib/l10n/generated/app_localizations_hi.dart @@ -323,7 +323,7 @@ class AppLocalizationsHi extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -797,7 +797,14 @@ class AppLocalizationsHi extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count दस्तावेज़ों में सहेजे नहीं गए बदलाव हैं। जारी रखने से पहले इन्हें सहेजें?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count दस्तावेज़ों में असुरक्षित बदलाव हैं। इन्हें जारी रखने से पहले सहेजें।', + one: '1 दस्तावेज़ में असुरक्षित बदलाव हैं। इसे जारी रखने से पहले सहेजें।', + ); + return '$_temp0'; } @override @@ -1677,12 +1684,28 @@ class AppLocalizationsHi extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return '$count सहेजे नहीं गए दस्तावेज़ पुनर्प्राप्त किए गए। जारी रखने से पहले प्रत्येक पुनर्प्राप्त दस्तावेज़ की समीक्षा करें।'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count बिना सहेजे दस्तावेज़ पुनर्प्राप्त किए गए। प्रत्येक की समीक्षा करके सहेजें या हटाएँ।', + one: + '1 बिना सहेजा दस्तावेज़ पुनर्प्राप्त किया गया। इसे सहेजने या हटाने से पहले समीक्षा करें।', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return '$count क्षतिग्रस्त पुनर्प्राप्ति रिकॉर्ड बहाल नहीं किए जा सके। मान्य पुनर्प्राप्त दस्तावेज़ उपलब्ध हैं।'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count क्षतिग्रस्त पुनर्प्राप्ति रिकॉर्ड पुनर्स्थापित नहीं किए जा सके। वैध पुनर्प्राप्ति रिकॉर्ड अभी भी उपलब्ध हैं।', + one: + 'एक क्षतिग्रस्त पुनर्प्राप्ति रिकॉर्ड पुनर्स्थापित नहीं किया जा सका। मूल पुनर्प्राप्ति फ़ाइल निरीक्षण के लिए सुरक्षित रखी गई।', + ); + return '$_temp0'; } @override @@ -2374,8 +2397,10 @@ class AppLocalizationsHi extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'चयनित ट्रैक की गई फ़ाइलें Git से पुनर्स्थापित की जाएँगी।', - one: 'चयनित ट्रैक की गई फ़ाइल Git से पुनर्स्थापित की जाएगी।', + other: + 'चयनित ट्रैक की गई फ़ाइलों के सभी चरणबद्ध और अचयनित परिवर्तन HEAD पर वापस लाए जाएँगे।', + one: + 'चयनित ट्रैक की गई फ़ाइल के सभी चरणबद्ध और अचयनित परिवर्तन HEAD पर वापस लाए जाएँगे।', ); return '$_temp0'; } @@ -2422,10 +2447,10 @@ class AppLocalizationsHi extends AppLocalizations { } @override - String get gitProjectHistory => 'प्रोजेक्ट'; + String get gitProjectHistory => 'परियोजना इतिहास'; @override - String get gitFileHistory => 'मौजूदा फ़ाइल'; + String get gitFileHistory => 'फ़ाइल इतिहास'; @override String get gitFileHistoryRequiresOpenFile => @@ -2789,7 +2814,13 @@ class AppLocalizationsHi extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName निर्यात किया गया। शामिल न हो सकने वाले चित्र: $count।'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count चेतावनियों', + one: '1 चेतावनी', + ); + return '$fileName को $_temp0 के साथ निर्यात किया गया.'; } @override @@ -3208,7 +3239,7 @@ class AppLocalizationsHi extends AppLocalizations { String get aiDisabled => 'अक्षम'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'AI संपादन केवल स्पष्ट कार्रवाई से शुरू होता है। BusyMark चयनित प्रदाता को केवल दिखाया गया संदर्भ भेजता है और समीक्षा के बिना किसी प्रस्ताव को लागू नहीं करता।'; @override diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart index 58c98395..ef70dc34 100644 --- a/lib/l10n/generated/app_localizations_id.dart +++ b/lib/l10n/generated/app_localizations_id.dart @@ -21,7 +21,8 @@ class AppLocalizationsId extends AppLocalizations { String get aboutBusyMark => 'Tentang BusyMark'; @override - String get aboutTagline => 'Markdown dan Editor Writerside'; + String get aboutTagline => + 'Editor untuk file Markdown dan proyek dokumentasi yang kompatibel dengan Writerside'; @override String get aboutLicenseLabel => 'Lisensi'; @@ -66,7 +67,7 @@ class AppLocalizationsId extends AppLocalizations { String get feedbackMessage => 'Pesan terperinci'; @override - String get feedbackReplyEmail => 'Balasan email (opsional)'; + String get feedbackReplyEmail => 'Alamat email balasan (opsional)'; @override String get feedbackIncludeTechnicalDetails => 'Sertakan detail teknis'; @@ -172,10 +173,10 @@ class AppLocalizationsId extends AppLocalizations { String get cut => 'Potong'; @override - String get promoteSection => 'Bagian promosi'; + String get promoteSection => 'Naikkan bagian'; @override - String get demoteSection => 'Bagian demosi'; + String get demoteSection => 'Turunkan bagian'; @override String get moveSectionUp => 'Pindahkan bagian ke atas'; @@ -198,7 +199,7 @@ class AppLocalizationsId extends AppLocalizations { String get delete => 'Hapus'; @override - String get discard => 'Membuang'; + String get discard => 'Buang'; @override String get editor => 'Editor'; @@ -322,7 +323,7 @@ class AppLocalizationsId extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -506,8 +507,7 @@ class AppLocalizationsId extends AppLocalizations { String get shortcutUndoDescription => 'Urungkan pengeditan terakhir'; @override - String get shortcutRedoDescription => - 'Ulangi pengeditan terakhir yang belum selesai'; + String get shortcutRedoDescription => 'Ulangi tindakan terakhir'; @override String get shortcutInsertIndentation => 'Masukkan lekukan'; @@ -652,7 +652,7 @@ class AppLocalizationsId extends AppLocalizations { String get instanceId => 'ID instance'; @override - String get startTopicTitle => 'Mulai judul topik'; + String get startTopicTitle => 'Topik awal'; @override String get location => 'Lokasi'; @@ -787,7 +787,7 @@ class AppLocalizationsId extends AppLocalizations { String get closeUnsavedChangesCancel => 'Batal'; @override - String get closeUnsavedChangesDiscard => 'Membuang'; + String get closeUnsavedChangesDiscard => 'Buang'; @override String get closeUnsavedChangesSave => 'Simpan'; @@ -1263,7 +1263,7 @@ class AppLocalizationsId extends AppLocalizations { String get topicUsageTopicLinks => 'Tautan topik'; @override - String get topicUsageIncludes => 'Termasuk'; + String get topicUsageIncludes => 'Elemen include'; @override String usageCount(int count) { @@ -1326,7 +1326,7 @@ class AppLocalizationsId extends AppLocalizations { @override String orphanTopicMessage(String topic) { - return '“$topic” tidak lagi digunakan di mana pun dalam proyek Writerside ini. Hapus file, atau simpan untuk digunakan di tempat lain.'; + return '“$topic” tidak lagi digunakan di mana pun dalam proyek Writerside ini. Hapus file, atau simpan agar dapat digunakan pada instance lain.'; } @override @@ -1426,7 +1426,7 @@ class AppLocalizationsId extends AppLocalizations { String get sourceSearchReplacement => 'Ganti dengan'; @override - String get sourceSearchReplaceCurrent => 'Ganti arus'; + String get sourceSearchReplaceCurrent => 'Ganti kecocokan saat ini'; @override String get sourceSearchReplaceAndFindNext => 'Ganti dan temukan selanjutnya'; @@ -1438,10 +1438,10 @@ class AppLocalizationsId extends AppLocalizations { String get workspaceReplace => 'Ganti di Ruang Kerja'; @override - String get reviewReplacements => 'Tinjau penggantinya'; + String get reviewReplacements => 'Tinjau penggantian'; @override - String get applyReplacements => 'Terapkan penggantinya'; + String get applyReplacements => 'Terapkan penggantian'; @override String get skippedFiles => 'File yang dilewati'; @@ -1459,7 +1459,7 @@ class AppLocalizationsId extends AppLocalizations { @override String workspaceReplaceApplied(int matches, int files, int skipped) { - return 'Mengganti $matches kecocokan dalam file $files; dilewati $skipped.'; + return 'Mengganti $matches kecocokan di $files file; melewati $skipped.'; } @override @@ -1533,7 +1533,7 @@ class AppLocalizationsId extends AppLocalizations { @override String recoveredDocumentReview(String fileName) { - return 'Memulihkan konten yang belum disimpan untuk $fileName. Periksa, lalu simpan, simpan sebagai, atau buang.'; + return 'Konten belum disimpan yang dipulihkan untuk $fileName. Tinjau, kemudian simpan, simpan sebagai, atau buang.'; } @override @@ -1559,7 +1559,7 @@ class AppLocalizationsId extends AppLocalizations { String get nothingToRead => 'Tidak ada yang perlu dibaca'; @override - String get admonition => 'Peringatan'; + String get admonition => 'Kotak keterangan'; @override String get quote => 'Kutipan'; @@ -1724,12 +1724,12 @@ class AppLocalizationsId extends AppLocalizations { @override String errorTargetDirectoryNotEmpty(String path) { - return 'Direktori target sudah ada dan tidak kosong: $path'; + return 'Direktori tujuan sudah ada dan berisi file: $path'; } @override String errorTargetPathNotDirectory(String path) { - return 'Jalur target sudah ada dan bukan merupakan direktori: $path'; + return 'Jalur tujuan sudah ada tetapi bukan direktori: $path'; } @override @@ -1786,7 +1786,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get errorInstanceIdInvalid => - 'ID Instance harus dimulai dengan huruf kecil dan hanya berisi huruf kecil, angka, garis bawah, dan tanda hubung.'; + 'ID instance harus diawali huruf kecil dan hanya boleh berisi huruf kecil, angka, garis bawah, dan tanda hubung.'; @override String get errorTopicFileInvalid => @@ -1922,7 +1922,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get diagnosticWritersideMarkdownTopicMissingTitle => - 'Topik Markdown Writerside tidak memiliki judul H1 atau materi depan.'; + 'Topik Markdown Writerside tidak memiliki judul H1 atau front matter.'; @override String get diagnosticWritersideXmlTopicMissingTitle => @@ -1935,7 +1935,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get diagnosticMarkdownFrontMatterMalformed => - 'Materi depan tidak tertutup.'; + 'Front matter tidak tertutup.'; @override String get diagnosticMarkdownRawHtmlUnsafe => 'Elemen HTML tidak aman.'; @@ -1967,11 +1967,11 @@ class AppLocalizationsId extends AppLocalizations { @override String get diagnosticWritersideConfigInvalidRoot => - 'Root writerside.cfg harus .'; + 'Elemen akar writerside.cfg harus berupa .'; @override String get diagnosticWritersideConfigMissingSnippetsSrc => - 'deklarasi cuplikan tidak ada src.'; + 'Deklarasi snippets tidak memiliki atribut src.'; @override String get diagnosticWritersideConfigMissingInstanceGroupsSrc => @@ -2005,7 +2005,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get diagnosticWritersideTreeMissingStartPage => - 'Instance non-pustaka tidak memiliki halaman awal.'; + 'Instance non-library tidak memiliki start-page.'; @override String diagnosticWritersideStartPageMissing(String startPage) { @@ -2064,7 +2064,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get diagnosticWritersideConfigMissing => - 'Mode Writerside memerlukan Writerside.cfg.'; + 'Mode Writerside memerlukan writerside.cfg.'; @override String diagnosticWritersideConfigMissingBuildConfigDirectory( @@ -2118,7 +2118,7 @@ class AppLocalizationsId extends AppLocalizations { String diagnosticWritersideDefaultTopicsDirectoryMissing( String relativePath, ) { - return 'Direktori topik default tidak ada: $relativePath'; + return 'Direktori topik default tidak ada: $relativePath.'; } @override @@ -2197,7 +2197,7 @@ class AppLocalizationsId extends AppLocalizations { } @override - String get close => 'Menutup'; + String get close => 'Tutup'; @override String get git => 'Git'; @@ -2282,7 +2282,7 @@ class AppLocalizationsId extends AppLocalizations { } @override - String get gitClean => 'Bersih'; + String get gitClean => 'Tidak ada perubahan'; @override String get gitConflicts => 'Konflik'; @@ -2318,7 +2318,7 @@ class AppLocalizationsId extends AppLocalizations { String get gitCommit => 'Commit'; @override - String get gitSelectForCommit => 'Stage file'; + String get gitSelectForCommit => 'Siapkan file untuk commit'; @override String get gitRemoveFromCommit => 'Batalkan stage file'; @@ -2378,7 +2378,7 @@ class AppLocalizationsId extends AppLocalizations { String get gitNoChanges => 'Tidak ada perubahan'; @override - String get gitNoHistory => 'Tidak ada sejarah'; + String get gitNoHistory => 'Tidak ada riwayat'; @override String get gitNoBranches => 'Tidak ada cabang'; @@ -2449,7 +2449,7 @@ class AppLocalizationsId extends AppLocalizations { 'BusyMark akan memuat ulang ruang kerja dari disk setelah Git berpindah cabang.'; @override - String get gitConfirmPushSetUpstreamTitle => 'Siapkan upstream cabang?'; + String get gitConfirmPushSetUpstreamTitle => 'Siapkan upstream branch?'; @override String gitConfirmPushSetUpstreamMessage(String branch) { @@ -2473,7 +2473,7 @@ class AppLocalizationsId extends AppLocalizations { String get gitChangesInCommit => 'Perubahan dalam commit ini'; @override - String get gitCompareWithCurrent => 'Bandingkan dengan saat ini'; + String get gitCompareWithCurrent => 'Bandingkan dengan versi saat ini'; @override String get gitRestoreVersion => 'Pulihkan versi ini'; @@ -2499,7 +2499,7 @@ class AppLocalizationsId extends AppLocalizations { @override String gitResetCurrentBranchMessage(String branch, String commit) { - return 'Ini memindahkan cabang $branch untuk melakukan $commit. Pilih bagaimana Git memperbarui indeks dan pohon kerja.'; + return 'Ini memindahkan branch $branch ke commit $commit. Pilih cara Git memperbarui index dan working tree.'; } @override @@ -2612,7 +2612,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get gitErrorResetDetachedHead => - 'Periksa cabang sebelum mengatur ulangnya.'; + 'Checkout branch terlebih dahulu sebelum melakukan reset.'; @override String get gitErrorDiverged => @@ -2712,20 +2712,20 @@ class AppLocalizationsId extends AppLocalizations { String get markdownHtmlHtmlTextBlocks => 'Blok teks'; @override - String get markdownHtmlHtmlFigures => 'Gambar dan gambar'; + String get markdownHtmlHtmlFigures => 'Gambar dan ilustrasi'; @override String get markdownHtmlHtmlPreformatted => 'Kode yang telah diformat sebelumnya'; @override - String get markdownHtmlHtmlDisclosure => 'Blok pengungkapan'; + String get markdownHtmlHtmlDisclosure => 'Blok detail yang dapat dibuka'; @override String get markdownHtmlHtmlDescriptionLists => 'Daftar deskripsi'; @override - String get markdownHtmlHtmlFormattingTags => 'Memformat tag'; + String get markdownHtmlHtmlFormattingTags => 'Tag pemformatan'; @override String get markdownHtmlHtmlInlineCodeTags => 'Tag kode sebaris'; @@ -2828,7 +2828,13 @@ class AppLocalizationsId extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName diekspor dengan peringatan $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count peringatan', + one: '1 peringatan', + ); + return '$fileName diekspor dengan $_temp0.'; } @override @@ -2856,7 +2862,7 @@ class AppLocalizationsId extends AppLocalizations { String get visualizationShowRender => 'Tampilkan render'; @override - String get visualizationFitWidth => 'Sesuai dengan lebarnya'; + String get visualizationFitWidth => 'Sesuaikan dengan lebar tampilan'; @override String get visualizationSaveImage => 'Simpan gambar'; @@ -2880,7 +2886,7 @@ class AppLocalizationsId extends AppLocalizations { String get visualizationServers => 'Server'; @override - String get visualizationPaths => 'Path'; + String get visualizationPaths => 'Jalur'; @override String get visualizationOperations => 'Operasi'; @@ -2920,7 +2926,7 @@ class AppLocalizationsId extends AppLocalizations { String get newTocLibrary => 'Pustaka TOC baru'; @override - String get editInstance => 'Edit instance'; + String get editInstance => 'Ubah instance'; @override String get openTocFile => 'Buka file TOC'; @@ -3122,7 +3128,7 @@ class AppLocalizationsId extends AppLocalizations { @override String diagnosticWritersideTreeInvalidStatus(String status) { - return 'Status instance “$status” tidak diketahui. Gunakan rilis, eap, atau usang.'; + return 'Status instance “$status” tidak dikenal. Gunakan release, eap, atau deprecated.'; } @override @@ -3139,7 +3145,7 @@ class AppLocalizationsId extends AppLocalizations { String name, String value, ) { - return 'Nilai $name “$value” harus benar atau salah.'; + return 'Nilai $name “$value” harus true atau false.'; } @override @@ -3148,7 +3154,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get diagnosticWritersideTreeInvalidInclude => - 'Pohon harus menentukan atribut from dan id elemen.'; + 'Pohon harus menentukan atribut from dan element-id.'; @override String get diagnosticWritersideTreeMissingSnippetId => @@ -3217,7 +3223,7 @@ class AppLocalizationsId extends AppLocalizations { String topic, String instance, ) { - return 'Topik “$topic” tidak ada dalam contoh referensi “$instance”.'; + return 'Topik “$topic” tidak ada dalam instance yang dirujuk “$instance”.'; } @override @@ -3245,7 +3251,7 @@ class AppLocalizationsId extends AppLocalizations { String get aiDisabled => 'Dinonaktifkan'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'Pengeditan AI bersifat eksplisit. BusyMark hanya mengirimkan konteks yang ditampilkan untuk penyedia yang dipilih dan tidak pernah menerapkan proposal tanpa peninjauan.'; @override @@ -3488,7 +3494,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get markdownTocMalformedMarkers => - 'Penanda daftar isi BusyMark hilang, terduplikasi, atau rusak.'; + 'Penanda daftar isi BusyMark hilang, duplikat, atau tidak berurutan.'; @override String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index abf9f362..956fe1a5 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -323,7 +323,7 @@ class AppLocalizationsIt extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -812,7 +812,15 @@ class AppLocalizationsIt extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count documenti contengono modifiche non salvate. Salvarli prima di continuare?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documenti hanno modifiche non salvate. Salvali prima di continuare?', + one: + '1 documento ha modifiche non salvate. Salvarlo prima di continuare?', + ); + return '$_temp0'; } @override @@ -1429,7 +1437,8 @@ class AppLocalizationsIt extends AppLocalizations { String get sourceSearchReplacement => 'Sostituisci con'; @override - String get sourceSearchReplaceCurrent => 'Sostituisci corrente'; + String get sourceSearchReplaceCurrent => + 'Sostituisci la corrispondenza corrente'; @override String get sourceSearchReplaceAndFindNext => 'Sostituisci e trova successivo'; @@ -1537,7 +1546,7 @@ class AppLocalizationsIt extends AppLocalizations { @override String recoveredDocumentReview(String fileName) { - return 'È stato recuperato il contenuto non salvato di $fileName. Controllarlo, quindi salvarlo, salvarlo con nome o eliminarlo.'; + return 'Recuperato il contenuto non salvato di $fileName. Esaminalo, quindi salvalo, salvalo con un altro nome o scartalo.'; } @override @@ -1698,12 +1707,28 @@ class AppLocalizationsIt extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Sono stati recuperati $count documenti non salvati. Controllare ogni documento recuperato prima di continuare.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Sono stati recuperati $count documenti non salvati. Revisiona ciascuno prima di salvare o scartare.', + one: + 'È stato recuperato 1 documento non salvato. Revisionalo prima di salvarlo o scartarlo.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'Non è stato possibile ripristinare $count record di recupero danneggiati. I documenti recuperati validi restano disponibili.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count record di ripristino danneggiati non sono stati ripristinati. I record di ripristino validi sono ancora disponibili.', + one: + 'Un record di recupero danneggiato non può essere ripristinato. Il file di recupero originale è stato conservato per la revisione.', + ); + return '$_temp0'; } @override @@ -2400,8 +2425,10 @@ class AppLocalizationsIt extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'I file tracciati selezionati verranno ripristinati da Git.', - one: 'Il file tracciato selezionato verrà ripristinato da Git.', + other: + 'Tutte le modifiche staged e non staged nei file tracciati selezionati saranno ripristinate in HEAD.', + one: + 'Tutte le modifiche staged e non staged nel file tracciato selezionato saranno ripristinate in HEAD.', ); return '$_temp0'; } @@ -2448,10 +2475,10 @@ class AppLocalizationsIt extends AppLocalizations { } @override - String get gitProjectHistory => 'Progetto'; + String get gitProjectHistory => 'Cronologia del progetto'; @override - String get gitFileHistory => 'File corrente'; + String get gitFileHistory => 'Cronologia del file'; @override String get gitFileHistoryRequiresOpenFile => @@ -2817,7 +2844,13 @@ class AppLocalizationsIt extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName è stato esportato. Immagini non incluse: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count avvisi', + one: '1 avviso', + ); + return '$fileName è stato esportato con $_temp0.'; } @override @@ -3237,7 +3270,7 @@ class AppLocalizationsIt extends AppLocalizations { String get aiDisabled => 'Disabilitato'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'La modifica con IA viene avviata solo esplicitamente. BusyMark invia esclusivamente il contesto mostrato al fornitore selezionato e non applica mai una proposta senza revisione.'; @override diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart index ff632d9b..6c459f50 100644 --- a/lib/l10n/generated/app_localizations_ja.dart +++ b/lib/l10n/generated/app_localizations_ja.dart @@ -317,7 +317,7 @@ class AppLocalizationsJa extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -2743,7 +2743,13 @@ class AppLocalizationsJa extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName を $count 件の警告付きでエクスポートしました。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 件の警告', + one: '1 件の警告', + ); + return '$fileName は $_temp0 とともにエクスポートされました。'; } @override @@ -3154,7 +3160,7 @@ class AppLocalizationsJa extends AppLocalizations { String get aiDisabled => '無効'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'AI による編集は明示的に実行されます。BusyMark は選択したプロバイダーに表示されたコンテキストのみを送信し、確認なしに提案を適用することはありません。'; @override diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart index 3eaf05ea..327c08be 100644 --- a/lib/l10n/generated/app_localizations_ko.dart +++ b/lib/l10n/generated/app_localizations_ko.dart @@ -65,7 +65,7 @@ class AppLocalizationsKo extends AppLocalizations { String get feedbackMessage => '자세한 메시지'; @override - String get feedbackReplyEmail => '이메일 답장(선택사항)'; + String get feedbackReplyEmail => '회신용 이메일 주소(선택)'; @override String get feedbackIncludeTechnicalDetails => '기술 세부정보 포함'; @@ -108,7 +108,7 @@ class AppLocalizationsKo extends AppLocalizations { '서버가 이 보고서를 거부했습니다. 양식 필드를 확인하고 다시 시도하세요.'; @override - String get feedbackServerFailure => '서버가 보고서를 승인할 수 없습니다. 나중에 다시 시도하세요.'; + String get feedbackServerFailure => '서버가 보고서를 수락할 수 없습니다. 나중에 다시 시도하세요.'; @override String feedbackSuccess(String id) { @@ -316,7 +316,7 @@ class AppLocalizationsKo extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -650,7 +650,7 @@ class AppLocalizationsKo extends AppLocalizations { String get autoSave => '자동 저장'; @override - String get autoSaveDescription => '짧은 유휴 지연 후에 파일 변경 사항을 자동으로 저장합니다.'; + String get autoSaveDescription => '파일 변경 사항은 짧은 유휴 기간이 지나면 자동으로 저장됩니다.'; @override String get wordWrap => '자동 줄 바꿈'; @@ -699,7 +699,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String get clearRemoteImagePermissionsDescription => - '원격 이미지를 로드하도록 허용된 작업공간은 잊어버리세요.'; + '원격 이미지 로드 권한이 허용된 작업공간의 저장된 권한을 삭제합니다.'; @override String get clearGitWorkspaceTrust => '신뢰할 수 있는 Git 작업공간 초기화'; @@ -738,8 +738,8 @@ class AppLocalizationsKo extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '변경된 문서가 $count개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?', - one: '변경된 문서가 1개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?', + other: '미저장 문서가 $count개 있습니다. 계속하기 전에 저장하시겠습니까?', + one: '미저장 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?', zero: 'BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?', ); return '$_temp0'; @@ -770,8 +770,8 @@ class AppLocalizationsKo extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '변경된 문서가 $count개 있습니다. 계속하기 전에 저장하시겠습니까?', - one: '변경된 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?', + other: '미저장 문서가 $count개 있습니다. 계속하기 전에 저장하시겠습니까?', + one: '미저장 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?', ); return '$_temp0'; } @@ -1220,7 +1220,7 @@ class AppLocalizationsKo extends AppLocalizations { String get topicUsageTopicLinks => '토픽 링크'; @override - String get topicUsageIncludes => '포함'; + String get topicUsageIncludes => 'include 요소'; @override String usageCount(int count) { @@ -1237,11 +1237,11 @@ class AppLocalizationsKo extends AppLocalizations { String get refactoringOptions => '리팩토링 옵션'; @override - String get updateUsagesAutomatically => '자동으로 사용량 업데이트'; + String get updateUsagesAutomatically => '참조 사용량을 자동으로 업데이트'; @override String get updateUsagesAutomaticallyDescription => - '목차 참조 및 포함을 제거하고 링크 텍스트를 유지합니다.'; + '목차 참조와 include 요소를 제거하고 링크 텍스트를 유지합니다.'; @override String get manualUsageUpdatesRequired => '일부 사용처는 이 리팩터링 전에 수동으로 변경해야 합니다.'; @@ -1253,7 +1253,7 @@ class AppLocalizationsKo extends AppLocalizations { String get noRedirectDescription => '이전에 게시된 페이지를 리디렉션하지 마세요.'; @override - String get redirectTarget => '대상 리디렉션'; + String get redirectTarget => '리디렉션 대상'; @override String get remainingUsagesBlockRemoval => @@ -1355,10 +1355,10 @@ class AppLocalizationsKo extends AppLocalizations { String get foldKindList => '목록'; @override - String get foldKindQuote => '인용하다'; + String get foldKindQuote => '인용문'; @override - String get foldKindTag => '꼬리표'; + String get foldKindTag => '태그'; @override String get sourceSearchPreviousMatch => '이전 일치 항목'; @@ -1379,7 +1379,7 @@ class AppLocalizationsKo extends AppLocalizations { String get sourceSearchReplacement => '다음으로 바꾸기'; @override - String get sourceSearchReplaceCurrent => '현재 항목 바꾸기'; + String get sourceSearchReplaceCurrent => '현재 일치 항목 바꾸기'; @override String get sourceSearchReplaceAndFindNext => '바꾸고 다음 찾기'; @@ -1481,7 +1481,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String recoveredDocumentReview(String fileName) { - return '$fileName의 저장되지 않은 콘텐츠를 복구했습니다. 검토한 후 저장, 다른 이름으로 저장 또는 삭제하세요.'; + return '$fileName의 저장되지 않은 콘텐츠가 복구되었습니다. 검토한 다음 저장, 다른 이름으로 저장 또는 변경사항을 버리세요.'; } @override @@ -1833,7 +1833,7 @@ class AppLocalizationsKo extends AppLocalizations { } @override - String get diagnosticWorkspaceFileTooLarge => '파일이 자동 파싱 한도를 초과했습니다.'; + String get diagnosticWorkspaceFileTooLarge => '이 파일은 베타 자동 파싱 한도보다 큽니다.'; @override String diagnosticWorkspaceFileReadFailed(String error) { @@ -1855,7 +1855,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String get diagnosticWritersideMarkdownTopicMissingTitle => - 'Writerside Markdown 토픽에는 H1 또는 머리말 제목이 없습니다.'; + 'Writerside Markdown 주제에 H1 또는 front matter 제목이 없습니다.'; @override String get diagnosticWritersideXmlTopicMissingTitle => 'XML 토픽에 제목이 없습니다.'; @@ -1866,7 +1866,8 @@ class AppLocalizationsKo extends AppLocalizations { } @override - String get diagnosticMarkdownFrontMatterMalformed => '머리말이 닫히지 않았습니다.'; + String get diagnosticMarkdownFrontMatterMalformed => + 'front matter가 닫히지 않았습니다.'; @override String get diagnosticMarkdownRawHtmlUnsafe => '안전하지 않은 HTML 요소.'; @@ -1935,7 +1936,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String get diagnosticWritersideTreeMissingStartPage => - '라이브러리가 아닌 인스턴스에 시작 페이지가 없습니다.'; + '라이브러리가 아닌 인스턴스에 start-page가 누락되었습니다.'; @override String diagnosticWritersideStartPageMissing(String startPage) { @@ -2065,7 +2066,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String diagnosticWritersideTreeMissingTopic(String topic) { - return '목차에서 \"$topic\" 토픽이 누락되었습니다.'; + return 'TOC에서 존재하지 않는 주제를 참조합니다: \"$topic\".'; } @override @@ -2088,11 +2089,12 @@ class AppLocalizationsKo extends AppLocalizations { String anchor, String targetName, ) { - return '\"$targetName\" 앵커 \"$anchor\"이(가) 존재하지 않습니다.'; + return '대상 \"$targetName\"에 앵커 \"$anchor\"가 존재하지 않습니다.'; } @override - String get diagnosticWritersideIncludeMissingFrom => '가 누락되었습니다.'; + String get diagnosticWritersideIncludeMissingFrom => + '에 from 속성이 없습니다.'; @override String diagnosticWritersideIncludeSourceMissing(String from) { @@ -2109,7 +2111,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String diagnosticWritersideCategoryUnresolved(String ref) { - return '또한 카테고리 \"$ref\"가 선언되지 않았습니다.'; + return 'seealso 카테고리 \"$ref\"가 선언되지 않았습니다.'; } @override @@ -2123,7 +2125,7 @@ class AppLocalizationsKo extends AppLocalizations { } @override - String get close => '닫다'; + String get close => '닫기'; @override String get git => 'Git'; @@ -2206,7 +2208,7 @@ class AppLocalizationsKo extends AppLocalizations { } @override - String get gitClean => '깨끗함'; + String get gitClean => '변경 사항 없음'; @override String get gitConflicts => '충돌'; @@ -2321,7 +2323,7 @@ class AppLocalizationsKo extends AppLocalizations { String get gitUnsavedChangesBanner => '저장되지 않은 편집기 변경 사항은 저장될 때까지 포함되지 않습니다.'; @override - String get gitConfirmDiscardTitle => 'Git 변경사항을 삭제하시겠습니까?'; + String get gitConfirmDiscardTitle => 'Git 변경사항을 버리시겠습니까?'; @override String gitConfirmDiscardTracked(int count) { @@ -2390,7 +2392,7 @@ class AppLocalizationsKo extends AppLocalizations { String get gitChangesInCommit => '이 커밋의 변경 사항'; @override - String get gitCompareWithCurrent => '현재와 ​​비교'; + String get gitCompareWithCurrent => '현재 버전과 비교'; @override String get gitRestoreVersion => '이 버전을 복원하세요'; @@ -2514,7 +2516,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String get gitErrorDirtyWorkspace => - '분기를 전환하기 전에 BusyMark 편집기 변경 사항을 저장하거나 삭제하세요.'; + 'Git 분기를 전환하기 전에 BusyMark 편집기 변경 사항을 저장하거나 버리세요.'; @override String get gitErrorResetDirtyWorkspace => @@ -2531,7 +2533,7 @@ class AppLocalizationsKo extends AppLocalizations { '브랜치가 분기되었습니다. 이 BusyMark 버전 외부에서 병합 또는 리베이스를 해결하세요.'; @override - String get gitErrorAuthorIdentity => 'Git을 커밋하려면 작성자 이름과 이메일 주소가 필요합니다.'; + String get gitErrorAuthorIdentity => '커밋하기 전에 Git에 작성자 이름과 이메일 주소가 필요합니다.'; @override String get gitAuthorIdentityTitle => 'Git 작성자 ID'; @@ -2736,7 +2738,13 @@ class AppLocalizationsKo extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$count개의 경고와 함께 $fileName을 내보냈습니다.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '경고 $count개', + one: '경고 1개', + ); + return '$fileName을(를) $_temp0와 함께 내보냈습니다.'; } @override @@ -3024,7 +3032,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String diagnosticWritersideTreeInvalidStatus(String status) { - return '알 수 없는 인스턴스 상태 “$status”. 릴리스, eap 또는 더 이상 사용되지 않음을 사용하십시오.'; + return '알 수 없는 인스턴스 상태 “$status”. release, eap 또는 deprecated를 사용하세요.'; } @override @@ -3041,7 +3049,7 @@ class AppLocalizationsKo extends AppLocalizations { String name, String value, ) { - return '$name 값 \"$value\"은(는) true 또는 false여야 합니다.'; + return '설정 값 $name “$value”는 true 또는 false 여야 합니다.'; } @override @@ -3147,7 +3155,7 @@ class AppLocalizationsKo extends AppLocalizations { String get aiDisabled => '사용 안 함'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'AI 편집은 명시적입니다. BusyMark는 선택한 공급자에 대해 표시된 컨텍스트만 보내고 검토 없이 제안을 적용하지 않습니다.'; @override @@ -3216,7 +3224,7 @@ class AppLocalizationsKo extends AppLocalizations { String get aiTargetCurrentSection => '현재 섹션'; @override - String get aiTargetCompleteDocument => '완전한 문서'; + String get aiTargetCompleteDocument => '전체 문서'; @override String get aiContextNone => '문서 컨텍스트 없음'; @@ -3231,7 +3239,7 @@ class AppLocalizationsKo extends AppLocalizations { String get aiContextCurrentSection => '현재 섹션'; @override - String get aiContextCompleteDocument => '완전한 문서'; + String get aiContextCompleteDocument => '전체 문서'; @override String get aiGenerating => '제안 생성 중…'; @@ -3266,7 +3274,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String get gitAiStagedChangesChanged => - '이 커밋 메시지가 생성되는 동안 단계적 변경 사항이 변경되었습니다. 작업을 다시 실행하십시오.'; + '스테이징된 변경 사항이 이 커밋 메시지 생성 중에 변경되었습니다. 작업을 다시 실행하세요.'; @override String get aiViewContext => '전송된 컨텍스트 보기'; @@ -3391,7 +3399,7 @@ class AppLocalizationsKo extends AppLocalizations { @override String get diagnosticMarkdownLinkEmptyText => - '링크 텍스트가 비어 있습니다. 목적을 설명하는 접근 가능한 이름을 제공합니다.'; + '링크 텍스트가 비어 있습니다. 링크의 목적을 설명하는 접근 가능한 이름을 제공하세요.'; @override String diagnosticMarkdownLinkReviewText(String text) { diff --git a/lib/l10n/generated/app_localizations_nb.dart b/lib/l10n/generated/app_localizations_nb.dart index 9d3f3fa8..ca6fce00 100644 --- a/lib/l10n/generated/app_localizations_nb.dart +++ b/lib/l10n/generated/app_localizations_nb.dart @@ -324,7 +324,7 @@ class AppLocalizationsNb extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -804,7 +804,14 @@ class AppLocalizationsNb extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count dokumenter har ulagrede endringer. Lagre dem før du fortsetter?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count dokumenter har ulagrede endringer. Lagre dem før du fortsetter.', + one: '1 dokument har ulagrede endringer. Lagre det før du fortsetter.', + ); + return '$_temp0'; } @override @@ -1687,12 +1694,28 @@ class AppLocalizationsNb extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return '$count ulagrede dokumenter ble gjenopprettet. Se gjennom hvert gjenopprettet dokument før du fortsetter.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Gjenopprettet $count ulagrede dokumenter. Gå gjennom hvert ett før du lagrer eller forkaster det.', + one: + 'Gjenopprettet 1 ulagret dokument. Gå gjennom det før du lagrer eller forkaster det.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return '$count skadede gjenopprettingsoppføringer kunne ikke gjenopprettes. Gyldige gjenopprettede dokumenter er fortsatt tilgjengelige.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count skadede gjenopprettingsposter kunne ikke gjenopprettes. Gyldige gjenopprettingsposter er fortsatt tilgjengelige.', + one: + 'Kunne ikke gjenopprette 1 skadet gjenopprettingspost. Den opprinnelige gjenopprettingsfilen er bevart for gjennomgang.', + ); + return '$_temp0'; } @override @@ -2382,8 +2405,10 @@ class AppLocalizationsNb extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'De valgte sporede filene gjenopprettes fra Git.', - one: 'Den valgte sporede filen gjenopprettes fra Git.', + other: + 'Alle staged- og ikke-staged-endringer i de valgte sporede filene vil bli gjenopprettet til HEAD.', + one: + 'Alle staged- og ikke-staged-endringer i den valgte sporede filen vil bli gjenopprettet til HEAD.', ); return '$_temp0'; } @@ -2429,10 +2454,10 @@ class AppLocalizationsNb extends AppLocalizations { } @override - String get gitProjectHistory => 'Prosjekt'; + String get gitProjectHistory => 'Prosjekthistorie'; @override - String get gitFileHistory => 'Gjeldende fil'; + String get gitFileHistory => 'Filhistorie'; @override String get gitFileHistoryRequiresOpenFile => @@ -2796,7 +2821,13 @@ class AppLocalizationsNb extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName ble eksportert. Bilder som ikke kunne tas med: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count advarsler', + one: '1 advarsel', + ); + return '$fileName ble eksportert med $_temp0.'; } @override @@ -3213,7 +3244,7 @@ class AppLocalizationsNb extends AppLocalizations { String get aiDisabled => 'Deaktivert'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'KI-redigering startes bare eksplisitt. BusyMark sender kun den viste konteksten til den valgte leverandøren og bruker aldri et forslag uten gjennomgang.'; @override diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index 6d2577f4..63401f55 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -67,7 +67,7 @@ class AppLocalizationsNl extends AppLocalizations { String get feedbackMessage => 'Gedetailleerd bericht'; @override - String get feedbackReplyEmail => 'E-mail beantwoorden (optioneel)'; + String get feedbackReplyEmail => 'E-mailadres voor antwoord (optioneel)'; @override String get feedbackIncludeTechnicalDetails => 'Voeg technische details toe'; @@ -324,7 +324,7 @@ class AppLocalizationsNl extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -538,7 +538,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get shortcutBoldDescription => - 'Schakel vetgedrukt in op de geselecteerde tekst'; + 'Vetgedrukt in- of uitschakelen voor geselecteerde tekst'; @override String get shortcutItalicDescription => @@ -683,7 +683,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get autoSaveDescription => - 'Bestandswijzigingen automatisch opslaan na een korte inactieve vertraging.'; + 'Sla bestandswijzigingen automatisch op na een korte periode van inactiviteit.'; @override String get wordWrap => 'Regelterugloop'; @@ -733,7 +733,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get clearRemoteImagePermissionsDescription => - 'Vergeet werkruimten die externe afbeeldingen mochten laden.'; + 'Verwijder de opgeslagen rechten voor werkruimten die externe afbeeldingen mochten laden.'; @override String get clearGitWorkspaceTrust => 'Wis vertrouwde Git-werkruimten'; @@ -1265,7 +1265,7 @@ class AppLocalizationsNl extends AppLocalizations { String get topicUsageTopicLinks => 'Onderwerplinks'; @override - String get topicUsageIncludes => 'Inclusief'; + String get topicUsageIncludes => 'Include-elementen'; @override String usageCount(int count) { @@ -1428,7 +1428,7 @@ class AppLocalizationsNl extends AppLocalizations { String get sourceSearchReplacement => 'Vervangen door'; @override - String get sourceSearchReplaceCurrent => 'Huidige vervangen'; + String get sourceSearchReplaceCurrent => 'Vervang huidige overeenkomst'; @override String get sourceSearchReplaceAndFindNext => 'Vervangen en volgende zoeken'; @@ -1536,7 +1536,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String recoveredDocumentReview(String fileName) { - return 'Herstelde niet-opgeslagen inhoud voor $fileName. Controleer de inhoud en sla deze op, gebruik Opslaan als of verwijder deze.'; + return 'Niet-opgeslagen inhoud hersteld voor $fileName. Bekijk de inhoud en sla op, sla op als of verwerp.'; } @override @@ -1562,7 +1562,7 @@ class AppLocalizationsNl extends AppLocalizations { String get nothingToRead => 'Niets te lezen'; @override - String get admonition => 'Vermaning'; + String get admonition => 'Aandachtspunt'; @override String get quote => 'Citaat'; @@ -1647,7 +1647,7 @@ class AppLocalizationsNl extends AppLocalizations { String get documentKindVariablesFile => 'Variabelenbestand'; @override - String get documentKindCategoriesFile => 'Categorieën bestand'; + String get documentKindCategoriesFile => 'Categoriebestand'; @override String get documentKindResourceFile => 'Bronbestand'; @@ -1926,7 +1926,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get diagnosticWritersideMarkdownTopicMissingTitle => - 'Writerside Markdown-onderwerp heeft geen H1- of voorwerktitel.'; + 'Writerside Markdown-onderwerp heeft geen H1 of front matter-titel.'; @override String get diagnosticWritersideXmlTopicMissingTitle => @@ -2139,7 +2139,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String diagnosticWritersideTreeMissingTopic(String topic) { - return 'TOC-referenties ontbreken onderwerp \"$topic\".'; + return 'De inhoudsopgave verwijst naar het ontbrekende onderwerp \"$topic\".'; } @override @@ -2167,11 +2167,11 @@ class AppLocalizationsNl extends AppLocalizations { @override String get diagnosticWritersideIncludeMissingFrom => - ' ontbreekt in.'; + ' ontbreekt in het from-attribuut.'; @override String diagnosticWritersideIncludeSourceMissing(String from) { - return 'Bron \"$from\" opnemen bestaat niet.'; + return 'Includebron \"$from\" bestaat niet.'; } @override @@ -2184,7 +2184,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String diagnosticWritersideCategoryUnresolved(String ref) { - return 'Zie ook categorie \"$ref\" wordt niet gedeclareerd.'; + return 'seealso-categorie \"$ref\" is niet gedeclareerd.'; } @override @@ -2247,7 +2247,7 @@ class AppLocalizationsNl extends AppLocalizations { 'Deze werkruimte bevindt zich niet in een Git-repository.'; @override - String get gitInitializeRepository => 'Git-opslagplaats initialiseren'; + String get gitInitializeRepository => 'Git-repository initialiseren'; @override String get gitDetachedHead => 'Losgekoppelde HEAD'; @@ -2283,7 +2283,7 @@ class AppLocalizationsNl extends AppLocalizations { } @override - String get gitClean => 'Schoon'; + String get gitClean => 'Geen wijzigingen'; @override String get gitConflicts => 'Conflicten'; @@ -2307,10 +2307,10 @@ class AppLocalizationsNl extends AppLocalizations { String get gitActions => 'Git-acties'; @override - String get gitPull => 'Pull'; + String get gitPull => 'Git pull'; @override - String get gitFetch => 'Fetch'; + String get gitFetch => 'Git fetch'; @override String get gitPush => 'Push'; @@ -2340,7 +2340,7 @@ class AppLocalizationsNl extends AppLocalizations { String get gitCommitMessage => 'Commitbericht'; @override - String get gitCommitSelectedFiles => 'Geselecteerde bestanden committen'; + String get gitCommitSelectedFiles => 'Geselecteerde bestanden'; @override String get gitCommitNoSelectedFiles => @@ -2401,7 +2401,7 @@ class AppLocalizationsNl extends AppLocalizations { 'Niet-opgeslagen editorwijzigingen worden pas opgenomen nadat ze zijn opgeslagen.'; @override - String get gitConfirmDiscardTitle => 'Git-wijzigingen negeren?'; + String get gitConfirmDiscardTitle => 'Git-wijzigingen verwerpen?'; @override String gitConfirmDiscardTracked(int count) { @@ -2461,7 +2461,7 @@ class AppLocalizationsNl extends AppLocalizations { String get gitProjectHistory => 'Projectgeschiedenis'; @override - String get gitFileHistory => 'Bestandsgeschiedenis'; + String get gitFileHistory => 'Bestandshistorie'; @override String get gitFileHistoryRequiresOpenFile => @@ -2827,7 +2827,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName is geëxporteerd met $count waarschuwing(en).'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count waarschuwingen', + one: '1 waarschuwing', + ); + return '$fileName is geëxporteerd met $_temp0.'; } @override @@ -2855,7 +2861,7 @@ class AppLocalizationsNl extends AppLocalizations { String get visualizationShowRender => 'Render weergeven'; @override - String get visualizationFitWidth => 'Aan breedte aanpassen'; + String get visualizationFitWidth => 'Passend maken op breedte'; @override String get visualizationSaveImage => 'Afbeelding opslaan'; @@ -3025,7 +3031,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String instanceIdRenameWarning(String oldId, String newId) { - return 'BusyMark zal de naam van het .tree-bestand hernoemen en de Writerside-projectreferenties bijwerken van “$oldId” naar “$newId”. Publicatiescripts worden niet gewijzigd en moeten afzonderlijk worden bijgewerkt.'; + return 'BusyMark hernoemt het .tree-bestand en werkt de Writerside-projectreferenties bij van “$oldId” naar “$newId”. Publicatiescripts worden niet gewijzigd en moeten afzonderlijk worden bijgewerkt.'; } @override @@ -3110,7 +3116,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get errorWritersideInstanceWebPathInvalid => - 'Het webpad moet uit één segment bestaan.'; + 'Het webpad moet uit één regel bestaan.'; @override String get errorWritersideInstanceConfigurationInvalid => @@ -3139,7 +3145,7 @@ class AppLocalizationsNl extends AppLocalizations { String name, String value, ) { - return 'De waarde voor $name “$value” moet waar of onwaar zijn.'; + return 'De waarde voor $name “$value” moet true of false zijn.'; } @override @@ -3245,8 +3251,8 @@ class AppLocalizationsNl extends AppLocalizations { String get aiDisabled => 'Uitgeschakeld'; @override - String get aiLocalOnlyDescription => - 'AI-bewerking is uitsluitend lokaal. BusyMark stuurt alleen de weergegeven context naar de geselecteerde provider en past nooit een voorstel toe zonder beoordeling.'; + String get aiExplicitEditingDescription => + 'AI-bewerking is expliciet. BusyMark stuurt alleen de weergegeven context naar de geselecteerde provider en past nooit een voorstel toe zonder beoordeling.'; @override String get aiProvider => 'AI-provider'; diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index 16800457..10a658a2 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -323,7 +323,7 @@ class AppLocalizationsPl extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -816,7 +816,14 @@ class AppLocalizationsPl extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return '$count dokumenty zawierają niezapisane zmiany. Zapisać je przed kontynuowaniem?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count dokumenty mają niezapisane zmiany. Zapisz każdy przed kontynuowaniem.', + one: '1 dokument ma niezapisane zmiany. Zapisz go przed kontynuowaniem.', + ); + return '$_temp0'; } @override @@ -1439,7 +1446,7 @@ class AppLocalizationsPl extends AppLocalizations { String get sourceSearchReplacement => 'Zamień na'; @override - String get sourceSearchReplaceCurrent => 'Zamień bieżące'; + String get sourceSearchReplaceCurrent => 'Zamień bieżące dopasowanie'; @override String get sourceSearchReplaceAndFindNext => 'Zamień i znajdź następne'; @@ -1707,12 +1714,28 @@ class AppLocalizationsPl extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Odzyskano $count niezapisanych dokumentów. Przejrzyj każdy odzyskany dokument przed kontynuowaniem.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Przywrócono $count dokumentów bez zapisania. Sprawdź każdy przed zapisaniem lub usunięciem.', + one: + 'Przywrócono 1 dokument bez zapisania. Przed zapisaniem lub usunięciem sprawdź go.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'Nie udało się przywrócić $count uszkodzonych rekordów odzyskiwania. Prawidłowe odzyskane dokumenty są nadal dostępne.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Nie udało się przywrócić $count uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.', + one: + 'Nie udało się przywrócić 1 uszkodzonego rekordu odzyskiwania. Oryginalny plik odzyskiwania zachowano do przeglądu.', + ); + return '$_temp0'; } @override @@ -2354,6 +2377,8 @@ class AppLocalizationsPl extends AppLocalizations { count, locale: localeName, other: '$count plików w indeksie', + many: '$count plików w indeksie', + few: '$count pliki w indeksie', one: '1 plik w indeksie', ); return '$_temp0'; @@ -2410,10 +2435,10 @@ class AppLocalizationsPl extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Wybrane śledzone pliki zostaną przywrócone z Git.', - many: 'Wybrane śledzone pliki zostaną przywrócone z Git.', - few: 'Wybrane śledzone pliki zostaną przywrócone z Git.', - one: 'Wybrany śledzony plik zostanie przywrócony z Git.', + other: + 'Wszystkie oznaczone i nieoznaczone zmiany w wybranych śledzonych plikach zostaną przywrócone do HEAD.', + one: + 'Wszystkie oznaczone i nieoznaczone zmiany w wybranym śledzonym pliku zostaną przywrócone do HEAD.', ); return '$_temp0'; } @@ -2466,10 +2491,10 @@ class AppLocalizationsPl extends AppLocalizations { } @override - String get gitProjectHistory => 'Projekt'; + String get gitProjectHistory => 'Historia projektu'; @override - String get gitFileHistory => 'Bieżący plik'; + String get gitFileHistory => 'Historia pliku'; @override String get gitFileHistoryRequiresOpenFile => @@ -2835,7 +2860,13 @@ class AppLocalizationsPl extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return 'Wyeksportowano $fileName. Obrazy, których nie udało się dołączyć: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count ostrzeżeniami', + one: '1 ostrzeżeniem', + ); + return '$fileName został wyeksportowany z $_temp0.'; } @override @@ -3254,7 +3285,7 @@ class AppLocalizationsPl extends AppLocalizations { String get aiDisabled => 'Wyłączone'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'Edycja z użyciem SI jest uruchamiana wyłącznie jawnie. BusyMark wysyła do wybranego dostawcy tylko pokazany kontekst i nigdy nie stosuje propozycji bez jej sprawdzenia.'; @override diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index 8e3f9dea..e6f9cefd 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -15,7 +15,3548 @@ class AppLocalizationsPt extends AppLocalizations { @override String get appSubtitle => - 'Editor de arquivos Markdown e projetos de documentação compatíveis com o Writerside.'; + 'Editor for Markdown files and Writerside-compatible documentation projects.'; + + @override + String get aboutBusyMark => 'About BusyMark'; + + @override + String get aboutTagline => 'Markdown and Writerside Editor'; + + @override + String get aboutLicenseLabel => 'License'; + + @override + String get aboutLicenseName => 'Apache License 2.0'; + + @override + String get aboutWebsite => 'Website'; + + @override + String get aboutSourceCode => 'Source code'; + + @override + String get reportIssue => 'Report an issue'; + + @override + String get feedbackCategory => 'Category'; + + @override + String get feedbackChooseCategory => 'Choose a category'; + + @override + String get feedbackCategoryProblem => 'Problem or bug'; + + @override + String get feedbackCategoryFeature => 'Feature request'; + + @override + String get feedbackCategoryPrivacySecurity => 'Privacy or security concern'; + + @override + String get feedbackCategoryUsability => 'Usability concern'; + + @override + String get feedbackCategoryOther => 'Other'; + + @override + String get feedbackSubject => 'Subject'; + + @override + String get feedbackMessage => 'Detailed message'; + + @override + String get feedbackReplyEmail => 'Email address for replies (optional)'; + + @override + String get feedbackIncludeTechnicalDetails => 'Include technical details'; + + @override + String get feedbackTechnicalDetailsDisclosure => + 'When enabled, this adds only your Linux operating-system version and BusyMark application locale. No logs, files, account data, or other diagnostics are attached.'; + + @override + String get feedbackSubmit => 'Submit'; + + @override + String get feedbackSubmitting => 'Submitting…'; + + @override + String get feedbackCategoryRequired => 'Choose a category.'; + + @override + String get feedbackSubjectLength => + 'Subject must be between 3 and 120 characters.'; + + @override + String get feedbackMessageLength => + 'Message must be between 10 and 5,000 characters.'; + + @override + String get feedbackReplyEmailInvalid => + 'Enter a valid email address or leave this field empty.'; + + @override + String get feedbackConnectionFailure => + 'BusyMark could not connect. Check your internet connection and try again.'; + + @override + String get feedbackTimeoutFailure => 'The request timed out. Try again.'; + + @override + String get feedbackRateLimitedFailure => + 'Too many reports were sent from this connection. Wait and try again.'; + + @override + String get feedbackRejectedFailure => + 'The server rejected this report. Check the form fields and try again.'; + + @override + String get feedbackServerFailure => + 'The server could not accept the report. Try again later.'; + + @override + String feedbackSuccess(String id) { + return 'Feedback sent. Reference ID: $id'; + } + + @override + String get advanced => 'Advanced'; + + @override + String get addToGit => 'Add to Git'; + + @override + String get appearance => 'Appearance'; + + @override + String get apply => 'Apply'; + + @override + String get back => 'Back'; + + @override + String get bottomLeft => 'Bottom left'; + + @override + String get bottomRight => 'Bottom right'; + + @override + String get cancel => 'Cancel'; + + @override + String get choose => 'Choose'; + + @override + String get chooseLocation => 'Choose location'; + + @override + String get copy => 'Copy'; + + @override + String get copyName => 'Copy name'; + + @override + String get copyFileName => 'Copy file name'; + + @override + String get copyPath => 'Copy path'; + + @override + String get create => 'Create'; + + @override + String get creating => 'Creating...'; + + @override + String get cut => 'Cut'; + + @override + String get promoteSection => 'Promote section'; + + @override + String get demoteSection => 'Demote section'; + + @override + String get moveSectionUp => 'Move section up'; + + @override + String get moveSectionDown => 'Move section down'; + + @override + String get confirmDeleteSectionTitle => 'Delete section?'; + + @override + String confirmDeleteSectionMessage(String name) { + return 'Delete “$name” and all content in its section? This cannot be undone.'; + } + + @override + String get darkTheme => 'Dark'; + + @override + String get delete => 'Delete'; + + @override + String get discard => 'Discard'; + + @override + String get editor => 'Editor'; + + @override + String get file => 'File'; + + @override + String get fileHistory => 'File History'; + + @override + String get folder => 'Folder'; + + @override + String get insert => 'Insert'; + + @override + String get keyboardShortcuts => 'Keyboard Shortcuts'; + + @override + String get commandPalette => 'Command Palette'; + + @override + String get commandPaletteHint => 'Type a command'; + + @override + String get commandPaletteEmpty => 'No matching commands'; + + @override + String get commandUnavailableInContext => + 'Unavailable in the current editor context'; + + @override + String get lightTheme => 'Light'; + + @override + String get mainMenu => 'Main menu'; + + @override + String get fullScreen => 'Full Screen'; + + @override + String get markdown => 'Markdown'; + + @override + String get open => 'Open'; + + @override + String get openInFiles => 'Open in Files'; + + @override + String get pathActions => 'Path actions'; + + @override + String get outline => 'Outline'; + + @override + String get overwrite => 'Overwrite'; + + @override + String get paste => 'Paste'; + + @override + String get pasteWithoutFormatting => 'Paste without formatting'; + + @override + String get reading => 'Reading'; + + @override + String get removeFromRecent => 'Remove from Recent'; + + @override + String get recent => 'Recent'; + + @override + String get redo => 'Redo'; + + @override + String get save => 'Save'; + + @override + String get search => 'Search'; + + @override + String get selectAll => 'Select all'; + + @override + String get settings => 'Settings'; + + @override + String get source => 'Source'; + + @override + String get split => 'Split'; + + @override + String get systemTheme => 'System'; + + @override + String get theme => 'Theme'; + + @override + String get appLanguage => 'Language'; + + @override + String get systemLanguage => 'System'; + + @override + String get languageEnglish => 'English'; + + @override + String get languageGerman => 'Deutsch'; + + @override + String get languageDutch => 'Nederlands'; + + @override + String get languageTurkish => 'Türkçe'; + + @override + String get languageItalian => 'Italiano'; + + @override + String get languageNorwegian => 'Norsk bokmål'; + + @override + String get languageFrench => 'Français'; + + @override + String get languageRussian => 'Русский'; + + @override + String get languageUkrainian => 'Українська'; + + @override + String get languagePolish => 'Polski'; + + @override + String get languageSpanish => 'Español'; + + @override + String get languagePortuguese => 'Português'; + + @override + String get languageArabic => 'العربية'; + + @override + String get languagePersian => 'فارسی'; + + @override + String get languageHindi => 'हिन्दी'; + + @override + String get languageIndonesian => 'Bahasa Indonesia'; + + @override + String get languageEstonian => 'Eesti'; + + @override + String get languageVietnamese => 'Tiếng Việt'; + + @override + String get languageJapanese => '日本語'; + + @override + String get languageKorean => '한국어'; + + @override + String get languageSimplifiedChinese => '简体中文'; + + @override + String get toggleSidebar => 'Sidebar panel'; + + @override + String get topLeft => 'Top left'; + + @override + String get topRight => 'Top right'; + + @override + String get undo => 'Undo'; + + @override + String get validate => 'Validate'; + + @override + String get validation => 'Validation'; + + @override + String get viewMode => 'View mode'; + + @override + String get welcome => 'Welcome'; + + @override + String get writerside => 'Writerside'; + + @override + String get xml => 'XML'; + + @override + String get fileTypeMarkdown => 'Markdown'; + + @override + String get fileTypeImages => 'Images'; + + @override + String get openMarkdownFile => 'Open Markdown File'; + + @override + String get markdownFileExtensions => '.md or .markdown'; + + @override + String get openFolderOrWritersideProject => + 'Open Folder or Writerside Project'; + + @override + String get markdownFolderOrWritersideProject => + 'Markdown folder or Writerside-compatible project'; + + @override + String get noOpenFile => 'No open file'; + + @override + String get shortcutDeleteTreeItemDescription => + 'Delete the selected Files item, or remove the selected topic from the table of contents'; + + @override + String get shortcutGroupGeneral => 'General'; + + @override + String get shortcutNewDocument => 'Create'; + + @override + String get shortcutNewDocumentDescription => + 'Create a Markdown file or Writerside project'; + + @override + String get shortcutOpenDescription => + 'Open a Markdown file, folder, or Writerside project'; + + @override + String get shortcutSaveDescription => 'Save the current document'; + + @override + String get shortcutSearchDescription => 'Search the current workspace'; + + @override + String get shortcutKeyboardShortcutsDescription => + 'Show this keyboard shortcut reference'; + + @override + String get shortcutMarkdownAndHtmlDescription => + 'Open the Markdown and HTML reference'; + + @override + String get shortcutSettingsDescription => 'Open BusyMark settings'; + + @override + String get shortcutNextTab => 'Next tab'; + + @override + String get shortcutNextTabDescription => 'Move to the next open tab'; + + @override + String get shortcutPreviousTab => 'Previous tab'; + + @override + String get shortcutPreviousTabDescription => 'Move to the previous open tab'; + + @override + String get shortcutCloseTab => 'Close tab'; + + @override + String get shortcutCloseTabDescription => 'Close the active tab'; + + @override + String get shortcutCloseAllTabs => 'Close all tabs'; + + @override + String get shortcutCloseAllTabsDescription => 'Close all open tabs'; + + @override + String get shortcutGroupTextEditing => 'Text Editing'; + + @override + String get shortcutSelectAllDescription => + 'In Source mode, select all text; in Editor mode, press twice to select every block'; + + @override + String get shortcutCutDescription => 'Cut the selected text'; + + @override + String get shortcutCopyDescription => 'Copy the selected text'; + + @override + String get shortcutPasteDescription => 'Paste from the clipboard'; + + @override + String get shortcutPastePlainTextDescription => + 'Paste clipboard text without formatting'; + + @override + String get shortcutUndoDescription => 'Undo the last edit'; + + @override + String get shortcutRedoDescription => 'Redo the last undone edit'; + + @override + String get shortcutInsertIndentation => 'Insert indentation'; + + @override + String get shortcutInsertIndentationDescription => + 'Insert indentation at the cursor'; + + @override + String get shortcutOutdentSource => 'Outdent source'; + + @override + String get shortcutOutdentSourceDescription => + 'Remove one indentation level in Source mode'; + + @override + String get shortcutEscape => 'Close search or clear block selection'; + + @override + String get shortcutEscapeDescription => + 'Close workspace search or clear a block selection in Editor mode'; + + @override + String get shortcutGroupFormatting => 'Formatting'; + + @override + String get shortcutBoldDescription => 'Toggle bold on the selected text'; + + @override + String get shortcutItalicDescription => 'Toggle italic on the selected text'; + + @override + String get shortcutUnderlineDescription => + 'Toggle underline on the selected text'; + + @override + String get shortcutLinkDescription => 'Insert or edit a link'; + + @override + String get shortcutInlineCodeDescription => + 'Toggle inline code on the selected text'; + + @override + String get shortcutStrikethroughDescription => + 'Toggle strikethrough on the selected text'; + + @override + String get shortcutGroupBlocks => 'Blocks'; + + @override + String get shortcutParagraphDescription => + 'Set the current block to paragraph'; + + @override + String get shortcutHeading1Description => + 'Set the current block to Heading 1'; + + @override + String get shortcutHeading2Description => + 'Set the current block to Heading 2'; + + @override + String get shortcutHeading3Description => + 'Set the current block to Heading 3'; + + @override + String get shortcutHeading4Description => + 'Set the current block to Heading 4'; + + @override + String get shortcutHeading5Description => + 'Set the current block to Heading 5'; + + @override + String get shortcutHeading6Description => + 'Set the current block to Heading 6'; + + @override + String get shortcutGroupLists => 'Lists'; + + @override + String get numberedList => 'Numbered list'; + + @override + String get shortcutNumberedListDescription => + 'Toggle numbered list formatting'; + + @override + String get bulletedList => 'Bulleted list'; + + @override + String get shortcutBulletedListDescription => + 'Toggle bulleted list formatting'; + + @override + String get checklist => 'Checklist'; + + @override + String get shortcutChecklistDescription => 'Toggle checklist formatting'; + + @override + String get shortcutGroupSidebar => 'Sidebar'; + + @override + String get sidebarViewMenu => 'Sidebar view'; + + @override + String get createMarkdownFile => 'Create Markdown File'; + + @override + String get createMarkdownFileDescription => + 'Start an unsaved local Markdown document'; + + @override + String get createWritersideProject => 'Create Writerside Project'; + + @override + String get createWritersideProjectDescription => + 'Start a local Writerside-compatible project'; + + @override + String get defaultProjectName => 'Documentation'; + + @override + String get defaultInstanceName => 'User Guide'; + + @override + String get defaultStartTopicTitle => 'Getting started'; + + @override + String get projectName => 'Project name'; + + @override + String get directoryName => 'Directory name'; + + @override + String get instanceName => 'Instance name'; + + @override + String get instanceId => 'Instance ID'; + + @override + String get startTopicTitle => 'Start topic title'; + + @override + String get location => 'Location'; + + @override + String get projectNameRequired => 'Project name is required.'; + + @override + String get directoryNameRequired => 'Directory name is required.'; + + @override + String get useSingleSafeDirectoryName => 'Use a single safe directory name.'; + + @override + String get useLowercaseIdentifier => + 'Use a lowercase identifier with letters, numbers, underscores, or hyphens.'; + + @override + String get startTopicTitleRequired => 'Start topic title is required.'; + + @override + String get createWritersideProjectFailed => + 'Could not create Writerside project.'; + + @override + String get settingsTitle => 'BusyMark Settings'; + + @override + String get autoSave => 'Auto Save'; + + @override + String get autoSaveDescription => + 'Save file changes automatically after a short idle delay.'; + + @override + String get wordWrap => 'Word wrap'; + + @override + String get editorFontSize => 'Editor font size'; + + @override + String get validateOnEdit => 'Validate on edit'; + + @override + String get clearRecentWorkspaces => 'Clear recent workspaces'; + + @override + String get editingButtonsPosition => 'Editing buttons position'; + + @override + String get editingButtonsPositionDescription => + 'Choose where the floating WYSIWYG editing buttons appear.'; + + @override + String get editingButtonsDirection => 'Editing buttons direction'; + + @override + String get editingButtonsDirectionDescription => + 'Choose whether the floating WYSIWYG editing buttons are arranged horizontally or vertically.'; + + @override + String get horizontal => 'Horizontal'; + + @override + String get vertical => 'Vertical'; + + @override + String get privacy => 'Privacy'; + + @override + String get allowRemoteImages => 'Load remote images'; + + @override + String get allowRemoteImagesDescription => + 'Allow Markdown preview and editor images to load from http and https URLs.'; + + @override + String get clearRemoteImagePermissions => 'Clear remote image permissions'; + + @override + String get clearRemoteImagePermissionsDescription => + 'Forget workspaces that were allowed to load remote images.'; + + @override + String get clearGitWorkspaceTrust => 'Clear trusted Git workspaces'; + + @override + String get clearGitWorkspaceTrustDescription => + 'Ask before enabling Git features for previously trusted workspaces.'; + + @override + String get settingsWindowSectionTitle => 'Window'; + + @override + String get settingsReopenWorkspaceOnStartupTitle => + 'Reopen previous workspace on startup'; + + @override + String get settingsReopenWorkspaceOnStartupDescription => + 'Open the workspace and tabs from the previous session when BusyMark starts.'; + + @override + String get settingsConfirmCloseWithUnsavedChangesTitle => + 'Confirm before closing with unsaved changes'; + + @override + String get settingsConfirmCloseWithUnsavedChangesDescription => + 'Ask before closing BusyMark when documents have unsaved changes.'; + + @override + String get closeUnsavedChangesTitle => 'Unsaved changes'; + + @override + String get closeUnsavedChangesSingleMessage => + 'This document has unsaved changes. Save changes before closing BusyMark?'; + + @override + String closeUnsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documents have unsaved changes. Save changes before closing BusyMark?', + one: + '1 document has unsaved changes. Save changes before closing BusyMark?', + zero: 'Save changes before closing BusyMark?', + ); + return '$_temp0'; + } + + @override + String get closeUnsavedChangesCancel => 'Cancel'; + + @override + String get closeUnsavedChangesDiscard => 'Discard'; + + @override + String get closeUnsavedChangesSave => 'Save'; + + @override + String get currentFile => 'current file'; + + @override + String get unsavedChanges => 'Unsaved changes'; + + @override + String unsavedChangesMessage(String fileName) { + return 'You have unsaved changes in $fileName. Save them before continuing?'; + } + + @override + String unsavedChangesMultipleMessage(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documents have unsaved changes. Save them before continuing?', + one: '1 document has unsaved changes. Save it before continuing?', + ); + return '$_temp0'; + } + + @override + String get fileChangedOnDisk => 'File changed on disk'; + + @override + String get fileChangedOnDiskMessage => + 'This file changed on disk since you opened it. Overwrite it?'; + + @override + String get untitledMarkdownFileName => 'Untitled.md'; + + @override + String get unorderedList => 'Unordered list'; + + @override + String get orderedList => 'Ordered list'; + + @override + String get taskList => 'Task list'; + + @override + String get toggleTaskChecked => 'Toggle task checked'; + + @override + String get indentListItem => 'Indent list item'; + + @override + String get outdentListItem => 'Outdent list item'; + + @override + String get blockquote => 'Blockquote'; + + @override + String get codeBlock => 'Code block'; + + @override + String get codeBlockLanguage => 'Code block language'; + + @override + String get image => 'Image'; + + @override + String get video => 'Video'; + + @override + String get openVideo => 'Play video'; + + @override + String get pauseVideo => 'Pause video'; + + @override + String get videoUnavailable => 'Video unavailable'; + + @override + String get videoPreview => 'Video preview'; + + @override + String get diagnosticWritersideVideoMissingSource => + 'Video is missing its src attribute.'; + + @override + String diagnosticWritersideVideoUnsupportedSource(String source) { + return 'Unsupported video source: $source'; + } + + @override + String diagnosticWritersideVideoMissingFile(String source) { + return 'Video file does not exist: $source'; + } + + @override + String diagnosticWritersideVideoMissingPreview(String preview) { + return 'Video preview image does not exist: $preview'; + } + + @override + String get inlineImage => 'Inline image'; + + @override + String get table => 'Table'; + + @override + String get htmlBlock => 'HTML block'; + + @override + String get htmlContentDefault => 'HTML content'; + + @override + String get shortcutHtmlBlockDescription => 'Insert or edit an HTML block'; + + @override + String get renderedHtml => 'Rendered HTML'; + + @override + String get editHtml => 'Edit HTML'; + + @override + String get htmlSource => 'HTML source'; + + @override + String get thematicBreak => 'Thematic break'; + + @override + String get bold => 'Bold'; + + @override + String get italic => 'Italic'; + + @override + String get underline => 'Underline'; + + @override + String get strikethrough => 'Strikethrough'; + + @override + String get inlineCode => 'Inline code'; + + @override + String get link => 'Link'; + + @override + String get hardLineBreak => 'Hard line break'; + + @override + String get textStyle => 'Text style'; + + @override + String get paragraph => 'Paragraph'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + + @override + String headingLevelAbbreviation(int level) { + return 'H$level'; + } + + @override + String get deleteTable => 'Delete table'; + + @override + String tableColumnNumber(int columnNumber) { + return 'Column $columnNumber'; + } + + @override + String get insertColumnLeft => 'Insert column left'; + + @override + String get insertColumnRight => 'Insert column right'; + + @override + String get deleteColumn => 'Delete column'; + + @override + String get tableAlignmentUnspecified => 'Alignment: Unspecified'; + + @override + String get tableAlignmentLeft => 'Alignment: Left'; + + @override + String get tableAlignmentCenter => 'Alignment: Center'; + + @override + String get tableAlignmentRight => 'Alignment: Right'; + + @override + String tableRowNumber(int rowNumber) { + return 'Row $rowNumber'; + } + + @override + String get insertRowAbove => 'Insert row above'; + + @override + String get insertRowBelow => 'Insert row below'; + + @override + String get deleteRow => 'Delete row'; + + @override + String get tableHeaderHint => 'Header'; + + @override + String get tableCellHint => 'Cell'; + + @override + String get language => 'Language'; + + @override + String get hideEditingButtons => 'Hide editing buttons'; + + @override + String get showEditingButtons => 'Show editing buttons'; + + @override + String get altText => 'Alt text'; + + @override + String get editorPlaceholderText => 'text'; + + @override + String get editorPlaceholderCode => 'code'; + + @override + String get editorPlaceholderAltText => 'alt text'; + + @override + String get describeTheImage => 'Describe the image'; + + @override + String get columns => 'Columns'; + + @override + String get rows => 'Rows'; + + @override + String tableHeaderNumber(int columnNumber) { + return 'Header $columnNumber'; + } + + @override + String get tableCellDefault => 'Cell'; + + @override + String get noImageSource => 'No image source'; + + @override + String get remoteImageBlocked => 'Remote image blocked'; + + @override + String get remoteImageBlockedTooltip => + 'Choose whether BusyMark can load remote images.'; + + @override + String get remoteImagesBlockedTitle => 'Remote images are blocked'; + + @override + String get remoteImagesBlockedMessage => + 'This document references images from the internet. Loading them can reveal network information to the image host.'; + + @override + String get loadRemoteImagesForWorkspace => 'Load for this workspace'; + + @override + String get alwaysLoadRemoteImages => 'Always load remote images'; + + @override + String get hideSidebar => 'Hide sidebar panel'; + + @override + String get showSidebar => 'Show sidebar panel'; + + @override + String get showPreview => 'Show preview'; + + @override + String get hidePreview => 'Hide preview'; + + @override + String get workspaceKindUnsavedMarkdown => 'Unsaved Markdown file'; + + @override + String get workspaceKindSingleMarkdown => 'Single Markdown file'; + + @override + String get workspaceKindMarkdownFolder => 'Markdown folder'; + + @override + String get workspaceKindWritersideModule => 'Writerside module'; + + @override + String get problems => 'Problems'; + + @override + String diagnosticCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count diagnostics', + one: '1 diagnostic', + zero: 'No diagnostics', + ); + return '$_temp0'; + } + + @override + String get files => 'Files'; + + @override + String get toc => 'TOC'; + + @override + String get tocActions => 'TOC actions'; + + @override + String get markdownUnsaved => 'Markdown - unsaved'; + + @override + String workspaceDetail(String kind, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count files', + one: '1 file', + ); + return '$kind - $_temp0'; + } + + @override + String get noFiles => 'No files'; + + @override + String get newFile => 'New file'; + + @override + String get noWritersideToc => 'No Writerside TOC'; + + @override + String get tocSection => 'TOC section'; + + @override + String get newTopic => 'New Topic'; + + @override + String get newChildTopic => 'New Child Topic'; + + @override + String get newSiblingTopic => 'New Sibling Topic'; + + @override + String get renameTopicFile => 'Rename Topic File'; + + @override + String get topicPlacement => 'TOC placement'; + + @override + String get tocRoot => 'At TOC root'; + + @override + String get afterSelectedTopic => 'After selected topic'; + + @override + String get insideSelectedTopic => 'Inside selected topic'; + + @override + String get pasteAfterTopic => 'Paste After'; + + @override + String get pasteAsChildTopic => 'Paste as Child'; + + @override + String get removeFromToc => 'Remove from TOC'; + + @override + String get confirmRemoveFromTocTitle => 'Remove from TOC?'; + + @override + String confirmRemoveFromTocMessage(String name) { + return 'Remove $name from this table of contents? The topic file will be kept.'; + } + + @override + String get confirmDeleteTopicTitle => 'Delete topic file?'; + + @override + String confirmDeleteTopicMessage(String name) { + return 'Delete $name and remove it from every table of contents? This cannot be undone.'; + } + + @override + String get safeDeleteTopicFile => 'Safe Delete Topic File…'; + + @override + String get removeTocElement => 'Remove TOC Element'; + + @override + String get reviewUsages => 'Review Usages'; + + @override + String get deleteTopicFile => 'Delete Topic File'; + + @override + String get removeAction => 'Remove'; + + @override + String topicRemovalSummary(String topic) { + return 'Remove “$topic” from the selected instance. The topic file will be kept.'; + } + + @override + String safeDeleteTopicSummary(String topic) { + return 'Delete “$topic” and safely update its references throughout this Writerside project.'; + } + + @override + String childTopicsPromoted(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count child topics will move up one level.', + one: '1 child topic will move up one level.', + ); + return '$_temp0'; + } + + @override + String get topicIsStartPageRemovalWarning => + 'This topic is used as an instance start page. Review its usages and assign another start page before continuing.'; + + @override + String topicUsagesCount(int count) { + return 'Usages ($count)'; + } + + @override + String get noBreakingTopicUsages => + 'No references that would be broken were found.'; + + @override + String get topicUsagesFound => + 'BusyMark found the following references to this topic.'; + + @override + String get topicUsageTocElements => 'TOC elements'; + + @override + String get topicUsageStartPages => 'Start pages'; + + @override + String get topicUsageTopicLinks => 'Topic links'; + + @override + String get topicUsageIncludes => 'Includes'; + + @override + String usageCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count usages', + one: '1 usage', + ); + return '$_temp0'; + } + + @override + String get refactoringOptions => 'Refactoring options'; + + @override + String get updateUsagesAutomatically => 'Update usages automatically'; + + @override + String get updateUsagesAutomaticallyDescription => + 'Remove TOC references and includes, and preserve link text.'; + + @override + String get manualUsageUpdatesRequired => + 'Some usages require manual changes before this refactoring.'; + + @override + String get setRedirectTo => 'Set redirect to'; + + @override + String get noRedirectDescription => 'Do not redirect the old published page.'; + + @override + String get redirectTarget => 'Redirect target'; + + @override + String get remainingUsagesBlockRemoval => + 'Review and update the remaining usages before continuing, or enable automatic updates when available.'; + + @override + String usagesOfTopic(String topic) { + return 'Usages of $topic'; + } + + @override + String get noUsagesFound => 'No usages found'; + + @override + String get outsideSelectedInstance => 'outside selected instance'; + + @override + String get doRefactor => 'Do Refactor'; + + @override + String get orphanTopicTitle => 'Topic file is no longer used'; + + @override + String get keepTopicFile => 'Keep Topic File'; + + @override + String orphanTopicMessage(String topic) { + return '“$topic” is no longer used anywhere in this Writerside project. Delete the file, or keep it for use in another instance.'; + } + + @override + String get defaultNewTopicTitle => 'New topic'; + + @override + String get topicTitle => 'Topic title'; + + @override + String get fileName => 'File name'; + + @override + String get topicTitleRequired => 'Topic title is required.'; + + @override + String get fileNameRequired => 'File name is required.'; + + @override + String get rename => 'Rename'; + + @override + String get confirmDeleteFileTitle => 'Delete file?'; + + @override + String get confirmDeleteFolderTitle => 'Delete folder?'; + + @override + String confirmDeleteFileMessage(String name) { + return 'Delete $name? This cannot be undone.'; + } + + @override + String confirmDeleteFolderMessage(String name) { + return 'Delete $name and all files inside it? This cannot be undone.'; + } + + @override + String get useSingleSafeFileName => 'Use a single safe file name.'; + + @override + String useExpectedExtension(String extension) { + return 'Use the $extension extension for the selected format.'; + } + + @override + String get useIdentifierCharacters => + 'Use letters, numbers, underscores, or hyphens before the extension.'; + + @override + String get topicIdAlreadyExists => 'Topic ID already exists.'; + + @override + String get createWritersideTopicFailed => + 'Could not create Writerside topic.'; + + @override + String get noOutline => 'No outline'; + + @override + String expandKind(String kind) { + return 'Expand $kind'; + } + + @override + String collapseKind(String kind) { + return 'Collapse $kind'; + } + + @override + String get foldKindSection => 'section'; + + @override + String get foldKindList => 'list'; + + @override + String get foldKindQuote => 'quote'; + + @override + String get foldKindTag => 'tag'; + + @override + String get sourceSearchPreviousMatch => 'Previous match'; + + @override + String get sourceSearchNextMatch => 'Next match'; + + @override + String get sourceSearchCaseSensitive => 'Case sensitive'; + + @override + String get sourceSearchWholeWord => 'Whole word'; + + @override + String get sourceSearchRegex => 'Regex'; + + @override + String get sourceSearchReplacement => 'Replace with'; + + @override + String get sourceSearchReplaceCurrent => 'Replace current match'; + + @override + String get sourceSearchReplaceAndFindNext => 'Replace and find next'; + + @override + String get sourceSearchReplaceAll => 'Replace all'; + + @override + String get workspaceReplace => 'Replace in Workspace'; + + @override + String get reviewReplacements => 'Review replacements'; + + @override + String get applyReplacements => 'Apply replacements'; + + @override + String get skippedFiles => 'Skipped files'; + + @override + String get workspaceReplaceDirtyBuffer => 'Unsaved editor content'; + + @override + String get workspaceReplaceDiskContent => 'Saved disk content'; + + @override + String selectFileMatches(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Select all $count matches', + one: 'Select 1 match', + ); + return '$_temp0'; + } + + @override + String workspaceReplaceApplied(int matches, int files, int skipped) { + return 'Replaced $matches matches in $files files; skipped $skipped.'; + } + + @override + String documentFormatWithFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · Final newline'; + } + + @override + String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { + return '$encoding · $lineEnding · No final newline'; + } + + @override + String get normalizeLineEndings => 'Normalize line endings'; + + @override + String get mixedLineEndingsSavePrompt => + 'This document contains mixed line endings. Choose a format.'; + + @override + String workspaceReplaceMixedLineEndings(String fileName) { + return '$fileName uses mixed line endings. Choose the format to use before replacing.'; + } + + @override + String get workspaceReplaceIssueOversized => 'Skipped an oversized file.'; + + @override + String get workspaceReplaceIssueUnreadable => + 'Skipped a file that could not be read.'; + + @override + String get workspaceReplaceIssueInvalidUtf8 => + 'Skipped a file that is not valid UTF-8.'; + + @override + String get workspaceReplaceIssueTruncated => + 'The replacement preview was truncated.'; + + @override + String get workspaceReplaceIssueFileChanged => + 'Skipped a file that changed after the preview.'; + + @override + String get workspaceReplaceIssueBufferChanged => + 'Skipped an editor buffer that changed after the preview.'; + + @override + String get workspaceReplaceIssueNormalizationRequired => + 'Choose LF or CRLF normalization before replacing.'; + + @override + String get workspaceReplaceIssuePartialConflict => + 'Rollback stopped because the file changed concurrently. Some replacements may remain; displaced content was preserved at the path below.'; + + @override + String get workspaceReplaceIssueApplyFailed => + 'The reviewed replacement could not be committed; no files were changed.'; + + @override + String externalChangesTitle(String fileName) { + return 'External changes — $fileName'; + } + + @override + String get externalFileDeleted => 'This file was deleted on disk.'; + + @override + String get externalFileChanged => + 'This file changed on disk while you have unsaved edits.'; + + @override + String recoveredDocumentReview(String fileName) { + return 'Recovered unsaved content for $fileName. Inspect it, then save, save as, or discard it.'; + } + + @override + String get compare => 'Compare'; + + @override + String get reloadFromDisk => 'Reload from Disk'; + + @override + String get keepMine => 'Keep Mine'; + + @override + String get saveAs => 'Save As'; + + @override + String get sourceSearchInvalidRegex => 'Invalid regular expression'; + + @override + String get sourceLargeFileFeaturesPaused => + 'Large file: highlighting and folding are paused'; + + @override + String get nothingToRead => 'Nothing to read'; + + @override + String get admonition => 'Admonition'; + + @override + String get quote => 'Quote'; + + @override + String get note => 'Note'; + + @override + String get tip => 'Tip'; + + @override + String get warning => 'Warning'; + + @override + String get tabs => 'Tabs'; + + @override + String get tab => 'Tab'; + + @override + String get procedure => 'Procedure'; + + @override + String get step => 'Step'; + + @override + String get topic => 'Topic'; + + @override + String get chapter => 'Chapter'; + + @override + String couldNotOpenTarget(String target) { + return 'Could not open $target'; + } + + @override + String linkTargetNotFound(String targetPath) { + return 'Link target not found: $targetPath'; + } + + @override + String get cannotOpenFileTypeInEditor => + 'Cannot open this file type in editor'; + + @override + String anchorNotFound(String anchor) { + return 'Anchor not found: $anchor'; + } + + @override + String get noProblemsFound => 'No problems found'; + + @override + String get noResults => 'No results'; + + @override + String searchResultLine(String relativePath, int lineNumber) { + return '$relativePath - Line $lineNumber'; + } + + @override + String get untitledResult => 'Untitled result'; + + @override + String get documentKindMarkdownFile => 'Markdown file'; + + @override + String get documentKindWritersideMarkdownTopic => 'Writerside Markdown topic'; + + @override + String get documentKindWritersideXmlTopic => 'Writerside XML topic'; + + @override + String get documentKindWritersideTree => 'Writerside tree'; + + @override + String get documentKindConfigurationFile => 'Configuration file'; + + @override + String get documentKindVariablesFile => 'Variables file'; + + @override + String get documentKindCategoriesFile => 'Categories file'; + + @override + String get documentKindResourceFile => 'Resource file'; + + @override + String workspaceErrorOpenFailed(String error) { + return 'Open failed: $error'; + } + + @override + String workspaceErrorCreateWritersideProjectFailed(String error) { + return 'Could not create Writerside project: $error'; + } + + @override + String workspaceErrorCreateWritersideTopicFailed(String error) { + return 'Could not create Writerside topic: $error'; + } + + @override + String workspaceErrorCouldNotOpenFile(String error) { + return 'Could not open file: $error'; + } + + @override + String get workspaceErrorChooseWhereToSaveMarkdown => + 'Choose where to save this Markdown file.'; + + @override + String get workspaceErrorSaveBlockedFileChangedOnDisk => + 'Save blocked: file changed on disk.'; + + @override + String workspaceErrorSaveFailed(String error) { + return 'Save failed: $error'; + } + + @override + String workspaceErrorFileOperationFailed(String error) { + return 'File operation failed: $error'; + } + + @override + String workspaceErrorValidationFailed(String error) { + return 'Validation failed: $error'; + } + + @override + String workspaceRecoveryRestored(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Recovered $count unsaved documents. Review each one before saving or discarding it.', + one: + 'Recovered 1 unsaved document. Review it before saving or discarding it.', + ); + return '$_temp0'; + } + + @override + String workspaceRecoveryDamaged(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count damaged recovery records could not be restored. Valid recovery records remain available.', + one: + 'One damaged recovery record could not be restored. The original recovery file was preserved for inspection.', + ); + return '$_temp0'; + } + + @override + String errorPathDoesNotExist(String path) { + return 'Path does not exist: $path'; + } + + @override + String errorTargetDirectoryNotEmpty(String path) { + return 'Target directory already exists and is not empty: $path'; + } + + @override + String errorTargetPathNotDirectory(String path) { + return 'Target path already exists and is not a directory: $path'; + } + + @override + String errorGeneratedFileAlreadyExists(String path) { + return 'Generated file already exists: $path'; + } + + @override + String get errorParentDirectoryRequired => 'Parent directory is required.'; + + @override + String errorParentDirectoryMissing(String path) { + return 'Parent directory does not exist: $path'; + } + + @override + String errorDirectoryMissing(String path) { + return 'Directory does not exist: $path'; + } + + @override + String errorPathAlreadyExists(String path) { + return 'Path already exists: $path'; + } + + @override + String get errorFileNameRequired => 'File name is required.'; + + @override + String get errorFileNameUnsafe => + 'File name must be a single safe path segment.'; + + @override + String get errorFileOperationInvalidTarget => + 'Cannot move a folder into itself.'; + + @override + String get errorFileOperationOutsideRoot => + 'File operation must stay inside the workspace.'; + + @override + String get errorFileOperationRoot => + 'The workspace root cannot be changed from the file tree.'; + + @override + String get errorProjectNameRequired => 'Project name is required.'; + + @override + String get errorDirectoryNameRequired => 'Directory name is required.'; + + @override + String get errorDirectoryNameUnsafe => + 'Directory name must be a single safe path segment.'; + + @override + String get errorInstanceIdInvalid => + 'Instance ID must start with a lowercase letter and contain only lowercase letters, numbers, underscores, and hyphens.'; + + @override + String get errorTopicFileInvalid => + 'Topic file name must be a Markdown file name without path separators.'; + + @override + String get errorTopicTitleRequired => 'Topic title is required.'; + + @override + String errorWritersideModuleRootMissing(String path) { + return 'Writerside module root does not exist: $path'; + } + + @override + String get errorWritersideModuleNotOpen => + 'A Writerside module must be open to create a topic.'; + + @override + String get errorWritersideInstanceTreeMissing => + 'The Writerside module has no instance tree.'; + + @override + String errorWritersideTreeFileMissing(String path) { + return 'Writerside tree file does not exist: $path'; + } + + @override + String errorTopicIdAlreadyExists(String topicId) { + return 'Topic ID \"$topicId\" already exists in this help module.'; + } + + @override + String errorTopicFileAlreadyExists(String path) { + return 'Topic file already exists: $path'; + } + + @override + String errorReferenceTopicMissing(String topic) { + return 'Reference topic is not present in the selected tree: $topic'; + } + + @override + String get errorWritersideTocNodeMissing => + 'The selected TOC entry no longer exists.'; + + @override + String get errorWritersideTocInvalidMove => + 'A TOC entry cannot be moved into itself or one of its children.'; + + @override + String errorWritersideStartTopicDelete(String topic) { + return 'The start topic $topic cannot be deleted. Choose another start page first.'; + } + + @override + String get errorWritersideSafeDeleteRequired => + 'Use Safe Delete for Writerside topic files.'; + + @override + String get errorWritersideTopicUsageScanFailed => + 'Could not complete the topic usage scan. No files were changed.'; + + @override + String get errorWritersideTopicUsagesRemain => + 'Some topic usages still require attention. Review them before continuing.'; + + @override + String get errorWritersideRedirectInvalid => + 'The selected redirect target is no longer valid. Choose it again.'; + + @override + String errorWritersideRollbackFailed(String paths) { + return 'Topic removal could not be fully rolled back. Review these paths before continuing: $paths'; + } + + @override + String get errorTopicsRootUnsafe => + 'Topics root must be a safe relative directory.'; + + @override + String get errorTopicFileNameUnsafe => + 'Topic file name must be a single safe path segment.'; + + @override + String errorTopicFileExtensionMismatch(String extension) { + return 'Topic file extension must match the selected format ($extension).'; + } + + @override + String get errorTopicFileNameInvalid => + 'Topic file name must contain only letters, numbers, underscores, and hyphens.'; + + @override + String errorUnknown(String code) { + return 'Unknown error: $code'; + } + + @override + String diagnosticWorkspaceFileStatFailed(String error) { + return 'Could not read file metadata: $error'; + } + + @override + String get diagnosticWorkspaceScanSkipped => + 'Large workspace detected. Some files were skipped to keep the app responsive.'; + + @override + String diagnosticWorkspaceScanInspectFailed(String error) { + return 'Could not inspect workspace entry: $error'; + } + + @override + String get diagnosticWorkspaceFileTooLarge => + 'File is larger than the beta auto-parse limit.'; + + @override + String diagnosticWorkspaceFileReadFailed(String error) { + return 'Could not read Markdown file: $error'; + } + + @override + String get diagnosticMarkdownAttributeMalformed => + 'Malformed Writerside heading attribute block.'; + + @override + String diagnosticMarkdownHeadingDuplicateId(String id) { + return 'Duplicate heading ID \"$id\".'; + } + + @override + String get diagnosticWritersideTopicH1ConvertedToChapter => + 'Additional top-level H1 headings are treated as chapters.'; + + @override + String get diagnosticWritersideMarkdownTopicMissingTitle => + 'Writerside Markdown topic has no H1 or front matter title.'; + + @override + String get diagnosticWritersideXmlTopicMissingTitle => + 'XML topic is missing title.'; + + @override + String diagnosticWritersideTopicFileMissingTitle(String fileName) { + return 'Topic \"$fileName\" is missing a title.'; + } + + @override + String get diagnosticMarkdownFrontMatterMalformed => + 'Front matter is not closed.'; + + @override + String get diagnosticMarkdownRawHtmlUnsafe => 'Unsafe HTML element.'; + + @override + String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { + return 'Link target does not exist: $targetPath'; + } + + @override + String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { + return 'Anchor \"$anchor\" does not exist.'; + } + + @override + String diagnosticMarkdownImageMissingAlt(String destination) { + return 'Image \"$destination\" is missing alt text.'; + } + + @override + String diagnosticMarkdownImageMissingFile(String destination) { + return 'Image does not exist: $destination'; + } + + @override + String diagnosticInvalidXml(String message) { + return 'Invalid XML: $message'; + } + + @override + String get diagnosticWritersideConfigInvalidRoot => + 'writerside.cfg root must be .'; + + @override + String get diagnosticWritersideConfigMissingSnippetsSrc => + 'snippets declaration is missing src.'; + + @override + String get diagnosticWritersideConfigMissingInstanceGroupsSrc => + 'instance-groups declaration is missing src.'; + + @override + String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { + return 'Unsupported keymaps mode: $mode'; + } + + @override + String get diagnosticWritersideConfigMissingInstanceSrc => + 'Instance declaration is missing src.'; + + @override + String get diagnosticWritersideConfigMissingInstance => + 'writerside.cfg does not register an instance.'; + + @override + String get diagnosticWritersideTreeInvalidRoot => + '.tree root must be .'; + + @override + String get diagnosticWritersideTreeMissingId => + 'Instance profile is missing id.'; + + @override + String diagnosticWritersideTreeIdMismatch(String id) { + return 'Tree file stem does not match instance id \"$id\".'; + } + + @override + String get diagnosticWritersideTreeMissingStartPage => + 'Non-library instance is missing start-page.'; + + @override + String diagnosticWritersideStartPageMissing(String startPage) { + return 'Start page \"$startPage\" does not exist.'; + } + + @override + String diagnosticWritersideTreeDuplicateTopic(String topic) { + return 'Topic \"$topic\" appears more than once in this instance TOC.'; + } + + @override + String get diagnosticWritersideVariableMalformedDeclaration => + 'Variable declaration must have name and value.'; + + @override + String diagnosticWritersideVariableDuplicateName(String name) { + return 'Variable \"$name\" is declared more than once.'; + } + + @override + String get diagnosticWritersideCategoryMissingId => 'Category is missing id.'; + + @override + String diagnosticWritersideCategoryDuplicateId(String id) { + return 'Category \"$id\" is declared more than once.'; + } + + @override + String diagnosticWritersideCategoryDuplicateOrder(String order) { + return 'Category order \"$order\" is declared more than once.'; + } + + @override + String get diagnosticWritersideTopicInvalidRoot => + '.topic root must be .'; + + @override + String get diagnosticWritersideTopicMissingRootId => + 'XML topic is missing root id.'; + + @override + String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { + return 'XML topic root id \"$id\" must match filename \"$expectedId\".'; + } + + @override + String diagnosticWritersideTopicDuplicateElementId(String elementId) { + return 'Element id \"$elementId\" appears more than once.'; + } + + @override + String get diagnosticWritersideTopicAnchorMissingHref => + ' is missing href.'; + + @override + String get diagnosticWritersideConfigMissing => + 'Writerside mode requires writerside.cfg.'; + + @override + String diagnosticWritersideConfigMissingBuildConfigDirectory( + String relativePath, + ) { + return 'Configured build config directory is missing: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingApiSpecificationsDirectory( + String relativePath, + ) { + return 'Configured API specifications directory is missing: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingSnippetsDirectory( + String relativePath, + ) { + return 'Configured snippets directory is missing: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingVarsFile(String relativePath) { + return 'Configured variables file is missing: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { + return 'Configured categories file is missing: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceGroupsFile( + String relativePath, + ) { + return 'Configured instance groups file is missing: $relativePath'; + } + + @override + String diagnosticWritersideConfigMissingInstanceTree(String source) { + return 'Registered instance tree \"$source\" does not exist.'; + } + + @override + String diagnosticWritersideTopicReadFailed(String error) { + return 'Could not read topic file: $error'; + } + + @override + String diagnosticWritersideDefaultTopicsDirectoryMissing( + String relativePath, + ) { + return 'Default topics directory is missing: $relativePath'; + } + + @override + String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { + return 'Configured topics directory is missing: $relativePath'; + } + + @override + String diagnosticWritersideImagesDirectoryMissing(String relativePath) { + return 'Configured images directory is missing: $relativePath'; + } + + @override + String diagnosticWritersideTopicDuplicateId(String id) { + return 'Element id \"$id\" appears more than once.'; + } + + @override + String diagnosticWritersideTreeMissingTopic(String topic) { + return 'TOC references missing topic \"$topic\".'; + } + + @override + String diagnosticWritersideTreeInvalidHref(String href) { + return 'External href \"$href\" is invalid.'; + } + + @override + String diagnosticWritersideVariableUnresolved(String name) { + return 'Variable \"%$name%\" is not declared.'; + } + + @override + String diagnosticWritersideTopicLinkUnresolved(String destination) { + return 'Topic link \"$destination\" does not resolve.'; + } + + @override + String diagnosticWritersideAnchorUnresolved( + String anchor, + String targetName, + ) { + return 'Anchor \"$anchor\" does not exist in \"$targetName\".'; + } + + @override + String get diagnosticWritersideIncludeMissingFrom => + ' is missing the from attribute.'; + + @override + String diagnosticWritersideIncludeSourceMissing(String from) { + return 'Include source \"$from\" does not exist.'; + } + + @override + String diagnosticWritersideIncludeElementMissing( + String elementId, + String from, + ) { + return 'Include element \"$elementId\" does not exist in \"$from\".'; + } + + @override + String diagnosticWritersideCategoryUnresolved(String ref) { + return 'Seealso category \"$ref\" is not declared.'; + } + + @override + String diagnosticWritersideTopicAmbiguousReference(String reference) { + return 'Topic reference \"$reference\" is ambiguous.'; + } + + @override + String diagnosticUnknown(String code) { + return 'Unknown diagnostic: $code'; + } + + @override + String get close => 'Close'; + + @override + String get git => 'Git'; + + @override + String get gitDiff => 'Git diff'; + + @override + String get gitShowDiff => 'Show diff'; + + @override + String gitDiffHunkRange(String oldRange, String newRange) { + return 'old $oldRange → new $newRange'; + } + + @override + String get gitDiffNoLines => 'no lines'; + + @override + String get gitUnavailableTitle => 'Git is unavailable'; + + @override + String gitUnavailableMessage(String reason) { + String _temp0 = intl.Intl.selectLogic(reason, { + 'other': + 'Install Git or configure BusyMark to use an available Git executable. $reason', + }); + return '$_temp0'; + } + + @override + String get gitTrustRequiredTitle => 'Trust this workspace for Git?'; + + @override + String get gitTrustRequiredMessage => + 'Git repositories can run programs through hooks, filters, and other configuration. Trust this workspace before BusyMark reads repository data or enables Git actions.'; + + @override + String get gitTrustWorkspace => 'Trust workspace'; + + @override + String get gitNotRepositoryTitle => 'Not a Git repository'; + + @override + String get gitNotRepositoryMessage => + 'This workspace is not inside a Git repository.'; + + @override + String get gitInitializeRepository => 'Initialize repository'; + + @override + String get gitDetachedHead => 'Detached HEAD'; + + @override + String gitDetachedHeadAt(String commit) { + return 'Detached at $commit'; + } + + @override + String get gitNoUpstream => 'No upstream'; + + @override + String gitAheadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count unpushed commits', + one: '1 unpushed commit', + ); + return '$_temp0'; + } + + @override + String gitBehindCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count commits to pull', + one: '1 commit to pull', + ); + return '$_temp0'; + } + + @override + String get gitClean => 'Clean'; + + @override + String get gitConflicts => 'Conflicts'; + + @override + String get gitChanges => 'Changes'; + + @override + String get gitStaged => 'Staged'; + + @override + String get gitUnstaged => 'Unstaged'; + + @override + String get gitHistory => 'History'; + + @override + String get gitBranches => 'Branches'; + + @override + String get gitActions => 'Git actions'; + + @override + String get gitPull => 'Pull'; + + @override + String get gitFetch => 'Fetch'; + + @override + String get gitPush => 'Push'; + + @override + String get gitCommit => 'Commit'; + + @override + String get gitSelectForCommit => 'Stage file'; + + @override + String get gitRemoveFromCommit => 'Unstage file'; + + @override + String get gitDiscard => 'Rollback'; + + @override + String get gitOpenFile => 'Open file'; + + @override + String get gitMarkResolved => 'Mark resolved'; + + @override + String get gitUntracked => 'Untracked'; + + @override + String get gitCommitMessage => 'Commit message'; + + @override + String get gitCommitSelectedFiles => 'Selected files'; + + @override + String get gitCommitNoSelectedFiles => + 'Stage at least one file before committing.'; + + @override + String gitStagedFileCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count staged files', + one: '1 staged file', + ); + return '$_temp0'; + } + + @override + String get gitOutsideWorkspace => 'Outside workspace'; + + @override + String get gitCommitMessageRequired => 'Enter a commit message.'; + + @override + String get gitCreateBranch => 'Create branch'; + + @override + String get gitNewBranch => 'New Branch'; + + @override + String get gitBranchName => 'Branch name'; + + @override + String get gitSwitchBranch => 'Switch'; + + @override + String get gitNoChanges => 'No changes'; + + @override + String get gitNoHistory => 'No history'; + + @override + String get gitNoBranches => 'No branches'; + + @override + String get gitNoDiff => 'No diff to show'; + + @override + String get gitBinaryFile => + 'Binary file. BusyMark does not render binary patches.'; + + @override + String gitBinaryFileInfo(int size) { + return 'Binary file ($size bytes). BusyMark does not render binary patches.'; + } + + @override + String get gitUnsavedChangesBanner => + 'Unsaved editor changes are not included until saved.'; + + @override + String get gitConfirmDiscardTitle => 'Discard Git changes?'; + + @override + String gitConfirmDiscardTracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'All staged and unstaged changes in the selected tracked files will be restored to HEAD.', + one: + 'All staged and unstaged changes in the selected tracked file will be restored to HEAD.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardUntracked(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'The selected untracked files will be deleted.', + one: 'The selected untracked file will be deleted.', + ); + return '$_temp0'; + } + + @override + String gitConfirmDiscardMixed(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'The selected files will be restored or deleted based on their Git status.', + one: + 'The selected file will be restored or deleted based on its Git status.', + ); + return '$_temp0'; + } + + @override + String gitConfirmSwitchBranchTitle(String branch) { + return 'Switch to $branch?'; + } + + @override + String get gitConfirmSwitchBranchMessage => + 'BusyMark will reload the workspace from disk after Git switches branches.'; + + @override + String get gitConfirmPushSetUpstreamTitle => 'Set upstream branch?'; + + @override + String gitConfirmPushSetUpstreamMessage(String branch) { + return 'This branch has no upstream. BusyMark can push $branch and set its upstream when exactly one remote is configured.'; + } + + @override + String get gitProjectHistory => 'Project History'; + + @override + String get gitFileHistory => 'File History'; + + @override + String get gitFileHistoryRequiresOpenFile => + 'File History requires an open Markdown file.'; + + @override + String get gitLoadMore => 'Load More'; + + @override + String get gitChangesInCommit => 'Changes in this commit'; + + @override + String get gitCompareWithCurrent => 'Compare with current'; + + @override + String get gitRestoreVersion => 'Restore this version'; + + @override + String get gitConfirmRestoreTitle => 'Restore this file version?'; + + @override + String get gitConfirmRestoreMessage => + 'BusyMark will replace the current working-tree file with the selected committed version. The restored file will remain unstaged.'; + + @override + String get gitCommitActions => 'Commit actions'; + + @override + String get gitResetCurrentBranchToHere => 'Reset current branch to here…'; + + @override + String gitResetCurrentBranchTitle(String branch, String commit) { + return 'Reset $branch to $commit?'; + } + + @override + String gitResetCurrentBranchMessage(String branch, String commit) { + return 'This moves branch $branch to commit $commit. Choose how Git updates the index and working tree.'; + } + + @override + String get gitReset => 'Reset'; + + @override + String get gitResetModeSoft => 'Soft'; + + @override + String get gitResetModeSoftDescription => + 'Move the branch only. Keep the index and working tree unchanged; differences from the selected commit remain staged.'; + + @override + String get gitResetModeMixed => 'Mixed'; + + @override + String get gitResetModeMixedDescription => + 'Move the branch and reset the index. Keep the working tree unchanged, leaving differences unstaged.'; + + @override + String get gitResetModeHard => 'Hard'; + + @override + String get gitResetModeHardDescription => + 'Move the branch and reset the index and working tree. Tracked changes are discarded; obstructing untracked files may be deleted.'; + + @override + String get gitResetModeKeep => 'Keep'; + + @override + String get gitResetModeKeepDescription => + 'Move the branch and reset tracked files while preserving local changes. Git aborts if those changes conflict with the reset.'; + + @override + String gitAdditionsDeletions(int additions, int deletions) { + return '+$additions -$deletions'; + } + + @override + String get fileActions => 'File actions'; + + @override + String get actions => 'Actions'; + + @override + String get gitStatusAdded => 'Added'; + + @override + String get gitStatusDeleted => 'Deleted'; + + @override + String get gitStatusRenamed => 'Renamed'; + + @override + String get gitStatusCopied => 'Copied'; + + @override + String get gitStatusUntracked => 'Untracked'; + + @override + String get gitStatusConflicted => 'Conflicted'; + + @override + String get gitStatusIgnored => 'Ignored'; + + @override + String get gitStatusTypeChanged => 'Type changed'; + + @override + String get gitStatusModified => 'Modified'; + + @override + String get gitStatusUnknown => 'Unknown'; + + @override + String get gitErrorUnavailable => 'Git is unavailable.'; + + @override + String get gitErrorNotRepository => 'This workspace is not a Git repository.'; + + @override + String get gitErrorUnsafePath => 'BusyMark blocked an unsafe Git path.'; + + @override + String get gitErrorInvalidBranchName => 'Enter a valid branch name.'; + + @override + String get gitErrorNoRemote => 'No Git remote is configured.'; + + @override + String get gitErrorNoUpstream => 'No upstream branch is configured.'; + + @override + String get gitErrorMultipleRemotes => + 'Multiple remotes are configured. Choose an upstream outside this BusyMark version.'; + + @override + String get gitErrorDirtyWorkspace => + 'Save or discard BusyMark editor changes before switching branches.'; + + @override + String get gitErrorResetDirtyWorkspace => + 'Save or discard BusyMark editor changes before resetting the current branch.'; + + @override + String get gitErrorRestoreStagedFile => + 'Unstage this file before restoring a historical version.'; + + @override + String get gitErrorResetDetachedHead => + 'Check out a branch before resetting it.'; + + @override + String get gitErrorDiverged => + 'Branch has diverged. Resolve merge or rebase outside this BusyMark version.'; + + @override + String get gitErrorAuthorIdentity => + 'Git needs an author name and email address before it can commit.'; + + @override + String get gitAuthorIdentityTitle => 'Git Author Identity'; + + @override + String get gitAuthorIdentityMessage => + 'Enter the identity Git should record on commits. BusyMark will save it and retry this commit.'; + + @override + String get gitAuthorName => 'Name'; + + @override + String get gitAuthorEmail => 'Email'; + + @override + String get gitAuthorIdentityGlobal => 'Use for all repositories'; + + @override + String get gitAuthorIdentityGlobalDescription => + 'When installed as a Snap, this applies to repositories opened in BusyMark.'; + + @override + String get gitSaveIdentityAndCommit => 'Save and Commit'; + + @override + String get gitErrorAuthentication => 'Git authentication failed.'; + + @override + String get gitErrorNetwork => 'Git network operation failed.'; + + @override + String get gitErrorConflict => 'Git reported unresolved conflicts.'; + + @override + String get gitErrorCommandFailed => 'Git command failed.'; + + @override + String get markdownAndHtml => 'Markdown and HTML'; + + @override + String get markdownHtmlMarkdownBlocks => 'Markdown Blocks'; + + @override + String get markdownHtmlMarkdownBlocksDescription => + 'Block structures supported in Markdown source and preview.'; + + @override + String get markdownHtmlInlineFormatting => 'Inline Markdown'; + + @override + String get markdownHtmlInlineFormattingDescription => + 'Formatting that can appear inside paragraphs, list items, and table cells.'; + + @override + String get markdownHtmlRawHtmlBlocks => 'Raw HTML Blocks'; + + @override + String get markdownHtmlRawHtmlBlocksDescription => + 'Safe block-level HTML tags rendered through BusyMark preview widgets.'; + + @override + String get markdownHtmlRawHtmlInline => 'Raw HTML Inline Tags'; + + @override + String get markdownHtmlRawHtmlInlineDescription => + 'Safe inline HTML tags rendered without showing literal tags.'; + + @override + String get markdownHtmlSafety => 'Safety Rules'; + + @override + String get markdownHtmlSafetyDescription => + 'Raw HTML is parsed and sanitized before preview rendering.'; + + @override + String get markdownHtmlHeadings => 'Headings'; + + @override + String get markdownHtmlParagraphs => 'Paragraphs'; + + @override + String get markdownHtmlLists => 'Lists'; + + @override + String get markdownHtmlHtmlContainers => 'Containers'; + + @override + String get markdownHtmlHtmlTextBlocks => 'Text blocks'; + + @override + String get markdownHtmlHtmlFigures => 'Figures and images'; + + @override + String get markdownHtmlHtmlPreformatted => 'Preformatted code'; + + @override + String get markdownHtmlHtmlDisclosure => 'Disclosure blocks'; + + @override + String get markdownHtmlHtmlDescriptionLists => 'Description lists'; + + @override + String get markdownHtmlHtmlFormattingTags => 'Formatting tags'; + + @override + String get markdownHtmlHtmlInlineCodeTags => 'Inline code tags'; + + @override + String get markdownHtmlHtmlNeutralInlineTags => 'Semantic text tags'; + + @override + String get markdownHtmlSanitizedPreview => 'Sanitized preview'; + + @override + String get markdownHtmlSanitizedPreviewDescription => + 'Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.'; + + @override + String get markdownHtmlSourcePreserved => 'Source is preserved'; + + @override + String get markdownHtmlSourcePreservedDescription => + 'Unedited raw HTML is saved back exactly as source text.'; + + @override + String get markdownHtmlMarkdownInsideHtml => 'Markdown inside HTML'; + + @override + String get markdownHtmlMarkdownInsideHtmlDescription => + 'Markdown markers inside raw HTML render as literal text.'; + + @override + String get markdownHtmlBlockedContent => 'Blocked active content'; + + @override + String get markdownHtmlBlockedContentDescription => + 'Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.'; + + @override + String get markdownHtmlSafeUrls => 'Safe URLs only'; + + @override + String get markdownHtmlSafeUrlsDescription => + 'Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.'; + + @override + String get exportAsPdf => 'Export as PDF'; + + @override + String get pdfExportDescription => + 'Choose the page layout for a polished, self-contained PDF.'; + + @override + String get pdfRemoteImagesNote => + 'Remote images are not downloaded during export. Local images are included when available.'; + + @override + String get pdfPageSize => 'Page size'; + + @override + String get pdfPageSizeA4 => 'A4'; + + @override + String get pdfPageSizeLetter => 'Letter'; + + @override + String get pdfOrientation => 'Orientation'; + + @override + String get pdfPortrait => 'Portrait'; + + @override + String get pdfLandscape => 'Landscape'; + + @override + String get pdfMargins => 'Margins'; + + @override + String get pdfMarginNarrow => 'Narrow'; + + @override + String get pdfMarginNormal => 'Normal'; + + @override + String get pdfMarginWide => 'Wide'; + + @override + String get pdfIncludePageNumbers => 'Include page numbers'; + + @override + String get export => 'Export'; + + @override + String get exportingPdf => 'Exporting PDF…'; + + @override + String get fileTypePdf => 'PDF document'; + + @override + String pdfExported(String fileName) { + return '$fileName was exported.'; + } + + @override + String pdfExportedWithWarnings(String fileName, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count warnings', + one: '1 warning', + ); + return '$fileName was exported with $_temp0.'; + } + + @override + String get pdfExportUnavailable => + 'The PDF export component is missing. Reinstall BusyMark and try again.'; + + @override + String get pdfExportTimedOut => 'PDF export took too long and was stopped.'; + + @override + String get pdfExportFailed => + 'BusyMark could not export this document as PDF.'; + + @override + String get visualizationRendering => 'Rendering…'; + + @override + String get visualizationStale => 'Showing the last valid render'; + + @override + String get visualizationShowSource => 'Show source'; + + @override + String get visualizationShowRender => 'Show render'; + + @override + String get visualizationFitWidth => 'Fit to width'; + + @override + String get visualizationSaveImage => 'Save image'; + + @override + String get visualizationCopyImage => 'Copy image'; + + @override + String get visualizationImageCopied => 'Image copied'; + + @override + String get visualizationOpenApiReference => 'Open API Reference'; + + @override + String get visualizationValid => 'Valid'; + + @override + String get visualizationInvalid => 'Invalid'; + + @override + String get visualizationServers => 'Servers'; + + @override + String get visualizationPaths => 'Paths'; + + @override + String get visualizationOperations => 'Operations'; + + @override + String get visualizationTags => 'Tags'; + + @override + String get visualizationNoOperations => 'No matching operations'; + + @override + String get visualizationSearchOperations => 'Search operations'; + + @override + String get visualizationRenderFailed => + 'This visualization could not be rendered.'; + + @override + String get visualizationRetry => 'Retry'; + + @override + String visualizationSaved(String fileName) { + return 'Saved $fileName'; + } + + @override + String get shortcutExportPdfDescription => + 'Export the active document or Writerside module as a PDF.'; + + @override + String get instances => 'Instances'; + + @override + String get newInstance => 'New instance'; + + @override + String get newTocLibrary => 'New TOC library'; + + @override + String get editInstance => 'Edit instance'; + + @override + String get openTocFile => 'Open TOC file'; + + @override + String get createInstance => 'Create instance'; + + @override + String get createTocLibrary => 'Create TOC library'; + + @override + String get instanceContent => 'Content'; + + @override + String get instanceContentSource => 'Create from'; + + @override + String get emptyInstance => 'Empty instance'; + + @override + String get markdownFiles => 'Local Markdown files'; + + @override + String get chooseMarkdownFolder => 'Choose Markdown folder'; + + @override + String get errorWritersideInstanceImportSourceRequired => + 'Choose a folder containing Markdown files.'; + + @override + String get instanceAppearance => 'Appearance'; + + @override + String get instanceColor => 'Icon color'; + + @override + String get instanceVersion => 'Version'; + + @override + String instanceVersionInherited(String version) { + return 'The project version is $version when this field is empty.'; + } + + @override + String get instanceWebPath => 'Web path'; + + @override + String get instanceStatus => 'Status'; + + @override + String get instanceStatusRelease => 'Release'; + + @override + String get instanceStatusEap => 'Early access'; + + @override + String get instanceStatusDeprecated => 'Deprecated'; + + @override + String get allowSearchEngineIndexing => 'Allow search engine indexing'; + + @override + String get allowSearchEngineIndexingDescription => + 'Allow external search engines to index this output.'; + + @override + String get offlineArtifact => 'Offline artifact'; + + @override + String get offlineArtifactDescription => + 'Bundle resources so the built documentation is self-contained.'; + + @override + String get instanceOutputSettings => 'Output settings'; + + @override + String get markdownImportSource => 'Markdown source'; + + @override + String get markdownImportFiles => 'Markdown files'; + + @override + String get selectNone => 'Select none'; + + @override + String markdownFilesFound(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Markdown files found', + one: '1 Markdown file found', + ); + return '$_temp0'; + } + + @override + String get noMarkdownFilesFound => + 'No Markdown files were found in this directory.'; + + @override + String get copyReferencedMedia => 'Copy referenced media'; + + @override + String get copyReferencedMediaDescription => + 'Copy local images and video referenced by the selected files while preserving relative paths.'; + + @override + String get instanceIdRenameWarningTitle => 'Rename instance ID?'; + + @override + String instanceIdRenameWarning(String oldId, String newId) { + return 'BusyMark will rename the .tree file and update Writerside project references from “$oldId” to “$newId”. Publication scripts are not changed and must be updated separately.'; + } + + @override + String get renameAndUpdateReferences => 'Rename and update references'; + + @override + String get tocLibraryDescription => + 'A TOC library stores reusable sections and does not produce its own output.'; + + @override + String get defaultTocLibraryName => 'Shared TOC'; + + @override + String get instanceColorAutomatic => 'Automatic'; + + @override + String get instanceColorBlue => 'Blue'; + + @override + String get instanceColorGreen => 'Green'; + + @override + String get instanceColorOrange => 'Orange'; + + @override + String get instanceColorPurple => 'Purple'; + + @override + String get instanceColorRed => 'Red'; + + @override + String get instanceColorTeal => 'Teal'; + + @override + String get instanceColorYellow => 'Yellow'; + + @override + String get errorWritersideInstanceNameRequired => 'Enter an instance name.'; + + @override + String errorWritersideInstanceIdExists(String id) { + return 'An instance with ID “$id” already exists.'; + } + + @override + String errorWritersideInstanceTreeExists(String path) { + return 'The instance tree already exists: $path'; + } + + @override + String errorWritersideInstanceImportSourceMissing(String path) { + return 'The Markdown source directory does not exist: $path'; + } + + @override + String get errorWritersideInstanceImportSelectionRequired => + 'Select at least one Markdown file to import.'; + + @override + String errorWritersideInstanceImportFileInvalid(String path) { + return 'This is not a readable Markdown file inside the selected source: $path'; + } + + @override + String errorWritersideInstanceImportTargetExists(String path) { + return 'Import would overwrite an existing project file: $path'; + } + + @override + String get errorWritersideInstanceFilesChanged => + 'Instance files changed on disk. Review them and try again.'; + + @override + String errorWritersideInstanceRollbackFailed(String paths) { + return 'BusyMark could not completely roll back the instance change. Review these files before continuing: $paths'; + } + + @override + String get errorWritersideInstanceLibraryImport => + 'A TOC library cannot import Markdown topics.'; + + @override + String get errorWritersideInstanceWebPathInvalid => + 'The web path must be a single line.'; + + @override + String get errorWritersideInstanceConfigurationInvalid => + 'The Writerside instance configuration is invalid. Correct its diagnostics and try again.'; + + @override + String get errorWritersideInstanceTemporaryFile => + 'BusyMark could not stage the instance changes safely.'; + + @override + String diagnosticWritersideTreeInvalidStatus(String status) { + return 'Unknown instance status “$status”. Use release, eap, or deprecated.'; + } + + @override + String diagnosticWritersideDuplicateInstanceId(String id) { + return 'The instance ID “$id” is used by more than one tree file.'; + } + + @override + String get diagnosticWritersideBuildProfilesInvalidRoot => + 'buildprofiles.xml must have a root element.'; + + @override + String diagnosticWritersideBuildProfilesInvalidBoolean( + String name, + String value, + ) { + return 'The $name value “$value” must be true or false.'; + } + + @override + String get diagnosticWritersideBuildProfileMissingInstance => + 'A element must specify an instance ID.'; + + @override + String get diagnosticWritersideTreeInvalidInclude => + 'A tree must specify both from and element-id.'; + + @override + String get diagnosticWritersideTreeMissingSnippetId => + 'A tree must specify an id.'; + + @override + String get diagnosticWritersideTreeInvalidCrossInstanceReference => + 'A cross-instance TOC reference must specify both ref and in.'; + + @override + String get diagnosticWritersideTreeConflictingTargets => + 'A TOC element cannot target more than one topic, reference, link, or redirect.'; + + @override + String diagnosticWritersideTreeDuplicateElementId(String id) { + return 'Tree element ID “$id” is declared more than once.'; + } + + @override + String get diagnosticWritersideInstanceGroupsInvalidRoot => + 'The instance groups file must have an root element.'; + + @override + String get diagnosticWritersideInstanceGroupInvalid => + 'An instance group must specify a non-empty id and instances list.'; + + @override + String diagnosticWritersideInstanceGroupDuplicateId(String id) { + return 'Instance group ID “$id” is declared more than once.'; + } + + @override + String diagnosticWritersideExternalTreeInclude( + String source, + String id, + String origin, + ) { + return 'TOC include “$source#$id” belongs to external module “$origin” and cannot be expanded in this workspace.'; + } + + @override + String diagnosticWritersideTreeIncludeElementMissing( + String source, + String id, + ) { + return 'Tree element “$id” does not exist in registered tree “$source”.'; + } + + @override + String diagnosticWritersideTreeCircularInclude(String source, String id) { + return 'Tree include “$source#$id” creates a cycle.'; + } + + @override + String diagnosticWritersideUnknownInstanceGroup(String group) { + return 'Instance condition references unknown group “@$group”.'; + } + + @override + String diagnosticWritersideReferenceInstanceMissing(String instance) { + return 'Cross-instance reference targets unknown instance “$instance”.'; + } + + @override + String diagnosticWritersideReferenceTopicMissing( + String topic, + String instance, + ) { + return 'Topic “$topic” is not in referenced instance “$instance”.'; + } + + @override + String get download => 'Download'; + + @override + String get exportWritersideAsPdf => 'Export Writerside as PDF'; + + @override + String get writersidePdfContent => 'Export content'; + + @override + String get writersidePdfPage => 'Page'; + + @override + String get exportingWritersidePdf => 'Exporting Writerside PDF…'; + + @override + String get ai => 'AI'; + + @override + String get aiLocalOllama => 'Local Ollama'; + + @override + String get aiDisabled => 'Disabled'; + + @override + String get aiExplicitEditingDescription => + 'AI editing is explicit. BusyMark sends only the context shown for the selected provider and never applies a proposal without review.'; + + @override + String get aiProvider => 'AI provider'; + + @override + String get aiDefaultProvider => 'Default provider'; + + @override + String get aiConfigureProvider => 'Configure provider'; + + @override + String get aiChooseProvider => 'Choose AI provider'; + + @override + String get aiOllamaEndpoint => 'Ollama endpoint'; + + @override + String get aiOllamaModel => 'Ollama model'; + + @override + String get aiTestConnection => 'Test connection'; + + @override + String get aiTestingConnection => 'Testing…'; + + @override + String aiConnectionReady(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count installed models found', + one: '1 installed model found', + ); + return 'Connected. $_temp0.'; + } + + @override + String get aiNoModels => 'No model selected.'; + + @override + String get aiConnectionFailed => + 'BusyMark could not verify AI text generation.'; + + @override + String get aiConfigureFirst => + 'Enable an AI provider and verify a model in Settings → AI.'; + + @override + String get aiEditWithAi => 'Edit with AI'; + + @override + String get aiRefineWithAi => 'Refine with AI'; + + @override + String get aiInstruction => 'Instruction'; + + @override + String get aiChangeTarget => 'What may change'; + + @override + String get aiSharedContext => 'Context shared with AI'; + + @override + String get aiTargetSelection => 'Selected content'; + + @override + String get aiTargetInsertAfterBlock => 'Insert after current block'; + + @override + String get aiTargetCurrentBlock => 'Current block'; + + @override + String get aiTargetCurrentSection => 'Current section'; + + @override + String get aiTargetCompleteDocument => 'Complete document'; + + @override + String get aiContextNone => 'No document context'; + + @override + String get aiContextSelection => 'Selected content'; + + @override + String get aiContextCurrentBlock => 'Current block'; + + @override + String get aiContextCurrentSection => 'Current section'; + + @override + String get aiContextCompleteDocument => 'Complete document'; + + @override + String get aiGenerating => 'Generating proposal…'; + + @override + String get aiProposal => 'AI proposal'; + + @override + String get aiGenerateProposal => 'Generate proposal'; + + @override + String aiContextDisclosure(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count characters', + one: '1 character', + ); + return 'The selected provider will receive $_temp0 from the displayed context.'; + } + + @override + String get aiOriginal => 'Original'; + + @override + String get aiSuggested => 'Suggested'; + + @override + String get aiApplyProposal => 'Apply proposal'; + + @override + String aiTokenUsage(int input, int output) { + return '$input input tokens · $output output tokens'; + } + + @override + String get aiStaleProposal => + 'The document changed while this proposal was generated. Run the action again.'; + + @override + String get gitAiStagedChangesChanged => + 'The staged changes changed while this commit message was generated. Run the action again.'; + + @override + String get aiViewContext => 'View context sent'; + + @override + String get aiReviewExactContent => 'Review exact content'; + + @override + String get aiContentToChange => 'Content to change'; + + @override + String get aiContentSentToAi => 'Content sent to AI'; + + @override + String get aiApiKey => 'API key'; + + @override + String get aiApiKeyStoredHint => + 'A key is stored in the system credential store'; + + @override + String get aiApiKeyEnterHint => 'Enter a provider API key'; + + @override + String get aiReplaceApiKey => 'Replace API key'; + + @override + String get aiSaveApiKey => 'Save API key securely'; + + @override + String get aiRemoveApiKey => 'Remove saved API key'; + + @override + String get aiCredentialSaved => + 'API key saved in the system credential store.'; + + @override + String get aiCredentialRemoved => 'The saved API key was removed.'; + + @override + String get aiModelRouting => 'Model routing'; + + @override + String get aiAutomaticRouting => 'Automatic by task'; + + @override + String get aiFixedModelRouting => 'Use selected model'; + + @override + String get aiPreferredModel => 'Preferred model'; + + @override + String get aiModel => 'Model'; + + @override + String aiUsageThisMonth(int requests, int input, int output) { + return '$requests requests · $input input tokens · $output output tokens'; + } + + @override + String aiCloudConsentTitle(String provider) { + return 'Send content to $provider?'; + } + + @override + String aiCloudConsentEnable(String provider) { + return 'Enable $provider'; + } + + @override + String get aiCloudConsentMessage => + 'Only content shown in each AI review dialog is sent. Requests are stateless, proposals require review, and the API key is stored in the Linux system credential store.'; + + @override + String aiCloudConsentRequired(String provider) { + return 'Confirm $provider data sharing in Settings → AI first.'; + } + + @override + String aiGenerationVerified(String model, int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count compatible models available', + one: '1 compatible model available', + ); + return 'Generation verified with $model. $_temp0.'; + } + + @override + String get aiColdStartObserved => 'A local model cold start was observed.'; + + @override + String get aiNoCompatibleModels => + 'No compatible text-generation model is available.'; + + @override + String get aiEnableProvider => 'Enable an AI provider first.'; + + @override + String get aiDraftCommitMessage => 'Draft commit message'; + + @override + String get aiDrafting => 'Drafting…'; + + @override + String get aiDraftWithAi => 'Draft with AI'; + + @override + String get generateOrUpdateMarkdownToc => 'Generate/update table of contents'; + + @override + String get markdownTocTitle => 'Table of contents'; + + @override + String markdownTocUpdated(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count entries', + one: '1 entry', + ); + return 'Table of contents updated with $_temp0.'; + } + + @override + String get markdownTocNoHeadings => + 'Add at least one section heading before generating a table of contents.'; + + @override + String get markdownTocMalformedMarkers => + 'The BusyMark table-of-contents markers are missing, duplicated, or out of order.'; + + @override + String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { + return 'Heading level $level follows level $previousLevel; review the section nesting.'; + } + + @override + String get diagnosticMarkdownLinkEmptyText => + 'Link text is empty; provide an accessible name that describes its purpose.'; + + @override + String diagnosticMarkdownLinkReviewText(String text) { + return 'Review whether the link text “$text” describes its purpose in context.'; + } + + @override + String get diagnosticMarkdownTableEmptyHeader => + 'Table header cells must identify their columns; complete each empty header.'; + + @override + String get mathRenderFailed => + 'The mathematical expression could not be rendered.'; + + @override + String get inlineMath => 'Inline math'; + + @override + String get displayMath => 'Display math'; +} + +/// The translations for Portuguese, as used in Brazil (`pt_BR`). +class AppLocalizationsPtBr extends AppLocalizationsPt { + AppLocalizationsPtBr() : super('pt_BR'); + + @override + String get appTitle => 'BusyMark'; + + @override + String get appSubtitle => + 'Editor para arquivos Markdown e projetos de documentação compatíveis com o Writerside.'; @override String get aboutBusyMark => 'Sobre BusyMark'; @@ -74,7 +3615,7 @@ class AppLocalizationsPt extends AppLocalizations { @override String get feedbackTechnicalDetailsDisclosure => - 'Quando esta opção está ativada, são adicionados apenas a versão do sistema operativo Linux e as definições regionais da aplicação BusyMark. Não são anexados registos, ficheiros, dados de conta nem outros diagnósticos.'; + 'Quando esta opção está ativada, adiciona apenas a versão do sistema operacional Linux e o locale do BusyMark. Nenhum log, arquivo, dados de conta ou outro diagnóstico é anexado.'; @override String get feedbackSubmit => 'Enviar'; @@ -87,11 +3628,11 @@ class AppLocalizationsPt extends AppLocalizations { @override String get feedbackSubjectLength => - 'O assunto deve ter entre 3 e 120 carateres.'; + 'O assunto deve ter entre 3 e 120 caracteres.'; @override String get feedbackMessageLength => - 'A mensagem deve ter entre 10 e 5000 carateres.'; + 'A mensagem deve ter entre 10 e 5000 caracteres.'; @override String get feedbackReplyEmailInvalid => @@ -99,7 +3640,7 @@ class AppLocalizationsPt extends AppLocalizations { @override String get feedbackConnectionFailure => - 'O BusyMark não conseguiu estabelecer ligação. Verifique a ligação à Internet e tente novamente.'; + 'O BusyMark não conseguiu estabelecer conexão. Verifique a conexão com a Internet e tente novamente.'; @override String get feedbackTimeoutFailure => @@ -107,7 +3648,7 @@ class AppLocalizationsPt extends AppLocalizations { @override String get feedbackRateLimitedFailure => - 'Foram enviados demasiados relatórios a partir desta ligação. Aguarde e tente novamente.'; + 'Foram enviados relatórios demais a partir desta conexão. Aguarde e tente novamente.'; @override String get feedbackRejectedFailure => @@ -324,7 +3865,7 @@ class AppLocalizationsPt extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -812,7 +4353,15 @@ class AppLocalizationsPt extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return 'Há $count documentos com alterações não salvas. Deseja salvá-los antes de continuar?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documentos com alterações não salvas. Deseja salvá-los antes de continuar?', + one: + 'Há 1 documento com alterações não salvas. Deseja salvá-lo antes de continuar?', + ); + return '$_temp0'; } @override @@ -881,7 +4430,7 @@ class AppLocalizationsPt extends AppLocalizations { @override String diagnosticWritersideVideoMissingFile(String source) { - return 'O ficheiro de vídeo não existe: $source'; + return 'O arquivo de vídeo não existe: $source'; } @override @@ -1428,7 +4977,7 @@ class AppLocalizationsPt extends AppLocalizations { String get sourceSearchReplacement => 'Substituir por'; @override - String get sourceSearchReplaceCurrent => 'Substituir atual'; + String get sourceSearchReplaceCurrent => 'Substituir correspondência atual'; @override String get sourceSearchReplaceAndFindNext => 'Substituir e localizar próximo'; @@ -1697,12 +5246,28 @@ class AppLocalizationsPt extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Foram recuperados $count documentos não salvos. Revise cada documento recuperado antes de continuar.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count documentos sem salvamento recuperados. Revise cada um antes de salvar ou descartar.', + one: + '1 documento sem salvamento recuperado. Revise antes de salvar ou descartar.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'Não foi possível restaurar $count registros de recuperação danificados. Os documentos recuperados válidos continuam disponíveis.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count registros de recuperação danificados não puderam ser restaurados. Os registros de recuperação válidos permanecem disponíveis.', + one: + '1 registro de recuperação danificado não pôde ser restaurado. O arquivo de recuperação original foi preservado para inspeção.', + ); + return '$_temp0'; } @override @@ -2396,8 +5961,10 @@ class AppLocalizationsPt extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Os arquivos rastreados selecionados serão restaurados pelo Git.', - one: 'O arquivo rastreado selecionado será restaurado pelo Git.', + other: + 'Todas as mudanças staged e unstaged nos arquivos rastreados selecionados serão restauradas para HEAD.', + one: + 'Todas as mudanças staged e unstaged no arquivo selecionado rastreado serão restauradas para HEAD.', ); return '$_temp0'; } @@ -2444,10 +6011,10 @@ class AppLocalizationsPt extends AppLocalizations { } @override - String get gitProjectHistory => 'Projeto'; + String get gitProjectHistory => 'Histórico do projeto'; @override - String get gitFileHistory => 'Arquivo atual'; + String get gitFileHistory => 'Histórico do arquivo'; @override String get gitFileHistoryRequiresOpenFile => @@ -2812,7 +6379,13 @@ class AppLocalizationsPt extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName foi exportado. Imagens que não foi possível incluir: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count avisos', + one: '1 aviso', + ); + return '$fileName foi exportado com $_temp0.'; } @override @@ -2843,7 +6416,7 @@ class AppLocalizationsPt extends AppLocalizations { String get visualizationFitWidth => 'Ajustar à largura'; @override - String get visualizationSaveImage => 'Guardar imagem'; + String get visualizationSaveImage => 'Salvar imagem'; @override String get visualizationCopyImage => 'Copiar imagem'; @@ -2907,7 +6480,7 @@ class AppLocalizationsPt extends AppLocalizations { String get editInstance => 'Editar instância'; @override - String get openTocFile => 'Abrir ficheiro de sumário'; + String get openTocFile => 'Abrir arquivo do índice'; @override String get createInstance => 'Criar instância'; @@ -2932,7 +6505,7 @@ class AppLocalizationsPt extends AppLocalizations { @override String get errorWritersideInstanceImportSourceRequired => - 'Escolha uma pasta que contenha ficheiros Markdown.'; + 'Escolha uma pasta que contenha arquivos Markdown.'; @override String get instanceAppearance => 'Aspeto'; @@ -2992,26 +6565,26 @@ class AppLocalizationsPt extends AppLocalizations { @override String markdownFilesFound(int count) { - return 'Foram encontrados $count ficheiro(s) Markdown'; + return 'Foram encontrados $count arquivo(s) Markdown'; } @override String get noMarkdownFilesFound => - 'Não foram encontrados ficheiros Markdown neste diretório.'; + 'Não foram encontrados arquivos Markdown neste diretório.'; @override String get copyReferencedMedia => 'Copiar multimédia referenciada'; @override String get copyReferencedMediaDescription => - 'Copie imagens e vídeos locais referenciados pelos ficheiros selecionados, preservando os caminhos relativos.'; + 'Copie imagens e vídeos locais referenciados pelos arquivos selecionados, preservando os caminhos relativos.'; @override String get instanceIdRenameWarningTitle => 'Mudar o nome do ID da instância?'; @override String instanceIdRenameWarning(String oldId, String newId) { - return 'O BusyMark mudará o nome do ficheiro .tree e atualizará as referências do projeto Writerside de “$oldId” para “$newId”. Os scripts de publicação não são alterados e devem ser atualizados separadamente.'; + return 'O BusyMark vai renomear o arquivo .tree e atualizar as referências do projeto Writerside de “$oldId” para “$newId”. Os scripts de publicação não são alterados e devem ser atualizados separadamente.'; } @override @@ -3070,25 +6643,25 @@ class AppLocalizationsPt extends AppLocalizations { @override String get errorWritersideInstanceImportSelectionRequired => - 'Selecione pelo menos um ficheiro Markdown para importar.'; + 'Selecione pelo menos um arquivo Markdown para importar.'; @override String errorWritersideInstanceImportFileInvalid(String path) { - return 'Este não é um ficheiro Markdown legível dentro da origem selecionada: $path'; + return 'Este não é um arquivo Markdown legível dentro da origem selecionada: $path'; } @override String errorWritersideInstanceImportTargetExists(String path) { - return 'A importação substituiria um ficheiro existente do projeto: $path'; + return 'A importação substituiria um arquivo existente do projeto: $path'; } @override String get errorWritersideInstanceFilesChanged => - 'Os ficheiros da instância foram alterados no disco. Reveja-os e tente novamente.'; + 'Os arquivos da instância foram alterados no disco. Revise-os e tente novamente.'; @override String errorWritersideInstanceRollbackFailed(String paths) { - return 'O BusyMark não conseguiu reverter completamente a alteração da instância. Reveja estes ficheiros antes de continuar: $paths'; + return 'O BusyMark não conseguiu reverter completamente a alteração da instância. Revise estes arquivos antes de continuar: $paths'; } @override @@ -3232,7 +6805,7 @@ class AppLocalizationsPt extends AppLocalizations { String get aiDisabled => 'Desativado'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'A edição com IA é iniciada apenas de forma explícita. O BusyMark envia somente o contexto exibido ao provedor selecionado e nunca aplica uma proposta sem revisão.'; @override diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 938a332b..df97a584 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -67,7 +67,7 @@ class AppLocalizationsRu extends AppLocalizations { String get feedbackMessage => 'Подробное сообщение'; @override - String get feedbackReplyEmail => 'Эл. почта для ответа (необязательно)'; + String get feedbackReplyEmail => 'Эл. адрес для ответа (необязательно)'; @override String get feedbackIncludeTechnicalDetails => 'Включить технические сведения'; @@ -324,7 +324,7 @@ class AppLocalizationsRu extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -811,7 +811,15 @@ class AppLocalizationsRu extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return 'В документах ($count) есть несохранённые изменения. Сохранить их перед продолжением?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count документа содержат несохранённые изменения. Сохраните каждое перед продолжением.', + one: + '1 документ содержит несохранённые изменения. Сохраните его перед продолжением.', + ); + return '$_temp0'; } @override @@ -1433,7 +1441,7 @@ class AppLocalizationsRu extends AppLocalizations { String get sourceSearchReplacement => 'Заменить на'; @override - String get sourceSearchReplaceCurrent => 'Заменить текущее'; + String get sourceSearchReplaceCurrent => 'Заменить текущее совпадение'; @override String get sourceSearchReplaceAndFindNext => 'Заменить и найти следующее'; @@ -1700,12 +1708,28 @@ class AppLocalizationsRu extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Восстановлено несохранённых документов: $count. Проверьте каждый восстановленный документ перед продолжением.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Восстановлено $count несохранённых документов. Проверьте каждый перед сохранением или отменой.', + one: + 'Восстановлен 1 несохранённый документ. Проверьте его перед сохранением или отменой.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'Не удалось восстановить повреждённые записи ($count). Корректные восстановленные документы остаются доступными.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count повреждённых записей восстановления не удалось восстановить. Корректные записи восстановления остаются доступны.', + one: + 'Не удалось восстановить 1 повреждённую запись восстановления. Оригинальный файл восстановления сохранён для проверки.', + ); + return '$_temp0'; } @override @@ -2346,8 +2370,10 @@ class AppLocalizationsRu extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count индексированных файлов', - one: '1 индексированный файл', + other: '$count файлов в индексе', + many: '$count файлов в индексе', + few: '$count файла в индексе', + one: '1 файл в индексе', ); return '$_temp0'; } @@ -2403,10 +2429,10 @@ class AppLocalizationsRu extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Выбранные отслеживаемые файлы будут восстановлены из Git.', - many: 'Выбранные отслеживаемые файлы будут восстановлены из Git.', - few: 'Выбранные отслеживаемые файлы будут восстановлены из Git.', - one: 'Выбранный отслеживаемый файл будет восстановлен из Git.', + other: + 'Во все выбранные отслеживаемые файлы и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.', + one: + 'В выбранный отслеживаемый файл и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.', ); return '$_temp0'; } @@ -2459,10 +2485,10 @@ class AppLocalizationsRu extends AppLocalizations { } @override - String get gitProjectHistory => 'Проект'; + String get gitProjectHistory => 'История проекта'; @override - String get gitFileHistory => 'Текущий файл'; + String get gitFileHistory => 'История файла'; @override String get gitFileHistoryRequiresOpenFile => @@ -2829,7 +2855,13 @@ class AppLocalizationsRu extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return 'Файл $fileName экспортирован. Не удалось добавить изображений: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count предупреждениями', + one: '1 предупреждением', + ); + return '$fileName экспортирован с $_temp0.'; } @override @@ -3247,7 +3279,7 @@ class AppLocalizationsRu extends AppLocalizations { String get aiDisabled => 'Отключено'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'Редактирование с помощью ИИ запускается только явно. BusyMark отправляет выбранному поставщику только показанный контекст и никогда не применяет предложение без проверки.'; @override diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 10119a62..ed504f2f 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -67,7 +67,7 @@ class AppLocalizationsTr extends AppLocalizations { String get feedbackMessage => 'Ayrıntılı mesaj'; @override - String get feedbackReplyEmail => 'E-postayı yanıtla (isteğe bağlı)'; + String get feedbackReplyEmail => 'Yanıt e-postası adresi (isteğe bağlı)'; @override String get feedbackIncludeTechnicalDetails => 'Teknik ayrıntıları ekleyin'; @@ -273,7 +273,7 @@ class AppLocalizationsTr extends AppLocalizations { String get removeFromRecent => 'Son kullanılanlardan kaldır'; @override - String get recent => 'Son'; + String get recent => 'Son öğeler'; @override String get redo => 'Yinele'; @@ -324,7 +324,7 @@ class AppLocalizationsTr extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -432,7 +432,7 @@ class AppLocalizationsTr extends AppLocalizations { String get shortcutGroupGeneral => 'Genel'; @override - String get shortcutNewDocument => 'Yeni belge'; + String get shortcutNewDocument => 'Oluştur'; @override String get shortcutNewDocumentDescription => @@ -501,7 +501,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get shortcutPastePlainTextDescription => - 'Pano metnini biçimlendirmeden yapıştırma'; + 'Panodan biçimlendirme olmadan yapıştır'; @override String get shortcutUndoDescription => 'Son düzenlemeyi geri al'; @@ -701,14 +701,14 @@ class AppLocalizationsTr extends AppLocalizations { String get clearRecentWorkspaces => 'Son çalışma alanlarını temizle'; @override - String get editingButtonsPosition => 'Düğmelerin konumunu düzenleme'; + String get editingButtonsPosition => 'Düzenleme düğmelerinin konumu'; @override String get editingButtonsPositionDescription => 'Kayan WYSIWYG düzenleme düğmelerinin nerede görüneceğini seçin.'; @override - String get editingButtonsDirection => 'Düğmelerin yönünü düzenleme'; + String get editingButtonsDirection => 'Düzenleme düğmelerinin yönü'; @override String get editingButtonsDirectionDescription => @@ -786,10 +786,10 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get closeUnsavedChangesCancel => 'İptal etmek'; + String get closeUnsavedChangesCancel => 'İptal'; @override - String get closeUnsavedChangesDiscard => 'At'; + String get closeUnsavedChangesDiscard => 'Değişiklikleri yok say'; @override String get closeUnsavedChangesSave => 'Kaydet'; @@ -838,7 +838,7 @@ class AppLocalizationsTr extends AppLocalizations { String get taskList => 'Görev listesi'; @override - String get toggleTaskChecked => 'Görevi değiştir işaretlendi'; + String get toggleTaskChecked => 'Görevi işaretle veya işaretini kaldır'; @override String get indentListItem => 'Liste öğesine girinti ekle'; @@ -1172,7 +1172,7 @@ class AppLocalizationsTr extends AppLocalizations { String get tocRoot => 'TOC kökünde'; @override - String get afterSelectedTopic => 'Konu seçildikten sonra'; + String get afterSelectedTopic => 'Seçili konunun ardından'; @override String get insideSelectedTopic => 'Seçilen konunun içinde'; @@ -1285,7 +1285,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get updateUsagesAutomaticallyDescription => - 'İçindekiler referanslarını ve içeriklerini kaldırın ve bağlantı metnini koruyun.'; + 'TOC başvurularını ve include öğelerini kaldırın, bağlantı metnini koruyun.'; @override String get manualUsageUpdatesRequired => @@ -1413,7 +1413,7 @@ class AppLocalizationsTr extends AppLocalizations { String get sourceSearchNextMatch => 'Sonraki eşleşme'; @override - String get sourceSearchCaseSensitive => 'Harfe duyarlı'; + String get sourceSearchCaseSensitive => 'Büyük-küçük harf duyarlı'; @override String get sourceSearchWholeWord => 'Tam sözcük'; @@ -1425,7 +1425,7 @@ class AppLocalizationsTr extends AppLocalizations { String get sourceSearchReplacement => 'Şununla değiştir:'; @override - String get sourceSearchReplaceCurrent => 'Geçerli olanı değiştir'; + String get sourceSearchReplaceCurrent => 'Mevcut eşleşmeyi değiştir'; @override String get sourceSearchReplaceAndFindNext => 'Değiştir ve sonrakini bul'; @@ -1531,7 +1531,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String recoveredDocumentReview(String fileName) { - return '$fileName için kaydedilmemiş içerik kurtarıldı. İnceleyin, ardından kaydedin, farklı kaydedin veya atın.'; + return '$fileName için kurtarılan kaydedilmemiş içerik. İnceleyin, sonra kaydedin, farklı kaydedin veya vazgeçin.'; } @override @@ -1605,7 +1605,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String anchorNotFound(String anchor) { - return 'Bağlantı bulunamadı: $anchor'; + return 'Bağlantı noktası bulunamadı: $anchor'; } @override @@ -2004,7 +2004,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get diagnosticWritersideTreeMissingStartPage => - 'Kitaplık olmayan instance\'ın başlangıç sayfası eksik.'; + 'Kütüphane olmayan örnek start-page içermiyor.'; @override String diagnosticWritersideStartPageMissing(String startPage) { @@ -2164,11 +2164,12 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get diagnosticWritersideIncludeMissingFrom => ' öğesi eksik.'; + String get diagnosticWritersideIncludeMissingFrom => + ' öğesinde from niteliği eksik.'; @override String diagnosticWritersideIncludeSourceMissing(String from) { - return 'Kaynak ekle \"$from\" mevcut değil.'; + return 'Include kaynağı \"$from\" mevcut değil.'; } @override @@ -2181,7 +2182,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String diagnosticWritersideCategoryUnresolved(String ref) { - return 'Ayrıca bkz. \"$ref\" kategorisi bildirilmedi.'; + return 'seealso kategorisi \"$ref\" bildirilmemiş.'; } @override @@ -2281,7 +2282,7 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get gitClean => 'Temiz'; + String get gitClean => 'Değişiklik yok'; @override String get gitConflicts => 'Çatışmalar'; @@ -2338,7 +2339,7 @@ class AppLocalizationsTr extends AppLocalizations { String get gitCommitMessage => 'Commit mesajı'; @override - String get gitCommitSelectedFiles => 'Seçili dosyaları commit et'; + String get gitCommitSelectedFiles => 'Seçili dosyalar'; @override String get gitCommitNoSelectedFiles => @@ -2595,7 +2596,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get gitErrorDirtyWorkspace => - 'Dal değiştirmeden önce BusyMark düzenleyici değişikliklerini kaydedin veya yok sayın.'; + 'Dal değiştirmeden önce BusyMark düzenleyici değişikliklerini kaydedin veya göz ardı edin.'; @override String get gitErrorResetDirtyWorkspace => @@ -2820,7 +2821,13 @@ class AppLocalizationsTr extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return '$fileName, $count uyarı(lar)ıyla birlikte dışa aktarıldı.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count uyarıyla', + one: '1 uyarıyla', + ); + return '$fileName, $_temp0 birlikte dışa aktarıldı.'; } @override @@ -2881,10 +2888,10 @@ class AppLocalizationsTr extends AppLocalizations { String get visualizationTags => 'Etiketler'; @override - String get visualizationNoOperations => 'Eşleştirme işlemi yok'; + String get visualizationNoOperations => 'Eşleşen işlem bulunamadı'; @override - String get visualizationSearchOperations => 'Arama işlemleri'; + String get visualizationSearchOperations => 'İşlemleri ara'; @override String get visualizationRenderFailed => 'Bu görselleştirme oluşturulamadı.'; @@ -3115,7 +3122,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String diagnosticWritersideTreeInvalidStatus(String status) { - return 'Bilinmeyen instance durumu \"$status\". release, eap veya deprecated kullanın.'; + return 'Bilinmeyen örnek durumu \"$status\". Release, eap veya deprecated kullanın.'; } @override @@ -3132,7 +3139,7 @@ class AppLocalizationsTr extends AppLocalizations { String name, String value, ) { - return '$name değeri “$value” doğru veya yanlış olmalıdır.'; + return '$name değeri “$value” true veya false olmalıdır.'; } @override @@ -3141,7 +3148,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get diagnosticWritersideTreeInvalidInclude => - 'Bir ağaç hem from hem de element kimliğini belirtmelidir.'; + 'Bir ağaç , hem from hem de element-id belirtmelidir.'; @override String get diagnosticWritersideTreeMissingSnippetId => @@ -3179,7 +3186,7 @@ class AppLocalizationsTr extends AppLocalizations { String id, String origin, ) { - return 'TOC şunları içerir: “$source#$id”, “$origin” harici modülüne aittir ve bu çalışma alanında genişletilemez.'; + return 'TOC include “$source#$id”, harici “$origin” modülüne aittir ve bu çalışma alanında genişletilemez.'; } @override @@ -3214,7 +3221,7 @@ class AppLocalizationsTr extends AppLocalizations { } @override - String get download => 'İndirmek'; + String get download => 'İndir'; @override String get exportWritersideAsPdf => 'Writerside\'ı PDF olarak dışa aktar'; @@ -3238,8 +3245,8 @@ class AppLocalizationsTr extends AppLocalizations { String get aiDisabled => 'Devre dışı'; @override - String get aiLocalOnlyDescription => - 'AI düzenlemesi yalnızca yereldir. BusyMark yalnızca seçili sağlayıcıya gösterilen bağlamı gönderir ve hiçbir öneriyi incelemeden uygulamaz.'; + String get aiExplicitEditingDescription => + 'AI düzenleme açıkça kullanıcının isteğiyle başlatılır. BusyMark yalnızca seçili sağlayıcı için gösterilen bağlamı gönderir ve bir öneriyi hiçbiri onaylama olmadan uygulamaz.'; @override String get aiProvider => 'AI sağlayıcısı'; @@ -3337,7 +3344,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String aiContextDisclosure(int count) { - return 'Seçilen sağlayıcı, görüntülenen bağlamdan $count karakterlerini alacaktır.'; + return 'Seçilen sağlayıcı $count karakterlik gösterilen bağlam alacaktır.'; } @override diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart index 44aa0bb4..3cab83aa 100644 --- a/lib/l10n/generated/app_localizations_uk.dart +++ b/lib/l10n/generated/app_localizations_uk.dart @@ -323,7 +323,7 @@ class AppLocalizationsUk extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -816,7 +816,15 @@ class AppLocalizationsUk extends AppLocalizations { @override String unsavedChangesMultipleMessage(int count) { - return 'У документах ($count) є незбережені зміни. Зберегти їх перед продовженням?'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count документів мають незбережені зміни. Збережіть кожен перед продовженням.', + one: + '1 документ має незбережені зміни. Збережіть його перед продовженням.', + ); + return '$_temp0'; } @override @@ -1441,7 +1449,7 @@ class AppLocalizationsUk extends AppLocalizations { String get sourceSearchReplacement => 'Замінити на'; @override - String get sourceSearchReplaceCurrent => 'Замінити поточне'; + String get sourceSearchReplaceCurrent => 'Замінити поточний збіг'; @override String get sourceSearchReplaceAndFindNext => 'Замінити й знайти наступне'; @@ -1708,12 +1716,28 @@ class AppLocalizationsUk extends AppLocalizations { @override String workspaceRecoveryRestored(int count) { - return 'Відновлено незбережених документів: $count. Перегляньте кожен відновлений документ перед продовженням.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + 'Відновлено $count незбережених документів. Перегляньте кожен перед збереженням або відхиленням.', + one: + 'Відновлено 1 незбережений документ. Перегляньте його перед збереженням або відхиленням.', + ); + return '$_temp0'; } @override String workspaceRecoveryDamaged(int count) { - return 'Не вдалося відновити пошкоджені записи ($count). Коректні відновлені документи залишаються доступними.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: + '$count пошкоджених записів відновлення не вдалося відновити. Дійсні записи відновлення залишаються доступними.', + one: + 'Не вдалося відновити 1 пошкоджений запис відновлення. Оригінальний файл відновлення збережено для перегляду.', + ); + return '$_temp0'; } @override @@ -2355,8 +2379,10 @@ class AppLocalizationsUk extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count індексованих файлів', - one: '1 індексований файл', + other: '$count проіндексованих файлів', + many: '$count проіндексованих файлів', + few: '$count проіндексовані файли', + one: '1 проіндексований файл', ); return '$_temp0'; } @@ -2412,10 +2438,10 @@ class AppLocalizationsUk extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Вибрані відстежувані файли буде відновлено з Git.', - many: 'Вибрані відстежувані файли буде відновлено з Git.', - few: 'Вибрані відстежувані файли буде відновлено з Git.', - one: 'Вибраний відстежуваний файл буде відновлено з Git.', + other: + 'Усі індексовані та неіндексовані зміни в обраних файлах з відстеженням будуть відновлені в HEAD.', + one: + 'Усі індексовані та неіндексовані зміни у вибраному файлі з відстеженням будуть відновлені в HEAD.', ); return '$_temp0'; } @@ -2468,10 +2494,10 @@ class AppLocalizationsUk extends AppLocalizations { } @override - String get gitProjectHistory => 'Проєкт'; + String get gitProjectHistory => 'Історія проєкту'; @override - String get gitFileHistory => 'Поточний файл'; + String get gitFileHistory => 'Історія файлу'; @override String get gitFileHistoryRequiresOpenFile => @@ -2835,7 +2861,13 @@ class AppLocalizationsUk extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return 'Файл $fileName експортовано. Не вдалося додати зображень: $count.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count попередженнями', + one: '1 попередженням', + ); + return '$fileName експортовано з $_temp0.'; } @override @@ -3255,7 +3287,7 @@ class AppLocalizationsUk extends AppLocalizations { String get aiDisabled => 'Вимкнено'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'Редагування за допомогою ШІ запускається лише явно. BusyMark надсилає вибраному постачальнику тільки показаний контекст і ніколи не застосовує пропозицію без перевірки.'; @override diff --git a/lib/l10n/generated/app_localizations_vi.dart b/lib/l10n/generated/app_localizations_vi.dart index e3198281..019f2e2f 100644 --- a/lib/l10n/generated/app_localizations_vi.dart +++ b/lib/l10n/generated/app_localizations_vi.dart @@ -67,7 +67,7 @@ class AppLocalizationsVi extends AppLocalizations { String get feedbackMessage => 'Nội dung chi tiết'; @override - String get feedbackReplyEmail => 'Email nhận phản hồi (tùy chọn)'; + String get feedbackReplyEmail => 'Email để trả lời (tùy chọn)'; @override String get feedbackIncludeTechnicalDetails => 'Bao gồm thông tin kỹ thuật'; @@ -322,7 +322,7 @@ class AppLocalizationsVi extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -385,7 +385,7 @@ class AppLocalizationsVi extends AppLocalizations { String get validate => 'Kiểm tra'; @override - String get validation => 'Xác thực'; + String get validation => 'Xác minh'; @override String get viewMode => 'Chế độ xem'; @@ -640,10 +640,10 @@ class AppLocalizationsVi extends AppLocalizations { String get directoryName => 'Tên thư mục'; @override - String get instanceName => 'Tên phiên bản'; + String get instanceName => 'Tên thực thể'; @override - String get instanceId => 'ID phiên bản'; + String get instanceId => 'ID thực thể'; @override String get startTopicTitle => 'Tiêu đề chủ đề bắt đầu'; @@ -1201,7 +1201,7 @@ class AppLocalizationsVi extends AppLocalizations { String get removeTocElement => 'Xóa phần tử mục lục'; @override - String get reviewUsages => 'Xem lại cách sử dụng'; + String get reviewUsages => 'Xem lại các tham chiếu'; @override String get deleteTopicFile => 'Xóa tệp chủ đề'; @@ -1211,7 +1211,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String topicRemovalSummary(String topic) { - return 'Xóa “$topic” khỏi phiên bản đã chọn. Tệp chủ đề sẽ được giữ lại.'; + return 'Xóa “$topic” khỏi thực thể đã chọn. Tệp chủ đề sẽ được giữ lại.'; } @override @@ -1232,11 +1232,11 @@ class AppLocalizationsVi extends AppLocalizations { @override String get topicIsStartPageRemovalWarning => - 'Chủ đề này đang được dùng làm trang bắt đầu của một phiên bản. Hãy xem lại cách sử dụng và chỉ định trang bắt đầu khác trước khi tiếp tục.'; + 'Chủ đề này đang được dùng làm trang bắt đầu của một thực thể. Hãy xem lại cách sử dụng và chỉ định trang bắt đầu khác trước khi tiếp tục.'; @override String topicUsagesCount(int count) { - return 'Cách sử dụng ($count)'; + return 'Các tham chiếu ($count)'; } @override @@ -1257,7 +1257,7 @@ class AppLocalizationsVi extends AppLocalizations { String get topicUsageTopicLinks => 'Liên kết chủ đề'; @override - String get topicUsageIncludes => 'Nội dung bao gồm'; + String get topicUsageIncludes => 'Các phần tử include'; @override String usageCount(int count) { @@ -1307,7 +1307,7 @@ class AppLocalizationsVi extends AppLocalizations { String get noUsagesFound => 'Không tìm thấy cách sử dụng nào'; @override - String get outsideSelectedInstance => 'bên ngoài phiên bản đã chọn'; + String get outsideSelectedInstance => 'bên ngoài thực thể đã chọn'; @override String get doRefactor => 'Tái cấu trúc'; @@ -1320,7 +1320,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String orphanTopicMessage(String topic) { - return '“$topic” không còn được sử dụng ở đâu trong dự án Writerside này. Xóa tệp hoặc giữ lại để dùng trong phiên bản khác.'; + return '“$topic” không còn được sử dụng ở đâu trong dự án Writerside này. Xóa tệp hoặc giữ lại để dùng trong thực thể khác.'; } @override @@ -1780,7 +1780,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String get errorInstanceIdInvalid => - 'ID phiên bản phải bắt đầu bằng chữ thường và chỉ gồm chữ thường, chữ số, dấu gạch dưới và dấu gạch nối.'; + 'ID thực thể phải bắt đầu bằng chữ thường và chỉ gồm chữ thường, chữ số, dấu gạch dưới và dấu gạch nối.'; @override String get errorTopicFileInvalid => @@ -1800,7 +1800,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String get errorWritersideInstanceTreeMissing => - 'Mô-đun Writerside không có cây phiên bản.'; + 'Mô-đun Writerside không có cây thực thể.'; @override String errorWritersideTreeFileMissing(String path) { @@ -1982,18 +1982,18 @@ class AppLocalizationsVi extends AppLocalizations { @override String get diagnosticWritersideConfigMissingInstance => - 'writerside.cfg không đăng ký phiên bản nào.'; + 'writerside.cfg không đăng ký thực thể nào.'; @override String get diagnosticWritersideTreeInvalidRoot => 'Gốc .tree phải là .'; @override - String get diagnosticWritersideTreeMissingId => 'Hồ sơ phiên bản thiếu id.'; + String get diagnosticWritersideTreeMissingId => 'Hồ sơ thực thể thiếu id.'; @override String diagnosticWritersideTreeIdMismatch(String id) { - return 'Tên gốc của tệp cây không khớp với ID phiên bản \"$id\".'; + return 'Tên gốc của tệp cây không khớp với ID thực thể \"$id\".'; } @override @@ -2007,7 +2007,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String diagnosticWritersideTreeDuplicateTopic(String topic) { - return 'Chủ đề \"$topic\" xuất hiện nhiều hơn một lần trong mục lục của phiên bản này.'; + return 'Chủ đề \"$topic\" xuất hiện nhiều hơn một lần trong mục lục của thực thể này.'; } @override @@ -2092,12 +2092,12 @@ class AppLocalizationsVi extends AppLocalizations { String diagnosticWritersideConfigMissingInstanceGroupsFile( String relativePath, ) { - return 'Tệp nhóm phiên bản đã định không tồn tại: $relativePath'; + return 'Tệp nhóm thực thể đã định không tồn tại: $relativePath'; } @override String diagnosticWritersideConfigMissingInstanceTree(String source) { - return 'Cây phiên bản đã đăng ký \"$source\" không tồn tại.'; + return 'Cây thực thể đã đăng ký \"$source\" không tồn tại.'; } @override @@ -2273,7 +2273,7 @@ class AppLocalizationsVi extends AppLocalizations { } @override - String get gitClean => 'Sạch'; + String get gitClean => 'Không có thay đổi'; @override String get gitConflicts => 'Xung đột'; @@ -2585,7 +2585,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String get gitErrorMultipleRemotes => - 'Có nhiều remote được cấu hình. Hãy chọn upstream bên ngoài phiên bản BusyMark này.'; + 'Có nhiều remote được cấu hình. Hãy chọn upstream bên ngoài thực thể BusyMark này.'; @override String get gitErrorDirtyWorkspace => @@ -2605,7 +2605,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String get gitErrorDiverged => - 'Nhánh đã phân kỳ. Hãy giải quyết thao tác merge hoặc rebase bên ngoài phiên bản BusyMark này.'; + 'Nhánh đã phân kỳ. Hãy giải quyết thao tác merge hoặc rebase bên ngoài thực thể BusyMark này.'; @override String get gitErrorAuthorIdentity => @@ -2701,7 +2701,7 @@ class AppLocalizationsVi extends AppLocalizations { String get markdownHtmlHtmlTextBlocks => 'Khối văn bản'; @override - String get markdownHtmlHtmlFigures => 'Hình và hình ảnh'; + String get markdownHtmlHtmlFigures => 'Figure và hình ảnh'; @override String get markdownHtmlHtmlPreformatted => 'Mã định dạng sẵn'; @@ -2816,7 +2816,13 @@ class AppLocalizationsVi extends AppLocalizations { @override String pdfExportedWithWarnings(String fileName, int count) { - return 'Đã xuất $fileName với $count cảnh báo.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count cảnh báo', + one: '1 cảnh báo', + ); + return 'Đã xuất $fileName với $_temp0.'; } @override @@ -2899,22 +2905,22 @@ class AppLocalizationsVi extends AppLocalizations { 'Xuất tài liệu hiện tại hoặc mô-đun Writerside dưới dạng PDF.'; @override - String get instances => 'Các phiên bản'; + String get instances => 'Các thực thể'; @override - String get newInstance => 'Phiên bản mới'; + String get newInstance => 'Thực thể mới'; @override String get newTocLibrary => 'Thư viện mục lục mới'; @override - String get editInstance => 'Chỉnh sửa phiên bản'; + String get editInstance => 'Chỉnh sửa thực thể'; @override String get openTocFile => 'Mở tệp mục lục'; @override - String get createInstance => 'Tạo phiên bản'; + String get createInstance => 'Tạo thực thể'; @override String get createTocLibrary => 'Tạo thư viện mục lục'; @@ -3011,7 +3017,7 @@ class AppLocalizationsVi extends AppLocalizations { 'Sao chép hình ảnh và video cục bộ được các tệp đã chọn tham chiếu, đồng thời giữ nguyên đường dẫn tương đối.'; @override - String get instanceIdRenameWarningTitle => 'Đổi tên ID phiên bản?'; + String get instanceIdRenameWarningTitle => 'Đổi tên ID thực thể?'; @override String instanceIdRenameWarning(String oldId, String newId) { @@ -3053,16 +3059,16 @@ class AppLocalizationsVi extends AppLocalizations { String get instanceColorYellow => 'Vàng'; @override - String get errorWritersideInstanceNameRequired => 'Nhập tên phiên bản.'; + String get errorWritersideInstanceNameRequired => 'Nhập tên thực thể.'; @override String errorWritersideInstanceIdExists(String id) { - return 'Đã có phiên bản với ID “$id”.'; + return 'Đã có thực thể với ID “$id”.'; } @override String errorWritersideInstanceTreeExists(String path) { - return 'Cây phiên bản đã tồn tại: $path'; + return 'Cây thực thể đã tồn tại: $path'; } @override @@ -3086,11 +3092,11 @@ class AppLocalizationsVi extends AppLocalizations { @override String get errorWritersideInstanceFilesChanged => - 'Các tệp phiên bản đã thay đổi trên đĩa. Hãy xem lại và thử lại.'; + 'Các tệp thực thể đã thay đổi trên đĩa. Hãy xem lại và thử lại.'; @override String errorWritersideInstanceRollbackFailed(String paths) { - return 'BusyMark không thể khôi phục hoàn toàn thay đổi phiên bản. Hãy xem lại các tệp này trước khi tiếp tục: $paths'; + return 'BusyMark không thể khôi phục hoàn toàn thay đổi của thực thể. Hãy xem lại các tệp này trước khi tiếp tục: $paths'; } @override @@ -3103,20 +3109,20 @@ class AppLocalizationsVi extends AppLocalizations { @override String get errorWritersideInstanceConfigurationInvalid => - 'Cấu hình phiên bản Writerside không hợp lệ. Hãy sửa các chẩn đoán rồi thử lại.'; + 'Cấu hình thực thể Writerside không hợp lệ. Hãy sửa các chẩn đoán rồi thử lại.'; @override String get errorWritersideInstanceTemporaryFile => - 'BusyMark không thể đưa các thay đổi phiên bản vào stage một cách an toàn.'; + 'BusyMark không thể đưa các thay đổi của thực thể vào stage một cách an toàn.'; @override String diagnosticWritersideTreeInvalidStatus(String status) { - return 'Trạng thái phiên bản không xác định “$status”. Sử dụng release, eap hoặc deprecated.'; + return 'Trạng thái thực thể không xác định “$status”. Sử dụng release, eap hoặc deprecated.'; } @override String diagnosticWritersideDuplicateInstanceId(String id) { - return 'ID phiên bản “$id” được nhiều tệp cây sử dụng.'; + return 'ID thực thể “$id” được nhiều tệp cây sử dụng.'; } @override @@ -3133,7 +3139,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String get diagnosticWritersideBuildProfileMissingInstance => - 'Phần tử phải chỉ định ID phiên bản.'; + 'Phần tử phải chỉ định ID thực thể.'; @override String get diagnosticWritersideTreeInvalidInclude => @@ -3145,7 +3151,7 @@ class AppLocalizationsVi extends AppLocalizations { @override String get diagnosticWritersideTreeInvalidCrossInstanceReference => - 'Tham chiếu mục lục giữa các phiên bản phải chỉ định cả ref và in.'; + 'Tham chiếu mục lục giữa các thực thể phải chỉ định cả ref và in.'; @override String get diagnosticWritersideTreeConflictingTargets => @@ -3158,15 +3164,15 @@ class AppLocalizationsVi extends AppLocalizations { @override String get diagnosticWritersideInstanceGroupsInvalidRoot => - 'Tệp nhóm phiên bản phải có phần tử gốc .'; + 'Tệp nhóm thực thể phải có phần tử gốc .'; @override String get diagnosticWritersideInstanceGroupInvalid => - 'Một nhóm phiên bản phải chỉ định id không trống và danh sách phiên bản.'; + 'Một nhóm thực thể phải chỉ định id không trống và danh sách thực thể.'; @override String diagnosticWritersideInstanceGroupDuplicateId(String id) { - return 'ID nhóm phiên bản “$id” được khai báo nhiều hơn một lần.'; + return 'ID nhóm thực thể “$id” được khai báo nhiều hơn một lần.'; } @override @@ -3193,12 +3199,12 @@ class AppLocalizationsVi extends AppLocalizations { @override String diagnosticWritersideUnknownInstanceGroup(String group) { - return 'Điều kiện phiên bản tham chiếu đến nhóm không xác định “@$group”.'; + return 'Điều kiện thực thể tham chiếu đến nhóm không xác định “@$group”.'; } @override String diagnosticWritersideReferenceInstanceMissing(String instance) { - return 'Tham chiếu giữa các phiên bản nhắm đến phiên bản không xác định “$instance”.'; + return 'Tham chiếu giữa các thực thể nhắm đến thực thể không xác định “$instance”.'; } @override @@ -3206,7 +3212,7 @@ class AppLocalizationsVi extends AppLocalizations { String topic, String instance, ) { - return 'Chủ đề “$topic” không nằm trong phiên bản được tham chiếu “$instance”.'; + return 'Chủ đề “$topic” không nằm trong thực thể được tham chiếu “$instance”.'; } @override @@ -3234,7 +3240,7 @@ class AppLocalizationsVi extends AppLocalizations { String get aiDisabled => 'Đã tắt'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'Chỉnh sửa bằng AI chỉ được thực hiện theo yêu cầu rõ ràng. BusyMark chỉ gửi ngữ cảnh được hiển thị cho nhà cung cấp đã chọn và không bao giờ áp dụng đề xuất khi chưa xem lại.'; @override diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index 2448ac7e..ff2b4549 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -14,288 +14,297 @@ class AppLocalizationsZh extends AppLocalizations { String get appTitle => 'BusyMark'; @override - String get appSubtitle => 'Markdown 文件和兼容 Writerside 的文档项目编辑器。'; + String get appSubtitle => + 'Editor for Markdown files and Writerside-compatible documentation projects.'; @override - String get aboutBusyMark => '关于 BusyMark'; + String get aboutBusyMark => 'About BusyMark'; @override - String get aboutTagline => 'Markdown 和 Writerside 编辑器'; + String get aboutTagline => 'Markdown and Writerside Editor'; @override - String get aboutLicenseLabel => '许可证'; + String get aboutLicenseLabel => 'License'; @override String get aboutLicenseName => 'Apache License 2.0'; @override - String get aboutWebsite => '网站'; + String get aboutWebsite => 'Website'; @override - String get aboutSourceCode => '源代码'; + String get aboutSourceCode => 'Source code'; @override - String get reportIssue => '报告问题'; + String get reportIssue => 'Report an issue'; @override - String get feedbackCategory => '类别'; + String get feedbackCategory => 'Category'; @override - String get feedbackChooseCategory => '选择类别'; + String get feedbackChooseCategory => 'Choose a category'; @override - String get feedbackCategoryProblem => '问题或错误'; + String get feedbackCategoryProblem => 'Problem or bug'; @override - String get feedbackCategoryFeature => '功能请求'; + String get feedbackCategoryFeature => 'Feature request'; @override - String get feedbackCategoryPrivacySecurity => '隐私或安全问题'; + String get feedbackCategoryPrivacySecurity => 'Privacy or security concern'; @override - String get feedbackCategoryUsability => '可用性问题'; + String get feedbackCategoryUsability => 'Usability concern'; @override - String get feedbackCategoryOther => '其他'; + String get feedbackCategoryOther => 'Other'; @override - String get feedbackSubject => '主题'; + String get feedbackSubject => 'Subject'; @override - String get feedbackMessage => '详细信息'; + String get feedbackMessage => 'Detailed message'; @override - String get feedbackReplyEmail => '回复邮箱(可选)'; + String get feedbackReplyEmail => 'Email address for replies (optional)'; @override - String get feedbackIncludeTechnicalDetails => '包含技术详细信息'; + String get feedbackIncludeTechnicalDetails => 'Include technical details'; @override String get feedbackTechnicalDetailsDisclosure => - '启用后,此选项仅会添加您的 Linux 操作系统版本和 BusyMark 应用语言。不会附加日志、文件、账户数据或其他诊断信息。'; + 'When enabled, this adds only your Linux operating-system version and BusyMark application locale. No logs, files, account data, or other diagnostics are attached.'; @override - String get feedbackSubmit => '提交'; + String get feedbackSubmit => 'Submit'; @override - String get feedbackSubmitting => '正在提交…'; + String get feedbackSubmitting => 'Submitting…'; @override - String get feedbackCategoryRequired => '请选择类别。'; + String get feedbackCategoryRequired => 'Choose a category.'; @override - String get feedbackSubjectLength => '主题必须包含 3 到 120 个字符。'; + String get feedbackSubjectLength => + 'Subject must be between 3 and 120 characters.'; @override - String get feedbackMessageLength => '信息必须包含 10 到 5,000 个字符。'; + String get feedbackMessageLength => + 'Message must be between 10 and 5,000 characters.'; @override - String get feedbackReplyEmailInvalid => '请输入有效的邮箱地址,或将此字段留空。'; + String get feedbackReplyEmailInvalid => + 'Enter a valid email address or leave this field empty.'; @override - String get feedbackConnectionFailure => 'BusyMark 无法连接。请检查网络连接后重试。'; + String get feedbackConnectionFailure => + 'BusyMark could not connect. Check your internet connection and try again.'; @override - String get feedbackTimeoutFailure => '请求超时。请重试。'; + String get feedbackTimeoutFailure => 'The request timed out. Try again.'; @override - String get feedbackRateLimitedFailure => '此连接发送的报告过多。请稍候再试。'; + String get feedbackRateLimitedFailure => + 'Too many reports were sent from this connection. Wait and try again.'; @override - String get feedbackRejectedFailure => '服务器拒绝了此报告。请检查表单字段后重试。'; + String get feedbackRejectedFailure => + 'The server rejected this report. Check the form fields and try again.'; @override - String get feedbackServerFailure => '服务器无法接收此报告。请稍后重试。'; + String get feedbackServerFailure => + 'The server could not accept the report. Try again later.'; @override String feedbackSuccess(String id) { - return '反馈已发送。参考 ID:$id'; + return 'Feedback sent. Reference ID: $id'; } @override - String get advanced => '高级'; + String get advanced => 'Advanced'; @override - String get addToGit => '添加到 Git'; + String get addToGit => 'Add to Git'; @override - String get appearance => '外观'; + String get appearance => 'Appearance'; @override - String get apply => '应用'; + String get apply => 'Apply'; @override - String get back => '返回'; + String get back => 'Back'; @override - String get bottomLeft => '左下'; + String get bottomLeft => 'Bottom left'; @override - String get bottomRight => '右下'; + String get bottomRight => 'Bottom right'; @override - String get cancel => '取消'; + String get cancel => 'Cancel'; @override - String get choose => '选择'; + String get choose => 'Choose'; @override - String get chooseLocation => '选择位置'; + String get chooseLocation => 'Choose location'; @override - String get copy => '复制'; + String get copy => 'Copy'; @override - String get copyName => '复制名称'; + String get copyName => 'Copy name'; @override - String get copyFileName => '复制文件名'; + String get copyFileName => 'Copy file name'; @override - String get copyPath => '复制路径'; + String get copyPath => 'Copy path'; @override - String get create => '创建'; + String get create => 'Create'; @override - String get creating => '正在创建…'; + String get creating => 'Creating...'; @override - String get cut => '剪切'; + String get cut => 'Cut'; @override - String get promoteSection => '提升节级别'; + String get promoteSection => 'Promote section'; @override - String get demoteSection => '降低节级别'; + String get demoteSection => 'Demote section'; @override - String get moveSectionUp => '上移节'; + String get moveSectionUp => 'Move section up'; @override - String get moveSectionDown => '下移节'; + String get moveSectionDown => 'Move section down'; @override - String get confirmDeleteSectionTitle => '删除此节?'; + String get confirmDeleteSectionTitle => 'Delete section?'; @override String confirmDeleteSectionMessage(String name) { - return '删除“$name”及其节中的全部内容?此操作无法撤销。'; + return 'Delete “$name” and all content in its section? This cannot be undone.'; } @override - String get darkTheme => '深色'; + String get darkTheme => 'Dark'; @override - String get delete => '删除'; + String get delete => 'Delete'; @override - String get discard => '放弃'; + String get discard => 'Discard'; @override - String get editor => '编辑器'; + String get editor => 'Editor'; @override - String get file => '文件'; + String get file => 'File'; @override - String get fileHistory => '文件历史记录'; + String get fileHistory => 'File History'; @override - String get folder => '文件夹'; + String get folder => 'Folder'; @override - String get insert => '插入'; + String get insert => 'Insert'; @override - String get keyboardShortcuts => '键盘快捷键'; + String get keyboardShortcuts => 'Keyboard Shortcuts'; @override - String get commandPalette => '命令面板'; + String get commandPalette => 'Command Palette'; @override - String get commandPaletteHint => '输入命令'; + String get commandPaletteHint => 'Type a command'; @override - String get commandPaletteEmpty => '没有匹配的命令'; + String get commandPaletteEmpty => 'No matching commands'; @override - String get commandUnavailableInContext => '当前编辑器上下文中无法使用此命令'; + String get commandUnavailableInContext => + 'Unavailable in the current editor context'; @override - String get lightTheme => '浅色'; + String get lightTheme => 'Light'; @override - String get mainMenu => '主菜单'; + String get mainMenu => 'Main menu'; @override - String get fullScreen => '全屏'; + String get fullScreen => 'Full Screen'; @override String get markdown => 'Markdown'; @override - String get open => '打开'; + String get open => 'Open'; @override - String get openInFiles => '在文件中打开'; + String get openInFiles => 'Open in Files'; @override - String get pathActions => '路径操作'; + String get pathActions => 'Path actions'; @override - String get outline => '大纲'; + String get outline => 'Outline'; @override - String get overwrite => '覆盖'; + String get overwrite => 'Overwrite'; @override - String get paste => '粘贴'; + String get paste => 'Paste'; @override - String get pasteWithoutFormatting => '粘贴为无格式文本'; + String get pasteWithoutFormatting => 'Paste without formatting'; @override - String get reading => '阅读'; + String get reading => 'Reading'; @override - String get removeFromRecent => '从最近使用记录中移除'; + String get removeFromRecent => 'Remove from Recent'; @override - String get recent => '最近使用'; + String get recent => 'Recent'; @override - String get redo => '重做'; + String get redo => 'Redo'; @override - String get save => '保存'; + String get save => 'Save'; @override - String get search => '搜索'; + String get search => 'Search'; @override - String get selectAll => '全选'; + String get selectAll => 'Select all'; @override - String get settings => '设置'; + String get settings => 'Settings'; @override - String get source => '源代码'; + String get source => 'Source'; @override - String get split => '拆分'; + String get split => 'Split'; @override - String get systemTheme => '系统'; + String get systemTheme => 'System'; @override - String get theme => '主题'; + String get theme => 'Theme'; @override - String get appLanguage => '语言'; + String get appLanguage => 'Language'; @override - String get systemLanguage => '系统'; + String get systemLanguage => 'System'; @override String get languageEnglish => 'English'; @@ -313,7 +322,7 @@ class AppLocalizationsZh extends AppLocalizations { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -361,28 +370,28 @@ class AppLocalizationsZh extends AppLocalizations { String get languageSimplifiedChinese => '简体中文'; @override - String get toggleSidebar => '侧边栏面板'; + String get toggleSidebar => 'Sidebar panel'; @override - String get topLeft => '左上'; + String get topLeft => 'Top left'; @override - String get topRight => '右上'; + String get topRight => 'Top right'; @override - String get undo => '撤销'; + String get undo => 'Undo'; @override - String get validate => '验证'; + String get validate => 'Validate'; @override - String get validation => '验证'; + String get validation => 'Validation'; @override - String get viewMode => '视图模式'; + String get viewMode => 'View mode'; @override - String get welcome => '欢迎'; + String get welcome => 'Welcome'; @override String get writerside => 'Writerside'; @@ -394,364 +403,400 @@ class AppLocalizationsZh extends AppLocalizations { String get fileTypeMarkdown => 'Markdown'; @override - String get fileTypeImages => '图像'; + String get fileTypeImages => 'Images'; @override - String get openMarkdownFile => '打开 Markdown 文件'; + String get openMarkdownFile => 'Open Markdown File'; @override - String get markdownFileExtensions => '.md 或 .markdown'; + String get markdownFileExtensions => '.md or .markdown'; @override - String get openFolderOrWritersideProject => '打开文件夹或 Writerside 项目'; + String get openFolderOrWritersideProject => + 'Open Folder or Writerside Project'; @override String get markdownFolderOrWritersideProject => - 'Markdown 文件夹或兼容 Writerside 的项目'; + 'Markdown folder or Writerside-compatible project'; @override - String get noOpenFile => '没有打开的文件'; + String get noOpenFile => 'No open file'; @override - String get shortcutDeleteTreeItemDescription => '删除选中的文件项,或从目录中移除选中的主题'; + String get shortcutDeleteTreeItemDescription => + 'Delete the selected Files item, or remove the selected topic from the table of contents'; @override - String get shortcutGroupGeneral => '常规'; + String get shortcutGroupGeneral => 'General'; @override - String get shortcutNewDocument => '创建'; + String get shortcutNewDocument => 'Create'; @override - String get shortcutNewDocumentDescription => '创建 Markdown 文件或 Writerside 项目'; + String get shortcutNewDocumentDescription => + 'Create a Markdown file or Writerside project'; @override - String get shortcutOpenDescription => '打开 Markdown 文件、文件夹或 Writerside 项目'; + String get shortcutOpenDescription => + 'Open a Markdown file, folder, or Writerside project'; @override - String get shortcutSaveDescription => '保存当前文档'; + String get shortcutSaveDescription => 'Save the current document'; @override - String get shortcutSearchDescription => '搜索当前工作区'; + String get shortcutSearchDescription => 'Search the current workspace'; @override - String get shortcutKeyboardShortcutsDescription => '显示此键盘快捷键参考'; + String get shortcutKeyboardShortcutsDescription => + 'Show this keyboard shortcut reference'; @override - String get shortcutMarkdownAndHtmlDescription => '打开 Markdown 和 HTML 参考'; + String get shortcutMarkdownAndHtmlDescription => + 'Open the Markdown and HTML reference'; @override - String get shortcutSettingsDescription => '打开 BusyMark 设置'; + String get shortcutSettingsDescription => 'Open BusyMark settings'; @override - String get shortcutNextTab => '下一个标签页'; + String get shortcutNextTab => 'Next tab'; @override - String get shortcutNextTabDescription => '移至下一个打开的标签页'; + String get shortcutNextTabDescription => 'Move to the next open tab'; @override - String get shortcutPreviousTab => '上一个标签页'; + String get shortcutPreviousTab => 'Previous tab'; @override - String get shortcutPreviousTabDescription => '移至上一个打开的标签页'; + String get shortcutPreviousTabDescription => 'Move to the previous open tab'; @override - String get shortcutCloseTab => '关闭标签页'; + String get shortcutCloseTab => 'Close tab'; @override - String get shortcutCloseTabDescription => '关闭当前标签页'; + String get shortcutCloseTabDescription => 'Close the active tab'; @override - String get shortcutCloseAllTabs => '关闭所有标签页'; + String get shortcutCloseAllTabs => 'Close all tabs'; @override - String get shortcutCloseAllTabsDescription => '关闭所有打开的标签页'; + String get shortcutCloseAllTabsDescription => 'Close all open tabs'; @override - String get shortcutGroupTextEditing => '文本编辑'; + String get shortcutGroupTextEditing => 'Text Editing'; @override - String get shortcutSelectAllDescription => '在源代码模式下选择全部文本;在编辑器模式下按两次以选择所有块'; + String get shortcutSelectAllDescription => + 'In Source mode, select all text; in Editor mode, press twice to select every block'; @override - String get shortcutCutDescription => '剪切选中的文本'; + String get shortcutCutDescription => 'Cut the selected text'; @override - String get shortcutCopyDescription => '复制选中的文本'; + String get shortcutCopyDescription => 'Copy the selected text'; @override - String get shortcutPasteDescription => '从剪贴板粘贴'; + String get shortcutPasteDescription => 'Paste from the clipboard'; @override - String get shortcutPastePlainTextDescription => '粘贴剪贴板中的无格式文本'; + String get shortcutPastePlainTextDescription => + 'Paste clipboard text without formatting'; @override - String get shortcutUndoDescription => '撤销上次编辑'; + String get shortcutUndoDescription => 'Undo the last edit'; @override - String get shortcutRedoDescription => '重做上次撤销的编辑'; + String get shortcutRedoDescription => 'Redo the last undone edit'; @override - String get shortcutInsertIndentation => '插入缩进'; + String get shortcutInsertIndentation => 'Insert indentation'; @override - String get shortcutInsertIndentationDescription => '在光标处插入缩进'; + String get shortcutInsertIndentationDescription => + 'Insert indentation at the cursor'; @override - String get shortcutOutdentSource => '减少源代码缩进'; + String get shortcutOutdentSource => 'Outdent source'; @override - String get shortcutOutdentSourceDescription => '在源代码模式下减少一级缩进'; + String get shortcutOutdentSourceDescription => + 'Remove one indentation level in Source mode'; @override - String get shortcutEscape => '关闭搜索或清除块选择'; + String get shortcutEscape => 'Close search or clear block selection'; @override - String get shortcutEscapeDescription => '关闭工作区搜索,或在编辑器模式下清除块选择'; + String get shortcutEscapeDescription => + 'Close workspace search or clear a block selection in Editor mode'; @override - String get shortcutGroupFormatting => '格式'; + String get shortcutGroupFormatting => 'Formatting'; @override - String get shortcutBoldDescription => '切换选中文本的粗体'; + String get shortcutBoldDescription => 'Toggle bold on the selected text'; @override - String get shortcutItalicDescription => '切换选中文本的斜体'; + String get shortcutItalicDescription => 'Toggle italic on the selected text'; @override - String get shortcutUnderlineDescription => '切换选中文本的下划线'; + String get shortcutUnderlineDescription => + 'Toggle underline on the selected text'; @override - String get shortcutLinkDescription => '插入或编辑链接'; + String get shortcutLinkDescription => 'Insert or edit a link'; @override - String get shortcutInlineCodeDescription => '切换选中文本的行内代码格式'; + String get shortcutInlineCodeDescription => + 'Toggle inline code on the selected text'; @override - String get shortcutStrikethroughDescription => '切换选中文本的删除线'; + String get shortcutStrikethroughDescription => + 'Toggle strikethrough on the selected text'; @override - String get shortcutGroupBlocks => '块'; + String get shortcutGroupBlocks => 'Blocks'; @override - String get shortcutParagraphDescription => '将当前块设为段落'; + String get shortcutParagraphDescription => + 'Set the current block to paragraph'; @override - String get shortcutHeading1Description => '将当前块设为标题 1'; + String get shortcutHeading1Description => + 'Set the current block to Heading 1'; @override - String get shortcutHeading2Description => '将当前块设为标题 2'; + String get shortcutHeading2Description => + 'Set the current block to Heading 2'; @override - String get shortcutHeading3Description => '将当前块设为标题 3'; + String get shortcutHeading3Description => + 'Set the current block to Heading 3'; @override - String get shortcutHeading4Description => '将当前块设为标题 4'; + String get shortcutHeading4Description => + 'Set the current block to Heading 4'; @override - String get shortcutHeading5Description => '将当前块设为标题 5'; + String get shortcutHeading5Description => + 'Set the current block to Heading 5'; @override - String get shortcutHeading6Description => '将当前块设为标题 6'; + String get shortcutHeading6Description => + 'Set the current block to Heading 6'; @override - String get shortcutGroupLists => '列表'; + String get shortcutGroupLists => 'Lists'; @override - String get numberedList => '编号列表'; + String get numberedList => 'Numbered list'; @override - String get shortcutNumberedListDescription => '切换编号列表格式'; + String get shortcutNumberedListDescription => + 'Toggle numbered list formatting'; @override - String get bulletedList => '项目符号列表'; + String get bulletedList => 'Bulleted list'; @override - String get shortcutBulletedListDescription => '切换项目符号列表格式'; + String get shortcutBulletedListDescription => + 'Toggle bulleted list formatting'; @override - String get checklist => '检查清单'; + String get checklist => 'Checklist'; @override - String get shortcutChecklistDescription => '切换检查清单格式'; + String get shortcutChecklistDescription => 'Toggle checklist formatting'; @override - String get shortcutGroupSidebar => '侧边栏'; + String get shortcutGroupSidebar => 'Sidebar'; @override - String get sidebarViewMenu => '侧边栏视图'; + String get sidebarViewMenu => 'Sidebar view'; @override - String get createMarkdownFile => '创建 Markdown 文件'; + String get createMarkdownFile => 'Create Markdown File'; @override - String get createMarkdownFileDescription => '开始创建未保存的本地 Markdown 文档'; + String get createMarkdownFileDescription => + 'Start an unsaved local Markdown document'; @override - String get createWritersideProject => '创建 Writerside 项目'; + String get createWritersideProject => 'Create Writerside Project'; @override - String get createWritersideProjectDescription => '开始创建本地兼容 Writerside 的项目'; + String get createWritersideProjectDescription => + 'Start a local Writerside-compatible project'; @override - String get defaultProjectName => '文档'; + String get defaultProjectName => 'Documentation'; @override - String get defaultInstanceName => '用户指南'; + String get defaultInstanceName => 'User Guide'; @override - String get defaultStartTopicTitle => '开始使用'; + String get defaultStartTopicTitle => 'Getting started'; @override - String get projectName => '项目名称'; + String get projectName => 'Project name'; @override - String get directoryName => '目录名称'; + String get directoryName => 'Directory name'; @override - String get instanceName => '实例名称'; + String get instanceName => 'Instance name'; @override - String get instanceId => '实例 ID'; + String get instanceId => 'Instance ID'; @override - String get startTopicTitle => '起始主题标题'; + String get startTopicTitle => 'Start topic title'; @override - String get location => '位置'; + String get location => 'Location'; @override - String get projectNameRequired => '项目名称为必填项。'; + String get projectNameRequired => 'Project name is required.'; @override - String get directoryNameRequired => '目录名称为必填项。'; + String get directoryNameRequired => 'Directory name is required.'; @override - String get useSingleSafeDirectoryName => '使用单一且安全的目录名称。'; + String get useSingleSafeDirectoryName => 'Use a single safe directory name.'; @override - String get useLowercaseIdentifier => '使用仅包含小写字母、数字、下划线或连字符的小写标识符。'; + String get useLowercaseIdentifier => + 'Use a lowercase identifier with letters, numbers, underscores, or hyphens.'; @override - String get startTopicTitleRequired => '起始主题标题为必填项。'; + String get startTopicTitleRequired => 'Start topic title is required.'; @override - String get createWritersideProjectFailed => '无法创建 Writerside 项目。'; + String get createWritersideProjectFailed => + 'Could not create Writerside project.'; @override - String get settingsTitle => 'BusyMark 设置'; + String get settingsTitle => 'BusyMark Settings'; @override - String get autoSave => '自动保存'; + String get autoSave => 'Auto Save'; @override - String get autoSaveDescription => '在短暂空闲后自动保存文件更改。'; + String get autoSaveDescription => + 'Save file changes automatically after a short idle delay.'; @override - String get wordWrap => '自动换行'; + String get wordWrap => 'Word wrap'; @override - String get editorFontSize => '编辑器字体大小'; + String get editorFontSize => 'Editor font size'; @override - String get validateOnEdit => '编辑时验证'; + String get validateOnEdit => 'Validate on edit'; @override - String get clearRecentWorkspaces => '清除最近使用的工作区'; + String get clearRecentWorkspaces => 'Clear recent workspaces'; @override - String get editingButtonsPosition => '编辑按钮位置'; + String get editingButtonsPosition => 'Editing buttons position'; @override - String get editingButtonsPositionDescription => '选择浮动 WYSIWYG 编辑按钮的显示位置。'; + String get editingButtonsPositionDescription => + 'Choose where the floating WYSIWYG editing buttons appear.'; @override - String get editingButtonsDirection => '编辑按钮方向'; + String get editingButtonsDirection => 'Editing buttons direction'; @override - String get editingButtonsDirectionDescription => '选择水平或垂直排列浮动 WYSIWYG 编辑按钮。'; + String get editingButtonsDirectionDescription => + 'Choose whether the floating WYSIWYG editing buttons are arranged horizontally or vertically.'; @override - String get horizontal => '水平'; + String get horizontal => 'Horizontal'; @override - String get vertical => '垂直'; + String get vertical => 'Vertical'; @override - String get privacy => '隐私'; + String get privacy => 'Privacy'; @override - String get allowRemoteImages => '加载远程图像'; + String get allowRemoteImages => 'Load remote images'; @override String get allowRemoteImagesDescription => - '允许 Markdown 预览和编辑器从 http 和 https URL 加载图像。'; + 'Allow Markdown preview and editor images to load from http and https URLs.'; @override - String get clearRemoteImagePermissions => '清除远程图像权限'; + String get clearRemoteImagePermissions => 'Clear remote image permissions'; @override - String get clearRemoteImagePermissionsDescription => '忘记已获准加载远程图像的工作区。'; + String get clearRemoteImagePermissionsDescription => + 'Forget workspaces that were allowed to load remote images.'; @override - String get clearGitWorkspaceTrust => '清除受信任的 Git 工作区'; + String get clearGitWorkspaceTrust => 'Clear trusted Git workspaces'; @override - String get clearGitWorkspaceTrustDescription => '为之前受信任的工作区启用 Git 功能前先进行询问。'; + String get clearGitWorkspaceTrustDescription => + 'Ask before enabling Git features for previously trusted workspaces.'; @override - String get settingsWindowSectionTitle => '窗口'; + String get settingsWindowSectionTitle => 'Window'; @override - String get settingsReopenWorkspaceOnStartupTitle => '启动时重新打开上次的工作区'; + String get settingsReopenWorkspaceOnStartupTitle => + 'Reopen previous workspace on startup'; @override String get settingsReopenWorkspaceOnStartupDescription => - 'BusyMark 启动时打开上次会话中的工作区和标签页。'; + 'Open the workspace and tabs from the previous session when BusyMark starts.'; @override - String get settingsConfirmCloseWithUnsavedChangesTitle => '有未保存更改时关闭前进行确认'; + String get settingsConfirmCloseWithUnsavedChangesTitle => + 'Confirm before closing with unsaved changes'; @override String get settingsConfirmCloseWithUnsavedChangesDescription => - '文档有未保存更改时,关闭 BusyMark 前先进行询问。'; + 'Ask before closing BusyMark when documents have unsaved changes.'; @override - String get closeUnsavedChangesTitle => '未保存的更改'; + String get closeUnsavedChangesTitle => 'Unsaved changes'; @override String get closeUnsavedChangesSingleMessage => - '此文档有未保存的更改。关闭 BusyMark 前保存更改?'; + 'This document has unsaved changes. Save changes before closing BusyMark?'; @override String closeUnsavedChangesMultipleMessage(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '有 $count 个文档包含未保存的更改。关闭 BusyMark 前保存更改?', - one: '有 1 个文档包含未保存的更改。关闭 BusyMark 前保存更改?', - zero: '关闭 BusyMark 前保存更改?', + other: + '$count documents have unsaved changes. Save changes before closing BusyMark?', + one: + '1 document has unsaved changes. Save changes before closing BusyMark?', + zero: 'Save changes before closing BusyMark?', ); return '$_temp0'; } @override - String get closeUnsavedChangesCancel => '取消'; + String get closeUnsavedChangesCancel => 'Cancel'; @override - String get closeUnsavedChangesDiscard => '放弃'; + String get closeUnsavedChangesDiscard => 'Discard'; @override - String get closeUnsavedChangesSave => '保存'; + String get closeUnsavedChangesSave => 'Save'; @override - String get currentFile => '当前文件'; + String get currentFile => 'current file'; @override - String get unsavedChanges => '未保存的更改'; + String get unsavedChanges => 'Unsaved changes'; @override String unsavedChangesMessage(String fileName) { - return '$fileName 中有未保存的更改。继续前保存这些更改?'; + return 'You have unsaved changes in $fileName. Save them before continuing?'; } @override @@ -759,155 +804,158 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '有 $count 个文档包含未保存的更改。继续前保存它们?', - one: '有 1 个文档包含未保存的更改。继续前保存它?', + other: + '$count documents have unsaved changes. Save them before continuing?', + one: '1 document has unsaved changes. Save it before continuing?', ); return '$_temp0'; } @override - String get fileChangedOnDisk => '文件已在磁盘上更改'; + String get fileChangedOnDisk => 'File changed on disk'; @override - String get fileChangedOnDiskMessage => '自打开此文件后,它已在磁盘上发生更改。覆盖它?'; + String get fileChangedOnDiskMessage => + 'This file changed on disk since you opened it. Overwrite it?'; @override - String get untitledMarkdownFileName => '未命名.md'; + String get untitledMarkdownFileName => 'Untitled.md'; @override - String get unorderedList => '无序列表'; + String get unorderedList => 'Unordered list'; @override - String get orderedList => '有序列表'; + String get orderedList => 'Ordered list'; @override - String get taskList => '任务列表'; + String get taskList => 'Task list'; @override - String get toggleTaskChecked => '切换任务选中状态'; + String get toggleTaskChecked => 'Toggle task checked'; @override - String get indentListItem => '增加列表项缩进'; + String get indentListItem => 'Indent list item'; @override - String get outdentListItem => '减少列表项缩进'; + String get outdentListItem => 'Outdent list item'; @override - String get blockquote => '引用块'; + String get blockquote => 'Blockquote'; @override - String get codeBlock => '代码块'; + String get codeBlock => 'Code block'; @override - String get codeBlockLanguage => '代码块语言'; + String get codeBlockLanguage => 'Code block language'; @override - String get image => '图像'; + String get image => 'Image'; @override - String get video => '视频'; + String get video => 'Video'; @override - String get openVideo => '播放视频'; + String get openVideo => 'Play video'; @override - String get pauseVideo => '暂停视频'; + String get pauseVideo => 'Pause video'; @override - String get videoUnavailable => '视频不可用'; + String get videoUnavailable => 'Video unavailable'; @override - String get videoPreview => '视频预览'; + String get videoPreview => 'Video preview'; @override - String get diagnosticWritersideVideoMissingSource => '视频缺少 src 属性。'; + String get diagnosticWritersideVideoMissingSource => + 'Video is missing its src attribute.'; @override String diagnosticWritersideVideoUnsupportedSource(String source) { - return '不支持的视频源:$source'; + return 'Unsupported video source: $source'; } @override String diagnosticWritersideVideoMissingFile(String source) { - return '视频文件不存在:$source'; + return 'Video file does not exist: $source'; } @override String diagnosticWritersideVideoMissingPreview(String preview) { - return '视频预览图像不存在:$preview'; + return 'Video preview image does not exist: $preview'; } @override - String get inlineImage => '行内图像'; + String get inlineImage => 'Inline image'; @override - String get table => '表格'; + String get table => 'Table'; @override - String get htmlBlock => 'HTML 块'; + String get htmlBlock => 'HTML block'; @override - String get htmlContentDefault => 'HTML 内容'; + String get htmlContentDefault => 'HTML content'; @override - String get shortcutHtmlBlockDescription => '插入或编辑 HTML 块'; + String get shortcutHtmlBlockDescription => 'Insert or edit an HTML block'; @override - String get renderedHtml => '已渲染的 HTML'; + String get renderedHtml => 'Rendered HTML'; @override - String get editHtml => '编辑 HTML'; + String get editHtml => 'Edit HTML'; @override - String get htmlSource => 'HTML 源代码'; + String get htmlSource => 'HTML source'; @override - String get thematicBreak => '分隔线'; + String get thematicBreak => 'Thematic break'; @override - String get bold => '粗体'; + String get bold => 'Bold'; @override - String get italic => '斜体'; + String get italic => 'Italic'; @override - String get underline => '下划线'; + String get underline => 'Underline'; @override - String get strikethrough => '删除线'; + String get strikethrough => 'Strikethrough'; @override - String get inlineCode => '行内代码'; + String get inlineCode => 'Inline code'; @override - String get link => '链接'; + String get link => 'Link'; @override - String get hardLineBreak => '硬换行'; + String get hardLineBreak => 'Hard line break'; @override - String get textStyle => '文本样式'; + String get textStyle => 'Text style'; @override - String get paragraph => '段落'; + String get paragraph => 'Paragraph'; @override - String get heading1 => '标题 1'; + String get heading1 => 'Heading 1'; @override - String get heading2 => '标题 2'; + String get heading2 => 'Heading 2'; @override - String get heading3 => '标题 3'; + String get heading3 => 'Heading 3'; @override - String get heading4 => '标题 4'; + String get heading4 => 'Heading 4'; @override - String get heading5 => '标题 5'; + String get heading5 => 'Heading 5'; @override - String get heading6 => '标题 6'; + String get heading6 => 'Heading 6'; @override String headingLevelAbbreviation(int level) { @@ -915,260 +963,261 @@ class AppLocalizationsZh extends AppLocalizations { } @override - String get deleteTable => '删除表格'; + String get deleteTable => 'Delete table'; @override String tableColumnNumber(int columnNumber) { - return '列 $columnNumber'; + return 'Column $columnNumber'; } @override - String get insertColumnLeft => '在左侧插入列'; + String get insertColumnLeft => 'Insert column left'; @override - String get insertColumnRight => '在右侧插入列'; + String get insertColumnRight => 'Insert column right'; @override - String get deleteColumn => '删除列'; + String get deleteColumn => 'Delete column'; @override - String get tableAlignmentUnspecified => '对齐方式:未指定'; + String get tableAlignmentUnspecified => 'Alignment: Unspecified'; @override - String get tableAlignmentLeft => '对齐方式:左对齐'; + String get tableAlignmentLeft => 'Alignment: Left'; @override - String get tableAlignmentCenter => '对齐方式:居中'; + String get tableAlignmentCenter => 'Alignment: Center'; @override - String get tableAlignmentRight => '对齐方式:右对齐'; + String get tableAlignmentRight => 'Alignment: Right'; @override String tableRowNumber(int rowNumber) { - return '行 $rowNumber'; + return 'Row $rowNumber'; } @override - String get insertRowAbove => '在上方插入行'; + String get insertRowAbove => 'Insert row above'; @override - String get insertRowBelow => '在下方插入行'; + String get insertRowBelow => 'Insert row below'; @override - String get deleteRow => '删除行'; + String get deleteRow => 'Delete row'; @override - String get tableHeaderHint => '标题'; + String get tableHeaderHint => 'Header'; @override - String get tableCellHint => '单元格'; + String get tableCellHint => 'Cell'; @override - String get language => '语言'; + String get language => 'Language'; @override - String get hideEditingButtons => '隐藏编辑按钮'; + String get hideEditingButtons => 'Hide editing buttons'; @override - String get showEditingButtons => '显示编辑按钮'; + String get showEditingButtons => 'Show editing buttons'; @override - String get altText => '替代文本'; + String get altText => 'Alt text'; @override - String get editorPlaceholderText => '文本'; + String get editorPlaceholderText => 'text'; @override - String get editorPlaceholderCode => '代码'; + String get editorPlaceholderCode => 'code'; @override - String get editorPlaceholderAltText => '替代文本'; + String get editorPlaceholderAltText => 'alt text'; @override - String get describeTheImage => '描述图像'; + String get describeTheImage => 'Describe the image'; @override - String get columns => '列'; + String get columns => 'Columns'; @override - String get rows => '行'; + String get rows => 'Rows'; @override String tableHeaderNumber(int columnNumber) { - return '标题 $columnNumber'; + return 'Header $columnNumber'; } @override - String get tableCellDefault => '单元格'; + String get tableCellDefault => 'Cell'; @override - String get noImageSource => '没有图像源'; + String get noImageSource => 'No image source'; @override - String get remoteImageBlocked => '远程图像已阻止'; + String get remoteImageBlocked => 'Remote image blocked'; @override - String get remoteImageBlockedTooltip => '选择是否允许 BusyMark 加载远程图像。'; + String get remoteImageBlockedTooltip => + 'Choose whether BusyMark can load remote images.'; @override - String get remoteImagesBlockedTitle => '远程图像已阻止'; + String get remoteImagesBlockedTitle => 'Remote images are blocked'; @override String get remoteImagesBlockedMessage => - '本文档引用了来自互联网的图像。加载这些图像可能会向图像托管方泄露网络信息。'; + 'This document references images from the internet. Loading them can reveal network information to the image host.'; @override - String get loadRemoteImagesForWorkspace => '为此工作区加载'; + String get loadRemoteImagesForWorkspace => 'Load for this workspace'; @override - String get alwaysLoadRemoteImages => '始终加载远程图像'; + String get alwaysLoadRemoteImages => 'Always load remote images'; @override - String get hideSidebar => '隐藏侧边栏面板'; + String get hideSidebar => 'Hide sidebar panel'; @override - String get showSidebar => '显示侧边栏面板'; + String get showSidebar => 'Show sidebar panel'; @override - String get showPreview => '显示预览'; + String get showPreview => 'Show preview'; @override - String get hidePreview => '隐藏预览'; + String get hidePreview => 'Hide preview'; @override - String get workspaceKindUnsavedMarkdown => '未保存的 Markdown 文件'; + String get workspaceKindUnsavedMarkdown => 'Unsaved Markdown file'; @override - String get workspaceKindSingleMarkdown => '单个 Markdown 文件'; + String get workspaceKindSingleMarkdown => 'Single Markdown file'; @override - String get workspaceKindMarkdownFolder => 'Markdown 文件夹'; + String get workspaceKindMarkdownFolder => 'Markdown folder'; @override - String get workspaceKindWritersideModule => 'Writerside 模块'; + String get workspaceKindWritersideModule => 'Writerside module'; @override - String get problems => '问题'; + String get problems => 'Problems'; @override String diagnosticCount(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 条诊断信息', - one: '1 条诊断信息', - zero: '没有诊断信息', + other: '$count diagnostics', + one: '1 diagnostic', + zero: 'No diagnostics', ); return '$_temp0'; } @override - String get files => '文件'; + String get files => 'Files'; @override - String get toc => '目录'; + String get toc => 'TOC'; @override - String get tocActions => '目录操作'; + String get tocActions => 'TOC actions'; @override - String get markdownUnsaved => 'Markdown - 未保存'; + String get markdownUnsaved => 'Markdown - unsaved'; @override String workspaceDetail(String kind, int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 个文件', - one: '1 个文件', + other: '$count files', + one: '1 file', ); return '$kind - $_temp0'; } @override - String get noFiles => '没有文件'; + String get noFiles => 'No files'; @override - String get newFile => '新建文件'; + String get newFile => 'New file'; @override - String get noWritersideToc => '没有 Writerside 目录'; + String get noWritersideToc => 'No Writerside TOC'; @override - String get tocSection => '目录节'; + String get tocSection => 'TOC section'; @override - String get newTopic => '新建主题'; + String get newTopic => 'New Topic'; @override - String get newChildTopic => '新建子主题'; + String get newChildTopic => 'New Child Topic'; @override - String get newSiblingTopic => '新建同级主题'; + String get newSiblingTopic => 'New Sibling Topic'; @override - String get renameTopicFile => '重命名主题文件'; + String get renameTopicFile => 'Rename Topic File'; @override - String get topicPlacement => '目录位置'; + String get topicPlacement => 'TOC placement'; @override - String get tocRoot => '位于目录根级别'; + String get tocRoot => 'At TOC root'; @override - String get afterSelectedTopic => '位于选中主题之后'; + String get afterSelectedTopic => 'After selected topic'; @override - String get insideSelectedTopic => '位于选中主题内'; + String get insideSelectedTopic => 'Inside selected topic'; @override - String get pasteAfterTopic => '粘贴到主题之后'; + String get pasteAfterTopic => 'Paste After'; @override - String get pasteAsChildTopic => '粘贴为子主题'; + String get pasteAsChildTopic => 'Paste as Child'; @override - String get removeFromToc => '从目录中移除'; + String get removeFromToc => 'Remove from TOC'; @override - String get confirmRemoveFromTocTitle => '从目录中移除?'; + String get confirmRemoveFromTocTitle => 'Remove from TOC?'; @override String confirmRemoveFromTocMessage(String name) { - return '从此目录中移除 $name?主题文件将被保留。'; + return 'Remove $name from this table of contents? The topic file will be kept.'; } @override - String get confirmDeleteTopicTitle => '删除主题文件?'; + String get confirmDeleteTopicTitle => 'Delete topic file?'; @override String confirmDeleteTopicMessage(String name) { - return '删除 $name 并从每个目录中移除它?此操作无法撤销。'; + return 'Delete $name and remove it from every table of contents? This cannot be undone.'; } @override - String get safeDeleteTopicFile => '安全删除主题文件…'; + String get safeDeleteTopicFile => 'Safe Delete Topic File…'; @override - String get removeTocElement => '移除目录元素'; + String get removeTocElement => 'Remove TOC Element'; @override - String get reviewUsages => '查看使用情况'; + String get reviewUsages => 'Review Usages'; @override - String get deleteTopicFile => '删除主题文件'; + String get deleteTopicFile => 'Delete Topic File'; @override - String get removeAction => '移除'; + String get removeAction => 'Remove'; @override String topicRemovalSummary(String topic) { - return '从选中的实例中移除“$topic”。主题文件将被保留。'; + return 'Remove “$topic” from the selected instance. The topic file will be kept.'; } @override String safeDeleteTopicSummary(String topic) { - return '删除“$topic”,并在整个 Writerside 项目中安全更新其引用。'; + return 'Delete “$topic” and safely update its references throughout this Writerside project.'; } @override @@ -1176,445 +1225,470 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 个子主题将上移一级。', - one: '1 个子主题将上移一级。', + other: '$count child topics will move up one level.', + one: '1 child topic will move up one level.', ); return '$_temp0'; } @override String get topicIsStartPageRemovalWarning => - '此主题被用作实例的起始页。请查看其使用情况,并在继续前指定其他起始页。'; + 'This topic is used as an instance start page. Review its usages and assign another start page before continuing.'; @override String topicUsagesCount(int count) { - return '使用情况($count)'; + return 'Usages ($count)'; } @override - String get noBreakingTopicUsages => '未找到会导致引用失效的引用。'; + String get noBreakingTopicUsages => + 'No references that would be broken were found.'; @override - String get topicUsagesFound => 'BusyMark 找到了以下对该主题的引用。'; + String get topicUsagesFound => + 'BusyMark found the following references to this topic.'; @override - String get topicUsageTocElements => '目录元素'; + String get topicUsageTocElements => 'TOC elements'; @override - String get topicUsageStartPages => '起始页'; + String get topicUsageStartPages => 'Start pages'; @override - String get topicUsageTopicLinks => '主题链接'; + String get topicUsageTopicLinks => 'Topic links'; @override - String get topicUsageIncludes => '包含项'; + String get topicUsageIncludes => 'Includes'; @override String usageCount(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 次使用', - one: '1 次使用', + other: '$count usages', + one: '1 usage', ); return '$_temp0'; } @override - String get refactoringOptions => '重构选项'; + String get refactoringOptions => 'Refactoring options'; @override - String get updateUsagesAutomatically => '自动更新使用情况'; + String get updateUsagesAutomatically => 'Update usages automatically'; @override - String get updateUsagesAutomaticallyDescription => '移除目录引用和包含项,同时保留链接文本。'; + String get updateUsagesAutomaticallyDescription => + 'Remove TOC references and includes, and preserve link text.'; @override - String get manualUsageUpdatesRequired => '执行此重构前,某些使用情况需要手动更改。'; + String get manualUsageUpdatesRequired => + 'Some usages require manual changes before this refactoring.'; @override - String get setRedirectTo => '设置重定向到'; + String get setRedirectTo => 'Set redirect to'; @override - String get noRedirectDescription => '不重定向旧的已发布页面。'; + String get noRedirectDescription => 'Do not redirect the old published page.'; @override - String get redirectTarget => '重定向目标'; + String get redirectTarget => 'Redirect target'; @override - String get remainingUsagesBlockRemoval => '请在继续前查看并更新剩余的使用情况,或在可用时启用自动更新。'; + String get remainingUsagesBlockRemoval => + 'Review and update the remaining usages before continuing, or enable automatic updates when available.'; @override String usagesOfTopic(String topic) { - return '$topic 的使用情况'; + return 'Usages of $topic'; } @override - String get noUsagesFound => '未找到使用情况'; + String get noUsagesFound => 'No usages found'; @override - String get outsideSelectedInstance => '在选中的实例之外'; + String get outsideSelectedInstance => 'outside selected instance'; @override - String get doRefactor => '执行重构'; + String get doRefactor => 'Do Refactor'; @override - String get orphanTopicTitle => '主题文件已不再使用'; + String get orphanTopicTitle => 'Topic file is no longer used'; @override - String get keepTopicFile => '保留主题文件'; + String get keepTopicFile => 'Keep Topic File'; @override String orphanTopicMessage(String topic) { - return '“$topic”在此 Writerside 项目中已不再使用。删除该文件,或保留它以供其他实例使用。'; + return '“$topic” is no longer used anywhere in this Writerside project. Delete the file, or keep it for use in another instance.'; } @override - String get defaultNewTopicTitle => '新主题'; + String get defaultNewTopicTitle => 'New topic'; @override - String get topicTitle => '主题标题'; + String get topicTitle => 'Topic title'; @override - String get fileName => '文件名'; + String get fileName => 'File name'; @override - String get topicTitleRequired => '主题标题为必填项。'; + String get topicTitleRequired => 'Topic title is required.'; @override - String get fileNameRequired => '文件名为必填项。'; + String get fileNameRequired => 'File name is required.'; @override - String get rename => '重命名'; + String get rename => 'Rename'; @override - String get confirmDeleteFileTitle => '删除文件?'; + String get confirmDeleteFileTitle => 'Delete file?'; @override - String get confirmDeleteFolderTitle => '删除文件夹?'; + String get confirmDeleteFolderTitle => 'Delete folder?'; @override String confirmDeleteFileMessage(String name) { - return '删除 $name?此操作无法撤销。'; + return 'Delete $name? This cannot be undone.'; } @override String confirmDeleteFolderMessage(String name) { - return '删除 $name 及其中的所有文件?此操作无法撤销。'; + return 'Delete $name and all files inside it? This cannot be undone.'; } @override - String get useSingleSafeFileName => '使用单一且安全的文件名。'; + String get useSingleSafeFileName => 'Use a single safe file name.'; @override String useExpectedExtension(String extension) { - return '为选中的格式使用 $extension 扩展名。'; + return 'Use the $extension extension for the selected format.'; } @override - String get useIdentifierCharacters => '在扩展名之前仅使用字母、数字、下划线或连字符。'; + String get useIdentifierCharacters => + 'Use letters, numbers, underscores, or hyphens before the extension.'; @override - String get topicIdAlreadyExists => '主题 ID 已存在。'; + String get topicIdAlreadyExists => 'Topic ID already exists.'; @override - String get createWritersideTopicFailed => '无法创建 Writerside 主题。'; + String get createWritersideTopicFailed => + 'Could not create Writerside topic.'; @override - String get noOutline => '没有大纲'; + String get noOutline => 'No outline'; @override String expandKind(String kind) { - return '展开 $kind'; + return 'Expand $kind'; } @override String collapseKind(String kind) { - return '折叠 $kind'; + return 'Collapse $kind'; } @override - String get foldKindSection => '节'; + String get foldKindSection => 'section'; @override - String get foldKindList => '列表'; + String get foldKindList => 'list'; @override - String get foldKindQuote => '引用'; + String get foldKindQuote => 'quote'; @override - String get foldKindTag => '标签'; + String get foldKindTag => 'tag'; @override - String get sourceSearchPreviousMatch => '上一个匹配项'; + String get sourceSearchPreviousMatch => 'Previous match'; @override - String get sourceSearchNextMatch => '下一个匹配项'; + String get sourceSearchNextMatch => 'Next match'; @override - String get sourceSearchCaseSensitive => '区分大小写'; + String get sourceSearchCaseSensitive => 'Case sensitive'; @override - String get sourceSearchWholeWord => '全字匹配'; + String get sourceSearchWholeWord => 'Whole word'; @override - String get sourceSearchRegex => '正则表达式'; + String get sourceSearchRegex => 'Regex'; @override - String get sourceSearchReplacement => '替换为'; + String get sourceSearchReplacement => 'Replace with'; @override - String get sourceSearchReplaceCurrent => '替换当前匹配项'; + String get sourceSearchReplaceCurrent => 'Replace current match'; @override - String get sourceSearchReplaceAndFindNext => '替换并查找下一个'; + String get sourceSearchReplaceAndFindNext => 'Replace and find next'; @override - String get sourceSearchReplaceAll => '全部替换'; + String get sourceSearchReplaceAll => 'Replace all'; @override - String get workspaceReplace => '在工作区中替换'; + String get workspaceReplace => 'Replace in Workspace'; @override - String get reviewReplacements => '查看替换内容'; + String get reviewReplacements => 'Review replacements'; @override - String get applyReplacements => '应用替换'; + String get applyReplacements => 'Apply replacements'; @override - String get skippedFiles => '跳过的文件'; + String get skippedFiles => 'Skipped files'; @override - String get workspaceReplaceDirtyBuffer => '未保存的编辑器内容'; + String get workspaceReplaceDirtyBuffer => 'Unsaved editor content'; @override - String get workspaceReplaceDiskContent => '磁盘上的已保存内容'; + String get workspaceReplaceDiskContent => 'Saved disk content'; @override String selectFileMatches(int count) { - return '选择全部 $count 个匹配项'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Select all $count matches', + one: 'Select 1 match', + ); + return '$_temp0'; } @override String workspaceReplaceApplied(int matches, int files, int skipped) { - return '已在 $files 个文件中替换 $matches 个匹配项;跳过 $skipped 个。'; + return 'Replaced $matches matches in $files files; skipped $skipped.'; } @override String documentFormatWithFinalNewline(String encoding, String lineEnding) { - return '$encoding · $lineEnding · 末尾有换行符'; + return '$encoding · $lineEnding · Final newline'; } @override String documentFormatWithoutFinalNewline(String encoding, String lineEnding) { - return '$encoding · $lineEnding · 末尾无换行符'; + return '$encoding · $lineEnding · No final newline'; } @override - String get normalizeLineEndings => '规范化行尾'; + String get normalizeLineEndings => 'Normalize line endings'; @override - String get mixedLineEndingsSavePrompt => '此文档包含混合的行尾格式。请选择一种格式。'; + String get mixedLineEndingsSavePrompt => + 'This document contains mixed line endings. Choose a format.'; @override String workspaceReplaceMixedLineEndings(String fileName) { - return '$fileName 使用混合的行尾格式。请在替换前选择要使用的格式。'; + return '$fileName uses mixed line endings. Choose the format to use before replacing.'; } @override - String get workspaceReplaceIssueOversized => '已跳过过大的文件。'; + String get workspaceReplaceIssueOversized => 'Skipped an oversized file.'; @override - String get workspaceReplaceIssueUnreadable => '已跳过无法读取的文件。'; + String get workspaceReplaceIssueUnreadable => + 'Skipped a file that could not be read.'; @override - String get workspaceReplaceIssueInvalidUtf8 => '已跳过不是有效 UTF-8 的文件。'; + String get workspaceReplaceIssueInvalidUtf8 => + 'Skipped a file that is not valid UTF-8.'; @override - String get workspaceReplaceIssueTruncated => '替换预览已被截断。'; + String get workspaceReplaceIssueTruncated => + 'The replacement preview was truncated.'; @override - String get workspaceReplaceIssueFileChanged => '已跳过预览后发生变化的文件。'; + String get workspaceReplaceIssueFileChanged => + 'Skipped a file that changed after the preview.'; @override - String get workspaceReplaceIssueBufferChanged => '已跳过预览后发生变化的编辑器缓冲区。'; + String get workspaceReplaceIssueBufferChanged => + 'Skipped an editor buffer that changed after the preview.'; @override String get workspaceReplaceIssueNormalizationRequired => - '请在替换前选择 LF 或 CRLF 规范化。'; + 'Choose LF or CRLF normalization before replacing.'; @override String get workspaceReplaceIssuePartialConflict => - '由于文件同时发生了变化,回滚已停止。部分替换可能仍然存在;被移出的内容已保留在下方路径中。'; + 'Rollback stopped because the file changed concurrently. Some replacements may remain; displaced content was preserved at the path below.'; @override - String get workspaceReplaceIssueApplyFailed => '无法提交经过审查的替换;没有文件发生更改。'; + String get workspaceReplaceIssueApplyFailed => + 'The reviewed replacement could not be committed; no files were changed.'; @override String externalChangesTitle(String fileName) { - return '外部更改 — $fileName'; + return 'External changes — $fileName'; } @override - String get externalFileDeleted => '此文件已从磁盘删除。'; + String get externalFileDeleted => 'This file was deleted on disk.'; @override - String get externalFileChanged => '在您有未保存编辑时,此文件已在磁盘上发生变化。'; + String get externalFileChanged => + 'This file changed on disk while you have unsaved edits.'; @override String recoveredDocumentReview(String fileName) { - return '已恢复 $fileName 的未保存内容。请检查后保存、另存为或放弃。'; + return 'Recovered unsaved content for $fileName. Inspect it, then save, save as, or discard it.'; } @override - String get compare => '比较'; + String get compare => 'Compare'; @override - String get reloadFromDisk => '从磁盘重新加载'; + String get reloadFromDisk => 'Reload from Disk'; @override - String get keepMine => '保留我的版本'; + String get keepMine => 'Keep Mine'; @override - String get saveAs => '另存为'; + String get saveAs => 'Save As'; @override - String get sourceSearchInvalidRegex => '无效的正则表达式'; + String get sourceSearchInvalidRegex => 'Invalid regular expression'; @override - String get sourceLargeFileFeaturesPaused => '大文件:已暂停语法突出显示和折叠'; + String get sourceLargeFileFeaturesPaused => + 'Large file: highlighting and folding are paused'; @override - String get nothingToRead => '没有可读取的内容'; + String get nothingToRead => 'Nothing to read'; @override - String get admonition => '提示块'; + String get admonition => 'Admonition'; @override - String get quote => '引用'; + String get quote => 'Quote'; @override - String get note => '备注'; + String get note => 'Note'; @override - String get tip => '提示'; + String get tip => 'Tip'; @override - String get warning => '警告'; + String get warning => 'Warning'; @override - String get tabs => '标签页'; + String get tabs => 'Tabs'; @override - String get tab => '标签页'; + String get tab => 'Tab'; @override - String get procedure => '操作步骤'; + String get procedure => 'Procedure'; @override - String get step => '步骤'; + String get step => 'Step'; @override - String get topic => '主题'; + String get topic => 'Topic'; @override - String get chapter => '章节'; + String get chapter => 'Chapter'; @override String couldNotOpenTarget(String target) { - return '无法打开 $target'; + return 'Could not open $target'; } @override String linkTargetNotFound(String targetPath) { - return '找不到链接目标:$targetPath'; + return 'Link target not found: $targetPath'; } @override - String get cannotOpenFileTypeInEditor => '无法在编辑器中打开此文件类型'; + String get cannotOpenFileTypeInEditor => + 'Cannot open this file type in editor'; @override String anchorNotFound(String anchor) { - return '找不到锚点:$anchor'; + return 'Anchor not found: $anchor'; } @override - String get noProblemsFound => '未发现问题'; + String get noProblemsFound => 'No problems found'; @override - String get noResults => '无结果'; + String get noResults => 'No results'; @override String searchResultLine(String relativePath, int lineNumber) { - return '$relativePath - 第 $lineNumber 行'; + return '$relativePath - Line $lineNumber'; } @override - String get untitledResult => '未命名结果'; + String get untitledResult => 'Untitled result'; @override - String get documentKindMarkdownFile => 'Markdown 文件'; + String get documentKindMarkdownFile => 'Markdown file'; @override - String get documentKindWritersideMarkdownTopic => 'Writerside Markdown 主题'; + String get documentKindWritersideMarkdownTopic => 'Writerside Markdown topic'; @override - String get documentKindWritersideXmlTopic => 'Writerside XML 主题'; + String get documentKindWritersideXmlTopic => 'Writerside XML topic'; @override - String get documentKindWritersideTree => 'Writerside 树'; + String get documentKindWritersideTree => 'Writerside tree'; @override - String get documentKindConfigurationFile => '配置文件'; + String get documentKindConfigurationFile => 'Configuration file'; @override - String get documentKindVariablesFile => '变量文件'; + String get documentKindVariablesFile => 'Variables file'; @override - String get documentKindCategoriesFile => '类别文件'; + String get documentKindCategoriesFile => 'Categories file'; @override - String get documentKindResourceFile => '资源文件'; + String get documentKindResourceFile => 'Resource file'; @override String workspaceErrorOpenFailed(String error) { - return '打开失败:$error'; + return 'Open failed: $error'; } @override String workspaceErrorCreateWritersideProjectFailed(String error) { - return '无法创建 Writerside 项目:$error'; + return 'Could not create Writerside project: $error'; } @override String workspaceErrorCreateWritersideTopicFailed(String error) { - return '无法创建 Writerside 主题:$error'; + return 'Could not create Writerside topic: $error'; } @override String workspaceErrorCouldNotOpenFile(String error) { - return '无法打开文件:$error'; + return 'Could not open file: $error'; } @override - String get workspaceErrorChooseWhereToSaveMarkdown => '选择保存此 Markdown 文件的位置。'; + String get workspaceErrorChooseWhereToSaveMarkdown => + 'Choose where to save this Markdown file.'; @override - String get workspaceErrorSaveBlockedFileChangedOnDisk => '保存已阻止:文件已在磁盘上发生变化。'; + String get workspaceErrorSaveBlockedFileChangedOnDisk => + 'Save blocked: file changed on disk.'; @override String workspaceErrorSaveFailed(String error) { - return '保存失败:$error'; + return 'Save failed: $error'; } @override String workspaceErrorFileOperationFailed(String error) { - return '文件操作失败:$error'; + return 'File operation failed: $error'; } @override String workspaceErrorValidationFailed(String error) { - return '验证失败:$error'; + return 'Validation failed: $error'; } @override @@ -1622,8 +1696,10 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '已恢复 $count 个未保存的文档。请在保存或放弃前逐一检查。', - one: '已恢复 1 个未保存的文档。请在保存或放弃前进行检查。', + other: + 'Recovered $count unsaved documents. Review each one before saving or discarding it.', + one: + 'Recovered 1 unsaved document. Review it before saving or discarding it.', ); return '$_temp0'; } @@ -1633,420 +1709,450 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '无法恢复 $count 条损坏的恢复记录。有效的恢复记录仍可用。', - one: '无法恢复一条损坏的恢复记录。原始恢复文件已保留以供检查。', + other: + '$count damaged recovery records could not be restored. Valid recovery records remain available.', + one: + 'One damaged recovery record could not be restored. The original recovery file was preserved for inspection.', ); return '$_temp0'; } @override String errorPathDoesNotExist(String path) { - return '路径不存在:$path'; + return 'Path does not exist: $path'; } @override String errorTargetDirectoryNotEmpty(String path) { - return '目标目录已存在且不为空:$path'; + return 'Target directory already exists and is not empty: $path'; } @override String errorTargetPathNotDirectory(String path) { - return '目标路径已存在但不是目录:$path'; + return 'Target path already exists and is not a directory: $path'; } @override String errorGeneratedFileAlreadyExists(String path) { - return '生成的文件已存在:$path'; + return 'Generated file already exists: $path'; } @override - String get errorParentDirectoryRequired => '必须指定父目录。'; + String get errorParentDirectoryRequired => 'Parent directory is required.'; @override String errorParentDirectoryMissing(String path) { - return '父目录不存在:$path'; + return 'Parent directory does not exist: $path'; } @override String errorDirectoryMissing(String path) { - return '目录不存在:$path'; + return 'Directory does not exist: $path'; } @override String errorPathAlreadyExists(String path) { - return '路径已存在:$path'; + return 'Path already exists: $path'; } @override - String get errorFileNameRequired => '文件名为必填项。'; + String get errorFileNameRequired => 'File name is required.'; @override - String get errorFileNameUnsafe => '文件名必须是单一且安全的路径段。'; + String get errorFileNameUnsafe => + 'File name must be a single safe path segment.'; @override - String get errorFileOperationInvalidTarget => '无法将文件夹移动到其自身中。'; + String get errorFileOperationInvalidTarget => + 'Cannot move a folder into itself.'; @override - String get errorFileOperationOutsideRoot => '文件操作必须在工作区内进行。'; + String get errorFileOperationOutsideRoot => + 'File operation must stay inside the workspace.'; @override - String get errorFileOperationRoot => '无法从文件树更改工作区根目录。'; + String get errorFileOperationRoot => + 'The workspace root cannot be changed from the file tree.'; @override - String get errorProjectNameRequired => '项目名称为必填项。'; + String get errorProjectNameRequired => 'Project name is required.'; @override - String get errorDirectoryNameRequired => '目录名称为必填项。'; + String get errorDirectoryNameRequired => 'Directory name is required.'; @override - String get errorDirectoryNameUnsafe => '目录名称必须是单一且安全的路径段。'; + String get errorDirectoryNameUnsafe => + 'Directory name must be a single safe path segment.'; @override - String get errorInstanceIdInvalid => '实例 ID 必须以小写字母开头,且只能包含小写字母、数字、下划线和连字符。'; + String get errorInstanceIdInvalid => + 'Instance ID must start with a lowercase letter and contain only lowercase letters, numbers, underscores, and hyphens.'; @override - String get errorTopicFileInvalid => '主题文件名必须是没有路径分隔符的 Markdown 文件名。'; + String get errorTopicFileInvalid => + 'Topic file name must be a Markdown file name without path separators.'; @override - String get errorTopicTitleRequired => '主题标题为必填项。'; + String get errorTopicTitleRequired => 'Topic title is required.'; @override String errorWritersideModuleRootMissing(String path) { - return 'Writerside 模块根目录不存在:$path'; + return 'Writerside module root does not exist: $path'; } @override - String get errorWritersideModuleNotOpen => '必须打开 Writerside 模块才能创建主题。'; + String get errorWritersideModuleNotOpen => + 'A Writerside module must be open to create a topic.'; @override - String get errorWritersideInstanceTreeMissing => 'Writerside 模块没有实例树。'; + String get errorWritersideInstanceTreeMissing => + 'The Writerside module has no instance tree.'; @override String errorWritersideTreeFileMissing(String path) { - return 'Writerside 树文件不存在:$path'; + return 'Writerside tree file does not exist: $path'; } @override String errorTopicIdAlreadyExists(String topicId) { - return '主题 ID \"$topicId\" 已存在于此帮助模块中。'; + return 'Topic ID \"$topicId\" already exists in this help module.'; } @override String errorTopicFileAlreadyExists(String path) { - return '主题文件已存在:$path'; + return 'Topic file already exists: $path'; } @override String errorReferenceTopicMissing(String topic) { - return '选中的树中不存在引用主题:$topic'; + return 'Reference topic is not present in the selected tree: $topic'; } @override - String get errorWritersideTocNodeMissing => '选中的目录项已不存在。'; + String get errorWritersideTocNodeMissing => + 'The selected TOC entry no longer exists.'; @override - String get errorWritersideTocInvalidMove => '目录项无法移动到自身或其子项中。'; + String get errorWritersideTocInvalidMove => + 'A TOC entry cannot be moved into itself or one of its children.'; @override String errorWritersideStartTopicDelete(String topic) { - return '无法删除起始主题 $topic。请先选择其他起始页。'; + return 'The start topic $topic cannot be deleted. Choose another start page first.'; } @override - String get errorWritersideSafeDeleteRequired => '请对 Writerside 主题文件使用安全删除。'; + String get errorWritersideSafeDeleteRequired => + 'Use Safe Delete for Writerside topic files.'; @override - String get errorWritersideTopicUsageScanFailed => '无法完成主题使用情况扫描。没有文件发生更改。'; + String get errorWritersideTopicUsageScanFailed => + 'Could not complete the topic usage scan. No files were changed.'; @override - String get errorWritersideTopicUsagesRemain => '某些主题使用情况仍需处理。请先查看后再继续。'; + String get errorWritersideTopicUsagesRemain => + 'Some topic usages still require attention. Review them before continuing.'; @override - String get errorWritersideRedirectInvalid => '选中的重定向目标已无效。请重新选择。'; + String get errorWritersideRedirectInvalid => + 'The selected redirect target is no longer valid. Choose it again.'; @override String errorWritersideRollbackFailed(String paths) { - return '无法完全回滚主题移除。请在继续前查看这些路径:$paths'; + return 'Topic removal could not be fully rolled back. Review these paths before continuing: $paths'; } @override - String get errorTopicsRootUnsafe => '主题根目录必须是安全的相对目录。'; + String get errorTopicsRootUnsafe => + 'Topics root must be a safe relative directory.'; @override - String get errorTopicFileNameUnsafe => '主题文件名必须是单一且安全的路径段。'; + String get errorTopicFileNameUnsafe => + 'Topic file name must be a single safe path segment.'; @override String errorTopicFileExtensionMismatch(String extension) { - return '主题文件扩展名必须与选中的格式匹配($extension)。'; + return 'Topic file extension must match the selected format ($extension).'; } @override - String get errorTopicFileNameInvalid => '主题文件名只能包含字母、数字、下划线和连字符。'; + String get errorTopicFileNameInvalid => + 'Topic file name must contain only letters, numbers, underscores, and hyphens.'; @override String errorUnknown(String code) { - return '未知错误:$code'; + return 'Unknown error: $code'; } @override String diagnosticWorkspaceFileStatFailed(String error) { - return '无法读取文件元数据:$error'; + return 'Could not read file metadata: $error'; } @override - String get diagnosticWorkspaceScanSkipped => '检测到大型工作区。为保持应用响应速度,已跳过部分文件。'; + String get diagnosticWorkspaceScanSkipped => + 'Large workspace detected. Some files were skipped to keep the app responsive.'; @override String diagnosticWorkspaceScanInspectFailed(String error) { - return '无法检查工作区项:$error'; + return 'Could not inspect workspace entry: $error'; } @override - String get diagnosticWorkspaceFileTooLarge => '文件超过 beta 自动解析限制。'; + String get diagnosticWorkspaceFileTooLarge => + 'File is larger than the beta auto-parse limit.'; @override String diagnosticWorkspaceFileReadFailed(String error) { - return '无法读取 Markdown 文件:$error'; + return 'Could not read Markdown file: $error'; } @override - String get diagnosticMarkdownAttributeMalformed => 'Writerside 标题属性块格式错误。'; + String get diagnosticMarkdownAttributeMalformed => + 'Malformed Writerside heading attribute block.'; @override String diagnosticMarkdownHeadingDuplicateId(String id) { - return '标题 ID“$id”重复。'; + return 'Duplicate heading ID \"$id\".'; } @override String get diagnosticWritersideTopicH1ConvertedToChapter => - '额外的顶级 H1 标题将被视为章节。'; + 'Additional top-level H1 headings are treated as chapters.'; @override String get diagnosticWritersideMarkdownTopicMissingTitle => - 'Writerside Markdown 主题没有 H1 或 front matter 标题。'; + 'Writerside Markdown topic has no H1 or front matter title.'; @override - String get diagnosticWritersideXmlTopicMissingTitle => 'XML 主题缺少标题。'; + String get diagnosticWritersideXmlTopicMissingTitle => + 'XML topic is missing title.'; @override String diagnosticWritersideTopicFileMissingTitle(String fileName) { - return '主题“$fileName”缺少标题。'; + return 'Topic \"$fileName\" is missing a title.'; } @override - String get diagnosticMarkdownFrontMatterMalformed => 'front matter 未闭合。'; + String get diagnosticMarkdownFrontMatterMalformed => + 'Front matter is not closed.'; @override - String get diagnosticMarkdownRawHtmlUnsafe => '不安全的 HTML 元素。'; + String get diagnosticMarkdownRawHtmlUnsafe => 'Unsafe HTML element.'; @override String diagnosticMarkdownLinkUnresolvedTarget(String targetPath) { - return '链接目标不存在:$targetPath'; + return 'Link target does not exist: $targetPath'; } @override String diagnosticMarkdownLinkUnresolvedAnchor(String anchor) { - return '锚点“$anchor”不存在。'; + return 'Anchor \"$anchor\" does not exist.'; } @override String diagnosticMarkdownImageMissingAlt(String destination) { - return '图像“$destination”缺少替代文本。'; + return 'Image \"$destination\" is missing alt text.'; } @override String diagnosticMarkdownImageMissingFile(String destination) { - return '图像不存在:$destination'; + return 'Image does not exist: $destination'; } @override String diagnosticInvalidXml(String message) { - return '无效的 XML:$message'; + return 'Invalid XML: $message'; } @override String get diagnosticWritersideConfigInvalidRoot => - 'writerside.cfg 根元素必须是 。'; + 'writerside.cfg root must be .'; @override String get diagnosticWritersideConfigMissingSnippetsSrc => - 'snippets 声明缺少 src。'; + 'snippets declaration is missing src.'; @override String get diagnosticWritersideConfigMissingInstanceGroupsSrc => - 'instance-groups 声明缺少 src。'; + 'instance-groups declaration is missing src.'; @override String diagnosticWritersideConfigInvalidKeymapsMode(String mode) { - return '不支持的 keymaps 模式:$mode'; + return 'Unsupported keymaps mode: $mode'; } @override String get diagnosticWritersideConfigMissingInstanceSrc => - 'instance 声明缺少 src。'; + 'Instance declaration is missing src.'; @override String get diagnosticWritersideConfigMissingInstance => - 'writerside.cfg 未注册实例。'; + 'writerside.cfg does not register an instance.'; @override String get diagnosticWritersideTreeInvalidRoot => - '.tree 根元素必须是 。'; + '.tree root must be .'; @override - String get diagnosticWritersideTreeMissingId => '实例配置文件缺少 id。'; + String get diagnosticWritersideTreeMissingId => + 'Instance profile is missing id.'; @override String diagnosticWritersideTreeIdMismatch(String id) { - return '树文件名(不含扩展名)与实例 ID“$id”不匹配。'; + return 'Tree file stem does not match instance id \"$id\".'; } @override - String get diagnosticWritersideTreeMissingStartPage => '非库实例缺少 start-page。'; + String get diagnosticWritersideTreeMissingStartPage => + 'Non-library instance is missing start-page.'; @override String diagnosticWritersideStartPageMissing(String startPage) { - return '起始页“$startPage”不存在。'; + return 'Start page \"$startPage\" does not exist.'; } @override String diagnosticWritersideTreeDuplicateTopic(String topic) { - return '主题“$topic”在此实例目录中出现多次。'; + return 'Topic \"$topic\" appears more than once in this instance TOC.'; } @override String get diagnosticWritersideVariableMalformedDeclaration => - '变量声明必须包含名称和值。'; + 'Variable declaration must have name and value.'; @override String diagnosticWritersideVariableDuplicateName(String name) { - return '变量“$name”被声明了多次。'; + return 'Variable \"$name\" is declared more than once.'; } @override - String get diagnosticWritersideCategoryMissingId => '类别缺少 id。'; + String get diagnosticWritersideCategoryMissingId => 'Category is missing id.'; @override String diagnosticWritersideCategoryDuplicateId(String id) { - return '类别“$id”被声明了多次。'; + return 'Category \"$id\" is declared more than once.'; } @override String diagnosticWritersideCategoryDuplicateOrder(String order) { - return '类别顺序“$order”被声明了多次。'; + return 'Category order \"$order\" is declared more than once.'; } @override - String get diagnosticWritersideTopicInvalidRoot => '.topic 根元素必须是 。'; + String get diagnosticWritersideTopicInvalidRoot => + '.topic root must be .'; @override - String get diagnosticWritersideTopicMissingRootId => 'XML 主题缺少根 id。'; + String get diagnosticWritersideTopicMissingRootId => + 'XML topic is missing root id.'; @override String diagnosticWritersideTopicRootIdMismatch(String id, String expectedId) { - return 'XML 主题根 ID“$id”必须与文件名“$expectedId”匹配。'; + return 'XML topic root id \"$id\" must match filename \"$expectedId\".'; } @override String diagnosticWritersideTopicDuplicateElementId(String elementId) { - return '元素 ID“$elementId”出现多次。'; + return 'Element id \"$elementId\" appears more than once.'; } @override - String get diagnosticWritersideTopicAnchorMissingHref => ' 缺少 href。'; + String get diagnosticWritersideTopicAnchorMissingHref => + ' is missing href.'; @override String get diagnosticWritersideConfigMissing => - 'Writerside 模式需要 writerside.cfg。'; + 'Writerside mode requires writerside.cfg.'; @override String diagnosticWritersideConfigMissingBuildConfigDirectory( String relativePath, ) { - return '配置的构建配置目录不存在:$relativePath'; + return 'Configured build config directory is missing: $relativePath'; } @override String diagnosticWritersideConfigMissingApiSpecificationsDirectory( String relativePath, ) { - return '配置的 API 规范目录不存在:$relativePath'; + return 'Configured API specifications directory is missing: $relativePath'; } @override String diagnosticWritersideConfigMissingSnippetsDirectory( String relativePath, ) { - return '配置的 snippets 目录不存在:$relativePath'; + return 'Configured snippets directory is missing: $relativePath'; } @override String diagnosticWritersideConfigMissingVarsFile(String relativePath) { - return '配置的变量文件不存在:$relativePath'; + return 'Configured variables file is missing: $relativePath'; } @override String diagnosticWritersideConfigMissingCategoriesFile(String relativePath) { - return '配置的类别文件不存在:$relativePath'; + return 'Configured categories file is missing: $relativePath'; } @override String diagnosticWritersideConfigMissingInstanceGroupsFile( String relativePath, ) { - return '配置的实例组文件不存在:$relativePath'; + return 'Configured instance groups file is missing: $relativePath'; } @override String diagnosticWritersideConfigMissingInstanceTree(String source) { - return '已注册的实例树“$source”不存在。'; + return 'Registered instance tree \"$source\" does not exist.'; } @override String diagnosticWritersideTopicReadFailed(String error) { - return '无法读取主题文件:$error'; + return 'Could not read topic file: $error'; } @override String diagnosticWritersideDefaultTopicsDirectoryMissing( String relativePath, ) { - return '默认主题目录不存在:$relativePath'; + return 'Default topics directory is missing: $relativePath'; } @override String diagnosticWritersideTopicsDirectoryMissing(String relativePath) { - return '配置的主题目录不存在:$relativePath'; + return 'Configured topics directory is missing: $relativePath'; } @override String diagnosticWritersideImagesDirectoryMissing(String relativePath) { - return '配置的图像目录不存在:$relativePath'; + return 'Configured images directory is missing: $relativePath'; } @override String diagnosticWritersideTopicDuplicateId(String id) { - return '元素 ID“$id”出现多次。'; + return 'Element id \"$id\" appears more than once.'; } @override String diagnosticWritersideTreeMissingTopic(String topic) { - return '目录引用了缺失的主题“$topic”。'; + return 'TOC references missing topic \"$topic\".'; } @override String diagnosticWritersideTreeInvalidHref(String href) { - return '外部 href“$href”无效。'; + return 'External href \"$href\" is invalid.'; } @override String diagnosticWritersideVariableUnresolved(String name) { - return '变量“%$name%”未声明。'; + return 'Variable \"%$name%\" is not declared.'; } @override String diagnosticWritersideTopicLinkUnresolved(String destination) { - return '主题链接“$destination”无法解析。'; + return 'Topic link \"$destination\" does not resolve.'; } @override @@ -2054,15 +2160,16 @@ class AppLocalizationsZh extends AppLocalizations { String anchor, String targetName, ) { - return '“$targetName”中不存在锚点“$anchor”。'; + return 'Anchor \"$anchor\" does not exist in \"$targetName\".'; } @override - String get diagnosticWritersideIncludeMissingFrom => ' 缺少 from。'; + String get diagnosticWritersideIncludeMissingFrom => + ' is missing the from attribute.'; @override String diagnosticWritersideIncludeSourceMissing(String from) { - return '包含源“$from”不存在。'; + return 'Include source \"$from\" does not exist.'; } @override @@ -2070,92 +2177,94 @@ class AppLocalizationsZh extends AppLocalizations { String elementId, String from, ) { - return '“$from”中不存在包含元素“$elementId”。'; + return 'Include element \"$elementId\" does not exist in \"$from\".'; } @override String diagnosticWritersideCategoryUnresolved(String ref) { - return 'seealso 类别“$ref”未声明。'; + return 'Seealso category \"$ref\" is not declared.'; } @override String diagnosticWritersideTopicAmbiguousReference(String reference) { - return '主题引用“$reference”不明确。'; + return 'Topic reference \"$reference\" is ambiguous.'; } @override String diagnosticUnknown(String code) { - return '未知诊断信息:$code'; + return 'Unknown diagnostic: $code'; } @override - String get close => '关闭'; + String get close => 'Close'; @override String get git => 'Git'; @override - String get gitDiff => 'Git 差异'; + String get gitDiff => 'Git diff'; @override - String get gitShowDiff => '显示差异'; + String get gitShowDiff => 'Show diff'; @override String gitDiffHunkRange(String oldRange, String newRange) { - return '旧 $oldRange → 新 $newRange'; + return 'old $oldRange → new $newRange'; } @override - String get gitDiffNoLines => '无行'; + String get gitDiffNoLines => 'no lines'; @override - String get gitUnavailableTitle => 'Git 不可用'; + String get gitUnavailableTitle => 'Git is unavailable'; @override String gitUnavailableMessage(String reason) { String _temp0 = intl.Intl.selectLogic(reason, { - 'other': '安装 Git,或配置 BusyMark 以使用可用的 Git 可执行文件。$reason', + 'other': + 'Install Git or configure BusyMark to use an available Git executable. $reason', }); return '$_temp0'; } @override - String get gitTrustRequiredTitle => '信任此工作区以使用 Git?'; + String get gitTrustRequiredTitle => 'Trust this workspace for Git?'; @override String get gitTrustRequiredMessage => - 'Git 存储库可以通过 hook、过滤器和其他配置运行程序。在 BusyMark 读取存储库数据或启用 Git 操作前,请先信任此工作区。'; + 'Git repositories can run programs through hooks, filters, and other configuration. Trust this workspace before BusyMark reads repository data or enables Git actions.'; @override - String get gitTrustWorkspace => '信任工作区'; + String get gitTrustWorkspace => 'Trust workspace'; @override - String get gitNotRepositoryTitle => '不是 Git 存储库'; + String get gitNotRepositoryTitle => 'Not a Git repository'; @override - String get gitNotRepositoryMessage => '此工作区不在 Git 存储库中。'; + String get gitNotRepositoryMessage => + 'This workspace is not inside a Git repository.'; @override - String get gitInitializeRepository => '初始化存储库'; + String get gitInitializeRepository => 'Initialize repository'; @override - String get gitDetachedHead => '分离的 HEAD'; + String get gitDetachedHead => 'Detached HEAD'; @override String gitDetachedHeadAt(String commit) { - return '分离于 $commit'; + return 'Detached at $commit'; } @override - String get gitNoUpstream => '没有上游分支'; + String get gitNoUpstream => 'No upstream'; @override String gitAheadCount(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 个未推送的提交', - one: '1 个未推送的提交', + other: '$count unpushed commits', + one: '1 unpushed commit', ); return '$_temp0'; } @@ -2165,35 +2274,35 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 个待拉取的提交', - one: '1 个待拉取的提交', + other: '$count commits to pull', + one: '1 commit to pull', ); return '$_temp0'; } @override - String get gitClean => '干净'; + String get gitClean => 'Clean'; @override - String get gitConflicts => '冲突'; + String get gitConflicts => 'Conflicts'; @override - String get gitChanges => '更改'; + String get gitChanges => 'Changes'; @override - String get gitStaged => '已暂存'; + String get gitStaged => 'Staged'; @override - String get gitUnstaged => '未暂存'; + String get gitUnstaged => 'Unstaged'; @override - String get gitHistory => '历史记录'; + String get gitHistory => 'History'; @override - String get gitBranches => '分支'; + String get gitBranches => 'Branches'; @override - String get gitActions => 'Git 操作'; + String get gitActions => 'Git actions'; @override String get gitPull => 'Pull'; @@ -2208,94 +2317,99 @@ class AppLocalizationsZh extends AppLocalizations { String get gitCommit => 'Commit'; @override - String get gitSelectForCommit => '暂存文件'; + String get gitSelectForCommit => 'Stage file'; @override - String get gitRemoveFromCommit => '取消暂存文件'; + String get gitRemoveFromCommit => 'Unstage file'; @override - String get gitDiscard => '还原'; + String get gitDiscard => 'Rollback'; @override - String get gitOpenFile => '打开文件'; + String get gitOpenFile => 'Open file'; @override - String get gitMarkResolved => '标记为已解决'; + String get gitMarkResolved => 'Mark resolved'; @override - String get gitUntracked => '未跟踪'; + String get gitUntracked => 'Untracked'; @override - String get gitCommitMessage => '提交消息'; + String get gitCommitMessage => 'Commit message'; @override - String get gitCommitSelectedFiles => '选中的文件'; + String get gitCommitSelectedFiles => 'Selected files'; @override - String get gitCommitNoSelectedFiles => '提交前至少暂存一个文件。'; + String get gitCommitNoSelectedFiles => + 'Stage at least one file before committing.'; @override String gitStagedFileCount(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count 个已暂存文件', - one: '1 个已暂存文件', + other: '$count staged files', + one: '1 staged file', ); return '$_temp0'; } @override - String get gitOutsideWorkspace => '工作区之外'; + String get gitOutsideWorkspace => 'Outside workspace'; @override - String get gitCommitMessageRequired => '请输入提交消息。'; + String get gitCommitMessageRequired => 'Enter a commit message.'; @override - String get gitCreateBranch => '创建分支'; + String get gitCreateBranch => 'Create branch'; @override - String get gitNewBranch => '新分支'; + String get gitNewBranch => 'New Branch'; @override - String get gitBranchName => '分支名称'; + String get gitBranchName => 'Branch name'; @override - String get gitSwitchBranch => '切换'; + String get gitSwitchBranch => 'Switch'; @override - String get gitNoChanges => '没有更改'; + String get gitNoChanges => 'No changes'; @override - String get gitNoHistory => '没有历史记录'; + String get gitNoHistory => 'No history'; @override - String get gitNoBranches => '没有分支'; + String get gitNoBranches => 'No branches'; @override - String get gitNoDiff => '没有可显示的差异'; + String get gitNoDiff => 'No diff to show'; @override - String get gitBinaryFile => '二进制文件。BusyMark 不渲染二进制补丁。'; + String get gitBinaryFile => + 'Binary file. BusyMark does not render binary patches.'; @override String gitBinaryFileInfo(int size) { - return '二进制文件($size 字节)。BusyMark 不渲染二进制补丁。'; + return 'Binary file ($size bytes). BusyMark does not render binary patches.'; } @override - String get gitUnsavedChangesBanner => '保存前不会包含未保存的编辑器更改。'; + String get gitUnsavedChangesBanner => + 'Unsaved editor changes are not included until saved.'; @override - String get gitConfirmDiscardTitle => '放弃 Git 更改?'; + String get gitConfirmDiscardTitle => 'Discard Git changes?'; @override String gitConfirmDiscardTracked(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。', - one: '选中的已跟踪文件中的所有已暂存和未暂存更改都将还原到 HEAD。', + other: + 'All staged and unstaged changes in the selected tracked files will be restored to HEAD.', + one: + 'All staged and unstaged changes in the selected tracked file will be restored to HEAD.', ); return '$_temp0'; } @@ -2305,8 +2419,8 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '选中的未跟踪文件将被删除。', - one: '选中的未跟踪文件将被删除。', + other: 'The selected untracked files will be deleted.', + one: 'The selected untracked file will be deleted.', ); return '$_temp0'; } @@ -2316,101 +2430,106 @@ class AppLocalizationsZh extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '将根据其 Git 状态还原或删除选中的文件。', - one: '将根据其 Git 状态还原或删除选中的文件。', + other: + 'The selected files will be restored or deleted based on their Git status.', + one: + 'The selected file will be restored or deleted based on its Git status.', ); return '$_temp0'; } @override String gitConfirmSwitchBranchTitle(String branch) { - return '切换到 $branch?'; + return 'Switch to $branch?'; } @override - String get gitConfirmSwitchBranchMessage => 'Git 切换分支后,BusyMark 将从磁盘重新加载工作区。'; + String get gitConfirmSwitchBranchMessage => + 'BusyMark will reload the workspace from disk after Git switches branches.'; @override - String get gitConfirmPushSetUpstreamTitle => '设置上游分支?'; + String get gitConfirmPushSetUpstreamTitle => 'Set upstream branch?'; @override String gitConfirmPushSetUpstreamMessage(String branch) { - return '此分支没有上游分支。当只配置了一个远程仓库时,BusyMark 可以推送 $branch 并设置其上游分支。'; + return 'This branch has no upstream. BusyMark can push $branch and set its upstream when exactly one remote is configured.'; } @override - String get gitProjectHistory => '项目历史记录'; + String get gitProjectHistory => 'Project History'; @override - String get gitFileHistory => '文件历史记录'; + String get gitFileHistory => 'File History'; @override - String get gitFileHistoryRequiresOpenFile => '文件历史记录需要打开的 Markdown 文件。'; + String get gitFileHistoryRequiresOpenFile => + 'File History requires an open Markdown file.'; @override - String get gitLoadMore => '加载更多'; + String get gitLoadMore => 'Load More'; @override - String get gitChangesInCommit => '此提交中的更改'; + String get gitChangesInCommit => 'Changes in this commit'; @override - String get gitCompareWithCurrent => '与当前版本比较'; + String get gitCompareWithCurrent => 'Compare with current'; @override - String get gitRestoreVersion => '还原此版本'; + String get gitRestoreVersion => 'Restore this version'; @override - String get gitConfirmRestoreTitle => '还原此文件版本?'; + String get gitConfirmRestoreTitle => 'Restore this file version?'; @override String get gitConfirmRestoreMessage => - 'BusyMark 将使用选中的已提交版本替换当前工作树中的文件。还原后的文件将保持未暂存状态。'; + 'BusyMark will replace the current working-tree file with the selected committed version. The restored file will remain unstaged.'; @override - String get gitCommitActions => '提交操作'; + String get gitCommitActions => 'Commit actions'; @override - String get gitResetCurrentBranchToHere => '将当前分支重置到此处…'; + String get gitResetCurrentBranchToHere => 'Reset current branch to here…'; @override String gitResetCurrentBranchTitle(String branch, String commit) { - return '将 $branch 重置到 $commit?'; + return 'Reset $branch to $commit?'; } @override String gitResetCurrentBranchMessage(String branch, String commit) { - return '这会将分支 $branch 移动到提交 $commit。请选择 Git 更新索引和工作树的方式。'; + return 'This moves branch $branch to commit $commit. Choose how Git updates the index and working tree.'; } @override - String get gitReset => '重置'; + String get gitReset => 'Reset'; @override - String get gitResetModeSoft => '软'; + String get gitResetModeSoft => 'Soft'; @override String get gitResetModeSoftDescription => - '仅移动分支。保持索引和工作树不变;与选中提交之间的差异仍会保持暂存状态。'; + 'Move the branch only. Keep the index and working tree unchanged; differences from the selected commit remain staged.'; @override - String get gitResetModeMixed => '混合'; + String get gitResetModeMixed => 'Mixed'; @override - String get gitResetModeMixedDescription => '移动分支并重置索引。保持工作树不变,使差异处于未暂存状态。'; + String get gitResetModeMixedDescription => + 'Move the branch and reset the index. Keep the working tree unchanged, leaving differences unstaged.'; @override - String get gitResetModeHard => '硬'; + String get gitResetModeHard => 'Hard'; @override String get gitResetModeHardDescription => - '移动分支并重置索引和工作树。已跟踪的更改将被放弃;造成阻碍的未跟踪文件可能会被删除。'; + 'Move the branch and reset the index and working tree. Tracked changes are discarded; obstructing untracked files may be deleted.'; @override - String get gitResetModeKeep => '保留'; + String get gitResetModeKeep => 'Keep'; @override String get gitResetModeKeepDescription => - '移动分支并重置已跟踪文件,同时保留本地更改。如果这些更改与重置冲突,Git 将中止操作。'; + 'Move the branch and reset tracked files while preserving local changes. Git aborts if those changes conflict with the reset.'; @override String gitAdditionsDeletions(int additions, int deletions) { @@ -2418,232 +2537,244 @@ class AppLocalizationsZh extends AppLocalizations { } @override - String get fileActions => '文件操作'; + String get fileActions => 'File actions'; @override - String get actions => '操作'; + String get actions => 'Actions'; @override - String get gitStatusAdded => '已添加'; + String get gitStatusAdded => 'Added'; @override - String get gitStatusDeleted => '已删除'; + String get gitStatusDeleted => 'Deleted'; @override - String get gitStatusRenamed => '已重命名'; + String get gitStatusRenamed => 'Renamed'; @override - String get gitStatusCopied => '已复制'; + String get gitStatusCopied => 'Copied'; @override - String get gitStatusUntracked => '未跟踪'; + String get gitStatusUntracked => 'Untracked'; @override - String get gitStatusConflicted => '有冲突'; + String get gitStatusConflicted => 'Conflicted'; @override - String get gitStatusIgnored => '已忽略'; + String get gitStatusIgnored => 'Ignored'; @override - String get gitStatusTypeChanged => '类型已更改'; + String get gitStatusTypeChanged => 'Type changed'; @override - String get gitStatusModified => '已修改'; + String get gitStatusModified => 'Modified'; @override - String get gitStatusUnknown => '未知'; + String get gitStatusUnknown => 'Unknown'; @override - String get gitErrorUnavailable => 'Git 不可用。'; + String get gitErrorUnavailable => 'Git is unavailable.'; @override - String get gitErrorNotRepository => '此工作区不是 Git 存储库。'; + String get gitErrorNotRepository => 'This workspace is not a Git repository.'; @override - String get gitErrorUnsafePath => 'BusyMark 阻止了不安全的 Git 路径。'; + String get gitErrorUnsafePath => 'BusyMark blocked an unsafe Git path.'; @override - String get gitErrorInvalidBranchName => '请输入有效的分支名称。'; + String get gitErrorInvalidBranchName => 'Enter a valid branch name.'; @override - String get gitErrorNoRemote => '未配置 Git 远程仓库。'; + String get gitErrorNoRemote => 'No Git remote is configured.'; @override - String get gitErrorNoUpstream => '未配置上游分支。'; + String get gitErrorNoUpstream => 'No upstream branch is configured.'; @override - String get gitErrorMultipleRemotes => '配置了多个远程仓库。请在此 BusyMark 版本之外选择上游分支。'; + String get gitErrorMultipleRemotes => + 'Multiple remotes are configured. Choose an upstream outside this BusyMark version.'; @override - String get gitErrorDirtyWorkspace => '切换分支前,请保存或放弃 BusyMark 编辑器中的更改。'; + String get gitErrorDirtyWorkspace => + 'Save or discard BusyMark editor changes before switching branches.'; @override - String get gitErrorResetDirtyWorkspace => '重置当前分支前,请保存或放弃 BusyMark 编辑器中的更改。'; + String get gitErrorResetDirtyWorkspace => + 'Save or discard BusyMark editor changes before resetting the current branch.'; @override - String get gitErrorRestoreStagedFile => '还原历史版本前,请取消暂存此文件。'; + String get gitErrorRestoreStagedFile => + 'Unstage this file before restoring a historical version.'; @override - String get gitErrorResetDetachedHead => '重置前请先检出一个分支。'; + String get gitErrorResetDetachedHead => + 'Check out a branch before resetting it.'; @override - String get gitErrorDiverged => '分支已发生分歧。请在此 BusyMark 版本之外解决合并或变基问题。'; + String get gitErrorDiverged => + 'Branch has diverged. Resolve merge or rebase outside this BusyMark version.'; @override - String get gitErrorAuthorIdentity => 'Git 需要作者姓名和邮箱地址才能提交。'; + String get gitErrorAuthorIdentity => + 'Git needs an author name and email address before it can commit.'; @override - String get gitAuthorIdentityTitle => 'Git 作者身份'; + String get gitAuthorIdentityTitle => 'Git Author Identity'; @override String get gitAuthorIdentityMessage => - '请输入 Git 应记录在提交中的身份信息。BusyMark 将保存它并重试此次提交。'; + 'Enter the identity Git should record on commits. BusyMark will save it and retry this commit.'; @override - String get gitAuthorName => '姓名'; + String get gitAuthorName => 'Name'; @override String get gitAuthorEmail => 'Email'; @override - String get gitAuthorIdentityGlobal => '用于所有存储库'; + String get gitAuthorIdentityGlobal => 'Use for all repositories'; @override String get gitAuthorIdentityGlobalDescription => - '作为 Snap 安装时,此设置适用于在 BusyMark 中打开的存储库。'; + 'When installed as a Snap, this applies to repositories opened in BusyMark.'; @override - String get gitSaveIdentityAndCommit => '保存并提交'; + String get gitSaveIdentityAndCommit => 'Save and Commit'; @override - String get gitErrorAuthentication => 'Git 身份验证失败。'; + String get gitErrorAuthentication => 'Git authentication failed.'; @override - String get gitErrorNetwork => 'Git 网络操作失败。'; + String get gitErrorNetwork => 'Git network operation failed.'; @override - String get gitErrorConflict => 'Git 报告存在未解决的冲突。'; + String get gitErrorConflict => 'Git reported unresolved conflicts.'; @override - String get gitErrorCommandFailed => 'Git 命令失败。'; + String get gitErrorCommandFailed => 'Git command failed.'; @override - String get markdownAndHtml => 'Markdown 和 HTML'; + String get markdownAndHtml => 'Markdown and HTML'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown 块'; + String get markdownHtmlMarkdownBlocks => 'Markdown Blocks'; @override - String get markdownHtmlMarkdownBlocksDescription => 'Markdown 源代码和预览中支持的块结构。'; + String get markdownHtmlMarkdownBlocksDescription => + 'Block structures supported in Markdown source and preview.'; @override - String get markdownHtmlInlineFormatting => '行内 Markdown'; + String get markdownHtmlInlineFormatting => 'Inline Markdown'; @override - String get markdownHtmlInlineFormattingDescription => '可出现在段落、列表项和表格单元格中的格式。'; + String get markdownHtmlInlineFormattingDescription => + 'Formatting that can appear inside paragraphs, list items, and table cells.'; @override - String get markdownHtmlRawHtmlBlocks => '原始 HTML 块'; + String get markdownHtmlRawHtmlBlocks => 'Raw HTML Blocks'; @override String get markdownHtmlRawHtmlBlocksDescription => - '通过 BusyMark 预览组件渲染的安全块级 HTML 标签。'; + 'Safe block-level HTML tags rendered through BusyMark preview widgets.'; @override - String get markdownHtmlRawHtmlInline => '原始 HTML 行内标签'; + String get markdownHtmlRawHtmlInline => 'Raw HTML Inline Tags'; @override String get markdownHtmlRawHtmlInlineDescription => - '安全的行内 HTML 标签,渲染时不会显示字面标签。'; + 'Safe inline HTML tags rendered without showing literal tags.'; @override - String get markdownHtmlSafety => '安全规则'; + String get markdownHtmlSafety => 'Safety Rules'; @override - String get markdownHtmlSafetyDescription => '原始 HTML 会在预览前进行解析和清理。'; + String get markdownHtmlSafetyDescription => + 'Raw HTML is parsed and sanitized before preview rendering.'; @override - String get markdownHtmlHeadings => '标题'; + String get markdownHtmlHeadings => 'Headings'; @override - String get markdownHtmlParagraphs => '段落'; + String get markdownHtmlParagraphs => 'Paragraphs'; @override - String get markdownHtmlLists => '列表'; + String get markdownHtmlLists => 'Lists'; @override - String get markdownHtmlHtmlContainers => '容器'; + String get markdownHtmlHtmlContainers => 'Containers'; @override - String get markdownHtmlHtmlTextBlocks => '文本块'; + String get markdownHtmlHtmlTextBlocks => 'Text blocks'; @override - String get markdownHtmlHtmlFigures => '图和图像'; + String get markdownHtmlHtmlFigures => 'Figures and images'; @override - String get markdownHtmlHtmlPreformatted => '预格式化代码'; + String get markdownHtmlHtmlPreformatted => 'Preformatted code'; @override - String get markdownHtmlHtmlDisclosure => '折叠块'; + String get markdownHtmlHtmlDisclosure => 'Disclosure blocks'; @override - String get markdownHtmlHtmlDescriptionLists => '描述列表'; + String get markdownHtmlHtmlDescriptionLists => 'Description lists'; @override - String get markdownHtmlHtmlFormattingTags => '格式标签'; + String get markdownHtmlHtmlFormattingTags => 'Formatting tags'; @override - String get markdownHtmlHtmlInlineCodeTags => '行内代码标签'; + String get markdownHtmlHtmlInlineCodeTags => 'Inline code tags'; @override - String get markdownHtmlHtmlNeutralInlineTags => '语义文本标签'; + String get markdownHtmlHtmlNeutralInlineTags => 'Semantic text tags'; @override - String get markdownHtmlSanitizedPreview => '已清理的预览'; + String get markdownHtmlSanitizedPreview => 'Sanitized preview'; @override String get markdownHtmlSanitizedPreviewDescription => - '允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。'; + 'Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.'; @override - String get markdownHtmlSourcePreserved => '保留源代码'; + String get markdownHtmlSourcePreserved => 'Source is preserved'; @override String get markdownHtmlSourcePreservedDescription => - '未经编辑的原始 HTML 会按源文本原样保存。'; + 'Unedited raw HTML is saved back exactly as source text.'; @override - String get markdownHtmlMarkdownInsideHtml => 'HTML 内的 Markdown'; + String get markdownHtmlMarkdownInsideHtml => 'Markdown inside HTML'; @override String get markdownHtmlMarkdownInsideHtmlDescription => - '原始 HTML 内的 Markdown 标记会按字面文本渲染。'; + 'Markdown markers inside raw HTML render as literal text.'; @override - String get markdownHtmlBlockedContent => '被阻止的活动内容'; + String get markdownHtmlBlockedContent => 'Blocked active content'; @override String get markdownHtmlBlockedContentDescription => - '脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。'; + 'Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.'; @override - String get markdownHtmlSafeUrls => '仅允许安全 URL'; + String get markdownHtmlSafeUrls => 'Safe URLs only'; @override String get markdownHtmlSafeUrlsDescription => - '链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。'; + 'Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.'; @override - String get exportAsPdf => '导出为 PDF'; + String get exportAsPdf => 'Export as PDF'; @override - String get pdfExportDescription => '选择页面布局,生成精美且自包含的 PDF。'; + String get pdfExportDescription => + 'Choose the page layout for a polished, self-contained PDF.'; @override - String get pdfRemoteImagesNote => '导出过程中不会下载远程图像。有可用的本地图像时将包含它们。'; + String get pdfRemoteImagesNote => + 'Remote images are not downloaded during export. Local images are included when available.'; @override - String get pdfPageSize => '页面大小'; + String get pdfPageSize => 'Page size'; @override String get pdfPageSizeA4 => 'A4'; @@ -2652,380 +2783,406 @@ class AppLocalizationsZh extends AppLocalizations { String get pdfPageSizeLetter => 'Letter'; @override - String get pdfOrientation => '方向'; + String get pdfOrientation => 'Orientation'; @override - String get pdfPortrait => '纵向'; + String get pdfPortrait => 'Portrait'; @override - String get pdfLandscape => '横向'; + String get pdfLandscape => 'Landscape'; @override - String get pdfMargins => '页边距'; + String get pdfMargins => 'Margins'; @override - String get pdfMarginNarrow => '窄'; + String get pdfMarginNarrow => 'Narrow'; @override - String get pdfMarginNormal => '普通'; + String get pdfMarginNormal => 'Normal'; @override - String get pdfMarginWide => '宽'; + String get pdfMarginWide => 'Wide'; @override - String get pdfIncludePageNumbers => '包含页码'; + String get pdfIncludePageNumbers => 'Include page numbers'; @override - String get export => '导出'; + String get export => 'Export'; @override - String get exportingPdf => '正在导出 PDF…'; + String get exportingPdf => 'Exporting PDF…'; @override - String get fileTypePdf => 'PDF 文档'; + String get fileTypePdf => 'PDF document'; @override String pdfExported(String fileName) { - return '已导出 $fileName。'; + return '$fileName was exported.'; } @override String pdfExportedWithWarnings(String fileName, int count) { - return '已导出 $fileName,包含 $count 条警告。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count warnings', + one: '1 warning', + ); + return '$fileName was exported with $_temp0.'; } @override - String get pdfExportUnavailable => '缺少 PDF 导出组件。请重新安装 BusyMark 后重试。'; + String get pdfExportUnavailable => + 'The PDF export component is missing. Reinstall BusyMark and try again.'; @override - String get pdfExportTimedOut => 'PDF 导出耗时过长,已停止。'; + String get pdfExportTimedOut => 'PDF export took too long and was stopped.'; @override - String get pdfExportFailed => 'BusyMark 无法将此文档导出为 PDF。'; + String get pdfExportFailed => + 'BusyMark could not export this document as PDF.'; @override - String get visualizationRendering => '正在渲染…'; + String get visualizationRendering => 'Rendering…'; @override - String get visualizationStale => '正在显示上次有效的渲染结果'; + String get visualizationStale => 'Showing the last valid render'; @override - String get visualizationShowSource => '显示源代码'; + String get visualizationShowSource => 'Show source'; @override - String get visualizationShowRender => '显示渲染结果'; + String get visualizationShowRender => 'Show render'; @override - String get visualizationFitWidth => '适应宽度'; + String get visualizationFitWidth => 'Fit to width'; @override - String get visualizationSaveImage => '保存图像'; + String get visualizationSaveImage => 'Save image'; @override - String get visualizationCopyImage => '复制图像'; + String get visualizationCopyImage => 'Copy image'; @override - String get visualizationImageCopied => '图像已复制'; + String get visualizationImageCopied => 'Image copied'; @override - String get visualizationOpenApiReference => '打开 API 参考'; + String get visualizationOpenApiReference => 'Open API Reference'; @override - String get visualizationValid => '有效'; + String get visualizationValid => 'Valid'; @override - String get visualizationInvalid => '无效'; + String get visualizationInvalid => 'Invalid'; @override - String get visualizationServers => '服务器'; + String get visualizationServers => 'Servers'; @override - String get visualizationPaths => '路径'; + String get visualizationPaths => 'Paths'; @override - String get visualizationOperations => '操作'; + String get visualizationOperations => 'Operations'; @override - String get visualizationTags => '标签'; + String get visualizationTags => 'Tags'; @override - String get visualizationNoOperations => '没有匹配的操作'; + String get visualizationNoOperations => 'No matching operations'; @override - String get visualizationSearchOperations => '搜索操作'; + String get visualizationSearchOperations => 'Search operations'; @override - String get visualizationRenderFailed => '无法渲染此可视化内容。'; + String get visualizationRenderFailed => + 'This visualization could not be rendered.'; @override - String get visualizationRetry => '重试'; + String get visualizationRetry => 'Retry'; @override String visualizationSaved(String fileName) { - return '已保存 $fileName'; + return 'Saved $fileName'; } @override - String get shortcutExportPdfDescription => '将当前文档或 Writerside 模块导出为 PDF。'; + String get shortcutExportPdfDescription => + 'Export the active document or Writerside module as a PDF.'; @override - String get instances => '实例'; + String get instances => 'Instances'; @override - String get newInstance => '新建实例'; + String get newInstance => 'New instance'; @override - String get newTocLibrary => '新建目录库'; + String get newTocLibrary => 'New TOC library'; @override - String get editInstance => '编辑实例'; + String get editInstance => 'Edit instance'; @override - String get openTocFile => '打开目录文件'; + String get openTocFile => 'Open TOC file'; @override - String get createInstance => '创建实例'; + String get createInstance => 'Create instance'; @override - String get createTocLibrary => '创建目录库'; + String get createTocLibrary => 'Create TOC library'; @override - String get instanceContent => '内容'; + String get instanceContent => 'Content'; @override - String get instanceContentSource => '创建来源'; + String get instanceContentSource => 'Create from'; @override - String get emptyInstance => '空实例'; + String get emptyInstance => 'Empty instance'; @override - String get markdownFiles => '本地 Markdown 文件'; + String get markdownFiles => 'Local Markdown files'; @override - String get chooseMarkdownFolder => '选择 Markdown 文件夹'; + String get chooseMarkdownFolder => 'Choose Markdown folder'; @override String get errorWritersideInstanceImportSourceRequired => - '选择包含 Markdown 文件的文件夹。'; + 'Choose a folder containing Markdown files.'; @override - String get instanceAppearance => '外观'; + String get instanceAppearance => 'Appearance'; @override - String get instanceColor => '图标颜色'; + String get instanceColor => 'Icon color'; @override - String get instanceVersion => '版本'; + String get instanceVersion => 'Version'; @override String instanceVersionInherited(String version) { - return '此字段为空时,项目版本为 $version。'; + return 'The project version is $version when this field is empty.'; } @override - String get instanceWebPath => 'Web 路径'; + String get instanceWebPath => 'Web path'; @override - String get instanceStatus => '状态'; + String get instanceStatus => 'Status'; @override - String get instanceStatusRelease => '发布'; + String get instanceStatusRelease => 'Release'; @override - String get instanceStatusEap => '抢先体验'; + String get instanceStatusEap => 'Early access'; @override - String get instanceStatusDeprecated => '已弃用'; + String get instanceStatusDeprecated => 'Deprecated'; @override - String get allowSearchEngineIndexing => '允许搜索引擎建立索引'; + String get allowSearchEngineIndexing => 'Allow search engine indexing'; @override - String get allowSearchEngineIndexingDescription => '允许外部搜索引擎为此输出建立索引。'; + String get allowSearchEngineIndexingDescription => + 'Allow external search engines to index this output.'; @override - String get offlineArtifact => '离线构件'; + String get offlineArtifact => 'Offline artifact'; @override - String get offlineArtifactDescription => '捆绑资源,使构建的文档可以自包含。'; + String get offlineArtifactDescription => + 'Bundle resources so the built documentation is self-contained.'; @override - String get instanceOutputSettings => '输出设置'; + String get instanceOutputSettings => 'Output settings'; @override - String get markdownImportSource => 'Markdown 源'; + String get markdownImportSource => 'Markdown source'; @override - String get markdownImportFiles => 'Markdown 文件'; + String get markdownImportFiles => 'Markdown files'; @override - String get selectNone => '全部取消选择'; + String get selectNone => 'Select none'; @override String markdownFilesFound(int count) { - return '找到 $count 个 Markdown 文件'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Markdown files found', + one: '1 Markdown file found', + ); + return '$_temp0'; } @override - String get noMarkdownFilesFound => '在此目录中未找到 Markdown 文件。'; + String get noMarkdownFilesFound => + 'No Markdown files were found in this directory.'; @override - String get copyReferencedMedia => '复制引用的媒体'; + String get copyReferencedMedia => 'Copy referenced media'; @override - String get copyReferencedMediaDescription => '复制选中文件引用的本地图像和视频,同时保留相对路径。'; + String get copyReferencedMediaDescription => + 'Copy local images and video referenced by the selected files while preserving relative paths.'; @override - String get instanceIdRenameWarningTitle => '重命名实例 ID?'; + String get instanceIdRenameWarningTitle => 'Rename instance ID?'; @override String instanceIdRenameWarning(String oldId, String newId) { - return 'BusyMark 将重命名 .tree 文件,并将 Writerside 项目引用从“$oldId”更新为“$newId”。发布脚本不会更改,必须单独更新。'; + return 'BusyMark will rename the .tree file and update Writerside project references from “$oldId” to “$newId”. Publication scripts are not changed and must be updated separately.'; } @override - String get renameAndUpdateReferences => '重命名并更新引用'; + String get renameAndUpdateReferences => 'Rename and update references'; @override - String get tocLibraryDescription => '目录库用于存储可复用的节,不会生成自己的输出。'; + String get tocLibraryDescription => + 'A TOC library stores reusable sections and does not produce its own output.'; @override - String get defaultTocLibraryName => '共享目录'; + String get defaultTocLibraryName => 'Shared TOC'; @override - String get instanceColorAutomatic => '自动'; + String get instanceColorAutomatic => 'Automatic'; @override - String get instanceColorBlue => '蓝色'; + String get instanceColorBlue => 'Blue'; @override - String get instanceColorGreen => '绿色'; + String get instanceColorGreen => 'Green'; @override - String get instanceColorOrange => '橙色'; + String get instanceColorOrange => 'Orange'; @override - String get instanceColorPurple => '紫色'; + String get instanceColorPurple => 'Purple'; @override - String get instanceColorRed => '红色'; + String get instanceColorRed => 'Red'; @override - String get instanceColorTeal => '青绿色'; + String get instanceColorTeal => 'Teal'; @override - String get instanceColorYellow => '黄色'; + String get instanceColorYellow => 'Yellow'; @override - String get errorWritersideInstanceNameRequired => '请输入实例名称。'; + String get errorWritersideInstanceNameRequired => 'Enter an instance name.'; @override String errorWritersideInstanceIdExists(String id) { - return '已存在 ID 为“$id”的实例。'; + return 'An instance with ID “$id” already exists.'; } @override String errorWritersideInstanceTreeExists(String path) { - return '实例树已存在:$path'; + return 'The instance tree already exists: $path'; } @override String errorWritersideInstanceImportSourceMissing(String path) { - return 'Markdown 源目录不存在:$path'; + return 'The Markdown source directory does not exist: $path'; } @override String get errorWritersideInstanceImportSelectionRequired => - '请选择至少一个 Markdown 文件进行导入。'; + 'Select at least one Markdown file to import.'; @override String errorWritersideInstanceImportFileInvalid(String path) { - return '选中的源中有一个不是可读取的 Markdown 文件:$path'; + return 'This is not a readable Markdown file inside the selected source: $path'; } @override String errorWritersideInstanceImportTargetExists(String path) { - return '导入将覆盖现有项目文件:$path'; + return 'Import would overwrite an existing project file: $path'; } @override - String get errorWritersideInstanceFilesChanged => '实例文件已在磁盘上发生变化。请查看后重试。'; + String get errorWritersideInstanceFilesChanged => + 'Instance files changed on disk. Review them and try again.'; @override String errorWritersideInstanceRollbackFailed(String paths) { - return 'BusyMark 无法完全回滚实例更改。请在继续前查看这些文件:$paths'; + return 'BusyMark could not completely roll back the instance change. Review these files before continuing: $paths'; } @override - String get errorWritersideInstanceLibraryImport => '目录库无法导入 Markdown 主题。'; + String get errorWritersideInstanceLibraryImport => + 'A TOC library cannot import Markdown topics.'; @override - String get errorWritersideInstanceWebPathInvalid => 'Web 路径必须为单行文本。'; + String get errorWritersideInstanceWebPathInvalid => + 'The web path must be a single line.'; @override String get errorWritersideInstanceConfigurationInvalid => - 'Writerside 实例配置无效。请修正其诊断信息后重试。'; + 'The Writerside instance configuration is invalid. Correct its diagnostics and try again.'; @override - String get errorWritersideInstanceTemporaryFile => 'BusyMark 无法安全暂存实例更改。'; + String get errorWritersideInstanceTemporaryFile => + 'BusyMark could not stage the instance changes safely.'; @override String diagnosticWritersideTreeInvalidStatus(String status) { - return '未知的实例状态“$status”。请使用 release、eap 或 deprecated。'; + return 'Unknown instance status “$status”. Use release, eap, or deprecated.'; } @override String diagnosticWritersideDuplicateInstanceId(String id) { - return '实例 ID“$id”被多个树文件使用。'; + return 'The instance ID “$id” is used by more than one tree file.'; } @override String get diagnosticWritersideBuildProfilesInvalidRoot => - 'buildprofiles.xml 必须包含 根元素。'; + 'buildprofiles.xml must have a root element.'; @override String diagnosticWritersideBuildProfilesInvalidBoolean( String name, String value, ) { - return '$name 值“$value”必须为 true 或 false。'; + return 'The $name value “$value” must be true or false.'; } @override String get diagnosticWritersideBuildProfileMissingInstance => - ' 元素必须指定实例 ID。'; + 'A element must specify an instance ID.'; @override String get diagnosticWritersideTreeInvalidInclude => - '树中的 必须同时指定 from 和 element-id。'; + 'A tree must specify both from and element-id.'; @override String get diagnosticWritersideTreeMissingSnippetId => - '树中的 必须指定 id。'; + 'A tree must specify an id.'; @override String get diagnosticWritersideTreeInvalidCrossInstanceReference => - '跨实例目录引用必须同时指定 ref 和 in。'; + 'A cross-instance TOC reference must specify both ref and in.'; @override String get diagnosticWritersideTreeConflictingTargets => - '目录元素不能同时指向多个主题、引用、链接或重定向。'; + 'A TOC element cannot target more than one topic, reference, link, or redirect.'; @override String diagnosticWritersideTreeDuplicateElementId(String id) { - return '树元素 ID“$id”被声明了多次。'; + return 'Tree element ID “$id” is declared more than once.'; } @override String get diagnosticWritersideInstanceGroupsInvalidRoot => - '实例组文件必须包含 根元素。'; + 'The instance groups file must have an root element.'; @override - String get diagnosticWritersideInstanceGroupInvalid => '实例组必须指定非空 ID 和实例列表。'; + String get diagnosticWritersideInstanceGroupInvalid => + 'An instance group must specify a non-empty id and instances list.'; @override String diagnosticWritersideInstanceGroupDuplicateId(String id) { - return '实例组 ID“$id”被声明了多次。'; + return 'Instance group ID “$id” is declared more than once.'; } @override @@ -3034,7 +3191,7 @@ class AppLocalizationsZh extends AppLocalizations { String id, String origin, ) { - return '目录包含项“$source#$id”属于外部模块“$origin”,无法在此工作区中展开。'; + return 'TOC include “$source#$id” belongs to external module “$origin” and cannot be expanded in this workspace.'; } @override @@ -3042,22 +3199,22 @@ class AppLocalizationsZh extends AppLocalizations { String source, String id, ) { - return '已注册树“$source”中不存在树元素“$id”。'; + return 'Tree element “$id” does not exist in registered tree “$source”.'; } @override String diagnosticWritersideTreeCircularInclude(String source, String id) { - return '树包含项“$source#$id”创建了循环。'; + return 'Tree include “$source#$id” creates a cycle.'; } @override String diagnosticWritersideUnknownInstanceGroup(String group) { - return '实例条件引用了未知组“@$group”。'; + return 'Instance condition references unknown group “@$group”.'; } @override String diagnosticWritersideReferenceInstanceMissing(String instance) { - return '跨实例引用指向未知实例“$instance”。'; + return 'Cross-instance reference targets unknown instance “$instance”.'; } @override @@ -3065,293 +3222,329 @@ class AppLocalizationsZh extends AppLocalizations { String topic, String instance, ) { - return '主题“$topic”不在被引用的实例“$instance”中。'; + return 'Topic “$topic” is not in referenced instance “$instance”.'; } @override - String get download => '下载'; + String get download => 'Download'; @override - String get exportWritersideAsPdf => '将 Writerside 导出为 PDF'; + String get exportWritersideAsPdf => 'Export Writerside as PDF'; @override - String get writersidePdfContent => '导出内容'; + String get writersidePdfContent => 'Export content'; @override - String get writersidePdfPage => '页面'; + String get writersidePdfPage => 'Page'; @override - String get exportingWritersidePdf => '正在导出 Writerside PDF…'; + String get exportingWritersidePdf => 'Exporting Writerside PDF…'; @override String get ai => 'AI'; @override - String get aiLocalOllama => '本地 Ollama'; + String get aiLocalOllama => 'Local Ollama'; @override - String get aiDisabled => '已禁用'; + String get aiDisabled => 'Disabled'; @override - String get aiLocalOnlyDescription => - 'AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。'; + String get aiExplicitEditingDescription => + 'AI editing is explicit. BusyMark sends only the context shown for the selected provider and never applies a proposal without review.'; @override - String get aiProvider => 'AI 提供商'; + String get aiProvider => 'AI provider'; @override - String get aiDefaultProvider => '默认提供商'; + String get aiDefaultProvider => 'Default provider'; @override - String get aiConfigureProvider => '配置提供商'; + String get aiConfigureProvider => 'Configure provider'; @override - String get aiChooseProvider => '选择 AI 提供商'; + String get aiChooseProvider => 'Choose AI provider'; @override - String get aiOllamaEndpoint => 'Ollama 端点'; + String get aiOllamaEndpoint => 'Ollama endpoint'; @override - String get aiOllamaModel => 'Ollama 模型'; + String get aiOllamaModel => 'Ollama model'; @override - String get aiTestConnection => '测试连接'; + String get aiTestConnection => 'Test connection'; @override - String get aiTestingConnection => '正在测试…'; + String get aiTestingConnection => 'Testing…'; @override String aiConnectionReady(int count) { - return '已连接。找到 $count 个已安装模型。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count installed models found', + one: '1 installed model found', + ); + return 'Connected. $_temp0.'; } @override - String get aiNoModels => '未选择模型。'; + String get aiNoModels => 'No model selected.'; @override - String get aiConnectionFailed => 'BusyMark 无法验证 AI 文本生成。'; + String get aiConnectionFailed => + 'BusyMark could not verify AI text generation.'; @override - String get aiConfigureFirst => '请先在设置 → AI 中启用 AI 提供商并验证模型。'; + String get aiConfigureFirst => + 'Enable an AI provider and verify a model in Settings → AI.'; @override - String get aiEditWithAi => '使用 AI 编辑'; + String get aiEditWithAi => 'Edit with AI'; @override - String get aiRefineWithAi => '使用 AI 优化'; + String get aiRefineWithAi => 'Refine with AI'; @override - String get aiInstruction => '指令'; + String get aiInstruction => 'Instruction'; @override - String get aiChangeTarget => '可更改内容'; + String get aiChangeTarget => 'What may change'; @override - String get aiSharedContext => '与 AI 共享的上下文'; + String get aiSharedContext => 'Context shared with AI'; @override - String get aiTargetSelection => '选中的内容'; + String get aiTargetSelection => 'Selected content'; @override - String get aiTargetInsertAfterBlock => '插入到当前块之后'; + String get aiTargetInsertAfterBlock => 'Insert after current block'; @override - String get aiTargetCurrentBlock => '当前块'; + String get aiTargetCurrentBlock => 'Current block'; @override - String get aiTargetCurrentSection => '当前节'; + String get aiTargetCurrentSection => 'Current section'; @override - String get aiTargetCompleteDocument => '完整文档'; + String get aiTargetCompleteDocument => 'Complete document'; @override - String get aiContextNone => '没有文档上下文'; + String get aiContextNone => 'No document context'; @override - String get aiContextSelection => '选中的内容'; + String get aiContextSelection => 'Selected content'; @override - String get aiContextCurrentBlock => '当前块'; + String get aiContextCurrentBlock => 'Current block'; @override - String get aiContextCurrentSection => '当前节'; + String get aiContextCurrentSection => 'Current section'; @override - String get aiContextCompleteDocument => '完整文档'; + String get aiContextCompleteDocument => 'Complete document'; @override - String get aiGenerating => '正在生成建议…'; + String get aiGenerating => 'Generating proposal…'; @override - String get aiProposal => 'AI 建议'; + String get aiProposal => 'AI proposal'; @override - String get aiGenerateProposal => '生成建议'; + String get aiGenerateProposal => 'Generate proposal'; @override String aiContextDisclosure(int count) { - return '所选提供商将接收显示上下文中的 $count 个字符。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count characters', + one: '1 character', + ); + return 'The selected provider will receive $_temp0 from the displayed context.'; } @override - String get aiOriginal => '原始内容'; + String get aiOriginal => 'Original'; @override - String get aiSuggested => '建议内容'; + String get aiSuggested => 'Suggested'; @override - String get aiApplyProposal => '应用建议'; + String get aiApplyProposal => 'Apply proposal'; @override String aiTokenUsage(int input, int output) { - return '输入 token:$input · 输出 token:$output'; + return '$input input tokens · $output output tokens'; } @override - String get aiStaleProposal => '生成此建议期间文档发生了变化。请重新执行操作。'; + String get aiStaleProposal => + 'The document changed while this proposal was generated. Run the action again.'; @override - String get gitAiStagedChangesChanged => '生成此提交消息期间,已暂存的更改发生了变化。请重新执行操作。'; + String get gitAiStagedChangesChanged => + 'The staged changes changed while this commit message was generated. Run the action again.'; @override - String get aiViewContext => '查看已发送的上下文'; + String get aiViewContext => 'View context sent'; @override - String get aiReviewExactContent => '查看确切内容'; + String get aiReviewExactContent => 'Review exact content'; @override - String get aiContentToChange => '要更改的内容'; + String get aiContentToChange => 'Content to change'; @override - String get aiContentSentToAi => '发送给 AI 的内容'; + String get aiContentSentToAi => 'Content sent to AI'; @override - String get aiApiKey => 'API 密钥'; + String get aiApiKey => 'API key'; @override - String get aiApiKeyStoredHint => '密钥已存储在系统凭据存储中'; + String get aiApiKeyStoredHint => + 'A key is stored in the system credential store'; @override - String get aiApiKeyEnterHint => '输入提供商 API 密钥'; + String get aiApiKeyEnterHint => 'Enter a provider API key'; @override - String get aiReplaceApiKey => '替换 API 密钥'; + String get aiReplaceApiKey => 'Replace API key'; @override - String get aiSaveApiKey => '安全保存 API 密钥'; + String get aiSaveApiKey => 'Save API key securely'; @override - String get aiRemoveApiKey => '移除已保存的 API 密钥'; + String get aiRemoveApiKey => 'Remove saved API key'; @override - String get aiCredentialSaved => 'API 密钥已保存到系统凭据存储中。'; + String get aiCredentialSaved => + 'API key saved in the system credential store.'; @override - String get aiCredentialRemoved => '已移除保存的 API 密钥。'; + String get aiCredentialRemoved => 'The saved API key was removed.'; @override - String get aiModelRouting => '模型路由'; + String get aiModelRouting => 'Model routing'; @override - String get aiAutomaticRouting => '按任务自动选择'; + String get aiAutomaticRouting => 'Automatic by task'; @override - String get aiFixedModelRouting => '使用选中的模型'; + String get aiFixedModelRouting => 'Use selected model'; @override - String get aiPreferredModel => '首选模型'; + String get aiPreferredModel => 'Preferred model'; @override - String get aiModel => '模型'; + String get aiModel => 'Model'; @override String aiUsageThisMonth(int requests, int input, int output) { - return '$requests 个请求 · $input 个输入 token · $output 个输出 token'; + return '$requests requests · $input input tokens · $output output tokens'; } @override String aiCloudConsentTitle(String provider) { - return '将内容发送给 $provider?'; + return 'Send content to $provider?'; } @override String aiCloudConsentEnable(String provider) { - return '启用 $provider'; + return 'Enable $provider'; } @override String get aiCloudConsentMessage => - '只会发送每个 AI 审核对话框中显示的内容。请求不保存状态,建议需要审核,API 密钥存储在 Linux 系统凭据存储中。'; + 'Only content shown in each AI review dialog is sent. Requests are stateless, proposals require review, and the API key is stored in the Linux system credential store.'; @override String aiCloudConsentRequired(String provider) { - return '请先在设置 → AI 中确认与 $provider 共享数据。'; + return 'Confirm $provider data sharing in Settings → AI first.'; } @override String aiGenerationVerified(String model, int count) { - return '已通过 $model 验证生成能力。有 $count 个兼容模型可用。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count compatible models available', + one: '1 compatible model available', + ); + return 'Generation verified with $model. $_temp0.'; } @override - String get aiColdStartObserved => '检测到本地模型冷启动。'; + String get aiColdStartObserved => 'A local model cold start was observed.'; @override - String get aiNoCompatibleModels => '没有可用的兼容文本生成模型。'; + String get aiNoCompatibleModels => + 'No compatible text-generation model is available.'; @override - String get aiEnableProvider => '请先启用 AI 提供商。'; + String get aiEnableProvider => 'Enable an AI provider first.'; @override - String get aiDraftCommitMessage => '起草提交消息'; + String get aiDraftCommitMessage => 'Draft commit message'; @override - String get aiDrafting => '正在起草…'; + String get aiDrafting => 'Drafting…'; @override - String get aiDraftWithAi => '使用 AI 起草'; + String get aiDraftWithAi => 'Draft with AI'; @override - String get generateOrUpdateMarkdownToc => '生成/更新目录'; + String get generateOrUpdateMarkdownToc => 'Generate/update table of contents'; @override - String get markdownTocTitle => '目录'; + String get markdownTocTitle => 'Table of contents'; @override String markdownTocUpdated(int count) { - return '目录已更新,包含 $count 个条目。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count entries', + one: '1 entry', + ); + return 'Table of contents updated with $_temp0.'; } @override - String get markdownTocNoHeadings => '请先添加至少一个节标题,再生成目录。'; + String get markdownTocNoHeadings => + 'Add at least one section heading before generating a table of contents.'; @override - String get markdownTocMalformedMarkers => 'BusyMark 目录标记缺失、重复或顺序错误。'; + String get markdownTocMalformedMarkers => + 'The BusyMark table-of-contents markers are missing, duplicated, or out of order.'; @override String diagnosticMarkdownHeadingSkippedLevel(int level, int previousLevel) { - return '标题级别 $level 跟在级别 $previousLevel 之后;请检查节的嵌套结构。'; + return 'Heading level $level follows level $previousLevel; review the section nesting.'; } @override - String get diagnosticMarkdownLinkEmptyText => '链接文本为空;请提供能描述其用途的可访问名称。'; + String get diagnosticMarkdownLinkEmptyText => + 'Link text is empty; provide an accessible name that describes its purpose.'; @override String diagnosticMarkdownLinkReviewText(String text) { - return '请检查链接文本“$text”是否在上下文中描述了其用途。'; + return 'Review whether the link text “$text” describes its purpose in context.'; } @override - String get diagnosticMarkdownTableEmptyHeader => '表头单元格必须标识其列;请补全每个空表头。'; + String get diagnosticMarkdownTableEmptyHeader => + 'Table header cells must identify their columns; complete each empty header.'; @override - String get mathRenderFailed => '无法渲染数学表达式。'; + String get mathRenderFailed => + 'The mathematical expression could not be rendered.'; @override - String get inlineMath => '行内数学'; + String get inlineMath => 'Inline math'; @override - String get displayMath => '显示数学'; + String get displayMath => 'Display math'; } /// The translations for Chinese, as used in China (`zh_CN`). @@ -3410,7 +3603,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get feedbackSubject => '主题'; @override - String get feedbackMessage => '详细信息'; + String get feedbackMessage => '详细留言'; @override String get feedbackReplyEmail => '回复邮箱(可选)'; @@ -3661,7 +3854,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get languageItalian => 'Italiano'; @override - String get languageNorwegian => 'Norsk'; + String get languageNorwegian => 'Norsk bokmål'; @override String get languageFrench => 'Français'; @@ -6039,7 +6232,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { @override String pdfExportedWithWarnings(String fileName, int count) { - return '已导出 $fileName,包含 $count 条警告。'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count 条警告', + one: '1 条警告', + ); + return '$fileName 已导出,包含 $_temp0。'; } @override @@ -6441,7 +6640,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get aiDisabled => '已禁用'; @override - String get aiLocalOnlyDescription => + String get aiExplicitEditingDescription => 'AI 编辑需要明确发起。BusyMark 只会将所选提供商对应的显示上下文发送出去,且不会在未经审核的情况下应用建议。'; @override diff --git a/lib/src/app/app_locale.dart b/lib/src/app/app_locale.dart index 33e2647e..e883c57b 100644 --- a/lib/src/app/app_locale.dart +++ b/lib/src/app/app_locale.dart @@ -26,10 +26,13 @@ const busyMarkLocaleOptions = [ BusyMarkLocaleOption(locale: Locale('it'), endonym: 'Italiano'), BusyMarkLocaleOption(locale: Locale('ja'), endonym: '日本語'), BusyMarkLocaleOption(locale: Locale('ko'), endonym: '한국어'), - BusyMarkLocaleOption(locale: Locale('nb'), endonym: 'Norsk'), + BusyMarkLocaleOption(locale: Locale('nb'), endonym: 'Norsk bokmål'), BusyMarkLocaleOption(locale: Locale('nl'), endonym: 'Nederlands'), BusyMarkLocaleOption(locale: Locale('pl'), endonym: 'Polski'), - BusyMarkLocaleOption(locale: Locale('pt'), endonym: 'Português'), + BusyMarkLocaleOption( + locale: Locale.fromSubtags(languageCode: 'pt', countryCode: 'BR'), + endonym: 'Português', + ), BusyMarkLocaleOption(locale: Locale('ru'), endonym: 'Русский'), BusyMarkLocaleOption(locale: Locale('tr'), endonym: 'Türkçe'), BusyMarkLocaleOption(locale: Locale('uk'), endonym: 'Українська'), @@ -66,9 +69,21 @@ String? normalizeBusyMarkLocaleTag(String? tag) { return null; } + if (parsed.languageCode == 'zh') { + final isTraditional = parsed.scriptCode == 'Hant' || + parsed.countryCode == 'TW' || + parsed.countryCode == 'HK' || + parsed.countryCode == 'MO'; + if (isTraditional || + (parsed.countryCode != null && parsed.countryCode != 'CN')) { + return null; + } + return const Locale.fromSubtags(languageCode: 'zh', countryCode: 'CN') + .toLanguageTag(); + } + for (final option in busyMarkLocaleOptions) { - if (option.locale == parsed || - option.locale.languageCode == parsed.languageCode) { + if (option.locale == parsed || option.locale.languageCode == parsed.languageCode) { return option.tag; } } diff --git a/linux/io.busystack.busymark.desktop b/linux/io.busystack.busymark.desktop index fa36945a..80b17080 100644 --- a/linux/io.busystack.busymark.desktop +++ b/linux/io.busystack.busymark.desktop @@ -22,8 +22,8 @@ Name[pl]=BusyMark Comment[pl]=Edytor plików Markdown i projektów dokumentacji zgodnych z Writerside Name[es]=BusyMark Comment[es]=Editor de archivos Markdown y proyectos de documentación compatibles con Writerside -Name[pt]=BusyMark -Comment[pt]=Editor de arquivos Markdown e projetos de documentação compatíveis com o Writerside +Name[pt_BR]=BusyMark +Comment[pt_BR]=Editor de arquivos Markdown e projetos de documentação compatíveis com o Writerside Name[ar]=BusyMark Comment[ar]=محرر لملفات Markdown ومشاريع التوثيق المتوافقة مع Writerside Name[fa]=BusyMark diff --git a/linux/io.busystack.busymark.metainfo.xml b/linux/io.busystack.busymark.metainfo.xml index f81020ca..03c5b553 100644 --- a/linux/io.busystack.busymark.metainfo.xml +++ b/linux/io.busystack.busymark.metainfo.xml @@ -17,7 +17,7 @@ BusyMark BusyMark BusyMark - BusyMark + BusyMark BusyMark BusyMark BusyMark @@ -39,7 +39,7 @@ Редактор файлів Markdown і проєктів документації, сумісних із Writerside Edytor plików Markdown i projektów dokumentacji zgodnych z Writerside Editor de archivos Markdown y proyectos de documentación compatibles con Writerside - Editor de arquivos Markdown e projetos de documentação compatíveis com o Writerside + Editor de arquivos Markdown e projetos de documentação compatíveis com o Writerside محرر لملفات Markdown ومشاريع التوثيق المتوافقة مع Writerside ویرایشگر فایل‌های Markdown و پروژه‌های مستندسازی سازگار با Writerside Markdown फ़ाइलों और Writerside-संगत दस्तावेज़ीकरण परियोजनाओं का संपादक @@ -62,7 +62,7 @@

BusyMark — редактор для Linux, призначений для файлів Markdown і проєктів документації, сумісних із Writerside.

BusyMark to działający w systemie Linux edytor plików Markdown i projektów dokumentacji zgodnych z Writerside.

BusyMark es un editor de Linux para archivos Markdown y proyectos de documentación compatibles con Writerside.

-

BusyMark é um editor Linux para arquivos Markdown e projetos de documentação compatíveis com o Writerside.

+

BusyMark é um editor Linux para arquivos Markdown e projetos de documentação compatíveis com o Writerside.

BusyMark هو محرر Linux لملفات Markdown ومشاريع التوثيق المتوافقة مع Writerside.

BusyMark یک ویرایشگر لینوکس برای فایل‌های Markdown و پروژه‌های مستندسازی سازگار با Writerside است.

BusyMark Markdown फ़ाइलों और Writerside-संगत दस्तावेज़ीकरण परियोजनाओं के लिए एक Linux संपादक है।

diff --git a/test/src/app_smoke_test.dart b/test/src/app_smoke_test.dart index f0ad8781..8124bb7d 100644 --- a/test/src/app_smoke_test.dart +++ b/test/src/app_smoke_test.dart @@ -162,7 +162,10 @@ void main() { expect(app.supportedLocales, contains(const Locale('uk'))); expect(app.supportedLocales, contains(const Locale('pl'))); expect(app.supportedLocales, contains(const Locale('es'))); - expect(app.supportedLocales, contains(const Locale('pt'))); + expect( + app.supportedLocales, + contains(Locale.fromSubtags(languageCode: 'pt', countryCode: 'BR')), + ); expect(app.supportedLocales, contains(const Locale('ar'))); expect(app.supportedLocales, contains(const Locale('fa'))); expect(app.supportedLocales, contains(const Locale('hi'))); diff --git a/test/src/localization_audit_test.dart b/test/src/localization_audit_test.dart index 121c0c42..fddf716b 100644 --- a/test/src/localization_audit_test.dart +++ b/test/src/localization_audit_test.dart @@ -139,7 +139,7 @@ void main() { 'pl': 'Edytor plików Markdown i projektów dokumentacji zgodnych z ' 'Writerside', - 'pt': + 'pt_BR': 'Editor de arquivos Markdown e projetos de documentação compatíveis ' 'com o Writerside', 'ru': @@ -151,7 +151,6 @@ void main() { 'vi': 'Trình biên tập tệp Markdown và các dự án tài liệu tương thích với ' 'Writerside', - 'zh': 'Markdown 文件和兼容 Writerside 的文档项目编辑器', 'zh-CN': 'Markdown 文件和兼容 Writerside 的文档项目编辑器', }; @@ -413,12 +412,19 @@ Iterable _productionDartFiles() sync* { Iterable _arbFiles() sync* { for (final entity in Directory('lib/l10n').listSync()) { - if (entity is File && entity.path.endsWith('.arb')) { + if (entity is File && + entity.path.endsWith('.arb') && + !_isFlutterFallbackArb(entity)) { yield entity; } } } +bool _isFlutterFallbackArb(File file) { + final name = file.uri.pathSegments.last; + return name == 'app_pt.arb' || name == 'app_zh.arb'; +} + Map _arbMessages(File file) { return jsonDecode(file.readAsStringSync()) as Map; } @@ -555,7 +561,7 @@ List _targetArbLocales() { continue; } final locale = match.group(1)!; - if (locale != 'en') { + if (locale != 'en' && locale != 'pt' && locale != 'zh') { locales.add(locale); } } @@ -702,7 +708,7 @@ const _localeSpecificEnglishMatches = >{ }, 'nb': {'systemTheme', 'systemLanguage', 'gitCommit', 'instanceStatus'}, 'pl': {'folder', 'foldKindTag', 'aiModel'}, - 'pt': { + 'pt_BR': { 'editor', 'link', 'toc', @@ -764,6 +770,5 @@ const _localeSpecificEnglishMatches = >{ 'aiModel', }, 'vi': {'tab', 'gitFetch', 'gitCommit', 'gitAuthorEmail', 'pdfPageSizeLetter'}, - 'zh': {'gitFetch', 'gitCommit', 'gitAuthorEmail', 'pdfPageSizeLetter'}, 'zh_CN': {'gitFetch', 'gitCommit', 'gitAuthorEmail', 'pdfPageSizeLetter'}, }; From bec3e9d22a8aecf4f096f93743a7194e595e0b08 Mon Sep 17 00:00:00 2001 From: albert Date: Sat, 29 Aug 2026 20:04:56 -0700 Subject: [PATCH 03/11] translation fixes --- lib/l10n/app_ar.arb | 10 ++-- lib/l10n/app_it.arb | 2 +- lib/l10n/app_ko.arb | 4 +- lib/l10n/app_nl.arb | 16 +++--- lib/l10n/app_pl.arb | 6 +-- lib/l10n/app_pt_BR.arb | 20 ++++---- lib/l10n/app_ru.arb | 8 +-- lib/l10n/app_uk.arb | 8 +-- lib/l10n/generated/app_localizations_ar.dart | 44 +++++++++++++---- lib/l10n/generated/app_localizations_it.dart | 2 +- lib/l10n/generated/app_localizations_ko.dart | 6 +-- lib/l10n/generated/app_localizations_nl.dart | 52 +++++++++++++++++--- lib/l10n/generated/app_localizations_pl.dart | 18 +++++-- lib/l10n/generated/app_localizations_pt.dart | 32 ++++++++---- lib/l10n/generated/app_localizations_ru.dart | 24 +++++++-- lib/l10n/generated/app_localizations_uk.dart | 24 +++++++-- 16 files changed, 197 insertions(+), 79 deletions(-) diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 245b8556..bcab9276 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -2814,7 +2814,7 @@ "gitStaged": "مُرحَّلة", "gitUnstaged": "غير مُرحَّلة", "gitFetch": "جلب", - "gitStagedFileCount": "{count, plural, =1{ملف مُرحَّل واحد} =2{ملفان مرحّلان} few{{count} ملفات مرحّلة} many{{count} ملفات مرحّلة} other{{count} ملفات مرحّلة}}", + "gitStagedFileCount": "{count, plural, =1{ملف مُرحَّل واحد} =2{ملفان مرحّلان} few{{count} ملفات مرحّلة} many{{count} ملفًا مُرحّلًا} other{{count} ملف مُرحّل}}", "gitOutsideWorkspace": "خارج مساحة العمل", "gitFileHistoryRequiresOpenFile": "يتطلب سجل الملف فتح ملف Markdown.", "gitLoadMore": "تحميل المزيد", @@ -2957,7 +2957,7 @@ "aiGenerating": "جارٍ إنشاء الاقتراح…", "aiProposal": "اقتراح الذكاء الاصطناعي", "aiGenerateProposal": "إنشاء الاقتراح", - "aiContextDisclosure": "سيتلقى المزوّد المحدد ⁨{count}⁩ حرفًا من السياق المعروض.", + "aiContextDisclosure": "{count, plural, zero{لن يتلقى المزوّد المحدد أي أحرف من السياق المعروض.} one{سيتلقى المزوّد المحدد حرفًا واحدًا من السياق المعروض.} two{سيتلقى المزوّد المحدد حرفين من السياق المعروض.} few{سيتلقى المزوّد المحدد ⁨{count}⁩ أحرف من السياق المعروض.} many{سيتلقى المزوّد المحدد ⁨{count}⁩ حرفًا من السياق المعروض.} other{سيتلقى المزوّد المحدد ⁨{count}⁩ حرف من السياق المعروض.}}", "aiOriginal": "النص الأصلي", "aiSuggested": "النص المقترح", "aiApplyProposal": "تطبيق الاقتراح", @@ -3040,11 +3040,11 @@ "reloadFromDisk": "إعادة التحميل من القرص", "keepMine": "الاحتفاظ بنسختي", "saveAs": "حفظ باسم", - "unsavedChangesMultipleMessage": "{count, plural, =1{يوجد 1 مستند يحتوي على تغييرات غير محفوظة. احفظه قبل المتابعة؟} other{{count} مستندات تحتوي على تغييرات غير محفوظة. احفظها قبل المتابعة؟}}", + "unsavedChangesMultipleMessage": "{count, plural, zero{لا توجد مستندات ذات تغييرات غير محفوظة.} one{يوجد مستند واحد يحتوي على تغييرات غير محفوظة. احفظه قبل المتابعة؟} two{يوجد مستندان يحتويان على تغييرات غير محفوظة. احفظهما قبل المتابعة؟} few{توجد تغييرات غير محفوظة في ⁨{count}⁩ مستندات. احفظها قبل المتابعة؟} many{توجد تغييرات غير محفوظة في ⁨{count}⁩ مستندًا. احفظها قبل المتابعة؟} other{توجد تغييرات غير محفوظة في ⁨{count}⁩ مستند. احفظها قبل المتابعة؟}}", "workspaceReplaceIssuePartialConflict": "توقف التراجع لأن الملف تغير بالتزامن. قد تبقى بعض الاستبدالات؛ حُفظ المحتوى المُزاح في المسار أدناه.", "workspaceReplaceIssueApplyFailed": "لم تُطبّق أي استبدالات لأن المجموعة التي تمت مراجعتها تعذر حفظها بأمان.", - "workspaceRecoveryRestored": "{count, plural, =1{تم استعادة مستند غير محفوظ واحد. راجعه قبل الحفظ أو تجاهله.} other{تم استعادة {count} مستندات غير محفوظة. راجع كل واحد قبل الحفظ أو تجاهله.}}", - "workspaceRecoveryDamaged": "{count, plural, =1{تعذر استعادة سجل استعادة تالف واحد. تم الاحتفاظ بملف الاسترداد الأصلي للفحص.} other{تعذر استعادة {count} سجلات استرداد تالف. لا تزال سجلات الاسترداد الصالحة متاحة.}}", + "workspaceRecoveryRestored": "{count, plural, zero{لم تتم استعادة أي مستندات غير محفوظة.} one{تمت استعادة مستند واحد غير محفوظ. راجعه قبل حفظه أو تجاهله.} two{تمت استعادة مستندين غير محفوظين. راجعهما قبل حفظهما أو تجاهلهما.} few{تمت استعادة ⁨{count}⁩ مستندات غير محفوظة. راجع كل مستند قبل حفظه أو تجاهله.} many{تمت استعادة ⁨{count}⁩ مستندًا غير محفوظ. راجع كل مستند قبل حفظه أو تجاهله.} other{تمت استعادة ⁨{count}⁩ مستند غير محفوظ. راجع كل مستند قبل حفظه أو تجاهله.}}", + "workspaceRecoveryDamaged": "{count, plural, zero{لا توجد سجلات استعادة تالفة.} one{تعذر استعادة سجل استعادة تالف واحد. تم الاحتفاظ بملف الاسترداد الأصلي للفحص.} two{تعذر استعادة سجلَّي استعادة تالفين. لا تزال سجلات الاسترداد الصالحة متاحة.} few{تعذر استعادة ⁨{count}⁩ سجلات استعادة تالفة. لا تزال سجلات الاسترداد الصالحة متاحة.} many{تعذر استعادة ⁨{count}⁩ سجل استعادة تالفًا. لا تزال سجلات الاسترداد الصالحة متاحة.} other{تعذر استعادة ⁨{count}⁩ سجل استعادة تالف. لا تزال سجلات الاسترداد الصالحة متاحة.}}", "recoveredDocumentReview": "تمت استعادة المحتوى غير المحفوظ للملف {fileName}. راجعه، ثم احفظه أو احفظه باسم جديد أو تجاهله.", "commandUnavailableInContext": "هذا الأمر غير متاح في السياق الحالي.", "mathRenderFailed": "تعذر عرض التعبير الرياضي.", diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 5366a75c..91a29704 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -1422,7 +1422,7 @@ "description": "Status banner shown when source highlighting and folding are disabled for a large file." }, "nothingToRead": "Nessun contenuto da leggere", - "admonition": "Avviso", + "admonition": "Nota", "quote": "Citazione", "@nothingToRead": { "description": "Empty state shown when there is no content to read." diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index 5c8efe69..b09639c0 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -946,7 +946,7 @@ "@closeUnsavedChangesSingleMessage": { "description": "Window close confirmation message when one document has unsaved changes." }, - "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?} =1{미저장 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?} other{미저장 문서가 {count}개 있습니다. 계속하기 전에 저장하시겠습니까?}}", + "closeUnsavedChangesMultipleMessage": "{count, plural, =0{BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?} =1{미저장 문서가 1개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?} other{미저장 문서가 {count}개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?}}", "@closeUnsavedChangesMultipleMessage": { "description": "Window close confirmation message when multiple documents have unsaved changes.", "placeholders": { @@ -1587,7 +1587,7 @@ "@refactoringOptions": { "description": "Heading for Writerside topic removal options." }, - "updateUsagesAutomatically": "참조 사용량을 자동으로 업데이트", + "updateUsagesAutomatically": "참조 위치를 자동으로 업데이트", "@updateUsagesAutomatically": { "description": "Option to rewrite Writerside topic usages during removal." }, diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 77b92956..f725ec9c 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -1826,7 +1826,7 @@ "@workspaceReplaceDiskContent": { "description": "Source label for a workspace replacement preview using disk content." }, - "selectFileMatches": "Selecteer alle {count} overeenkomsten", + "selectFileMatches": "{count, plural, =1{Alle 1 overeenkomst selecteren} other{Alle {count} overeenkomsten selecteren}}", "@selectFileMatches": { "description": "Checkbox label for selecting every replacement match in a file.", "placeholders": { @@ -2605,7 +2605,7 @@ } } }, - "diagnosticWritersideTreeMissingStartPage": "Niet-bibliotheekinstantie mist startpagina.", + "diagnosticWritersideTreeMissingStartPage": "Bij de niet-bibliotheekinstantie ontbreekt het attribuut start-page.", "@diagnosticWritersideTreeMissingStartPage": { "description": "Writerside parser diagnostic for a tree missing start-page." }, @@ -2855,7 +2855,7 @@ } } }, - "diagnosticWritersideIncludeMissingFrom": " ontbreekt in het from-attribuut.", + "diagnosticWritersideIncludeMissingFrom": "Het attribuut from ontbreekt in .", "@diagnosticWritersideIncludeMissingFrom": { "description": "Writerside module diagnostic for an include without a from attribute." }, @@ -3925,7 +3925,7 @@ "@selectNone": { "description": "Action that clears all items in a multiple selection." }, - "markdownFilesFound": "{count} Markdown-bestand(en) gevonden", + "markdownFilesFound": "{count, plural, =1{1 Markdown-bestand gevonden} other{{count} Markdown-bestanden gevonden}}", "@markdownFilesFound": { "description": "Count of discovered Markdown import files.", "placeholders": { @@ -4301,7 +4301,7 @@ "@aiTestingConnection": { "description": "Status while BusyMark verifies the configured AI provider and model." }, - "aiConnectionReady": "Verbonden. {count} geïnstalleerde modellen gevonden.", + "aiConnectionReady": "Verbonden. {count, plural, =1{1 geïnstalleerd model gevonden} other{{count} geïnstalleerde modellen gevonden}}.", "@aiConnectionReady": { "description": "Successful Ollama connection status.", "placeholders": { @@ -4352,7 +4352,7 @@ "@aiGenerateProposal": { "description": "Button that starts generation after the user reviews the AI instruction, change target, and shared context." }, - "aiContextDisclosure": "De geselecteerde provider ontvangt {count} tekens uit de weergegeven context.", + "aiContextDisclosure": "De geselecteerde provider ontvangt {count, plural, =1{1 teken} other{{count} tekens}} uit de weergegeven context.", "@aiContextDisclosure": { "description": "Disclosure of AI context size.", "placeholders": { @@ -4507,7 +4507,7 @@ } } }, - "aiGenerationVerified": "Generatie geverifieerd met {model}. {count} compatibele model(len) beschikbaar.", + "aiGenerationVerified": "Generatie geverifieerd met {model}. {count, plural, =1{1 compatibel model is} other{{count} compatibele modellen zijn}} beschikbaar.", "@aiGenerationVerified": { "description": "Successful AI model generation qualification.", "placeholders": { @@ -4551,7 +4551,7 @@ "@markdownTocTitle": { "description": "Heading inserted above a generated Markdown table of contents." }, - "markdownTocUpdated": "Inhoudsopgave bijgewerkt met {count} vermeldingen.", + "markdownTocUpdated": "Inhoudsopgave bijgewerkt met {count, plural, =1{1 vermelding} other{{count} vermeldingen}}.", "@markdownTocUpdated": { "description": "Confirmation after generating a Markdown table of contents.", "placeholders": { diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 4fc73cd9..855c2769 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -3066,11 +3066,11 @@ "reloadFromDisk": "Wczytaj ponownie z dysku", "keepMine": "Zachowaj moją wersję", "saveAs": "Zapisz jako", - "unsavedChangesMultipleMessage": "{count, plural, =1{1 dokument ma niezapisane zmiany. Zapisz go przed kontynuowaniem.} other{{count} dokumenty mają niezapisane zmiany. Zapisz każdy przed kontynuowaniem.}}", + "unsavedChangesMultipleMessage": "{count, plural, one{1 dokument ma niezapisane zmiany. Zapisz go przed kontynuowaniem.} few{{count} dokumenty mają niezapisane zmiany. Zapisz je przed kontynuowaniem.} many{{count} dokumentów ma niezapisane zmiany. Zapisz je przed kontynuowaniem.} other{{count} dokumentu ma niezapisane zmiany. Zapisz je przed kontynuowaniem.}}", "workspaceReplaceIssuePartialConflict": "Wycofywanie zatrzymano, ponieważ plik został jednocześnie zmieniony. Niektóre zamiany mogą pozostać; zastąpioną zawartość zachowano w poniższej ścieżce.", "workspaceReplaceIssueApplyFailed": "Nie zastosowano żadnych zamian, ponieważ sprawdzonego zestawu nie można było bezpiecznie zapisać.", - "workspaceRecoveryRestored": "{count, plural, =1{Przywrócono 1 dokument bez zapisania. Przed zapisaniem lub usunięciem sprawdź go.} other{Przywrócono {count} dokumentów bez zapisania. Sprawdź każdy przed zapisaniem lub usunięciem.}}", - "workspaceRecoveryDamaged": "{count, plural, =1{Nie udało się przywrócić 1 uszkodzonego rekordu odzyskiwania. Oryginalny plik odzyskiwania zachowano do przeglądu.} other{Nie udało się przywrócić {count} uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.}}", + "workspaceRecoveryRestored": "{count, plural, one{Odzyskano 1 niezapisany dokument. Przejrzyj go przed zapisaniem lub odrzuceniem.} few{Odzyskano {count} niezapisane dokumenty. Przejrzyj każdy przed zapisaniem lub odrzuceniem.} many{Odzyskano {count} niezapisanych dokumentów. Przejrzyj każdy przed zapisaniem lub odrzuceniem.} other{Odzyskano {count} niezapisanego dokumentu. Przejrzyj go przed zapisaniem lub odrzuceniem.}}", + "workspaceRecoveryDamaged": "{count, plural, one{Nie udało się przywrócić 1 uszkodzonego rekordu odzyskiwania. Oryginalny plik odzyskiwania zachowano do przeglądu.} few{Nie udało się przywrócić {count} uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.} many{Nie udało się przywrócić {count} uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.} other{Nie udało się przywrócić {count} uszkodzonego rekordu odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.}}", "recoveredDocumentReview": "Odzyskano niezapisaną treść pliku {fileName}. Przejrzyj ją, a następnie zapisz, zapisz jako lub odrzuć.", "commandUnavailableInContext": "To polecenie nie jest dostępne w bieżącym kontekście.", "mathRenderFailed": "Nie udało się wyrenderować wyrażenia matematycznego.", diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index 5cf5d654..0f2a15b2 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -14,7 +14,7 @@ "feedbackIncludeTechnicalDetails": "Incluir detalhes técnicos", "feedbackTechnicalDetailsDisclosure": "Quando esta opção está ativada, adiciona apenas a versão do sistema operacional Linux e o locale do BusyMark. Nenhum log, arquivo, dados de conta ou outro diagnóstico é anexado.", "feedbackSubmit": "Enviar", - "feedbackSubmitting": "A enviar…", + "feedbackSubmitting": "Enviando…", "feedbackCategoryRequired": "Escolha uma categoria.", "feedbackSubjectLength": "O assunto deve ter entre 3 e 120 caracteres.", "feedbackMessageLength": "A mensagem deve ter entre 10 e 5000 caracteres.", @@ -1422,7 +1422,7 @@ "description": "Status banner shown when source highlighting and folding are disabled for a large file." }, "nothingToRead": "Nenhum conteúdo para ler", - "admonition": "Aviso", + "admonition": "Observação", "quote": "Citação", "@nothingToRead": { "description": "Empty state shown when there is no content to read." @@ -2787,7 +2787,7 @@ "@pdfExportFailed": { "description": "Generic PDF export failure message." }, - "visualizationRendering": "A renderizar…", + "visualizationRendering": "Renderizando…", "visualizationStale": "A mostrar a última renderização válida", "visualizationShowSource": "Mostrar código-fonte", "visualizationShowRender": "Mostrar renderização", @@ -2865,14 +2865,14 @@ "allowSearchEngineIndexing": "Permitir indexação por motores de pesquisa", "allowSearchEngineIndexingDescription": "Permita que motores de pesquisa externos indexem esta saída.", "offlineArtifact": "Artefacto offline", - "offlineArtifactDescription": "Inclua os recursos para que a documentação gerada seja autónoma.", + "offlineArtifactDescription": "Inclua os recursos para que a documentação gerada funcione de forma autônoma.", "instanceOutputSettings": "Definições de saída", "markdownImportSource": "Origem Markdown", "markdownImportFiles": "Ficheiros Markdown", "selectNone": "Não selecionar nenhum", - "markdownFilesFound": "Foram encontrados {count} arquivo(s) Markdown", + "markdownFilesFound": "{count, plural, =1{Foi encontrado 1 arquivo Markdown} other{Foram encontrados {count} arquivos Markdown}}", "noMarkdownFilesFound": "Não foram encontrados arquivos Markdown neste diretório.", - "copyReferencedMedia": "Copiar multimédia referenciada", + "copyReferencedMedia": "Copiar mídia referenciada", "copyReferencedMediaDescription": "Copie imagens e vídeos locais referenciados pelos arquivos selecionados, preservando os caminhos relativos.", "instanceIdRenameWarningTitle": "Mudar o nome do ID da instância?", "instanceIdRenameWarning": "O BusyMark vai renomear o arquivo .tree e atualizar as referências do projeto Writerside de “{oldId}” para “{newId}”. Os scripts de publicação não são alterados e devem ser atualizados separadamente.", @@ -2901,7 +2901,7 @@ "errorWritersideInstanceConfigurationInvalid": "A configuração da instância do Writerside é inválida. Corrija os diagnósticos e tente novamente.", "errorWritersideInstanceTemporaryFile": "O BusyMark não conseguiu preparar com segurança as alterações da instância.", "diagnosticWritersideTreeInvalidStatus": "Estado de instância desconhecido “{status}”. Use release, eap ou deprecated.", - "diagnosticWritersideDuplicateInstanceId": "O ID de instância “{id}” é usado por mais de um ficheiro de árvore.", + "diagnosticWritersideDuplicateInstanceId": "O ID de instância “{id}” é usado por mais de um arquivo de árvore.", "diagnosticWritersideBuildProfilesInvalidRoot": "buildprofiles.xml deve ter um elemento raiz .", "diagnosticWritersideBuildProfilesInvalidBoolean": "O valor {name} “{value}” deve ser true ou false.", "diagnosticWritersideBuildProfileMissingInstance": "Um elemento deve especificar um ID de instância.", @@ -2910,7 +2910,7 @@ "diagnosticWritersideTreeInvalidCrossInstanceReference": "Uma referência de sumário entre instâncias deve especificar ref e in.", "diagnosticWritersideTreeConflictingTargets": "Um elemento do sumário não pode apontar para mais do que um tópico, referência, link ou redirecionamento.", "diagnosticWritersideTreeDuplicateElementId": "O ID de elemento da árvore “{id}” foi declarado mais de uma vez.", - "diagnosticWritersideInstanceGroupsInvalidRoot": "O ficheiro de grupos de instâncias deve ter um elemento raiz .", + "diagnosticWritersideInstanceGroupsInvalidRoot": "O arquivo de grupos de instâncias deve ter um elemento raiz .", "diagnosticWritersideInstanceGroupInvalid": "Um grupo de instâncias deve especificar um id e uma lista de instâncias não vazios.", "diagnosticWritersideInstanceGroupDuplicateId": "O ID do grupo de instâncias “{id}” foi declarado mais de uma vez.", "diagnosticWritersideExternalTreeInclude": "A inclusão de sumário “{source}#{id}” pertence ao módulo externo “{origin}” e não pode ser expandida neste espaço de trabalho.", @@ -2935,7 +2935,7 @@ "aiOllamaModel": "Modelo do Ollama", "aiTestConnection": "Testar conexão", "aiTestingConnection": "Testando…", - "aiConnectionReady": "Conectado. {count} modelo(s) instalado(s) encontrado(s).", + "aiConnectionReady": "Conectado. {count, plural, =1{Foi encontrado 1 modelo instalado} other{Foram encontrados {count} modelos instalados}}.", "aiNoModels": "Nenhum modelo selecionado.", "aiConnectionFailed": "O BusyMark não conseguiu verificar a geração de texto por IA.", "aiConfigureFirst": "Ative um provedor de IA e verifique um modelo em Configurações → IA.", @@ -3041,7 +3041,7 @@ "keepMine": "Manter minha versão", "saveAs": "Salvar como", "unsavedChangesMultipleMessage": "{count, plural, =1{Há 1 documento com alterações não salvas. Deseja salvá-lo antes de continuar?} other{{count} documentos com alterações não salvas. Deseja salvá-los antes de continuar?}}", - "workspaceReplaceIssuePartialConflict": "A reversão foi interrompida porque o ficheiro foi alterado em simultâneo. Algumas substituições podem permanecer; o conteúdo deslocado foi preservado no caminho abaixo.", + "workspaceReplaceIssuePartialConflict": "A reversão foi interrompida porque o arquivo foi alterado simultaneamente. Algumas substituições podem permanecer; o conteúdo deslocado foi preservado no caminho abaixo.", "workspaceReplaceIssueApplyFailed": "Nenhuma substituição foi aplicada porque o conjunto revisado não pôde ser salvo com segurança.", "workspaceRecoveryRestored": "{count, plural, =1{1 documento sem salvamento recuperado. Revise antes de salvar ou descartar.} other{{count} documentos sem salvamento recuperados. Revise cada um antes de salvar ou descartar.}}", "workspaceRecoveryDamaged": "{count, plural, =1{1 registro de recuperação danificado não pôde ser restaurado. O arquivo de recuperação original foi preservado para inspeção.} other{{count} registros de recuperação danificados não puderam ser restaurados. Os registros de recuperação válidos permanecem disponíveis.}}", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index db874c3d..27575e8c 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -2333,7 +2333,7 @@ "gitBinaryFile": "Двоичный файл. BusyMark не отображает двоичные патчи.", "gitUnsavedChangesBanner": "Несохранённые изменения в редакторе не будут включены, пока вы их не сохраните.", "gitConfirmDiscardTitle": "Отменить изменения Git?", - "gitConfirmDiscardTracked": "{count, plural, =1{В выбранный отслеживаемый файл и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.} other{Во все выбранные отслеживаемые файлы и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.}}", + "gitConfirmDiscardTracked": "{count, plural, one{Все проиндексированные и непроиндексированные изменения в выбранном отслеживаемом файле будут отменены, а файл будет восстановлен до состояния HEAD.} few{Все проиндексированные и непроиндексированные изменения в выбранных отслеживаемых файлах будут отменены, а файлы будут восстановлены до состояния HEAD.} many{Все проиндексированные и непроиндексированные изменения в выбранных отслеживаемых файлах будут отменены, а файлы будут восстановлены до состояния HEAD.} other{Все проиндексированные и непроиндексированные изменения в выбранных отслеживаемых файлах будут отменены, а файлы будут восстановлены до состояния HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, one{Выбранный неотслеживаемый файл будет удалён.} few{Выбранные неотслеживаемые файлы будут удалены.} many{Выбранные неотслеживаемые файлы будут удалены.} other{Выбранные неотслеживаемые файлы будут удалены.}}", "gitConfirmDiscardMixed": "{count, plural, one{Выбранный файл будет восстановлен или удалён в зависимости от его статуса Git.} few{Выбранные файлы будут восстановлены или удалены в зависимости от их статуса Git.} many{Выбранные файлы будут восстановлены или удалены в зависимости от их статуса Git.} other{Выбранные файлы будут восстановлены или удалены в зависимости от их статуса Git.}}", "gitConfirmSwitchBranchTitle": "Переключиться на {branch}?", @@ -3066,11 +3066,11 @@ "reloadFromDisk": "Перезагрузить с диска", "keepMine": "Оставить мою версию", "saveAs": "Сохранить как", - "unsavedChangesMultipleMessage": "{count, plural, =1{1 документ содержит несохранённые изменения. Сохраните его перед продолжением.} other{{count} документа содержат несохранённые изменения. Сохраните каждое перед продолжением.}}", + "unsavedChangesMultipleMessage": "{count, plural, one{1 документ содержит несохранённые изменения. Сохраните его перед продолжением.} few{{count} документа содержат несохранённые изменения. Сохраните их перед продолжением.} many{{count} документов содержат несохранённые изменения. Сохраните их перед продолжением.} other{{count} документа содержит несохранённые изменения. Сохраните их перед продолжением.}}", "workspaceReplaceIssuePartialConflict": "Откат остановлен, поскольку файл был одновременно изменён. Некоторые замены могли сохраниться; вытесненное содержимое сохранено по указанному ниже пути.", "workspaceReplaceIssueApplyFailed": "Замены не применены, поскольку проверенный набор не удалось безопасно сохранить.", - "workspaceRecoveryRestored": "{count, plural, =1{Восстановлен 1 несохранённый документ. Проверьте его перед сохранением или отменой.} other{Восстановлено {count} несохранённых документов. Проверьте каждый перед сохранением или отменой.}}", - "workspaceRecoveryDamaged": "{count, plural, =1{Не удалось восстановить 1 повреждённую запись восстановления. Оригинальный файл восстановления сохранён для проверки.} other{{count} повреждённых записей восстановления не удалось восстановить. Корректные записи восстановления остаются доступны.}}", + "workspaceRecoveryRestored": "{count, plural, one{Восстановлен 1 несохранённый документ. Проверьте его перед сохранением или отменой.} few{Восстановлено {count} несохранённых документа. Проверьте каждый перед сохранением или отменой.} many{Восстановлено {count} несохранённых документов. Проверьте каждый перед сохранением или отменой.} other{Восстановлено {count} несохранённого документа. Проверьте его перед сохранением или отменой.}}", + "workspaceRecoveryDamaged": "{count, plural, one{Не удалось восстановить 1 повреждённую запись восстановления. Оригинальный файл восстановления сохранён для проверки.} few{Не удалось восстановить {count} повреждённые записи восстановления. Корректные записи восстановления остаются доступны.} many{Не удалось восстановить {count} повреждённых записей восстановления. Корректные записи восстановления остаются доступны.} other{Не удалось восстановить {count} повреждённой записи восстановления. Корректные записи восстановления остаются доступны.}}", "recoveredDocumentReview": "Восстановлено несохранённое содержимое файла {fileName}. Проверьте его, затем сохраните, сохраните как новый файл или отбросьте.", "commandUnavailableInContext": "Эта команда недоступна в текущем контексте.", "mathRenderFailed": "Не удалось отобразить математическое выражение.", diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index 6071be66..ea40de79 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -2333,7 +2333,7 @@ "gitBinaryFile": "Двійковий файл. BusyMark не відображає двійкові патчі.", "gitUnsavedChangesBanner": "Незбережені зміни в редакторі не буде враховано, доки ви їх не збережете.", "gitConfirmDiscardTitle": "Відкинути зміни Git?", - "gitConfirmDiscardTracked": "{count, plural, =1{Усі індексовані та неіндексовані зміни у вибраному файлі з відстеженням будуть відновлені в HEAD.} other{Усі індексовані та неіндексовані зміни в обраних файлах з відстеженням будуть відновлені в HEAD.}}", + "gitConfirmDiscardTracked": "{count, plural, one{Усі індексовані та неіндексовані зміни у вибраному файлі з відстеженням буде скасовано, а файл буде відновлено до стану HEAD.} few{Усі індексовані та неіндексовані зміни у вибраних файлах з відстеженням буде скасовано, а файли буде відновлено до стану HEAD.} many{Усі індексовані та неіндексовані зміни у вибраних файлах з відстеженням буде скасовано, а файли буде відновлено до стану HEAD.} other{Усі індексовані та неіндексовані зміни у вибраних файлах з відстеженням буде скасовано, а файли буде відновлено до стану HEAD.}}", "gitConfirmDiscardUntracked": "{count, plural, one{Вибраний невідстежуваний файл буде видалено.} few{Вибрані невідстежувані файли буде видалено.} many{Вибрані невідстежувані файли буде видалено.} other{Вибрані невідстежувані файли буде видалено.}}", "gitConfirmDiscardMixed": "{count, plural, one{Вибраний файл буде відновлено або видалено залежно від його стану Git.} few{Вибрані файли буде відновлено або видалено залежно від їхнього стану Git.} many{Вибрані файли буде відновлено або видалено залежно від їхнього стану Git.} other{Вибрані файли буде відновлено або видалено залежно від їхнього стану Git.}}", "gitConfirmSwitchBranchTitle": "Перемкнутися на {branch}?", @@ -3066,11 +3066,11 @@ "reloadFromDisk": "Перезавантажити з диска", "keepMine": "Залишити мою версію", "saveAs": "Зберегти як", - "unsavedChangesMultipleMessage": "{count, plural, =1{1 документ має незбережені зміни. Збережіть його перед продовженням.} other{{count} документів мають незбережені зміни. Збережіть кожен перед продовженням.}}", + "unsavedChangesMultipleMessage": "{count, plural, one{1 документ має незбережені зміни. Збережіть його перед продовженням.} few{{count} документи мають незбережені зміни. Збережіть їх перед продовженням.} many{{count} документів мають незбережені зміни. Збережіть їх перед продовженням.} other{{count} документа має незбережені зміни. Збережіть їх перед продовженням.}}", "workspaceReplaceIssuePartialConflict": "Відкат зупинено, оскільки файл було одночасно змінено. Деякі заміни могли залишитися; витіснений вміст збережено за шляхом нижче.", "workspaceReplaceIssueApplyFailed": "Заміни не застосовано, оскільки перевірений набір не вдалося безпечно зберегти.", - "workspaceRecoveryRestored": "{count, plural, =1{Відновлено 1 незбережений документ. Перегляньте його перед збереженням або відхиленням.} other{Відновлено {count} незбережених документів. Перегляньте кожен перед збереженням або відхиленням.}}", - "workspaceRecoveryDamaged": "{count, plural, =1{Не вдалося відновити 1 пошкоджений запис відновлення. Оригінальний файл відновлення збережено для перегляду.} other{{count} пошкоджених записів відновлення не вдалося відновити. Дійсні записи відновлення залишаються доступними.}}", + "workspaceRecoveryRestored": "{count, plural, one{Відновлено 1 незбережений документ. Перегляньте його перед збереженням або відхиленням.} few{Відновлено {count} незбережені документи. Перегляньте кожен перед збереженням або відхиленням.} many{Відновлено {count} незбережених документів. Перегляньте кожен перед збереженням або відхиленням.} other{Відновлено {count} незбереженого документа. Перегляньте його перед збереженням або відхиленням.}}", + "workspaceRecoveryDamaged": "{count, plural, one{Не вдалося відновити 1 пошкоджений запис відновлення. Оригінальний файл відновлення збережено для перегляду.} few{Не вдалося відновити {count} пошкоджені записи відновлення. Дійсні записи відновлення залишаються доступними.} many{Не вдалося відновити {count} пошкоджених записів відновлення. Дійсні записи відновлення залишаються доступними.} other{Не вдалося відновити {count} пошкодженого запису відновлення. Дійсні записи відновлення залишаються доступними.}}", "recoveredDocumentReview": "Відновлено незбережений вміст файлу {fileName}. Перегляньте його, потім збережіть, збережіть як новий файл або відкиньте.", "commandUnavailableInContext": "Ця команда недоступна в поточному контексті.", "mathRenderFailed": "Не вдалося відобразити математичний вираз.", diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index 2651e933..8e74ae4b 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -801,9 +801,12 @@ class AppLocalizationsAr extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: - '$count مستندات تحتوي على تغييرات غير محفوظة. احفظها قبل المتابعة؟', - one: 'يوجد 1 مستند يحتوي على تغييرات غير محفوظة. احفظه قبل المتابعة؟', + other: 'توجد تغييرات غير محفوظة في ⁨$count⁩ مستند. احفظها قبل المتابعة؟', + many: 'توجد تغييرات غير محفوظة في ⁨$count⁩ مستندًا. احفظها قبل المتابعة؟', + few: 'توجد تغييرات غير محفوظة في ⁨$count⁩ مستندات. احفظها قبل المتابعة؟', + two: 'يوجد مستندان يحتويان على تغييرات غير محفوظة. احفظهما قبل المتابعة؟', + one: 'يوجد مستند واحد يحتوي على تغييرات غير محفوظة. احفظه قبل المتابعة؟', + zero: 'لا توجد مستندات ذات تغييرات غير محفوظة.', ); return '$_temp0'; } @@ -1700,8 +1703,14 @@ class AppLocalizationsAr extends AppLocalizations { count, locale: localeName, other: - 'تم استعادة $count مستندات غير محفوظة. راجع كل واحد قبل الحفظ أو تجاهله.', - one: 'تم استعادة مستند غير محفوظ واحد. راجعه قبل الحفظ أو تجاهله.', + 'تمت استعادة ⁨$count⁩ مستند غير محفوظ. راجع كل مستند قبل حفظه أو تجاهله.', + many: + 'تمت استعادة ⁨$count⁩ مستندًا غير محفوظ. راجع كل مستند قبل حفظه أو تجاهله.', + few: + 'تمت استعادة ⁨$count⁩ مستندات غير محفوظة. راجع كل مستند قبل حفظه أو تجاهله.', + two: 'تمت استعادة مستندين غير محفوظين. راجعهما قبل حفظهما أو تجاهلهما.', + one: 'تمت استعادة مستند واحد غير محفوظ. راجعه قبل حفظه أو تجاهله.', + zero: 'لم تتم استعادة أي مستندات غير محفوظة.', ); return '$_temp0'; } @@ -1712,9 +1721,16 @@ class AppLocalizationsAr extends AppLocalizations { count, locale: localeName, other: - 'تعذر استعادة $count سجلات استرداد تالف. لا تزال سجلات الاسترداد الصالحة متاحة.', + 'تعذر استعادة ⁨$count⁩ سجل استعادة تالف. لا تزال سجلات الاسترداد الصالحة متاحة.', + many: + 'تعذر استعادة ⁨$count⁩ سجل استعادة تالفًا. لا تزال سجلات الاسترداد الصالحة متاحة.', + few: + 'تعذر استعادة ⁨$count⁩ سجلات استعادة تالفة. لا تزال سجلات الاسترداد الصالحة متاحة.', + two: + 'تعذر استعادة سجلَّي استعادة تالفين. لا تزال سجلات الاسترداد الصالحة متاحة.', one: 'تعذر استعادة سجل استعادة تالف واحد. تم الاحتفاظ بملف الاسترداد الأصلي للفحص.', + zero: 'لا توجد سجلات استعادة تالفة.', ); return '$_temp0'; } @@ -2358,8 +2374,8 @@ class AppLocalizationsAr extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$count ملفات مرحّلة', - many: '$count ملفات مرحّلة', + other: '$count ملف مُرحّل', + many: '$count ملفًا مُرحّلًا', few: '$count ملفات مرحّلة', two: 'ملفان مرحّلان', one: 'ملف مُرحَّل واحد', @@ -3361,7 +3377,17 @@ class AppLocalizationsAr extends AppLocalizations { @override String aiContextDisclosure(int count) { - return 'سيتلقى المزوّد المحدد ⁨$count⁩ حرفًا من السياق المعروض.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'سيتلقى المزوّد المحدد ⁨$count⁩ حرف من السياق المعروض.', + many: 'سيتلقى المزوّد المحدد ⁨$count⁩ حرفًا من السياق المعروض.', + few: 'سيتلقى المزوّد المحدد ⁨$count⁩ أحرف من السياق المعروض.', + two: 'سيتلقى المزوّد المحدد حرفين من السياق المعروض.', + one: 'سيتلقى المزوّد المحدد حرفًا واحدًا من السياق المعروض.', + zero: 'لن يتلقى المزوّد المحدد أي أحرف من السياق المعروض.', + ); + return '$_temp0'; } @override diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 956fe1a5..3539e000 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1572,7 +1572,7 @@ class AppLocalizationsIt extends AppLocalizations { String get nothingToRead => 'Nessun contenuto da leggere'; @override - String get admonition => 'Avviso'; + String get admonition => 'Nota'; @override String get quote => 'Citazione'; diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart index 327c08be..f1671a23 100644 --- a/lib/l10n/generated/app_localizations_ko.dart +++ b/lib/l10n/generated/app_localizations_ko.dart @@ -738,8 +738,8 @@ class AppLocalizationsKo extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '미저장 문서가 $count개 있습니다. 계속하기 전에 저장하시겠습니까?', - one: '미저장 문서가 1개 있습니다. 계속하기 전에 저장하시겠습니까?', + other: '미저장 문서가 $count개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?', + one: '미저장 문서가 1개 있습니다. BusyMark를 닫기 전에 저장하시겠습니까?', zero: 'BusyMark를 닫기 전에 변경 사항을 저장하시겠습니까?', ); return '$_temp0'; @@ -1237,7 +1237,7 @@ class AppLocalizationsKo extends AppLocalizations { String get refactoringOptions => '리팩토링 옵션'; @override - String get updateUsagesAutomatically => '참조 사용량을 자동으로 업데이트'; + String get updateUsagesAutomatically => '참조 위치를 자동으로 업데이트'; @override String get updateUsagesAutomaticallyDescription => diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index 63401f55..5de52ea2 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -1456,7 +1456,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String selectFileMatches(int count) { - return 'Selecteer alle $count overeenkomsten'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Alle $count overeenkomsten selecteren', + one: 'Alle 1 overeenkomst selecteren', + ); + return '$_temp0'; } @override @@ -2008,7 +2014,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get diagnosticWritersideTreeMissingStartPage => - 'Niet-bibliotheekinstantie mist startpagina.'; + 'Bij de niet-bibliotheekinstantie ontbreekt het attribuut start-page.'; @override String diagnosticWritersideStartPageMissing(String startPage) { @@ -2167,7 +2173,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get diagnosticWritersideIncludeMissingFrom => - ' ontbreekt in het from-attribuut.'; + 'Het attribuut from ontbreekt in .'; @override String diagnosticWritersideIncludeSourceMissing(String from) { @@ -3012,7 +3018,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String markdownFilesFound(int count) { - return '$count Markdown-bestand(en) gevonden'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count Markdown-bestanden gevonden', + one: '1 Markdown-bestand gevonden', + ); + return '$_temp0'; } @override @@ -3280,7 +3292,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String aiConnectionReady(int count) { - return 'Verbonden. $count geïnstalleerde modellen gevonden.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count geïnstalleerde modellen gevonden', + one: '1 geïnstalleerd model gevonden', + ); + return 'Verbonden. $_temp0.'; } @override @@ -3350,7 +3368,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String aiContextDisclosure(int count) { - return 'De geselecteerde provider ontvangt $count tekens uit de weergegeven context.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count tekens', + one: '1 teken', + ); + return 'De geselecteerde provider ontvangt $_temp0 uit de weergegeven context.'; } @override @@ -3454,7 +3478,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String aiGenerationVerified(String model, int count) { - return 'Generatie geverifieerd met $model. $count compatibele model(len) beschikbaar.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count compatibele modellen zijn', + one: '1 compatibel model is', + ); + return 'Generatie geverifieerd met $model. $_temp0 beschikbaar.'; } @override @@ -3485,7 +3515,13 @@ class AppLocalizationsNl extends AppLocalizations { @override String markdownTocUpdated(int count) { - return 'Inhoudsopgave bijgewerkt met $count vermeldingen.'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: '$count vermeldingen', + one: '1 vermelding', + ); + return 'Inhoudsopgave bijgewerkt met $_temp0.'; } @override diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index 10a658a2..a4abf5b7 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -820,7 +820,11 @@ class AppLocalizationsPl extends AppLocalizations { count, locale: localeName, other: - '$count dokumenty mają niezapisane zmiany. Zapisz każdy przed kontynuowaniem.', + '$count dokumentu ma niezapisane zmiany. Zapisz je przed kontynuowaniem.', + many: + '$count dokumentów ma niezapisane zmiany. Zapisz je przed kontynuowaniem.', + few: + '$count dokumenty mają niezapisane zmiany. Zapisz je przed kontynuowaniem.', one: '1 dokument ma niezapisane zmiany. Zapisz go przed kontynuowaniem.', ); return '$_temp0'; @@ -1718,9 +1722,13 @@ class AppLocalizationsPl extends AppLocalizations { count, locale: localeName, other: - 'Przywrócono $count dokumentów bez zapisania. Sprawdź każdy przed zapisaniem lub usunięciem.', + 'Odzyskano $count niezapisanego dokumentu. Przejrzyj go przed zapisaniem lub odrzuceniem.', + many: + 'Odzyskano $count niezapisanych dokumentów. Przejrzyj każdy przed zapisaniem lub odrzuceniem.', + few: + 'Odzyskano $count niezapisane dokumenty. Przejrzyj każdy przed zapisaniem lub odrzuceniem.', one: - 'Przywrócono 1 dokument bez zapisania. Przed zapisaniem lub usunięciem sprawdź go.', + 'Odzyskano 1 niezapisany dokument. Przejrzyj go przed zapisaniem lub odrzuceniem.', ); return '$_temp0'; } @@ -1731,6 +1739,10 @@ class AppLocalizationsPl extends AppLocalizations { count, locale: localeName, other: + 'Nie udało się przywrócić $count uszkodzonego rekordu odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.', + many: + 'Nie udało się przywrócić $count uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.', + few: 'Nie udało się przywrócić $count uszkodzonych rekordów odzyskiwania. Prawidłowe rekordy odzyskiwania pozostają dostępne.', one: 'Nie udało się przywrócić 1 uszkodzonego rekordu odzyskiwania. Oryginalny plik odzyskiwania zachowano do przeglądu.', diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index e6f9cefd..cefd3795 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -3621,7 +3621,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get feedbackSubmit => 'Enviar'; @override - String get feedbackSubmitting => 'A enviar…'; + String get feedbackSubmitting => 'Enviando…'; @override String get feedbackCategoryRequired => 'Escolha uma categoria.'; @@ -5065,7 +5065,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get workspaceReplaceIssuePartialConflict => - 'A reversão foi interrompida porque o ficheiro foi alterado em simultâneo. Algumas substituições podem permanecer; o conteúdo deslocado foi preservado no caminho abaixo.'; + 'A reversão foi interrompida porque o arquivo foi alterado simultaneamente. Algumas substituições podem permanecer; o conteúdo deslocado foi preservado no caminho abaixo.'; @override String get workspaceReplaceIssueApplyFailed => @@ -5111,7 +5111,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get nothingToRead => 'Nenhum conteúdo para ler'; @override - String get admonition => 'Aviso'; + String get admonition => 'Observação'; @override String get quote => 'Citação'; @@ -6401,7 +6401,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'O BusyMark não conseguiu exportar este documento como PDF.'; @override - String get visualizationRendering => 'A renderizar…'; + String get visualizationRendering => 'Renderizando…'; @override String get visualizationStale => 'A mostrar a última renderização válida'; @@ -6549,7 +6549,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get offlineArtifactDescription => - 'Inclua os recursos para que a documentação gerada seja autónoma.'; + 'Inclua os recursos para que a documentação gerada funcione de forma autônoma.'; @override String get instanceOutputSettings => 'Definições de saída'; @@ -6565,7 +6565,13 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String markdownFilesFound(int count) { - return 'Foram encontrados $count arquivo(s) Markdown'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Foram encontrados $count arquivos Markdown', + one: 'Foi encontrado 1 arquivo Markdown', + ); + return '$_temp0'; } @override @@ -6573,7 +6579,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'Não foram encontrados arquivos Markdown neste diretório.'; @override - String get copyReferencedMedia => 'Copiar multimédia referenciada'; + String get copyReferencedMedia => 'Copiar mídia referenciada'; @override String get copyReferencedMediaDescription => @@ -6687,7 +6693,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String diagnosticWritersideDuplicateInstanceId(String id) { - return 'O ID de instância “$id” é usado por mais de um ficheiro de árvore.'; + return 'O ID de instância “$id” é usado por mais de um arquivo de árvore.'; } @override @@ -6729,7 +6735,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get diagnosticWritersideInstanceGroupsInvalidRoot => - 'O ficheiro de grupos de instâncias deve ter um elemento raiz .'; + 'O arquivo de grupos de instâncias deve ter um elemento raiz .'; @override String get diagnosticWritersideInstanceGroupInvalid => @@ -6834,7 +6840,13 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String aiConnectionReady(int count) { - return 'Conectado. $count modelo(s) instalado(s) encontrado(s).'; + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'Foram encontrados $count modelos instalados', + one: 'Foi encontrado 1 modelo instalado', + ); + return 'Conectado. $_temp0.'; } @override diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index df97a584..3ad354c3 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -815,7 +815,11 @@ class AppLocalizationsRu extends AppLocalizations { count, locale: localeName, other: - '$count документа содержат несохранённые изменения. Сохраните каждое перед продолжением.', + '$count документа содержит несохранённые изменения. Сохраните их перед продолжением.', + many: + '$count документов содержат несохранённые изменения. Сохраните их перед продолжением.', + few: + '$count документа содержат несохранённые изменения. Сохраните их перед продолжением.', one: '1 документ содержит несохранённые изменения. Сохраните его перед продолжением.', ); @@ -1712,7 +1716,11 @@ class AppLocalizationsRu extends AppLocalizations { count, locale: localeName, other: + 'Восстановлено $count несохранённого документа. Проверьте его перед сохранением или отменой.', + many: 'Восстановлено $count несохранённых документов. Проверьте каждый перед сохранением или отменой.', + few: + 'Восстановлено $count несохранённых документа. Проверьте каждый перед сохранением или отменой.', one: 'Восстановлен 1 несохранённый документ. Проверьте его перед сохранением или отменой.', ); @@ -1725,7 +1733,11 @@ class AppLocalizationsRu extends AppLocalizations { count, locale: localeName, other: - '$count повреждённых записей восстановления не удалось восстановить. Корректные записи восстановления остаются доступны.', + 'Не удалось восстановить $count повреждённой записи восстановления. Корректные записи восстановления остаются доступны.', + many: + 'Не удалось восстановить $count повреждённых записей восстановления. Корректные записи восстановления остаются доступны.', + few: + 'Не удалось восстановить $count повреждённые записи восстановления. Корректные записи восстановления остаются доступны.', one: 'Не удалось восстановить 1 повреждённую запись восстановления. Оригинальный файл восстановления сохранён для проверки.', ); @@ -2430,9 +2442,13 @@ class AppLocalizationsRu extends AppLocalizations { count, locale: localeName, other: - 'Во все выбранные отслеживаемые файлы и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.', + 'Все проиндексированные и непроиндексированные изменения в выбранных отслеживаемых файлах будут отменены, а файлы будут восстановлены до состояния HEAD.', + many: + 'Все проиндексированные и непроиндексированные изменения в выбранных отслеживаемых файлах будут отменены, а файлы будут восстановлены до состояния HEAD.', + few: + 'Все проиндексированные и непроиндексированные изменения в выбранных отслеживаемых файлах будут отменены, а файлы будут восстановлены до состояния HEAD.', one: - 'В выбранный отслеживаемый файл и обратно в HEAD будут восстановлены все проиндексированные и не проиндексированные изменения.', + 'Все проиндексированные и непроиндексированные изменения в выбранном отслеживаемом файле будут отменены, а файл будет восстановлен до состояния HEAD.', ); return '$_temp0'; } diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart index 3cab83aa..0954eb9b 100644 --- a/lib/l10n/generated/app_localizations_uk.dart +++ b/lib/l10n/generated/app_localizations_uk.dart @@ -820,7 +820,11 @@ class AppLocalizationsUk extends AppLocalizations { count, locale: localeName, other: - '$count документів мають незбережені зміни. Збережіть кожен перед продовженням.', + '$count документа має незбережені зміни. Збережіть їх перед продовженням.', + many: + '$count документів мають незбережені зміни. Збережіть їх перед продовженням.', + few: + '$count документи мають незбережені зміни. Збережіть їх перед продовженням.', one: '1 документ має незбережені зміни. Збережіть його перед продовженням.', ); @@ -1720,7 +1724,11 @@ class AppLocalizationsUk extends AppLocalizations { count, locale: localeName, other: + 'Відновлено $count незбереженого документа. Перегляньте його перед збереженням або відхиленням.', + many: 'Відновлено $count незбережених документів. Перегляньте кожен перед збереженням або відхиленням.', + few: + 'Відновлено $count незбережені документи. Перегляньте кожен перед збереженням або відхиленням.', one: 'Відновлено 1 незбережений документ. Перегляньте його перед збереженням або відхиленням.', ); @@ -1733,7 +1741,11 @@ class AppLocalizationsUk extends AppLocalizations { count, locale: localeName, other: - '$count пошкоджених записів відновлення не вдалося відновити. Дійсні записи відновлення залишаються доступними.', + 'Не вдалося відновити $count пошкодженого запису відновлення. Дійсні записи відновлення залишаються доступними.', + many: + 'Не вдалося відновити $count пошкоджених записів відновлення. Дійсні записи відновлення залишаються доступними.', + few: + 'Не вдалося відновити $count пошкоджені записи відновлення. Дійсні записи відновлення залишаються доступними.', one: 'Не вдалося відновити 1 пошкоджений запис відновлення. Оригінальний файл відновлення збережено для перегляду.', ); @@ -2439,9 +2451,13 @@ class AppLocalizationsUk extends AppLocalizations { count, locale: localeName, other: - 'Усі індексовані та неіндексовані зміни в обраних файлах з відстеженням будуть відновлені в HEAD.', + 'Усі індексовані та неіндексовані зміни у вибраних файлах з відстеженням буде скасовано, а файли буде відновлено до стану HEAD.', + many: + 'Усі індексовані та неіндексовані зміни у вибраних файлах з відстеженням буде скасовано, а файли буде відновлено до стану HEAD.', + few: + 'Усі індексовані та неіндексовані зміни у вибраних файлах з відстеженням буде скасовано, а файли буде відновлено до стану HEAD.', one: - 'Усі індексовані та неіндексовані зміни у вибраному файлі з відстеженням будуть відновлені в HEAD.', + 'Усі індексовані та неіндексовані зміни у вибраному файлі з відстеженням буде скасовано, а файл буде відновлено до стану HEAD.', ); return '$_temp0'; } From 1382ca80365c5d2ba0522d366169959ef5f5e2d9 Mon Sep 17 00:00:00 2001 From: albert Date: Sun, 30 Aug 2026 14:40:17 -0700 Subject: [PATCH 04/11] translation fixes --- lib/l10n/app_it.arb | 2 +- lib/l10n/app_pt_BR.arb | 42 ++++++++++---------- lib/l10n/generated/app_localizations_it.dart | 2 +- lib/l10n/generated/app_localizations_pt.dart | 42 ++++++++++---------- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 91a29704..f83a468d 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -1422,7 +1422,7 @@ "description": "Status banner shown when source highlighting and folding are disabled for a large file." }, "nothingToRead": "Nessun contenuto da leggere", - "admonition": "Nota", + "admonition": "Riquadro informativo", "quote": "Citazione", "@nothingToRead": { "description": "Empty state shown when there is no content to read." diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index 0f2a15b2..4ba66dbc 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -18,7 +18,7 @@ "feedbackCategoryRequired": "Escolha uma categoria.", "feedbackSubjectLength": "O assunto deve ter entre 3 e 120 caracteres.", "feedbackMessageLength": "A mensagem deve ter entre 10 e 5000 caracteres.", - "feedbackReplyEmailInvalid": "Introduza um endereço de e-mail válido ou deixe este campo vazio.", + "feedbackReplyEmailInvalid": "Digite um endereço de e-mail válido ou deixe este campo vazio.", "feedbackConnectionFailure": "O BusyMark não conseguiu estabelecer conexão. Verifique a conexão com a Internet e tente novamente.", "feedbackTimeoutFailure": "O pedido excedeu o tempo limite. Tente novamente.", "feedbackRateLimitedFailure": "Foram enviados relatórios demais a partir desta conexão. Aguarde e tente novamente.", @@ -1422,7 +1422,7 @@ "description": "Status banner shown when source highlighting and folding are disabled for a large file." }, "nothingToRead": "Nenhum conteúdo para ler", - "admonition": "Observação", + "admonition": "Bloco de destaque", "quote": "Citação", "@nothingToRead": { "description": "Empty state shown when there is no content to read." @@ -2746,7 +2746,7 @@ "@export": { "description": "Button label that starts an export." }, - "exportingPdf": "A exportar PDF…", + "exportingPdf": "Exportando PDF…", "@exportingPdf": { "description": "Progress dialog title while a PDF is being exported." }, @@ -2775,7 +2775,7 @@ } } }, - "pdfExportUnavailable": "O componente de exportação para PDF está em falta. Reinstale o BusyMark e tente novamente.", + "pdfExportUnavailable": "O componente de exportação para PDF está ausente. Reinstale o BusyMark e tente novamente.", "@pdfExportUnavailable": { "description": "Error shown when the bundled PDF compiler is unavailable." }, @@ -2788,7 +2788,7 @@ "description": "Generic PDF export failure message." }, "visualizationRendering": "Renderizando…", - "visualizationStale": "A mostrar a última renderização válida", + "visualizationStale": "Exibindo a última renderização válida", "visualizationShowSource": "Mostrar código-fonte", "visualizationShowRender": "Mostrar renderização", "visualizationFitWidth": "Ajustar à largura", @@ -2806,7 +2806,7 @@ "visualizationSearchOperations": "Pesquisar operações", "visualizationRenderFailed": "Não foi possível renderizar esta visualização.", "visualizationRetry": "Tentar novamente", - "visualizationSaved": "{fileName} guardado", + "visualizationSaved": "{fileName} salvo", "shortcutExportPdfDescription": "Exportar o documento ativo ou o módulo do Writerside como PDF.", "@shortcutExportPdfDescription": { "description": "Keyboard-shortcut description for PDF export." @@ -2835,11 +2835,11 @@ "gitResetModeMixed": "Mixed", "gitResetModeMixedDescription": "Mover a branch e redefinir o índice. Manter a árvore de trabalho inalterada, deixando as diferenças não preparadas.", "gitResetModeHard": "Hard", - "gitResetModeHardDescription": "Mover a branch e redefinir o índice e a árvore de trabalho. As alterações monitorizadas são descartadas; os arquivos não monitorizados que bloqueiam a operação podem ser eliminados.", + "gitResetModeHardDescription": "Mover a branch e redefinir o índice e a árvore de trabalho. As alterações rastreadas são descartadas; os arquivos não rastreados que bloqueiam a operação podem ser excluídos.", "gitResetModeKeep": "Keep", - "gitResetModeKeepDescription": "Mover a branch e redefinir os arquivos monitorizados, preservando as alterações locais. O Git aborta se essas alterações entrarem em conflito com a redefinição.", - "gitErrorResetDirtyWorkspace": "Guarde ou descarte as alterações no editor do BusyMark antes de redefinir a branch atual.", - "gitErrorResetDetachedHead": "Mude para uma branch antes de a redefinir.", + "gitResetModeKeepDescription": "Mover a branch e redefinir os arquivos rastreados, preservando as alterações locais. O Git aborta se essas alterações entrarem em conflito com a redefinição.", + "gitErrorResetDirtyWorkspace": "Salve ou descarte as alterações no editor do BusyMark antes de redefinir a branch atual.", + "gitErrorResetDetachedHead": "Alterne para uma branch antes de redefini-la.", "instances": "Instâncias", "newInstance": "Nova instância", "newTocLibrary": "Nova biblioteca de sumário", @@ -2850,10 +2850,10 @@ "instanceContent": "Conteúdo", "instanceContentSource": "Criar a partir de", "emptyInstance": "Instância vazia", - "markdownFiles": "Ficheiros Markdown locais", + "markdownFiles": "Arquivos Markdown locais", "chooseMarkdownFolder": "Escolher pasta de Markdown", "errorWritersideInstanceImportSourceRequired": "Escolha uma pasta que contenha arquivos Markdown.", - "instanceAppearance": "Aspeto", + "instanceAppearance": "Aparência", "instanceColor": "Cor do ícone", "instanceVersion": "Versão", "instanceVersionInherited": "Quando este campo está vazio, é usada a versão do projeto {version}.", @@ -2862,13 +2862,13 @@ "instanceStatusRelease": "Lançamento", "instanceStatusEap": "Acesso antecipado", "instanceStatusDeprecated": "Obsoleta", - "allowSearchEngineIndexing": "Permitir indexação por motores de pesquisa", - "allowSearchEngineIndexingDescription": "Permita que motores de pesquisa externos indexem esta saída.", - "offlineArtifact": "Artefacto offline", + "allowSearchEngineIndexing": "Permitir indexação por mecanismos de busca", + "allowSearchEngineIndexingDescription": "Permita que mecanismos de busca externos indexem esta saída.", + "offlineArtifact": "Artefato offline", "offlineArtifactDescription": "Inclua os recursos para que a documentação gerada funcione de forma autônoma.", - "instanceOutputSettings": "Definições de saída", + "instanceOutputSettings": "Configurações de saída", "markdownImportSource": "Origem Markdown", - "markdownImportFiles": "Ficheiros Markdown", + "markdownImportFiles": "Arquivos Markdown", "selectNone": "Não selecionar nenhum", "markdownFilesFound": "{count, plural, =1{Foi encontrado 1 arquivo Markdown} other{Foram encontrados {count} arquivos Markdown}}", "noMarkdownFilesFound": "Não foram encontrados arquivos Markdown neste diretório.", @@ -2877,8 +2877,8 @@ "instanceIdRenameWarningTitle": "Mudar o nome do ID da instância?", "instanceIdRenameWarning": "O BusyMark vai renomear o arquivo .tree e atualizar as referências do projeto Writerside de “{oldId}” para “{newId}”. Os scripts de publicação não são alterados e devem ser atualizados separadamente.", "renameAndUpdateReferences": "Mudar o nome e atualizar referências", - "tocLibraryDescription": "Uma biblioteca de sumário armazena secções reutilizáveis e não produz uma saída própria.", - "defaultTocLibraryName": "Sumário partilhado", + "tocLibraryDescription": "Uma biblioteca de sumário armazena seções reutilizáveis e não produz uma saída própria.", + "defaultTocLibraryName": "Sumário compartilhado", "instanceColorAutomatic": "Automático", "instanceColorBlue": "Azul", "instanceColorGreen": "Verde", @@ -2887,7 +2887,7 @@ "instanceColorRed": "Vermelho", "instanceColorTeal": "Verde-azulado", "instanceColorYellow": "Amarelo", - "errorWritersideInstanceNameRequired": "Introduza um nome para a instância.", + "errorWritersideInstanceNameRequired": "Digite um nome para a instância.", "errorWritersideInstanceIdExists": "Já existe uma instância com o ID “{id}”.", "errorWritersideInstanceTreeExists": "A árvore da instância já existe: {path}", "errorWritersideInstanceImportSourceMissing": "O diretório de origem Markdown não existe: {path}", @@ -2914,7 +2914,7 @@ "diagnosticWritersideInstanceGroupInvalid": "Um grupo de instâncias deve especificar um id e uma lista de instâncias não vazios.", "diagnosticWritersideInstanceGroupDuplicateId": "O ID do grupo de instâncias “{id}” foi declarado mais de uma vez.", "diagnosticWritersideExternalTreeInclude": "A inclusão de sumário “{source}#{id}” pertence ao módulo externo “{origin}” e não pode ser expandida neste espaço de trabalho.", - "diagnosticWritersideTreeIncludeElementMissing": "O elemento de árvore “{id}” não existe na árvore registada “{source}”.", + "diagnosticWritersideTreeIncludeElementMissing": "O elemento de árvore “{id}” não existe na árvore registrada “{source}”.", "diagnosticWritersideTreeCircularInclude": "A inclusão de árvore “{source}#{id}” cria um ciclo.", "diagnosticWritersideUnknownInstanceGroup": "A condição de instância referencia o grupo desconhecido “@{group}”.", "diagnosticWritersideReferenceInstanceMissing": "A referência entre instâncias aponta para a instância desconhecida “{instance}”.", diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 3539e000..0f38cf58 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1572,7 +1572,7 @@ class AppLocalizationsIt extends AppLocalizations { String get nothingToRead => 'Nessun contenuto da leggere'; @override - String get admonition => 'Nota'; + String get admonition => 'Riquadro informativo'; @override String get quote => 'Citazione'; diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index cefd3795..e2c642e9 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -3636,7 +3636,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get feedbackReplyEmailInvalid => - 'Introduza um endereço de e-mail válido ou deixe este campo vazio.'; + 'Digite um endereço de e-mail válido ou deixe este campo vazio.'; @override String get feedbackConnectionFailure => @@ -5111,7 +5111,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get nothingToRead => 'Nenhum conteúdo para ler'; @override - String get admonition => 'Observação'; + String get admonition => 'Bloco de destaque'; @override String get quote => 'Citação'; @@ -6077,14 +6077,14 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get gitResetModeHardDescription => - 'Mover a branch e redefinir o índice e a árvore de trabalho. As alterações monitorizadas são descartadas; os arquivos não monitorizados que bloqueiam a operação podem ser eliminados.'; + 'Mover a branch e redefinir o índice e a árvore de trabalho. As alterações rastreadas são descartadas; os arquivos não rastreados que bloqueiam a operação podem ser excluídos.'; @override String get gitResetModeKeep => 'Keep'; @override String get gitResetModeKeepDescription => - 'Mover a branch e redefinir os arquivos monitorizados, preservando as alterações locais. O Git aborta se essas alterações entrarem em conflito com a redefinição.'; + 'Mover a branch e redefinir os arquivos rastreados, preservando as alterações locais. O Git aborta se essas alterações entrarem em conflito com a redefinição.'; @override String gitAdditionsDeletions(int additions, int deletions) { @@ -6157,7 +6157,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get gitErrorResetDirtyWorkspace => - 'Guarde ou descarte as alterações no editor do BusyMark antes de redefinir a branch atual.'; + 'Salve ou descarte as alterações no editor do BusyMark antes de redefinir a branch atual.'; @override String get gitErrorRestoreStagedFile => @@ -6165,7 +6165,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get gitErrorResetDetachedHead => - 'Mude para uma branch antes de a redefinir.'; + 'Alterne para uma branch antes de redefini-la.'; @override String get gitErrorDiverged => @@ -6367,7 +6367,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get export => 'Exportar'; @override - String get exportingPdf => 'A exportar PDF…'; + String get exportingPdf => 'Exportando PDF…'; @override String get fileTypePdf => 'Documento PDF'; @@ -6390,7 +6390,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get pdfExportUnavailable => - 'O componente de exportação para PDF está em falta. Reinstale o BusyMark e tente novamente.'; + 'O componente de exportação para PDF está ausente. Reinstale o BusyMark e tente novamente.'; @override String get pdfExportTimedOut => @@ -6404,7 +6404,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get visualizationRendering => 'Renderizando…'; @override - String get visualizationStale => 'A mostrar a última renderização válida'; + String get visualizationStale => 'Exibindo a última renderização válida'; @override String get visualizationShowSource => 'Mostrar código-fonte'; @@ -6460,7 +6460,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String visualizationSaved(String fileName) { - return '$fileName guardado'; + return '$fileName salvo'; } @override @@ -6498,7 +6498,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get emptyInstance => 'Instância vazia'; @override - String get markdownFiles => 'Ficheiros Markdown locais'; + String get markdownFiles => 'Arquivos Markdown locais'; @override String get chooseMarkdownFolder => 'Escolher pasta de Markdown'; @@ -6508,7 +6508,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'Escolha uma pasta que contenha arquivos Markdown.'; @override - String get instanceAppearance => 'Aspeto'; + String get instanceAppearance => 'Aparência'; @override String get instanceColor => 'Cor do ícone'; @@ -6538,27 +6538,27 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get allowSearchEngineIndexing => - 'Permitir indexação por motores de pesquisa'; + 'Permitir indexação por mecanismos de busca'; @override String get allowSearchEngineIndexingDescription => - 'Permita que motores de pesquisa externos indexem esta saída.'; + 'Permita que mecanismos de busca externos indexem esta saída.'; @override - String get offlineArtifact => 'Artefacto offline'; + String get offlineArtifact => 'Artefato offline'; @override String get offlineArtifactDescription => 'Inclua os recursos para que a documentação gerada funcione de forma autônoma.'; @override - String get instanceOutputSettings => 'Definições de saída'; + String get instanceOutputSettings => 'Configurações de saída'; @override String get markdownImportSource => 'Origem Markdown'; @override - String get markdownImportFiles => 'Ficheiros Markdown'; + String get markdownImportFiles => 'Arquivos Markdown'; @override String get selectNone => 'Não selecionar nenhum'; @@ -6599,10 +6599,10 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get tocLibraryDescription => - 'Uma biblioteca de sumário armazena secções reutilizáveis e não produz uma saída própria.'; + 'Uma biblioteca de sumário armazena seções reutilizáveis e não produz uma saída própria.'; @override - String get defaultTocLibraryName => 'Sumário partilhado'; + String get defaultTocLibraryName => 'Sumário compartilhado'; @override String get instanceColorAutomatic => 'Automático'; @@ -6630,7 +6630,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get errorWritersideInstanceNameRequired => - 'Introduza um nome para a instância.'; + 'Digite um nome para a instância.'; @override String errorWritersideInstanceIdExists(String id) { @@ -6760,7 +6760,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String source, String id, ) { - return 'O elemento de árvore “$id” não existe na árvore registada “$source”.'; + return 'O elemento de árvore “$id” não existe na árvore registrada “$source”.'; } @override From 1bc0ee31ce97c3dcc48df2f597deba286a7a349a Mon Sep 17 00:00:00 2001 From: albert Date: Sun, 30 Aug 2026 16:01:55 -0700 Subject: [PATCH 05/11] Add Writerside conformance fixtures and semantic PDF export enhancements --- .github/workflows/flutter-linux.yml | 10 + lib/l10n/app_nl.arb | 2 +- lib/l10n/generated/app_localizations_nl.dart | 2 +- .../editor/source/source_autocomplete.dart | 80 +- .../export/markdown_pdf_export_service.dart | 24 +- lib/src/export/markdown_pdf_models.dart | 6 + .../export/writerside_pdf_export_service.dart | 452 +++------ lib/src/export/writerside_pdf_export_ui.dart | 1 + lib/src/export/writerside_pdf_models.dart | 2 + lib/src/markdown/markdown_ast_adapter.dart | 17 +- lib/src/markdown/markdown_parser.dart | 21 +- lib/src/markdown/preview_model.dart | 303 ++---- lib/src/workspace/workspace_model.dart | 8 + lib/src/workspace/workspace_service.dart | 667 +++---------- lib/src/writerside/writerside_document.dart | 229 +++++ .../writerside_document_parser.dart | 292 ++++++ .../writerside_document_renderer.dart | 608 ++++++++++++ .../writerside_document_resolver.dart | 531 ++++++++++ .../writerside_document_serializer.dart | 15 + lib/src/writerside/writerside_model.dart | 3 + .../writerside/writerside_module_service.dart | 18 +- lib/src/writerside/writerside_parsers.dart | 149 +-- lib/src/writerside/writerside_project.dart | 913 ++++++++++++++++++ lib/src/writerside/writerside_schema.dart | 497 ++++++++++ pubspec.lock | 28 +- .../writerside/conformance_project/c.list | 4 + .../conformance_project/cfg/buildprofiles.xml | 13 + .../conformance_project/cfg/glossary.xml | 5 + .../conformance_project/conformance.tree | 6 + .../writerside/conformance_project/keymap.xml | 12 + .../resources/sample-resource.txt | 1 + .../conformance_project/topics/features.topic | 25 + .../conformance_project/topics/semantic.md | 11 + .../writerside/conformance_project/v.list | 4 + .../conformance_project/writerside.cfg | 9 + test/src/writerside_document_test.dart | 189 ++++ test/src/writerside_pdf_export_test.dart | 66 +- test/src/writerside_project_test.dart | 165 ++++ tools/validate_writerside_conformance.sh | 30 + 39 files changed, 4204 insertions(+), 1214 deletions(-) create mode 100644 lib/src/writerside/writerside_document.dart create mode 100644 lib/src/writerside/writerside_document_parser.dart create mode 100644 lib/src/writerside/writerside_document_renderer.dart create mode 100644 lib/src/writerside/writerside_document_resolver.dart create mode 100644 lib/src/writerside/writerside_document_serializer.dart create mode 100644 lib/src/writerside/writerside_project.dart create mode 100644 lib/src/writerside/writerside_schema.dart create mode 100644 test/fixtures/writerside/conformance_project/c.list create mode 100644 test/fixtures/writerside/conformance_project/cfg/buildprofiles.xml create mode 100644 test/fixtures/writerside/conformance_project/cfg/glossary.xml create mode 100644 test/fixtures/writerside/conformance_project/conformance.tree create mode 100644 test/fixtures/writerside/conformance_project/keymap.xml create mode 100644 test/fixtures/writerside/conformance_project/resources/sample-resource.txt create mode 100644 test/fixtures/writerside/conformance_project/topics/features.topic create mode 100644 test/fixtures/writerside/conformance_project/topics/semantic.md create mode 100644 test/fixtures/writerside/conformance_project/v.list create mode 100644 test/fixtures/writerside/conformance_project/writerside.cfg create mode 100644 test/src/writerside_document_test.dart create mode 100644 test/src/writerside_project_test.dart create mode 100755 tools/validate_writerside_conformance.sh diff --git a/.github/workflows/flutter-linux.yml b/.github/workflows/flutter-linux.yml index dfd1cbb1..4764878d 100644 --- a/.github/workflows/flutter-linux.yml +++ b/.github/workflows/flutter-linux.yml @@ -7,6 +7,16 @@ on: branches: [main] jobs: + writerside-conformance: + runs-on: ubuntu-24.04 + + steps: + - name: Check out repository + uses: actions/checkout@v7 + + - name: Validate the pinned Writerside compatibility fixture + run: tools/validate_writerside_conformance.sh + verify: runs-on: ubuntu-24.04 diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index f725ec9c..4a032e07 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -1826,7 +1826,7 @@ "@workspaceReplaceDiskContent": { "description": "Source label for a workspace replacement preview using disk content." }, - "selectFileMatches": "{count, plural, =1{Alle 1 overeenkomst selecteren} other{Alle {count} overeenkomsten selecteren}}", + "selectFileMatches": "{count, plural, =1{1 overeenkomst selecteren} other{Alle {count} overeenkomsten selecteren}}", "@selectFileMatches": { "description": "Checkbox label for selecting every replacement match in a file.", "placeholders": { diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index 5de52ea2..e6aa598f 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -1460,7 +1460,7 @@ class AppLocalizationsNl extends AppLocalizations { count, locale: localeName, other: 'Alle $count overeenkomsten selecteren', - one: 'Alle 1 overeenkomst selecteren', + one: '1 overeenkomst selecteren', ); return '$_temp0'; } diff --git a/lib/src/editor/source/source_autocomplete.dart b/lib/src/editor/source/source_autocomplete.dart index 7a4ba681..8c23d5ca 100644 --- a/lib/src/editor/source/source_autocomplete.dart +++ b/lib/src/editor/source/source_autocomplete.dart @@ -1,6 +1,8 @@ import 'package:path/path.dart' as p; import 'source_document.dart'; +import '../../writerside/writerside_schema.dart'; +import '../../writerside/writerside_project.dart'; enum SourceAutocompleteKind { topic, @@ -34,12 +36,20 @@ class SourceAutocompleteContext { this.variables = const [], this.categories = const [], this.topicIds = const [], + this.parentElement, + this.currentElement, + this.projectIndex, + this.moduleId, }); final List projectFiles; final List variables; final List categories; final List topicIds; + final String? parentElement; + final String? currentElement; + final WritersideProjectIndex? projectIndex; + final String? moduleId; } class SourceAutocompleteProvider { @@ -53,13 +63,18 @@ class SourceAutocompleteProvider { }) { final prefix = _prefixBefore(document.fullText, fullOffset).toLowerCase(); final suggestions = [ - for (final tag in _xmlTags) + for (final tag in WritersideSchema.childElementNames( + context.parentElement, + ).take(context.parentElement == null ? 15 : 60)) SourceAutocompleteSuggestion( label: tag, insertText: tag, kind: SourceAutocompleteKind.xmlTag, ), - for (final attr in _xmlAttributes) + for (final attr + in context.currentElement == null + ? WritersideSchema.commonConditionalAttributes + : WritersideSchema.attributesFor(context.currentElement!)) SourceAutocompleteSuggestion( label: attr, insertText: attr, @@ -91,18 +106,51 @@ class SourceAutocompleteProvider { insertText: topic, kind: SourceAutocompleteKind.topic, ), + for (final topic + in context.projectIndex?.names( + WritersideSymbolKind.topic, + moduleId: context.moduleId, + ) ?? + const []) + SourceAutocompleteSuggestion( + label: topic, + insertText: topic, + kind: SourceAutocompleteKind.topic, + ), for (final variable in context.variables) SourceAutocompleteSuggestion( label: variable, insertText: variable, kind: SourceAutocompleteKind.variable, ), + for (final variable + in context.projectIndex?.names( + WritersideSymbolKind.variable, + moduleId: context.moduleId, + ) ?? + const []) + SourceAutocompleteSuggestion( + label: variable, + insertText: variable, + kind: SourceAutocompleteKind.variable, + ), for (final category in context.categories) SourceAutocompleteSuggestion( label: category, insertText: category, kind: SourceAutocompleteKind.category, ), + for (final category + in context.projectIndex?.names( + WritersideSymbolKind.category, + moduleId: context.moduleId, + ) ?? + const []) + SourceAutocompleteSuggestion( + label: category, + insertText: category, + kind: SourceAutocompleteKind.category, + ), for (final word in _localWords(document.fullText)) SourceAutocompleteSuggestion( label: word, @@ -177,34 +225,6 @@ String _anchorForHeading(String heading) { .replaceAll(RegExp(r'\s+'), '-'); } -const _xmlTags = [ - 'topic', - 'chapter', - 'toc-element', - 'include', - 'snippet', - 'var', - 'procedure', - 'step', - 'tabs', - 'tab', - 'note', - 'warning', - 'tip', -]; - -const _xmlAttributes = [ - 'id', - 'title', - 'file', - 'src', - 'href', - 'toc-title', - 'instance', - 'filter', - 'var', -]; - const _codeLanguages = [ 'xml', 'html', diff --git a/lib/src/export/markdown_pdf_export_service.dart b/lib/src/export/markdown_pdf_export_service.dart index 903f3b45..5f1949bc 100644 --- a/lib/src/export/markdown_pdf_export_service.dart +++ b/lib/src/export/markdown_pdf_export_service.dart @@ -71,15 +71,17 @@ class MarkdownPdfExportService { 'untitled.md', ) : request.filePath; - final parsed = await parser.parseAsync( - filePath: effectiveFilePath, - source: request.source, - mode: request.mode, - workspaceRoot: request.workspaceRoot.isEmpty - ? null - : request.workspaceRoot, - validateLocalReferences: false, - ); + final busyDocument = + request.document ?? + (await parser.parseAsync( + filePath: effectiveFilePath, + source: request.source, + mode: request.mode, + workspaceRoot: request.workspaceRoot.isEmpty + ? null + : request.workspaceRoot, + validateLocalReferences: false, + )).busyDocument; token.throwIfCancelled(); final visualizationPreparation = visualizationRenderer == null ? const MarkdownVisualizationExportPreparation( @@ -87,7 +89,7 @@ class MarkdownPdfExportService { warnings: [], ) : await visualizationRenderer!.prepare( - document: parsed.busyDocument, + document: busyDocument, exportRoot: exportRoot, documentPath: effectiveFilePath, workspaceRoot: request.workspaceRoot, @@ -95,7 +97,7 @@ class MarkdownPdfExportService { ); token.throwIfCancelled(); final mappedDocument = mapper.map( - parsed.busyDocument, + busyDocument, blockOverrides: visualizationPreparation.blockOverrides, ); final mathPreparation = mathRenderer == null diff --git a/lib/src/export/markdown_pdf_models.dart b/lib/src/export/markdown_pdf_models.dart index 2fe876bb..e613d3e6 100644 --- a/lib/src/export/markdown_pdf_models.dart +++ b/lib/src/export/markdown_pdf_models.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import '../markdown/markdown_model.dart'; +import '../markdown/busymark_document.dart'; enum MarkdownPdfPageSize { a4, letter } @@ -83,6 +84,7 @@ class MarkdownPdfExportRequest { required this.options, required this.overwrite, this.mode = MarkdownMode.commonMark, + this.document, }); final String source; @@ -92,6 +94,10 @@ class MarkdownPdfExportRequest { final MarkdownPdfOptions options; final bool overwrite; final MarkdownMode mode; + + /// A pre-parsed semantic document. When present, PDF export consumes this + /// tree directly and [source] is not reparsed. + final BusyDocument? document; } @immutable diff --git a/lib/src/export/writerside_pdf_export_service.dart b/lib/src/export/writerside_pdf_export_service.dart index d268a093..4fa34e1b 100644 --- a/lib/src/export/writerside_pdf_export_service.dart +++ b/lib/src/export/writerside_pdf_export_service.dart @@ -1,12 +1,15 @@ import 'dart:io'; import 'package:path/path.dart' as p; -import 'package:xml/xml.dart'; import '../core/uri_utils.dart'; +import '../markdown/busymark_document.dart'; import '../markdown/markdown_model.dart'; +import '../writerside/writerside_document_renderer.dart'; +import '../writerside/writerside_document_resolver.dart'; import '../writerside/writerside_model.dart'; import '../writerside/writerside_module_service.dart'; +import '../writerside/writerside_project.dart'; import 'markdown_pdf_export_service.dart'; import 'markdown_pdf_models.dart'; import 'writerside_pdf_models.dart'; @@ -21,12 +24,16 @@ class WritersidePdfExportService { const WritersidePdfExportService({ this.moduleService = const WritersideModuleService(), this.markdownExporter = const MarkdownPdfExportService(), + this.documentResolver = const WritersideDocumentResolver(), + this.documentRenderer = const WritersideDocumentRenderer(), this.maximumTopics = 2000, this.maximumCombinedSourceBytes = 64 * 1024 * 1024, }); final WritersideModuleService moduleService; final MarkdownPdfExportService markdownExporter; + final WritersideDocumentResolver documentResolver; + final WritersideDocumentRenderer documentRenderer; final int maximumTopics; final int maximumCombinedSourceBytes; @@ -37,7 +44,34 @@ class WritersidePdfExportService { final token = cancellationToken ?? WritersidePdfCancellationToken(); token.throwIfCancelled(); final moduleRoot = await _validatedModuleRoot(request.moduleRoot); - final module = await moduleService.load(moduleRoot); + WritersideModule module; + Map modulesByOrigin; + if (request.projectRoot case final requestedProjectRoot?) { + final projectRoot = await _validatedProjectRoot( + requestedProjectRoot, + moduleRoot, + ); + final project = await WritersideProjectService( + moduleService: moduleService, + scanOptions: moduleService.scanOptions, + ).load(projectRoot, preferredModuleRoot: moduleRoot); + final selectedModule = project.modules + .where((candidate) => p.equals(candidate.rootPath, moduleRoot)) + .firstOrNull; + if (selectedModule == null) { + throw const WritersidePdfExportException( + WritersidePdfFailureCode.invalidRequest, + detail: 'The selected module is not part of the Writerside project.', + ); + } + module = selectedModule; + modulesByOrigin = project.modulesByOrigin; + } else { + module = await moduleService.load(moduleRoot); + modulesByOrigin = { + if (module.config.moduleName case final name?) name: module, + }; + } token.throwIfCancelled(); final instance = module.instances .where( @@ -51,32 +85,31 @@ class WritersidePdfExportService { detail: 'Unknown or non-exportable instance: ${request.instanceId}', ); } - final source = await _composeInstanceSource(module, instance, token); - if (source.trim().isEmpty) { + final document = await _composeInstanceDocument( + module, + instance, + modulesByOrigin, + token, + ); + if (document.blocks.isEmpty) { throw const WritersidePdfExportException( WritersidePdfFailureCode.invalidRequest, detail: 'The selected instance contains no exportable topics.', ); } - if (source.length > maximumCombinedSourceBytes) { - throw const WritersidePdfExportException( - WritersidePdfFailureCode.invalidRequest, - detail: 'The selected instance is too large to export safely.', - ); - } - final markdownToken = MarkdownPdfCancellationToken(); token.attach(markdownToken.cancel); try { final result = await markdownExporter.export( MarkdownPdfExportRequest( - source: source, + source: '', filePath: p.join(moduleRoot, '.busymark-writerside-export.md'), workspaceRoot: moduleRoot, destinationPath: request.destinationPath, options: request.options, overwrite: request.overwrite, mode: MarkdownMode.writersideMarkdown, + document: document, ), cancellationToken: markdownToken, ); @@ -119,9 +152,21 @@ class WritersidePdfExportService { } } - Future _composeInstanceSource( + Future _validatedProjectRoot(String value, String moduleRoot) async { + final root = await _validatedModuleRoot(value); + if (!p.equals(root, moduleRoot) && !p.isWithin(root, moduleRoot)) { + throw const WritersidePdfExportException( + WritersidePdfFailureCode.invalidRequest, + detail: 'The Writerside project does not contain the selected module.', + ); + } + return root; + } + + Future _composeInstanceDocument( WritersideModule module, WritersideInstance instance, + Map modulesByOrigin, WritersidePdfCancellationToken token, ) async { final selected = <({WritersideTopic topic, String? title})>[]; @@ -162,10 +207,8 @@ class WritersidePdfExportService { ); } - final variables = { - for (final variable in module.variables) variable.name: variable.value, - }; - final output = StringBuffer(); + final output = []; + var combinedSourceBytes = 0; for (var index = 0; index < selected.length; index++) { token.throwIfCancelled(); final selection = selected[index]; @@ -181,30 +224,59 @@ class WritersidePdfExportService { cause: error, ); } - source = await _prepareTopicSource( - module: module, - topic: topic, - source: source, - variables: variables, - ); - if (topic.format == WritersideTopicFormat.xml) { - source = _xmlTopicToMarkdown( - source, - fallbackTitle: selection.title ?? _topicTitle(topic, instance.id), + combinedSourceBytes += source.length; + if (combinedSourceBytes > maximumCombinedSourceBytes) { + throw const WritersidePdfExportException( + WritersidePdfFailureCode.invalidRequest, + detail: 'The selected instance is too large to export safely.', ); - } else if (selection.title case final title? - when title.trim().isNotEmpty) { - source = _replaceFirstHeading(source, title.trim()); } + final parsedTopic = topic.format == WritersideTopicFormat.xml + ? moduleService.topicParser.parseXml( + filePath: topic.filePath, + source: source, + topicsRoot: topic.topicRoot, + ) + : moduleService.topicParser.parseMarkdown( + filePath: topic.filePath, + source: source, + topicsRoot: topic.topicRoot, + ); + final resolved = documentResolver.resolve( + parsedTopic.document, + WritersideResolveContext( + module: module, + topic: parsedTopic, + instance: instance, + modulesByOrigin: modulesByOrigin, + ), + ); if (index > 0) { - output.write('\n\n---\n\n'); + output.add( + BusyBlock( + id: 'writerside-topic-break-$index', + kind: BusyBlockKind.thematicBreak, + isGenerated: true, + ), + ); } - output.write(source.trim()); - } - if (output.isNotEmpty) { - output.write('\n'); + final rendered = documentRenderer.toBusyDocument( + resolved.document, + title: + selection.title ?? + resolved.title ?? + _topicTitle(parsedTopic, instance.id), + includeTitleHeading: true, + ); + final assets = await _resolveBusyAssets(module, parsedTopic, rendered); + output.addAll(assets.blocks); } - return output.toString(); + return BusyDocument( + filePath: p.join(module.rootPath, '.busymark-writerside-export'), + mode: MarkdownMode.writersideMarkdown, + title: instance.name, + blocks: List.unmodifiable(output), + ); } String? _topicTitle(WritersideTopic topic, String instanceId) { @@ -215,118 +287,42 @@ class WritersidePdfExportService { topic.title; } - Future _prepareTopicSource({ - required WritersideModule module, - required WritersideTopic topic, - required String source, - required Map variables, - }) async { - final replacements = <_SourceReplacement>[]; - final occupied = <({int start, int end})>[]; - - for (final image in topic.images) { - final replacement = await _assetReplacement( - module: module, - topic: topic, - source: source, - start: image.span.startOffset, - end: image.span.endOffset, - destination: image.destination, - ); - if (replacement != null) { - replacements.add(replacement); - occupied.add((start: replacement.start, end: replacement.end)); + Future _resolveBusyAssets( + WritersideModule module, + WritersideTopic topic, + BusyDocument document, + ) async { + Future resolveInline(BusyInline inline) async { + var destination = inline.destination; + if (inline.kind == BusyInlineKind.image && destination != null) { + destination = + await _resolvedAssetUri(module, topic, destination) ?? destination; } - } - for (final video in topic.videos) { - final initialSegment = _safeSubstring( - source, - video.span.startOffset, - video.span.endOffset, + return inline.copyWith( + destination: destination, + children: await Future.wait(inline.children.map(resolveInline)), ); - if (initialSegment == null) { - continue; - } - var segment = initialSegment; - var changed = false; - for (final destination in [video.previewSource, video.source]) { - if (destination == null || destination.trim().isEmpty) { + } + + Future resolveBlock(BusyBlock block) async { + final attributes = {...block.attributes}; + for (final name in ['src', 'preview-src']) { + final value = attributes[name]; + if (value == null || value.trim().isEmpty) { continue; } - final resolved = await _resolvedAssetUri(module, topic, destination); - if (resolved != null && segment.contains(destination)) { - segment = segment.replaceFirst(destination, resolved); - changed = true; - } - } - if (changed) { - replacements.add( - _SourceReplacement( - video.span.startOffset, - video.span.endOffset, - segment, - ), - ); - occupied.add(( - start: video.span.startOffset, - end: video.span.endOffset, - )); - } - } - for (final token in topic.variables) { - final value = variables[token.name]; - if (token.escaped || value == null) { - continue; - } - final start = token.span.startOffset; - final end = token.span.endOffset; - if (start < 0 || end > source.length || start > end) { - continue; + attributes[name] = + await _resolvedAssetUri(module, topic, value) ?? value; } - if (occupied.any((range) => start < range.end && end > range.start)) { - continue; - } - replacements.add(_SourceReplacement(start, end, value)); - } - replacements.sort((left, right) => right.start.compareTo(left.start)); - var result = source; - var rightBoundary = source.length; - for (final replacement in replacements) { - if (replacement.end > rightBoundary || - replacement.start < 0 || - replacement.end > result.length) { - continue; - } - result = result.replaceRange( - replacement.start, - replacement.end, - replacement.value, + return block.copyWith( + inlines: await Future.wait(block.inlines.map(resolveInline)), + children: await Future.wait(block.children.map(resolveBlock)), + attributes: attributes, ); - rightBoundary = replacement.start; } - return result; - } - Future<_SourceReplacement?> _assetReplacement({ - required WritersideModule module, - required WritersideTopic topic, - required String source, - required int start, - required int end, - required String destination, - }) async { - final segment = _safeSubstring(source, start, end); - if (segment == null || destination.trim().isEmpty) { - return null; - } - final resolved = await _resolvedAssetUri(module, topic, destination); - if (resolved == null || !segment.contains(destination)) { - return null; - } - return _SourceReplacement( - start, - end, - segment.replaceFirst(destination, resolved), + return document.copyWith( + blocks: await Future.wait(document.blocks.map(resolveBlock)), ); } @@ -366,174 +362,6 @@ class WritersidePdfExportService { return null; } - String? _safeSubstring(String source, int start, int end) { - if (start < 0 || end < start || end > source.length) { - return null; - } - return source.substring(start, end); - } - - String _replaceFirstHeading(String source, String title) { - final match = RegExp( - r'^ {0,3}#{1,6}[ \t]+.*$', - multiLine: true, - ).firstMatch(source); - if (match == null) { - return '# $title\n\n$source'; - } - return source.replaceRange(match.start, match.end, '# $title'); - } - - String _xmlTopicToMarkdown(String source, {String? fallbackTitle}) { - try { - final document = XmlDocument.parse(source); - final root = document.rootElement; - final title = root.getAttribute('title')?.trim(); - final output = StringBuffer(); - if ((title ?? fallbackTitle)?.trim() case final effective? - when effective.isNotEmpty) { - output.writeln('# ${_plain(effective)}'); - output.writeln(); - } - for (final child in root.children) { - _writeXmlBlock(output, child, headingLevel: 2); - } - return output.toString(); - } on XmlException { - return '```xml\n$source\n```'; - } - } - - void _writeXmlBlock( - StringBuffer output, - XmlNode node, { - required int headingLevel, - }) { - if (node is XmlText) { - final text = node.value.trim(); - if (text.isNotEmpty) { - output.writeln(text); - output.writeln(); - } - return; - } - if (node is! XmlElement) { - return; - } - final name = node.name.local.toLowerCase(); - switch (name) { - case 'title' || 'web-file-name': - return; - case 'p': - final text = _xmlInlineChildren(node).trim(); - if (text.isNotEmpty) { - output.writeln(text); - output.writeln(); - } - case 'chapter' || 'procedure' || 'tab' || 'def': - final title = - node.getAttribute('title')?.trim() ?? - (name == 'tab' - ? 'Tab' - : name == 'def' - ? 'Definition' - : ''); - if (title.isNotEmpty) { - output.writeln('${'#' * headingLevel} ${_plain(title)}'); - output.writeln(); - } - for (final child in node.children) { - _writeXmlBlock(output, child, headingLevel: headingLevel + 1); - } - case 'step': - final text = _xmlInlineChildren(node).trim(); - if (text.isNotEmpty) { - output.writeln('1. $text'); - output.writeln(); - } - case 'note' || 'tip' || 'warning' || 'quote': - final style = name == 'quote' ? 'NOTE' : name.toUpperCase(); - final body = _xmlInlineChildren(node).trim(); - output.writeln('> [!$style]'); - for (final line in body.split('\n')) { - output.writeln('> $line'); - } - output.writeln(); - case 'code-block': - final language = node.getAttribute('lang')?.trim() ?? ''; - output.writeln('~~~$language'); - output.writeln(node.innerText.replaceFirst(RegExp(r'^\n'), '')); - output.writeln('~~~'); - output.writeln(); - case 'math': - output.writeln(r'$$'); - output.writeln(node.innerText); - output.writeln(r'$$'); - output.writeln(); - case 'img': - final src = node.getAttribute('src') ?? ''; - final alt = node.getAttribute('alt') ?? ''; - output.writeln('![${_plain(alt)}]($src)'); - output.writeln(); - case 'video': - output.writeln(node.toXmlString()); - output.writeln(); - case 'list': - for (final item in node.childElements) { - final text = _xmlInlineChildren(item).trim(); - if (text.isNotEmpty) { - output.writeln('- $text'); - } - } - output.writeln(); - case 'include': - final from = node.getAttribute('from') ?? ''; - if (from.isNotEmpty) { - output.writeln('> Included content: `$from`'); - output.writeln(); - } - default: - for (final child in node.children) { - _writeXmlBlock(output, child, headingLevel: headingLevel); - } - } - } - - String _xmlInlineChildren(XmlElement element) { - return element.children - .map(_xmlInline) - .join() - .replaceAll(RegExp(r'[ \t]+'), ' '); - } - - String _xmlInline(XmlNode node) { - if (node is XmlText) { - return node.value; - } - if (node is! XmlElement) { - return ''; - } - final body = node.children.map(_xmlInline).join(); - return switch (node.name.local.toLowerCase()) { - 'b' || 'strong' => '**$body**', - 'i' || 'em' => '*$body*', - 'code' => '`${body.replaceAll('`', r'\`')}`', - 'a' => '[${body.trim()}](${node.getAttribute('href') ?? ''})', - 'img' => - '![${_plain(node.getAttribute('alt') ?? '')}]' - '(${node.getAttribute('src') ?? ''})', - 'math' => '\$${body.trim()}\$', - 'br' => ' \n', - 'include' => '', - _ => body, - }; - } - - String _plain(String value) => value - .replaceAll('\\', r'\\') - .replaceAll('[', r'\[') - .replaceAll(']', r'\]'); - WritersidePdfFailureCode _failureCode(MarkdownPdfFailureCode code) { return switch (code) { MarkdownPdfFailureCode.compilerUnavailable => @@ -551,14 +379,6 @@ class WritersidePdfExportService { } } -class _SourceReplacement { - const _SourceReplacement(this.start, this.end, this.value); - - final int start; - final int end; - final String value; -} - extension _FirstOrNull on Iterable { T? get firstOrNull => isEmpty ? null : first; } diff --git a/lib/src/export/writerside_pdf_export_ui.dart b/lib/src/export/writerside_pdf_export_ui.dart index 539173d7..84906f21 100644 --- a/lib/src/export/writerside_pdf_export_ui.dart +++ b/lib/src/export/writerside_pdf_export_ui.dart @@ -129,6 +129,7 @@ Future exportWritersideModuleToPdf( final token = WritersidePdfCancellationToken(); final request = WritersidePdfExportRequest( moduleRoot: module.rootPath, + projectRoot: workspace.rootPath, instanceId: selection.instance.id, destinationPath: destination, overwrite: overwrite, diff --git a/lib/src/export/writerside_pdf_models.dart b/lib/src/export/writerside_pdf_models.dart index cd17950d..f7403934 100644 --- a/lib/src/export/writerside_pdf_models.dart +++ b/lib/src/export/writerside_pdf_models.dart @@ -9,10 +9,12 @@ class WritersidePdfExportRequest { required this.instanceId, required this.destinationPath, required this.overwrite, + this.projectRoot, this.options = const MarkdownPdfOptions(), }); final String moduleRoot; + final String? projectRoot; final String instanceId; final String destinationPath; final bool overwrite; diff --git a/lib/src/markdown/markdown_ast_adapter.dart b/lib/src/markdown/markdown_ast_adapter.dart index 9c1cc442..09bc2a07 100644 --- a/lib/src/markdown/markdown_ast_adapter.dart +++ b/lib/src/markdown/markdown_ast_adapter.dart @@ -8,6 +8,7 @@ import 'markdown_model.dart'; import 'math_syntax.dart'; import 'raw_html_adapter.dart'; import 'raw_html_policy.dart'; +import '../writerside/writerside_schema.dart'; const _rawHtmlAdapter = RawHtmlAdapter(); @@ -1162,21 +1163,7 @@ class MarkdownAstAdapter { } bool _writersideBlockTag(String tag) { - return { - 'note', - 'tip', - 'warning', - 'quote', - 'tabs', - 'tab', - 'procedure', - 'step', - 'chapter', - 'code-block', - 'deflist', - 'def', - 'video', - }.contains(tag); + return WritersideSchema.isMarkdownSemanticBlock(tag); } bool _editableWritersideTag(String tag) { diff --git a/lib/src/markdown/markdown_parser.dart b/lib/src/markdown/markdown_parser.dart index 73ae9128..70260078 100644 --- a/lib/src/markdown/markdown_parser.dart +++ b/lib/src/markdown/markdown_parser.dart @@ -15,6 +15,7 @@ import 'markdown_fence.dart'; import 'markdown_model.dart'; import 'math_syntax.dart'; import 'raw_html_policy.dart'; +import '../writerside/writerside_schema.dart'; // Cross-file diagnostics are intentionally scoped to Markdown files that // resolve inside the opened workspace. Targets outside that root, unsupported @@ -1402,8 +1403,8 @@ class MarkdownParser { } final name = match.group(1)!; final normalizedName = name.toLowerCase(); - if (!_writersideXmlTag(normalizedName) && - (isSafeHtmlTag(normalizedName) || isUnsafeHtmlTag(normalizedName))) { + if ((isSafeHtmlTag(normalizedName) || isUnsafeHtmlTag(normalizedName)) && + !WritersideSchema.isMarkdownSemanticBlock(normalizedName)) { return; } xmlBlocks.add( @@ -1459,22 +1460,6 @@ class MarkdownParser { ); } - bool _writersideXmlTag(String tag) { - return { - 'var', - 'tabs', - 'tab', - 'code-block', - 'chapter', - 'procedure', - 'note', - 'tip', - 'warning', - 'quote', - 'video', - }.contains(tag); - } - List _validateLocalReferences({ required String filePath, required String? workspaceRoot, diff --git a/lib/src/markdown/preview_model.dart b/lib/src/markdown/preview_model.dart index 2baa7fbc..0a92e0a6 100644 --- a/lib/src/markdown/preview_model.dart +++ b/lib/src/markdown/preview_model.dart @@ -1,11 +1,13 @@ import '../core/source_span.dart'; import '../core/uri_utils.dart'; import '../visualization/visualization_models.dart'; -import 'package:xml/xml.dart'; import 'busymark_document.dart'; import 'document_outline.dart'; import 'markdown_model.dart'; import 'math_syntax.dart'; +import '../writerside/writerside_document_parser.dart'; +import '../writerside/writerside_document_renderer.dart'; +import '../writerside/writerside_schema.dart'; enum PreviewBlockKind { heading, @@ -142,6 +144,18 @@ class MarkdownPreviewBuilder { const MarkdownPreviewBuilder(); PreviewDocument build(ParsedMarkdownDocument document) { + if (document.mode == MarkdownMode.writersideMarkdown) { + final semantic = const WritersideDocumentParser().parseMarkdown( + filePath: document.filePath, + source: document.source, + markdown: document.busyDocument, + ); + final rendered = const WritersideDocumentRenderer().toBusyDocument( + semantic, + title: document.title, + ); + return const BusyMarkPreviewBuilder().build(rendered); + } return PreviewDocument( title: document.title ?? '', modeLabel: '', @@ -181,6 +195,10 @@ class BusyMarkPreviewBuilder { text: _plainText(block.inlines), level: int.tryParse(block.attributes['level'] ?? ''), inlines: _inlines(block.inlines, 'block-${block.id}.i'), + children: [ + for (final (index, child) in block.children.indexed) + _block(child, '$path.b$index'), + ], attributes: { ...block.attributes, if (block.attributes['id'] case final id?) 'id': id, @@ -257,6 +275,10 @@ class BusyMarkPreviewBuilder { BusyBlockKind.writersideTabs => PreviewBlock( kind: PreviewBlockKind.tabs, text: _plainText(block.inlines), + children: [ + for (final (index, child) in block.children.indexed) + _block(child, '$path.b$index'), + ], attributes: block.attributes, ), BusyBlockKind.writersideProcedure => @@ -266,6 +288,10 @@ class BusyMarkPreviewBuilder { text: _plainText(block.inlines).isEmpty ? block.attributes['title'] ?? '' : _plainText(block.inlines), + children: [ + for (final (index, child) in block.children.indexed) + _block(child, '$path.b$index'), + ], attributes: block.attributes, ), BusyBlockKind.htmlBlock when block.children.isNotEmpty => PreviewBlock( @@ -354,232 +380,95 @@ class BusyMarkPreviewBuilder { PreviewBlock? _writersideSemanticBlock(BusyBlock block, String path) { final source = block.rawSource; if (source == null || source.trim().isEmpty) { - return null; + return _writersideRenderedSemanticBlock(block, path); } try { - final fragment = XmlDocumentFragment.parse(source.trim()); - final elements = fragment.children.whereType().toList(); - if (elements.length != 1) { + final semantic = const WritersideDocumentParser().parseXml( + filePath: block.sourceSpan?.filePath ?? '', + source: source, + ); + if (!semantic.isWellFormed) { return null; } - return _writersideSemanticElement( - elements.single, - '$path.xml', - editorBlockId: block.id, + final rendered = const WritersideDocumentRenderer().toBusyDocument( + semantic, ); + final children = [ + for (final (index, child) in rendered.blocks.indexed) + _block(child, '$path.semantic$index'), + ]; + if (children.length == 1) { + return _withPreviewAttributes(children.single, { + ...children.single.attributes, + 'editorBlockId': block.id, + }); + } + if (children.isNotEmpty) { + return PreviewBlock( + kind: PreviewBlockKind.container, + text: children.map((child) => child.text).join('\n'), + children: children, + attributes: {...block.attributes, 'editorBlockId': block.id}, + ); + } + return null; } on Object { return null; } } - PreviewBlock _writersideSemanticElement( - XmlElement element, - String path, { - String? editorBlockId, - Map inheritedAttributes = const {}, - }) { - final name = element.name.local.toLowerCase(); - final attributes = { - ...inheritedAttributes, - 'element': name, - for (final attribute in element.attributes) - attribute.name.local: attribute.value, - if (editorBlockId != null) 'editorBlockId': editorBlockId, - }; - final title = element.getAttribute('title')?.trim() ?? ''; - final children = []; - var childIndex = 0; - for (final child in element.children.whereType()) { - final childName = child.name.local.toLowerCase(); - if (childName == 'math') { - continue; - } - if (name == 'step' && childName == 'p') { - continue; - } - children.add( - _writersideSemanticElement( - child, - '$path.c${childIndex++}', - inheritedAttributes: name == 'deflist' && childName == 'def' - ? { - if (busyMarkWritersideIsCollapsible(attributes)) - busyMarkWritersideCollapsibleAttribute: 'true', - } - : const {}, - ), - ); - } - final inlines = _writersideXmlInlines(element.children, path); - final text = inlines.map((inline) => inline.text).join().trim(); - return switch (name) { - 'chapter' => PreviewBlock( - kind: PreviewBlockKind.heading, - text: title, - level: 2, - inlines: title.isEmpty ? const [] : parseInlineMarkdown(title), - children: children, - attributes: attributes, - ), - 'procedure' => PreviewBlock( - kind: PreviewBlockKind.procedure, - text: title, - inlines: title.isEmpty ? const [] : parseInlineMarkdown(title), - children: children, - attributes: attributes, - ), - 'step' => PreviewBlock( - kind: PreviewBlockKind.list, - text: text, - inlines: inlines, - children: children, - attributes: {...attributes, 'ordered': 'true'}, - ), - 'code-block' => _writersideCodeBlockPreview( - element, - attributes, - expressionId: '$path.math', - ), - 'deflist' => PreviewBlock( + PreviewBlock? _writersideRenderedSemanticBlock(BusyBlock block, String path) { + final semanticKind = WritersideSchema.capabilityFor( + block.attributes['element'] ?? '', + )?.kind; + final children = [ + for (final (index, child) in block.children.indexed) + _block(child, '$path.b$index'), + ]; + return switch (semanticKind) { + WritersideSemanticKind.definitionList => PreviewBlock( kind: PreviewBlockKind.definitionList, text: '', children: children, - attributes: attributes, + attributes: block.attributes, ), - 'def' => PreviewBlock( + WritersideSemanticKind.definition => PreviewBlock( kind: PreviewBlockKind.definition, - text: title, - inlines: title.isEmpty ? const [] : parseInlineMarkdown(title), - children: children, - attributes: attributes, - ), - 'note' || 'tip' || 'warning' || 'quote' => PreviewBlock( - kind: name == 'quote' - ? PreviewBlockKind.quote - : PreviewBlockKind.admonition, - text: text, - inlines: inlines, - children: children, - attributes: {...attributes, 'style': name}, - ), - 'tabs' || 'tab' => PreviewBlock( - kind: PreviewBlockKind.tabs, - text: title, - children: children, - attributes: attributes, - ), - _ => PreviewBlock( - kind: PreviewBlockKind.paragraph, - text: text, - inlines: inlines, + text: _plainText(block.inlines), + inlines: _inlines(block.inlines, 'block-${block.id}.i'), children: children, - attributes: attributes, + attributes: block.attributes, ), + _ + when block.kind == BusyBlockKind.writersideRawXml && + children.isNotEmpty => + PreviewBlock( + kind: PreviewBlockKind.container, + text: children.map((child) => child.text).join('\n'), + children: children, + attributes: block.attributes, + ), + _ => null, }; } - PreviewBlock _writersideCodeBlockPreview( - XmlElement element, - Map attributes, { - required String expressionId, - }) { - final language = element.getAttribute('lang'); - final text = element.innerText - .replaceFirst(RegExp(r'^\n'), '') - .replaceFirst(RegExp(r'\n\s*$'), ''); - if (language?.trim().toLowerCase() == 'tex') { - return PreviewBlock( - kind: PreviewBlockKind.math, - text: text, - attributes: { - ...attributes, - if (language != null) 'language': language, - busyMarkMathExpressionAttribute: text, - busyMarkMathDisplayAttribute: 'true', - busyMarkMathSourceFormAttribute: - BusyMathSourceForm.writersideTexElement.name, - 'expressionId': expressionId, - }, - ); - } - return PreviewBlock( - kind: PreviewBlockKind.code, - text: text, - language: language, - visualization: VisualizationDescriptor.maybeForFenceLanguage(language), - attributes: attributes, - ); - } - - List _writersideXmlInlines( - Iterable nodes, - String path, - ) { - final result = []; - var index = 0; - for (final node in nodes) { - if (node is XmlText) { - final text = node.value.replaceAll(RegExp(r'\s+'), ' '); - if (text.trim().isNotEmpty) { - result.add(PreviewInline(kind: PreviewInlineKind.text, text: text)); - } - continue; - } - if (node is! XmlElement) { - continue; - } - final name = node.name.local.toLowerCase(); - if ({ - 'chapter', - 'procedure', - 'step', - 'code-block', - 'deflist', - 'def', - 'p', - 'note', - 'tip', - 'warning', - 'quote', - 'tabs', - 'tab', - }.contains(name)) { - continue; - } - if (name == 'math') { - result.add( - PreviewInline( - kind: PreviewInlineKind.math, - text: node.innerText, - attributes: { - busyMarkMathSourceFormAttribute: - BusyMathSourceForm.writersideElement.name, - 'expressionId': '$path.math${index++}', - }, - ), - ); - continue; - } - final nested = _writersideXmlInlines(node.children, '$path.i${index++}'); - final kind = switch (name) { - 'strong' || 'b' => PreviewInlineKind.strong, - 'em' || 'i' => PreviewInlineKind.emphasis, - 'code' => PreviewInlineKind.code, - 'a' => PreviewInlineKind.link, - _ => PreviewInlineKind.text, - }; - final nestedText = nested.map((inline) => inline.text).join(); - result.add( - PreviewInline( - kind: kind, - text: nestedText, - destination: name == 'a' ? node.getAttribute('href') : null, - children: nested, - ), - ); - } - return result; - } + PreviewBlock _withPreviewAttributes( + PreviewBlock block, + Map attributes, + ) => PreviewBlock( + kind: block.kind, + text: block.text, + level: block.level, + language: block.language, + visualization: block.visualization, + inlines: block.inlines, + children: block.children, + attributes: attributes, + sourceStartLine: block.sourceStartLine, + sourceEndLine: block.sourceEndLine, + sourceStartOffset: block.sourceStartOffset, + sourceEndOffset: block.sourceEndOffset, + ); PreviewBlock _blockquote(BusyBlock block, String path) { final style = busyAdmonitionStyleFromName(block.attributes['style']); diff --git a/lib/src/workspace/workspace_model.dart b/lib/src/workspace/workspace_model.dart index f78ec113..18df5516 100644 --- a/lib/src/workspace/workspace_model.dart +++ b/lib/src/workspace/workspace_model.dart @@ -3,6 +3,7 @@ import '../markdown/document_outline.dart'; import '../markdown/markdown_model.dart'; import '../markdown/preview_model.dart'; import '../writerside/writerside_model.dart'; +import '../writerside/writerside_project.dart'; import 'document_buffer.dart'; import 'workspace_message.dart'; import 'workspace_file_snapshot.dart'; @@ -104,6 +105,7 @@ class Workspace { this.activeFileSnapshot, this.markdown, this.writersideModule, + this.writersideProject, }) : openFilePaths = _normalizedOpenFilePaths(openFilePaths, activeFilePath), activeFileModifiedAt = activeFileModifiedAt ?? activeFileSnapshot?.modifiedAt; @@ -124,6 +126,7 @@ class Workspace { sortDiagnostics([...diagnostics, ...runtimeDiagnostics]); final ParsedMarkdownDocument? markdown; final WritersideModule? writersideModule; + final WritersideProject? writersideProject; Workspace copyWith({ Object? activeFilePath = _copyWithUnset, @@ -136,6 +139,7 @@ class Workspace { List? runtimeDiagnostics, Object? markdown = _copyWithUnset, Object? writersideModule = _copyWithUnset, + Object? writersideProject = _copyWithUnset, }) { final nextActiveFilePath = identical(activeFilePath, _copyWithUnset) ? this.activeFilePath @@ -154,6 +158,9 @@ class Workspace { final nextWritersideModule = identical(writersideModule, _copyWithUnset) ? this.writersideModule : writersideModule as WritersideModule?; + final nextWritersideProject = identical(writersideProject, _copyWithUnset) + ? this.writersideProject + : writersideProject as WritersideProject?; return Workspace( id: id, rootPath: rootPath, @@ -169,6 +176,7 @@ class Workspace { runtimeDiagnostics: runtimeDiagnostics ?? this.runtimeDiagnostics, markdown: nextMarkdown, writersideModule: nextWritersideModule, + writersideProject: nextWritersideProject, ); } } diff --git a/lib/src/workspace/workspace_service.dart b/lib/src/workspace/workspace_service.dart index b0d8a06f..9aec1764 100644 --- a/lib/src/workspace/workspace_service.dart +++ b/lib/src/workspace/workspace_service.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:crypto/crypto.dart' as crypto; import 'package:path/path.dart' as p; -import 'package:xml/xml.dart'; import '../core/anchored_path_guard.dart'; import '../core/busymark_exception.dart'; @@ -11,16 +10,16 @@ import '../core/debug_log.dart'; import '../core/diagnostic.dart'; import '../core/linux_atomic_file_api.dart'; import '../core/path_utils.dart'; -import '../markdown/busymark_document.dart'; import '../markdown/markdown_model.dart'; import '../markdown/markdown_parser.dart'; -import '../markdown/math_syntax.dart'; import '../markdown/preview_model.dart'; -import '../visualization/visualization_models.dart'; import '../writerside/writerside_module_service.dart'; +import '../writerside/writerside_document_renderer.dart'; +import '../writerside/writerside_document_resolver.dart'; import '../writerside/writerside_instance_service.dart'; import '../writerside/writerside_model.dart'; import '../writerside/writerside_project_creator.dart'; +import '../writerside/writerside_project.dart'; import '../writerside/writerside_toc_editor.dart'; import '../writerside/writerside_topic_creator.dart'; import '../writerside/writerside_topic_file_editor.dart'; @@ -81,6 +80,8 @@ class WorkspaceService { this.writersideTocEditor = const WritersideTocEditor(), this.writersideTopicFileEditor = const WritersideTopicFileEditor(), this.writersideTopicRemovalService = const WritersideTopicRemovalService(), + this.writersideDocumentResolver = const WritersideDocumentResolver(), + this.writersideDocumentRenderer = const WritersideDocumentRenderer(), this.scanOptions = const WorkspaceScanOptions(), Future Function(String targetPath)? beforeNewFilePublish, Future Function(String targetPath, int committedCount)? @@ -99,6 +100,8 @@ class WorkspaceService { final WritersideTocEditor writersideTocEditor; final WritersideTopicFileEditor writersideTopicFileEditor; final WritersideTopicRemovalService writersideTopicRemovalService; + final WritersideDocumentResolver writersideDocumentResolver; + final WritersideDocumentRenderer writersideDocumentRenderer; final WorkspaceScanOptions scanOptions; final bool _useWorkspaceScanOptionsForWriterside; final Future Function(String targetPath)? _beforeNewFilePublish; @@ -141,7 +144,16 @@ class WorkspaceService { ); if (File(p.join(canonicalPath, 'writerside.cfg')).existsSync() || File(p.join(canonicalPath, 'project.ihp')).existsSync()) { - return _openWriterside(canonicalPath); + return _openWriterside(canonicalPath, preferredModuleRoot: canonicalPath); + } + final moduleRoots = await _writersideProjectService.discoverModuleRoots( + canonicalPath, + ); + if (moduleRoots.isNotEmpty) { + return _openWriterside( + canonicalPath, + preferredModuleRoot: moduleRoots.first, + ); } return _openMarkdownFolder(canonicalPath); } @@ -371,6 +383,47 @@ class WorkspaceService { return workspace.writersideModule!; } + Future selectWritersideContext( + Workspace workspace, { + required String moduleId, + String? instanceId, + }) async { + final project = workspace.writersideProject; + if (project == null) { + throw const BusyMarkException('writerside.topic.module-not-open'); + } + final selectedProject = project.withSelection( + moduleId: moduleId, + instanceId: instanceId, + ); + final module = selectedProject.activeModule; + if (module == null || + (instanceId != null && + !module.instances.any((instance) => instance.id == instanceId))) { + throw const BusyMarkException('writerside.topic.module-not-open'); + } + final activeFile = + _startTopicPath(module) ?? + (module.topics.isEmpty ? null : module.topics.first.filePath); + return workspace.copyWith( + activeFilePath: activeFile, + activeFileSnapshot: activeFile == null + ? null + : await fileSnapshot(activeFile), + openFilePaths: activeFile == null + ? workspace.openFilePaths + : [...workspace.openFilePaths, activeFile], + diagnostics: selectedProject.diagnostics, + markdown: module.topics + .where((topic) => topic.filePath == activeFile) + .map((topic) => topic.markdown) + .whereType() + .firstOrNull, + writersideModule: module, + writersideProject: selectedProject, + ); + } + Future _currentWritersideModule(Workspace workspace) async { final openedModule = _writersideModule(workspace); return _loadWritersideModule(openedModule.rootPath); @@ -1266,45 +1319,15 @@ class WorkspaceService { if (active == null) { return null; } + if (workspace.kind == WorkspaceKind.writersideModule) { + return _buildWritersidePreview(workspace, active, source); + } final currentMarkdown = workspace.markdown; if (currentMarkdown != null && p.equals(currentMarkdown.filePath, active) && currentMarkdown.source == source) { return previewBuilder.build(currentMarkdown); } - if (workspace.kind == WorkspaceKind.writersideModule) { - final module = workspace.writersideModule; - if (module == null) { - return null; - } - final topic = module.topics - .where((item) => item.filePath == active) - .firstOrNull; - if (topic == null) { - return PreviewDocument( - title: p.basename(active), - modeLabel: '', - compatibility: '', - blocks: [PreviewBlock(kind: PreviewBlockKind.code, text: source)], - ); - } - if (topic.format == WritersideTopicFormat.markdown) { - final parsed = markdownParser.parse( - filePath: active, - source: source, - mode: MarkdownMode.writersideMarkdown, - workspaceRoot: topic.topicRoot, - validateLocalReferences: false, - ); - return previewBuilder.build(parsed); - } - return PreviewDocument( - title: topic.title ?? topic.fileName, - modeLabel: '', - compatibility: '', - blocks: _xmlPreviewBlocks(source, topic.title), - ); - } final parsed = markdownParser.parse( filePath: active, source: source, @@ -1325,45 +1348,15 @@ class WorkspaceService { if (active == null) { return null; } + if (workspace.kind == WorkspaceKind.writersideModule) { + return _buildWritersidePreview(workspace, active, source); + } final currentMarkdown = workspace.markdown; if (currentMarkdown != null && p.equals(currentMarkdown.filePath, active) && currentMarkdown.source == source) { return previewBuilder.build(currentMarkdown); } - if (workspace.kind == WorkspaceKind.writersideModule) { - final module = workspace.writersideModule; - if (module == null) { - return null; - } - final topic = module.topics - .where((item) => item.filePath == active) - .firstOrNull; - if (topic == null) { - return PreviewDocument( - title: p.basename(active), - modeLabel: '', - compatibility: '', - blocks: [PreviewBlock(kind: PreviewBlockKind.code, text: source)], - ); - } - if (topic.format == WritersideTopicFormat.markdown) { - final parsed = await markdownParser.parseAsync( - filePath: active, - source: source, - mode: MarkdownMode.writersideMarkdown, - workspaceRoot: topic.topicRoot, - validateLocalReferences: false, - ); - return previewBuilder.build(parsed); - } - return PreviewDocument( - title: topic.title ?? topic.fileName, - modeLabel: '', - compatibility: '', - blocks: _xmlPreviewBlocks(source, topic.title), - ); - } final parsed = await markdownParser.parseAsync( filePath: active, source: source, @@ -1374,6 +1367,69 @@ class WorkspaceService { return previewBuilder.build(parsed); } + PreviewDocument? _buildWritersidePreview( + Workspace workspace, + String active, + String source, + ) { + final module = workspace.writersideModule; + if (module == null) { + return null; + } + final originalTopic = module.topics + .where((item) => item.filePath == active) + .firstOrNull; + if (originalTopic == null) { + return PreviewDocument( + title: p.basename(active), + modeLabel: '', + compatibility: '', + blocks: [PreviewBlock(kind: PreviewBlockKind.code, text: source)], + ); + } + final topic = originalTopic.format == WritersideTopicFormat.markdown + ? writersideService.topicParser.parseMarkdown( + filePath: active, + source: source, + topicsRoot: originalTopic.topicRoot, + ) + : writersideService.topicParser.parseXml( + filePath: active, + source: source, + topicsRoot: originalTopic.topicRoot, + ); + final instance = + workspace.writersideProject?.activeInstance ?? + module.instances + .where( + (candidate) => + !candidate.isLibrary && + candidate.topicFileSet.any( + (reference) => + module.topicByReference(reference)?.filePath == active, + ), + ) + .firstOrNull ?? + module.instances.where((candidate) => !candidate.isLibrary).firstOrNull; + final resolved = writersideDocumentResolver.resolve( + topic.document, + WritersideResolveContext( + module: module, + topic: topic, + instance: instance, + modulesByOrigin: + workspace.writersideProject?.modulesByOrigin ?? + {if (module.config.moduleName case final name?) name: module}, + ), + ); + return const BusyMarkPreviewBuilder().build( + writersideDocumentRenderer.toBusyDocument( + resolved.document, + title: resolved.title ?? topic.title ?? topic.fileName, + ), + ); + } + Future _openSingleMarkdown(String filePath) async { final load = await loadTextWithSnapshot(filePath); final rootPath = p.dirname(filePath); @@ -1454,8 +1510,14 @@ class WorkspaceService { Future _openWriterside( String rootPath, { String? activeFilePath, + String? preferredModuleRoot, }) async { - final module = await _loadWritersideModule(rootPath); + final project = await _writersideProjectService.load( + rootPath, + preferredModuleRoot: preferredModuleRoot ?? rootPath, + ); + final module = + project.activeModule ?? await _loadWritersideModule(rootPath); final scan = await scanWorkspaceEntities( rootPath, options: _workspaceDisplayScanOptions, @@ -1464,7 +1526,7 @@ class WorkspaceService { final files = []; final directories = _workspaceDirectories(entities, rootPath); final diagnostics = [ - ...module.diagnostics, + ...project.diagnostics, ...scan.diagnostics, ]; for (final entity in entities.whereType()) { @@ -1491,6 +1553,7 @@ class WorkspaceService { directories: directories, diagnostics: sortDiagnostics(diagnostics), writersideModule: module, + writersideProject: project, markdown: module.topics .where((topic) => topic.filePath == firstTopic) .map((topic) => topic.markdown) @@ -1499,6 +1562,14 @@ class WorkspaceService { ); } + WritersideProjectService get _writersideProjectService => + WritersideProjectService( + moduleService: writersideService, + scanOptions: _useWorkspaceScanOptionsForWriterside + ? scanOptions + : writersideService.scanOptions, + ); + String? _startTopicPath(WritersideModule module) { for (final instance in module.instances) { if (instance.isLibrary || instance.startPage == null) { @@ -1652,456 +1723,6 @@ class WorkspaceService { ), ]; } - - bool _visibleSemanticElement(String name) { - return { - 'topic', - 'chapter', - 'p', - 'procedure', - 'step', - 'note', - 'tip', - 'warning', - 'quote', - 'tabs', - 'tab', - 'code-block', - 'deflist', - 'def', - 'img', - 'video', - 'a', - 'math', - }.contains(name); - } - - PreviewBlockKind _semanticKind(String name) { - return switch (name) { - 'chapter' => PreviewBlockKind.heading, - 'procedure' => PreviewBlockKind.procedure, - 'note' || 'tip' || 'warning' => PreviewBlockKind.admonition, - 'quote' => PreviewBlockKind.quote, - 'tabs' || 'tab' => PreviewBlockKind.tabs, - 'code-block' => PreviewBlockKind.code, - 'deflist' => PreviewBlockKind.definitionList, - 'def' => PreviewBlockKind.definition, - 'img' => PreviewBlockKind.image, - 'video' => PreviewBlockKind.video, - _ => PreviewBlockKind.paragraph, - }; - } - - String _semanticText(String name, String? title) { - return switch (name) { - 'topic' => title ?? '', - 'chapter' || - 'procedure' || - 'step' || - 'note' || - 'tip' || - 'warning' || - 'quote' || - 'tabs' || - 'tab' || - 'code-block' || - 'deflist' || - 'def' || - 'img' || - 'video' || - 'a' => '', - _ => name, - }; - } - - List _xmlPreviewBlocks(String source, String? title) { - try { - final document = XmlDocument.parse(source); - final blocks = []; - var mathIndex = 0; - for (final element in document.descendants.whereType()) { - final name = element.name.local; - if (!_visibleSemanticElement(name)) { - continue; - } - if (_insideXmlAdmonition(element)) { - continue; - } - if (_insideOwnedXmlCollapsible(element)) { - continue; - } - final attributes = { - 'element': name, - for (final attribute in element.attributes) - attribute.name.local: attribute.value, - }; - if (name == 'math') { - final expression = element.innerText; - blocks.add( - PreviewBlock( - kind: PreviewBlockKind.paragraph, - text: expression, - inlines: [ - PreviewInline( - kind: PreviewInlineKind.math, - text: expression, - attributes: { - busyMarkMathSourceFormAttribute: - BusyMathSourceForm.writersideElement.name, - 'expressionId': 'topic-math-${mathIndex++}', - }, - ), - ], - attributes: attributes, - ), - ); - continue; - } - if (name == 'code-block') { - blocks.add( - _xmlCodeBlockPreview( - element, - attributes, - nextMathId: () => 'topic-math-${mathIndex++}', - ), - ); - continue; - } - if ((name == 'chapter' || name == 'procedure' || name == 'deflist') && - busyMarkWritersideIsCollapsible(attributes)) { - blocks.add( - _xmlSemanticPreviewBlock( - element, - nextMathId: () => 'topic-math-${mathIndex++}', - ), - ); - continue; - } - final admonitionStyle = busyAdmonitionStyleFromName(name); - if (admonitionStyle != null) { - final text = element.innerText.trim(); - final inlines = _xmlPreviewInlines( - element.children, - nextMathId: () => 'topic-math-${mathIndex++}', - ); - blocks.add( - PreviewBlock( - kind: admonitionStyle == BusyAdmonitionStyle.quote - ? PreviewBlockKind.quote - : PreviewBlockKind.admonition, - text: text, - inlines: inlines.isEmpty && text.isNotEmpty - ? [PreviewInline(kind: PreviewInlineKind.text, text: text)] - : inlines, - attributes: {...attributes, 'style': admonitionStyle.name}, - ), - ); - continue; - } - blocks.add( - PreviewBlock( - kind: _semanticKind(name), - text: switch (name) { - 'video' => element.getAttribute('src') ?? '', - 'chapter' || - 'procedure' || - 'def' => element.getAttribute('title') ?? '', - 'code-block' => - element.innerText - .replaceFirst(RegExp(r'^\n'), '') - .replaceFirst(RegExp(r'\n\s*$'), ''), - _ => _semanticText(name, title), - }, - language: name == 'code-block' - ? element.getAttribute('lang') - : null, - attributes: attributes, - ), - ); - } - if (blocks.isNotEmpty) { - return blocks; - } - } on Object { - // The ordinary semantic-element fallback below still provides a useful - // preview while the user repairs malformed topic XML. - } - final names = RegExp( - r'<\s*([A-Za-z][A-Za-z0-9_-]*)\b', - ).allMatches(source).map((match) => match.group(1)!).toList(); - if (names.isEmpty) { - return [PreviewBlock(kind: PreviewBlockKind.code, text: source)]; - } - return [ - for (final name in names) - if (_visibleSemanticElement(name)) - PreviewBlock( - kind: _semanticKind(name), - text: _semanticText(name, title), - attributes: {'element': name}, - ), - ]; - } - - bool _insideXmlAdmonition(XmlElement element) { - XmlNode? parent = element.parent; - while (parent != null) { - if (parent is XmlElement && - busyAdmonitionStyleFromName(parent.name.local) != null) { - return true; - } - parent = parent.parent; - } - return false; - } - - bool _insideOwnedXmlCollapsible(XmlElement element) { - XmlNode? parent = element.parent; - while (parent != null) { - if (parent is XmlElement) { - final name = parent.name.local.toLowerCase(); - if ({'chapter', 'procedure', 'deflist'}.contains(name) && - busyMarkWritersideIsCollapsible({ - for (final attribute in parent.attributes) - attribute.name.local: attribute.value, - })) { - return true; - } - } - parent = parent.parent; - } - return false; - } - - PreviewBlock _xmlSemanticPreviewBlock( - XmlElement element, { - required String Function() nextMathId, - Map inheritedAttributes = const {}, - }) { - final name = element.name.local.toLowerCase(); - final attributes = { - ...inheritedAttributes, - 'element': name, - for (final attribute in element.attributes) - attribute.name.local: attribute.value, - }; - final title = element.getAttribute('title')?.trim() ?? ''; - final children = []; - for (final child in element.children.whereType()) { - final childName = child.name.local.toLowerCase(); - if (!_visibleSemanticElement(childName) || childName == 'math') { - continue; - } - if (name == 'step' && childName == 'p') { - continue; - } - children.add( - _xmlSemanticPreviewBlock( - child, - nextMathId: nextMathId, - inheritedAttributes: name == 'deflist' && childName == 'def' - ? { - if (busyMarkWritersideIsCollapsible(attributes)) - busyMarkWritersideCollapsibleAttribute: 'true', - } - : const {}, - ), - ); - } - final inlines = _xmlPreviewInlines( - element.children, - nextMathId: nextMathId, - ); - final text = inlines.map((inline) => inline.text).join().trim(); - return switch (name) { - 'chapter' => PreviewBlock( - kind: PreviewBlockKind.heading, - text: title, - level: 2, - inlines: title.isEmpty ? const [] : parseInlineMarkdown(title), - children: children, - attributes: attributes, - ), - 'procedure' => PreviewBlock( - kind: PreviewBlockKind.procedure, - text: title, - inlines: title.isEmpty ? const [] : parseInlineMarkdown(title), - children: children, - attributes: attributes, - ), - 'step' => PreviewBlock( - kind: PreviewBlockKind.list, - text: text, - inlines: inlines, - children: children, - attributes: {...attributes, 'ordered': 'true'}, - ), - 'code-block' => _xmlCodeBlockPreview( - element, - attributes, - nextMathId: nextMathId, - ), - 'deflist' => PreviewBlock( - kind: PreviewBlockKind.definitionList, - text: '', - children: children, - attributes: attributes, - ), - 'def' => PreviewBlock( - kind: PreviewBlockKind.definition, - text: title, - inlines: title.isEmpty ? const [] : parseInlineMarkdown(title), - children: children, - attributes: attributes, - ), - 'note' || 'tip' || 'warning' || 'quote' => PreviewBlock( - kind: name == 'quote' - ? PreviewBlockKind.quote - : PreviewBlockKind.admonition, - text: text, - inlines: inlines, - children: children, - attributes: {...attributes, 'style': name}, - ), - _ => PreviewBlock( - kind: _semanticKind(name), - text: text, - inlines: inlines, - children: children, - attributes: attributes, - ), - }; - } - - PreviewBlock _xmlCodeBlockPreview( - XmlElement element, - Map attributes, { - required String Function() nextMathId, - }) { - final language = element.getAttribute('lang'); - final text = element.innerText - .replaceFirst(RegExp(r'^\n'), '') - .replaceFirst(RegExp(r'\n\s*$'), ''); - if (language?.trim().toLowerCase() == 'tex') { - return PreviewBlock( - kind: PreviewBlockKind.math, - text: text, - attributes: { - ...attributes, - if (language != null) 'language': language, - busyMarkMathExpressionAttribute: text, - busyMarkMathDisplayAttribute: 'true', - busyMarkMathSourceFormAttribute: - BusyMathSourceForm.writersideTexElement.name, - 'expressionId': nextMathId(), - }, - ); - } - return PreviewBlock( - kind: PreviewBlockKind.code, - text: text, - language: language, - visualization: VisualizationDescriptor.maybeForFenceLanguage(language), - attributes: attributes, - ); - } - - List _xmlPreviewInlines( - Iterable nodes, { - required String Function() nextMathId, - }) { - final result = []; - for (final node in nodes) { - if (node is XmlText) { - final text = node.value.replaceAll(RegExp(r'\s+'), ' '); - if (text.trim().isNotEmpty) { - result.add(PreviewInline(kind: PreviewInlineKind.text, text: text)); - } - continue; - } - if (node is! XmlElement) { - continue; - } - final name = node.name.local.toLowerCase(); - if (name == 'math') { - final expression = node.innerText; - result.add( - PreviewInline( - kind: PreviewInlineKind.math, - text: expression, - attributes: { - busyMarkMathSourceFormAttribute: - BusyMathSourceForm.writersideElement.name, - 'expressionId': nextMathId(), - }, - ), - ); - continue; - } - if (name == 'img') { - result.add( - PreviewInline( - kind: PreviewInlineKind.image, - text: node.getAttribute('alt') ?? '', - destination: node.getAttribute('src'), - ), - ); - continue; - } - final children = _xmlPreviewInlines( - node.children, - nextMathId: nextMathId, - ); - final text = node.innerText; - switch (name) { - case 'b' || 'strong': - result.add( - PreviewInline( - kind: PreviewInlineKind.strong, - text: text, - children: children, - ), - ); - break; - case 'i' || 'emphasis': - result.add( - PreviewInline( - kind: PreviewInlineKind.emphasis, - text: text, - children: children, - ), - ); - break; - case 'code' || 'control' || 'path' || 'shortcut': - result.add(PreviewInline(kind: PreviewInlineKind.code, text: text)); - break; - case 'a': - result.add( - PreviewInline( - kind: PreviewInlineKind.link, - text: text, - destination: - node.getAttribute('href') ?? node.getAttribute('anchor'), - children: children, - ), - ); - break; - default: - result.addAll(children); - break; - } - if (name == 'p' && result.isNotEmpty) { - result.add( - const PreviewInline(kind: PreviewInlineKind.text, text: '\n'), - ); - } - } - while (result.lastOrNull?.kind == PreviewInlineKind.text && - result.lastOrNull?.text.trim().isEmpty == true) { - result.removeLast(); - } - return result; - } } List _encodeDocumentText( diff --git a/lib/src/writerside/writerside_document.dart b/lib/src/writerside/writerside_document.dart new file mode 100644 index 00000000..c418c21d --- /dev/null +++ b/lib/src/writerside/writerside_document.dart @@ -0,0 +1,229 @@ +import '../core/source_span.dart'; +import '../markdown/busymark_document.dart'; +import 'writerside_schema.dart'; + +enum WritersideDocumentFormat { xmlTopic, markdown } + +class WritersideDocument { + const WritersideDocument({ + required this.filePath, + required this.source, + required this.format, + required this.nodes, + this.isWellFormed = true, + }); + + final String filePath; + final String source; + final WritersideDocumentFormat format; + final List nodes; + final bool isWellFormed; + + WritersideElementNode? get rootElement => + nodes.whereType().firstOrNull; + + Iterable walk() sync* { + for (final node in nodes) { + yield* node.walk(); + } + } + + Iterable get elements => + walk().whereType(); + + WritersideElementNode? elementById(String id) { + for (final element in elements) { + if (element.attributes['id'] == id) { + return element; + } + } + return null; + } + + WritersideDocument copyWith({ + List? nodes, + bool? isWellFormed, + }) { + return WritersideDocument( + filePath: filePath, + source: source, + format: format, + nodes: nodes ?? this.nodes, + isWellFormed: isWellFormed ?? this.isWellFormed, + ); + } +} + +sealed class WritersideDocumentNode { + const WritersideDocumentNode({required this.span, required this.rawSource}); + + final SourceSpan span; + final String rawSource; + + Iterable walk() sync* { + yield this; + } + + String get plainText; +} + +class WritersideTextNode extends WritersideDocumentNode { + const WritersideTextNode({ + required this.text, + required super.span, + required super.rawSource, + }); + + final String text; + + @override + String get plainText => text; + + WritersideTextNode copyWith({String? text}) => WritersideTextNode( + text: text ?? this.text, + span: span, + rawSource: rawSource, + ); +} + +class WritersideRawNode extends WritersideDocumentNode { + const WritersideRawNode({required super.span, required super.rawSource}); + + @override + String get plainText => ''; +} + +sealed class WritersideElementNode extends WritersideDocumentNode { + const WritersideElementNode({ + required this.name, + required this.attributes, + required this.attributeSpans, + required this.children, + required super.span, + required super.rawSource, + }); + + final String name; + final Map attributes; + final Map attributeSpans; + final List children; + + WritersideSemanticKind? get semanticKind; + bool get schemaKnown; + + @override + String get plainText => children.map((node) => node.plainText).join(); + + @override + Iterable walk() sync* { + yield this; + for (final child in children) { + yield* child.walk(); + } + } + + WritersideElementNode copyWith({ + Map? attributes, + List? children, + }); +} + +/// A node for which BusyMark has an explicit semantic interpretation. +class WritersideSemanticElementNode extends WritersideElementNode { + const WritersideSemanticElementNode({ + required this.kind, + required super.name, + required super.attributes, + required super.attributeSpans, + required super.children, + required super.span, + required super.rawSource, + }); + + final WritersideSemanticKind kind; + + @override + WritersideSemanticKind get semanticKind => kind; + + @override + bool get schemaKnown => true; + + @override + WritersideSemanticElementNode copyWith({ + Map? attributes, + List? children, + }) { + return WritersideSemanticElementNode( + kind: kind, + name: name, + attributes: attributes ?? this.attributes, + attributeSpans: attributeSpans, + children: children ?? this.children, + span: span, + rawSource: rawSource, + ); + } +} + +/// A lossless node for schema-known elements without a special renderer, and +/// for extensions unknown to the selected schema version. +class WritersideGenericElementNode extends WritersideElementNode { + const WritersideGenericElementNode({ + required this.schemaKnown, + required super.name, + required super.attributes, + required super.attributeSpans, + required super.children, + required super.span, + required super.rawSource, + }); + + @override + final bool schemaKnown; + + @override + WritersideSemanticKind? get semanticKind => null; + + @override + WritersideGenericElementNode copyWith({ + Map? attributes, + List? children, + }) { + return WritersideGenericElementNode( + schemaKnown: schemaKnown, + name: name, + attributes: attributes ?? this.attributes, + attributeSpans: attributeSpans, + children: children ?? this.children, + span: span, + rawSource: rawSource, + ); + } +} + +/// A Markdown block retained without a lossy serialization step. Embedded +/// semantic XML blocks are parsed into [WritersideElementNode] instead. +class WritersideMarkdownBlockNode extends WritersideDocumentNode { + const WritersideMarkdownBlockNode({ + required this.block, + required super.span, + required super.rawSource, + }); + + final BusyBlock block; + + @override + String get plainText => block.plainText; + + WritersideMarkdownBlockNode copyWith({BusyBlock? block}) { + return WritersideMarkdownBlockNode( + block: block ?? this.block, + span: span, + rawSource: rawSource, + ); + } +} + +extension _FirstOrNull on Iterable { + T? get firstOrNull => isEmpty ? null : first; +} diff --git a/lib/src/writerside/writerside_document_parser.dart b/lib/src/writerside/writerside_document_parser.dart new file mode 100644 index 00000000..9261b008 --- /dev/null +++ b/lib/src/writerside/writerside_document_parser.dart @@ -0,0 +1,292 @@ +import 'package:xml/xml_events.dart'; + +import '../core/source_span.dart'; +import '../markdown/busymark_document.dart'; +import 'writerside_document.dart'; +import 'writerside_schema.dart'; + +class WritersideDocumentParser { + const WritersideDocumentParser(); + + WritersideDocument parseXml({ + required String filePath, + required String source, + }) { + try { + return WritersideDocument( + filePath: filePath, + source: source, + format: WritersideDocumentFormat.xmlTopic, + nodes: _parseXmlNodes(filePath: filePath, source: source), + ); + } on Object { + return WritersideDocument( + filePath: filePath, + source: source, + format: WritersideDocumentFormat.xmlTopic, + nodes: [ + WritersideRawNode( + span: SourceSpan.entireFile(filePath, source), + rawSource: source, + ), + ], + isWellFormed: false, + ); + } + } + + WritersideDocument parseMarkdown({ + required String filePath, + required String source, + required BusyDocument markdown, + }) { + final nodes = []; + for (final block in markdown.blocks) { + final span = block.sourceSpan ?? SourceSpan.entireFile(filePath, source); + final raw = + _safeSubstring(source, span.startOffset, span.endOffset) ?? + block.rawSource ?? + block.plainText; + if (_isSemanticXmlBlock(block, raw)) { + try { + final parsed = _parseXmlNodes( + filePath: filePath, + source: raw, + sourceOffset: span.startOffset, + completeSource: source, + ); + if (parsed.whereType().isNotEmpty) { + nodes.addAll(parsed); + continue; + } + } on Object { + // Retain the original Markdown block when an in-progress XML + // fragment is temporarily malformed. + } + } + nodes.add( + WritersideMarkdownBlockNode(block: block, span: span, rawSource: raw), + ); + } + return WritersideDocument( + filePath: filePath, + source: source, + format: WritersideDocumentFormat.markdown, + nodes: nodes, + ); + } + + List _parseXmlNodes({ + required String filePath, + required String source, + int sourceOffset = 0, + String? completeSource, + }) { + final fullSource = completeSource ?? source; + final roots = []; + final stack = <_ElementFrame>[]; + + void append(WritersideDocumentNode node) { + if (stack.isEmpty) { + roots.add(node); + } else { + stack.last.children.add(node); + } + } + + for (final event in parseEvents( + source, + withLocation: true, + validateNesting: true, + validateDocument: false, + )) { + final localStart = event.start ?? 0; + final localEnd = event.stop ?? localStart; + final start = sourceOffset + localStart; + final end = sourceOffset + localEnd; + if (event is XmlStartElementEvent) { + final opening = source.substring(localStart, localEnd); + final frame = _ElementFrame( + name: _localName(event.name), + attributes: { + for (final attribute in event.attributes) + _localName(attribute.name): attribute.value, + }, + attributeSpans: _attributeSpans( + filePath: filePath, + fullSource: fullSource, + openingSource: opening, + openingOffset: start, + ), + startOffset: start, + openingEndOffset: end, + ); + if (event.isSelfClosing) { + append(frame.build(filePath: filePath, source: fullSource, end: end)); + } else { + stack.add(frame); + } + continue; + } + if (event is XmlEndElementEvent) { + if (stack.isEmpty) { + continue; + } + final frame = stack.removeLast(); + append(frame.build(filePath: filePath, source: fullSource, end: end)); + continue; + } + if (event is XmlTextEvent) { + append( + WritersideTextNode( + text: event.value, + span: SourceSpan.fromOffsets( + filePath: filePath, + source: fullSource, + startOffset: start, + endOffset: end, + ), + rawSource: _safeSubstring(fullSource, start, end) ?? event.value, + ), + ); + continue; + } + if (event is XmlCDATAEvent) { + append( + WritersideTextNode( + text: event.value, + span: SourceSpan.fromOffsets( + filePath: filePath, + source: fullSource, + startOffset: start, + endOffset: end, + ), + rawSource: + _safeSubstring(fullSource, start, end) ?? + '', + ), + ); + continue; + } + append( + WritersideRawNode( + span: SourceSpan.fromOffsets( + filePath: filePath, + source: fullSource, + startOffset: start, + endOffset: end, + ), + rawSource: _safeSubstring(fullSource, start, end) ?? '', + ), + ); + } + if (stack.isNotEmpty) { + throw const FormatException('Unclosed Writerside XML element'); + } + return roots; + } + + bool _isSemanticXmlBlock(BusyBlock block, String source) { + if (!source.trimLeft().startsWith('<')) { + return false; + } + return block.kind == BusyBlockKind.writersideAdmonition || + block.kind == BusyBlockKind.writersideTabs || + block.kind == BusyBlockKind.writersideProcedure || + block.kind == BusyBlockKind.writersideRawXml || + block.kind == BusyBlockKind.video || + block.kind == BusyBlockKind.htmlBlock || + block.kind == BusyBlockKind.unknown; + } +} + +class _ElementFrame { + _ElementFrame({ + required this.name, + required this.attributes, + required this.attributeSpans, + required this.startOffset, + required this.openingEndOffset, + }); + + final String name; + final Map attributes; + final Map attributeSpans; + final int startOffset; + final int openingEndOffset; + final List children = []; + + WritersideElementNode build({ + required String filePath, + required String source, + required int end, + }) { + final span = SourceSpan.fromOffsets( + filePath: filePath, + source: source, + startOffset: startOffset, + endOffset: end, + ); + final raw = + _safeSubstring(source, startOffset, end) ?? + _safeSubstring(source, startOffset, openingEndOffset) ?? + ''; + final capability = WritersideSchema.capabilityFor(name); + if (capability != null) { + return WritersideSemanticElementNode( + kind: capability.kind, + name: name, + attributes: Map.unmodifiable(attributes), + attributeSpans: Map.unmodifiable(attributeSpans), + children: List.unmodifiable(children), + span: span, + rawSource: raw, + ); + } + return WritersideGenericElementNode( + schemaKnown: WritersideSchema.isKnownElement(name), + name: name, + attributes: Map.unmodifiable(attributes), + attributeSpans: Map.unmodifiable(attributeSpans), + children: List.unmodifiable(children), + span: span, + rawSource: raw, + ); + } +} + +Map _attributeSpans({ + required String filePath, + required String fullSource, + required String openingSource, + required int openingOffset, +}) { + final result = {}; + final matches = RegExp( + r'''([A-Za-z_][A-Za-z0-9_.:-]*)\s*=\s*(["'])(.*?)\2''', + ).allMatches(openingSource); + for (final match in matches) { + final quoteOffset = openingSource.indexOf( + match.group(2)!, + match.start + match.group(1)!.length, + ); + final valueStart = quoteOffset + 1; + final valueEnd = valueStart + match.group(3)!.length; + result[_localName(match.group(1)!)] = SourceSpan.fromOffsets( + filePath: filePath, + source: fullSource, + startOffset: openingOffset + valueStart, + endOffset: openingOffset + valueEnd, + ); + } + return result; +} + +String _localName(String value) => value.split(':').last.toLowerCase(); + +String? _safeSubstring(String value, int start, int end) { + if (start < 0 || end < start || end > value.length) { + return null; + } + return value.substring(start, end); +} diff --git a/lib/src/writerside/writerside_document_renderer.dart b/lib/src/writerside/writerside_document_renderer.dart new file mode 100644 index 00000000..300c616e --- /dev/null +++ b/lib/src/writerside/writerside_document_renderer.dart @@ -0,0 +1,608 @@ +import '../markdown/busymark_document.dart'; +import '../markdown/markdown_model.dart'; +import '../markdown/math_syntax.dart'; +import 'writerside_document.dart'; +import 'writerside_schema.dart'; + +class WritersideDocumentRenderer { + const WritersideDocumentRenderer(); + + BusyDocument toBusyDocument( + WritersideDocument document, { + String? title, + bool includeTitleHeading = false, + int titleHeadingLevel = 1, + }) { + final blocks = [ + if (includeTitleHeading && title?.trim().isNotEmpty == true) + BusyBlock( + id: 'writerside-document-title', + kind: BusyBlockKind.heading, + inlines: [BusyInline(kind: BusyInlineKind.text, text: title!.trim())], + attributes: { + 'level': '${titleHeadingLevel.clamp(1, 6)}', + 'id': _headingId(title), + 'element': 'title', + }, + isGenerated: true, + ), + ..._blocks(document.nodes, headingLevel: titleHeadingLevel + 1), + ]; + return BusyDocument( + filePath: document.filePath, + mode: MarkdownMode.writersideMarkdown, + title: title, + blocks: List.unmodifiable(blocks), + source: document.source, + ); + } + + List _blocks( + Iterable nodes, { + required int headingLevel, + }) { + final result = []; + for (final node in nodes) { + if (node is WritersideRawNode) { + continue; + } + if (node is WritersideMarkdownBlockNode) { + if (node.block.kind != BusyBlockKind.frontMatter && + !node.block.isSourceOnly) { + result.add(node.block); + } + continue; + } + if (node is WritersideTextNode) { + if (node.text.trim().isNotEmpty) { + result.add( + BusyBlock( + id: _id('text', node.span.startOffset), + kind: BusyBlockKind.paragraph, + inlines: [BusyInline(kind: BusyInlineKind.text, text: node.text)], + sourceSpan: node.span, + ), + ); + } + continue; + } + final element = node as WritersideElementNode; + final kind = element.semanticKind; + final attributes = _attributes(element); + switch (kind) { + case WritersideSemanticKind.topic: + case WritersideSemanticKind.condition: + case WritersideSemanticKind.container: + case null: + result.addAll(_blocks(element.children, headingLevel: headingLevel)); + case WritersideSemanticKind.paragraph: + final inlines = _inlines(element.children, element); + if (inlines.isNotEmpty) { + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.paragraph, + inlines: inlines, + attributes: attributes, + sourceSpan: element.span, + ), + ); + } + result.addAll( + _nestedBlocks(element.children, headingLevel: headingLevel), + ); + case WritersideSemanticKind.chapter: + final title = _elementTitle(element); + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.heading, + inlines: [ + if (title.isNotEmpty) + BusyInline(kind: BusyInlineKind.text, text: title), + ], + children: _blocks( + _contentChildren(element), + headingLevel: headingLevel + 1, + ), + attributes: { + ...attributes, + 'level': '${headingLevel.clamp(1, 6)}', + 'id': element.attributes['id'] ?? _headingId(title), + }, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.procedure: + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.writersideProcedure, + inlines: [ + if (_elementTitle(element).isNotEmpty) + BusyInline( + kind: BusyInlineKind.text, + text: _elementTitle(element), + ), + ], + children: _blocks( + _contentChildren(element), + headingLevel: headingLevel + 1, + ), + attributes: attributes, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.step: + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.orderedListItem, + inlines: _inlines(element.children, element), + children: _nestedBlocks( + element.children, + headingLevel: headingLevel, + ), + attributes: {...attributes, 'ordered': 'true', 'marker': '1.'}, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.list: + result.addAll(_blocks(element.children, headingLevel: headingLevel)); + case WritersideSemanticKind.listItem: + final checked = element.attributes['checked']; + final ordered = + element.attributes['type'] == 'decimal' || + (element.attributes['ordered'] == 'true'); + result.add( + BusyBlock( + id: _nodeId(element), + kind: checked == null + ? ordered + ? BusyBlockKind.orderedListItem + : BusyBlockKind.unorderedListItem + : BusyBlockKind.taskListItem, + inlines: _inlines(element.children, element), + children: _nestedBlocks( + element.children, + headingLevel: headingLevel, + ), + attributes: { + ...attributes, + 'ordered': '$ordered', + 'marker': ordered ? '1.' : '-', + if (checked != null) 'task': checked, + }, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.table: + result.add(_table(element)); + case WritersideSemanticKind.codeBlock: + final language = element.attributes['lang']; + final text = _trimCode(element.plainText); + if (language?.toLowerCase() == 'tex') { + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.math, + inlines: [BusyInline(kind: BusyInlineKind.math, text: text)], + attributes: { + ...attributes, + 'language': language!, + busyMarkMathExpressionAttribute: text, + busyMarkMathDisplayAttribute: 'true', + busyMarkMathSourceFormAttribute: + BusyMathSourceForm.writersideTexElement.name, + }, + sourceSpan: element.span, + ), + ); + } else { + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.codeBlock, + inlines: [BusyInline(kind: BusyInlineKind.text, text: text)], + attributes: { + ...attributes, + if (language != null) 'language': language, + }, + sourceSpan: element.span, + ), + ); + } + case WritersideSemanticKind.math: + final expression = element.plainText.trim(); + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.math, + inlines: [ + BusyInline(kind: BusyInlineKind.math, text: expression), + ], + attributes: { + ...attributes, + busyMarkMathExpressionAttribute: expression, + busyMarkMathDisplayAttribute: 'true', + busyMarkMathSourceFormAttribute: + BusyMathSourceForm.writersideElement.name, + }, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.note: + case WritersideSemanticKind.tip: + case WritersideSemanticKind.warning: + case WritersideSemanticKind.quote: + final paragraphChildren = element.children + .whereType() + .where( + (child) => + child.semanticKind == WritersideSemanticKind.paragraph, + ) + .toList(); + final singleParagraph = + paragraphChildren.length == 1 && + element.children.whereType().length == 1; + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.writersideAdmonition, + inlines: singleParagraph + ? _inlines(paragraphChildren.single.children, element) + : _inlines(element.children, element), + children: singleParagraph + ? const [] + : _nestedBlocks(element.children, headingLevel: headingLevel), + attributes: { + ...attributes, + 'style': element.name, + busyMarkWritersideAdmonitionAttribute: 'true', + }, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.tabs: + case WritersideSemanticKind.tab: + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.writersideTabs, + inlines: [ + if (_elementTitle(element).isNotEmpty) + BusyInline( + kind: BusyInlineKind.text, + text: _elementTitle(element), + ), + ], + children: _blocks( + _contentChildren(element), + headingLevel: headingLevel, + ), + attributes: attributes, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.definitionList: + final children = _blocks( + element.children, + headingLevel: headingLevel, + ); + final inheritedCollapsible = element.attributes['collapsible']; + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.writersideRawXml, + children: [ + for (final child in children) + inheritedCollapsible == null || + child.attributes.containsKey('collapsible') + ? child + : child.copyWith( + attributes: { + ...child.attributes, + 'collapsible': inheritedCollapsible, + }, + ), + ], + attributes: attributes, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.definition: + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.writersideRawXml, + inlines: [ + if (_elementTitle(element).isNotEmpty) + BusyInline( + kind: BusyInlineKind.strong, + text: _elementTitle(element), + ), + ], + children: _blocks( + _contentChildren(element), + headingLevel: headingLevel, + ), + attributes: attributes, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.image: + result.add(_imageBlock(element)); + case WritersideSemanticKind.video: + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.video, + attributes: attributes, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.title: + case WritersideSemanticKind.metadata: + case WritersideSemanticKind.variable: + case WritersideSemanticKind.snippet: + break; + case WritersideSemanticKind.include: + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.unknown, + inlines: const [ + BusyInline( + kind: BusyInlineKind.text, + text: 'Unresolved Writerside include', + ), + ], + attributes: attributes, + sourceSpan: element.span, + ), + ); + case WritersideSemanticKind.tableRow: + case WritersideSemanticKind.tableCell: + case WritersideSemanticKind.link: + case WritersideSemanticKind.control: + case WritersideSemanticKind.path: + case WritersideSemanticKind.shortcut: + case WritersideSemanticKind.code: + case WritersideSemanticKind.resource: + case WritersideSemanticKind.tooltip: + case WritersideSemanticKind.strong: + case WritersideSemanticKind.emphasis: + case WritersideSemanticKind.lineBreak: + final inlines = _inlines([element], element); + if (inlines.isNotEmpty) { + result.add( + BusyBlock( + id: _nodeId(element), + kind: BusyBlockKind.paragraph, + inlines: inlines, + attributes: attributes, + sourceSpan: element.span, + ), + ); + } + } + } + return result; + } + + BusyBlock _table(WritersideElementNode table) { + final rows = table.children.whereType().where( + (element) => element.semanticKind == WritersideSemanticKind.tableRow, + ); + return BusyBlock( + id: _nodeId(table), + kind: BusyBlockKind.table, + attributes: _attributes(table), + children: [ + for (final row in rows) + BusyBlock( + id: _nodeId(row), + kind: BusyBlockKind.table, + attributes: { + ..._attributes(row), + 'header': row.attributes['header'] ?? 'false', + }, + children: [ + for (final cell + in row.children.whereType().where( + (element) => + element.semanticKind == + WritersideSemanticKind.tableCell, + )) + BusyBlock( + id: _nodeId(cell), + kind: BusyBlockKind.paragraph, + inlines: _inlines(cell.children, cell), + children: _nestedBlocks(cell.children, headingLevel: 2), + attributes: {..._attributes(cell), 'cell': 'td'}, + sourceSpan: cell.span, + ), + ], + sourceSpan: row.span, + ), + ], + sourceSpan: table.span, + ); + } + + BusyBlock _imageBlock(WritersideElementNode image) { + final inline = _imageInline(image); + return BusyBlock( + id: _nodeId(image), + kind: BusyBlockKind.image, + inlines: [inline], + attributes: _attributes(image), + sourceSpan: image.span, + ); + } + + List _nestedBlocks( + Iterable nodes, { + required int headingLevel, + }) { + return _blocks( + nodes.where((node) { + return node is WritersideMarkdownBlockNode || + (node is WritersideElementNode && _isBlockElement(node)); + }), + headingLevel: headingLevel, + ); + } + + List _inlines( + Iterable nodes, + WritersideElementNode owner, + ) { + final result = []; + for (final node in nodes) { + if (node is WritersideTextNode) { + if (node.text.isNotEmpty) { + result.add(BusyInline(kind: BusyInlineKind.text, text: node.text)); + } + continue; + } + if (node is! WritersideElementNode || _isBlockElement(node)) { + continue; + } + final children = _inlines(node.children, owner); + final text = node.plainText; + switch (node.semanticKind) { + case WritersideSemanticKind.strong: + result.add( + BusyInline( + kind: BusyInlineKind.strong, + text: text, + children: children, + ), + ); + case WritersideSemanticKind.emphasis: + result.add( + BusyInline( + kind: BusyInlineKind.emphasis, + text: text, + children: children, + ), + ); + case WritersideSemanticKind.code: + case WritersideSemanticKind.control: + case WritersideSemanticKind.path: + case WritersideSemanticKind.shortcut: + case WritersideSemanticKind.resource: + result.add( + BusyInline( + kind: BusyInlineKind.code, + text: text, + attributes: _attributes(node), + ), + ); + case WritersideSemanticKind.tooltip: + result.add( + BusyInline( + kind: BusyInlineKind.underline, + text: text, + children: children, + attributes: _attributes(node), + ), + ); + case WritersideSemanticKind.link: + result.add( + BusyInline( + kind: BusyInlineKind.link, + text: text, + destination: node.attributes['href'] ?? node.attributes['anchor'], + children: children, + attributes: _attributes(node), + ), + ); + case WritersideSemanticKind.image: + result.add(_imageInline(node)); + case WritersideSemanticKind.math: + result.add( + BusyInline( + kind: BusyInlineKind.math, + text: text, + attributes: { + busyMarkMathSourceFormAttribute: + BusyMathSourceForm.writersideElement.name, + 'expressionId': _nodeId(node), + }, + ), + ); + case WritersideSemanticKind.lineBreak: + result.add( + const BusyInline(kind: BusyInlineKind.hardBreak, text: '\n'), + ); + case WritersideSemanticKind.title: + case WritersideSemanticKind.metadata: + case WritersideSemanticKind.variable: + case WritersideSemanticKind.snippet: + case WritersideSemanticKind.include: + break; + default: + result.addAll( + children.isEmpty && text.isNotEmpty + ? [BusyInline(kind: BusyInlineKind.text, text: text)] + : children, + ); + } + } + return result; + } + + BusyInline _imageInline(WritersideElementNode image) { + return BusyInline( + kind: BusyInlineKind.image, + text: image.attributes['alt'] ?? '', + destination: image.attributes['src'], + attributes: _attributes(image), + ); + } + + bool _isBlockElement(WritersideElementNode element) { + return WritersideSchema.capabilityFor(element.name)?.block ?? true; + } + + Iterable _contentChildren( + WritersideElementNode element, + ) => element.children.where((node) { + return node is! WritersideElementNode || + node.semanticKind != WritersideSemanticKind.title; + }); + + String _elementTitle(WritersideElementNode element) { + for (final child in element.children.whereType()) { + if (child.semanticKind == WritersideSemanticKind.title && + child.plainText.trim().isNotEmpty) { + return child.plainText.trim(); + } + } + return element.attributes['title']?.trim() ?? ''; + } + + Map _attributes(WritersideElementNode element) => { + 'element': element.name, + ...element.attributes, + if (element is WritersideGenericElementNode) + 'schemaKnown': '${element.schemaKnown}', + }; + + String _nodeId(WritersideDocumentNode node) => + _id('writerside', node.span.startOffset); + + String _id(String prefix, int offset) => '$prefix-$offset'; + + String _headingId(String value) => value + .trim() + .toLowerCase() + .replaceAll(RegExp(r'[^a-z0-9\s-]'), '') + .replaceAll(RegExp(r'\s+'), '-'); + + String _trimCode(String value) => value + .replaceFirst(RegExp(r'^\r?\n'), '') + .replaceFirst(RegExp(r'\r?\n\s*$'), ''); +} diff --git a/lib/src/writerside/writerside_document_resolver.dart b/lib/src/writerside/writerside_document_resolver.dart new file mode 100644 index 00000000..6e71d809 --- /dev/null +++ b/lib/src/writerside/writerside_document_resolver.dart @@ -0,0 +1,531 @@ +import '../core/diagnostic.dart'; +import '../markdown/busymark_document.dart'; +import 'writerside_document.dart'; +import 'writerside_model.dart'; +import 'writerside_schema.dart'; + +class WritersideResolveContext { + const WritersideResolveContext({ + required this.module, + required this.topic, + this.instance, + this.modulesByOrigin = const {}, + }); + + final WritersideModule module; + final WritersideTopic topic; + final WritersideInstance? instance; + final Map modulesByOrigin; +} + +class ResolvedWritersideDocument { + const ResolvedWritersideDocument({ + required this.document, + required this.title, + required this.diagnostics, + }); + + final WritersideDocument document; + final String? title; + final List diagnostics; +} + +/// Resolves instance-sensitive Writerside semantics above the lossless tree. +/// Preview, navigation, outline, and export can therefore consume the same +/// concrete representation. +class WritersideDocumentResolver { + const WritersideDocumentResolver(); + + ResolvedWritersideDocument resolve( + WritersideDocument document, + WritersideResolveContext context, + ) { + final state = _ResolveState(context); + final variables = { + for (final variable in context.module.variables) + variable.name: variable.value, + if (context.instance case final instance?) ...{ + 'instance': instance.name, + 'instance-lowercase': instance.name.toLowerCase(), + }, + 'currentId': context.topic.id, + 'thisTopic': context.topic.title ?? context.topic.id, + }; + final nodes = state.resolveNodes( + document.nodes, + module: context.module, + topic: context.topic, + variables: variables, + activeFilters: null, + includeStack: {'${context.topic.filePath}#'}, + inheritedIgnoreVariables: false, + ); + final resolved = document.copyWith(nodes: List.unmodifiable(nodes)); + return ResolvedWritersideDocument( + document: resolved, + title: state.titleFor(resolved) ?? context.topic.title, + diagnostics: sortDiagnostics(state.diagnostics), + ); + } +} + +class _ResolveState { + _ResolveState(this.context); + + final WritersideResolveContext context; + final List diagnostics = []; + final Set _unresolvedVariables = {}; + + List resolveNodes( + Iterable nodes, { + required WritersideModule module, + required WritersideTopic topic, + required Map variables, + required Set? activeFilters, + required Set includeStack, + required bool inheritedIgnoreVariables, + }) { + final scopedVariables = {...variables}; + for (final node in nodes.whereType()) { + if (node.semanticKind != WritersideSemanticKind.variable || + !_matchesConditions(node.attributes, activeFilters, module)) { + continue; + } + final name = node.attributes['name']?.trim(); + final value = node.attributes['value']; + if (name != null && name.isNotEmpty && value != null) { + scopedVariables[name] = _interpolate( + value, + variables, + node, + ignore: inheritedIgnoreVariables, + ); + } + } + + final result = []; + for (final node in nodes) { + if (node is WritersideTextNode) { + result.add( + inheritedIgnoreVariables + ? node + : node.copyWith( + text: _interpolate( + node.text, + scopedVariables, + node, + ignore: false, + ), + ), + ); + continue; + } + if (node is WritersideRawNode) { + result.add(node); + continue; + } + if (node is WritersideMarkdownBlockNode) { + if (!_matchesConditions(node.block.attributes, activeFilters, module)) { + continue; + } + result.add( + node.copyWith( + block: _resolveMarkdownBlock( + node.block, + variables: scopedVariables, + ignoreVariables: inheritedIgnoreVariables, + sourceNode: node, + ), + ), + ); + continue; + } + final element = node as WritersideElementNode; + if (!_matchesConditions(element.attributes, activeFilters, module)) { + continue; + } + if (element.semanticKind == WritersideSemanticKind.variable) { + continue; + } + if (element.semanticKind == WritersideSemanticKind.include) { + result.addAll( + _resolveInclude( + element, + module: module, + topic: topic, + variables: scopedVariables, + includeStack: includeStack, + inheritedIgnoreVariables: inheritedIgnoreVariables, + ), + ); + continue; + } + + final ignoreVariables = _ignoreVariablesFor( + element, + inheritedIgnoreVariables, + ); + final attributes = { + for (final entry in element.attributes.entries) + entry.key: _interpolate( + entry.value, + scopedVariables, + element, + ignore: + ignoreVariables || + {'instance', 'filter', 'use-filter'}.contains(entry.key), + ), + }; + final children = resolveNodes( + element.children, + module: module, + topic: topic, + variables: scopedVariables, + activeFilters: activeFilters, + includeStack: includeStack, + inheritedIgnoreVariables: ignoreVariables, + ); + if (element.semanticKind == WritersideSemanticKind.condition) { + result.addAll(children); + } else { + result.add( + element.copyWith( + attributes: Map.unmodifiable(attributes), + children: List.unmodifiable(children), + ), + ); + } + } + return result; + } + + List _resolveInclude( + WritersideElementNode include, { + required WritersideModule module, + required WritersideTopic topic, + required Map variables, + required Set includeStack, + required bool inheritedIgnoreVariables, + }) { + final origin = include.attributes['origin']?.trim(); + final targetModule = origin == null || origin.isEmpty + ? module + : context.modulesByOrigin[origin]; + if (targetModule == null) { + _referenceDiagnostic( + code: 'writerside.include.unresolved-origin', + node: include, + args: {'origin': origin}, + ); + return const []; + } + + final from = include.attributes['from']?.trim(); + WritersideTopic? targetTopic; + if (from == null || from.isEmpty) { + targetTopic = identical(targetModule, module) ? topic : null; + } else { + final matches = targetModule.topicsMatchingReference( + from, + fromTopic: identical(targetModule, module) ? topic : null, + ); + if (matches.length > 1) { + _referenceDiagnostic( + code: 'writerside.include.ambiguous-source', + node: include, + args: {'from': from}, + ); + return const []; + } + targetTopic = matches.firstOrNull; + } + final nullable = include.attributes['nullable'] == 'true'; + if (targetTopic == null) { + if (!nullable) { + _referenceDiagnostic( + code: 'writerside.include.unresolved-source', + node: include, + args: {'from': from}, + ); + } + return const []; + } + + final elementId = include.attributes['element-id']?.trim(); + final cycleKey = '${targetTopic.filePath}#${elementId ?? ''}'; + if (!includeStack.add(cycleKey)) { + _referenceDiagnostic( + code: 'writerside.include.cycle', + node: include, + args: {'from': from, 'elementId': elementId}, + ); + return const []; + } + try { + Iterable selected; + if (elementId != null && elementId.isNotEmpty) { + final target = targetTopic.document.elementById(elementId); + if (target == null) { + if (!nullable) { + _referenceDiagnostic( + code: 'writerside.include.unresolved-element', + node: include, + args: {'from': from, 'elementId': elementId}, + ); + } + return const []; + } + selected = target.semanticKind == WritersideSemanticKind.snippet + ? target.children + : [target]; + } else { + final root = targetTopic.document.rootElement; + selected = root == null + ? targetTopic.document.nodes + : root.children.where((node) { + return node is! WritersideElementNode || + (node.semanticKind != WritersideSemanticKind.title && + node.semanticKind != WritersideSemanticKind.metadata && + node.semanticKind != WritersideSemanticKind.snippet); + }); + } + + final includeVariables = { + for (final variable in targetModule.variables) + variable.name: variable.value, + ...variables, + }; + for (final child in include.children.whereType()) { + if (child.semanticKind != WritersideSemanticKind.variable) { + continue; + } + final name = child.attributes['name']?.trim(); + final value = child.attributes['value']; + if (name != null && name.isNotEmpty && value != null) { + includeVariables[name] = _interpolate( + value, + variables, + child, + ignore: false, + ); + } + } + final filters = _tokens(include.attributes['use-filter']); + final resolved = resolveNodes( + selected, + module: targetModule, + topic: targetTopic, + variables: includeVariables, + activeFilters: filters.isEmpty ? null : filters, + includeStack: includeStack, + inheritedIgnoreVariables: inheritedIgnoreVariables, + ); + if (resolved.isEmpty && !nullable) { + _referenceDiagnostic( + code: 'writerside.include.filtered-out', + node: include, + args: {'from': from, 'elementId': elementId}, + severity: DiagnosticSeverity.info, + ); + } + return resolved; + } finally { + includeStack.remove(cycleKey); + } + } + + bool _matchesConditions( + Map attributes, + Set? activeFilters, + WritersideModule module, + ) { + if (!_matchesInstance(attributes['instance'], module)) { + return false; + } + final filters = _tokens(attributes['filter']); + if (filters.isEmpty || activeFilters == null || filters.contains('empty')) { + return true; + } + return filters.any(activeFilters.contains); + } + + bool _matchesInstance(String? condition, WritersideModule module) { + final tokens = _tokens(condition); + if (tokens.isEmpty) { + return true; + } + final positives = tokens.where((token) => !token.startsWith('!')).toList(); + for (final token in tokens.where((token) => token.startsWith('!'))) { + if (_instanceTokenMatches(token.substring(1), module)) { + return false; + } + } + return positives.isEmpty || + positives.any((token) => _instanceTokenMatches(token, module)); + } + + bool _instanceTokenMatches(String token, WritersideModule module) { + final instance = context.instance; + if (instance == null) { + return false; + } + if (token.startsWith('@')) { + return module.instanceGroups?.groups[token.substring(1)]?.instanceIds + .contains(instance.id) ?? + false; + } + return token == instance.id; + } + + bool _ignoreVariablesFor(WritersideElementNode element, bool inherited) { + final explicit = element.attributes['ignore-vars']; + if (explicit == 'true') { + return true; + } + if (explicit == 'false') { + return false; + } + if (inherited) { + return true; + } + if (context.module.config.settings.smartIgnoreVars != true) { + return false; + } + return { + WritersideSemanticKind.codeBlock, + WritersideSemanticKind.link, + WritersideSemanticKind.image, + }.contains(element.semanticKind); + } + + BusyBlock _resolveMarkdownBlock( + BusyBlock block, { + required Map variables, + required bool ignoreVariables, + required WritersideDocumentNode sourceNode, + }) { + final explicit = block.attributes['ignore-vars']; + final smart = + context.module.config.settings.smartIgnoreVars == true && + {BusyBlockKind.codeBlock, BusyBlockKind.image}.contains(block.kind); + final ignore = + explicit == 'true' || + (explicit != 'false' && (ignoreVariables || smart)); + BusyInline resolveInline(BusyInline inline) { + return inline.copyWith( + text: _interpolate(inline.text, variables, sourceNode, ignore: ignore), + destination: inline.destination == null + ? null + : _interpolate( + inline.destination!, + variables, + sourceNode, + ignore: ignore, + ), + children: inline.children.map(resolveInline).toList(growable: false), + ); + } + + return block.copyWith( + inlines: block.inlines.map(resolveInline).toList(growable: false), + children: [ + for (final child in block.children) + _resolveMarkdownBlock( + child, + variables: variables, + ignoreVariables: ignore, + sourceNode: sourceNode, + ), + ], + attributes: { + for (final entry in block.attributes.entries) + entry.key: _interpolate( + entry.value, + variables, + sourceNode, + ignore: ignore, + ), + }, + ); + } + + String _interpolate( + String value, + Map variables, + WritersideDocumentNode node, { + required bool ignore, + }) { + if (ignore || !value.contains('%')) { + return value; + } + var result = value.replaceAllMapped( + RegExp(r'%\\([A-Za-z_][A-Za-z0-9_.-]*)%'), + (match) => '%${match.group(1)}%', + ); + result = result.replaceAllMapped(RegExp(r'%([A-Za-z_][A-Za-z0-9_.-]*)%'), ( + match, + ) { + final name = match.group(1)!; + final replacement = variables[name]; + if (replacement != null) { + return replacement; + } + final key = '${node.span.filePath}:${node.span.startOffset}:$name'; + if (_unresolvedVariables.add(key)) { + diagnostics.add( + Diagnostic( + code: 'writerside.variable.unresolved', + severity: DiagnosticSeverity.warning, + filePath: node.span.filePath, + args: {'name': name}, + sourceSpan: node.span, + ), + ); + } + return match.group(0)!; + }); + return result; + } + + String? titleFor(WritersideDocument document) { + final root = document.rootElement; + if (root == null) { + return context.topic.title; + } + final conditional = root.children + .whereType() + .where( + (element) => element.semanticKind == WritersideSemanticKind.title, + ) + .map((element) => element.plainText.trim()) + .where((title) => title.isNotEmpty) + .firstOrNull; + return conditional ?? root.attributes['title']?.trim(); + } + + void _referenceDiagnostic({ + required String code, + required WritersideDocumentNode node, + Map args = const {}, + DiagnosticSeverity severity = DiagnosticSeverity.warning, + }) { + diagnostics.add( + Diagnostic( + code: code, + severity: severity, + filePath: node.span.filePath, + args: args, + sourceSpan: node.span, + ), + ); + } +} + +Set _tokens(String? value) => { + for (final token in value?.split(',') ?? const []) + if (token.trim().isNotEmpty) token.trim(), +}; + +extension _FirstOrNull on Iterable { + T? get firstOrNull => isEmpty ? null : first; +} diff --git a/lib/src/writerside/writerside_document_serializer.dart b/lib/src/writerside/writerside_document_serializer.dart new file mode 100644 index 00000000..45ffa73b --- /dev/null +++ b/lib/src/writerside/writerside_document_serializer.dart @@ -0,0 +1,15 @@ +import 'writerside_document.dart'; + +/// Serializes an unmodified lossless document without normalizing unsupported +/// elements, attributes, comments, entities, or whitespace. +class WritersideDocumentSerializer { + const WritersideDocumentSerializer(); + + String serialize(WritersideDocument document) { + if (document.format == WritersideDocumentFormat.markdown) { + return document.source; + } + final serialized = document.nodes.map((node) => node.rawSource).join(); + return serialized.isEmpty ? document.source : serialized; + } +} diff --git a/lib/src/writerside/writerside_model.dart b/lib/src/writerside/writerside_model.dart index 7092c9bc..b35d312d 100644 --- a/lib/src/writerside/writerside_model.dart +++ b/lib/src/writerside/writerside_model.dart @@ -1,6 +1,7 @@ import '../core/diagnostic.dart'; import '../core/source_span.dart'; import '../markdown/markdown_model.dart'; +import 'writerside_document.dart'; import 'package:path/path.dart' as p; class WritersideTopicRoot { @@ -456,6 +457,7 @@ class WritersideTopic { required this.videos, required this.variables, required this.includes, + required this.document, required this.diagnostics, this.webFileName, this.markdown, @@ -475,6 +477,7 @@ class WritersideTopic { final List videos; final List variables; final List includes; + final WritersideDocument document; final List diagnostics; final String? webFileName; final ParsedMarkdownDocument? markdown; diff --git a/lib/src/writerside/writerside_module_service.dart b/lib/src/writerside/writerside_module_service.dart index dd105520..884ae572 100644 --- a/lib/src/writerside/writerside_module_service.dart +++ b/lib/src/writerside/writerside_module_service.dart @@ -1206,10 +1206,13 @@ class WritersideModuleService { } } if (validateCategories) { - for (final categoryRef in RegExp( - r']*ref="([^"]+)"', - ).allMatches(topic.markdown?.source ?? '')) { - final ref = categoryRef.group(1)!; + for (final category in topic.document.elements.where( + (element) => element.name == 'category', + )) { + final ref = category.attributes['ref']; + if (ref == null || ref.isEmpty) { + continue; + } if (!categoryIds.contains(ref)) { diagnostics.add( Diagnostic( @@ -1217,12 +1220,7 @@ class WritersideModuleService { severity: DiagnosticSeverity.warning, filePath: topic.filePath, args: {'ref': ref}, - sourceSpan: SourceSpan.fromOffsets( - filePath: topic.filePath, - source: topic.markdown!.source, - startOffset: categoryRef.start, - endOffset: categoryRef.end, - ), + sourceSpan: category.attributeSpans['ref'] ?? category.span, ), ); } diff --git a/lib/src/writerside/writerside_parsers.dart b/lib/src/writerside/writerside_parsers.dart index 7d304f21..21c8fa85 100644 --- a/lib/src/writerside/writerside_parsers.dart +++ b/lib/src/writerside/writerside_parsers.dart @@ -8,6 +8,9 @@ import '../markdown/busymark_document.dart'; import '../markdown/markdown_model.dart'; import '../markdown/markdown_parser.dart'; import 'writerside_model.dart'; +import 'writerside_document.dart'; +import 'writerside_document_parser.dart'; +import 'writerside_schema.dart'; class WritersideConfigParser { const WritersideConfigParser(); @@ -965,9 +968,13 @@ class WritersideCategoriesParser { } class WritersideTopicParser { - const WritersideTopicParser({this.markdownParser = const MarkdownParser()}); + const WritersideTopicParser({ + this.markdownParser = const MarkdownParser(), + this.documentParser = const WritersideDocumentParser(), + }); final MarkdownParser markdownParser; + final WritersideDocumentParser documentParser; WritersideTopic parseMarkdown({ required String filePath, @@ -981,29 +988,29 @@ class WritersideTopicParser { workspaceRoot: topicsRoot, validateLocalReferences: false, ); - final ids = parsed.headings - .map( - (heading) => WritersideElementId(id: heading.id, span: heading.span), - ) - .toList(); - final includes = _includeRegex - .allMatches(source) - .map( - (match) => WritersideInclude( - from: _writersideAttributeValue(match.group(0)!, 'from'), - elementId: _writersideAttributeValue(match.group(0)!, 'element-id'), - nullable: - _writersideAttributeValue(match.group(0)!, 'nullable') == - 'true', - span: SourceSpan.fromOffsets( - filePath: filePath, - source: source, - startOffset: match.start, - endOffset: match.end, - ), + final document = documentParser.parseMarkdown( + filePath: filePath, + source: source, + markdown: parsed.busyDocument, + ); + final ids = [ + ...parsed.headings.map( + (heading) => WritersideElementId(id: heading.id, span: heading.span), + ), + for (final element in document.elements) + if (element.attributes['id'] case final id?) + WritersideElementId(id: id, span: element.span), + ]; + final includes = [ + for (final element in document.elements) + if (element.semanticKind == WritersideSemanticKind.include) + WritersideInclude( + from: element.attributes['from'], + elementId: element.attributes['element-id'], + nullable: element.attributes['nullable'] == 'true', + span: element.span, ), - ) - .toList(); + ]; final titleOverrides = _topicTitleOverrides(source); final videos = []; void collectVideos(Iterable blocks) { @@ -1051,12 +1058,13 @@ class WritersideTopicParser { videos: videos, variables: parsed.variables, includes: includes, + document: document, diagnostics: sortDiagnostics(topicDiagnostics), webFileName: _webFileName(source), markdown: parsed, titleOverrides: titleOverrides, - semanticElementNames: parsed.xmlBlocks - .map((block) => block.elementName) + semanticElementNames: document.elements + .map((element) => element.name) .toList(), ); } @@ -1066,6 +1074,10 @@ class WritersideTopicParser { required String source, String? topicsRoot, }) { + final semanticDocument = documentParser.parseXml( + filePath: filePath, + source: source, + ); final diagnostics = []; final ids = []; final links = []; @@ -1089,13 +1101,28 @@ class WritersideTopicParser { var id = expectedId; if (document != null) { final root = document.rootElement; + final semanticElements = semanticDocument.elements.toList(); + var semanticIndex = 0; + WritersideElementNode? nextSemanticElement(XmlElement element) { + while (semanticIndex < semanticElements.length) { + final candidate = semanticElements[semanticIndex++]; + if (candidate.name == element.name.local.toLowerCase()) { + return candidate; + } + } + return null; + } + + final semanticRoot = semanticElements.firstOrNull; if (root.name.local != 'topic') { diagnostics.add( Diagnostic( code: 'writerside.topic.invalid-root', severity: DiagnosticSeverity.error, filePath: filePath, - sourceSpan: _elementSpan(filePath, source, root.name.local), + sourceSpan: + semanticRoot?.span ?? + _elementSpan(filePath, source, root.name.local), ), ); } @@ -1107,7 +1134,9 @@ class WritersideTopicParser { code: 'writerside.topic.missing-root-id', severity: DiagnosticSeverity.error, filePath: filePath, - sourceSpan: _elementSpan(filePath, source, root.name.local), + sourceSpan: + semanticRoot?.span ?? + _elementSpan(filePath, source, root.name.local), ), ); id = expectedId; @@ -1118,7 +1147,9 @@ class WritersideTopicParser { severity: DiagnosticSeverity.error, filePath: filePath, args: {'id': id, 'expectedId': expectedId}, - sourceSpan: _elementSpan(filePath, source, root.name.local, id), + sourceSpan: + semanticRoot?.span ?? + _elementSpan(filePath, source, root.name.local, id), ), ); } @@ -1128,21 +1159,21 @@ class WritersideTopicParser { code: 'writerside.topic.missing-title', severity: DiagnosticSeverity.warning, filePath: filePath, - sourceSpan: _elementSpan(filePath, source, root.name.local), + sourceSpan: + semanticRoot?.span ?? + _elementSpan(filePath, source, root.name.local), ), ); } final seenIds = {}; for (final element in document.descendants.whereType()) { + final semanticElement = nextSemanticElement(element); semanticNames.add(element.name.local); final elementId = element.getAttribute('id'); if (elementId != null) { - final span = _elementSpan( - filePath, - source, - element.name.local, - elementId, - ); + final span = + semanticElement?.span ?? + _elementSpan(filePath, source, element.name.local, elementId); ids.add(WritersideElementId(id: elementId, span: span)); if (seenIds.containsKey(elementId)) { diagnostics.add( @@ -1179,7 +1210,9 @@ class WritersideTopicParser { code: 'writerside.topic.missing-required-attribute', severity: DiagnosticSeverity.warning, filePath: filePath, - sourceSpan: _elementSpan(filePath, source, 'a'), + sourceSpan: + semanticElement?.span ?? + _elementSpan(filePath, source, 'a'), ), ); } else { @@ -1187,7 +1220,10 @@ class WritersideTopicParser { MarkdownLink( text: element.innerText.trim(), destination: href, - span: _elementSpan(filePath, source, 'a', href), + span: + semanticElement?.attributeSpans['href'] ?? + semanticElement?.span ?? + _elementSpan(filePath, source, 'a', href), ), ); } @@ -1197,12 +1233,17 @@ class WritersideTopicParser { MarkdownImage( alt: element.getAttribute('alt') ?? '', destination: src, - span: _elementSpan(filePath, source, 'img', src), + span: + semanticElement?.attributeSpans['src'] ?? + semanticElement?.span ?? + _elementSpan(filePath, source, 'img', src), ), ); case 'video': final src = element.getAttribute('src')?.trim() ?? ''; - final span = _elementSpan(filePath, source, 'video', src); + final span = + semanticElement?.span ?? + _elementSpan(filePath, source, 'video', src); videos.add( WritersideVideo( source: src, @@ -1232,12 +1273,14 @@ class WritersideTopicParser { from: element.getAttribute('from'), elementId: element.getAttribute('element-id'), nullable: element.getAttribute('nullable') == 'true', - span: _elementSpan( - filePath, - source, - 'include', - element.getAttribute('from'), - ), + span: + semanticElement?.span ?? + _elementSpan( + filePath, + source, + 'include', + element.getAttribute('from'), + ), ), ); } @@ -1274,6 +1317,7 @@ class WritersideTopicParser { videos: videos, variables: variables, includes: includes, + document: semanticDocument, diagnostics: sortDiagnostics(diagnostics), webFileName: webFileName, titleOverrides: titleOverrides, @@ -1282,21 +1326,6 @@ class WritersideTopicParser { } } -final _includeRegex = RegExp( - r']*>', - caseSensitive: false, - dotAll: true, -); - -String? _writersideAttributeValue(String element, String attribute) { - final match = RegExp( - '${RegExp.escape(attribute)}\\s*=\\s*(["\\\'])(.*?)\\1', - caseSensitive: false, - dotAll: true, - ).firstMatch(element); - return match?.group(2); -} - List _writersideMarkdownDiagnostics(List diagnostics) { return [ for (final diagnostic in diagnostics) diff --git a/lib/src/writerside/writerside_project.dart b/lib/src/writerside/writerside_project.dart new file mode 100644 index 00000000..fe159bca --- /dev/null +++ b/lib/src/writerside/writerside_project.dart @@ -0,0 +1,913 @@ +import 'dart:io'; + +import 'package:path/path.dart' as p; + +import '../core/diagnostic.dart'; +import '../core/path_utils.dart'; +import '../core/source_span.dart'; +import 'writerside_document.dart'; +import 'writerside_model.dart'; +import 'writerside_module_service.dart'; +import 'writerside_schema.dart'; + +enum WritersideSymbolKind { + module, + topic, + element, + snippet, + variable, + image, + resource, + instance, + instanceGroup, + category, + seealso, + redirect, + apiSpecification, + apiReference, +} + +class WritersideSymbol { + const WritersideSymbol({ + required this.name, + required this.qualifiedName, + required this.kind, + required this.moduleId, + required this.filePath, + this.span, + }); + + final String name; + final String qualifiedName; + final WritersideSymbolKind kind; + final String moduleId; + final String filePath; + final SourceSpan? span; +} + +class WritersideReference { + const WritersideReference({ + required this.value, + required this.kind, + required this.moduleId, + required this.filePath, + required this.span, + this.origin, + this.sourceValue, + }); + + final String value; + final WritersideSymbolKind kind; + final String moduleId; + final String filePath; + final SourceSpan span; + final String? origin; + final String? sourceValue; +} + +class WritersideRenameEdit { + const WritersideRenameEdit({ + required this.filePath, + required this.span, + required this.replacement, + }); + + final String filePath; + final SourceSpan span; + final String replacement; +} + +class WritersideProjectIndex { + const WritersideProjectIndex({ + required this.symbols, + required this.references, + required this.diagnostics, + }); + + final List symbols; + final List references; + final List diagnostics; + + factory WritersideProjectIndex.build( + List modules, { + Iterable fileSymbols = const [], + }) { + final symbols = []; + final references = []; + final diagnostics = []; + final moduleIds = { + for (final module in modules) module: _moduleId(module), + }; + + for (final module in modules) { + final moduleId = moduleIds[module]!; + symbols.add( + WritersideSymbol( + name: moduleId, + qualifiedName: moduleId, + kind: WritersideSymbolKind.module, + moduleId: moduleId, + filePath: module.config.filePath, + ), + ); + for (final topic in module.topics) { + symbols.add( + WritersideSymbol( + name: topic.id, + qualifiedName: '$moduleId:${topic.id}', + kind: WritersideSymbolKind.topic, + moduleId: moduleId, + filePath: topic.filePath, + span: + topic.document.rootElement?.attributeSpans['id'] ?? + topic.document.rootElement?.span, + ), + ); + if (topic.fileName != topic.id) { + symbols.add( + WritersideSymbol( + name: topic.fileName, + qualifiedName: '$moduleId:${topic.fileName}', + kind: WritersideSymbolKind.topic, + moduleId: moduleId, + filePath: topic.filePath, + span: topic.document.rootElement?.span, + ), + ); + } + final indexedElementIds = {}; + for (final element in topic.document.elements) { + final id = element.attributes['id']?.trim(); + if (id != null && id.isNotEmpty) { + indexedElementIds.add(id); + symbols.add( + WritersideSymbol( + name: id, + qualifiedName: '$moduleId:${topic.id}#$id', + kind: element.semanticKind == WritersideSemanticKind.snippet + ? WritersideSymbolKind.snippet + : element.name == 'seealso' + ? WritersideSymbolKind.seealso + : WritersideSymbolKind.element, + moduleId: moduleId, + filePath: topic.filePath, + span: element.attributeSpans['id'] ?? element.span, + ), + ); + } + _collectElementReferences( + references, + element, + moduleId: moduleId, + filePath: topic.filePath, + ); + final capability = WritersideSchema.capabilityFor(element.name); + for (final requiredAttribute + in capability?.requiredAttributes ?? const {}) { + if ((element.attributes[requiredAttribute] ?? '').trim().isEmpty) { + diagnostics.add( + Diagnostic( + code: 'writerside.schema.missing-required-attribute', + severity: DiagnosticSeverity.warning, + filePath: topic.filePath, + args: { + 'element': element.name, + 'attribute': requiredAttribute, + 'builderVersion': WritersideSchema.builderVersion, + }, + sourceSpan: element.span, + ), + ); + } + } + } + for (final elementId in topic.elementIds.where( + (candidate) => !indexedElementIds.contains(candidate.id), + )) { + symbols.add( + WritersideSymbol( + name: elementId.id, + qualifiedName: '$moduleId:${topic.id}#${elementId.id}', + kind: WritersideSymbolKind.element, + moduleId: moduleId, + filePath: topic.filePath, + span: elementId.span, + ), + ); + } + for (final link in topic.links) { + references.add( + WritersideReference( + value: link.destination, + kind: WritersideSymbolKind.topic, + moduleId: moduleId, + filePath: topic.filePath, + span: link.span, + sourceValue: link.destination, + ), + ); + } + for (final image in topic.images) { + references.add( + WritersideReference( + value: image.destination, + kind: WritersideSymbolKind.image, + moduleId: moduleId, + filePath: topic.filePath, + span: image.span, + sourceValue: image.destination, + ), + ); + } + for (final variable in topic.variables.where( + (candidate) => !candidate.escaped, + )) { + references.add( + WritersideReference( + value: variable.name, + kind: WritersideSymbolKind.variable, + moduleId: moduleId, + filePath: topic.filePath, + span: variable.span, + sourceValue: '%${variable.name}%', + ), + ); + } + } + for (final variable in module.variables) { + symbols.add( + WritersideSymbol( + name: variable.name, + qualifiedName: '$moduleId:%${variable.name}%', + kind: WritersideSymbolKind.variable, + moduleId: moduleId, + filePath: variable.span.filePath, + span: variable.span, + ), + ); + } + for (final instance in module.instances) { + symbols.add( + WritersideSymbol( + name: instance.id, + qualifiedName: '$moduleId:${instance.id}', + kind: WritersideSymbolKind.instance, + moduleId: moduleId, + filePath: instance.sourceTreePath, + ), + ); + for (final node in instance.navigationTocRoots.expand( + (root) => root.flatten(), + )) { + final topicReference = node.topicReference; + if (topicReference != null) { + references.add( + WritersideReference( + value: topicReference, + kind: WritersideSymbolKind.topic, + moduleId: moduleId, + filePath: node.span.filePath, + span: node.span, + origin: node.origin, + sourceValue: topicReference, + ), + ); + } + final redirectTarget = node.targetForAcceptWebFileNames; + if (redirectTarget != null) { + final redirectName = + node.acceptsWebFileNames ?? + node.acceptsWebFileNamesRef ?? + redirectTarget; + symbols.add( + WritersideSymbol( + name: redirectName, + qualifiedName: '$moduleId:redirect:$redirectName', + kind: WritersideSymbolKind.redirect, + moduleId: moduleId, + filePath: node.span.filePath, + span: node.span, + ), + ); + references.add( + WritersideReference( + value: redirectTarget, + kind: WritersideSymbolKind.topic, + moduleId: moduleId, + filePath: node.span.filePath, + span: node.span, + origin: node.origin, + sourceValue: redirectTarget, + ), + ); + } + } + } + for (final group + in module.instanceGroups?.groups.values ?? + const []) { + symbols.add( + WritersideSymbol( + name: group.id, + qualifiedName: '$moduleId:@${group.id}', + kind: WritersideSymbolKind.instanceGroup, + moduleId: moduleId, + filePath: group.span.filePath, + span: group.span, + ), + ); + } + for (final category in module.categories) { + symbols.add( + WritersideSymbol( + name: category.id, + qualifiedName: '$moduleId:${category.id}', + kind: WritersideSymbolKind.category, + moduleId: moduleId, + filePath: category.span.filePath, + span: category.span, + ), + ); + } + } + symbols.addAll(fileSymbols); + + final groupedDefinitions = >{}; + for (final symbol in symbols.where( + (symbol) => + symbol.kind == WritersideSymbolKind.topic || + symbol.kind == WritersideSymbolKind.element || + symbol.kind == WritersideSymbolKind.snippet || + symbol.kind == WritersideSymbolKind.variable, + )) { + groupedDefinitions + .putIfAbsent( + '${symbol.moduleId}:${symbol.kind.name}:' + '${symbol.kind == WritersideSymbolKind.element || symbol.kind == WritersideSymbolKind.snippet ? symbol.filePath : ''}:' + '${symbol.name}', + () => [], + ) + .add(symbol); + } + for (final duplicates in groupedDefinitions.values.where( + (items) => items.length > 1, + )) { + for (final duplicate in duplicates.skip(1)) { + diagnostics.add( + Diagnostic( + code: 'writerside.index.duplicate-symbol', + severity: DiagnosticSeverity.error, + filePath: duplicate.filePath, + args: { + 'name': duplicate.name, + 'kind': duplicate.kind.name, + 'module': duplicate.moduleId, + }, + sourceSpan: duplicate.span, + relatedSpans: [if (duplicates.first.span case final first?) first], + ), + ); + } + } + + final modulesById = { + for (final module in modules) moduleIds[module]!: module, + }; + for (final reference in references.where( + (reference) => reference.kind == WritersideSymbolKind.snippet, + )) { + final targetModule = modulesById[reference.origin ?? reference.moduleId]; + if (targetModule == null) { + diagnostics.add( + _referenceDiagnostic('writerside.index.unresolved-origin', reference), + ); + continue; + } + final separator = reference.value.indexOf('#'); + final from = separator == -1 + ? reference.value + : reference.value.substring(0, separator); + final id = separator == -1 + ? null + : reference.value.substring(separator + 1); + final topics = from.isEmpty + ? targetModule.topics + .where((topic) => topic.filePath == reference.filePath) + .toList() + : targetModule.topicsMatchingReference(from); + if (topics.length != 1) { + diagnostics.add( + _referenceDiagnostic( + topics.isEmpty + ? 'writerside.index.unresolved-reference' + : 'writerside.index.ambiguous-reference', + reference, + ), + ); + continue; + } + if (id != null && + id.isNotEmpty && + topics.single.document.elementById(id) == null) { + diagnostics.add( + _referenceDiagnostic( + 'writerside.index.unresolved-reference', + reference, + ), + ); + } + } + + return WritersideProjectIndex( + symbols: List.unmodifiable(symbols), + references: List.unmodifiable(references), + diagnostics: sortDiagnostics(diagnostics), + ); + } + + Iterable definitions( + String reference, { + String? moduleId, + String? origin, + WritersideSymbolKind? kind, + }) { + final targetModule = origin ?? moduleId; + final normalized = reference.trim().split('#').last; + return symbols.where((symbol) { + final resourceMatch = + symbol.kind == WritersideSymbolKind.image || + symbol.kind == WritersideSymbolKind.resource || + symbol.kind == WritersideSymbolKind.apiSpecification; + return (targetModule == null || symbol.moduleId == targetModule) && + (kind == null || symbol.kind == kind) && + (symbol.name == normalized || + symbol.qualifiedName == reference || + (resourceMatch && + p.basename(symbol.name) == p.basename(normalized))); + }); + } + + Iterable findUsages(WritersideSymbol symbol) { + return references.where((reference) { + final normalized = reference.value.trim().split('#').last; + final compatibleKind = switch (symbol.kind) { + WritersideSymbolKind.element => + reference.kind == WritersideSymbolKind.snippet || + reference.kind == WritersideSymbolKind.topic, + WritersideSymbolKind.apiSpecification => + reference.kind == WritersideSymbolKind.apiReference, + _ => reference.kind == symbol.kind, + }; + return compatibleKind && + normalized == symbol.name && + (reference.origin == null + ? reference.moduleId == symbol.moduleId + : reference.origin == symbol.moduleId); + }); + } + + List safeRenameEdits( + WritersideSymbol symbol, + String newName, + ) { + final normalized = newName.trim(); + if (normalized.isEmpty || + !RegExp(r'^[A-Za-z_][A-Za-z0-9_.-]*$').hasMatch(normalized) || + symbol.span == null || + symbol.span!.endOffset - symbol.span!.startOffset != + symbol.name.length) { + return const []; + } + final usages = findUsages(symbol).where((reference) { + return reference.value == symbol.name || + reference.value.endsWith('#${symbol.name}'); + }); + return [ + WritersideRenameEdit( + filePath: symbol.filePath, + span: symbol.span!, + replacement: normalized, + ), + for (final usage in usages) + WritersideRenameEdit( + filePath: usage.filePath, + span: usage.span, + replacement: _renamedReferenceValue( + usage.sourceValue ?? usage.value, + symbol.name, + normalized, + ), + ), + ]; + } + + Iterable names(WritersideSymbolKind kind, {String? moduleId}) => + symbols + .where( + (symbol) => + symbol.kind == kind && + (moduleId == null || symbol.moduleId == moduleId), + ) + .map((symbol) => symbol.name) + .toSet(); +} + +class WritersideProject { + const WritersideProject({ + required this.rootPath, + required this.modules, + required this.activeModuleId, + required this.activeInstanceId, + required this.index, + required this.diagnostics, + }); + + final String rootPath; + final List modules; + final String? activeModuleId; + final String? activeInstanceId; + final WritersideProjectIndex index; + final List diagnostics; + + WritersideModule? get activeModule { + for (final module in modules) { + if (_moduleId(module) == activeModuleId) { + return module; + } + } + return modules.firstOrNull; + } + + WritersideInstance? get activeInstance { + final module = activeModule; + if (module == null) { + return null; + } + for (final instance in module.instances) { + if (instance.id == activeInstanceId) { + return instance; + } + } + return module.instances + .where((instance) => !instance.isLibrary) + .firstOrNull; + } + + Map get modulesByOrigin => { + for (final module in modules) _moduleId(module): module, + }; + + WritersideProject withSelection({ + required String moduleId, + String? instanceId, + }) { + return WritersideProject( + rootPath: rootPath, + modules: modules, + activeModuleId: moduleId, + activeInstanceId: instanceId, + index: index, + diagnostics: diagnostics, + ); + } +} + +class WritersideProjectService { + const WritersideProjectService({ + this.moduleService = const WritersideModuleService(), + this.scanOptions = const WorkspaceScanOptions(), + }); + + final WritersideModuleService moduleService; + final WorkspaceScanOptions scanOptions; + + Future> discoverModuleRoots(String projectRoot) async { + final root = normalizePath(projectRoot); + final direct = [ + p.join(root, 'writerside.cfg'), + p.join(root, 'project.ihp'), + ].map(File.new).where((file) => file.existsSync()); + final roots = {for (final file in direct) p.dirname(file.path)}; + final scan = await scanWorkspaceEntities( + root, + options: WorkspaceScanOptions( + maxParsedFileBytes: scanOptions.maxParsedFileBytes, + maxParsedDocuments: scanOptions.maxParsedDocuments, + maxTreeEntries: scanOptions.maxTreeEntries, + followLinks: false, + includeUnsupportedFiles: true, + includeDirectories: false, + includeHiddenDirectories: false, + includeExcludedDirectories: false, + ), + ); + for (final file in scan.entities.whereType()) { + if ({'writerside.cfg', 'project.ihp'}.contains(p.basename(file.path))) { + roots.add(p.dirname(file.path)); + } + } + return roots.toList()..sort(); + } + + Future load( + String projectRoot, { + String? preferredModuleRoot, + }) async { + final roots = await discoverModuleRoots(projectRoot); + final modules = []; + for (final root in roots) { + modules.add(await moduleService.load(root, options: scanOptions)); + } + final index = WritersideProjectIndex.build( + modules, + fileSymbols: await _discoverFileSymbols(modules), + ); + WritersideModule? active; + if (preferredModuleRoot != null) { + active = modules + .where((module) => p.equals(module.rootPath, preferredModuleRoot)) + .firstOrNull; + } + active ??= modules.firstOrNull; + final instance = active?.instances + .where((candidate) => !candidate.isLibrary) + .firstOrNull; + return WritersideProject( + rootPath: normalizePath(projectRoot), + modules: List.unmodifiable(modules), + activeModuleId: active == null ? null : _moduleId(active), + activeInstanceId: instance?.id, + index: index, + diagnostics: sortDiagnostics([ + for (final module in modules) ...module.diagnostics, + ...index.diagnostics, + ]), + ); + } + + Future> _discoverFileSymbols( + List modules, + ) async { + final result = []; + for (final module in modules) { + final moduleId = _moduleId(module); + for (final imageRoot in module.validatedImageDirs) { + await _addDirectorySymbols( + result, + module: module, + moduleId: moduleId, + directoryPath: p.join(module.rootPath, imageRoot), + kind: WritersideSymbolKind.image, + ); + } + await _addConfiguredDirectorySymbols( + result, + module: module, + moduleId: moduleId, + configuredPath: module.config.resourcesDir, + kind: WritersideSymbolKind.resource, + ); + await _addConfiguredDirectorySymbols( + result, + module: module, + moduleId: moduleId, + configuredPath: module.config.apiSpecificationsDir, + kind: WritersideSymbolKind.apiSpecification, + ); + final resourcesFile = module.config.resourcesFile; + if (resourcesFile != null) { + final absolute = normalizePath(p.join(module.rootPath, resourcesFile)); + if (_insideModule(module, absolute) && File(absolute).existsSync()) { + result.add( + WritersideSymbol( + name: p.normalize(resourcesFile), + qualifiedName: '$moduleId:${p.normalize(resourcesFile)}', + kind: WritersideSymbolKind.resource, + moduleId: moduleId, + filePath: absolute, + ), + ); + } + } + } + return result; + } + + Future _addConfiguredDirectorySymbols( + List result, { + required WritersideModule module, + required String moduleId, + required String? configuredPath, + required WritersideSymbolKind kind, + }) async { + if (configuredPath == null || configuredPath.trim().isEmpty) { + return; + } + final absolute = normalizePath(p.join(module.rootPath, configuredPath)); + if (!_insideModule(module, absolute)) { + return; + } + await _addDirectorySymbols( + result, + module: module, + moduleId: moduleId, + directoryPath: absolute, + kind: kind, + ); + } + + Future _addDirectorySymbols( + List result, { + required WritersideModule module, + required String moduleId, + required String directoryPath, + required WritersideSymbolKind kind, + }) async { + final directory = normalizePath(directoryPath); + if (!_insideModule(module, directory) || + !Directory(directory).existsSync()) { + return; + } + final scan = await scanWorkspaceEntities( + directory, + options: WorkspaceScanOptions( + maxParsedFileBytes: scanOptions.maxParsedFileBytes, + maxParsedDocuments: scanOptions.maxParsedDocuments, + maxTreeEntries: scanOptions.maxTreeEntries, + followLinks: false, + includeUnsupportedFiles: true, + includeDirectories: false, + includeHiddenDirectories: false, + includeExcludedDirectories: false, + ), + ); + for (final file in scan.entities.whereType()) { + final relative = p.normalize(p.relative(file.path, from: directory)); + result.add( + WritersideSymbol( + name: relative, + qualifiedName: '$moduleId:$relative', + kind: kind, + moduleId: moduleId, + filePath: normalizePath(file.path), + ), + ); + } + } +} + +void _collectElementReferences( + List references, + WritersideElementNode element, { + required String moduleId, + required String filePath, +}) { + final kind = element.semanticKind; + if (kind == WritersideSemanticKind.include) { + final from = element.attributes['from']; + final id = element.attributes['element-id']; + if (from != null || id != null) { + references.add( + WritersideReference( + value: id == null ? from ?? '' : '${from ?? ''}#$id', + kind: WritersideSymbolKind.snippet, + moduleId: moduleId, + filePath: filePath, + span: + element.attributeSpans[id == null ? 'from' : 'element-id'] ?? + element.span, + origin: element.attributes['origin'], + sourceValue: id ?? from, + ), + ); + } + } else if (kind == WritersideSemanticKind.link) { + final href = element.attributes['href']; + if (href != null) { + references.add( + WritersideReference( + value: href, + kind: WritersideSymbolKind.topic, + moduleId: moduleId, + filePath: filePath, + span: element.attributeSpans['href'] ?? element.span, + origin: element.attributes['origin'], + sourceValue: href, + ), + ); + } + } else if (kind == WritersideSemanticKind.image) { + final src = element.attributes['src']; + if (src != null) { + references.add( + WritersideReference( + value: src, + kind: WritersideSymbolKind.image, + moduleId: moduleId, + filePath: filePath, + span: element.attributeSpans['src'] ?? element.span, + origin: element.attributes['origin'], + sourceValue: src, + ), + ); + } + } else if (kind == WritersideSemanticKind.resource) { + final src = element.attributes['src']; + if (src != null) { + references.add( + WritersideReference( + value: src, + kind: WritersideSymbolKind.resource, + moduleId: moduleId, + filePath: filePath, + span: element.attributeSpans['src'] ?? element.span, + origin: element.attributes['origin'], + sourceValue: src, + ), + ); + } + } else if (element.name == 'category') { + final ref = element.attributes['ref']; + if (ref != null) { + references.add( + WritersideReference( + value: ref, + kind: WritersideSymbolKind.category, + moduleId: moduleId, + filePath: filePath, + span: element.attributeSpans['ref'] ?? element.span, + sourceValue: ref, + ), + ); + } + } else if ({ + 'api-doc', + 'api-endpoint', + 'api-schema', + 'api-webhook', + }.contains(element.name)) { + final attribute = [ + 'openapi-path', + 'src', + 'spec', + 'name', + 'endpoint', + ].where(element.attributes.containsKey).firstOrNull; + final value = attribute == null ? null : element.attributes[attribute]; + if (attribute != null && value != null) { + references.add( + WritersideReference( + value: value, + kind: WritersideSymbolKind.apiReference, + moduleId: moduleId, + filePath: filePath, + span: element.attributeSpans[attribute] ?? element.span, + origin: element.attributes['origin'], + sourceValue: value, + ), + ); + } + } +} + +Diagnostic _referenceDiagnostic(String code, WritersideReference reference) => + Diagnostic( + code: code, + severity: DiagnosticSeverity.warning, + filePath: reference.filePath, + args: {'reference': reference.value}, + sourceSpan: reference.span, + ); + +String _moduleId(WritersideModule module) => + module.config.moduleName?.trim().isNotEmpty == true + ? module.config.moduleName!.trim() + : p.basename(module.rootPath); + +bool _insideModule(WritersideModule module, String candidate) { + final root = normalizePath(module.rootPath); + final normalized = normalizePath(candidate); + return p.equals(root, normalized) || p.isWithin(root, normalized); +} + +String _renamedReferenceValue( + String sourceValue, + String oldName, + String newName, +) { + if (sourceValue == oldName) { + return newName; + } + if (sourceValue == '%$oldName%') { + return '%$newName%'; + } + if (sourceValue.endsWith('#$oldName')) { + return '${sourceValue.substring(0, sourceValue.length - oldName.length)}' + '$newName'; + } + return newName; +} + +extension _FirstOrNull on Iterable { + T? get firstOrNull => isEmpty ? null : first; +} diff --git a/lib/src/writerside/writerside_schema.dart b/lib/src/writerside/writerside_schema.dart new file mode 100644 index 00000000..62a3436f --- /dev/null +++ b/lib/src/writerside/writerside_schema.dart @@ -0,0 +1,497 @@ +/// Writerside builder version against which BusyMark's semantic capabilities +/// are defined and tested. +const writersideDefaultBuilderVersion = '2026.07.8925'; + +enum WritersideSemanticKind { + topic, + paragraph, + chapter, + title, + list, + listItem, + table, + tableRow, + tableCell, + link, + image, + video, + procedure, + step, + codeBlock, + math, + note, + tip, + warning, + quote, + tabs, + tab, + definitionList, + definition, + control, + path, + shortcut, + code, + resource, + tooltip, + strong, + emphasis, + include, + snippet, + condition, + variable, + lineBreak, + metadata, + container, +} + +class WritersideElementCapability { + const WritersideElementCapability({ + required this.name, + required this.kind, + this.attributes = const {}, + this.requiredAttributes = const {}, + this.parents = const {}, + this.block = true, + this.rendered = true, + }); + + final String name; + final WritersideSemanticKind kind; + final Set attributes; + final Set requiredAttributes; + final Set parents; + final bool block; + final bool rendered; +} + +/// A versioned, centralized capability view of the official Writerside schema. +/// +/// It intentionally distinguishes schema-known elements from elements for +/// which BusyMark has a dedicated rendering semantic. Schema-known elements +/// without a special renderer remain lossless generic nodes. +class WritersideSchema { + const WritersideSchema._(); + + static const builderVersion = writersideDefaultBuilderVersion; + + // These names are also ordinary HTML. In a Writerside Markdown file they + // must continue through the Markdown HTML pipeline unless a surrounding + // Writerside-only element establishes semantic-markup context. + static const _htmlCompatibleElements = { + 'a', + 'br', + 'em', + 'img', + 'p', + 'strong', + 'table', + 'td', + 'tr', + }; + + static const commonConditionalAttributes = { + 'filter', + 'id', + 'ignore-vars', + 'instance', + 'switcher-key', + }; + + static const elements = { + 'topic': WritersideElementCapability( + name: 'topic', + kind: WritersideSemanticKind.topic, + attributes: {'id', 'title'}, + requiredAttributes: {'id'}, + ), + 'p': WritersideElementCapability( + name: 'p', + kind: WritersideSemanticKind.paragraph, + attributes: commonConditionalAttributes, + ), + 'chapter': WritersideElementCapability( + name: 'chapter', + kind: WritersideSemanticKind.chapter, + attributes: { + ...commonConditionalAttributes, + 'caps', + 'collapsible', + 'default-state', + 'help-id', + 'level', + 'title', + }, + requiredAttributes: {'title'}, + ), + 'title': WritersideElementCapability( + name: 'title', + kind: WritersideSemanticKind.title, + attributes: {'filter', 'instance'}, + rendered: false, + ), + 'list': WritersideElementCapability( + name: 'list', + kind: WritersideSemanticKind.list, + attributes: {...commonConditionalAttributes, 'columns', 'type'}, + ), + 'li': WritersideElementCapability( + name: 'li', + kind: WritersideSemanticKind.listItem, + attributes: {...commonConditionalAttributes, 'checked'}, + parents: {'list'}, + ), + 'table': WritersideElementCapability( + name: 'table', + kind: WritersideSemanticKind.table, + attributes: { + ...commonConditionalAttributes, + 'column-width', + 'style', + 'sticky-header', + }, + ), + 'tr': WritersideElementCapability( + name: 'tr', + kind: WritersideSemanticKind.tableRow, + attributes: commonConditionalAttributes, + parents: {'table'}, + ), + 'td': WritersideElementCapability( + name: 'td', + kind: WritersideSemanticKind.tableCell, + attributes: { + ...commonConditionalAttributes, + 'align', + 'colspan', + 'rowspan', + }, + parents: {'tr'}, + ), + 'a': WritersideElementCapability( + name: 'a', + kind: WritersideSemanticKind.link, + attributes: { + ...commonConditionalAttributes, + 'anchor', + 'as', + 'href', + 'origin', + 'summary', + }, + block: false, + ), + 'img': WritersideElementCapability( + name: 'img', + kind: WritersideSemanticKind.image, + attributes: { + ...commonConditionalAttributes, + 'alt', + 'border-effect', + 'dark-src', + 'height', + 'origin', + 'preview-src', + 'scale', + 'src', + 'style', + 'theme', + 'thumbnail', + 'width', + }, + requiredAttributes: {'src'}, + block: false, + ), + 'video': WritersideElementCapability( + name: 'video', + kind: WritersideSemanticKind.video, + attributes: { + ...commonConditionalAttributes, + 'border-effect', + 'height', + 'mini-player', + 'origin', + 'preview-src', + 'src', + 'width', + }, + requiredAttributes: {'src'}, + ), + 'procedure': WritersideElementCapability( + name: 'procedure', + kind: WritersideSemanticKind.procedure, + attributes: { + ...commonConditionalAttributes, + 'collapsible', + 'default-state', + 'title', + }, + ), + 'step': WritersideElementCapability( + name: 'step', + kind: WritersideSemanticKind.step, + attributes: commonConditionalAttributes, + parents: {'procedure'}, + ), + 'code-block': WritersideElementCapability( + name: 'code-block', + kind: WritersideSemanticKind.codeBlock, + attributes: { + ...commonConditionalAttributes, + 'collapsed-title', + 'collapsed-title-line-number', + 'collapsible', + 'default-state', + 'disable-links', + 'emphasize-lines', + 'include-lines', + 'include-symbol', + 'lang', + 'noinject', + 'prompt', + 'show-white-spaces', + 'src', + 'validate', + }, + ), + 'math': WritersideElementCapability( + name: 'math', + kind: WritersideSemanticKind.math, + attributes: commonConditionalAttributes, + block: false, + ), + 'note': WritersideElementCapability( + name: 'note', + kind: WritersideSemanticKind.note, + attributes: {...commonConditionalAttributes, 'title'}, + ), + 'tip': WritersideElementCapability( + name: 'tip', + kind: WritersideSemanticKind.tip, + attributes: {...commonConditionalAttributes, 'title'}, + ), + 'warning': WritersideElementCapability( + name: 'warning', + kind: WritersideSemanticKind.warning, + attributes: {...commonConditionalAttributes, 'title'}, + ), + 'quote': WritersideElementCapability( + name: 'quote', + kind: WritersideSemanticKind.quote, + attributes: {...commonConditionalAttributes, 'author'}, + ), + 'tabs': WritersideElementCapability( + name: 'tabs', + kind: WritersideSemanticKind.tabs, + attributes: {...commonConditionalAttributes, 'group'}, + ), + 'tab': WritersideElementCapability( + name: 'tab', + kind: WritersideSemanticKind.tab, + attributes: {...commonConditionalAttributes, 'title'}, + requiredAttributes: {'title'}, + parents: {'tabs'}, + ), + 'deflist': WritersideElementCapability( + name: 'deflist', + kind: WritersideSemanticKind.definitionList, + attributes: { + ...commonConditionalAttributes, + 'collapsible', + 'default-state', + 'sorted', + 'style', + 'type', + }, + ), + 'def': WritersideElementCapability( + name: 'def', + kind: WritersideSemanticKind.definition, + attributes: { + ...commonConditionalAttributes, + 'collapsible', + 'default-state', + 'title', + }, + requiredAttributes: {'title'}, + parents: {'deflist'}, + ), + 'control': WritersideElementCapability( + name: 'control', + kind: WritersideSemanticKind.control, + attributes: commonConditionalAttributes, + block: false, + ), + 'path': WritersideElementCapability( + name: 'path', + kind: WritersideSemanticKind.path, + attributes: commonConditionalAttributes, + block: false, + ), + 'shortcut': WritersideElementCapability( + name: 'shortcut', + kind: WritersideSemanticKind.shortcut, + attributes: commonConditionalAttributes, + block: false, + ), + 'code': WritersideElementCapability( + name: 'code', + kind: WritersideSemanticKind.code, + attributes: commonConditionalAttributes, + block: false, + ), + 'resource': WritersideElementCapability( + name: 'resource', + kind: WritersideSemanticKind.resource, + attributes: {...commonConditionalAttributes, 'src'}, + block: false, + ), + 'tooltip': WritersideElementCapability( + name: 'tooltip', + kind: WritersideSemanticKind.tooltip, + attributes: {...commonConditionalAttributes, 'term'}, + block: false, + ), + 'b': WritersideElementCapability( + name: 'b', + kind: WritersideSemanticKind.strong, + attributes: commonConditionalAttributes, + block: false, + ), + 'strong': WritersideElementCapability( + name: 'strong', + kind: WritersideSemanticKind.strong, + attributes: commonConditionalAttributes, + block: false, + ), + 'i': WritersideElementCapability( + name: 'i', + kind: WritersideSemanticKind.emphasis, + attributes: commonConditionalAttributes, + block: false, + ), + 'em': WritersideElementCapability( + name: 'em', + kind: WritersideSemanticKind.emphasis, + attributes: commonConditionalAttributes, + block: false, + ), + 'emphasis': WritersideElementCapability( + name: 'emphasis', + kind: WritersideSemanticKind.emphasis, + attributes: commonConditionalAttributes, + block: false, + ), + 'include': WritersideElementCapability( + name: 'include', + kind: WritersideSemanticKind.include, + attributes: { + ...commonConditionalAttributes, + 'element-id', + 'from', + 'nullable', + 'origin', + 'use-filter', + }, + ), + 'snippet': WritersideElementCapability( + name: 'snippet', + kind: WritersideSemanticKind.snippet, + attributes: commonConditionalAttributes, + requiredAttributes: {'id'}, + rendered: false, + ), + 'if': WritersideElementCapability( + name: 'if', + kind: WritersideSemanticKind.condition, + attributes: commonConditionalAttributes, + ), + 'var': WritersideElementCapability( + name: 'var', + kind: WritersideSemanticKind.variable, + attributes: {...commonConditionalAttributes, 'name', 'value'}, + requiredAttributes: {'name'}, + rendered: false, + ), + 'br': WritersideElementCapability( + name: 'br', + kind: WritersideSemanticKind.lineBreak, + block: false, + ), + 'web-file-name': WritersideElementCapability( + name: 'web-file-name', + kind: WritersideSemanticKind.metadata, + rendered: false, + ), + }; + + static bool isMarkdownSemanticBlock(String name) { + final normalized = name.toLowerCase(); + final capability = capabilityFor(normalized); + return (capability?.block ?? isKnownElement(normalized)) && + !_htmlCompatibleElements.contains(normalized); + } + + /// Names present in the official 2026.07 semantic reference but currently + /// represented as generic lossless elements by BusyMark. + static const genericElementNames = { + 'anchor', + 'api-doc', + 'api-endpoint', + 'api-schema', + 'api-webhook', + 'card-summary', + 'card', + 'cards', + 'category', + 'compare', + 'contribute-url', + 'description', + 'format', + 'group', + 'help-id', + 'icon', + 'include-in-head', + 'inline-frame', + 'link-summary', + 'links', + 'misc', + 'primary', + 'primary-label', + 'property', + 'request', + 'response', + 'sample', + 'search-keyword', + 'secondary', + 'secondary-label', + 'section-starting-page', + 'seealso', + 'show-structure', + 'spotlight', + 'tldr', + 'ui-path', + 'value', + 'web-summary', + }; + + static bool isKnownElement(String name) => + elements.containsKey(name.toLowerCase()) || + genericElementNames.contains(name.toLowerCase()); + + static WritersideElementCapability? capabilityFor(String name) => + elements[name.toLowerCase()]; + + static Iterable childElementNames(String? parent) { + final normalizedParent = parent?.toLowerCase(); + return {...elements.keys, ...genericElementNames}.where((name) { + final allowedParents = elements[name]?.parents ?? const {}; + return allowedParents.isEmpty || + allowedParents.contains(normalizedParent); + }); + } + + static Iterable attributesFor(String element) => { + ...commonConditionalAttributes, + ...?elements[element.toLowerCase()]?.attributes, + }; +} diff --git a/pubspec.lock b/pubspec.lock index 95ba64d3..16254ae7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -409,10 +409,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.20.3" + version: "0.20.2" io: dependency: transitive description: @@ -497,10 +497,10 @@ packages: dependency: transitive description: name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.20" + version: "0.12.19" material_color_utilities: dependency: transitive description: @@ -521,10 +521,10 @@ packages: dependency: transitive description: name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.18.0" mime: dependency: transitive description: @@ -862,26 +862,26 @@ packages: dependency: transitive description: name: test - sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f + sha256: "8d9ceddbab833f180fbefed08afa76d7c03513dfdba87ffcec2718b02bbcbf20" url: "https://pub.dev" source: hosted - version: "1.31.1" + version: "1.31.0" test_api: dependency: transitive description: name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.dev" source: hosted - version: "0.7.12" + version: "0.7.11" test_core: dependency: transitive description: name: test_core - sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 + sha256: "1991d4cfe85d5043241acac92962c3977c8d2f2add1ee73130c7b286417d1d34" url: "https://pub.dev" source: hosted - version: "0.6.18" + version: "0.6.17" typed_data: dependency: transitive description: @@ -998,10 +998,10 @@ packages: dependency: transitive description: name: vector_math - sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47 + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.2.0" vm_service: dependency: transitive description: diff --git a/test/fixtures/writerside/conformance_project/c.list b/test/fixtures/writerside/conformance_project/c.list new file mode 100644 index 00000000..0dfaea6e --- /dev/null +++ b/test/fixtures/writerside/conformance_project/c.list @@ -0,0 +1,4 @@ + + + + diff --git a/test/fixtures/writerside/conformance_project/cfg/buildprofiles.xml b/test/fixtures/writerside/conformance_project/cfg/buildprofiles.xml new file mode 100644 index 00000000..01ed61be --- /dev/null +++ b/test/fixtures/writerside/conformance_project/cfg/buildprofiles.xml @@ -0,0 +1,13 @@ + + + + keymap.xml + + + + + true + false + + + diff --git a/test/fixtures/writerside/conformance_project/cfg/glossary.xml b/test/fixtures/writerside/conformance_project/cfg/glossary.xml new file mode 100644 index 00000000..1aa736e7 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/cfg/glossary.xml @@ -0,0 +1,5 @@ + + + + Markup that conveys the meaning of content. + diff --git a/test/fixtures/writerside/conformance_project/conformance.tree b/test/fixtures/writerside/conformance_project/conformance.tree new file mode 100644 index 00000000..58716aa3 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/conformance.tree @@ -0,0 +1,6 @@ + + + + + diff --git a/test/fixtures/writerside/conformance_project/keymap.xml b/test/fixtures/writerside/conformance_project/keymap.xml new file mode 100644 index 00000000..0581c4b8 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/keymap.xml @@ -0,0 +1,12 @@ + + + + + + + + Save + Ctrl+S + + + diff --git a/test/fixtures/writerside/conformance_project/resources/sample-resource.txt b/test/fixtures/writerside/conformance_project/resources/sample-resource.txt new file mode 100644 index 00000000..50b01c78 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/resources/sample-resource.txt @@ -0,0 +1 @@ +BusyMark Writerside conformance resource. diff --git a/test/fixtures/writerside/conformance_project/topics/features.topic b/test/fixtures/writerside/conformance_project/topics/features.topic new file mode 100644 index 00000000..1fc88ee6 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/topics/features.topic @@ -0,0 +1,25 @@ + + +

Use Settings, docs/index.md, + , busymark, + , and + semantic markup.

+ Lossless semantic quote. + +
  • Checked item
  • +
    + + + +
    FeatureState
    Semantic modelEnabled
    +

    Writerside

    + +void main() { + print('BusyMark'); +} + + BusyMark +

    Reusable semantic content.

    +
    diff --git a/test/fixtures/writerside/conformance_project/topics/semantic.md b/test/fixtures/writerside/conformance_project/topics/semantic.md new file mode 100644 index 00000000..9395358c --- /dev/null +++ b/test/fixtures/writerside/conformance_project/topics/semantic.md @@ -0,0 +1,11 @@ +# Writerside Markdown conformance + +Welcome to %product%. + + + + + + Semantic topic + + diff --git a/test/fixtures/writerside/conformance_project/v.list b/test/fixtures/writerside/conformance_project/v.list new file mode 100644 index 00000000..d56790d1 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/v.list @@ -0,0 +1,4 @@ + + + + diff --git a/test/fixtures/writerside/conformance_project/writerside.cfg b/test/fixtures/writerside/conformance_project/writerside.cfg new file mode 100644 index 00000000..3fcaefa4 --- /dev/null +++ b/test/fixtures/writerside/conformance_project/writerside.cfg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test/src/writerside_document_test.dart b/test/src/writerside_document_test.dart new file mode 100644 index 00000000..58b31ffb --- /dev/null +++ b/test/src/writerside_document_test.dart @@ -0,0 +1,189 @@ +import 'dart:io'; + +import 'package:busymark/src/markdown/preview_model.dart'; +import 'package:busymark/src/markdown/busymark_document.dart'; +import 'package:busymark/src/markdown/markdown_model.dart'; +import 'package:busymark/src/markdown/markdown_parser.dart'; +import 'package:busymark/src/writerside/writerside_document.dart'; +import 'package:busymark/src/writerside/writerside_document_parser.dart'; +import 'package:busymark/src/writerside/writerside_document_renderer.dart'; +import 'package:busymark/src/writerside/writerside_document_resolver.dart'; +import 'package:busymark/src/writerside/writerside_document_serializer.dart'; +import 'package:busymark/src/writerside/writerside_module_service.dart'; +import 'package:busymark/src/writerside/writerside_schema.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:path/path.dart' as p; + +void main() { + test( + 'lossless XML nodes preserve exact duplicate ranges and generic markup', + () { + const source = ''' + +

    same

    +

    same

    + semantic search +
    '''; + final document = const WritersideDocumentParser().parseXml( + filePath: '/tmp/ranges.topic', + source: source, + ); + final paragraphs = document.elements + .where((element) => element.name == 'p') + .toList(); + + expect(document.isWellFormed, isTrue); + expect(paragraphs, hasLength(2)); + expect( + paragraphs[0].span.startOffset, + isNot(paragraphs[1].span.startOffset), + ); + expect(paragraphs[0].rawSource, '

    same

    '); + expect(paragraphs[1].attributes['data-custom'], 'second'); + final generic = document.elements.singleWhere( + (element) => element.name == 'search-keyword', + ); + expect(generic, isA()); + expect(generic.schemaKnown, isTrue); + expect(generic.attributes['custom'], 'kept'); + expect(const WritersideDocumentSerializer().serialize(document), source); + expect(WritersideSchema.builderVersion, '2026.07.8925'); + }, + ); + + test('Writerside Markdown round-trips native and generic markup', () { + const source = '''# Semantic Markdown + +Known semantic markup. + +Generic schema content. +'''; + final markdown = const MarkdownParser().parse( + filePath: '/tmp/semantic.md', + source: source, + mode: MarkdownMode.writersideMarkdown, + validateLocalReferences: false, + ); + final document = const WritersideDocumentParser().parseMarkdown( + filePath: markdown.filePath, + source: source, + markdown: markdown.busyDocument, + ); + + expect(document.format, WritersideDocumentFormat.markdown); + expect( + document.elements.singleWhere((element) => element.name == 'card'), + isA(), + ); + expect(const WritersideDocumentSerializer().serialize(document), source); + }); + + test( + 'resolver applies includes, filters, groups, variables, and cycles', + () async { + final fixture = await _ResolvedFixture.create(); + addTearDown(fixture.dispose); + final module = await const WritersideModuleService().load(fixture.path); + final topic = module.topicByReference('main.topic')!; + final instance = module.instances.single; + + final resolved = const WritersideDocumentResolver().resolve( + topic.document, + WritersideResolveContext( + module: module, + topic: topic, + instance: instance, + ), + ); + final busy = const WritersideDocumentRenderer().toBusyDocument( + resolved.document, + title: resolved.title, + ); + final text = _documentText(busy.blocks); + final preview = const BusyMarkPreviewBuilder().build(busy); + + expect(text, contains('Hello BusyMark')); + expect(text, contains('Linux only')); + expect(text, contains('Nested content')); + expect(text, isNot(contains('Windows only'))); + expect(text, isNot(contains('Excluded from guide'))); + expect( + resolved.diagnostics.map((diagnostic) => diagnostic.code), + contains('writerside.include.cycle'), + ); + expect(_previewText(preview.blocks), contains('Hello BusyMark')); + }, + ); +} + +String _documentText(Iterable blocks) { + final buffer = StringBuffer(); + for (final block in blocks) { + buffer.writeln(block.plainText); + buffer.writeln(_documentText(block.children)); + } + return buffer.toString(); +} + +String _previewText(Iterable blocks) => [ + for (final block in blocks) ...[block.text, _previewText(block.children)], +].join('\n'); + +class _ResolvedFixture { + const _ResolvedFixture(this.directory); + + final Directory directory; + String get path => directory.path; + + static Future<_ResolvedFixture> create() async { + final directory = await Directory.systemTemp.createTemp( + 'busymark-writerside-resolver-', + ); + final topics = await Directory(p.join(directory.path, 'topics')).create(); + await File(p.join(directory.path, 'writerside.cfg')).writeAsString(''' + + + + + + + +'''); + await File( + p.join(directory.path, 'v.list'), + ).writeAsString(''); + await File(p.join(directory.path, 'groups.xml')).writeAsString( + '' + '', + ); + await File(p.join(directory.path, 'guide.tree')).writeAsString(''' + + + +'''); + await File(p.join(topics.path, 'main.topic')).writeAsString(''' + + + + + + +'''); + await File(p.join(topics.path, 'library.topic')).writeAsString(''' + + +

    Hello %product%

    +

    Windows only

    +

    Linux only

    +

    Excluded from guide

    + +
    +

    Nested content

    + +
    +'''); + return _ResolvedFixture(directory); + } + + Future dispose() => directory.delete(recursive: true); +} diff --git a/test/src/writerside_pdf_export_test.dart b/test/src/writerside_pdf_export_test.dart index c7be3706..aef03f9d 100644 --- a/test/src/writerside_pdf_export_test.dart +++ b/test/src/writerside_pdf_export_test.dart @@ -6,6 +6,7 @@ import 'package:busymark/src/export/typst_compiler.dart'; import 'package:busymark/src/export/writerside_pdf_export_service.dart'; import 'package:busymark/src/export/writerside_pdf_models.dart'; import 'package:busymark/src/markdown/markdown_model.dart'; +import 'package:busymark/src/markdown/busymark_document.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:path/path.dart' as p; @@ -22,6 +23,7 @@ void main() { final result = await service.export( WritersidePdfExportRequest( moduleRoot: fixture.module.path, + projectRoot: fixture.root.path, instanceId: 'guide', destinationPath: destination, overwrite: false, @@ -39,15 +41,26 @@ void main() { expect(request.workspaceRoot, fixture.module.path); expect(request.options.pageSize, MarkdownPdfPageSize.letter); expect(request.options.orientation, MarkdownPdfOrientation.landscape); - expect(request.source, contains('# BusyMark Guide')); - expect(request.source, contains('# Advanced')); - expect(request.source, contains('XML topic content.')); - expect(request.source, contains(r'$$')); - expect(request.source, contains('x < y')); - expect(request.source, contains('file://')); + expect(request.source, isEmpty); + expect(request.document, isNotNull); + final blocks = _allBlocks(request.document!.blocks).toList(); + final text = blocks.map((block) => block.plainText).join('\n'); + final headings = blocks + .where((block) => block.kind == BusyBlockKind.heading) + .map((block) => block.plainText) + .toList(); + expect(headings, containsAllInOrder(['BusyMark Guide', 'Advanced'])); + expect(text, contains('XML topic content.')); + expect(text, contains('Resolved include content.')); + expect(text, contains('Cross-module include content.')); + expect(text, isNot(contains('Included content:'))); + expect(text, contains('x < y')); + expect(blocks.map((block) => block.kind), contains(BusyBlockKind.math)); expect( - request.source.indexOf('# BusyMark Guide'), - lessThan(request.source.indexOf('# Advanced')), + blocks + .expand((block) => _allInlines(block.inlines)) + .map((inline) => inline.destination), + contains(startsWith('file://')), ); }, ); @@ -169,6 +182,20 @@ void main() { ); } +Iterable _allBlocks(Iterable blocks) sync* { + for (final block in blocks) { + yield block; + yield* _allBlocks(block.children); + } +} + +Iterable _allInlines(Iterable inlines) sync* { + for (final inline in inlines) { + yield inline; + yield* _allInlines(inline.children); + } +} + class _WritersideFixture { const _WritersideFixture({required this.root, required this.module}); @@ -211,13 +238,36 @@ Inline math: \$x^2\$. '''

    XML topic content.

    + + x < y
    ''', ); + await File(p.join(module.path, 'topics', 'shared.topic')).writeAsString(''' + +

    Resolved include content.

    +
    +'''); await File( p.join(module.path, 'images', 'logo.png'), ).writeAsBytes(const [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); + final shared = await Directory(p.join(root.path, 'Shared')).create(); + await Directory(p.join(shared.path, 'topics')).create(); + await File(p.join(shared.path, 'writerside.cfg')).writeAsString(''' + + + + +'''); + await File(p.join(shared.path, 'topics', 'library.topic')).writeAsString(''' + + +

    Cross-module include content.

    +
    +
    +'''); return _WritersideFixture(root: root, module: module); } diff --git a/test/src/writerside_project_test.dart b/test/src/writerside_project_test.dart new file mode 100644 index 00000000..8ca2908d --- /dev/null +++ b/test/src/writerside_project_test.dart @@ -0,0 +1,165 @@ +import 'dart:io'; + +import 'package:busymark/src/workspace/workspace_model.dart'; +import 'package:busymark/src/workspace/workspace_service.dart'; +import 'package:busymark/src/writerside/writerside_document_renderer.dart'; +import 'package:busymark/src/writerside/writerside_document_resolver.dart'; +import 'package:busymark/src/writerside/writerside_project.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:path/path.dart' as p; + +void main() { + test( + 'discovers modules, indexes symbols, and resolves origin references', + () async { + final fixture = await _ProjectFixture.create(); + addTearDown(fixture.dispose); + final project = await const WritersideProjectService().load(fixture.path); + + expect(project.modules, hasLength(2)); + expect( + project.modulesByOrigin.keys, + containsAll(['main-docs', 'shared-docs']), + ); + expect( + project.index.names(WritersideSymbolKind.snippet), + contains('shared-note'), + ); + expect( + project.index.names(WritersideSymbolKind.image), + contains('logo.svg'), + ); + expect( + project.index.names(WritersideSymbolKind.resource), + contains('sample.json'), + ); + expect( + project.index.names(WritersideSymbolKind.apiSpecification), + contains('service.yaml'), + ); + final snippet = project.index.symbols.singleWhere( + (symbol) => + symbol.kind == WritersideSymbolKind.snippet && + symbol.name == 'shared-note', + ); + final rename = project.index.safeRenameEdits(snippet, 'renamed-note'); + expect(rename, hasLength(2)); + expect( + rename.map((edit) => edit.replacement), + everyElement('renamed-note'), + ); + + final main = project.modulesByOrigin['main-docs']!; + final topic = main.topicByReference('main.topic')!; + final resolved = const WritersideDocumentResolver().resolve( + topic.document, + WritersideResolveContext( + module: main, + topic: topic, + instance: main.instances.single, + modulesByOrigin: project.modulesByOrigin, + ), + ); + final rendered = const WritersideDocumentRenderer().toBusyDocument( + resolved.document, + title: resolved.title, + ); + expect( + rendered.blocks.map((block) => block.plainText).join('\n'), + contains('Shared module content'), + ); + }, + ); + + test( + 'workspace promotes a parent directory to a multi-module project', + () async { + final fixture = await _ProjectFixture.create(); + addTearDown(fixture.dispose); + + final workspace = await const WorkspaceService().openPath(fixture.path); + + expect(workspace.kind, WorkspaceKind.writersideModule); + expect(workspace.writersideProject?.modules, hasLength(2)); + expect(workspace.writersideModule, isNotNull); + }, + ); +} + +class _ProjectFixture { + const _ProjectFixture(this.directory); + + final Directory directory; + String get path => directory.path; + + static Future<_ProjectFixture> create() async { + final root = await Directory.systemTemp.createTemp( + 'busymark-writerside-project-', + ); + await _writeModule( + root: root, + directoryName: 'main', + moduleName: 'main-docs', + topicName: 'main.topic', + topic: ''' + + + +''', + ); + await _writeModule( + root: root, + directoryName: 'shared', + moduleName: 'shared-docs', + topicName: 'shared.topic', + topic: ''' + + Shared module content + +''', + ); + return _ProjectFixture(root); + } + + static Future _writeModule({ + required Directory root, + required String directoryName, + required String moduleName, + required String topicName, + required String topic, + }) async { + final module = await Directory(p.join(root.path, directoryName)).create(); + final topics = await Directory(p.join(module.path, 'topics')).create(); + final images = await Directory(p.join(module.path, 'images')).create(); + final resources = await Directory( + p.join(module.path, 'resources'), + ).create(); + final specifications = await Directory( + p.join(module.path, 'specifications'), + ).create(); + await File(p.join(module.path, 'writerside.cfg')).writeAsString(''' + + + + + + + + +'''); + await File(p.join(module.path, 'guide.tree')).writeAsString(''' + + + +'''); + await File(p.join(topics.path, topicName)).writeAsString(topic); + await File(p.join(images.path, 'logo.svg')).writeAsString(''); + await File(p.join(resources.path, 'sample.json')).writeAsString('{}'); + await File( + p.join(specifications.path, 'service.yaml'), + ).writeAsString('openapi: 3.1.0\n'); + } + + Future dispose() => directory.delete(recursive: true); +} diff --git a/tools/validate_writerside_conformance.sh b/tools/validate_writerside_conformance.sh new file mode 100755 index 00000000..94ee762b --- /dev/null +++ b/tools/validate_writerside_conformance.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -euo pipefail + +readonly builder_version="2026.07.8925" +readonly source_root="${1:-test/fixtures/writerside/conformance_project}" +readonly module_instance="${2:-Conformance/conformance}" +readonly work_root="$(mktemp -d)" +readonly source_copy="$work_root/sources" +readonly output_root="$work_root/output" +readonly builder_log="$work_root/builder.log" +mkdir -p "$source_copy" "$output_root" +trap 'rm -rf -- "$work_root"' EXIT + +cp -a -- "$(realpath "$source_root")/." "$source_copy/" + +if ! docker run --rm \ + --user "$(id -u):$(id -g)" \ + -v "$source_copy:/opt/sources" \ + -v "$output_root:/opt/builder-output" \ + -e HOME=/tmp/writerside-home \ + -e SOURCE_DIR=/opt/sources \ + -e MODULE_INSTANCE="$module_instance" \ + -e OUTPUT_DIR=/opt/builder-output/artifacts \ + -e RUNNER=other \ + "jetbrains/writerside-builder:$builder_version" >"$builder_log" 2>&1; then + cat "$builder_log" + exit 1 +fi + +find "$output_root/artifacts" -type f -size +0c -print -quit | grep -q . From 50c81a196bfdceba98baf925f660f65bfa3a28e0 Mon Sep 17 00:00:00 2001 From: albert Date: Sun, 30 Aug 2026 16:35:00 -0700 Subject: [PATCH 06/11] Update "Markdown & HTML" to "Syntax Reference" and revamp the dialog structure --- lib/l10n/app_ar.arb | 190 ++-- lib/l10n/app_de.arb | 190 ++-- lib/l10n/app_en.arb | 236 +++-- lib/l10n/app_es.arb | 190 ++-- lib/l10n/app_et.arb | 190 ++-- lib/l10n/app_fa.arb | 190 ++-- lib/l10n/app_fr.arb | 190 ++-- lib/l10n/app_hi.arb | 190 ++-- lib/l10n/app_id.arb | 190 ++-- lib/l10n/app_it.arb | 190 ++-- lib/l10n/app_ja.arb | 190 ++-- lib/l10n/app_ko.arb | 190 ++-- lib/l10n/app_nb.arb | 190 ++-- lib/l10n/app_nl.arb | 190 ++-- lib/l10n/app_pl.arb | 190 ++-- lib/l10n/app_pt.arb | 86 +- lib/l10n/app_pt_BR.arb | 190 ++-- lib/l10n/app_ru.arb | 190 ++-- lib/l10n/app_tr.arb | 190 ++-- lib/l10n/app_uk.arb | 190 ++-- lib/l10n/app_vi.arb | 190 ++-- lib/l10n/app_zh.arb | 86 +- lib/l10n/app_zh_CN.arb | 190 ++-- lib/l10n/generated/app_localizations.dart | 376 ++++++- lib/l10n/generated/app_localizations_ar.dart | 241 ++++- lib/l10n/generated/app_localizations_de.dart | 244 ++++- lib/l10n/generated/app_localizations_en.dart | 243 ++++- lib/l10n/generated/app_localizations_es.dart | 248 ++++- lib/l10n/generated/app_localizations_et.dart | 245 ++++- lib/l10n/generated/app_localizations_fa.dart | 241 ++++- lib/l10n/generated/app_localizations_fr.dart | 246 ++++- lib/l10n/generated/app_localizations_hi.dart | 241 ++++- lib/l10n/generated/app_localizations_id.dart | 246 ++++- lib/l10n/generated/app_localizations_it.dart | 247 ++++- lib/l10n/generated/app_localizations_ja.dart | 236 ++++- lib/l10n/generated/app_localizations_ko.dart | 236 ++++- lib/l10n/generated/app_localizations_nb.dart | 243 ++++- lib/l10n/generated/app_localizations_nl.dart | 244 ++++- lib/l10n/generated/app_localizations_pl.dart | 245 ++++- lib/l10n/generated/app_localizations_pt.dart | 512 ++++++++-- lib/l10n/generated/app_localizations_ru.dart | 245 ++++- lib/l10n/generated/app_localizations_tr.dart | 245 ++++- lib/l10n/generated/app_localizations_uk.dart | 245 ++++- lib/l10n/generated/app_localizations_vi.dart | 245 ++++- lib/l10n/generated/app_localizations_zh.dart | 494 +++++++-- lib/src/app/busymark_app.dart | 20 +- lib/src/app/busymark_dialog_identity.dart | 12 +- lib/src/app/busymark_dialogs.dart | 952 +++++++++++++----- lib/src/app/busymark_main_menu.dart | 12 +- lib/src/app/busymark_shortcuts.dart | 24 +- lib/src/app/command_registry.dart | 12 +- .../platform/header_bar_configuration.dart | 18 +- .../platform/linux_header_bar_service.dart | 4 +- .../presentation/settings_screen.dart | 8 +- .../presentation/welcome_screen.dart | 8 +- .../presentation/workspace_screen.dart | 8 +- linux/runner/my_application.cc | 10 +- test/src/app_smoke_test.dart | 209 +++- test/src/command_registry_test.dart | 5 + test/src/header_bar_configuration_test.dart | 19 +- test/src/localization_audit_test.dart | 38 +- test/src/native_headerbar_audit_test.dart | 16 +- 62 files changed, 8940 insertions(+), 2651 deletions(-) diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index bcab9276..9409dbad 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "فتح مرجع Markdown وHTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "فتح مرجع بناء الجملة", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "فتح إعدادات BusyMark", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "فشلت عملية Git عبر الشبكة.", "gitErrorConflict": "أبلغ Git عن تعارضات لم تُحل.", "gitErrorCommandFailed": "فشل أمر Git.", - "markdownAndHtml": "Markdown و HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "مرجع بناء الجملة", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "كتل Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "كتل Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "بنى الكتل المدعومة في مصدر Markdown والمعاينة.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "بنى الكتل المدعومة في مصدر Markdown والمعاينة.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown داخل السطر", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown داخل السطر", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "تنسيق يمكن استخدامه داخل الفقرات وعناصر القوائم وخلايا الجداول.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "تنسيق يمكن استخدامه داخل الفقرات وعناصر القوائم وخلايا الجداول.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "كتل HTML الخام", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "كتل HTML الخام", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "وسوم HTML الكتلية الآمنة التي تعرضها ودجات معاينة BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "وسوم HTML الكتلية الآمنة التي تعرضها ودجات معاينة BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "وسوم HTML داخل السطر", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "وسوم HTML داخل السطر", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "وسوم HTML آمنة داخل السطر تعرض بدون إظهار الوسوم حرفيًا.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "وسوم HTML آمنة داخل السطر تعرض بدون إظهار الوسوم حرفيًا.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "قواعد الأمان", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "قواعد الأمان", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "يتم تحليل HTML الخام وتنظيفه قبل عرضه في المعاينة.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "يتم تحليل HTML الخام وتنظيفه قبل عرضه في المعاينة.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "العناوين", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "العناوين", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "الفقرات", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "الفقرات", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "القوائم", - "@markdownHtmlLists": { + "syntaxReferenceLists": "القوائم", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "الحاويات", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "الحاويات", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "كتل النص", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "كتل النص", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "الأشكال والصور", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "الأشكال والصور", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "كود منسق مسبقًا", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "كود منسق مسبقًا", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "كتل قابلة للفتح", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "كتل قابلة للفتح", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "قوائم وصفية", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "قوائم وصفية", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "وسوم التنسيق", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "وسوم التنسيق", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "وسوم الكود داخل السطر", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "وسوم الكود داخل السطر", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "وسوم نصية دلالية", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "وسوم نصية دلالية", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "معاينة منظفة", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "معاينة منظفة", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "يتم تحويل HTML المسموح به إلى كتل معاينة BusyMark، وليس عرضه في متصفح.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "يتم تحويل HTML المسموح به إلى كتل معاينة BusyMark، وليس عرضه في متصفح.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "يتم حفظ المصدر", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "يتم حفظ المصدر", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "يتم حفظ HTML الخام غير المعدل كما هو تمامًا كنص مصدر.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "يتم حفظ HTML الخام غير المعدل كما هو تمامًا كنص مصدر.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown داخل HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown داخل HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "تعرض علامات Markdown داخل HTML الخام كنص حرفي.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "تعرض علامات Markdown داخل HTML الخام كنص حرفي.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "المحتوى النشط محظور", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "المحتوى النشط محظور", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "يتم حظر السكربتات والأنماط والإطارات والنماذج وSVG وMathML والأحداث والسمات غير الآمنة.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "يتم حظر السكربتات والأنماط والإطارات والنماذج وSVG وMathML والأحداث والسمات غير الآمنة.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "عناوين URL آمنة فقط", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "عناوين URL آمنة فقط", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "تسمح الروابط بـ http وhttps وmailto وtel والروابط النسبية والمقاطع؛ وتحظر المخططات غير الآمنة.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "تسمح الروابط بـ http وhttps وmailto وtel والروابط النسبية والمقاطع؛ وتحظر المخططات غير الآمنة.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "إضافة إلى Git", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "الفئة", + "syntaxReferenceCategoryDiagramsAndApi": "المخططات وواجهات API", + "syntaxReferenceCategoryMathematics": "الرياضيات", + "syntaxReferenceExample": "مثال", + "syntaxReferenceIdentifiers": "المعرّفات والأسماء البديلة", + "syntaxReferenceScope": "النطاق", + "syntaxReferenceLimitation": "قيد في BusyMark", + "syntaxReferenceOfficialDocumentation": "الوثائق الرسمية", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown العادي وMarkdown في Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Markdown في Writerside فقط", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Markdown وXML في Writerside فقط", + "syntaxReferenceMarkdownDescription": "أشكال Markdown الأساسية التي يستطيع BusyMark كتابتها ومعاينتها.", + "syntaxReferenceParagraphExample": "فقرة نصية.", + "syntaxReferenceTableLimitation": "تستخدم الجداول صيغة الأنابيب في GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "مسافتان في نهاية السطر، \\,
    ", + "syntaxReferenceHtmlDescription": "يقبل BusyMark مجموعة محدودة وآمنة من HTML الخام في مصدر Markdown.", + "syntaxReferenceDiagramsDescription": "تعمل كتل Mermaid وPlantUML وD2 وOpenAPI المسيّجة في مصدر Markdown. لا تتأثر معرّفات السياج بحالة الأحرف، ويحافظ BusyMark على التهجئة الأصلية.", + "syntaxReferenceOpenApiLimitation": "استخدم محتوى YAML أو JSON داخل سياج. لا يعامل BusyMark مستند YAML أو JSON كاملاً عشوائياً على أنه مرجع OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "كتل شيفرة دلالية للمخططات", + "syntaxReferenceSemanticDiagramLimitation": "تدعم صيغتا code-block وsrc الدلاليتان Mermaid وPlantUML وD2، لا OpenAPI، وتعملان داخل مشاريع Writerside فقط.", + "syntaxReferenceReferencedDiagramSource": "مصدر مخطط مُشار إليه", + "syntaxReferenceReferencedDiagramLimitation": "يجب أن تكون المسارات نسبية وأن تبقى داخل مشروع Writerside المفتوح؛ صيغة السياج مع src خاصة بـMarkdown في Writerside.", + "syntaxReferenceMathematicsDescription": "يدعم BusyMark تعبيرات TeX، وليس مستندات TeX أو LaTeX الكاملة.", + "syntaxReferenceInlineMath": "رياضيات مضمنة", + "syntaxReferenceGithubMath": "رياضيات GitHub بعلامة الدولار والفاصلة العليا المائلة", + "syntaxReferenceDisplayMath": "رياضيات معروضة", + "syntaxReferenceMathFence": "سياج math", + "syntaxReferenceTexFence": "سياج tex", + "syntaxReferenceMathDelimitersLimitation": "لا يتعرّف BusyMark على ⁨\\(...\\)⁩ أو ⁨\\[...\\]⁩ كمحددات رياضيات في Markdown.", + "syntaxReferenceTexFenceLimitation": "خارج وضع Writerside، يبقى سياج tex كتلة شيفرة عادية.", + "syntaxReferenceWritersideMathElement": "عنصر math في Writerside", + "syntaxReferenceWritersideMathElementLimitation": "عنصر math صيغة دلالية في Writerside، وليس HTML MathML خاماً مسموحاً به.", + "syntaxReferenceSemanticTexBlock": "كتلة شيفرة TeX دلالية", + "syntaxReferenceWritersideDescription": "لا تُفسَّر هذه الامتدادات المحددة إلا داخل مشاريع Writerside المفتوحة.", + "syntaxReferenceAdmonitionBlockquote": "اقتباس كتلي للتنبيه", + "syntaxReferenceAdmonitionLimitation": "يكون الاقتباس الكتلي العادي تلميحاً في Markdown ضمن Writerside؛ ويبقى اقتباساً عادياً في Markdown العادي.", + "syntaxReferenceSemanticAdmonitions": "تنبيهات دلالية", + "syntaxReferenceSemanticMarkupLimitation": "لا يفسر Markdown العادي عناصر Writerside الدلالية هذه.", + "syntaxReferenceCollapsibleHeading": "عنوان قابل للطي", + "syntaxReferenceCollapsibleCode": "سياج شيفرة قابل للطي", + "syntaxReferenceSemanticCollapsibles": "محتوى دلالي قابل للطي", + "syntaxReferenceSemanticCollapsiblesLimitation": "يدعم BusyMark صيغ chapter وprocedure وcode-block وقائمة التعريفات القابلة للطي، وليس فهرس Writerside كاملاً.", + "syntaxReferenceSemanticCodeBlocks": "كتل شيفرة دلالية للرياضيات والمخططات", + "syntaxReferenceVideo": "فيديو Writerside", + "syntaxReferenceVideoLimitation": "يستخدم الفيديو المحلي صورة preview-src محلية؛ ويجب أن تكون المصادر المستضافة عناوين HTTPS مدعومة من YouTube أو Vimeo.", "exportAsPdf": "تصدير بصيغة PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 8a1c498b..7155096f 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Markdown- und HTML-Referenz öffnen", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Syntaxreferenz öffnen", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "BusyMark-Einstellungen öffnen", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "Git-Netzwerkvorgang fehlgeschlagen.", "gitErrorConflict": "Git hat ungelöste Konflikte gemeldet.", "gitErrorCommandFailed": "Git-Befehl fehlgeschlagen.", - "markdownAndHtml": "Markdown und HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Syntaxreferenz", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown-Blöcke", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown-Blöcke", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Blockstrukturen, die in Markdown-Quelltext und Vorschau unterstützt werden.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Blockstrukturen, die in Markdown-Quelltext und Vorschau unterstützt werden.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Inline-Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Inline-Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Formatierung innerhalb von Absätzen, Listeneinträgen und Tabellenzellen.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Formatierung innerhalb von Absätzen, Listeneinträgen und Tabellenzellen.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Roh-HTML-Blöcke", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Roh-HTML-Blöcke", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Sichere HTML-Blocktags, die über BusyMark-Vorschauwidgets gerendert werden.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Sichere HTML-Blocktags, die über BusyMark-Vorschauwidgets gerendert werden.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Roh-HTML-Inline-Tags", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Roh-HTML-Inline-Tags", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Sichere Inline-HTML-Tags, die ohne sichtbare Tags gerendert werden.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Sichere Inline-HTML-Tags, die ohne sichtbare Tags gerendert werden.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Sicherheitsregeln", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Sicherheitsregeln", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Roh-HTML wird vor der Vorschau geparst und bereinigt.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Roh-HTML wird vor der Vorschau geparst und bereinigt.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Überschriften", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Überschriften", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Absätze", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Absätze", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Listen", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Listen", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Container", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Container", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Textblöcke", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Textblöcke", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Abbildungen und Bilder", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Abbildungen und Bilder", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Vorformatierter Code", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Vorformatierter Code", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Aufklappblöcke", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Aufklappblöcke", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Beschreibungslisten", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Beschreibungslisten", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Formatierungstags", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Formatierungstags", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Inline-Code-Tags", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Inline-Code-Tags", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Semantische Texttags", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Semantische Texttags", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Bereinigte Vorschau", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Bereinigte Vorschau", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Erlaubtes HTML wird in BusyMark-Vorschaublöcke umgewandelt, nicht im Browser gerendert.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Erlaubtes HTML wird in BusyMark-Vorschaublöcke umgewandelt, nicht im Browser gerendert.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Quelltext bleibt erhalten", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Quelltext bleibt erhalten", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Unverändertes Roh-HTML wird exakt als Quelltext gespeichert.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Unverändertes Roh-HTML wird exakt als Quelltext gespeichert.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown in HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown in HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-Zeichen innerhalb von Roh-HTML werden als normaler Text angezeigt.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Markdown-Zeichen innerhalb von Roh-HTML werden als normaler Text angezeigt.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Blockierte aktive Inhalte", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Blockierte aktive Inhalte", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Skripte, Styles, Frames, Formulare, SVG, MathML, Events und unsichere Attribute werden blockiert.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Skripte, Styles, Frames, Formulare, SVG, MathML, Events und unsichere Attribute werden blockiert.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Nur sichere URLs", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Nur sichere URLs", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Links erlauben http, https, mailto, tel, relative URLs und Fragmente; unsichere URL-Schemata werden blockiert.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Links erlauben http, https, mailto, tel, relative URLs und Fragmente; unsichere URL-Schemata werden blockiert.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Zu Git hinzufügen", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Kategorie", + "syntaxReferenceCategoryDiagramsAndApi": "Diagramme und API", + "syntaxReferenceCategoryMathematics": "Mathematik", + "syntaxReferenceExample": "Beispiel", + "syntaxReferenceIdentifiers": "Bezeichner und Aliase", + "syntaxReferenceScope": "Geltungsbereich", + "syntaxReferenceLimitation": "BusyMark-Einschränkung", + "syntaxReferenceOfficialDocumentation": "Offizielle Dokumentation", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Normales Markdown und Writerside-Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Nur Writerside-Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Nur Writerside-Markdown und Writerside-XML", + "syntaxReferenceMarkdownDescription": "Die grundlegenden Markdown-Formen, die BusyMark erstellen und in der Vorschau anzeigen kann.", + "syntaxReferenceParagraphExample": "Ein Textabsatz.", + "syntaxReferenceTableLimitation": "Tabellen verwenden die Pipe-Syntax von GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "zwei Leerzeichen am Zeilenende, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark akzeptiert eine gezielte sichere Teilmenge von Roh-HTML in Markdown-Quelltext.", + "syntaxReferenceDiagramsDescription": "Eingezäunte Mermaid-, PlantUML-, D2- und OpenAPI-Blöcke funktionieren in Markdown-Quelltext. Fence-Bezeichner unterscheiden nicht zwischen Groß- und Kleinschreibung; BusyMark bewahrt die ursprüngliche Schreibweise.", + "syntaxReferenceOpenApiLimitation": "Verwenden Sie eingezäunten YAML- oder JSON-Inhalt. BusyMark behandelt ein beliebiges vollständiges YAML- oder JSON-Dokument nicht als OpenAPI-Referenz.", + "syntaxReferenceSemanticDiagramBlocks": "Semantische Diagramm-Codeblöcke", + "syntaxReferenceSemanticDiagramLimitation": "Semantische code-block- und src-Formen unterstützen Mermaid, PlantUML und D2, nicht OpenAPI, und nur in Writerside-Projekten.", + "syntaxReferenceReferencedDiagramSource": "Referenzierte Diagrammquelle", + "syntaxReferenceReferencedDiagramLimitation": "Pfade müssen relativ sein und im geöffneten Writerside-Projekt bleiben; die Kombination aus Fence und src gilt nur für Writerside-Markdown.", + "syntaxReferenceMathematicsDescription": "BusyMark unterstützt TeX-Ausdrücke, keine vollständigen TeX- oder LaTeX-Dokumente.", + "syntaxReferenceInlineMath": "Mathematik im Text", + "syntaxReferenceGithubMath": "GitHub-Mathematik mit Dollarzeichen und Backticks", + "syntaxReferenceDisplayMath": "Mathematische Formel als Block", + "syntaxReferenceMathFence": "math-Fence", + "syntaxReferenceTexFence": "tex-Fence", + "syntaxReferenceMathDelimitersLimitation": "BusyMark erkennt \\(...\\) und \\[...\\] nicht als Markdown-Mathematikbegrenzer.", + "syntaxReferenceTexFenceLimitation": "Außerhalb des Writerside-Modus bleibt ein tex-Fence ein gewöhnlicher Codeblock.", + "syntaxReferenceWritersideMathElement": "Writerside-math-Element", + "syntaxReferenceWritersideMathElementLimitation": "Das math-Element ist semantische Writerside-Syntax und kein zulässiges rohes HTML-MathML.", + "syntaxReferenceSemanticTexBlock": "Semantischer TeX-Codeblock", + "syntaxReferenceWritersideDescription": "Diese gezielten Erweiterungen werden nur in geöffneten Writerside-Projekten interpretiert.", + "syntaxReferenceAdmonitionBlockquote": "Hinweis-Blockzitat", + "syntaxReferenceAdmonitionLimitation": "Ein einfaches Blockzitat ist in Writerside-Markdown ein Tipp; in normalem Markdown bleibt es ein gewöhnliches Zitat.", + "syntaxReferenceSemanticAdmonitions": "Semantische Hinweise", + "syntaxReferenceSemanticMarkupLimitation": "Normales Markdown interpretiert diese semantischen Writerside-Elemente nicht.", + "syntaxReferenceCollapsibleHeading": "Einklappbare Überschrift", + "syntaxReferenceCollapsibleCode": "Einklappbarer Code-Fence", + "syntaxReferenceSemanticCollapsibles": "Semantische einklappbare Inhalte", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark unterstützt einklappbare Kapitel-, Prozedur-, code-block- und Definitionslistenformen, nicht den vollständigen Writerside-Katalog.", + "syntaxReferenceSemanticCodeBlocks": "Semantische Codeblöcke für Mathematik und Diagramme", + "syntaxReferenceVideo": "Writerside-Video", + "syntaxReferenceVideoLimitation": "Lokale Videos verwenden ein lokales preview-src-Bild; gehostete Videoquellen müssen unterstützte HTTPS-URLs von YouTube oder Vimeo sein.", "exportAsPdf": "Als PDF exportieren", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index e1e55cfe..0c40ba92 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -288,8 +288,8 @@ "@shortcutSearchDescription": {"description": "Keyboard shortcut description for search."}, "shortcutKeyboardShortcutsDescription": "Show this keyboard shortcut reference", "@shortcutKeyboardShortcutsDescription": {"description": "Keyboard shortcut description for opening shortcuts."}, - "shortcutMarkdownAndHtmlDescription": "Open the Markdown and HTML reference", - "@shortcutMarkdownAndHtmlDescription": {"description": "Keyboard shortcut description for opening the Markdown and HTML reference."}, + "shortcutSyntaxReferenceDescription": "Open the Syntax Reference", + "@shortcutSyntaxReferenceDescription": {"description": "Keyboard shortcut description for opening the Syntax Reference."}, "shortcutSettingsDescription": "Open BusyMark settings", "@shortcutSettingsDescription": {"description": "Keyboard shortcut description for opening settings."}, "shortcutNextTab": "Next tab", @@ -1775,72 +1775,172 @@ "gitErrorCommandFailed": "Git command failed.", "@gitErrorCommandFailed": {"description": "Git error message."}, - "markdownAndHtml": "Markdown and HTML", - "@markdownAndHtml": {"description": "Markdown and HTML reference dialog title and menu item."}, - "markdownHtmlMarkdownBlocks": "Markdown Blocks", - "@markdownHtmlMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, - "markdownHtmlMarkdownBlocksDescription": "Block structures supported in Markdown source and preview.", - "@markdownHtmlMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, - "markdownHtmlInlineFormatting": "Inline Markdown", - "@markdownHtmlInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, - "markdownHtmlInlineFormattingDescription": "Formatting that can appear inside paragraphs, list items, and table cells.", - "@markdownHtmlInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, - "markdownHtmlRawHtmlBlocks": "Raw HTML Blocks", - "@markdownHtmlRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, - "markdownHtmlRawHtmlBlocksDescription": "Safe block-level HTML tags rendered through BusyMark preview widgets.", - "@markdownHtmlRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, - "markdownHtmlRawHtmlInline": "Raw HTML Inline Tags", - "@markdownHtmlRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, - "markdownHtmlRawHtmlInlineDescription": "Safe inline HTML tags rendered without showing literal tags.", - "@markdownHtmlRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, - "markdownHtmlSafety": "Safety Rules", - "@markdownHtmlSafety": {"description": "Reference section title for raw HTML safety rules."}, - "markdownHtmlSafetyDescription": "Raw HTML is parsed and sanitized before preview rendering.", - "@markdownHtmlSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, - "markdownHtmlHeadings": "Headings", - "@markdownHtmlHeadings": {"description": "Reference row label for Markdown headings."}, - "markdownHtmlParagraphs": "Paragraphs", - "@markdownHtmlParagraphs": {"description": "Reference row label for Markdown paragraphs."}, - "markdownHtmlLists": "Lists", - "@markdownHtmlLists": {"description": "Reference row label for list syntax."}, - "markdownHtmlHtmlContainers": "Containers", - "@markdownHtmlHtmlContainers": {"description": "Reference row label for HTML container tags."}, - "markdownHtmlHtmlTextBlocks": "Text blocks", - "@markdownHtmlHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, - "markdownHtmlHtmlFigures": "Figures and images", - "@markdownHtmlHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, - "markdownHtmlHtmlPreformatted": "Preformatted code", - "@markdownHtmlHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, - "markdownHtmlHtmlDisclosure": "Disclosure blocks", - "@markdownHtmlHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, - "markdownHtmlHtmlDescriptionLists": "Description lists", - "@markdownHtmlHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, - "markdownHtmlHtmlFormattingTags": "Formatting tags", - "@markdownHtmlHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, - "markdownHtmlHtmlInlineCodeTags": "Inline code tags", - "@markdownHtmlHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, - "markdownHtmlHtmlNeutralInlineTags": "Semantic text tags", - "@markdownHtmlHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, - "markdownHtmlSanitizedPreview": "Sanitized preview", - "@markdownHtmlSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, - "markdownHtmlSanitizedPreviewDescription": "Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.", - "@markdownHtmlSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, - "markdownHtmlSourcePreserved": "Source is preserved", - "@markdownHtmlSourcePreserved": {"description": "Reference row label for raw source preservation."}, - "markdownHtmlSourcePreservedDescription": "Unedited raw HTML is saved back exactly as source text.", - "@markdownHtmlSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, - "markdownHtmlMarkdownInsideHtml": "Markdown inside HTML", - "@markdownHtmlMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, - "markdownHtmlMarkdownInsideHtmlDescription": "Markdown markers inside raw HTML render as literal text.", - "@markdownHtmlMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, - "markdownHtmlBlockedContent": "Blocked active content", - "@markdownHtmlBlockedContent": {"description": "Reference row label for blocked HTML content."}, - "markdownHtmlBlockedContentDescription": "Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.", - "@markdownHtmlBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, - "markdownHtmlSafeUrls": "Safe URLs only", - "@markdownHtmlSafeUrls": {"description": "Reference row label for safe URL policy."}, - "markdownHtmlSafeUrlsDescription": "Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.", - "@markdownHtmlSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "syntaxReference": "Syntax Reference", + "@syntaxReference": {"description": "Syntax Reference dialog title and menu item."}, + "syntaxReferenceMarkdownBlocks": "Markdown Blocks", + "@syntaxReferenceMarkdownBlocks": {"description": "Reference section title for Markdown block syntax."}, + "syntaxReferenceMarkdownBlocksDescription": "Block structures supported in Markdown source and preview.", + "@syntaxReferenceMarkdownBlocksDescription": {"description": "Reference section description for Markdown block syntax."}, + "syntaxReferenceInlineFormatting": "Inline Markdown", + "@syntaxReferenceInlineFormatting": {"description": "Reference section title for Markdown inline syntax."}, + "syntaxReferenceInlineFormattingDescription": "Formatting that can appear inside paragraphs, list items, and table cells.", + "@syntaxReferenceInlineFormattingDescription": {"description": "Reference section description for Markdown inline syntax."}, + "syntaxReferenceRawHtmlBlocks": "Raw HTML Blocks", + "@syntaxReferenceRawHtmlBlocks": {"description": "Reference section title for supported raw HTML block tags."}, + "syntaxReferenceRawHtmlBlocksDescription": "Safe block-level HTML tags rendered through BusyMark preview widgets.", + "@syntaxReferenceRawHtmlBlocksDescription": {"description": "Reference section description for supported raw HTML block tags."}, + "syntaxReferenceRawHtmlInline": "Raw HTML Inline Tags", + "@syntaxReferenceRawHtmlInline": {"description": "Reference section title for supported raw HTML inline tags."}, + "syntaxReferenceRawHtmlInlineDescription": "Safe inline HTML tags rendered without showing literal tags.", + "@syntaxReferenceRawHtmlInlineDescription": {"description": "Reference section description for supported raw HTML inline tags."}, + "syntaxReferenceSafety": "Safety Rules", + "@syntaxReferenceSafety": {"description": "Reference section title for raw HTML safety rules."}, + "syntaxReferenceSafetyDescription": "Raw HTML is parsed and sanitized before preview rendering.", + "@syntaxReferenceSafetyDescription": {"description": "Reference section description for raw HTML safety rules."}, + "syntaxReferenceHeadings": "Headings", + "@syntaxReferenceHeadings": {"description": "Reference row label for Markdown headings."}, + "syntaxReferenceParagraphs": "Paragraphs", + "@syntaxReferenceParagraphs": {"description": "Reference row label for Markdown paragraphs."}, + "syntaxReferenceLists": "Lists", + "@syntaxReferenceLists": {"description": "Reference row label for list syntax."}, + "syntaxReferenceHtmlContainers": "Containers", + "@syntaxReferenceHtmlContainers": {"description": "Reference row label for HTML container tags."}, + "syntaxReferenceHtmlTextBlocks": "Text blocks", + "@syntaxReferenceHtmlTextBlocks": {"description": "Reference row label for HTML text block tags."}, + "syntaxReferenceHtmlFigures": "Figures and images", + "@syntaxReferenceHtmlFigures": {"description": "Reference row label for HTML figure and image tags."}, + "syntaxReferenceHtmlPreformatted": "Preformatted code", + "@syntaxReferenceHtmlPreformatted": {"description": "Reference row label for HTML preformatted/code tags."}, + "syntaxReferenceHtmlDisclosure": "Disclosure blocks", + "@syntaxReferenceHtmlDisclosure": {"description": "Reference row label for HTML details/summary tags."}, + "syntaxReferenceHtmlDescriptionLists": "Description lists", + "@syntaxReferenceHtmlDescriptionLists": {"description": "Reference row label for HTML description list tags."}, + "syntaxReferenceHtmlFormattingTags": "Formatting tags", + "@syntaxReferenceHtmlFormattingTags": {"description": "Reference row label for HTML inline formatting tags."}, + "syntaxReferenceHtmlInlineCodeTags": "Inline code tags", + "@syntaxReferenceHtmlInlineCodeTags": {"description": "Reference row label for HTML inline code-related tags."}, + "syntaxReferenceHtmlNeutralInlineTags": "Semantic text tags", + "@syntaxReferenceHtmlNeutralInlineTags": {"description": "Reference row label for HTML inline semantic tags that render as text."}, + "syntaxReferenceSanitizedPreview": "Sanitized preview", + "@syntaxReferenceSanitizedPreview": {"description": "Reference row label for sanitized preview behavior."}, + "syntaxReferenceSanitizedPreviewDescription": "Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.", + "@syntaxReferenceSanitizedPreviewDescription": {"description": "Reference row description for sanitized preview behavior."}, + "syntaxReferenceSourcePreserved": "Source is preserved", + "@syntaxReferenceSourcePreserved": {"description": "Reference row label for raw source preservation."}, + "syntaxReferenceSourcePreservedDescription": "Unedited raw HTML is saved back exactly as source text.", + "@syntaxReferenceSourcePreservedDescription": {"description": "Reference row description for raw source preservation."}, + "syntaxReferenceMarkdownInsideHtml": "Markdown inside HTML", + "@syntaxReferenceMarkdownInsideHtml": {"description": "Reference row label for Markdown inside raw HTML."}, + "syntaxReferenceMarkdownInsideHtmlDescription": "Markdown markers inside raw HTML render as literal text.", + "@syntaxReferenceMarkdownInsideHtmlDescription": {"description": "Reference row description for Markdown inside raw HTML."}, + "syntaxReferenceBlockedContent": "Blocked active content", + "@syntaxReferenceBlockedContent": {"description": "Reference row label for blocked HTML content."}, + "syntaxReferenceBlockedContentDescription": "Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.", + "@syntaxReferenceBlockedContentDescription": {"description": "Reference row description for blocked HTML content."}, + "syntaxReferenceSafeUrls": "Safe URLs only", + "@syntaxReferenceSafeUrls": {"description": "Reference row label for safe URL policy."}, + "syntaxReferenceSafeUrlsDescription": "Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.", + "@syntaxReferenceSafeUrlsDescription": {"description": "Reference row description for safe URL policy."}, + "syntaxReferenceCategory": "Category", + "@syntaxReferenceCategory": {"description": "Label for the Syntax Reference category selector."}, + "syntaxReferenceCategoryHtml": "HTML", + "@syntaxReferenceCategoryHtml": {"description": "HTML category in the Syntax Reference."}, + "syntaxReferenceCategoryDiagramsAndApi": "Diagrams and API", + "@syntaxReferenceCategoryDiagramsAndApi": {"description": "Diagrams and API category in the Syntax Reference."}, + "syntaxReferenceCategoryMathematics": "Mathematics", + "@syntaxReferenceCategoryMathematics": {"description": "Mathematics category in the Syntax Reference."}, + "syntaxReferenceExample": "Example", + "@syntaxReferenceExample": {"description": "Label for a syntax example."}, + "syntaxReferenceIdentifiers": "Identifiers and aliases", + "@syntaxReferenceIdentifiers": {"description": "Label for accepted syntax identifiers and aliases."}, + "syntaxReferenceScope": "Scope", + "@syntaxReferenceScope": {"description": "Label for the document types where syntax is recognized."}, + "syntaxReferenceLimitation": "BusyMark limitation", + "@syntaxReferenceLimitation": {"description": "Label for a concise BusyMark-specific syntax limitation."}, + "syntaxReferenceOfficialDocumentation": "Official documentation", + "@syntaxReferenceOfficialDocumentation": {"description": "Action that opens official external documentation."}, + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Ordinary Markdown and Writerside Markdown", + "@syntaxReferenceScopeMarkdownAndWritersideMarkdown": {"description": "Scope label for syntax recognized in ordinary and Writerside Markdown."}, + "syntaxReferenceScopeWritersideMarkdown": "Writerside Markdown only", + "@syntaxReferenceScopeWritersideMarkdown": {"description": "Scope label for syntax recognized only in Writerside Markdown."}, + "syntaxReferenceScopeWritersideMarkdownAndXml": "Writerside Markdown and Writerside XML only", + "@syntaxReferenceScopeWritersideMarkdownAndXml": {"description": "Scope label for syntax recognized in Writerside Markdown and XML topics."}, + "syntaxReferenceMarkdownDescription": "The core Markdown forms BusyMark can author and preview.", + "@syntaxReferenceMarkdownDescription": {"description": "Introduction to the Markdown syntax category."}, + "syntaxReferenceParagraphExample": "A paragraph of text.", + "@syntaxReferenceParagraphExample": {"description": "Short localized paragraph used as a Markdown syntax example."}, + "syntaxReferenceTableLimitation": "Tables use GitHub Flavored Markdown pipe syntax.", + "@syntaxReferenceTableLimitation": {"description": "BusyMark limitation for Markdown table syntax."}, + "syntaxReferenceHardBreakIdentifiers": "two trailing spaces, \\,
    ", + "@syntaxReferenceHardBreakIdentifiers": {"description": "Accepted hard-line-break forms. Keep the backslash and HTML tag exact."}, + "syntaxReferenceHtmlDescription": "BusyMark accepts a focused safe subset of raw HTML in Markdown source.", + "@syntaxReferenceHtmlDescription": {"description": "Introduction to the HTML syntax category."}, + "syntaxReferenceDiagramsDescription": "Fenced Mermaid, PlantUML, D2, and OpenAPI work in Markdown source. Fence identifiers are case-insensitive, and BusyMark preserves their original spelling.", + "@syntaxReferenceDiagramsDescription": {"description": "Introduction and fence behavior for diagrams and OpenAPI."}, + "syntaxReferenceMermaid": "Mermaid", + "@syntaxReferenceMermaid": {"description": "Mermaid feature title. Keep the product name exact."}, + "syntaxReferencePlantUml": "PlantUML", + "@syntaxReferencePlantUml": {"description": "PlantUML feature title. Keep the product name exact."}, + "syntaxReferenceD2": "D2", + "@syntaxReferenceD2": {"description": "D2 feature title. Keep the product name exact."}, + "syntaxReferenceOpenApi": "OpenAPI", + "@syntaxReferenceOpenApi": {"description": "OpenAPI feature title. Keep the product name exact."}, + "syntaxReferenceOpenApiLimitation": "Use fenced YAML or JSON content. BusyMark does not treat an arbitrary whole-file YAML or JSON document as an OpenAPI reference.", + "@syntaxReferenceOpenApiLimitation": {"description": "BusyMark limitation for OpenAPI source recognition."}, + "syntaxReferenceSemanticDiagramBlocks": "Semantic diagram code blocks", + "@syntaxReferenceSemanticDiagramBlocks": {"description": "Feature title for Writerside semantic diagram code blocks."}, + "syntaxReferenceSemanticDiagramLimitation": "Semantic code-block and src forms support Mermaid, PlantUML, and D2, not OpenAPI, and only inside Writerside projects.", + "@syntaxReferenceSemanticDiagramLimitation": {"description": "BusyMark boundary for Writerside semantic diagram code blocks."}, + "syntaxReferenceReferencedDiagramSource": "Referenced diagram source", + "@syntaxReferenceReferencedDiagramSource": {"description": "Feature title for Writerside referenced diagram files."}, + "syntaxReferenceReferencedDiagramLimitation": "Paths must be relative and remain inside the opened Writerside project; the fence-plus-src form is Writerside Markdown only.", + "@syntaxReferenceReferencedDiagramLimitation": {"description": "BusyMark boundary for Writerside referenced diagram paths."}, + "syntaxReferenceMathematicsDescription": "BusyMark supports TeX expressions, not complete TeX or LaTeX documents.", + "@syntaxReferenceMathematicsDescription": {"description": "Introduction to the mathematics syntax category."}, + "syntaxReferenceInlineMath": "Inline math", + "@syntaxReferenceInlineMath": {"description": "Feature title for inline dollar-delimited math."}, + "syntaxReferenceGithubMath": "GitHub dollar/backtick math", + "@syntaxReferenceGithubMath": {"description": "Feature title for GitHub dollar/backtick math syntax."}, + "syntaxReferenceDisplayMath": "Display math", + "@syntaxReferenceDisplayMath": {"description": "Feature title for double-dollar display math."}, + "syntaxReferenceMathFence": "math fence", + "@syntaxReferenceMathFence": {"description": "Feature title for a fenced code block identified by math. Keep math exact."}, + "syntaxReferenceTexFence": "tex fence", + "@syntaxReferenceTexFence": {"description": "Feature title for a Writerside fenced code block identified by tex. Keep tex exact."}, + "syntaxReferenceMathDelimitersLimitation": "BusyMark does not recognize \\(...\\) or \\[...\\] as Markdown math delimiters.", + "@syntaxReferenceMathDelimitersLimitation": {"description": "BusyMark boundary for unsupported Markdown math delimiters. Keep delimiter tokens exact."}, + "syntaxReferenceTexFenceLimitation": "Outside Writerside mode, a tex fence remains an ordinary code block.", + "@syntaxReferenceTexFenceLimitation": {"description": "BusyMark boundary for tex fences outside Writerside."}, + "syntaxReferenceWritersideMathElement": "Writerside math element", + "@syntaxReferenceWritersideMathElement": {"description": "Feature title for the Writerside math semantic element."}, + "syntaxReferenceWritersideMathElementLimitation": "The math element is semantic Writerside syntax, not permitted raw HTML MathML.", + "@syntaxReferenceWritersideMathElementLimitation": {"description": "Clarifies that Writerside math is not raw HTML MathML."}, + "syntaxReferenceSemanticTexBlock": "Semantic TeX code block", + "@syntaxReferenceSemanticTexBlock": {"description": "Feature title for semantic Writerside TeX code blocks."}, + "syntaxReferenceWritersideDescription": "These focused extensions are interpreted only inside opened Writerside projects.", + "@syntaxReferenceWritersideDescription": {"description": "Introduction to the Writerside syntax category."}, + "syntaxReferenceAdmonitionBlockquote": "Admonition blockquote", + "@syntaxReferenceAdmonitionBlockquote": {"description": "Feature title for Writerside blockquote admonitions."}, + "syntaxReferenceAdmonitionLimitation": "A plain blockquote is a tip in Writerside Markdown; it remains an ordinary quote in ordinary Markdown.", + "@syntaxReferenceAdmonitionLimitation": {"description": "BusyMark boundary for Writerside blockquote admonitions."}, + "syntaxReferenceSemanticAdmonitions": "Semantic admonitions", + "@syntaxReferenceSemanticAdmonitions": {"description": "Feature title for Writerside semantic admonition elements."}, + "syntaxReferenceSemanticMarkupLimitation": "Ordinary Markdown does not interpret these Writerside semantic elements.", + "@syntaxReferenceSemanticMarkupLimitation": {"description": "BusyMark boundary for Writerside-only semantic markup."}, + "syntaxReferenceCollapsibleHeading": "Collapsible heading", + "@syntaxReferenceCollapsibleHeading": {"description": "Feature title for a collapsible Writerside Markdown heading."}, + "syntaxReferenceCollapsibleCode": "Collapsible code fence", + "@syntaxReferenceCollapsibleCode": {"description": "Feature title for a collapsible Writerside Markdown code fence."}, + "syntaxReferenceSemanticCollapsibles": "Semantic collapsible content", + "@syntaxReferenceSemanticCollapsibles": {"description": "Feature title for supported semantic Writerside collapsible forms."}, + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark supports collapsible chapter, procedure, code-block, and definition-list forms, not the full Writerside catalog.", + "@syntaxReferenceSemanticCollapsiblesLimitation": {"description": "Focused BusyMark boundary for semantic collapsible forms."}, + "syntaxReferenceSemanticCodeBlocks": "Semantic code blocks for math and diagrams", + "@syntaxReferenceSemanticCodeBlocks": {"description": "Feature title for Writerside semantic math and diagram code blocks."}, + "syntaxReferenceVideo": "Writerside video", + "@syntaxReferenceVideo": {"description": "Feature title for Writerside semantic video elements."}, + "syntaxReferenceVideoLimitation": "Local video uses a local preview-src image; hosted video sources must be supported HTTPS YouTube or Vimeo URLs.", + "@syntaxReferenceVideoLimitation": {"description": "BusyMark boundary for Writerside local and hosted video sources."}, "exportAsPdf": "Export as PDF", "@exportAsPdf": {"description": "Menu action and dialog title for exporting the active document or Writerside module as PDF."}, "pdfExportDescription": "Choose the page layout for a polished, self-contained PDF.", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index a0f1469a..d5b1b1a4 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Abrir la referencia de Markdown y HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Abrir la referencia de sintaxis", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Abrir la configuración de BusyMark", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "La operación de red de Git ha fallado.", "gitErrorConflict": "Git ha informado de conflictos sin resolver.", "gitErrorCommandFailed": "El comando de Git ha fallado.", - "markdownAndHtml": "Markdown y HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Referencia de sintaxis", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Bloques Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Bloques Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Estructuras de bloque admitidas en el código Markdown y la vista previa.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Estructuras de bloque admitidas en el código Markdown y la vista previa.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown en línea", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown en línea", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Formato dentro de párrafos, elementos de lista y celdas de tabla.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Formato dentro de párrafos, elementos de lista y celdas de tabla.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Bloques HTML sin procesar", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Bloques HTML sin procesar", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Etiquetas HTML de bloque seguras renderizadas con widgets de vista previa de BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Etiquetas HTML de bloque seguras renderizadas con widgets de vista previa de BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Etiquetas HTML sin procesar en línea", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Etiquetas HTML sin procesar en línea", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Etiquetas HTML en línea seguras renderizadas sin mostrar las etiquetas literales.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Etiquetas HTML en línea seguras renderizadas sin mostrar las etiquetas literales.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Reglas de seguridad", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Reglas de seguridad", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "El HTML sin procesar se analiza y sanea antes de la vista previa.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "El HTML sin procesar se analiza y sanea antes de la vista previa.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Encabezados", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Encabezados", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Párrafos", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Párrafos", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Listas", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Listas", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Contenedores", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Contenedores", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Bloques de texto", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Bloques de texto", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figuras e imágenes", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figuras e imágenes", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Código preformateado", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Código preformateado", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Bloques desplegables", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Bloques desplegables", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Listas de descripción", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Listas de descripción", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Etiquetas de formato", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Etiquetas de formato", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Etiquetas de código en línea", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Etiquetas de código en línea", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Etiquetas semánticas de texto", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Etiquetas semánticas de texto", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Vista previa saneada", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Vista previa saneada", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "El HTML permitido se convierte en bloques de vista previa de BusyMark, no se renderiza en un navegador.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "El HTML permitido se convierte en bloques de vista previa de BusyMark, no se renderiza en un navegador.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Se conserva el código fuente", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Se conserva el código fuente", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "El HTML sin procesar no editado se guarda exactamente como texto fuente.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "El HTML sin procesar no editado se guarda exactamente como texto fuente.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown dentro de HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown dentro de HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Los marcadores Markdown dentro de HTML sin procesar se muestran como texto literal.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Los marcadores Markdown dentro de HTML sin procesar se muestran como texto literal.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Contenido activo bloqueado", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Contenido activo bloqueado", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Se bloquean scripts, estilos, marcos, formularios, SVG, MathML, eventos y atributos inseguros.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Se bloquean scripts, estilos, marcos, formularios, SVG, MathML, eventos y atributos inseguros.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Solo URLs seguras", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Solo URLs seguras", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Los enlaces permiten http, https, mailto, tel, URLs relativas y fragmentos; los esquemas inseguros se bloquean.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Los enlaces permiten http, https, mailto, tel, URLs relativas y fragmentos; los esquemas inseguros se bloquean.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Agregar a Git", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Categoría", + "syntaxReferenceCategoryDiagramsAndApi": "Diagramas y API", + "syntaxReferenceCategoryMathematics": "Matemáticas", + "syntaxReferenceExample": "Ejemplo", + "syntaxReferenceIdentifiers": "Identificadores y alias", + "syntaxReferenceScope": "Ámbito", + "syntaxReferenceLimitation": "Limitación de BusyMark", + "syntaxReferenceOfficialDocumentation": "Documentación oficial", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown común y Markdown de Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Solo Markdown de Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Solo Markdown y XML de Writerside", + "syntaxReferenceMarkdownDescription": "Las formas esenciales de Markdown que BusyMark puede crear y previsualizar.", + "syntaxReferenceParagraphExample": "Un párrafo de texto.", + "syntaxReferenceTableLimitation": "Las tablas usan la sintaxis con barras verticales de GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "dos espacios al final de la línea, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark acepta un subconjunto seguro y específico de HTML sin procesar en el código Markdown.", + "syntaxReferenceDiagramsDescription": "Los bloques delimitados Mermaid, PlantUML, D2 y OpenAPI funcionan en código Markdown. Los identificadores no distinguen mayúsculas de minúsculas y BusyMark conserva la grafía original.", + "syntaxReferenceOpenApiLimitation": "Use contenido YAML o JSON dentro de un bloque delimitado. BusyMark no trata cualquier documento YAML o JSON completo como referencia OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Bloques de código semánticos para diagramas", + "syntaxReferenceSemanticDiagramLimitation": "Las formas semánticas code-block y src admiten Mermaid, PlantUML y D2, no OpenAPI, y solo dentro de proyectos Writerside.", + "syntaxReferenceReferencedDiagramSource": "Origen de diagrama referenciado", + "syntaxReferenceReferencedDiagramLimitation": "Las rutas deben ser relativas y permanecer dentro del proyecto Writerside abierto; la forma de bloque delimitado con src solo funciona en Markdown de Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark admite expresiones TeX, no documentos TeX o LaTeX completos.", + "syntaxReferenceInlineMath": "Matemáticas en línea", + "syntaxReferenceGithubMath": "Matemáticas de GitHub con dólar y acento grave", + "syntaxReferenceDisplayMath": "Matemáticas en bloque", + "syntaxReferenceMathFence": "Bloque delimitado math", + "syntaxReferenceTexFence": "Bloque delimitado tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark no reconoce \\(...\\) ni \\[...\\] como delimitadores matemáticos de Markdown.", + "syntaxReferenceTexFenceLimitation": "Fuera del modo Writerside, un bloque tex sigue siendo un bloque de código común.", + "syntaxReferenceWritersideMathElement": "Elemento math de Writerside", + "syntaxReferenceWritersideMathElementLimitation": "El elemento math es sintaxis semántica de Writerside, no MathML HTML sin procesar permitido.", + "syntaxReferenceSemanticTexBlock": "Bloque de código TeX semántico", + "syntaxReferenceWritersideDescription": "Estas extensiones específicas solo se interpretan dentro de proyectos Writerside abiertos.", + "syntaxReferenceAdmonitionBlockquote": "Cita de aviso", + "syntaxReferenceAdmonitionLimitation": "Una cita simple es un consejo en Markdown de Writerside; en Markdown común sigue siendo una cita normal.", + "syntaxReferenceSemanticAdmonitions": "Avisos semánticos", + "syntaxReferenceSemanticMarkupLimitation": "Markdown común no interpreta estos elementos semánticos de Writerside.", + "syntaxReferenceCollapsibleHeading": "Encabezado plegable", + "syntaxReferenceCollapsibleCode": "Bloque de código plegable", + "syntaxReferenceSemanticCollapsibles": "Contenido semántico plegable", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark admite las formas plegables chapter, procedure, code-block y lista de definiciones, no todo el catálogo de Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Bloques de código semánticos para matemáticas y diagramas", + "syntaxReferenceVideo": "Vídeo de Writerside", + "syntaxReferenceVideoLimitation": "El vídeo local usa una imagen preview-src local; las fuentes alojadas deben ser URL HTTPS compatibles de YouTube o Vimeo.", "exportAsPdf": "Exportar como PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_et.arb b/lib/l10n/app_et.arb index 6ecdf58b..21318e51 100644 --- a/lib/l10n/app_et.arb +++ b/lib/l10n/app_et.arb @@ -528,9 +528,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Ava Markdowni ja HTML-i teatmik", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Ava süntaksiviide", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Ava BusyMarki sätted", "@shortcutSettingsDescription": { @@ -3014,138 +3014,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown ja HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Süntaksiviide", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdowni plokid", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdowni plokid", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Markdowni lähtekoodis ja eelvaates toetatud plokkstruktuurid.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Markdowni lähtekoodis ja eelvaates toetatud plokkstruktuurid.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Reasisene Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Reasisene Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Vormindus, mida saab kasutada lõikudes, loendiüksustes ja tabelilahtrites.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Vormindus, mida saab kasutada lõikudes, loendiüksustes ja tabelilahtrites.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Töötlemata HTML-plokid", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Töötlemata HTML-plokid", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Turvalised plokitaseme HTML-märgendid, mis kuvatakse BusyMarki eelvaatevidinate kaudu.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Turvalised plokitaseme HTML-märgendid, mis kuvatakse BusyMarki eelvaatevidinate kaudu.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Reasisesed töötlemata HTML-märgendid", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Reasisesed töötlemata HTML-märgendid", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Turvalised reasisesed HTML-märgendid, mis kuvatakse märgendeid endid näitamata.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Turvalised reasisesed HTML-märgendid, mis kuvatakse märgendeid endid näitamata.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Ohutusreeglid", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Ohutusreeglid", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Töötlemata HTML parsitakse ja puhastatakse enne eelvaates kuvamist.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Töötlemata HTML parsitakse ja puhastatakse enne eelvaates kuvamist.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Pealkirjad", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Pealkirjad", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Lõigud", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Lõigud", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Loendid", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Loendid", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Konteinerid", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Konteinerid", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Tekstiplokid", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Tekstiplokid", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Joonised ja pildid", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Joonised ja pildid", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Eelvormindatud kood", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Eelvormindatud kood", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Laiendatavad plokid", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Laiendatavad plokid", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Kirjeldusloendid", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Kirjeldusloendid", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Vormindusmärgendid", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Vormindusmärgendid", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Reasisesed koodimärgendid", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Reasisesed koodimärgendid", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Semantilised tekstimärgendid", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Semantilised tekstimärgendid", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Puhastatud eelvaade", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Puhastatud eelvaade", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Lubatud HTML teisendatakse BusyMarki eelvaateplokkideks; seda ei kuvata brauseris.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Lubatud HTML teisendatakse BusyMarki eelvaateplokkideks; seda ei kuvata brauseris.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Lähtekood säilitatakse", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Lähtekood säilitatakse", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Redigeerimata töötlemata HTML salvestatakse lähdetekstina täpselt algsel kujul.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Redigeerimata töötlemata HTML salvestatakse lähdetekstina täpselt algsel kujul.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown HTML-is", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown HTML-is", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Töötlemata HTML-is olevad Markdowni vormindusmärgid kuvatakse lihttekstina.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Töötlemata HTML-is olevad Markdowni vormindusmärgid kuvatakse lihttekstina.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Blokeeritud aktiivsisu", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Blokeeritud aktiivsisu", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Skriptid, stiilid, raamid, vormid, SVG, MathML, sündmused ja ebaturvalised atribuudid blokeeritakse.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Skriptid, stiilid, raamid, vormid, SVG, MathML, sündmused ja ebaturvalised atribuudid blokeeritakse.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Ainult turvalised URL-id", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Ainult turvalised URL-id", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Linkides on lubatud HTTP-, HTTPS-, mailto- ja tel-skeemiga URL-id ning suhtelised ja fragmendi-URL-id; ebaturvalised skeemid blokeeritakse.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Linkides on lubatud HTTP-, HTTPS-, mailto- ja tel-skeemiga URL-id ning suhtelised ja fragmendi-URL-id; ebaturvalised skeemid blokeeritakse.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Kategooria", + "syntaxReferenceCategoryDiagramsAndApi": "Diagrammid ja API", + "syntaxReferenceCategoryMathematics": "Matemaatika", + "syntaxReferenceExample": "Näide", + "syntaxReferenceIdentifiers": "Identifikaatorid ja aliased", + "syntaxReferenceScope": "Ulatus", + "syntaxReferenceLimitation": "BusyMarki piirang", + "syntaxReferenceOfficialDocumentation": "Ametlik dokumentatsioon", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Tavaline Markdown ja Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Ainult Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Ainult Writerside Markdown ja Writerside XML", + "syntaxReferenceMarkdownDescription": "Põhilised Markdowni vormid, mida BusyMark võimaldab kirjutada ja eelvaadata.", + "syntaxReferenceParagraphExample": "Tekstilõik.", + "syntaxReferenceTableLimitation": "Tabelid kasutavad GitHub Flavored Markdowni püstkriipsusüntaksit.", + "syntaxReferenceHardBreakIdentifiers": "kaks tühikut rea lõpus, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark aktsepteerib Markdowni lähtekoodis piiratud turvalist toor-HTML-i alamhulka.", + "syntaxReferenceDiagramsDescription": "Piiratud Mermaid-, PlantUML-, D2- ja OpenAPI-plokid töötavad Markdowni lähtekoodis. Plokiidentifikaatorid ei ole tõstutundlikud ja BusyMark säilitab algse kirjapildi.", + "syntaxReferenceOpenApiLimitation": "Kasuta piiratud YAML- või JSON-sisu. BusyMark ei käsitle suvalist terviklikku YAML- või JSON-dokumenti OpenAPI viitena.", + "syntaxReferenceSemanticDiagramBlocks": "Semantilised diagrammi koodiplokid", + "syntaxReferenceSemanticDiagramLimitation": "Semantilised code-block- ja src-vormid toetavad Mermaidi, PlantUML-i ja D2-te, mitte OpenAPI-t, ning ainult Writerside'i projektides.", + "syntaxReferenceReferencedDiagramSource": "Viidatud diagrammiallikas", + "syntaxReferenceReferencedDiagramLimitation": "Teed peavad olema suhtelised ja jääma avatud Writerside'i projekti sisse; piiratud vorm koos src-ga on ainult Writerside Markdowni jaoks.", + "syntaxReferenceMathematicsDescription": "BusyMark toetab TeX-i avaldisi, mitte terviklikke TeX-i või LaTeX-i dokumente.", + "syntaxReferenceInlineMath": "Reasisene matemaatika", + "syntaxReferenceGithubMath": "GitHubi matemaatika dollari- ja graavimärgiga", + "syntaxReferenceDisplayMath": "Plokina matemaatika", + "syntaxReferenceMathFence": "math-plokk", + "syntaxReferenceTexFence": "tex-plokk", + "syntaxReferenceMathDelimitersLimitation": "BusyMark ei tuvasta \\(...\\) ega \\[...\\] Markdowni matemaatika eraldajatena.", + "syntaxReferenceTexFenceLimitation": "Väljaspool Writerside'i režiimi jääb tex-plokk tavaliseks koodiplokiks.", + "syntaxReferenceWritersideMathElement": "Writerside'i math-element", + "syntaxReferenceWritersideMathElementLimitation": "math-element on semantiline Writerside'i süntaks, mitte lubatud toor-HTML-i MathML.", + "syntaxReferenceSemanticTexBlock": "Semantiline TeX-i koodiplokk", + "syntaxReferenceWritersideDescription": "Neid valitud laiendusi tõlgendatakse ainult avatud Writerside'i projektides.", + "syntaxReferenceAdmonitionBlockquote": "Märkuse plokktsitaat", + "syntaxReferenceAdmonitionLimitation": "Tavaline plokktsitaat on Writerside Markdownis nõuanne; tavalises Markdownis jääb see tavaliseks tsitaadiks.", + "syntaxReferenceSemanticAdmonitions": "Semantilised märkused", + "syntaxReferenceSemanticMarkupLimitation": "Tavaline Markdown ei tõlgenda neid Writerside'i semantilisi elemente.", + "syntaxReferenceCollapsibleHeading": "Ahendatav pealkiri", + "syntaxReferenceCollapsibleCode": "Ahendatav koodiplokk", + "syntaxReferenceSemanticCollapsibles": "Semantiline ahendatav sisu", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark toetab ahendatavaid chapter-, procedure-, code-block- ja definitsiooniloendi vorme, mitte kogu Writerside'i kataloogi.", + "syntaxReferenceSemanticCodeBlocks": "Semantilised koodiplokid matemaatika ja diagrammide jaoks", + "syntaxReferenceVideo": "Writerside'i video", + "syntaxReferenceVideoLimitation": "Kohalik video kasutab kohalikku preview-src-pilti; majutatud allikad peavad olema toetatud YouTube'i või Vimeo HTTPS-aadressid.", "exportAsPdf": "Ekspordi PDF-ina", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb index f8dd81f7..300ea9b6 100644 --- a/lib/l10n/app_fa.arb +++ b/lib/l10n/app_fa.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "باز کردن مرجع Markdown و HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "باز کردن راهنمای نحو", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "باز کردن تنظیمات BusyMark", "@shortcutSettingsDescription": { @@ -2389,136 +2389,136 @@ "gitErrorNetwork": "عملیات شبکهٔ Git ناموفق بود.", "gitErrorConflict": "Git تداخل‌های حل‌نشده گزارش کرد.", "gitErrorCommandFailed": "فرمان Git ناموفق بود.", - "markdownAndHtml": "Markdown و HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "راهنمای نحو", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "بلوک‌های Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "بلوک‌های Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "ساختارهای بلوکی پشتیبانی‌شده در متن Markdown و پیش‌نمایش.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "ساختارهای بلوکی پشتیبانی‌شده در متن Markdown و پیش‌نمایش.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown درون‌خطی", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown درون‌خطی", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "قالب‌بندی درون پاراگراف‌ها، موارد فهرست و سلول‌های جدول.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "قالب‌بندی درون پاراگراف‌ها، موارد فهرست و سلول‌های جدول.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "بلوک‌های HTML خام", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "بلوک‌های HTML خام", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "تگ‌های بلوکی HTML امن که با ویجت‌های پیش‌نمایش BusyMark نمایش داده می‌شوند.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "تگ‌های بلوکی HTML امن که با ویجت‌های پیش‌نمایش BusyMark نمایش داده می‌شوند.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "تگ‌های HTML درون‌خطی", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "تگ‌های HTML درون‌خطی", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "تگ‌های HTML درون‌خطی امن بدون نمایش خود تگ‌ها رندر می‌شوند.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "تگ‌های HTML درون‌خطی امن بدون نمایش خود تگ‌ها رندر می‌شوند.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "قوانین امنیتی", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "قوانین امنیتی", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "HTML خام پیش از پیش‌نمایش تحلیل و پاک‌سازی می‌شود.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "HTML خام پیش از پیش‌نمایش تحلیل و پاک‌سازی می‌شود.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "عنوان‌ها", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "عنوان‌ها", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "پاراگراف‌ها", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "پاراگراف‌ها", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "فهرست‌ها", - "@markdownHtmlLists": { + "syntaxReferenceLists": "فهرست‌ها", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "کانتینرها", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "کانتینرها", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "بلوک‌های متن", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "بلوک‌های متن", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "شکل‌ها و تصاویر", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "شکل‌ها و تصاویر", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "کد پیش‌قالب‌بندی‌شده", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "کد پیش‌قالب‌بندی‌شده", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "بلوک‌های بازشونده", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "بلوک‌های بازشونده", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "فهرست‌های توصیفی", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "فهرست‌های توصیفی", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "تگ‌های قالب‌بندی", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "تگ‌های قالب‌بندی", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "تگ‌های کد درون‌خطی", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "تگ‌های کد درون‌خطی", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "تگ‌های متنی معنایی", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "تگ‌های متنی معنایی", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "پیش‌نمایش پاک‌سازی‌شده", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "پیش‌نمایش پاک‌سازی‌شده", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "HTML مجاز به بلوک‌های پیش‌نمایش BusyMark تبدیل می‌شود، نه اینکه در مرورگر رندر شود.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "HTML مجاز به بلوک‌های پیش‌نمایش BusyMark تبدیل می‌شود، نه اینکه در مرورگر رندر شود.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "منبع حفظ می‌شود", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "منبع حفظ می‌شود", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "HTML خام ویرایش‌نشده دقیقاً به‌عنوان متن منبع ذخیره می‌شود.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "HTML خام ویرایش‌نشده دقیقاً به‌عنوان متن منبع ذخیره می‌شود.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown داخل HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown داخل HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "نشانه‌های Markdown داخل HTML خام به‌صورت متن واقعی نمایش داده می‌شوند.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "نشانه‌های Markdown داخل HTML خام به‌صورت متن واقعی نمایش داده می‌شوند.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "محتوای فعال مسدود است", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "محتوای فعال مسدود است", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "اسکریپت‌ها، استایل‌ها، فریم‌ها، فرم‌ها، SVG، MathML، رویدادها و ویژگی‌های ناامن مسدود می‌شوند.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "اسکریپت‌ها، استایل‌ها، فریم‌ها، فرم‌ها، SVG، MathML، رویدادها و ویژگی‌های ناامن مسدود می‌شوند.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "فقط URLهای امن", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "فقط URLهای امن", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "پیوندها http، https، mailto، tel، URLهای نسبی و قطعه‌ها را می‌پذیرند؛ طرح‌های ناامن مسدود می‌شوند.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "پیوندها http، https، mailto، tel، URLهای نسبی و قطعه‌ها را می‌پذیرند؛ طرح‌های ناامن مسدود می‌شوند.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "افزودن به Git", @@ -2728,6 +2728,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "دسته‌بندی", + "syntaxReferenceCategoryDiagramsAndApi": "نمودارها و API", + "syntaxReferenceCategoryMathematics": "ریاضیات", + "syntaxReferenceExample": "نمونه", + "syntaxReferenceIdentifiers": "شناسه‌ها و نام‌های مستعار", + "syntaxReferenceScope": "دامنه", + "syntaxReferenceLimitation": "محدودیت BusyMark", + "syntaxReferenceOfficialDocumentation": "مستندات رسمی", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown معمولی و Markdown در Writerside", + "syntaxReferenceScopeWritersideMarkdown": "فقط Markdown در Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "فقط Markdown و XML در Writerside", + "syntaxReferenceMarkdownDescription": "شکل‌های اصلی Markdown که BusyMark می‌تواند بنویسد و پیش‌نمایش کند.", + "syntaxReferenceParagraphExample": "یک بند متنی.", + "syntaxReferenceTableLimitation": "جدول‌ها از نحو خط عمودی GitHub Flavored Markdown استفاده می‌کنند.", + "syntaxReferenceHardBreakIdentifiers": "دو فاصله در پایان خط، \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark زیرمجموعه‌ای محدود و امن از HTML خام را در منبع Markdown می‌پذیرد.", + "syntaxReferenceDiagramsDescription": "بلوک‌های حصاردار Mermaid، PlantUML، D2 و OpenAPI در منبع Markdown کار می‌کنند. شناسه‌های حصار به بزرگی و کوچکی حروف حساس نیستند و BusyMark املای اصلی را نگه می‌دارد.", + "syntaxReferenceOpenApiLimitation": "از محتوای YAML یا JSON حصاردار استفاده کنید. BusyMark هر سند کامل YAML یا JSON را مرجع OpenAPI در نظر نمی‌گیرد.", + "syntaxReferenceSemanticDiagramBlocks": "بلوک‌های کد معنایی نمودار", + "syntaxReferenceSemanticDiagramLimitation": "شکل‌های معنایی code-block و src از Mermaid، PlantUML و D2 پشتیبانی می‌کنند، نه OpenAPI، و فقط در پروژه‌های Writerside کار می‌کنند.", + "syntaxReferenceReferencedDiagramSource": "منبع ارجاع‌شدهٔ نمودار", + "syntaxReferenceReferencedDiagramLimitation": "مسیرها باید نسبی باشند و درون پروژهٔ بازشدهٔ Writerside بمانند؛ شکل حصار همراه src فقط ویژهٔ Markdown در Writerside است.", + "syntaxReferenceMathematicsDescription": "BusyMark از عبارت‌های TeX پشتیبانی می‌کند، نه اسناد کامل TeX یا LaTeX.", + "syntaxReferenceInlineMath": "ریاضی درون‌خطی", + "syntaxReferenceGithubMath": "ریاضی GitHub با دلار و بک‌تیک", + "syntaxReferenceDisplayMath": "ریاضی نمایشی", + "syntaxReferenceMathFence": "حصار math", + "syntaxReferenceTexFence": "حصار tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark، ⁨\\(...\\)⁩ یا ⁨\\[...\\]⁩ را جداکنندهٔ ریاضی Markdown نمی‌شناسد.", + "syntaxReferenceTexFenceLimitation": "بیرون از حالت Writerside، حصار tex یک بلوک کد معمولی باقی می‌ماند.", + "syntaxReferenceWritersideMathElement": "عنصر math در Writerside", + "syntaxReferenceWritersideMathElementLimitation": "عنصر math نحو معنایی Writerside است، نه HTML MathML خام مجاز.", + "syntaxReferenceSemanticTexBlock": "بلوک کد معنایی TeX", + "syntaxReferenceWritersideDescription": "این افزونه‌های مشخص فقط در پروژه‌های بازشدهٔ Writerside تفسیر می‌شوند.", + "syntaxReferenceAdmonitionBlockquote": "نقل‌قول بلوکی هشدار", + "syntaxReferenceAdmonitionLimitation": "نقل‌قول بلوکی ساده در Markdown درون Writerside یک نکته است؛ در Markdown معمولی همان نقل‌قول عادی می‌ماند.", + "syntaxReferenceSemanticAdmonitions": "هشدارهای معنایی", + "syntaxReferenceSemanticMarkupLimitation": "Markdown معمولی این عناصر معنایی Writerside را تفسیر نمی‌کند.", + "syntaxReferenceCollapsibleHeading": "عنوان جمع‌شونده", + "syntaxReferenceCollapsibleCode": "حصار کد جمع‌شونده", + "syntaxReferenceSemanticCollapsibles": "محتوای معنایی جمع‌شونده", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark شکل‌های جمع‌شوندهٔ chapter، procedure، code-block و فهرست تعریف را پشتیبانی می‌کند، نه همهٔ فهرست Writerside را.", + "syntaxReferenceSemanticCodeBlocks": "بلوک‌های کد معنایی برای ریاضی و نمودارها", + "syntaxReferenceVideo": "ویدیوی Writerside", + "syntaxReferenceVideoLimitation": "ویدیوی محلی از تصویر محلی preview-src استفاده می‌کند؛ منابع میزبانی‌شده باید نشانی HTTPS پشتیبانی‌شدهٔ YouTube یا Vimeo باشند.", "exportAsPdf": "خروجی به‌صورت PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 614781ee..5047228e 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Ouvrir la référence Markdown et HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Ouvrir la référence de syntaxe", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Ouvrir les paramètres de BusyMark", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "L’opération réseau Git a échoué.", "gitErrorConflict": "Git a signalé des conflits non résolus.", "gitErrorCommandFailed": "La commande Git a échoué.", - "markdownAndHtml": "Markdown et HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Référence de syntaxe", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Blocs Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Blocs Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Structures de blocs prises en charge dans la source Markdown et l’aperçu.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Structures de blocs prises en charge dans la source Markdown et l’aperçu.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown en ligne", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown en ligne", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Mise en forme utilisable dans les paragraphes, listes et cellules de tableau.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Mise en forme utilisable dans les paragraphes, listes et cellules de tableau.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Blocs HTML bruts", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Blocs HTML bruts", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Balises HTML de bloc sûres rendues par les widgets d’aperçu BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Balises HTML de bloc sûres rendues par les widgets d’aperçu BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Balises HTML brutes en ligne", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Balises HTML brutes en ligne", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Balises HTML en ligne sûres rendues sans afficher les balises littérales.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Balises HTML en ligne sûres rendues sans afficher les balises littérales.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Règles de sécurité", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Règles de sécurité", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Le HTML brut est analysé et assaini avant le rendu de l’aperçu.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Le HTML brut est analysé et assaini avant le rendu de l’aperçu.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Titres", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Titres", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Paragraphes", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Paragraphes", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Listes", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Listes", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Conteneurs", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Conteneurs", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Blocs de texte", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Blocs de texte", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figures et images", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figures et images", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Code préformaté", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Code préformaté", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Blocs dépliables", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Blocs dépliables", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Listes de description", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Listes de description", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Balises de mise en forme", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Balises de mise en forme", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Balises de code en ligne", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Balises de code en ligne", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Balises de texte sémantique", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Balises de texte sémantique", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Aperçu assaini", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Aperçu assaini", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Le HTML autorisé est converti en blocs d’aperçu BusyMark et n’est pas rendu dans un navigateur.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Le HTML autorisé est converti en blocs d’aperçu BusyMark et n’est pas rendu dans un navigateur.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Source conservée", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Source conservée", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Le HTML brut non modifié est enregistré exactement comme texte source.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Le HTML brut non modifié est enregistré exactement comme texte source.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown dans HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown dans HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Les marqueurs Markdown dans le HTML brut sont affichés comme texte littéral.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Les marqueurs Markdown dans le HTML brut sont affichés comme texte littéral.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Contenu actif bloqué", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Contenu actif bloqué", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Les scripts, styles, cadres, formulaires, SVG, MathML, événements et attributs dangereux sont bloqués.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Les scripts, styles, cadres, formulaires, SVG, MathML, événements et attributs dangereux sont bloqués.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "URL sûres uniquement", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "URL sûres uniquement", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Les liens acceptent http, https, mailto, tel, les URL relatives et les fragments ; les schémas dangereux sont bloqués.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Les liens acceptent http, https, mailto, tel, les URL relatives et les fragments ; les schémas dangereux sont bloqués.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Ajouter à Git", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Catégorie", + "syntaxReferenceCategoryDiagramsAndApi": "Diagrammes et API", + "syntaxReferenceCategoryMathematics": "Mathématiques", + "syntaxReferenceExample": "Exemple", + "syntaxReferenceIdentifiers": "Identifiants et alias", + "syntaxReferenceScope": "Portée", + "syntaxReferenceLimitation": "Limite de BusyMark", + "syntaxReferenceOfficialDocumentation": "Documentation officielle", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown ordinaire et Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Markdown Writerside uniquement", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Markdown Writerside et XML Writerside uniquement", + "syntaxReferenceMarkdownDescription": "Les formes Markdown essentielles que BusyMark peut créer et prévisualiser.", + "syntaxReferenceParagraphExample": "Un paragraphe de texte.", + "syntaxReferenceTableLimitation": "Les tableaux utilisent la syntaxe à barres verticales de GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "deux espaces en fin de ligne, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark accepte un sous-ensemble sûr et ciblé de HTML brut dans la source Markdown.", + "syntaxReferenceDiagramsDescription": "Les blocs délimités Mermaid, PlantUML, D2 et OpenAPI fonctionnent dans la source Markdown. Les identifiants de bloc sont insensibles à la casse et BusyMark conserve leur orthographe d’origine.", + "syntaxReferenceOpenApiLimitation": "Utilisez du contenu YAML ou JSON dans un bloc délimité. BusyMark ne considère pas un document YAML ou JSON complet quelconque comme une référence OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Blocs de code sémantiques pour diagrammes", + "syntaxReferenceSemanticDiagramLimitation": "Les formes sémantiques code-block et src prennent en charge Mermaid, PlantUML et D2, mais pas OpenAPI, et uniquement dans les projets Writerside.", + "syntaxReferenceReferencedDiagramSource": "Source de diagramme référencée", + "syntaxReferenceReferencedDiagramLimitation": "Les chemins doivent être relatifs et rester dans le projet Writerside ouvert ; la forme bloc délimité avec src est réservée au Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark prend en charge les expressions TeX, pas les documents TeX ou LaTeX complets.", + "syntaxReferenceInlineMath": "Formule en ligne", + "syntaxReferenceGithubMath": "Formule GitHub avec dollar et accent grave", + "syntaxReferenceDisplayMath": "Formule affichée", + "syntaxReferenceMathFence": "Bloc délimité math", + "syntaxReferenceTexFence": "Bloc délimité tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark ne reconnaît pas \\(...\\) ni \\[...\\] comme délimiteurs mathématiques Markdown.", + "syntaxReferenceTexFenceLimitation": "En dehors du mode Writerside, un bloc tex reste un bloc de code ordinaire.", + "syntaxReferenceWritersideMathElement": "Élément math Writerside", + "syntaxReferenceWritersideMathElementLimitation": "L’élément math est une syntaxe sémantique Writerside, et non du MathML HTML brut autorisé.", + "syntaxReferenceSemanticTexBlock": "Bloc de code TeX sémantique", + "syntaxReferenceWritersideDescription": "Ces extensions ciblées ne sont interprétées que dans les projets Writerside ouverts.", + "syntaxReferenceAdmonitionBlockquote": "Citation d’avertissement", + "syntaxReferenceAdmonitionLimitation": "Une citation simple est un conseil en Markdown Writerside ; elle reste une citation ordinaire en Markdown ordinaire.", + "syntaxReferenceSemanticAdmonitions": "Avertissements sémantiques", + "syntaxReferenceSemanticMarkupLimitation": "Le Markdown ordinaire n’interprète pas ces éléments sémantiques Writerside.", + "syntaxReferenceCollapsibleHeading": "Titre repliable", + "syntaxReferenceCollapsibleCode": "Bloc de code repliable", + "syntaxReferenceSemanticCollapsibles": "Contenu sémantique repliable", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark prend en charge les formes repliables chapter, procedure, code-block et liste de définitions, pas l’intégralité du catalogue Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Blocs de code sémantiques pour les formules et diagrammes", + "syntaxReferenceVideo": "Vidéo Writerside", + "syntaxReferenceVideoLimitation": "Une vidéo locale utilise une image preview-src locale ; les sources hébergées doivent être des URL HTTPS YouTube ou Vimeo prises en charge.", "exportAsPdf": "Exporter en PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index f9b5cd3f..4b7dacb3 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Markdown और HTML संदर्भ खोलें", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "सिंटैक्स संदर्भ खोलें", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "BusyMark सेटिंग्स खोलें", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "Git नेटवर्क कार्रवाई विफल रही।", "gitErrorConflict": "Git ने अनसुलझे टकराव रिपोर्ट किए।", "gitErrorCommandFailed": "Git कमांड विफल रहा।", - "markdownAndHtml": "Markdown और HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "सिंटैक्स संदर्भ", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown ब्लॉक", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown ब्लॉक", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Markdown स्रोत और प्रीव्यू में समर्थित ब्लॉक संरचनाएँ।", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Markdown स्रोत और प्रीव्यू में समर्थित ब्लॉक संरचनाएँ।", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "इनलाइन Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "इनलाइन Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "ऐसी फ़ॉर्मैटिंग जिसे पैराग्राफ़, सूची आइटम और तालिका सेल के अंदर इस्तेमाल किया जा सकता है।", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "ऐसी फ़ॉर्मैटिंग जिसे पैराग्राफ़, सूची आइटम और तालिका सेल के अंदर इस्तेमाल किया जा सकता है।", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "कच्चे HTML ब्लॉक", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "कच्चे HTML ब्लॉक", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "सुरक्षित ब्लॉक-स्तर HTML टैग जिन्हें BusyMark प्रीव्यू विजेट से दिखाया जाता है।", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "सुरक्षित ब्लॉक-स्तर HTML टैग जिन्हें BusyMark प्रीव्यू विजेट से दिखाया जाता है।", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "इनलाइन HTML टैग", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "इनलाइन HTML टैग", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "सुरक्षित इनलाइन HTML टैग जिन्हें शाब्दिक टैग दिखाए बिना रेंडर किया जाता है।", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "सुरक्षित इनलाइन HTML टैग जिन्हें शाब्दिक टैग दिखाए बिना रेंडर किया जाता है।", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "सुरक्षा नियम", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "सुरक्षा नियम", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "कच्चे HTML को प्रीव्यू से पहले पार्स और साफ़ किया जाता है।", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "कच्चे HTML को प्रीव्यू से पहले पार्स और साफ़ किया जाता है।", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "शीर्षक", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "शीर्षक", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "पैराग्राफ", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "पैराग्राफ", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "सूचियाँ", - "@markdownHtmlLists": { + "syntaxReferenceLists": "सूचियाँ", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "कंटेनर", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "कंटेनर", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "टेक्स्ट ब्लॉक", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "टेक्स्ट ब्लॉक", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "फ़िगर और चित्र", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "फ़िगर और चित्र", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "पूर्व-स्वरूपित कोड", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "पूर्व-स्वरूपित कोड", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "खुलने वाले ब्लॉक", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "खुलने वाले ब्लॉक", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "विवरण सूचियाँ", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "विवरण सूचियाँ", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "फ़ॉर्मैटिंग टैग", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "फ़ॉर्मैटिंग टैग", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "इनलाइन कोड टैग", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "इनलाइन कोड टैग", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "अर्थपूर्ण टेक्स्ट टैग", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "अर्थपूर्ण टेक्स्ट टैग", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "साफ़ किया गया प्रीव्यू", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "साफ़ किया गया प्रीव्यू", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "अनुमत HTML को BusyMark प्रीव्यू ब्लॉक में बदला जाता है, ब्राउज़र में रेंडर नहीं किया जाता।", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "अनुमत HTML को BusyMark प्रीव्यू ब्लॉक में बदला जाता है, ब्राउज़र में रेंडर नहीं किया जाता।", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "स्रोत सुरक्षित रहता है", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "स्रोत सुरक्षित रहता है", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "असंपादित कच्चे HTML को ठीक उसी तरह स्रोत टेक्स्ट के रूप में सहेजा जाता है।", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "असंपादित कच्चे HTML को ठीक उसी तरह स्रोत टेक्स्ट के रूप में सहेजा जाता है।", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "HTML के अंदर Markdown", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "HTML के अंदर Markdown", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "कच्चे HTML के अंदर Markdown चिह्न शाब्दिक टेक्स्ट की तरह दिखते हैं।", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "कच्चे HTML के अंदर Markdown चिह्न शाब्दिक टेक्स्ट की तरह दिखते हैं।", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "सक्रिय सामग्री अवरुद्ध", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "सक्रिय सामग्री अवरुद्ध", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "स्क्रिप्ट, स्टाइल, फ़्रेम, फ़ॉर्म, SVG, MathML, इवेंट और असुरक्षित एट्रिब्यूट अवरुद्ध किए जाते हैं।", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "स्क्रिप्ट, स्टाइल, फ़्रेम, फ़ॉर्म, SVG, MathML, इवेंट और असुरक्षित एट्रिब्यूट अवरुद्ध किए जाते हैं।", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "केवल सुरक्षित URL", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "केवल सुरक्षित URL", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "लिंक http, https, mailto, tel, सापेक्ष URL और फ़्रैगमेंट स्वीकार करते हैं; असुरक्षित स्कीमें अवरुद्ध की जाती हैं।", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "लिंक http, https, mailto, tel, सापेक्ष URL और फ़्रैगमेंट स्वीकार करते हैं; असुरक्षित स्कीमें अवरुद्ध की जाती हैं।", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Git में जोड़ें", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "श्रेणी", + "syntaxReferenceCategoryDiagramsAndApi": "आरेख और API", + "syntaxReferenceCategoryMathematics": "गणित", + "syntaxReferenceExample": "उदाहरण", + "syntaxReferenceIdentifiers": "पहचानकर्ता और उपनाम", + "syntaxReferenceScope": "दायरा", + "syntaxReferenceLimitation": "BusyMark की सीमा", + "syntaxReferenceOfficialDocumentation": "आधिकारिक दस्तावेज़", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "सामान्य Markdown और Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "केवल Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "केवल Writerside Markdown और Writerside XML", + "syntaxReferenceMarkdownDescription": "मुख्य Markdown रूप जिन्हें BusyMark लिख और पूर्वावलोकित कर सकता है।", + "syntaxReferenceParagraphExample": "पाठ का एक अनुच्छेद।", + "syntaxReferenceTableLimitation": "तालिकाएँ GitHub Flavored Markdown की पाइप सिंटैक्स का उपयोग करती हैं।", + "syntaxReferenceHardBreakIdentifiers": "पंक्ति के अंत में दो रिक्तियाँ, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark, Markdown स्रोत में कच्चे HTML का सीमित और सुरक्षित उपसमुच्चय स्वीकार करता है।", + "syntaxReferenceDiagramsDescription": "बाड़ वाले Mermaid, PlantUML, D2 और OpenAPI ब्लॉक Markdown स्रोत में काम करते हैं। बाड़ पहचानकर्ता अक्षर केस से स्वतंत्र हैं और BusyMark मूल वर्तनी सुरक्षित रखता है।", + "syntaxReferenceOpenApiLimitation": "बाड़ वाला YAML या JSON सामग्री उपयोग करें। BusyMark किसी भी पूरे YAML या JSON दस्तावेज़ को OpenAPI संदर्भ नहीं मानता।", + "syntaxReferenceSemanticDiagramBlocks": "आरेखों के लिए सिमैंटिक कोड ब्लॉक", + "syntaxReferenceSemanticDiagramLimitation": "सिमैंटिक code-block और src रूप Mermaid, PlantUML और D2 का समर्थन करते हैं, OpenAPI का नहीं, और केवल Writerside परियोजनाओं में काम करते हैं।", + "syntaxReferenceReferencedDiagramSource": "संदर्भित आरेख स्रोत", + "syntaxReferenceReferencedDiagramLimitation": "पथ सापेक्ष होने चाहिए और खुले Writerside प्रोजेक्ट के भीतर रहने चाहिए; बाड़ के साथ src वाला रूप केवल Writerside Markdown के लिए है।", + "syntaxReferenceMathematicsDescription": "BusyMark TeX व्यंजकों का समर्थन करता है, पूर्ण TeX या LaTeX दस्तावेज़ों का नहीं।", + "syntaxReferenceInlineMath": "इनलाइन गणित", + "syntaxReferenceGithubMath": "डॉलर और बैकटिक वाला GitHub गणित", + "syntaxReferenceDisplayMath": "प्रदर्शित गणित", + "syntaxReferenceMathFence": "math बाड़", + "syntaxReferenceTexFence": "tex बाड़", + "syntaxReferenceMathDelimitersLimitation": "BusyMark \\(...\\) या \\[...\\] को Markdown गणित सीमांकक नहीं मानता।", + "syntaxReferenceTexFenceLimitation": "Writerside मोड के बाहर tex बाड़ सामान्य कोड ब्लॉक ही रहता है।", + "syntaxReferenceWritersideMathElement": "Writerside math तत्व", + "syntaxReferenceWritersideMathElementLimitation": "math तत्व सिमैंटिक Writerside सिंटैक्स है, अनुमत कच्चा HTML MathML नहीं।", + "syntaxReferenceSemanticTexBlock": "सिमैंटिक TeX कोड ब्लॉक", + "syntaxReferenceWritersideDescription": "ये केंद्रित एक्सटेंशन केवल खुले Writerside प्रोजेक्ट में समझे जाते हैं।", + "syntaxReferenceAdmonitionBlockquote": "सूचना ब्लॉककोट", + "syntaxReferenceAdmonitionLimitation": "सादा ब्लॉककोट Writerside Markdown में सुझाव होता है; सामान्य Markdown में वह सामान्य उद्धरण ही रहता है।", + "syntaxReferenceSemanticAdmonitions": "सिमैंटिक सूचनाएँ", + "syntaxReferenceSemanticMarkupLimitation": "सामान्य Markdown इन सिमैंटिक Writerside तत्वों को नहीं समझता।", + "syntaxReferenceCollapsibleHeading": "सिकोड़ा जा सकने वाला शीर्षक", + "syntaxReferenceCollapsibleCode": "सिकोड़ा जा सकने वाला कोड बाड़", + "syntaxReferenceSemanticCollapsibles": "सिमैंटिक संकुचित सामग्री", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark सिकोड़े जा सकने वाले chapter, procedure, code-block और परिभाषा-सूची रूपों का समर्थन करता है, पूरे Writerside कैटलॉग का नहीं।", + "syntaxReferenceSemanticCodeBlocks": "गणित और आरेखों के लिए सिमैंटिक कोड ब्लॉक", + "syntaxReferenceVideo": "Writerside वीडियो", + "syntaxReferenceVideoLimitation": "स्थानीय वीडियो स्थानीय preview-src चित्र उपयोग करता है; होस्ट किए गए स्रोत समर्थित YouTube या Vimeo HTTPS URL होने चाहिए।", "exportAsPdf": "PDF के रूप में निर्यात करें", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index bf692183..16cb26f7 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Buka referensi Markdown dan HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Buka referensi sintaks", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Buka pengaturan BusyMark", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown dan HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Referensi Sintaks", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Blok Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Blok Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Struktur blok didukung dalam sumber Markdown dan pratinjau.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Struktur blok didukung dalam sumber Markdown dan pratinjau.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown Sebaris", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown Sebaris", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Pemformatan yang bisa muncul di dalam paragraf, item daftar, dan sel tabel.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Pemformatan yang bisa muncul di dalam paragraf, item daftar, dan sel tabel.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Blok HTML Mentah", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Blok HTML Mentah", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Tag HTML tingkat blok yang aman dirender melalui widget pratinjau BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Tag HTML tingkat blok yang aman dirender melalui widget pratinjau BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Tag Sebaris HTML Mentah", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Tag Sebaris HTML Mentah", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Tag HTML sebaris aman dirender tanpa menampilkan tag literal.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Tag HTML sebaris aman dirender tanpa menampilkan tag literal.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Aturan Keamanan", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Aturan Keamanan", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "HTML mentah diurai dan dibersihkan sebelum rendering pratinjau.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "HTML mentah diurai dan dibersihkan sebelum rendering pratinjau.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Judul", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Judul", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Paragraf", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Paragraf", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Daftar", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Daftar", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Kontainer", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Kontainer", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Blok teks", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Blok teks", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Gambar dan ilustrasi", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Gambar dan ilustrasi", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Kode yang telah diformat sebelumnya", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Kode yang telah diformat sebelumnya", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Blok detail yang dapat dibuka", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Blok detail yang dapat dibuka", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Daftar deskripsi", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Daftar deskripsi", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Tag pemformatan", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Tag pemformatan", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Tag kode sebaris", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Tag kode sebaris", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Tag teks semantik", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Tag teks semantik", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Pratinjau yang sudah disanitasi", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Pratinjau yang sudah disanitasi", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "HTML yang diizinkan diubah menjadi blok pratinjau BusyMark, tidak dirender di browser.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "HTML yang diizinkan diubah menjadi blok pratinjau BusyMark, tidak dirender di browser.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Sumber dipertahankan", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Sumber dipertahankan", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "HTML mentah yang belum diedit disimpan kembali persis seperti teks sumber.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "HTML mentah yang belum diedit disimpan kembali persis seperti teks sumber.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown di dalam HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown di dalam HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Penanda Markdown di dalam HTML mentah dirender sebagai teks literal.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Penanda Markdown di dalam HTML mentah dirender sebagai teks literal.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Konten aktif yang diblokir", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Konten aktif yang diblokir", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Skrip, gaya, bingkai, formulir, SVG, MathML, peristiwa, dan atribut tidak aman diblokir.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Skrip, gaya, bingkai, formulir, SVG, MathML, peristiwa, dan atribut tidak aman diblokir.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Hanya URL aman", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Hanya URL aman", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Tautan mengizinkan URL http, https, mailto, tel, relatif, dan fragmen; skema yang tidak aman diblokir.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Tautan mengizinkan URL http, https, mailto, tel, relatif, dan fragmen; skema yang tidak aman diblokir.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Kategori", + "syntaxReferenceCategoryDiagramsAndApi": "Diagram dan API", + "syntaxReferenceCategoryMathematics": "Matematika", + "syntaxReferenceExample": "Contoh", + "syntaxReferenceIdentifiers": "Pengenal dan alias", + "syntaxReferenceScope": "Cakupan", + "syntaxReferenceLimitation": "Batasan BusyMark", + "syntaxReferenceOfficialDocumentation": "Dokumentasi resmi", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown biasa dan Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Hanya Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Hanya Markdown Writerside dan XML Writerside", + "syntaxReferenceMarkdownDescription": "Bentuk Markdown utama yang dapat ditulis dan dipratinjau BusyMark.", + "syntaxReferenceParagraphExample": "Sebuah paragraf teks.", + "syntaxReferenceTableLimitation": "Tabel memakai sintaks garis vertikal GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "dua spasi di akhir baris, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark menerima subset HTML mentah yang terbatas dan aman dalam sumber Markdown.", + "syntaxReferenceDiagramsDescription": "Blok berpagar Mermaid, PlantUML, D2, dan OpenAPI berfungsi dalam sumber Markdown. Pengenal pagar tidak peka huruf besar-kecil dan BusyMark mempertahankan ejaan sumber.", + "syntaxReferenceOpenApiLimitation": "Gunakan konten YAML atau JSON berpagar. BusyMark tidak memperlakukan sembarang dokumen YAML atau JSON utuh sebagai referensi OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Blok kode semantik untuk diagram", + "syntaxReferenceSemanticDiagramLimitation": "Bentuk semantik code-block dan src mendukung Mermaid, PlantUML, dan D2, bukan OpenAPI, dan hanya dalam proyek Writerside.", + "syntaxReferenceReferencedDiagramSource": "Sumber diagram yang dirujuk", + "syntaxReferenceReferencedDiagramLimitation": "Jalur harus relatif dan tetap di dalam proyek Writerside yang dibuka; bentuk pagar dengan src hanya untuk Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark mendukung ekspresi TeX, bukan dokumen TeX atau LaTeX lengkap.", + "syntaxReferenceInlineMath": "Matematika sebaris", + "syntaxReferenceGithubMath": "Matematika GitHub dengan dolar dan tanda petik balik", + "syntaxReferenceDisplayMath": "Matematika tampilan", + "syntaxReferenceMathFence": "Pagar math", + "syntaxReferenceTexFence": "Pagar tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark tidak mengenali \\(...\\) atau \\[...\\] sebagai pembatas matematika Markdown.", + "syntaxReferenceTexFenceLimitation": "Di luar mode Writerside, pagar tex tetap menjadi blok kode biasa.", + "syntaxReferenceWritersideMathElement": "Elemen math Writerside", + "syntaxReferenceWritersideMathElementLimitation": "Elemen math adalah sintaks semantik Writerside, bukan HTML MathML mentah yang diizinkan.", + "syntaxReferenceSemanticTexBlock": "Blok kode TeX semantik", + "syntaxReferenceWritersideDescription": "Ekstensi terpilih ini hanya ditafsirkan di dalam proyek Writerside yang dibuka.", + "syntaxReferenceAdmonitionBlockquote": "Kutipan blok keterangan", + "syntaxReferenceAdmonitionLimitation": "Kutipan blok biasa menjadi tip dalam Markdown Writerside; dalam Markdown biasa tetap menjadi kutipan biasa.", + "syntaxReferenceSemanticAdmonitions": "Keterangan semantik", + "syntaxReferenceSemanticMarkupLimitation": "Markdown biasa tidak menafsirkan elemen semantik Writerside ini.", + "syntaxReferenceCollapsibleHeading": "Judul yang dapat diciutkan", + "syntaxReferenceCollapsibleCode": "Pagar kode yang dapat diciutkan", + "syntaxReferenceSemanticCollapsibles": "Konten semantik yang dapat diciutkan", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark mendukung bentuk chapter, procedure, code-block, dan daftar definisi yang dapat diciutkan, bukan seluruh katalog Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Blok kode semantik untuk matematika dan diagram", + "syntaxReferenceVideo": "Video Writerside", + "syntaxReferenceVideoLimitation": "Video lokal memakai gambar preview-src lokal; sumber yang dihosting harus berupa URL HTTPS YouTube atau Vimeo yang didukung.", "exportAsPdf": "Ekspor sebagai PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index f83a468d..7adc7019 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Apri il riferimento Markdown e HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Apri il riferimento della sintassi", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Apri le impostazioni di BusyMark", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "Operazione di rete Git non riuscita.", "gitErrorConflict": "Git ha segnalato conflitti non risolti.", "gitErrorCommandFailed": "Comando Git non riuscito.", - "markdownAndHtml": "Markdown e HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Riferimento della sintassi", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Blocchi Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Blocchi Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Strutture a blocchi supportate nel sorgente Markdown e nell’anteprima.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Strutture a blocchi supportate nel sorgente Markdown e nell’anteprima.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown in linea", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown in linea", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Formattazione dentro paragrafi, elementi di elenco e celle di tabella.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Formattazione dentro paragrafi, elementi di elenco e celle di tabella.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Blocchi HTML grezzi", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Blocchi HTML grezzi", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Tag HTML di blocco sicuri renderizzati dai widget di anteprima BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Tag HTML di blocco sicuri renderizzati dai widget di anteprima BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Tag HTML grezzi in linea", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Tag HTML grezzi in linea", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Tag HTML in linea sicuri renderizzati senza mostrare i tag letterali.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Tag HTML in linea sicuri renderizzati senza mostrare i tag letterali.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Regole di sicurezza", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Regole di sicurezza", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "L’HTML grezzo viene analizzato e sanificato prima dell’anteprima.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "L’HTML grezzo viene analizzato e sanificato prima dell’anteprima.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Titoli", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Titoli", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Paragrafi", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Paragrafi", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Elenchi", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Elenchi", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Contenitori", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Contenitori", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Blocchi di testo", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Blocchi di testo", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figure e immagini", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figure e immagini", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Codice preformattato", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Codice preformattato", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Blocchi espandibili", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Blocchi espandibili", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Elenchi descrittivi", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Elenchi descrittivi", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Tag di formattazione", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Tag di formattazione", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Tag di codice in linea", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Tag di codice in linea", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Tag di testo semantico", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Tag di testo semantico", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Anteprima sanificata", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Anteprima sanificata", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "L’HTML consentito viene convertito in blocchi di anteprima BusyMark e non viene renderizzato in un browser.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "L’HTML consentito viene convertito in blocchi di anteprima BusyMark e non viene renderizzato in un browser.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Codice sorgente conservato", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Codice sorgente conservato", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "L’HTML grezzo non modificato viene salvato esattamente come testo sorgente.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "L’HTML grezzo non modificato viene salvato esattamente come testo sorgente.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown dentro HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown dentro HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "I marcatori Markdown dentro HTML grezzo vengono visualizzati come testo letterale.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "I marcatori Markdown dentro HTML grezzo vengono visualizzati come testo letterale.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Contenuto attivo bloccato", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Contenuto attivo bloccato", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Script, stili, frame, moduli, SVG, MathML, eventi e attributi non sicuri vengono bloccati.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Script, stili, frame, moduli, SVG, MathML, eventi e attributi non sicuri vengono bloccati.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Solo URL sicuri", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Solo URL sicuri", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "I link consentono http, https, mailto, tel, URL relativi e frammenti; gli schemi non sicuri sono bloccati.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "I link consentono http, https, mailto, tel, URL relativi e frammenti; gli schemi non sicuri sono bloccati.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Aggiungi a Git", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Categoria", + "syntaxReferenceCategoryDiagramsAndApi": "Diagrammi e API", + "syntaxReferenceCategoryMathematics": "Matematica", + "syntaxReferenceExample": "Esempio", + "syntaxReferenceIdentifiers": "Identificatori e alias", + "syntaxReferenceScope": "Ambito", + "syntaxReferenceLimitation": "Limitazione di BusyMark", + "syntaxReferenceOfficialDocumentation": "Documentazione ufficiale", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown normale e Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Solo Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Solo Markdown Writerside e XML Writerside", + "syntaxReferenceMarkdownDescription": "Le forme Markdown essenziali che BusyMark può creare e visualizzare in anteprima.", + "syntaxReferenceParagraphExample": "Un paragrafo di testo.", + "syntaxReferenceTableLimitation": "Le tabelle usano la sintassi con barre verticali di GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "due spazi a fine riga, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark accetta un sottoinsieme sicuro e mirato di HTML grezzo nel sorgente Markdown.", + "syntaxReferenceDiagramsDescription": "I blocchi delimitati Mermaid, PlantUML, D2 e OpenAPI funzionano nel sorgente Markdown. Gli identificatori non distinguono maiuscole e minuscole e BusyMark conserva la grafia originale.", + "syntaxReferenceOpenApiLimitation": "Usare contenuto YAML o JSON in un blocco delimitato. BusyMark non considera un qualsiasi documento YAML o JSON completo come riferimento OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Blocchi di codice semantici per diagrammi", + "syntaxReferenceSemanticDiagramLimitation": "Le forme semantiche code-block e src supportano Mermaid, PlantUML e D2, non OpenAPI, e solo nei progetti Writerside.", + "syntaxReferenceReferencedDiagramSource": "Sorgente di diagramma referenziato", + "syntaxReferenceReferencedDiagramLimitation": "I percorsi devono essere relativi e restare nel progetto Writerside aperto; la forma blocco delimitato con src è solo per Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark supporta espressioni TeX, non documenti TeX o LaTeX completi.", + "syntaxReferenceInlineMath": "Formula in linea", + "syntaxReferenceGithubMath": "Formula GitHub con dollaro e accento grave", + "syntaxReferenceDisplayMath": "Formula visualizzata", + "syntaxReferenceMathFence": "Blocco delimitato math", + "syntaxReferenceTexFence": "Blocco delimitato tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark non riconosce \\(...\\) o \\[...\\] come delimitatori matematici Markdown.", + "syntaxReferenceTexFenceLimitation": "Fuori dalla modalità Writerside, un blocco tex resta un normale blocco di codice.", + "syntaxReferenceWritersideMathElement": "Elemento math di Writerside", + "syntaxReferenceWritersideMathElementLimitation": "L’elemento math è sintassi semantica Writerside, non MathML HTML grezzo consentito.", + "syntaxReferenceSemanticTexBlock": "Blocco di codice TeX semantico", + "syntaxReferenceWritersideDescription": "Queste estensioni mirate sono interpretate solo nei progetti Writerside aperti.", + "syntaxReferenceAdmonitionBlockquote": "Citazione di avviso", + "syntaxReferenceAdmonitionLimitation": "Una citazione semplice è un suggerimento in Markdown Writerside; resta una citazione normale nel Markdown comune.", + "syntaxReferenceSemanticAdmonitions": "Avvisi semantici", + "syntaxReferenceSemanticMarkupLimitation": "Il Markdown comune non interpreta questi elementi semantici Writerside.", + "syntaxReferenceCollapsibleHeading": "Titolo comprimibile", + "syntaxReferenceCollapsibleCode": "Blocco di codice comprimibile", + "syntaxReferenceSemanticCollapsibles": "Contenuto semantico comprimibile", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark supporta le forme comprimibili chapter, procedure, code-block ed elenco di definizioni, non l’intero catalogo Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Blocchi di codice semantici per formule e diagrammi", + "syntaxReferenceVideo": "Video Writerside", + "syntaxReferenceVideoLimitation": "Il video locale usa un’immagine preview-src locale; le sorgenti ospitate devono essere URL HTTPS supportati di YouTube o Vimeo.", "exportAsPdf": "Esporta come PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 739df73b..22573492 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Markdown と HTML のリファレンスを開く", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "構文リファレンスを開く", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "BusyMark の設定を開く", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown と HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "構文リファレンス", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown ブロック", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown ブロック", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Markdown のソースとプレビューでサポートされるブロック構造", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Markdown のソースとプレビューでサポートされるブロック構造", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "インライン Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "インライン Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "段落、リスト項目、表のセル内で使用できる書式", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "段落、リスト項目、表のセル内で使用できる書式", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "生 HTML ブロック", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "生 HTML ブロック", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "BusyMark のプレビューウィジェットでレンダリングされる安全なブロックレベル HTML タグ", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "BusyMark のプレビューウィジェットでレンダリングされる安全なブロックレベル HTML タグ", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "生 HTML インラインタグ", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "生 HTML インラインタグ", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "リテラルタグを表示せずにレンダリングされる安全なインライン HTML タグ", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "リテラルタグを表示せずにレンダリングされる安全なインライン HTML タグ", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "安全性のルール", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "安全性のルール", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "生 HTML はプレビューのレンダリング前に解析およびサニタイズされます。", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "生 HTML はプレビューのレンダリング前に解析およびサニタイズされます。", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "見出し", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "見出し", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "段落", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "段落", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "リスト", - "@markdownHtmlLists": { + "syntaxReferenceLists": "リスト", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "コンテナー", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "コンテナー", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "テキストブロック", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "テキストブロック", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "図と画像", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "図と画像", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "整形済みコード", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "整形済みコード", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "折りたたみブロック", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "折りたたみブロック", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "説明リスト", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "説明リスト", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "書式タグ", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "書式タグ", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "インラインコードタグ", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "インラインコードタグ", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "セマンティックテキストタグ", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "セマンティックテキストタグ", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "サニタイズ済みプレビュー", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "サニタイズ済みプレビュー", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "許可された HTML はブラウザーでレンダリングされず、BusyMark のプレビューブロックに変換されます。", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "許可された HTML はブラウザーでレンダリングされず、BusyMark のプレビューブロックに変換されます。", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "ソースを保持", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "ソースを保持", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "編集されていない生 HTML はソーステキストのまま正確に保存されます。", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "編集されていない生 HTML はソーステキストのまま正確に保存されます。", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "HTML 内の Markdown", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "HTML 内の Markdown", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "生 HTML 内の Markdown マーカーはリテラルテキストとしてレンダリングされます。", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "生 HTML 内の Markdown マーカーはリテラルテキストとしてレンダリングされます。", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "ブロックされたアクティブコンテンツ", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "ブロックされたアクティブコンテンツ", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "スクリプト、スタイル、フレーム、フォーム、SVG、MathML、イベント、安全でない属性はブロックされます。", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "スクリプト、スタイル、フレーム、フォーム、SVG、MathML、イベント、安全でない属性はブロックされます。", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "安全な URL のみ", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "安全な URL のみ", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "リンクでは http、https、mailto、tel、相対パス、フラグメント URL が許可されます。安全でないスキームはブロックされます。", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "リンクでは http、https、mailto、tel、相対パス、フラグメント URL が許可されます。安全でないスキームはブロックされます。", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "カテゴリ", + "syntaxReferenceCategoryDiagramsAndApi": "図と API", + "syntaxReferenceCategoryMathematics": "数式", + "syntaxReferenceExample": "例", + "syntaxReferenceIdentifiers": "識別子と別名", + "syntaxReferenceScope": "対象", + "syntaxReferenceLimitation": "BusyMark での制限", + "syntaxReferenceOfficialDocumentation": "公式ドキュメント", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "通常の Markdown と Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Writerside Markdown のみ", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Writerside Markdown と Writerside XML のみ", + "syntaxReferenceMarkdownDescription": "BusyMark で作成およびプレビューできる主要な Markdown 形式です。", + "syntaxReferenceParagraphExample": "テキストの段落です。", + "syntaxReferenceTableLimitation": "表では GitHub Flavored Markdown のパイプ構文を使用します。", + "syntaxReferenceHardBreakIdentifiers": "行末の半角スペース 2 個、\\、
    ", + "syntaxReferenceHtmlDescription": "BusyMark は Markdown ソース内の限定された安全な生 HTML のみを受け付けます。", + "syntaxReferenceDiagramsDescription": "Mermaid、PlantUML、D2、OpenAPI のフェンス付きブロックは Markdown ソースで機能します。フェンス識別子では大文字と小文字を区別せず、BusyMark は元の表記を保持します。", + "syntaxReferenceOpenApiLimitation": "フェンス内に YAML または JSON を記述してください。BusyMark は任意の YAML または JSON ファイル全体を OpenAPI リファレンスとして扱いません。", + "syntaxReferenceSemanticDiagramBlocks": "図用のセマンティックコードブロック", + "syntaxReferenceSemanticDiagramLimitation": "セマンティックな code-block と src 形式で使用できるのは Mermaid、PlantUML、D2 です。OpenAPI には使用できず、Writerside プロジェクト内でのみ機能します。", + "syntaxReferenceReferencedDiagramSource": "参照する図のソース", + "syntaxReferenceReferencedDiagramLimitation": "パスは相対パスで、開いている Writerside プロジェクト内に収まる必要があります。フェンスと src の形式は Writerside Markdown 専用です。", + "syntaxReferenceMathematicsDescription": "BusyMark が対応するのは TeX 式であり、完全な TeX または LaTeX 文書ではありません。", + "syntaxReferenceInlineMath": "インライン数式", + "syntaxReferenceGithubMath": "ドル記号とバッククォートによる GitHub 数式", + "syntaxReferenceDisplayMath": "別行立て数式", + "syntaxReferenceMathFence": "math フェンス", + "syntaxReferenceTexFence": "tex フェンス", + "syntaxReferenceMathDelimitersLimitation": "BusyMark は \\(...\\) と \\[...\\] を Markdown の数式区切りとして認識しません。", + "syntaxReferenceTexFenceLimitation": "Writerside モード以外では、tex フェンスは通常のコードブロックのままです。", + "syntaxReferenceWritersideMathElement": "Writerside の math 要素", + "syntaxReferenceWritersideMathElementLimitation": "math 要素は Writerside のセマンティック構文であり、許可された生 HTML MathML ではありません。", + "syntaxReferenceSemanticTexBlock": "セマンティック TeX コードブロック", + "syntaxReferenceWritersideDescription": "ここで示す拡張は、開いている Writerside プロジェクト内でのみ解釈されます。", + "syntaxReferenceAdmonitionBlockquote": "注意書きの引用", + "syntaxReferenceAdmonitionLimitation": "通常のブロック引用は Writerside Markdown ではヒントになり、通常の Markdown では通常の引用のままです。", + "syntaxReferenceSemanticAdmonitions": "セマンティックな注意書き", + "syntaxReferenceSemanticMarkupLimitation": "通常の Markdown は、これらの Writerside セマンティック要素を解釈しません。", + "syntaxReferenceCollapsibleHeading": "折りたたみ可能な見出し", + "syntaxReferenceCollapsibleCode": "折りたたみ可能なコードフェンス", + "syntaxReferenceSemanticCollapsibles": "セマンティックな折りたたみコンテンツ", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark が対応する折りたたみ形式は chapter、procedure、code-block、定義リストです。Writerside の全カタログには対応しません。", + "syntaxReferenceSemanticCodeBlocks": "数式と図用のセマンティックコードブロック", + "syntaxReferenceVideo": "Writerside 動画", + "syntaxReferenceVideoLimitation": "ローカル動画にはローカルの preview-src 画像を使用します。ホスト動画は対応する YouTube または Vimeo の HTTPS URL に限られます。", "exportAsPdf": "PDF としてエクスポート", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index b09639c0..6a016f67 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Markdown 및 HTML 참조 열기", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "구문 참조 열기", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "BusyMark 설정 열기", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown 및 HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "구문 참조", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown 블록", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown 블록", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Markdown 소스 및 미리보기에서 블록 구조가 지원됩니다.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Markdown 소스 및 미리보기에서 블록 구조가 지원됩니다.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "인라인 Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "인라인 Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "단락, 목록 항목 및 표 셀 내부에 나타날 수 있는 서식입니다.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "단락, 목록 항목 및 표 셀 내부에 나타날 수 있는 서식입니다.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "원시 HTML 블록", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "원시 HTML 블록", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "BusyMark 미리보기 위젯을 통해 렌더링되는 안전한 블록 수준 HTML 태그입니다.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "BusyMark 미리보기 위젯을 통해 렌더링되는 안전한 블록 수준 HTML 태그입니다.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "원시 HTML 인라인 태그", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "원시 HTML 인라인 태그", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "리터럴 태그를 표시하지 않고 렌더링되는 안전한 인라인 HTML 태그입니다.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "리터럴 태그를 표시하지 않고 렌더링되는 안전한 인라인 HTML 태그입니다.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "안전 규칙", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "안전 규칙", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "원시 HTML은 미리 보기 렌더링 전에 구문 분석되고 정리됩니다.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "원시 HTML은 미리 보기 렌더링 전에 구문 분석되고 정리됩니다.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "제목", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "제목", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "단락", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "단락", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "목록", - "@markdownHtmlLists": { + "syntaxReferenceLists": "목록", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "컨테이너", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "컨테이너", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "텍스트 블록", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "텍스트 블록", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "그림 및 이미지", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "그림 및 이미지", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "미리 서식이 지정된 코드", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "미리 서식이 지정된 코드", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "접기 블록", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "접기 블록", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "설명 목록", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "설명 목록", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "서식 태그", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "서식 태그", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "인라인 코드 태그", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "인라인 코드 태그", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "의미 있는 텍스트 태그", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "의미 있는 텍스트 태그", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "정리된 미리 보기", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "정리된 미리 보기", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "허용된 HTML은 브라우저에서 렌더링되지 않고 BusyMark 미리보기 블록으로 변환됩니다.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "허용된 HTML은 브라우저에서 렌더링되지 않고 BusyMark 미리보기 블록으로 변환됩니다.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "소스 보존", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "소스 보존", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "편집되지 않은 원시 HTML은 소스 텍스트와 동일하게 다시 저장됩니다.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "편집되지 않은 원시 HTML은 소스 텍스트와 동일하게 다시 저장됩니다.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "HTML 내부의 Markdown", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "HTML 내부의 Markdown", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "원시 HTML 내부의 마크다운 마커는 리터럴 텍스트로 렌더링됩니다.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "원시 HTML 내부의 마크다운 마커는 리터럴 텍스트로 렌더링됩니다.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "차단된 활성 콘텐츠", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "차단된 활성 콘텐츠", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "스크립트, 스타일, 프레임, 양식, SVG, MathML, 이벤트 및 안전하지 않은 속성이 차단됩니다.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "스크립트, 스타일, 프레임, 양식, SVG, MathML, 이벤트 및 안전하지 않은 속성이 차단됩니다.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "안전한 URL만 허용", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "안전한 URL만 허용", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "링크에는 http, https, mailto, tel, 상대 URL 및 프래그먼트 URL만 허용됩니다. 안전하지 않은 스킴은 차단됩니다.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "링크에는 http, https, mailto, tel, 상대 URL 및 프래그먼트 URL만 허용됩니다. 안전하지 않은 스킴은 차단됩니다.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "범주", + "syntaxReferenceCategoryDiagramsAndApi": "다이어그램 및 API", + "syntaxReferenceCategoryMathematics": "수학", + "syntaxReferenceExample": "예제", + "syntaxReferenceIdentifiers": "식별자 및 별칭", + "syntaxReferenceScope": "적용 범위", + "syntaxReferenceLimitation": "BusyMark 제한 사항", + "syntaxReferenceOfficialDocumentation": "공식 문서", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "일반 Markdown 및 Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Writerside Markdown 전용", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Writerside Markdown 및 Writerside XML 전용", + "syntaxReferenceMarkdownDescription": "BusyMark에서 작성하고 미리 볼 수 있는 핵심 Markdown 형식입니다.", + "syntaxReferenceParagraphExample": "텍스트 문단입니다.", + "syntaxReferenceTableLimitation": "표는 GitHub Flavored Markdown의 파이프 구문을 사용합니다.", + "syntaxReferenceHardBreakIdentifiers": "줄 끝 공백 두 개, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark는 Markdown 소스에서 제한된 안전한 원시 HTML 하위 집합만 허용합니다.", + "syntaxReferenceDiagramsDescription": "Mermaid, PlantUML, D2 및 OpenAPI 펜스 블록은 Markdown 소스에서 작동합니다. 펜스 식별자는 대소문자를 구분하지 않으며 BusyMark는 원래 표기를 유지합니다.", + "syntaxReferenceOpenApiLimitation": "펜스 안에 YAML 또는 JSON 콘텐츠를 사용하세요. BusyMark는 임의의 전체 YAML 또는 JSON 문서를 OpenAPI 참조로 취급하지 않습니다.", + "syntaxReferenceSemanticDiagramBlocks": "다이어그램용 의미론적 코드 블록", + "syntaxReferenceSemanticDiagramLimitation": "의미론적 code-block 및 src 형식은 Mermaid, PlantUML 및 D2만 지원하고 OpenAPI는 지원하지 않으며 Writerside 프로젝트 안에서만 작동합니다.", + "syntaxReferenceReferencedDiagramSource": "참조된 다이어그램 소스", + "syntaxReferenceReferencedDiagramLimitation": "경로는 상대 경로여야 하고 열린 Writerside 프로젝트 안에 있어야 합니다. 펜스와 src 형식은 Writerside Markdown 전용입니다.", + "syntaxReferenceMathematicsDescription": "BusyMark는 TeX 수식을 지원하지만 완전한 TeX 또는 LaTeX 문서는 지원하지 않습니다.", + "syntaxReferenceInlineMath": "인라인 수식", + "syntaxReferenceGithubMath": "달러와 백틱을 사용하는 GitHub 수식", + "syntaxReferenceDisplayMath": "표시 수식", + "syntaxReferenceMathFence": "math 펜스", + "syntaxReferenceTexFence": "tex 펜스", + "syntaxReferenceMathDelimitersLimitation": "BusyMark는 \\(...\\) 또는 \\[...\\]를 Markdown 수식 구분자로 인식하지 않습니다.", + "syntaxReferenceTexFenceLimitation": "Writerside 모드 밖에서는 tex 펜스가 일반 코드 블록으로 남습니다.", + "syntaxReferenceWritersideMathElement": "Writerside math 요소", + "syntaxReferenceWritersideMathElementLimitation": "math 요소는 의미론적 Writerside 구문이며 허용된 원시 HTML MathML이 아닙니다.", + "syntaxReferenceSemanticTexBlock": "의미론적 TeX 코드 블록", + "syntaxReferenceWritersideDescription": "이 확장 기능은 열린 Writerside 프로젝트 안에서만 해석됩니다.", + "syntaxReferenceAdmonitionBlockquote": "알림 인용구", + "syntaxReferenceAdmonitionLimitation": "일반 블록 인용은 Writerside Markdown에서는 팁이고 일반 Markdown에서는 일반 인용으로 남습니다.", + "syntaxReferenceSemanticAdmonitions": "의미론적 알림", + "syntaxReferenceSemanticMarkupLimitation": "일반 Markdown은 이러한 Writerside 의미론적 요소를 해석하지 않습니다.", + "syntaxReferenceCollapsibleHeading": "접을 수 있는 제목", + "syntaxReferenceCollapsibleCode": "접을 수 있는 코드 펜스", + "syntaxReferenceSemanticCollapsibles": "의미론적 접이식 콘텐츠", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark는 접을 수 있는 chapter, procedure, code-block 및 정의 목록 형식을 지원하지만 전체 Writerside 카탈로그를 지원하지는 않습니다.", + "syntaxReferenceSemanticCodeBlocks": "수식 및 다이어그램용 의미론적 코드 블록", + "syntaxReferenceVideo": "Writerside 동영상", + "syntaxReferenceVideoLimitation": "로컬 동영상은 로컬 preview-src 이미지를 사용합니다. 호스팅 동영상은 지원되는 YouTube 또는 Vimeo HTTPS URL이어야 합니다.", "exportAsPdf": "PDF로 내보내기", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/app_nb.arb b/lib/l10n/app_nb.arb index 6116c47e..93ee2cb1 100644 --- a/lib/l10n/app_nb.arb +++ b/lib/l10n/app_nb.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Åpne Markdown- og HTML-referansen", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Åpne syntaksreferansen", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Åpne BusyMark-innstillinger", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "Git-nettverksoperasjonen mislyktes.", "gitErrorConflict": "Git rapporterte uløste konflikter.", "gitErrorCommandFailed": "Git-kommandoen mislyktes.", - "markdownAndHtml": "Markdown og HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Syntaksreferanse", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown-blokker", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown-blokker", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Blokkstrukturer som støttes i Markdown-kilde og forhåndsvisning.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Blokkstrukturer som støttes i Markdown-kilde og forhåndsvisning.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Inline-Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Inline-Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Formatering i avsnitt, listeelementer og tabellceller.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Formatering i avsnitt, listeelementer og tabellceller.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Rå HTML-blokker", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Rå HTML-blokker", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Trygge HTML-blokktagger rendres med BusyMark-forhåndsvisning.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Trygge HTML-blokktagger rendres med BusyMark-forhåndsvisning.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Rå HTML-inline-tagger", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Rå HTML-inline-tagger", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Trygge inline-HTML-tagger rendres uten å vise taggene bokstavelig.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Trygge inline-HTML-tagger rendres uten å vise taggene bokstavelig.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Sikkerhetsregler", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Sikkerhetsregler", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Rå HTML analyseres og renses før forhåndsvisning.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Rå HTML analyseres og renses før forhåndsvisning.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Overskrifter", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Overskrifter", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Avsnitt", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Avsnitt", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Lister", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Lister", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Beholdere", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Beholdere", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Tekstblokker", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Tekstblokker", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figurer og bilder", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figurer og bilder", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Forhåndsformatert kode", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Forhåndsformatert kode", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Utvidbare blokker", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Utvidbare blokker", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Beskrivelseslister", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Beskrivelseslister", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Formateringstagger", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Formateringstagger", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Inline-kodetagger", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Inline-kodetagger", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Semantiske teksttagger", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Semantiske teksttagger", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Renset forhåndsvisning", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Renset forhåndsvisning", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Tillatt HTML konverteres til BusyMark-forhåndsvisningsblokker og rendres ikke i en nettleser.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Tillatt HTML konverteres til BusyMark-forhåndsvisningsblokker og rendres ikke i en nettleser.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Kilden bevares", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Kilden bevares", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Uendret rå HTML lagres nøyaktig som kildetekst.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Uendret rå HTML lagres nøyaktig som kildetekst.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown inni HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown inni HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-markører inni rå HTML vises som bokstavelig tekst.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Markdown-markører inni rå HTML vises som bokstavelig tekst.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Blokkert aktivt innhold", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Blokkert aktivt innhold", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Skript, stiler, rammer, skjemaer, SVG, MathML, hendelser og usikre attributter blokkeres.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Skript, stiler, rammer, skjemaer, SVG, MathML, hendelser og usikre attributter blokkeres.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Bare trygge URL-er", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Bare trygge URL-er", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Lenker tillater http, https, mailto, tel, relative URL-er og fragmenter; usikre URI-skjemaer blokkeres.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Lenker tillater http, https, mailto, tel, relative URL-er og fragmenter; usikre URI-skjemaer blokkeres.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Legg til i Git", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Kategori", + "syntaxReferenceCategoryDiagramsAndApi": "Diagrammer og API", + "syntaxReferenceCategoryMathematics": "Matematikk", + "syntaxReferenceExample": "Eksempel", + "syntaxReferenceIdentifiers": "Identifikatorer og aliaser", + "syntaxReferenceScope": "Omfang", + "syntaxReferenceLimitation": "BusyMark-begrensning", + "syntaxReferenceOfficialDocumentation": "Offisiell dokumentasjon", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Vanlig Markdown og Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Bare Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Bare Writerside Markdown og Writerside XML", + "syntaxReferenceMarkdownDescription": "De viktigste Markdown-formene BusyMark kan skrive og forhåndsvise.", + "syntaxReferenceParagraphExample": "Et tekstavsnitt.", + "syntaxReferenceTableLimitation": "Tabeller bruker pipe-syntaksen fra GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "to mellomrom på slutten av linjen, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark godtar et avgrenset, trygt delsett av rå HTML i Markdown-kilden.", + "syntaxReferenceDiagramsDescription": "Inngjerdede Mermaid-, PlantUML-, D2- og OpenAPI-blokker fungerer i Markdown-kilde. Blokkidentifikatorer skiller ikke mellom store og små bokstaver, og BusyMark bevarer den opprinnelige skrivemåten.", + "syntaxReferenceOpenApiLimitation": "Bruk inngjerdet YAML- eller JSON-innhold. BusyMark behandler ikke et vilkårlig helt YAML- eller JSON-dokument som en OpenAPI-referanse.", + "syntaxReferenceSemanticDiagramBlocks": "Semantiske kodeblokker for diagrammer", + "syntaxReferenceSemanticDiagramLimitation": "Semantiske code-block- og src-former støtter Mermaid, PlantUML og D2, ikke OpenAPI, og bare i Writerside-prosjekter.", + "syntaxReferenceReferencedDiagramSource": "Referert diagramkilde", + "syntaxReferenceReferencedDiagramLimitation": "Stier må være relative og forbli i det åpne Writerside-prosjektet; inngjerdet form med src gjelder bare Writerside Markdown.", + "syntaxReferenceMathematicsDescription": "BusyMark støtter TeX-uttrykk, ikke komplette TeX- eller LaTeX-dokumenter.", + "syntaxReferenceInlineMath": "Matematikk i linjen", + "syntaxReferenceGithubMath": "GitHub-matematikk med dollartegn og grav aksent", + "syntaxReferenceDisplayMath": "Matematikk som blokk", + "syntaxReferenceMathFence": "math-blokk", + "syntaxReferenceTexFence": "tex-blokk", + "syntaxReferenceMathDelimitersLimitation": "BusyMark gjenkjenner ikke \\(...\\) eller \\[...\\] som matematikkskilletegn i Markdown.", + "syntaxReferenceTexFenceLimitation": "Utenfor Writerside-modus forblir en tex-blokk en vanlig kodeblokk.", + "syntaxReferenceWritersideMathElement": "Writerside-math-element", + "syntaxReferenceWritersideMathElementLimitation": "math-elementet er semantisk Writerside-syntaks, ikke tillatt rå HTML MathML.", + "syntaxReferenceSemanticTexBlock": "Semantisk TeX-kodeblokk", + "syntaxReferenceWritersideDescription": "Disse målrettede utvidelsene tolkes bare i åpne Writerside-prosjekter.", + "syntaxReferenceAdmonitionBlockquote": "Merknadssitat", + "syntaxReferenceAdmonitionLimitation": "Et vanlig blokksitat er et tips i Writerside Markdown; i vanlig Markdown forblir det et ordinært sitat.", + "syntaxReferenceSemanticAdmonitions": "Semantiske merknader", + "syntaxReferenceSemanticMarkupLimitation": "Vanlig Markdown tolker ikke disse semantiske Writerside-elementene.", + "syntaxReferenceCollapsibleHeading": "Sammenleggbar overskrift", + "syntaxReferenceCollapsibleCode": "Sammenleggbar kodeblokk", + "syntaxReferenceSemanticCollapsibles": "Semantisk sammenleggbart innhold", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark støtter sammenleggbare chapter-, procedure-, code-block- og definisjonslisteformer, ikke hele Writerside-katalogen.", + "syntaxReferenceSemanticCodeBlocks": "Semantiske kodeblokker for matematikk og diagrammer", + "syntaxReferenceVideo": "Writerside-video", + "syntaxReferenceVideoLimitation": "Lokal video bruker et lokalt preview-src-bilde; vertsbaserte kilder må være støttede HTTPS-adresser fra YouTube eller Vimeo.", "exportAsPdf": "Eksporter som PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 4a032e07..6a75d5b4 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Open de Markdown- en HTML-referentie", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Syntaxisreferentie openen", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Open BusyMark-instellingen", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown en HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Syntaxisreferentie", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown-blokken", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown-blokken", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Blokstructuren ondersteund in Markdown-bron en preview.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Blokstructuren ondersteund in Markdown-bron en preview.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Inline-opmaak", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Inline-opmaak", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Opmaak die kan verschijnen in alinea's, lijstitems en tabelcellen.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Opmaak die kan verschijnen in alinea's, lijstitems en tabelcellen.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Ruwe HTML-blokken", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Ruwe HTML-blokken", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Veilige HTML-tags op blokniveau weergegeven via BusyMark-voorbeeldwidgets.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Veilige HTML-tags op blokniveau weergegeven via BusyMark-voorbeeldwidgets.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Onbewerkte HTML-inlinetags", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Onbewerkte HTML-inlinetags", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Veilige inline HTML-tags weergegeven zonder letterlijke tags weer te geven.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Veilige inline HTML-tags weergegeven zonder letterlijke tags weer te geven.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Veiligheidsregels", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Veiligheidsregels", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Onbewerkte HTML wordt geparseerd en opgeschoond voordat de preview wordt weergegeven.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Onbewerkte HTML wordt geparseerd en opgeschoond voordat de preview wordt weergegeven.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Koppen", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Koppen", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Paragrafen", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Paragrafen", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Lijsten", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Lijsten", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Containers", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Containers", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Tekstblokken", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Tekstblokken", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figuren en afbeeldingen", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figuren en afbeeldingen", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Voorgeformatteerde code", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Voorgeformatteerde code", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Openklapbare blokken", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Openklapbare blokken", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Beschrijvingslijsten", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Beschrijvingslijsten", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Opmaaktags", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Opmaaktags", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Inline codetags", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Inline codetags", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Semantische inline-tags", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Semantische inline-tags", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Opgeschoond voorbeeld", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Opgeschoond voorbeeld", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Toegestane HTML wordt geconverteerd naar BusyMark-voorbeeldblokken en niet weergegeven in een browser.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Toegestane HTML wordt geconverteerd naar BusyMark-voorbeeldblokken en niet weergegeven in een browser.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Bron behouden", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Bron behouden", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Ruwe HTML wordt exact als brontekst opgeslagen.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Ruwe HTML wordt exact als brontekst opgeslagen.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown binnen HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown binnen HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-markeringen in onbewerkte HTML worden weergegeven als letterlijke tekst.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Markdown-markeringen in onbewerkte HTML worden weergegeven als letterlijke tekst.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Actieve inhoud geblokkeerd", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Actieve inhoud geblokkeerd", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Scripts, stijlen, frames, formulieren, SVG, MathML, gebeurtenissen en onveilige attributen worden geblokkeerd.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Scripts, stijlen, frames, formulieren, SVG, MathML, gebeurtenissen en onveilige attributen worden geblokkeerd.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Alleen veilige URL's", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Alleen veilige URL's", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Links staan http-, https-, mailto-, tel-, relatieve en fragment-URL's toe; onveilige schema's worden geblokkeerd.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Links staan http-, https-, mailto-, tel-, relatieve en fragment-URL's toe; onveilige schema's worden geblokkeerd.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Categorie", + "syntaxReferenceCategoryDiagramsAndApi": "Diagrammen en API", + "syntaxReferenceCategoryMathematics": "Wiskunde", + "syntaxReferenceExample": "Voorbeeld", + "syntaxReferenceIdentifiers": "Identificatoren en aliassen", + "syntaxReferenceScope": "Bereik", + "syntaxReferenceLimitation": "BusyMark-beperking", + "syntaxReferenceOfficialDocumentation": "Officiële documentatie", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Gewone Markdown en Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Alleen Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Alleen Writerside Markdown en Writerside XML", + "syntaxReferenceMarkdownDescription": "De belangrijkste Markdown-vormen die BusyMark kan schrijven en weergeven.", + "syntaxReferenceParagraphExample": "Een alinea met tekst.", + "syntaxReferenceTableLimitation": "Tabellen gebruiken de pipe-syntaxis van GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "twee spaties aan het einde van de regel, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark accepteert een gerichte, veilige subset van ruwe HTML in Markdown-broncode.", + "syntaxReferenceDiagramsDescription": "Afgebakende Mermaid-, PlantUML-, D2- en OpenAPI-blokken werken in Markdown-broncode. Blokidentificatoren zijn niet hoofdlettergevoelig en BusyMark behoudt de oorspronkelijke spelling.", + "syntaxReferenceOpenApiLimitation": "Gebruik afgebakende YAML- of JSON-inhoud. BusyMark behandelt een willekeurig volledig YAML- of JSON-document niet als een OpenAPI-referentie.", + "syntaxReferenceSemanticDiagramBlocks": "Semantische codeblokken voor diagrammen", + "syntaxReferenceSemanticDiagramLimitation": "Semantische code-block- en src-vormen ondersteunen Mermaid, PlantUML en D2, niet OpenAPI, en alleen binnen Writerside-projecten.", + "syntaxReferenceReferencedDiagramSource": "Diagrambron met verwijzing", + "syntaxReferenceReferencedDiagramLimitation": "Paden moeten relatief zijn en binnen het geopende Writerside-project blijven; de afgebakende vorm met src is alleen voor Writerside Markdown.", + "syntaxReferenceMathematicsDescription": "BusyMark ondersteunt TeX-expressies, geen volledige TeX- of LaTeX-documenten.", + "syntaxReferenceInlineMath": "Wiskunde in de regel", + "syntaxReferenceGithubMath": "GitHub-wiskunde met dollar en backtick", + "syntaxReferenceDisplayMath": "Wiskunde als blok", + "syntaxReferenceMathFence": "math-blok", + "syntaxReferenceTexFence": "tex-blok", + "syntaxReferenceMathDelimitersLimitation": "BusyMark herkent \\(...\\) en \\[...\\] niet als Markdown-wiskundescheidingstekens.", + "syntaxReferenceTexFenceLimitation": "Buiten de Writerside-modus blijft een tex-blok een gewoon codeblok.", + "syntaxReferenceWritersideMathElement": "Writerside-math-element", + "syntaxReferenceWritersideMathElementLimitation": "Het math-element is semantische Writerside-syntaxis, geen toegestane ruwe HTML MathML.", + "syntaxReferenceSemanticTexBlock": "Semantisch TeX-codeblok", + "syntaxReferenceWritersideDescription": "Deze gerichte uitbreidingen worden alleen in geopende Writerside-projecten geïnterpreteerd.", + "syntaxReferenceAdmonitionBlockquote": "Waarschuwingscitaat", + "syntaxReferenceAdmonitionLimitation": "Een gewoon blokcitaat is een tip in Writerside Markdown; in gewone Markdown blijft het een normaal citaat.", + "syntaxReferenceSemanticAdmonitions": "Semantische waarschuwingen", + "syntaxReferenceSemanticMarkupLimitation": "Gewone Markdown interpreteert deze semantische Writerside-elementen niet.", + "syntaxReferenceCollapsibleHeading": "Inklapbare kop", + "syntaxReferenceCollapsibleCode": "Inklapbaar codeblok", + "syntaxReferenceSemanticCollapsibles": "Semantische inklapbare inhoud", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark ondersteunt inklapbare chapter-, procedure-, code-block- en definitielijstvormen, niet de volledige Writerside-catalogus.", + "syntaxReferenceSemanticCodeBlocks": "Semantische codeblokken voor wiskunde en diagrammen", + "syntaxReferenceVideo": "Writerside-video", + "syntaxReferenceVideoLimitation": "Lokale video gebruikt een lokale preview-src-afbeelding; gehoste bronnen moeten ondersteunde HTTPS-URL's van YouTube of Vimeo zijn.", "exportAsPdf": "Exporteren als PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 855c2769..ee53e806 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Otwórz dokumentację Markdown i HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Otwórz dokumentację składni", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Otwórz ustawienia BusyMark", "@shortcutSettingsDescription": { @@ -2376,136 +2376,136 @@ "gitErrorNetwork": "Operacja sieciowa Git nie powiodła się.", "gitErrorConflict": "Git zgłosił nierozwiązane konflikty.", "gitErrorCommandFailed": "Polecenie Git nie powiodło się.", - "markdownAndHtml": "Markdown i HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Dokumentacja składni", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Bloki Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Bloki Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Struktury blokowe obsługiwane w źródle Markdown i podglądzie.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Struktury blokowe obsługiwane w źródle Markdown i podglądzie.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown w tekście", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown w tekście", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Formatowanie w akapitach, elementach list i komórkach tabel.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Formatowanie w akapitach, elementach list i komórkach tabel.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Surowe bloki HTML", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Surowe bloki HTML", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Bezpieczne blokowe tagi HTML renderowane przez widżety podglądu BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Bezpieczne blokowe tagi HTML renderowane przez widżety podglądu BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Surowe tagi HTML w tekście", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Surowe tagi HTML w tekście", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Bezpieczne tagi HTML w tekście renderowane bez pokazywania dosłownych tagów.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Bezpieczne tagi HTML w tekście renderowane bez pokazywania dosłownych tagów.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Reguły bezpieczeństwa", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Reguły bezpieczeństwa", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Surowy HTML jest analizowany i oczyszczany przed renderowaniem podglądu.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Surowy HTML jest analizowany i oczyszczany przed renderowaniem podglądu.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Nagłówki", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Nagłówki", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Akapity", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Akapity", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Listy", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Listy", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Kontenery", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Kontenery", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Bloki tekstowe", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Bloki tekstowe", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figury i obrazy", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figury i obrazy", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Kod preformatowany", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Kod preformatowany", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Bloki rozwijane", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Bloki rozwijane", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Listy opisów", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Listy opisów", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Tagi formatowania", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Tagi formatowania", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Tagi kodu w tekście", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Tagi kodu w tekście", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Semantyczne tagi tekstu", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Semantyczne tagi tekstu", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Oczyszczony podgląd", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Oczyszczony podgląd", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Dozwolony HTML jest konwertowany na bloki podglądu BusyMark, a nie renderowany w przeglądarce.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Dozwolony HTML jest konwertowany na bloki podglądu BusyMark, a nie renderowany w przeglądarce.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Źródło jest zachowane", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Źródło jest zachowane", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Nieedytowany surowy HTML jest zapisywany dokładnie jako tekst źródłowy.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Nieedytowany surowy HTML jest zapisywany dokładnie jako tekst źródłowy.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown wewnątrz HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown wewnątrz HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Znaczniki Markdown wewnątrz surowego HTML są wyświetlane jako tekst dosłowny.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Znaczniki Markdown wewnątrz surowego HTML są wyświetlane jako tekst dosłowny.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Zablokowana aktywna zawartość", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Zablokowana aktywna zawartość", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Skrypty, style, ramki, formularze, SVG, MathML, zdarzenia i niebezpieczne atrybuty są blokowane.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Skrypty, style, ramki, formularze, SVG, MathML, zdarzenia i niebezpieczne atrybuty są blokowane.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Tylko bezpieczne adresy URL", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Tylko bezpieczne adresy URL", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Łącza dopuszczają http, https, mailto, tel, względne adresy URL i fragmenty; niebezpieczne schematy są blokowane.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Łącza dopuszczają http, https, mailto, tel, względne adresy URL i fragmenty; niebezpieczne schematy są blokowane.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Dodaj do Git", @@ -2712,6 +2712,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Kategoria", + "syntaxReferenceCategoryDiagramsAndApi": "Diagramy i API", + "syntaxReferenceCategoryMathematics": "Matematyka", + "syntaxReferenceExample": "Przykład", + "syntaxReferenceIdentifiers": "Identyfikatory i aliasy", + "syntaxReferenceScope": "Zakres", + "syntaxReferenceLimitation": "Ograniczenie BusyMark", + "syntaxReferenceOfficialDocumentation": "Oficjalna dokumentacja", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Zwykły Markdown i Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Tylko Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Tylko Markdown Writerside i XML Writerside", + "syntaxReferenceMarkdownDescription": "Podstawowe formy Markdown, które BusyMark umożliwia tworzyć i wyświetlać.", + "syntaxReferenceParagraphExample": "Akapit tekstu.", + "syntaxReferenceTableLimitation": "Tabele używają składni z pionowymi kreskami GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "dwie spacje na końcu wiersza, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark akceptuje ograniczony, bezpieczny podzbiór surowego HTML w źródle Markdown.", + "syntaxReferenceDiagramsDescription": "Bloki ogrodzone Mermaid, PlantUML, D2 i OpenAPI działają w źródle Markdown. Wielkość liter w identyfikatorach nie ma znaczenia, a BusyMark zachowuje ich oryginalną pisownię.", + "syntaxReferenceOpenApiLimitation": "Użyj ogrodzonej treści YAML lub JSON. BusyMark nie traktuje dowolnego całego dokumentu YAML lub JSON jako dokumentacji OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Semantyczne bloki kodu diagramów", + "syntaxReferenceSemanticDiagramLimitation": "Semantyczne formy code-block i src obsługują Mermaid, PlantUML i D2, ale nie OpenAPI, i tylko w projektach Writerside.", + "syntaxReferenceReferencedDiagramSource": "Źródło diagramu z odwołania", + "syntaxReferenceReferencedDiagramLimitation": "Ścieżki muszą być względne i pozostawać w otwartym projekcie Writerside; forma ogrodzona z src działa tylko w Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark obsługuje wyrażenia TeX, a nie kompletne dokumenty TeX lub LaTeX.", + "syntaxReferenceInlineMath": "Matematyka w wierszu", + "syntaxReferenceGithubMath": "Matematyka GitHub ze znakami dolara i grawisu", + "syntaxReferenceDisplayMath": "Matematyka blokowa", + "syntaxReferenceMathFence": "Blok ogrodzony math", + "syntaxReferenceTexFence": "Blok ogrodzony tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark nie rozpoznaje \\(...\\) ani \\[...\\] jako ograniczników matematycznych Markdown.", + "syntaxReferenceTexFenceLimitation": "Poza trybem Writerside blok tex pozostaje zwykłym blokiem kodu.", + "syntaxReferenceWritersideMathElement": "Element math Writerside", + "syntaxReferenceWritersideMathElementLimitation": "Element math jest semantyczną składnią Writerside, a nie dozwolonym surowym HTML MathML.", + "syntaxReferenceSemanticTexBlock": "Semantyczny blok kodu TeX", + "syntaxReferenceWritersideDescription": "Te wybrane rozszerzenia są interpretowane tylko w otwartych projektach Writerside.", + "syntaxReferenceAdmonitionBlockquote": "Cytat z uwagą", + "syntaxReferenceAdmonitionLimitation": "Zwykły cytat blokowy jest wskazówką w Markdown Writerside; w zwykłym Markdown pozostaje zwykłym cytatem.", + "syntaxReferenceSemanticAdmonitions": "Uwagi semantyczne", + "syntaxReferenceSemanticMarkupLimitation": "Zwykły Markdown nie interpretuje tych semantycznych elementów Writerside.", + "syntaxReferenceCollapsibleHeading": "Zwijany nagłówek", + "syntaxReferenceCollapsibleCode": "Zwijany blok kodu", + "syntaxReferenceSemanticCollapsibles": "Semantyczna zawartość zwijana", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark obsługuje zwijane formy chapter, procedure, code-block i list definicji, ale nie cały katalog Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Semantyczne bloki kodu matematyki i diagramów", + "syntaxReferenceVideo": "Wideo Writerside", + "syntaxReferenceVideoLimitation": "Lokalne wideo używa lokalnego obrazu preview-src; źródła hostowane muszą być obsługiwanymi adresami HTTPS YouTube lub Vimeo.", "exportAsPdf": "Eksportuj jako PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 66838741..9f8bac3f 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -1,3 +1,87 @@ { - "@@locale": "pt" + "@@locale": "pt", + "shortcutSyntaxReferenceDescription": "Abrir a referência de sintaxe", + "syntaxReference": "Referência de sintaxe", + "syntaxReferenceMarkdownBlocks": "Blocos Markdown", + "syntaxReferenceMarkdownBlocksDescription": "Estruturas de bloco compatíveis no código Markdown e na pré-visualização.", + "syntaxReferenceInlineFormatting": "Markdown em linha", + "syntaxReferenceInlineFormattingDescription": "Formatação dentro de parágrafos, itens de lista e células de tabela.", + "syntaxReferenceRawHtmlBlocks": "Blocos de HTML bruto", + "syntaxReferenceRawHtmlBlocksDescription": "Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.", + "syntaxReferenceRawHtmlInline": "Tags de HTML bruto em linha", + "syntaxReferenceRawHtmlInlineDescription": "Tags HTML em linha seguras renderizadas sem mostrar as tags literais.", + "syntaxReferenceSafety": "Regras de segurança", + "syntaxReferenceSafetyDescription": "O HTML bruto é analisado e higienizado antes da pré-visualização.", + "syntaxReferenceHeadings": "Títulos", + "syntaxReferenceParagraphs": "Parágrafos", + "syntaxReferenceLists": "Listas", + "syntaxReferenceHtmlContainers": "Contêineres", + "syntaxReferenceHtmlTextBlocks": "Blocos de texto", + "syntaxReferenceHtmlFigures": "Figuras e imagens", + "syntaxReferenceHtmlPreformatted": "Código pré-formatado", + "syntaxReferenceHtmlDisclosure": "Blocos expansíveis", + "syntaxReferenceHtmlDescriptionLists": "Listas de descrição", + "syntaxReferenceHtmlFormattingTags": "Tags de formatação", + "syntaxReferenceHtmlInlineCodeTags": "Tags de código em linha", + "syntaxReferenceHtmlNeutralInlineTags": "Tags de texto semântico", + "syntaxReferenceSanitizedPreview": "Pré-visualização higienizada", + "syntaxReferenceSanitizedPreviewDescription": "O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.", + "syntaxReferenceSourcePreserved": "Código-fonte preservado", + "syntaxReferenceSourcePreservedDescription": "HTML bruto não editado é salvo exatamente como texto fonte.", + "syntaxReferenceMarkdownInsideHtml": "Markdown dentro de HTML", + "syntaxReferenceMarkdownInsideHtmlDescription": "Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.", + "syntaxReferenceBlockedContent": "Conteúdo ativo bloqueado", + "syntaxReferenceBlockedContentDescription": "Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.", + "syntaxReferenceSafeUrls": "Somente URLs seguras", + "syntaxReferenceSafeUrlsDescription": "Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.", + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Categoria", + "syntaxReferenceCategoryDiagramsAndApi": "Diagramas e API", + "syntaxReferenceCategoryMathematics": "Matemática", + "syntaxReferenceExample": "Exemplo", + "syntaxReferenceIdentifiers": "Identificadores e aliases", + "syntaxReferenceScope": "Escopo", + "syntaxReferenceLimitation": "Limitação do BusyMark", + "syntaxReferenceOfficialDocumentation": "Documentação oficial", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown comum e Markdown do Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Somente Markdown do Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Somente Markdown e XML do Writerside", + "syntaxReferenceMarkdownDescription": "As formas essenciais de Markdown que o BusyMark pode criar e visualizar.", + "syntaxReferenceParagraphExample": "Um parágrafo de texto.", + "syntaxReferenceTableLimitation": "As tabelas usam a sintaxe de barras verticais do GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "dois espaços no fim da linha, \\,
    ", + "syntaxReferenceHtmlDescription": "O BusyMark aceita um subconjunto seguro e específico de HTML bruto no código Markdown.", + "syntaxReferenceDiagramsDescription": "Blocos cercados Mermaid, PlantUML, D2 e OpenAPI funcionam no código Markdown. Os identificadores não diferenciam maiúsculas de minúsculas, e o BusyMark preserva a grafia original.", + "syntaxReferenceOpenApiLimitation": "Use conteúdo YAML ou JSON em um bloco cercado. O BusyMark não trata um documento YAML ou JSON completo qualquer como referência OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Blocos de código semânticos para diagramas", + "syntaxReferenceSemanticDiagramLimitation": "As formas semânticas code-block e src aceitam Mermaid, PlantUML e D2, não OpenAPI, e somente em projetos Writerside.", + "syntaxReferenceReferencedDiagramSource": "Origem de diagrama referenciada", + "syntaxReferenceReferencedDiagramLimitation": "Os caminhos devem ser relativos e permanecer dentro do projeto Writerside aberto; a forma de bloco cercado com src é exclusiva do Markdown do Writerside.", + "syntaxReferenceMathematicsDescription": "O BusyMark aceita expressões TeX, não documentos TeX ou LaTeX completos.", + "syntaxReferenceInlineMath": "Matemática em linha", + "syntaxReferenceGithubMath": "Matemática do GitHub com cifrão e crase", + "syntaxReferenceDisplayMath": "Matemática em bloco", + "syntaxReferenceMathFence": "Bloco cercado math", + "syntaxReferenceTexFence": "Bloco cercado tex", + "syntaxReferenceMathDelimitersLimitation": "O BusyMark não reconhece \\(...\\) nem \\[...\\] como delimitadores matemáticos do Markdown.", + "syntaxReferenceTexFenceLimitation": "Fora do modo Writerside, um bloco tex continua sendo um bloco de código comum.", + "syntaxReferenceWritersideMathElement": "Elemento math do Writerside", + "syntaxReferenceWritersideMathElementLimitation": "O elemento math é sintaxe semântica do Writerside, não MathML HTML bruto permitido.", + "syntaxReferenceSemanticTexBlock": "Bloco de código TeX semântico", + "syntaxReferenceWritersideDescription": "Estas extensões específicas são interpretadas somente em projetos Writerside abertos.", + "syntaxReferenceAdmonitionBlockquote": "Citação de aviso", + "syntaxReferenceAdmonitionLimitation": "Uma citação simples é uma dica no Markdown do Writerside; no Markdown comum, continua sendo uma citação normal.", + "syntaxReferenceSemanticAdmonitions": "Avisos semânticos", + "syntaxReferenceSemanticMarkupLimitation": "O Markdown comum não interpreta estes elementos semânticos do Writerside.", + "syntaxReferenceCollapsibleHeading": "Título recolhível", + "syntaxReferenceCollapsibleCode": "Bloco de código recolhível", + "syntaxReferenceSemanticCollapsibles": "Conteúdo semântico recolhível", + "syntaxReferenceSemanticCollapsiblesLimitation": "O BusyMark aceita as formas recolhíveis chapter, procedure, code-block e lista de definições, não todo o catálogo do Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Blocos de código semânticos para matemática e diagramas", + "syntaxReferenceVideo": "Vídeo do Writerside", + "syntaxReferenceVideoLimitation": "Vídeo local usa uma imagem preview-src local; fontes hospedadas devem ser URLs HTTPS compatíveis do YouTube ou Vimeo." } diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index 4ba66dbc..3cb70dba 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Abrir a referência de Markdown e HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Abrir a referência de sintaxe", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Abrir as configurações do BusyMark", "@shortcutSettingsDescription": { @@ -2350,136 +2350,136 @@ "gitErrorNetwork": "A operação de rede do Git falhou.", "gitErrorConflict": "O Git relatou conflitos não resolvidos.", "gitErrorCommandFailed": "O comando Git falhou.", - "markdownAndHtml": "Markdown e HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Referência de sintaxe", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Blocos Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Blocos Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Estruturas de bloco compatíveis no código Markdown e na pré-visualização.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Estruturas de bloco compatíveis no código Markdown e na pré-visualização.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Markdown em linha", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Markdown em linha", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Formatação dentro de parágrafos, itens de lista e células de tabela.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Formatação dentro de parágrafos, itens de lista e células de tabela.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Blocos de HTML bruto", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Blocos de HTML bruto", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Tags de HTML bruto em linha", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Tags de HTML bruto em linha", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Tags HTML em linha seguras renderizadas sem mostrar as tags literais.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Tags HTML em linha seguras renderizadas sem mostrar as tags literais.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Regras de segurança", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Regras de segurança", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "O HTML bruto é analisado e higienizado antes da pré-visualização.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "O HTML bruto é analisado e higienizado antes da pré-visualização.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Títulos", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Títulos", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Parágrafos", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Parágrafos", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Listas", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Listas", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Contêineres", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Contêineres", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Blocos de texto", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Blocos de texto", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figuras e imagens", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figuras e imagens", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Código pré-formatado", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Código pré-formatado", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Blocos expansíveis", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Blocos expansíveis", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Listas de descrição", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Listas de descrição", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Tags de formatação", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Tags de formatação", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Tags de código em linha", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Tags de código em linha", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Tags de texto semântico", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Tags de texto semântico", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Pré-visualização higienizada", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Pré-visualização higienizada", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Código-fonte preservado", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Código-fonte preservado", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "HTML bruto não editado é salvo exatamente como texto fonte.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "HTML bruto não editado é salvo exatamente como texto fonte.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown dentro de HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown dentro de HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Conteúdo ativo bloqueado", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Conteúdo ativo bloqueado", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Somente URLs seguras", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Somente URLs seguras", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Adicionar ao Git", @@ -2686,6 +2686,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Categoria", + "syntaxReferenceCategoryDiagramsAndApi": "Diagramas e API", + "syntaxReferenceCategoryMathematics": "Matemática", + "syntaxReferenceExample": "Exemplo", + "syntaxReferenceIdentifiers": "Identificadores e aliases", + "syntaxReferenceScope": "Escopo", + "syntaxReferenceLimitation": "Limitação do BusyMark", + "syntaxReferenceOfficialDocumentation": "Documentação oficial", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown comum e Markdown do Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Somente Markdown do Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Somente Markdown e XML do Writerside", + "syntaxReferenceMarkdownDescription": "As formas essenciais de Markdown que o BusyMark pode criar e visualizar.", + "syntaxReferenceParagraphExample": "Um parágrafo de texto.", + "syntaxReferenceTableLimitation": "As tabelas usam a sintaxe de barras verticais do GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "dois espaços no fim da linha, \\,
    ", + "syntaxReferenceHtmlDescription": "O BusyMark aceita um subconjunto seguro e específico de HTML bruto no código Markdown.", + "syntaxReferenceDiagramsDescription": "Blocos cercados Mermaid, PlantUML, D2 e OpenAPI funcionam no código Markdown. Os identificadores não diferenciam maiúsculas de minúsculas, e o BusyMark preserva a grafia original.", + "syntaxReferenceOpenApiLimitation": "Use conteúdo YAML ou JSON em um bloco cercado. O BusyMark não trata um documento YAML ou JSON completo qualquer como referência OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Blocos de código semânticos para diagramas", + "syntaxReferenceSemanticDiagramLimitation": "As formas semânticas code-block e src aceitam Mermaid, PlantUML e D2, não OpenAPI, e somente em projetos Writerside.", + "syntaxReferenceReferencedDiagramSource": "Origem de diagrama referenciada", + "syntaxReferenceReferencedDiagramLimitation": "Os caminhos devem ser relativos e permanecer dentro do projeto Writerside aberto; a forma de bloco cercado com src é exclusiva do Markdown do Writerside.", + "syntaxReferenceMathematicsDescription": "O BusyMark aceita expressões TeX, não documentos TeX ou LaTeX completos.", + "syntaxReferenceInlineMath": "Matemática em linha", + "syntaxReferenceGithubMath": "Matemática do GitHub com cifrão e crase", + "syntaxReferenceDisplayMath": "Matemática em bloco", + "syntaxReferenceMathFence": "Bloco cercado math", + "syntaxReferenceTexFence": "Bloco cercado tex", + "syntaxReferenceMathDelimitersLimitation": "O BusyMark não reconhece \\(...\\) nem \\[...\\] como delimitadores matemáticos do Markdown.", + "syntaxReferenceTexFenceLimitation": "Fora do modo Writerside, um bloco tex continua sendo um bloco de código comum.", + "syntaxReferenceWritersideMathElement": "Elemento math do Writerside", + "syntaxReferenceWritersideMathElementLimitation": "O elemento math é sintaxe semântica do Writerside, não MathML HTML bruto permitido.", + "syntaxReferenceSemanticTexBlock": "Bloco de código TeX semântico", + "syntaxReferenceWritersideDescription": "Estas extensões específicas são interpretadas somente em projetos Writerside abertos.", + "syntaxReferenceAdmonitionBlockquote": "Citação de aviso", + "syntaxReferenceAdmonitionLimitation": "Uma citação simples é uma dica no Markdown do Writerside; no Markdown comum, continua sendo uma citação normal.", + "syntaxReferenceSemanticAdmonitions": "Avisos semânticos", + "syntaxReferenceSemanticMarkupLimitation": "O Markdown comum não interpreta estes elementos semânticos do Writerside.", + "syntaxReferenceCollapsibleHeading": "Título recolhível", + "syntaxReferenceCollapsibleCode": "Bloco de código recolhível", + "syntaxReferenceSemanticCollapsibles": "Conteúdo semântico recolhível", + "syntaxReferenceSemanticCollapsiblesLimitation": "O BusyMark aceita as formas recolhíveis chapter, procedure, code-block e lista de definições, não todo o catálogo do Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Blocos de código semânticos para matemática e diagramas", + "syntaxReferenceVideo": "Vídeo do Writerside", + "syntaxReferenceVideoLimitation": "Vídeo local usa uma imagem preview-src local; fontes hospedadas devem ser URLs HTTPS compatíveis do YouTube ou Vimeo.", "exportAsPdf": "Exportar como PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 27575e8c..e6f71a95 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Открыть справку по Markdown и HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Открыть справочник по синтаксису", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Открыть настройки BusyMark", "@shortcutSettingsDescription": { @@ -2376,136 +2376,136 @@ "gitErrorNetwork": "Сетевая операция Git не удалась.", "gitErrorConflict": "Git сообщил о неразрешённых конфликтах.", "gitErrorCommandFailed": "Не удалось выполнить команду Git.", - "markdownAndHtml": "Markdown и HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Справочник по синтаксису", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Блоки Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Блоки Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Блочные структуры, поддерживаемые в исходном Markdown и предварительном просмотре.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Блочные структуры, поддерживаемые в исходном Markdown и предварительном просмотре.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Встроенный Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Встроенный Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Форматирование внутри абзацев, элементов списков и ячеек таблиц.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Форматирование внутри абзацев, элементов списков и ячеек таблиц.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Блоки исходного HTML", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Блоки исходного HTML", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Безопасные блочные HTML-теги, отображаемые через виджеты предварительного просмотра BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Безопасные блочные HTML-теги, отображаемые через виджеты предварительного просмотра BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Встроенные HTML-теги", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Встроенные HTML-теги", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Безопасные встроенные HTML-теги отображаются без показа самих тегов.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Безопасные встроенные HTML-теги отображаются без показа самих тегов.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Правила безопасности", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Правила безопасности", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Исходный HTML разбирается и очищается перед отображением в предварительном просмотре.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Исходный HTML разбирается и очищается перед отображением в предварительном просмотре.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Заголовки", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Заголовки", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Абзацы", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Абзацы", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Списки", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Списки", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Контейнеры", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Контейнеры", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Текстовые блоки", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Текстовые блоки", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Фигуры и изображения", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Фигуры и изображения", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Предформатированный код", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Предформатированный код", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Раскрывающиеся блоки", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Раскрывающиеся блоки", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Списки описаний", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Списки описаний", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Теги форматирования", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Теги форматирования", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Встроенные теги кода", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Встроенные теги кода", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Семантические текстовые теги", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Семантические текстовые теги", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Очищенный предварительный просмотр", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Очищенный предварительный просмотр", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Разрешённый HTML преобразуется в блоки предварительного просмотра BusyMark, а не отображается в браузере.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Разрешённый HTML преобразуется в блоки предварительного просмотра BusyMark, а не отображается в браузере.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Исходный текст сохраняется", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Исходный текст сохраняется", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Неизменённый исходный HTML сохраняется в точности как исходный текст.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Неизменённый исходный HTML сохраняется в точности как исходный текст.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown внутри HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown внутри HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-разметка внутри исходного HTML отображается как обычный текст.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Markdown-разметка внутри исходного HTML отображается как обычный текст.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Активный контент заблокирован", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Активный контент заблокирован", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Скрипты, стили, фреймы, формы, SVG, MathML, события и небезопасные атрибуты блокируются.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Скрипты, стили, фреймы, формы, SVG, MathML, события и небезопасные атрибуты блокируются.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Только безопасные URL", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Только безопасные URL", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Ссылки допускают http, https, mailto, tel, относительные URL и фрагменты; небезопасные схемы блокируются.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Ссылки допускают http, https, mailto, tel, относительные URL и фрагменты; небезопасные схемы блокируются.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Добавить в Git", @@ -2712,6 +2712,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Категория", + "syntaxReferenceCategoryDiagramsAndApi": "Диаграммы и API", + "syntaxReferenceCategoryMathematics": "Математика", + "syntaxReferenceExample": "Пример", + "syntaxReferenceIdentifiers": "Идентификаторы и псевдонимы", + "syntaxReferenceScope": "Область применения", + "syntaxReferenceLimitation": "Ограничение BusyMark", + "syntaxReferenceOfficialDocumentation": "Официальная документация", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Обычный Markdown и Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Только Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Только Markdown Writerside и XML Writerside", + "syntaxReferenceMarkdownDescription": "Основные формы Markdown, которые BusyMark позволяет создавать и просматривать.", + "syntaxReferenceParagraphExample": "Абзац текста.", + "syntaxReferenceTableLimitation": "Таблицы используют синтаксис с вертикальными чертами GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "два пробела в конце строки, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark принимает ограниченное безопасное подмножество необработанного HTML в исходном тексте Markdown.", + "syntaxReferenceDiagramsDescription": "Ограждённые блоки Mermaid, PlantUML, D2 и OpenAPI работают в исходном тексте Markdown. Регистр идентификаторов не учитывается, а BusyMark сохраняет исходное написание.", + "syntaxReferenceOpenApiLimitation": "Используйте ограждённое содержимое YAML или JSON. BusyMark не считает произвольный целый документ YAML или JSON справочником OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Семантические блоки кода диаграмм", + "syntaxReferenceSemanticDiagramLimitation": "Семантические формы code-block и src поддерживают Mermaid, PlantUML и D2, но не OpenAPI, и только в проектах Writerside.", + "syntaxReferenceReferencedDiagramSource": "Ссылка на исходник диаграммы", + "syntaxReferenceReferencedDiagramLimitation": "Пути должны быть относительными и оставаться в открытом проекте Writerside; ограждённая форма с src работает только в Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark поддерживает выражения TeX, но не полные документы TeX или LaTeX.", + "syntaxReferenceInlineMath": "Встроенная формула", + "syntaxReferenceGithubMath": "Формула GitHub с долларом и обратной кавычкой", + "syntaxReferenceDisplayMath": "Выкладная формула", + "syntaxReferenceMathFence": "Ограждённый блок math", + "syntaxReferenceTexFence": "Ограждённый блок tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark не распознаёт \\(...\\) и \\[...\\] как математические разделители Markdown.", + "syntaxReferenceTexFenceLimitation": "Вне режима Writerside блок tex остаётся обычным блоком кода.", + "syntaxReferenceWritersideMathElement": "Элемент math Writerside", + "syntaxReferenceWritersideMathElementLimitation": "Элемент math — семантический синтаксис Writerside, а не разрешённый необработанный HTML MathML.", + "syntaxReferenceSemanticTexBlock": "Семантический блок кода TeX", + "syntaxReferenceWritersideDescription": "Эти отдельные расширения интерпретируются только в открытых проектах Writerside.", + "syntaxReferenceAdmonitionBlockquote": "Цитата-примечание", + "syntaxReferenceAdmonitionLimitation": "Обычная блочная цитата становится советом в Markdown Writerside, а в обычном Markdown остаётся цитатой.", + "syntaxReferenceSemanticAdmonitions": "Семантические примечания", + "syntaxReferenceSemanticMarkupLimitation": "Обычный Markdown не интерпретирует эти семантические элементы Writerside.", + "syntaxReferenceCollapsibleHeading": "Сворачиваемый заголовок", + "syntaxReferenceCollapsibleCode": "Сворачиваемый блок кода", + "syntaxReferenceSemanticCollapsibles": "Семантическое сворачиваемое содержимое", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark поддерживает сворачиваемые формы chapter, procedure, code-block и списка определений, но не весь каталог Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Семантические блоки кода для формул и диаграмм", + "syntaxReferenceVideo": "Видео Writerside", + "syntaxReferenceVideoLimitation": "Локальное видео использует локальное изображение preview-src; размещённые видео должны иметь поддерживаемые HTTPS-адреса YouTube или Vimeo.", "exportAsPdf": "Экспортировать в PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 6810b425..1bf89d3f 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Markdown ve HTML referansını açın", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Sözdizimi başvurusunu aç", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "BusyMark ayarlarını aç", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown ve HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Sözdizimi Başvurusu", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown blokları", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown blokları", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Markdown kaynağında ve önizlemesinde desteklenen blok yapıları.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Markdown kaynağında ve önizlemesinde desteklenen blok yapıları.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Satır içi biçimlendirme", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Satır içi biçimlendirme", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Paragrafların, liste öğelerinin ve tablo hücrelerinin içinde görünebilecek biçimlendirme.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Paragrafların, liste öğelerinin ve tablo hücrelerinin içinde görünebilecek biçimlendirme.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Ham HTML Blokları", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Ham HTML Blokları", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "BusyMark önizleme widget'ları aracılığıyla oluşturulan güvenli blok düzeyinde HTML etiketleri.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "BusyMark önizleme widget'ları aracılığıyla oluşturulan güvenli blok düzeyinde HTML etiketleri.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Ham HTML Satır İçi Etiketleri", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Ham HTML Satır İçi Etiketleri", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Gerçek etiketler gösterilmeden oluşturulan güvenli satır içi HTML etiketleri.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Gerçek etiketler gösterilmeden oluşturulan güvenli satır içi HTML etiketleri.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Güvenlik Kuralları", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Güvenlik Kuralları", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Ham HTML, önizleme oluşturmadan önce ayrıştırılır ve arındırılır.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Ham HTML, önizleme oluşturmadan önce ayrıştırılır ve arındırılır.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Başlıklar", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Başlıklar", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Paragraflar", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Paragraflar", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Listeler", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Listeler", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Konteynerler", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Konteynerler", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Metin blokları", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Metin blokları", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Şekiller ve görseller", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Şekiller ve görseller", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Önceden biçimlendirilmiş kod", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Önceden biçimlendirilmiş kod", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Açıklama blokları", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Açıklama blokları", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Açıklama listeleri", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Açıklama listeleri", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Etiketleri biçimlendirme", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Etiketleri biçimlendirme", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Satır içi kod etiketleri", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Satır içi kod etiketleri", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Anlamsal metin etiketleri", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Anlamsal metin etiketleri", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Temizlenmiş önizleme", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Temizlenmiş önizleme", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "İzin verilen HTML, tarayıcıda oluşturulmaz, BusyMark önizleme bloklarına dönüştürülür.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "İzin verilen HTML, tarayıcıda oluşturulmaz, BusyMark önizleme bloklarına dönüştürülür.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Kaynak korunur", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Kaynak korunur", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Düzenlenmemiş ham HTML, tam olarak kaynak metin olarak kaydedilir.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Düzenlenmemiş ham HTML, tam olarak kaynak metin olarak kaydedilir.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "HTML içindeki Markdown", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "HTML içindeki Markdown", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Ham HTML içindeki Markdown işaretleri düz metin olarak görüntülenir.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Ham HTML içindeki Markdown işaretleri düz metin olarak görüntülenir.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Engellenen etkin içerik", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Engellenen etkin içerik", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Komut dosyaları, stiller, çerçeveler, formlar, SVG, MathML, olaylar ve güvenli olmayan özellikler engellenir.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Komut dosyaları, stiller, çerçeveler, formlar, SVG, MathML, olaylar ve güvenli olmayan özellikler engellenir.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Yalnızca güvenli URL'ler", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Yalnızca güvenli URL'ler", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Bağlantılar http, https, mailto, tel, göreli ve parça URL'lerine izin verir; güvenli olmayan şemalar engellenir.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Bağlantılar http, https, mailto, tel, göreli ve parça URL'lerine izin verir; güvenli olmayan şemalar engellenir.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Kategori", + "syntaxReferenceCategoryDiagramsAndApi": "Diyagramlar ve API", + "syntaxReferenceCategoryMathematics": "Matematik", + "syntaxReferenceExample": "Örnek", + "syntaxReferenceIdentifiers": "Tanımlayıcılar ve diğer adlar", + "syntaxReferenceScope": "Kapsam", + "syntaxReferenceLimitation": "BusyMark sınırlaması", + "syntaxReferenceOfficialDocumentation": "Resmî belgeler", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Normal Markdown ve Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "Yalnızca Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Yalnızca Writerside Markdown ve Writerside XML", + "syntaxReferenceMarkdownDescription": "BusyMark'ın yazabildiği ve önizleyebildiği temel Markdown biçimleri.", + "syntaxReferenceParagraphExample": "Bir metin paragrafı.", + "syntaxReferenceTableLimitation": "Tablolar GitHub Flavored Markdown dikey çizgi sözdizimini kullanır.", + "syntaxReferenceHardBreakIdentifiers": "satır sonunda iki boşluk, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark, Markdown kaynağında sınırlı ve güvenli bir ham HTML alt kümesini kabul eder.", + "syntaxReferenceDiagramsDescription": "Çitle çevrili Mermaid, PlantUML, D2 ve OpenAPI blokları Markdown kaynağında çalışır. Çit tanımlayıcıları büyük/küçük harfe duyarlı değildir ve BusyMark özgün yazımı korur.", + "syntaxReferenceOpenApiLimitation": "Çitle çevrili YAML veya JSON içeriği kullanın. BusyMark rastgele bir tam YAML ya da JSON belgesini OpenAPI başvurusu olarak değerlendirmez.", + "syntaxReferenceSemanticDiagramBlocks": "Anlamsal diyagram kod blokları", + "syntaxReferenceSemanticDiagramLimitation": "Anlamsal code-block ve src biçimleri Mermaid, PlantUML ve D2'yi destekler; OpenAPI'yi desteklemez ve yalnızca Writerside projelerinde çalışır.", + "syntaxReferenceReferencedDiagramSource": "Başvurulan diyagram kaynağı", + "syntaxReferenceReferencedDiagramLimitation": "Yollar göreli olmalı ve açılan Writerside projesinin içinde kalmalıdır; çit ve src biçimi yalnızca Writerside Markdown içindir.", + "syntaxReferenceMathematicsDescription": "BusyMark TeX ifadelerini destekler; tam TeX veya LaTeX belgelerini desteklemez.", + "syntaxReferenceInlineMath": "Satır içi matematik", + "syntaxReferenceGithubMath": "Dolar ve ters tırnaklı GitHub matematiği", + "syntaxReferenceDisplayMath": "Blok matematiği", + "syntaxReferenceMathFence": "math çiti", + "syntaxReferenceTexFence": "tex çiti", + "syntaxReferenceMathDelimitersLimitation": "BusyMark \\(...\\) veya \\[...\\] dizilerini Markdown matematik sınırlayıcıları olarak tanımaz.", + "syntaxReferenceTexFenceLimitation": "Writerside modu dışında tex çiti normal bir kod bloğu olarak kalır.", + "syntaxReferenceWritersideMathElement": "Writerside math öğesi", + "syntaxReferenceWritersideMathElementLimitation": "math öğesi anlamsal Writerside sözdizimidir; izin verilen ham HTML MathML değildir.", + "syntaxReferenceSemanticTexBlock": "Anlamsal TeX kod bloğu", + "syntaxReferenceWritersideDescription": "Bu odaklı uzantılar yalnızca açılmış Writerside projelerinde yorumlanır.", + "syntaxReferenceAdmonitionBlockquote": "Uyarı blok alıntısı", + "syntaxReferenceAdmonitionLimitation": "Düz blok alıntısı Writerside Markdown'da ipucudur; normal Markdown'da sıradan alıntı olarak kalır.", + "syntaxReferenceSemanticAdmonitions": "Anlamsal uyarılar", + "syntaxReferenceSemanticMarkupLimitation": "Normal Markdown bu anlamsal Writerside öğelerini yorumlamaz.", + "syntaxReferenceCollapsibleHeading": "Daraltılabilir başlık", + "syntaxReferenceCollapsibleCode": "Daraltılabilir kod çiti", + "syntaxReferenceSemanticCollapsibles": "Anlamsal daraltılabilir içerik", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark daraltılabilir chapter, procedure, code-block ve tanım listesi biçimlerini destekler; Writerside kataloğunun tamamını desteklemez.", + "syntaxReferenceSemanticCodeBlocks": "Matematik ve diyagramlar için anlamsal kod blokları", + "syntaxReferenceVideo": "Writerside videosu", + "syntaxReferenceVideoLimitation": "Yerel video yerel bir preview-src görseli kullanır; barındırılan kaynaklar desteklenen HTTPS YouTube veya Vimeo adresleri olmalıdır.", "exportAsPdf": "PDF olarak dışa aktar", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index ea40de79..27a61f69 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -440,9 +440,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Відкрити довідку з Markdown і HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Відкрити довідник із синтаксису", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Відкрити налаштування BusyMark", "@shortcutSettingsDescription": { @@ -2376,136 +2376,136 @@ "gitErrorNetwork": "Не вдалося виконати мережеву операцію Git.", "gitErrorConflict": "Git повідомив про нерозв’язані конфлікти.", "gitErrorCommandFailed": "Не вдалося виконати команду Git.", - "markdownAndHtml": "Markdown і HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Довідник із синтаксису", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Блоки Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Блоки Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Блокові структури, що підтримуються у вихідному Markdown і попередньому перегляді.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Блокові структури, що підтримуються у вихідному Markdown і попередньому перегляді.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Вбудований Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Вбудований Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Форматування всередині абзаців, елементів списків і комірок таблиць.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Форматування всередині абзаців, елементів списків і комірок таблиць.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Блоки необробленого HTML", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Блоки необробленого HTML", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Безпечні блокові HTML-теги, що відображаються через віджети перегляду BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Безпечні блокові HTML-теги, що відображаються через віджети перегляду BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Вбудовані HTML-теги", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Вбудовані HTML-теги", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Безпечні вбудовані HTML-теги відображаються без показу самих тегів.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Безпечні вбудовані HTML-теги відображаються без показу самих тегів.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Правила безпеки", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Правила безпеки", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "Необроблений HTML аналізується й очищується перед попереднім переглядом.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "Необроблений HTML аналізується й очищується перед попереднім переглядом.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Заголовки", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Заголовки", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Абзаци", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Абзаци", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Списки", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Списки", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Контейнери", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Контейнери", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Текстові блоки", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Текстові блоки", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Фігури та зображення", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Фігури та зображення", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Попередньо форматований код", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Попередньо форматований код", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Розкривні блоки", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Розкривні блоки", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Списки описів", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Списки описів", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Теги форматування", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Теги форматування", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Вбудовані теги коду", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Вбудовані теги коду", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Семантичні текстові теги", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Семантичні текстові теги", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Очищений перегляд", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Очищений перегляд", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "Дозволений HTML перетворюється на блоки перегляду BusyMark, а не відтворюється в браузері.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "Дозволений HTML перетворюється на блоки перегляду BusyMark, а не відтворюється в браузері.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Вихідний текст зберігається", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Вихідний текст зберігається", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "Незмінений необроблений HTML зберігається точно як вихідний текст.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "Незмінений необроблений HTML зберігається точно як вихідний текст.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown всередині HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown всередині HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Markdown-розмітка всередині необробленого HTML відображається як звичайний текст.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Markdown-розмітка всередині необробленого HTML відображається як звичайний текст.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Активний вміст заблоковано", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Активний вміст заблоковано", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Скрипти, стилі, фрейми, форми, SVG, MathML, події та небезпечні атрибути блокуються.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Скрипти, стилі, фрейми, форми, SVG, MathML, події та небезпечні атрибути блокуються.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Лише безпечні URL", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Лише безпечні URL", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Посилання дозволяють http, https, mailto, tel, відносні URL і фрагменти; небезпечні схеми блокуються.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Посилання дозволяють http, https, mailto, tel, відносні URL і фрагменти; небезпечні схеми блокуються.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, "addToGit": "Додати до Git", @@ -2712,6 +2712,56 @@ } } }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Категорія", + "syntaxReferenceCategoryDiagramsAndApi": "Діаграми й API", + "syntaxReferenceCategoryMathematics": "Математика", + "syntaxReferenceExample": "Приклад", + "syntaxReferenceIdentifiers": "Ідентифікатори й псевдоніми", + "syntaxReferenceScope": "Область застосування", + "syntaxReferenceLimitation": "Обмеження BusyMark", + "syntaxReferenceOfficialDocumentation": "Офіційна документація", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Звичайний Markdown і Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Лише Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Лише Markdown Writerside і XML Writerside", + "syntaxReferenceMarkdownDescription": "Основні форми Markdown, які BusyMark дає змогу створювати й переглядати.", + "syntaxReferenceParagraphExample": "Абзац тексту.", + "syntaxReferenceTableLimitation": "Таблиці використовують синтаксис із вертикальними рисками GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "два пробіли в кінці рядка, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark приймає обмежену безпечну підмножину необробленого HTML у вихідному тексті Markdown.", + "syntaxReferenceDiagramsDescription": "Огороджені блоки Mermaid, PlantUML, D2 й OpenAPI працюють у вихідному тексті Markdown. Регістр ідентифікаторів не враховується, а BusyMark зберігає початкове написання.", + "syntaxReferenceOpenApiLimitation": "Використовуйте огороджений вміст YAML або JSON. BusyMark не вважає довільний цілий документ YAML або JSON довідником OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Семантичні блоки коду діаграм", + "syntaxReferenceSemanticDiagramLimitation": "Семантичні форми code-block і src підтримують Mermaid, PlantUML і D2, але не OpenAPI, і лише в проєктах Writerside.", + "syntaxReferenceReferencedDiagramSource": "Посилання на джерело діаграми", + "syntaxReferenceReferencedDiagramLimitation": "Шляхи мають бути відносними й залишатися у відкритому проєкті Writerside; огороджена форма з src працює лише в Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark підтримує вирази TeX, але не повні документи TeX або LaTeX.", + "syntaxReferenceInlineMath": "Вбудована формула", + "syntaxReferenceGithubMath": "Формула GitHub із доларом і зворотною лапкою", + "syntaxReferenceDisplayMath": "Викладна формула", + "syntaxReferenceMathFence": "Огороджений блок math", + "syntaxReferenceTexFence": "Огороджений блок tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark не розпізнає \\(...\\) і \\[...\\] як математичні роздільники Markdown.", + "syntaxReferenceTexFenceLimitation": "Поза режимом Writerside блок tex залишається звичайним блоком коду.", + "syntaxReferenceWritersideMathElement": "Елемент math Writerside", + "syntaxReferenceWritersideMathElementLimitation": "Елемент math — це семантичний синтаксис Writerside, а не дозволений необроблений HTML MathML.", + "syntaxReferenceSemanticTexBlock": "Семантичний блок коду TeX", + "syntaxReferenceWritersideDescription": "Ці окремі розширення інтерпретуються лише у відкритих проєктах Writerside.", + "syntaxReferenceAdmonitionBlockquote": "Цитата-примітка", + "syntaxReferenceAdmonitionLimitation": "Звичайна блокова цитата стає порадою в Markdown Writerside, а у звичайному Markdown залишається цитатою.", + "syntaxReferenceSemanticAdmonitions": "Семантичні примітки", + "syntaxReferenceSemanticMarkupLimitation": "Звичайний Markdown не інтерпретує ці семантичні елементи Writerside.", + "syntaxReferenceCollapsibleHeading": "Згортаний заголовок", + "syntaxReferenceCollapsibleCode": "Згортаний блок коду", + "syntaxReferenceSemanticCollapsibles": "Семантичний згортаний вміст", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark підтримує згортані форми chapter, procedure, code-block і списку визначень, але не весь каталог Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Семантичні блоки коду для формул і діаграм", + "syntaxReferenceVideo": "Відео Writerside", + "syntaxReferenceVideoLimitation": "Локальне відео використовує локальне зображення preview-src; розміщені відео повинні мати підтримувані HTTPS-адреси YouTube або Vimeo.", "exportAsPdf": "Експортувати як PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active Markdown document as PDF." diff --git a/lib/l10n/app_vi.arb b/lib/l10n/app_vi.arb index cfc9ea87..d346b7a8 100644 --- a/lib/l10n/app_vi.arb +++ b/lib/l10n/app_vi.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "Mở tham chiếu Markdown và HTML", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "Mở tham chiếu cú pháp", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "Mở cài đặt BusyMark", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown và HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "Tham chiếu cú pháp", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Khối Markdown", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Khối Markdown", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Các cấu trúc khối được hỗ trợ trong mã nguồn và bản xem trước Markdown.", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Các cấu trúc khối được hỗ trợ trong mã nguồn và bản xem trước Markdown.", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "Định dạng Markdown nội tuyến", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "Định dạng Markdown nội tuyến", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "Định dạng có thể xuất hiện trong đoạn văn, mục danh sách và ô bảng.", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "Định dạng có thể xuất hiện trong đoạn văn, mục danh sách và ô bảng.", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "Khối HTML thô", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "Khối HTML thô", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "Các thẻ HTML cấp khối an toàn được kết xuất thông qua các tiện ích xem trước của BusyMark.", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "Các thẻ HTML cấp khối an toàn được kết xuất thông qua các tiện ích xem trước của BusyMark.", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "Thẻ HTML nội tuyến thô", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "Thẻ HTML nội tuyến thô", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "Các thẻ HTML nội tuyến an toàn được kết xuất mà không hiển thị thẻ theo nghĩa đen.", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "Các thẻ HTML nội tuyến an toàn được kết xuất mà không hiển thị thẻ theo nghĩa đen.", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "Quy tắc an toàn", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "Quy tắc an toàn", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "HTML thô được phân tích cú pháp và làm sạch trước khi kết xuất bản xem trước.", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "HTML thô được phân tích cú pháp và làm sạch trước khi kết xuất bản xem trước.", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "Tiêu đề", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "Tiêu đề", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "Đoạn văn", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "Đoạn văn", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "Danh sách", - "@markdownHtmlLists": { + "syntaxReferenceLists": "Danh sách", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "Vùng chứa", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "Vùng chứa", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "Khối văn bản", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "Khối văn bản", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "Figure và hình ảnh", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "Figure và hình ảnh", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "Mã định dạng sẵn", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "Mã định dạng sẵn", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "Khối mở rộng", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "Khối mở rộng", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "Danh sách mô tả", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "Danh sách mô tả", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "Thẻ định dạng", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "Thẻ định dạng", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "Thẻ mã nội tuyến", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "Thẻ mã nội tuyến", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "Thẻ văn bản ngữ nghĩa", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "Thẻ văn bản ngữ nghĩa", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "Bản xem trước đã làm sạch", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "Bản xem trước đã làm sạch", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "HTML được cho phép được chuyển thành các khối xem trước của BusyMark, không được kết xuất trong trình duyệt.", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "HTML được cho phép được chuyển thành các khối xem trước của BusyMark, không được kết xuất trong trình duyệt.", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "Giữ nguyên mã nguồn", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "Giữ nguyên mã nguồn", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "HTML thô chưa chỉnh sửa được lưu lại chính xác như văn bản mã nguồn.", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "HTML thô chưa chỉnh sửa được lưu lại chính xác như văn bản mã nguồn.", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "Markdown bên trong HTML", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "Markdown bên trong HTML", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "Các dấu Markdown bên trong HTML thô được kết xuất như văn bản theo nghĩa đen.", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "Các dấu Markdown bên trong HTML thô được kết xuất như văn bản theo nghĩa đen.", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "Nội dung hoạt động bị chặn", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "Nội dung hoạt động bị chặn", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "Script, style, frame, form, SVG, MathML, sự kiện và các thuộc tính không an toàn bị chặn.", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "Script, style, frame, form, SVG, MathML, sự kiện và các thuộc tính không an toàn bị chặn.", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "Chỉ URL an toàn", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "Chỉ URL an toàn", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "Liên kết cho phép URL http, https, mailto, tel, tương đối và fragment; các scheme không an toàn bị chặn.", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "Liên kết cho phép URL http, https, mailto, tel, tương đối và fragment; các scheme không an toàn bị chặn.", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "Danh mục", + "syntaxReferenceCategoryDiagramsAndApi": "Sơ đồ và API", + "syntaxReferenceCategoryMathematics": "Toán học", + "syntaxReferenceExample": "Ví dụ", + "syntaxReferenceIdentifiers": "Định danh và bí danh", + "syntaxReferenceScope": "Phạm vi", + "syntaxReferenceLimitation": "Giới hạn của BusyMark", + "syntaxReferenceOfficialDocumentation": "Tài liệu chính thức", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "Markdown thông thường và Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdown": "Chỉ Markdown Writerside", + "syntaxReferenceScopeWritersideMarkdownAndXml": "Chỉ Markdown Writerside và XML Writerside", + "syntaxReferenceMarkdownDescription": "Các dạng Markdown cốt lõi mà BusyMark có thể soạn và xem trước.", + "syntaxReferenceParagraphExample": "Một đoạn văn bản.", + "syntaxReferenceTableLimitation": "Bảng dùng cú pháp dấu gạch đứng của GitHub Flavored Markdown.", + "syntaxReferenceHardBreakIdentifiers": "hai dấu cách ở cuối dòng, \\,
    ", + "syntaxReferenceHtmlDescription": "BusyMark chấp nhận một tập con HTML thô an toàn, có giới hạn trong mã nguồn Markdown.", + "syntaxReferenceDiagramsDescription": "Các khối có hàng rào Mermaid, PlantUML, D2 và OpenAPI hoạt động trong mã nguồn Markdown. Định danh hàng rào không phân biệt hoa thường và BusyMark giữ nguyên cách viết ban đầu.", + "syntaxReferenceOpenApiLimitation": "Dùng nội dung YAML hoặc JSON có hàng rào. BusyMark không coi một tài liệu YAML hoặc JSON toàn tệp bất kỳ là tham chiếu OpenAPI.", + "syntaxReferenceSemanticDiagramBlocks": "Khối mã ngữ nghĩa cho sơ đồ", + "syntaxReferenceSemanticDiagramLimitation": "Dạng ngữ nghĩa code-block và src hỗ trợ Mermaid, PlantUML và D2, không hỗ trợ OpenAPI, và chỉ dùng trong dự án Writerside.", + "syntaxReferenceReferencedDiagramSource": "Nguồn sơ đồ được tham chiếu", + "syntaxReferenceReferencedDiagramLimitation": "Đường dẫn phải tương đối và nằm trong dự án Writerside đang mở; dạng hàng rào kèm src chỉ dành cho Markdown Writerside.", + "syntaxReferenceMathematicsDescription": "BusyMark hỗ trợ biểu thức TeX, không hỗ trợ tài liệu TeX hoặc LaTeX hoàn chỉnh.", + "syntaxReferenceInlineMath": "Toán học nội dòng", + "syntaxReferenceGithubMath": "Toán học GitHub với dấu đô la và dấu huyền", + "syntaxReferenceDisplayMath": "Toán học dạng khối", + "syntaxReferenceMathFence": "Hàng rào math", + "syntaxReferenceTexFence": "Hàng rào tex", + "syntaxReferenceMathDelimitersLimitation": "BusyMark không nhận dạng \\(...\\) hoặc \\[...\\] là dấu phân cách toán học Markdown.", + "syntaxReferenceTexFenceLimitation": "Ngoài chế độ Writerside, hàng rào tex vẫn là khối mã thông thường.", + "syntaxReferenceWritersideMathElement": "Phần tử math của Writerside", + "syntaxReferenceWritersideMathElementLimitation": "Phần tử math là cú pháp Writerside ngữ nghĩa, không phải HTML MathML thô được phép.", + "syntaxReferenceSemanticTexBlock": "Khối mã TeX ngữ nghĩa", + "syntaxReferenceWritersideDescription": "Các phần mở rộng trọng tâm này chỉ được diễn giải trong dự án Writerside đang mở.", + "syntaxReferenceAdmonitionBlockquote": "Trích dẫn khối lưu ý", + "syntaxReferenceAdmonitionLimitation": "Trích dẫn khối thuần là mẹo trong Markdown Writerside; trong Markdown thông thường, nó vẫn là trích dẫn thường.", + "syntaxReferenceSemanticAdmonitions": "Lưu ý ngữ nghĩa", + "syntaxReferenceSemanticMarkupLimitation": "Markdown thông thường không diễn giải các phần tử Writerside ngữ nghĩa này.", + "syntaxReferenceCollapsibleHeading": "Tiêu đề có thể thu gọn", + "syntaxReferenceCollapsibleCode": "Hàng rào mã có thể thu gọn", + "syntaxReferenceSemanticCollapsibles": "Nội dung ngữ nghĩa có thể thu gọn", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark hỗ trợ các dạng chapter, procedure, code-block và danh sách định nghĩa có thể thu gọn, không hỗ trợ toàn bộ danh mục Writerside.", + "syntaxReferenceSemanticCodeBlocks": "Khối mã ngữ nghĩa cho toán học và sơ đồ", + "syntaxReferenceVideo": "Video Writerside", + "syntaxReferenceVideoLimitation": "Video cục bộ dùng ảnh preview-src cục bộ; nguồn lưu trữ phải là URL HTTPS YouTube hoặc Vimeo được hỗ trợ.", "exportAsPdf": "Xuất dưới dạng PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 90fcd9f3..9e6251ab 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -1,3 +1,87 @@ { - "@@locale": "zh" + "@@locale": "zh", + "shortcutSyntaxReferenceDescription": "打开语法参考", + "syntaxReference": "语法参考", + "syntaxReferenceMarkdownBlocks": "Markdown 块", + "syntaxReferenceMarkdownBlocksDescription": "Markdown 源代码和预览中支持的块结构。", + "syntaxReferenceInlineFormatting": "行内 Markdown", + "syntaxReferenceInlineFormattingDescription": "可出现在段落、列表项和表格单元格中的格式。", + "syntaxReferenceRawHtmlBlocks": "原始 HTML 块", + "syntaxReferenceRawHtmlBlocksDescription": "通过 BusyMark 预览组件渲染的安全块级 HTML 标签。", + "syntaxReferenceRawHtmlInline": "原始 HTML 行内标签", + "syntaxReferenceRawHtmlInlineDescription": "安全的行内 HTML 标签,渲染时不会显示字面标签。", + "syntaxReferenceSafety": "安全规则", + "syntaxReferenceSafetyDescription": "原始 HTML 会在预览前进行解析和清理。", + "syntaxReferenceHeadings": "标题", + "syntaxReferenceParagraphs": "段落", + "syntaxReferenceLists": "列表", + "syntaxReferenceHtmlContainers": "容器", + "syntaxReferenceHtmlTextBlocks": "文本块", + "syntaxReferenceHtmlFigures": "图和图像", + "syntaxReferenceHtmlPreformatted": "预格式化代码", + "syntaxReferenceHtmlDisclosure": "折叠块", + "syntaxReferenceHtmlDescriptionLists": "描述列表", + "syntaxReferenceHtmlFormattingTags": "格式标签", + "syntaxReferenceHtmlInlineCodeTags": "行内代码标签", + "syntaxReferenceHtmlNeutralInlineTags": "语义文本标签", + "syntaxReferenceSanitizedPreview": "已清理的预览", + "syntaxReferenceSanitizedPreviewDescription": "允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。", + "syntaxReferenceSourcePreserved": "保留源代码", + "syntaxReferenceSourcePreservedDescription": "未经编辑的原始 HTML 会按源文本原样保存。", + "syntaxReferenceMarkdownInsideHtml": "HTML 内的 Markdown", + "syntaxReferenceMarkdownInsideHtmlDescription": "原始 HTML 内的 Markdown 标记会按字面文本渲染。", + "syntaxReferenceBlockedContent": "被阻止的活动内容", + "syntaxReferenceBlockedContentDescription": "脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。", + "syntaxReferenceSafeUrls": "仅允许安全 URL", + "syntaxReferenceSafeUrlsDescription": "链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。", + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "类别", + "syntaxReferenceCategoryDiagramsAndApi": "图表和 API", + "syntaxReferenceCategoryMathematics": "数学", + "syntaxReferenceExample": "示例", + "syntaxReferenceIdentifiers": "标识符和别名", + "syntaxReferenceScope": "适用范围", + "syntaxReferenceLimitation": "BusyMark 限制", + "syntaxReferenceOfficialDocumentation": "官方文档", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "普通 Markdown 和 Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "仅 Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "仅 Writerside Markdown 和 Writerside XML", + "syntaxReferenceMarkdownDescription": "BusyMark 可以编写和预览的核心 Markdown 形式。", + "syntaxReferenceParagraphExample": "一段文本。", + "syntaxReferenceTableLimitation": "表格使用 GitHub Flavored Markdown 的竖线语法。", + "syntaxReferenceHardBreakIdentifiers": "行尾两个空格、\\、
    ", + "syntaxReferenceHtmlDescription": "BusyMark 在 Markdown 源码中仅接受有限且安全的原始 HTML 子集。", + "syntaxReferenceDiagramsDescription": "带围栏的 Mermaid、PlantUML、D2 和 OpenAPI 块可在 Markdown 源码中使用。围栏标识符不区分大小写,BusyMark 会保留原始拼写。", + "syntaxReferenceOpenApiLimitation": "请使用带围栏的 YAML 或 JSON 内容。BusyMark 不会将任意完整的 YAML 或 JSON 文档视为 OpenAPI 参考。", + "syntaxReferenceSemanticDiagramBlocks": "图表的语义代码块", + "syntaxReferenceSemanticDiagramLimitation": "语义 code-block 和 src 形式仅支持 Mermaid、PlantUML 和 D2,不支持 OpenAPI,且只能在 Writerside 项目中使用。", + "syntaxReferenceReferencedDiagramSource": "引用的图表源", + "syntaxReferenceReferencedDiagramLimitation": "路径必须是相对路径并位于已打开的 Writerside 项目内;围栏加 src 的形式仅适用于 Writerside Markdown。", + "syntaxReferenceMathematicsDescription": "BusyMark 支持 TeX 表达式,但不支持完整的 TeX 或 LaTeX 文档。", + "syntaxReferenceInlineMath": "行内数学公式", + "syntaxReferenceGithubMath": "使用美元符号和反引号的 GitHub 数学公式", + "syntaxReferenceDisplayMath": "显示数学公式", + "syntaxReferenceMathFence": "math 围栏", + "syntaxReferenceTexFence": "tex 围栏", + "syntaxReferenceMathDelimitersLimitation": "BusyMark 不会将 \\(...\\) 或 \\[...\\] 识别为 Markdown 数学分隔符。", + "syntaxReferenceTexFenceLimitation": "在 Writerside 模式之外,tex 围栏仍是普通代码块。", + "syntaxReferenceWritersideMathElement": "Writerside math 元素", + "syntaxReferenceWritersideMathElementLimitation": "math 元素是语义 Writerside 语法,不是允许的原始 HTML MathML。", + "syntaxReferenceSemanticTexBlock": "语义 TeX 代码块", + "syntaxReferenceWritersideDescription": "这些特定扩展仅在已打开的 Writerside 项目中解析。", + "syntaxReferenceAdmonitionBlockquote": "提示块引用", + "syntaxReferenceAdmonitionLimitation": "普通块引用在 Writerside Markdown 中是提示;在普通 Markdown 中仍是普通引用。", + "syntaxReferenceSemanticAdmonitions": "语义提示", + "syntaxReferenceSemanticMarkupLimitation": "普通 Markdown 不会解析这些 Writerside 语义元素。", + "syntaxReferenceCollapsibleHeading": "可折叠标题", + "syntaxReferenceCollapsibleCode": "可折叠代码围栏", + "syntaxReferenceSemanticCollapsibles": "语义可折叠内容", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark 支持可折叠的 chapter、procedure、code-block 和定义列表形式,但不支持完整的 Writerside 目录。", + "syntaxReferenceSemanticCodeBlocks": "数学和图表的语义代码块", + "syntaxReferenceVideo": "Writerside 视频", + "syntaxReferenceVideoLimitation": "本地视频使用本地 preview-src 图像;托管视频源必须是受支持的 YouTube 或 Vimeo HTTPS URL。" } diff --git a/lib/l10n/app_zh_CN.arb b/lib/l10n/app_zh_CN.arb index 9925ea17..d9234707 100644 --- a/lib/l10n/app_zh_CN.arb +++ b/lib/l10n/app_zh_CN.arb @@ -570,9 +570,9 @@ "@shortcutKeyboardShortcutsDescription": { "description": "Keyboard shortcut description for opening shortcuts." }, - "shortcutMarkdownAndHtmlDescription": "打开 Markdown 和 HTML 参考", - "@shortcutMarkdownAndHtmlDescription": { - "description": "Keyboard shortcut description for opening the Markdown and HTML reference." + "shortcutSyntaxReferenceDescription": "打开语法参考", + "@shortcutSyntaxReferenceDescription": { + "description": "Keyboard shortcut description for opening the Syntax Reference." }, "shortcutSettingsDescription": "打开 BusyMark 设置", "@shortcutSettingsDescription": { @@ -3478,138 +3478,188 @@ "@gitErrorCommandFailed": { "description": "Git error message." }, - "markdownAndHtml": "Markdown 和 HTML", - "@markdownAndHtml": { - "description": "Markdown and HTML reference dialog title and menu item." + "syntaxReference": "语法参考", + "@syntaxReference": { + "description": "Syntax Reference dialog title and menu item." }, - "markdownHtmlMarkdownBlocks": "Markdown 块", - "@markdownHtmlMarkdownBlocks": { + "syntaxReferenceMarkdownBlocks": "Markdown 块", + "@syntaxReferenceMarkdownBlocks": { "description": "Reference section title for Markdown block syntax." }, - "markdownHtmlMarkdownBlocksDescription": "Markdown 源代码和预览中支持的块结构。", - "@markdownHtmlMarkdownBlocksDescription": { + "syntaxReferenceMarkdownBlocksDescription": "Markdown 源代码和预览中支持的块结构。", + "@syntaxReferenceMarkdownBlocksDescription": { "description": "Reference section description for Markdown block syntax." }, - "markdownHtmlInlineFormatting": "行内 Markdown", - "@markdownHtmlInlineFormatting": { + "syntaxReferenceInlineFormatting": "行内 Markdown", + "@syntaxReferenceInlineFormatting": { "description": "Reference section title for Markdown inline syntax." }, - "markdownHtmlInlineFormattingDescription": "可出现在段落、列表项和表格单元格中的格式。", - "@markdownHtmlInlineFormattingDescription": { + "syntaxReferenceInlineFormattingDescription": "可出现在段落、列表项和表格单元格中的格式。", + "@syntaxReferenceInlineFormattingDescription": { "description": "Reference section description for Markdown inline syntax." }, - "markdownHtmlRawHtmlBlocks": "原始 HTML 块", - "@markdownHtmlRawHtmlBlocks": { + "syntaxReferenceRawHtmlBlocks": "原始 HTML 块", + "@syntaxReferenceRawHtmlBlocks": { "description": "Reference section title for supported raw HTML block tags." }, - "markdownHtmlRawHtmlBlocksDescription": "通过 BusyMark 预览组件渲染的安全块级 HTML 标签。", - "@markdownHtmlRawHtmlBlocksDescription": { + "syntaxReferenceRawHtmlBlocksDescription": "通过 BusyMark 预览组件渲染的安全块级 HTML 标签。", + "@syntaxReferenceRawHtmlBlocksDescription": { "description": "Reference section description for supported raw HTML block tags." }, - "markdownHtmlRawHtmlInline": "原始 HTML 行内标签", - "@markdownHtmlRawHtmlInline": { + "syntaxReferenceRawHtmlInline": "原始 HTML 行内标签", + "@syntaxReferenceRawHtmlInline": { "description": "Reference section title for supported raw HTML inline tags." }, - "markdownHtmlRawHtmlInlineDescription": "安全的行内 HTML 标签,渲染时不会显示字面标签。", - "@markdownHtmlRawHtmlInlineDescription": { + "syntaxReferenceRawHtmlInlineDescription": "安全的行内 HTML 标签,渲染时不会显示字面标签。", + "@syntaxReferenceRawHtmlInlineDescription": { "description": "Reference section description for supported raw HTML inline tags." }, - "markdownHtmlSafety": "安全规则", - "@markdownHtmlSafety": { + "syntaxReferenceSafety": "安全规则", + "@syntaxReferenceSafety": { "description": "Reference section title for raw HTML safety rules." }, - "markdownHtmlSafetyDescription": "原始 HTML 会在预览前进行解析和清理。", - "@markdownHtmlSafetyDescription": { + "syntaxReferenceSafetyDescription": "原始 HTML 会在预览前进行解析和清理。", + "@syntaxReferenceSafetyDescription": { "description": "Reference section description for raw HTML safety rules." }, - "markdownHtmlHeadings": "标题", - "@markdownHtmlHeadings": { + "syntaxReferenceHeadings": "标题", + "@syntaxReferenceHeadings": { "description": "Reference row label for Markdown headings." }, - "markdownHtmlParagraphs": "段落", - "@markdownHtmlParagraphs": { + "syntaxReferenceParagraphs": "段落", + "@syntaxReferenceParagraphs": { "description": "Reference row label for Markdown paragraphs." }, - "markdownHtmlLists": "列表", - "@markdownHtmlLists": { + "syntaxReferenceLists": "列表", + "@syntaxReferenceLists": { "description": "Reference row label for list syntax." }, - "markdownHtmlHtmlContainers": "容器", - "@markdownHtmlHtmlContainers": { + "syntaxReferenceHtmlContainers": "容器", + "@syntaxReferenceHtmlContainers": { "description": "Reference row label for HTML container tags." }, - "markdownHtmlHtmlTextBlocks": "文本块", - "@markdownHtmlHtmlTextBlocks": { + "syntaxReferenceHtmlTextBlocks": "文本块", + "@syntaxReferenceHtmlTextBlocks": { "description": "Reference row label for HTML text block tags." }, - "markdownHtmlHtmlFigures": "图和图像", - "@markdownHtmlHtmlFigures": { + "syntaxReferenceHtmlFigures": "图和图像", + "@syntaxReferenceHtmlFigures": { "description": "Reference row label for HTML figure and image tags." }, - "markdownHtmlHtmlPreformatted": "预格式化代码", - "@markdownHtmlHtmlPreformatted": { + "syntaxReferenceHtmlPreformatted": "预格式化代码", + "@syntaxReferenceHtmlPreformatted": { "description": "Reference row label for HTML preformatted/code tags." }, - "markdownHtmlHtmlDisclosure": "折叠块", - "@markdownHtmlHtmlDisclosure": { + "syntaxReferenceHtmlDisclosure": "折叠块", + "@syntaxReferenceHtmlDisclosure": { "description": "Reference row label for HTML details/summary tags." }, - "markdownHtmlHtmlDescriptionLists": "描述列表", - "@markdownHtmlHtmlDescriptionLists": { + "syntaxReferenceHtmlDescriptionLists": "描述列表", + "@syntaxReferenceHtmlDescriptionLists": { "description": "Reference row label for HTML description list tags." }, - "markdownHtmlHtmlFormattingTags": "格式标签", - "@markdownHtmlHtmlFormattingTags": { + "syntaxReferenceHtmlFormattingTags": "格式标签", + "@syntaxReferenceHtmlFormattingTags": { "description": "Reference row label for HTML inline formatting tags." }, - "markdownHtmlHtmlInlineCodeTags": "行内代码标签", - "@markdownHtmlHtmlInlineCodeTags": { + "syntaxReferenceHtmlInlineCodeTags": "行内代码标签", + "@syntaxReferenceHtmlInlineCodeTags": { "description": "Reference row label for HTML inline code-related tags." }, - "markdownHtmlHtmlNeutralInlineTags": "语义文本标签", - "@markdownHtmlHtmlNeutralInlineTags": { + "syntaxReferenceHtmlNeutralInlineTags": "语义文本标签", + "@syntaxReferenceHtmlNeutralInlineTags": { "description": "Reference row label for HTML inline semantic tags that render as text." }, - "markdownHtmlSanitizedPreview": "已清理的预览", - "@markdownHtmlSanitizedPreview": { + "syntaxReferenceSanitizedPreview": "已清理的预览", + "@syntaxReferenceSanitizedPreview": { "description": "Reference row label for sanitized preview behavior." }, - "markdownHtmlSanitizedPreviewDescription": "允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。", - "@markdownHtmlSanitizedPreviewDescription": { + "syntaxReferenceSanitizedPreviewDescription": "允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。", + "@syntaxReferenceSanitizedPreviewDescription": { "description": "Reference row description for sanitized preview behavior." }, - "markdownHtmlSourcePreserved": "保留源代码", - "@markdownHtmlSourcePreserved": { + "syntaxReferenceSourcePreserved": "保留源代码", + "@syntaxReferenceSourcePreserved": { "description": "Reference row label for raw source preservation." }, - "markdownHtmlSourcePreservedDescription": "未经编辑的原始 HTML 会按源文本原样保存。", - "@markdownHtmlSourcePreservedDescription": { + "syntaxReferenceSourcePreservedDescription": "未经编辑的原始 HTML 会按源文本原样保存。", + "@syntaxReferenceSourcePreservedDescription": { "description": "Reference row description for raw source preservation." }, - "markdownHtmlMarkdownInsideHtml": "HTML 内的 Markdown", - "@markdownHtmlMarkdownInsideHtml": { + "syntaxReferenceMarkdownInsideHtml": "HTML 内的 Markdown", + "@syntaxReferenceMarkdownInsideHtml": { "description": "Reference row label for Markdown inside raw HTML." }, - "markdownHtmlMarkdownInsideHtmlDescription": "原始 HTML 内的 Markdown 标记会按字面文本渲染。", - "@markdownHtmlMarkdownInsideHtmlDescription": { + "syntaxReferenceMarkdownInsideHtmlDescription": "原始 HTML 内的 Markdown 标记会按字面文本渲染。", + "@syntaxReferenceMarkdownInsideHtmlDescription": { "description": "Reference row description for Markdown inside raw HTML." }, - "markdownHtmlBlockedContent": "被阻止的活动内容", - "@markdownHtmlBlockedContent": { + "syntaxReferenceBlockedContent": "被阻止的活动内容", + "@syntaxReferenceBlockedContent": { "description": "Reference row label for blocked HTML content." }, - "markdownHtmlBlockedContentDescription": "脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。", - "@markdownHtmlBlockedContentDescription": { + "syntaxReferenceBlockedContentDescription": "脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。", + "@syntaxReferenceBlockedContentDescription": { "description": "Reference row description for blocked HTML content." }, - "markdownHtmlSafeUrls": "仅允许安全 URL", - "@markdownHtmlSafeUrls": { + "syntaxReferenceSafeUrls": "仅允许安全 URL", + "@syntaxReferenceSafeUrls": { "description": "Reference row label for safe URL policy." }, - "markdownHtmlSafeUrlsDescription": "链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。", - "@markdownHtmlSafeUrlsDescription": { + "syntaxReferenceSafeUrlsDescription": "链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。", + "@syntaxReferenceSafeUrlsDescription": { "description": "Reference row description for safe URL policy." }, + "syntaxReferenceCategoryHtml": "HTML", + "syntaxReferenceMermaid": "Mermaid", + "syntaxReferencePlantUml": "PlantUML", + "syntaxReferenceD2": "D2", + "syntaxReferenceOpenApi": "OpenAPI", + "syntaxReferenceCategory": "类别", + "syntaxReferenceCategoryDiagramsAndApi": "图表和 API", + "syntaxReferenceCategoryMathematics": "数学", + "syntaxReferenceExample": "示例", + "syntaxReferenceIdentifiers": "标识符和别名", + "syntaxReferenceScope": "适用范围", + "syntaxReferenceLimitation": "BusyMark 限制", + "syntaxReferenceOfficialDocumentation": "官方文档", + "syntaxReferenceScopeMarkdownAndWritersideMarkdown": "普通 Markdown 和 Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdown": "仅 Writerside Markdown", + "syntaxReferenceScopeWritersideMarkdownAndXml": "仅 Writerside Markdown 和 Writerside XML", + "syntaxReferenceMarkdownDescription": "BusyMark 可以编写和预览的核心 Markdown 形式。", + "syntaxReferenceParagraphExample": "一段文本。", + "syntaxReferenceTableLimitation": "表格使用 GitHub Flavored Markdown 的竖线语法。", + "syntaxReferenceHardBreakIdentifiers": "行尾两个空格、\\、
    ", + "syntaxReferenceHtmlDescription": "BusyMark 在 Markdown 源码中仅接受有限且安全的原始 HTML 子集。", + "syntaxReferenceDiagramsDescription": "带围栏的 Mermaid、PlantUML、D2 和 OpenAPI 块可在 Markdown 源码中使用。围栏标识符不区分大小写,BusyMark 会保留原始拼写。", + "syntaxReferenceOpenApiLimitation": "请使用带围栏的 YAML 或 JSON 内容。BusyMark 不会将任意完整的 YAML 或 JSON 文档视为 OpenAPI 参考。", + "syntaxReferenceSemanticDiagramBlocks": "图表的语义代码块", + "syntaxReferenceSemanticDiagramLimitation": "语义 code-block 和 src 形式仅支持 Mermaid、PlantUML 和 D2,不支持 OpenAPI,且只能在 Writerside 项目中使用。", + "syntaxReferenceReferencedDiagramSource": "引用的图表源", + "syntaxReferenceReferencedDiagramLimitation": "路径必须是相对路径并位于已打开的 Writerside 项目内;围栏加 src 的形式仅适用于 Writerside Markdown。", + "syntaxReferenceMathematicsDescription": "BusyMark 支持 TeX 表达式,但不支持完整的 TeX 或 LaTeX 文档。", + "syntaxReferenceInlineMath": "行内数学公式", + "syntaxReferenceGithubMath": "使用美元符号和反引号的 GitHub 数学公式", + "syntaxReferenceDisplayMath": "显示数学公式", + "syntaxReferenceMathFence": "math 围栏", + "syntaxReferenceTexFence": "tex 围栏", + "syntaxReferenceMathDelimitersLimitation": "BusyMark 不会将 \\(...\\) 或 \\[...\\] 识别为 Markdown 数学分隔符。", + "syntaxReferenceTexFenceLimitation": "在 Writerside 模式之外,tex 围栏仍是普通代码块。", + "syntaxReferenceWritersideMathElement": "Writerside math 元素", + "syntaxReferenceWritersideMathElementLimitation": "math 元素是语义 Writerside 语法,不是允许的原始 HTML MathML。", + "syntaxReferenceSemanticTexBlock": "语义 TeX 代码块", + "syntaxReferenceWritersideDescription": "这些特定扩展仅在已打开的 Writerside 项目中解析。", + "syntaxReferenceAdmonitionBlockquote": "提示块引用", + "syntaxReferenceAdmonitionLimitation": "普通块引用在 Writerside Markdown 中是提示;在普通 Markdown 中仍是普通引用。", + "syntaxReferenceSemanticAdmonitions": "语义提示", + "syntaxReferenceSemanticMarkupLimitation": "普通 Markdown 不会解析这些 Writerside 语义元素。", + "syntaxReferenceCollapsibleHeading": "可折叠标题", + "syntaxReferenceCollapsibleCode": "可折叠代码围栏", + "syntaxReferenceSemanticCollapsibles": "语义可折叠内容", + "syntaxReferenceSemanticCollapsiblesLimitation": "BusyMark 支持可折叠的 chapter、procedure、code-block 和定义列表形式,但不支持完整的 Writerside 目录。", + "syntaxReferenceSemanticCodeBlocks": "数学和图表的语义代码块", + "syntaxReferenceVideo": "Writerside 视频", + "syntaxReferenceVideoLimitation": "本地视频使用本地 preview-src 图像;托管视频源必须是受支持的 YouTube 或 Vimeo HTTPS URL。", "exportAsPdf": "导出为 PDF", "@exportAsPdf": { "description": "Menu action and dialog title for exporting the active document or Writerside module as PDF." diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 8f921aea..a0af6d08 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -979,11 +979,11 @@ abstract class AppLocalizations { /// **'Show this keyboard shortcut reference'** String get shortcutKeyboardShortcutsDescription; - /// Keyboard shortcut description for opening the Markdown and HTML reference. + /// Keyboard shortcut description for opening the Syntax Reference. /// /// In en, this message translates to: - /// **'Open the Markdown and HTML reference'** - String get shortcutMarkdownAndHtmlDescription; + /// **'Open the Syntax Reference'** + String get shortcutSyntaxReferenceDescription; /// Keyboard shortcut description for opening settings. /// @@ -4440,203 +4440,503 @@ abstract class AppLocalizations { /// **'Git command failed.'** String get gitErrorCommandFailed; - /// Markdown and HTML reference dialog title and menu item. + /// Syntax Reference dialog title and menu item. /// /// In en, this message translates to: - /// **'Markdown and HTML'** - String get markdownAndHtml; + /// **'Syntax Reference'** + String get syntaxReference; /// Reference section title for Markdown block syntax. /// /// In en, this message translates to: /// **'Markdown Blocks'** - String get markdownHtmlMarkdownBlocks; + String get syntaxReferenceMarkdownBlocks; /// Reference section description for Markdown block syntax. /// /// In en, this message translates to: /// **'Block structures supported in Markdown source and preview.'** - String get markdownHtmlMarkdownBlocksDescription; + String get syntaxReferenceMarkdownBlocksDescription; /// Reference section title for Markdown inline syntax. /// /// In en, this message translates to: /// **'Inline Markdown'** - String get markdownHtmlInlineFormatting; + String get syntaxReferenceInlineFormatting; /// Reference section description for Markdown inline syntax. /// /// In en, this message translates to: /// **'Formatting that can appear inside paragraphs, list items, and table cells.'** - String get markdownHtmlInlineFormattingDescription; + String get syntaxReferenceInlineFormattingDescription; /// Reference section title for supported raw HTML block tags. /// /// In en, this message translates to: /// **'Raw HTML Blocks'** - String get markdownHtmlRawHtmlBlocks; + String get syntaxReferenceRawHtmlBlocks; /// Reference section description for supported raw HTML block tags. /// /// In en, this message translates to: /// **'Safe block-level HTML tags rendered through BusyMark preview widgets.'** - String get markdownHtmlRawHtmlBlocksDescription; + String get syntaxReferenceRawHtmlBlocksDescription; /// Reference section title for supported raw HTML inline tags. /// /// In en, this message translates to: /// **'Raw HTML Inline Tags'** - String get markdownHtmlRawHtmlInline; + String get syntaxReferenceRawHtmlInline; /// Reference section description for supported raw HTML inline tags. /// /// In en, this message translates to: /// **'Safe inline HTML tags rendered without showing literal tags.'** - String get markdownHtmlRawHtmlInlineDescription; + String get syntaxReferenceRawHtmlInlineDescription; /// Reference section title for raw HTML safety rules. /// /// In en, this message translates to: /// **'Safety Rules'** - String get markdownHtmlSafety; + String get syntaxReferenceSafety; /// Reference section description for raw HTML safety rules. /// /// In en, this message translates to: /// **'Raw HTML is parsed and sanitized before preview rendering.'** - String get markdownHtmlSafetyDescription; + String get syntaxReferenceSafetyDescription; /// Reference row label for Markdown headings. /// /// In en, this message translates to: /// **'Headings'** - String get markdownHtmlHeadings; + String get syntaxReferenceHeadings; /// Reference row label for Markdown paragraphs. /// /// In en, this message translates to: /// **'Paragraphs'** - String get markdownHtmlParagraphs; + String get syntaxReferenceParagraphs; /// Reference row label for list syntax. /// /// In en, this message translates to: /// **'Lists'** - String get markdownHtmlLists; + String get syntaxReferenceLists; /// Reference row label for HTML container tags. /// /// In en, this message translates to: /// **'Containers'** - String get markdownHtmlHtmlContainers; + String get syntaxReferenceHtmlContainers; /// Reference row label for HTML text block tags. /// /// In en, this message translates to: /// **'Text blocks'** - String get markdownHtmlHtmlTextBlocks; + String get syntaxReferenceHtmlTextBlocks; /// Reference row label for HTML figure and image tags. /// /// In en, this message translates to: /// **'Figures and images'** - String get markdownHtmlHtmlFigures; + String get syntaxReferenceHtmlFigures; /// Reference row label for HTML preformatted/code tags. /// /// In en, this message translates to: /// **'Preformatted code'** - String get markdownHtmlHtmlPreformatted; + String get syntaxReferenceHtmlPreformatted; /// Reference row label for HTML details/summary tags. /// /// In en, this message translates to: /// **'Disclosure blocks'** - String get markdownHtmlHtmlDisclosure; + String get syntaxReferenceHtmlDisclosure; /// Reference row label for HTML description list tags. /// /// In en, this message translates to: /// **'Description lists'** - String get markdownHtmlHtmlDescriptionLists; + String get syntaxReferenceHtmlDescriptionLists; /// Reference row label for HTML inline formatting tags. /// /// In en, this message translates to: /// **'Formatting tags'** - String get markdownHtmlHtmlFormattingTags; + String get syntaxReferenceHtmlFormattingTags; /// Reference row label for HTML inline code-related tags. /// /// In en, this message translates to: /// **'Inline code tags'** - String get markdownHtmlHtmlInlineCodeTags; + String get syntaxReferenceHtmlInlineCodeTags; /// Reference row label for HTML inline semantic tags that render as text. /// /// In en, this message translates to: /// **'Semantic text tags'** - String get markdownHtmlHtmlNeutralInlineTags; + String get syntaxReferenceHtmlNeutralInlineTags; /// Reference row label for sanitized preview behavior. /// /// In en, this message translates to: /// **'Sanitized preview'** - String get markdownHtmlSanitizedPreview; + String get syntaxReferenceSanitizedPreview; /// Reference row description for sanitized preview behavior. /// /// In en, this message translates to: /// **'Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.'** - String get markdownHtmlSanitizedPreviewDescription; + String get syntaxReferenceSanitizedPreviewDescription; /// Reference row label for raw source preservation. /// /// In en, this message translates to: /// **'Source is preserved'** - String get markdownHtmlSourcePreserved; + String get syntaxReferenceSourcePreserved; /// Reference row description for raw source preservation. /// /// In en, this message translates to: /// **'Unedited raw HTML is saved back exactly as source text.'** - String get markdownHtmlSourcePreservedDescription; + String get syntaxReferenceSourcePreservedDescription; /// Reference row label for Markdown inside raw HTML. /// /// In en, this message translates to: /// **'Markdown inside HTML'** - String get markdownHtmlMarkdownInsideHtml; + String get syntaxReferenceMarkdownInsideHtml; /// Reference row description for Markdown inside raw HTML. /// /// In en, this message translates to: /// **'Markdown markers inside raw HTML render as literal text.'** - String get markdownHtmlMarkdownInsideHtmlDescription; + String get syntaxReferenceMarkdownInsideHtmlDescription; /// Reference row label for blocked HTML content. /// /// In en, this message translates to: /// **'Blocked active content'** - String get markdownHtmlBlockedContent; + String get syntaxReferenceBlockedContent; /// Reference row description for blocked HTML content. /// /// In en, this message translates to: /// **'Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.'** - String get markdownHtmlBlockedContentDescription; + String get syntaxReferenceBlockedContentDescription; /// Reference row label for safe URL policy. /// /// In en, this message translates to: /// **'Safe URLs only'** - String get markdownHtmlSafeUrls; + String get syntaxReferenceSafeUrls; /// Reference row description for safe URL policy. /// /// In en, this message translates to: /// **'Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.'** - String get markdownHtmlSafeUrlsDescription; + String get syntaxReferenceSafeUrlsDescription; + + /// Label for the Syntax Reference category selector. + /// + /// In en, this message translates to: + /// **'Category'** + String get syntaxReferenceCategory; + + /// HTML category in the Syntax Reference. + /// + /// In en, this message translates to: + /// **'HTML'** + String get syntaxReferenceCategoryHtml; + + /// Diagrams and API category in the Syntax Reference. + /// + /// In en, this message translates to: + /// **'Diagrams and API'** + String get syntaxReferenceCategoryDiagramsAndApi; + + /// Mathematics category in the Syntax Reference. + /// + /// In en, this message translates to: + /// **'Mathematics'** + String get syntaxReferenceCategoryMathematics; + + /// Label for a syntax example. + /// + /// In en, this message translates to: + /// **'Example'** + String get syntaxReferenceExample; + + /// Label for accepted syntax identifiers and aliases. + /// + /// In en, this message translates to: + /// **'Identifiers and aliases'** + String get syntaxReferenceIdentifiers; + + /// Label for the document types where syntax is recognized. + /// + /// In en, this message translates to: + /// **'Scope'** + String get syntaxReferenceScope; + + /// Label for a concise BusyMark-specific syntax limitation. + /// + /// In en, this message translates to: + /// **'BusyMark limitation'** + String get syntaxReferenceLimitation; + + /// Action that opens official external documentation. + /// + /// In en, this message translates to: + /// **'Official documentation'** + String get syntaxReferenceOfficialDocumentation; + + /// Scope label for syntax recognized in ordinary and Writerside Markdown. + /// + /// In en, this message translates to: + /// **'Ordinary Markdown and Writerside Markdown'** + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown; + + /// Scope label for syntax recognized only in Writerside Markdown. + /// + /// In en, this message translates to: + /// **'Writerside Markdown only'** + String get syntaxReferenceScopeWritersideMarkdown; + + /// Scope label for syntax recognized in Writerside Markdown and XML topics. + /// + /// In en, this message translates to: + /// **'Writerside Markdown and Writerside XML only'** + String get syntaxReferenceScopeWritersideMarkdownAndXml; + + /// Introduction to the Markdown syntax category. + /// + /// In en, this message translates to: + /// **'The core Markdown forms BusyMark can author and preview.'** + String get syntaxReferenceMarkdownDescription; + + /// Short localized paragraph used as a Markdown syntax example. + /// + /// In en, this message translates to: + /// **'A paragraph of text.'** + String get syntaxReferenceParagraphExample; + + /// BusyMark limitation for Markdown table syntax. + /// + /// In en, this message translates to: + /// **'Tables use GitHub Flavored Markdown pipe syntax.'** + String get syntaxReferenceTableLimitation; + + /// Accepted hard-line-break forms. Keep the backslash and HTML tag exact. + /// + /// In en, this message translates to: + /// **'two trailing spaces, \\,
    '** + String get syntaxReferenceHardBreakIdentifiers; + + /// Introduction to the HTML syntax category. + /// + /// In en, this message translates to: + /// **'BusyMark accepts a focused safe subset of raw HTML in Markdown source.'** + String get syntaxReferenceHtmlDescription; + + /// Introduction and fence behavior for diagrams and OpenAPI. + /// + /// In en, this message translates to: + /// **'Fenced Mermaid, PlantUML, D2, and OpenAPI work in Markdown source. Fence identifiers are case-insensitive, and BusyMark preserves their original spelling.'** + String get syntaxReferenceDiagramsDescription; + + /// Mermaid feature title. Keep the product name exact. + /// + /// In en, this message translates to: + /// **'Mermaid'** + String get syntaxReferenceMermaid; + + /// PlantUML feature title. Keep the product name exact. + /// + /// In en, this message translates to: + /// **'PlantUML'** + String get syntaxReferencePlantUml; + + /// D2 feature title. Keep the product name exact. + /// + /// In en, this message translates to: + /// **'D2'** + String get syntaxReferenceD2; + + /// OpenAPI feature title. Keep the product name exact. + /// + /// In en, this message translates to: + /// **'OpenAPI'** + String get syntaxReferenceOpenApi; + + /// BusyMark limitation for OpenAPI source recognition. + /// + /// In en, this message translates to: + /// **'Use fenced YAML or JSON content. BusyMark does not treat an arbitrary whole-file YAML or JSON document as an OpenAPI reference.'** + String get syntaxReferenceOpenApiLimitation; + + /// Feature title for Writerside semantic diagram code blocks. + /// + /// In en, this message translates to: + /// **'Semantic diagram code blocks'** + String get syntaxReferenceSemanticDiagramBlocks; + + /// BusyMark boundary for Writerside semantic diagram code blocks. + /// + /// In en, this message translates to: + /// **'Semantic code-block and src forms support Mermaid, PlantUML, and D2, not OpenAPI, and only inside Writerside projects.'** + String get syntaxReferenceSemanticDiagramLimitation; + + /// Feature title for Writerside referenced diagram files. + /// + /// In en, this message translates to: + /// **'Referenced diagram source'** + String get syntaxReferenceReferencedDiagramSource; + + /// BusyMark boundary for Writerside referenced diagram paths. + /// + /// In en, this message translates to: + /// **'Paths must be relative and remain inside the opened Writerside project; the fence-plus-src form is Writerside Markdown only.'** + String get syntaxReferenceReferencedDiagramLimitation; + + /// Introduction to the mathematics syntax category. + /// + /// In en, this message translates to: + /// **'BusyMark supports TeX expressions, not complete TeX or LaTeX documents.'** + String get syntaxReferenceMathematicsDescription; + + /// Feature title for inline dollar-delimited math. + /// + /// In en, this message translates to: + /// **'Inline math'** + String get syntaxReferenceInlineMath; + + /// Feature title for GitHub dollar/backtick math syntax. + /// + /// In en, this message translates to: + /// **'GitHub dollar/backtick math'** + String get syntaxReferenceGithubMath; + + /// Feature title for double-dollar display math. + /// + /// In en, this message translates to: + /// **'Display math'** + String get syntaxReferenceDisplayMath; + + /// Feature title for a fenced code block identified by math. Keep math exact. + /// + /// In en, this message translates to: + /// **'math fence'** + String get syntaxReferenceMathFence; + + /// Feature title for a Writerside fenced code block identified by tex. Keep tex exact. + /// + /// In en, this message translates to: + /// **'tex fence'** + String get syntaxReferenceTexFence; + + /// BusyMark boundary for unsupported Markdown math delimiters. Keep delimiter tokens exact. + /// + /// In en, this message translates to: + /// **'BusyMark does not recognize \\(...\\) or \\[...\\] as Markdown math delimiters.'** + String get syntaxReferenceMathDelimitersLimitation; + + /// BusyMark boundary for tex fences outside Writerside. + /// + /// In en, this message translates to: + /// **'Outside Writerside mode, a tex fence remains an ordinary code block.'** + String get syntaxReferenceTexFenceLimitation; + + /// Feature title for the Writerside math semantic element. + /// + /// In en, this message translates to: + /// **'Writerside math element'** + String get syntaxReferenceWritersideMathElement; + + /// Clarifies that Writerside math is not raw HTML MathML. + /// + /// In en, this message translates to: + /// **'The math element is semantic Writerside syntax, not permitted raw HTML MathML.'** + String get syntaxReferenceWritersideMathElementLimitation; + + /// Feature title for semantic Writerside TeX code blocks. + /// + /// In en, this message translates to: + /// **'Semantic TeX code block'** + String get syntaxReferenceSemanticTexBlock; + + /// Introduction to the Writerside syntax category. + /// + /// In en, this message translates to: + /// **'These focused extensions are interpreted only inside opened Writerside projects.'** + String get syntaxReferenceWritersideDescription; + + /// Feature title for Writerside blockquote admonitions. + /// + /// In en, this message translates to: + /// **'Admonition blockquote'** + String get syntaxReferenceAdmonitionBlockquote; + + /// BusyMark boundary for Writerside blockquote admonitions. + /// + /// In en, this message translates to: + /// **'A plain blockquote is a tip in Writerside Markdown; it remains an ordinary quote in ordinary Markdown.'** + String get syntaxReferenceAdmonitionLimitation; + + /// Feature title for Writerside semantic admonition elements. + /// + /// In en, this message translates to: + /// **'Semantic admonitions'** + String get syntaxReferenceSemanticAdmonitions; + + /// BusyMark boundary for Writerside-only semantic markup. + /// + /// In en, this message translates to: + /// **'Ordinary Markdown does not interpret these Writerside semantic elements.'** + String get syntaxReferenceSemanticMarkupLimitation; + + /// Feature title for a collapsible Writerside Markdown heading. + /// + /// In en, this message translates to: + /// **'Collapsible heading'** + String get syntaxReferenceCollapsibleHeading; + + /// Feature title for a collapsible Writerside Markdown code fence. + /// + /// In en, this message translates to: + /// **'Collapsible code fence'** + String get syntaxReferenceCollapsibleCode; + + /// Feature title for supported semantic Writerside collapsible forms. + /// + /// In en, this message translates to: + /// **'Semantic collapsible content'** + String get syntaxReferenceSemanticCollapsibles; + + /// Focused BusyMark boundary for semantic collapsible forms. + /// + /// In en, this message translates to: + /// **'BusyMark supports collapsible chapter, procedure, code-block, and definition-list forms, not the full Writerside catalog.'** + String get syntaxReferenceSemanticCollapsiblesLimitation; + + /// Feature title for Writerside semantic math and diagram code blocks. + /// + /// In en, this message translates to: + /// **'Semantic code blocks for math and diagrams'** + String get syntaxReferenceSemanticCodeBlocks; + + /// Feature title for Writerside semantic video elements. + /// + /// In en, this message translates to: + /// **'Writerside video'** + String get syntaxReferenceVideo; + + /// BusyMark boundary for Writerside local and hosted video sources. + /// + /// In en, this message translates to: + /// **'Local video uses a local preview-src image; hosted video sources must be supported HTTPS YouTube or Vimeo URLs.'** + String get syntaxReferenceVideoLimitation; /// Menu action and dialog title for exporting the active document or Writerside module as PDF. /// diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index 8e74ae4b..08b6b87e 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -449,7 +449,7 @@ class AppLocalizationsAr extends AppLocalizations { 'إظهار مرجع اختصارات لوحة المفاتيح'; @override - String get shortcutMarkdownAndHtmlDescription => 'فتح مرجع Markdown وHTML'; + String get shortcutSyntaxReferenceDescription => 'فتح مرجع بناء الجملة'; @override String get shortcutSettingsDescription => 'فتح إعدادات BusyMark'; @@ -2687,114 +2687,287 @@ class AppLocalizationsAr extends AppLocalizations { String get gitErrorCommandFailed => 'فشل أمر Git.'; @override - String get markdownAndHtml => 'Markdown و HTML'; + String get syntaxReference => 'مرجع بناء الجملة'; @override - String get markdownHtmlMarkdownBlocks => 'كتل Markdown'; + String get syntaxReferenceMarkdownBlocks => 'كتل Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'بنى الكتل المدعومة في مصدر Markdown والمعاينة.'; @override - String get markdownHtmlInlineFormatting => 'Markdown داخل السطر'; + String get syntaxReferenceInlineFormatting => 'Markdown داخل السطر'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'تنسيق يمكن استخدامه داخل الفقرات وعناصر القوائم وخلايا الجداول.'; @override - String get markdownHtmlRawHtmlBlocks => 'كتل HTML الخام'; + String get syntaxReferenceRawHtmlBlocks => 'كتل HTML الخام'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'وسوم HTML الكتلية الآمنة التي تعرضها ودجات معاينة BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'وسوم HTML داخل السطر'; + String get syntaxReferenceRawHtmlInline => 'وسوم HTML داخل السطر'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'وسوم HTML آمنة داخل السطر تعرض بدون إظهار الوسوم حرفيًا.'; @override - String get markdownHtmlSafety => 'قواعد الأمان'; + String get syntaxReferenceSafety => 'قواعد الأمان'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'يتم تحليل HTML الخام وتنظيفه قبل عرضه في المعاينة.'; @override - String get markdownHtmlHeadings => 'العناوين'; + String get syntaxReferenceHeadings => 'العناوين'; @override - String get markdownHtmlParagraphs => 'الفقرات'; + String get syntaxReferenceParagraphs => 'الفقرات'; @override - String get markdownHtmlLists => 'القوائم'; + String get syntaxReferenceLists => 'القوائم'; @override - String get markdownHtmlHtmlContainers => 'الحاويات'; + String get syntaxReferenceHtmlContainers => 'الحاويات'; @override - String get markdownHtmlHtmlTextBlocks => 'كتل النص'; + String get syntaxReferenceHtmlTextBlocks => 'كتل النص'; @override - String get markdownHtmlHtmlFigures => 'الأشكال والصور'; + String get syntaxReferenceHtmlFigures => 'الأشكال والصور'; @override - String get markdownHtmlHtmlPreformatted => 'كود منسق مسبقًا'; + String get syntaxReferenceHtmlPreformatted => 'كود منسق مسبقًا'; @override - String get markdownHtmlHtmlDisclosure => 'كتل قابلة للفتح'; + String get syntaxReferenceHtmlDisclosure => 'كتل قابلة للفتح'; @override - String get markdownHtmlHtmlDescriptionLists => 'قوائم وصفية'; + String get syntaxReferenceHtmlDescriptionLists => 'قوائم وصفية'; @override - String get markdownHtmlHtmlFormattingTags => 'وسوم التنسيق'; + String get syntaxReferenceHtmlFormattingTags => 'وسوم التنسيق'; @override - String get markdownHtmlHtmlInlineCodeTags => 'وسوم الكود داخل السطر'; + String get syntaxReferenceHtmlInlineCodeTags => 'وسوم الكود داخل السطر'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'وسوم نصية دلالية'; + String get syntaxReferenceHtmlNeutralInlineTags => 'وسوم نصية دلالية'; @override - String get markdownHtmlSanitizedPreview => 'معاينة منظفة'; + String get syntaxReferenceSanitizedPreview => 'معاينة منظفة'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'يتم تحويل HTML المسموح به إلى كتل معاينة BusyMark، وليس عرضه في متصفح.'; @override - String get markdownHtmlSourcePreserved => 'يتم حفظ المصدر'; + String get syntaxReferenceSourcePreserved => 'يتم حفظ المصدر'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'يتم حفظ HTML الخام غير المعدل كما هو تمامًا كنص مصدر.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown داخل HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown داخل HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'تعرض علامات Markdown داخل HTML الخام كنص حرفي.'; @override - String get markdownHtmlBlockedContent => 'المحتوى النشط محظور'; + String get syntaxReferenceBlockedContent => 'المحتوى النشط محظور'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'يتم حظر السكربتات والأنماط والإطارات والنماذج وSVG وMathML والأحداث والسمات غير الآمنة.'; @override - String get markdownHtmlSafeUrls => 'عناوين URL آمنة فقط'; + String get syntaxReferenceSafeUrls => 'عناوين URL آمنة فقط'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'تسمح الروابط بـ http وhttps وmailto وtel والروابط النسبية والمقاطع؛ وتحظر المخططات غير الآمنة.'; + @override + String get syntaxReferenceCategory => 'الفئة'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'المخططات وواجهات API'; + + @override + String get syntaxReferenceCategoryMathematics => 'الرياضيات'; + + @override + String get syntaxReferenceExample => 'مثال'; + + @override + String get syntaxReferenceIdentifiers => 'المعرّفات والأسماء البديلة'; + + @override + String get syntaxReferenceScope => 'النطاق'; + + @override + String get syntaxReferenceLimitation => 'قيد في BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'الوثائق الرسمية'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown العادي وMarkdown في Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Markdown في Writerside فقط'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Markdown وXML في Writerside فقط'; + + @override + String get syntaxReferenceMarkdownDescription => + 'أشكال Markdown الأساسية التي يستطيع BusyMark كتابتها ومعاينتها.'; + + @override + String get syntaxReferenceParagraphExample => 'فقرة نصية.'; + + @override + String get syntaxReferenceTableLimitation => + 'تستخدم الجداول صيغة الأنابيب في GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'مسافتان في نهاية السطر، \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'يقبل BusyMark مجموعة محدودة وآمنة من HTML الخام في مصدر Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'تعمل كتل Mermaid وPlantUML وD2 وOpenAPI المسيّجة في مصدر Markdown. لا تتأثر معرّفات السياج بحالة الأحرف، ويحافظ BusyMark على التهجئة الأصلية.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'استخدم محتوى YAML أو JSON داخل سياج. لا يعامل BusyMark مستند YAML أو JSON كاملاً عشوائياً على أنه مرجع OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'كتل شيفرة دلالية للمخططات'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'تدعم صيغتا code-block وsrc الدلاليتان Mermaid وPlantUML وD2، لا OpenAPI، وتعملان داخل مشاريع Writerside فقط.'; + + @override + String get syntaxReferenceReferencedDiagramSource => 'مصدر مخطط مُشار إليه'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'يجب أن تكون المسارات نسبية وأن تبقى داخل مشروع Writerside المفتوح؛ صيغة السياج مع src خاصة بـMarkdown في Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'يدعم BusyMark تعبيرات TeX، وليس مستندات TeX أو LaTeX الكاملة.'; + + @override + String get syntaxReferenceInlineMath => 'رياضيات مضمنة'; + + @override + String get syntaxReferenceGithubMath => + 'رياضيات GitHub بعلامة الدولار والفاصلة العليا المائلة'; + + @override + String get syntaxReferenceDisplayMath => 'رياضيات معروضة'; + + @override + String get syntaxReferenceMathFence => 'سياج math'; + + @override + String get syntaxReferenceTexFence => 'سياج tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'لا يتعرّف BusyMark على ⁨\\(...\\)⁩ أو ⁨\\[...\\]⁩ كمحددات رياضيات في Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'خارج وضع Writerside، يبقى سياج tex كتلة شيفرة عادية.'; + + @override + String get syntaxReferenceWritersideMathElement => 'عنصر math في Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'عنصر math صيغة دلالية في Writerside، وليس HTML MathML خاماً مسموحاً به.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'كتلة شيفرة TeX دلالية'; + + @override + String get syntaxReferenceWritersideDescription => + 'لا تُفسَّر هذه الامتدادات المحددة إلا داخل مشاريع Writerside المفتوحة.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'اقتباس كتلي للتنبيه'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'يكون الاقتباس الكتلي العادي تلميحاً في Markdown ضمن Writerside؛ ويبقى اقتباساً عادياً في Markdown العادي.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'تنبيهات دلالية'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'لا يفسر Markdown العادي عناصر Writerside الدلالية هذه.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'عنوان قابل للطي'; + + @override + String get syntaxReferenceCollapsibleCode => 'سياج شيفرة قابل للطي'; + + @override + String get syntaxReferenceSemanticCollapsibles => 'محتوى دلالي قابل للطي'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'يدعم BusyMark صيغ chapter وprocedure وcode-block وقائمة التعريفات القابلة للطي، وليس فهرس Writerside كاملاً.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'كتل شيفرة دلالية للرياضيات والمخططات'; + + @override + String get syntaxReferenceVideo => 'فيديو Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'يستخدم الفيديو المحلي صورة preview-src محلية؛ ويجب أن تكون المصادر المستضافة عناوين HTTPS مدعومة من YouTube أو Vimeo.'; + @override String get exportAsPdf => 'تصدير بصيغة PDF'; diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index f3918d08..6b6ab418 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -455,8 +455,7 @@ class AppLocalizationsDe extends AppLocalizations { 'Diese Tastaturkürzelübersicht anzeigen'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Markdown- und HTML-Referenz öffnen'; + String get shortcutSyntaxReferenceDescription => 'Syntaxreferenz öffnen'; @override String get shortcutSettingsDescription => 'BusyMark-Einstellungen öffnen'; @@ -2681,114 +2680,289 @@ class AppLocalizationsDe extends AppLocalizations { String get gitErrorCommandFailed => 'Git-Befehl fehlgeschlagen.'; @override - String get markdownAndHtml => 'Markdown und HTML'; + String get syntaxReference => 'Syntaxreferenz'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown-Blöcke'; + String get syntaxReferenceMarkdownBlocks => 'Markdown-Blöcke'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Blockstrukturen, die in Markdown-Quelltext und Vorschau unterstützt werden.'; @override - String get markdownHtmlInlineFormatting => 'Inline-Markdown'; + String get syntaxReferenceInlineFormatting => 'Inline-Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formatierung innerhalb von Absätzen, Listeneinträgen und Tabellenzellen.'; @override - String get markdownHtmlRawHtmlBlocks => 'Roh-HTML-Blöcke'; + String get syntaxReferenceRawHtmlBlocks => 'Roh-HTML-Blöcke'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Sichere HTML-Blocktags, die über BusyMark-Vorschauwidgets gerendert werden.'; @override - String get markdownHtmlRawHtmlInline => 'Roh-HTML-Inline-Tags'; + String get syntaxReferenceRawHtmlInline => 'Roh-HTML-Inline-Tags'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Sichere Inline-HTML-Tags, die ohne sichtbare Tags gerendert werden.'; @override - String get markdownHtmlSafety => 'Sicherheitsregeln'; + String get syntaxReferenceSafety => 'Sicherheitsregeln'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Roh-HTML wird vor der Vorschau geparst und bereinigt.'; @override - String get markdownHtmlHeadings => 'Überschriften'; + String get syntaxReferenceHeadings => 'Überschriften'; @override - String get markdownHtmlParagraphs => 'Absätze'; + String get syntaxReferenceParagraphs => 'Absätze'; @override - String get markdownHtmlLists => 'Listen'; + String get syntaxReferenceLists => 'Listen'; @override - String get markdownHtmlHtmlContainers => 'Container'; + String get syntaxReferenceHtmlContainers => 'Container'; @override - String get markdownHtmlHtmlTextBlocks => 'Textblöcke'; + String get syntaxReferenceHtmlTextBlocks => 'Textblöcke'; @override - String get markdownHtmlHtmlFigures => 'Abbildungen und Bilder'; + String get syntaxReferenceHtmlFigures => 'Abbildungen und Bilder'; @override - String get markdownHtmlHtmlPreformatted => 'Vorformatierter Code'; + String get syntaxReferenceHtmlPreformatted => 'Vorformatierter Code'; @override - String get markdownHtmlHtmlDisclosure => 'Aufklappblöcke'; + String get syntaxReferenceHtmlDisclosure => 'Aufklappblöcke'; @override - String get markdownHtmlHtmlDescriptionLists => 'Beschreibungslisten'; + String get syntaxReferenceHtmlDescriptionLists => 'Beschreibungslisten'; @override - String get markdownHtmlHtmlFormattingTags => 'Formatierungstags'; + String get syntaxReferenceHtmlFormattingTags => 'Formatierungstags'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Inline-Code-Tags'; + String get syntaxReferenceHtmlInlineCodeTags => 'Inline-Code-Tags'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantische Texttags'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Semantische Texttags'; @override - String get markdownHtmlSanitizedPreview => 'Bereinigte Vorschau'; + String get syntaxReferenceSanitizedPreview => 'Bereinigte Vorschau'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Erlaubtes HTML wird in BusyMark-Vorschaublöcke umgewandelt, nicht im Browser gerendert.'; @override - String get markdownHtmlSourcePreserved => 'Quelltext bleibt erhalten'; + String get syntaxReferenceSourcePreserved => 'Quelltext bleibt erhalten'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Unverändertes Roh-HTML wird exakt als Quelltext gespeichert.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown in HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown in HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Markdown-Zeichen innerhalb von Roh-HTML werden als normaler Text angezeigt.'; @override - String get markdownHtmlBlockedContent => 'Blockierte aktive Inhalte'; + String get syntaxReferenceBlockedContent => 'Blockierte aktive Inhalte'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Skripte, Styles, Frames, Formulare, SVG, MathML, Events und unsichere Attribute werden blockiert.'; @override - String get markdownHtmlSafeUrls => 'Nur sichere URLs'; + String get syntaxReferenceSafeUrls => 'Nur sichere URLs'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Links erlauben http, https, mailto, tel, relative URLs und Fragmente; unsichere URL-Schemata werden blockiert.'; + @override + String get syntaxReferenceCategory => 'Kategorie'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagramme und API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Mathematik'; + + @override + String get syntaxReferenceExample => 'Beispiel'; + + @override + String get syntaxReferenceIdentifiers => 'Bezeichner und Aliase'; + + @override + String get syntaxReferenceScope => 'Geltungsbereich'; + + @override + String get syntaxReferenceLimitation => 'BusyMark-Einschränkung'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Offizielle Dokumentation'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Normales Markdown und Writerside-Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Nur Writerside-Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Nur Writerside-Markdown und Writerside-XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Die grundlegenden Markdown-Formen, die BusyMark erstellen und in der Vorschau anzeigen kann.'; + + @override + String get syntaxReferenceParagraphExample => 'Ein Textabsatz.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tabellen verwenden die Pipe-Syntax von GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'zwei Leerzeichen am Zeilenende, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark akzeptiert eine gezielte sichere Teilmenge von Roh-HTML in Markdown-Quelltext.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Eingezäunte Mermaid-, PlantUML-, D2- und OpenAPI-Blöcke funktionieren in Markdown-Quelltext. Fence-Bezeichner unterscheiden nicht zwischen Groß- und Kleinschreibung; BusyMark bewahrt die ursprüngliche Schreibweise.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Verwenden Sie eingezäunten YAML- oder JSON-Inhalt. BusyMark behandelt ein beliebiges vollständiges YAML- oder JSON-Dokument nicht als OpenAPI-Referenz.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Semantische Diagramm-Codeblöcke'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Semantische code-block- und src-Formen unterstützen Mermaid, PlantUML und D2, nicht OpenAPI, und nur in Writerside-Projekten.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Referenzierte Diagrammquelle'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Pfade müssen relativ sein und im geöffneten Writerside-Projekt bleiben; die Kombination aus Fence und src gilt nur für Writerside-Markdown.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark unterstützt TeX-Ausdrücke, keine vollständigen TeX- oder LaTeX-Dokumente.'; + + @override + String get syntaxReferenceInlineMath => 'Mathematik im Text'; + + @override + String get syntaxReferenceGithubMath => + 'GitHub-Mathematik mit Dollarzeichen und Backticks'; + + @override + String get syntaxReferenceDisplayMath => 'Mathematische Formel als Block'; + + @override + String get syntaxReferenceMathFence => 'math-Fence'; + + @override + String get syntaxReferenceTexFence => 'tex-Fence'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark erkennt \\(...\\) und \\[...\\] nicht als Markdown-Mathematikbegrenzer.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Außerhalb des Writerside-Modus bleibt ein tex-Fence ein gewöhnlicher Codeblock.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside-math-Element'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Das math-Element ist semantische Writerside-Syntax und kein zulässiges rohes HTML-MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Semantischer TeX-Codeblock'; + + @override + String get syntaxReferenceWritersideDescription => + 'Diese gezielten Erweiterungen werden nur in geöffneten Writerside-Projekten interpretiert.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Hinweis-Blockzitat'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Ein einfaches Blockzitat ist in Writerside-Markdown ein Tipp; in normalem Markdown bleibt es ein gewöhnliches Zitat.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Semantische Hinweise'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Normales Markdown interpretiert diese semantischen Writerside-Elemente nicht.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Einklappbare Überschrift'; + + @override + String get syntaxReferenceCollapsibleCode => 'Einklappbarer Code-Fence'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Semantische einklappbare Inhalte'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark unterstützt einklappbare Kapitel-, Prozedur-, code-block- und Definitionslistenformen, nicht den vollständigen Writerside-Katalog.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Semantische Codeblöcke für Mathematik und Diagramme'; + + @override + String get syntaxReferenceVideo => 'Writerside-Video'; + + @override + String get syntaxReferenceVideoLimitation => + 'Lokale Videos verwenden ein lokales preview-src-Bild; gehostete Videoquellen müssen unterstützte HTTPS-URLs von YouTube oder Vimeo sein.'; + @override String get exportAsPdf => 'Als PDF exportieren'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index c6efe6f9..d20e3145 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -451,8 +451,7 @@ class AppLocalizationsEn extends AppLocalizations { 'Show this keyboard shortcut reference'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Open the Markdown and HTML reference'; + String get shortcutSyntaxReferenceDescription => 'Open the Syntax Reference'; @override String get shortcutSettingsDescription => 'Open BusyMark settings'; @@ -2654,114 +2653,288 @@ class AppLocalizationsEn extends AppLocalizations { String get gitErrorCommandFailed => 'Git command failed.'; @override - String get markdownAndHtml => 'Markdown and HTML'; + String get syntaxReference => 'Syntax Reference'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown Blocks'; + String get syntaxReferenceMarkdownBlocks => 'Markdown Blocks'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Block structures supported in Markdown source and preview.'; @override - String get markdownHtmlInlineFormatting => 'Inline Markdown'; + String get syntaxReferenceInlineFormatting => 'Inline Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formatting that can appear inside paragraphs, list items, and table cells.'; @override - String get markdownHtmlRawHtmlBlocks => 'Raw HTML Blocks'; + String get syntaxReferenceRawHtmlBlocks => 'Raw HTML Blocks'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Safe block-level HTML tags rendered through BusyMark preview widgets.'; @override - String get markdownHtmlRawHtmlInline => 'Raw HTML Inline Tags'; + String get syntaxReferenceRawHtmlInline => 'Raw HTML Inline Tags'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Safe inline HTML tags rendered without showing literal tags.'; @override - String get markdownHtmlSafety => 'Safety Rules'; + String get syntaxReferenceSafety => 'Safety Rules'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Raw HTML is parsed and sanitized before preview rendering.'; @override - String get markdownHtmlHeadings => 'Headings'; + String get syntaxReferenceHeadings => 'Headings'; @override - String get markdownHtmlParagraphs => 'Paragraphs'; + String get syntaxReferenceParagraphs => 'Paragraphs'; @override - String get markdownHtmlLists => 'Lists'; + String get syntaxReferenceLists => 'Lists'; @override - String get markdownHtmlHtmlContainers => 'Containers'; + String get syntaxReferenceHtmlContainers => 'Containers'; @override - String get markdownHtmlHtmlTextBlocks => 'Text blocks'; + String get syntaxReferenceHtmlTextBlocks => 'Text blocks'; @override - String get markdownHtmlHtmlFigures => 'Figures and images'; + String get syntaxReferenceHtmlFigures => 'Figures and images'; @override - String get markdownHtmlHtmlPreformatted => 'Preformatted code'; + String get syntaxReferenceHtmlPreformatted => 'Preformatted code'; @override - String get markdownHtmlHtmlDisclosure => 'Disclosure blocks'; + String get syntaxReferenceHtmlDisclosure => 'Disclosure blocks'; @override - String get markdownHtmlHtmlDescriptionLists => 'Description lists'; + String get syntaxReferenceHtmlDescriptionLists => 'Description lists'; @override - String get markdownHtmlHtmlFormattingTags => 'Formatting tags'; + String get syntaxReferenceHtmlFormattingTags => 'Formatting tags'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Inline code tags'; + String get syntaxReferenceHtmlInlineCodeTags => 'Inline code tags'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantic text tags'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Semantic text tags'; @override - String get markdownHtmlSanitizedPreview => 'Sanitized preview'; + String get syntaxReferenceSanitizedPreview => 'Sanitized preview'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.'; @override - String get markdownHtmlSourcePreserved => 'Source is preserved'; + String get syntaxReferenceSourcePreserved => 'Source is preserved'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Unedited raw HTML is saved back exactly as source text.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown inside HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown inside HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Markdown markers inside raw HTML render as literal text.'; @override - String get markdownHtmlBlockedContent => 'Blocked active content'; + String get syntaxReferenceBlockedContent => 'Blocked active content'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.'; @override - String get markdownHtmlSafeUrls => 'Safe URLs only'; + String get syntaxReferenceSafeUrls => 'Safe URLs only'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.'; + @override + String get syntaxReferenceCategory => 'Category'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagrams and API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Mathematics'; + + @override + String get syntaxReferenceExample => 'Example'; + + @override + String get syntaxReferenceIdentifiers => 'Identifiers and aliases'; + + @override + String get syntaxReferenceScope => 'Scope'; + + @override + String get syntaxReferenceLimitation => 'BusyMark limitation'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Official documentation'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Ordinary Markdown and Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Writerside Markdown only'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Writerside Markdown and Writerside XML only'; + + @override + String get syntaxReferenceMarkdownDescription => + 'The core Markdown forms BusyMark can author and preview.'; + + @override + String get syntaxReferenceParagraphExample => 'A paragraph of text.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tables use GitHub Flavored Markdown pipe syntax.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'two trailing spaces, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark accepts a focused safe subset of raw HTML in Markdown source.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Fenced Mermaid, PlantUML, D2, and OpenAPI work in Markdown source. Fence identifiers are case-insensitive, and BusyMark preserves their original spelling.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Use fenced YAML or JSON content. BusyMark does not treat an arbitrary whole-file YAML or JSON document as an OpenAPI reference.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Semantic diagram code blocks'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Semantic code-block and src forms support Mermaid, PlantUML, and D2, not OpenAPI, and only inside Writerside projects.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Referenced diagram source'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Paths must be relative and remain inside the opened Writerside project; the fence-plus-src form is Writerside Markdown only.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark supports TeX expressions, not complete TeX or LaTeX documents.'; + + @override + String get syntaxReferenceInlineMath => 'Inline math'; + + @override + String get syntaxReferenceGithubMath => 'GitHub dollar/backtick math'; + + @override + String get syntaxReferenceDisplayMath => 'Display math'; + + @override + String get syntaxReferenceMathFence => 'math fence'; + + @override + String get syntaxReferenceTexFence => 'tex fence'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark does not recognize \\(...\\) or \\[...\\] as Markdown math delimiters.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Outside Writerside mode, a tex fence remains an ordinary code block.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside math element'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'The math element is semantic Writerside syntax, not permitted raw HTML MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Semantic TeX code block'; + + @override + String get syntaxReferenceWritersideDescription => + 'These focused extensions are interpreted only inside opened Writerside projects.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Admonition blockquote'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'A plain blockquote is a tip in Writerside Markdown; it remains an ordinary quote in ordinary Markdown.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Semantic admonitions'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Ordinary Markdown does not interpret these Writerside semantic elements.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Collapsible heading'; + + @override + String get syntaxReferenceCollapsibleCode => 'Collapsible code fence'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Semantic collapsible content'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark supports collapsible chapter, procedure, code-block, and definition-list forms, not the full Writerside catalog.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Semantic code blocks for math and diagrams'; + + @override + String get syntaxReferenceVideo => 'Writerside video'; + + @override + String get syntaxReferenceVideoLimitation => + 'Local video uses a local preview-src image; hosted video sources must be supported HTTPS YouTube or Vimeo URLs.'; + @override String get exportAsPdf => 'Export as PDF'; diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index 4f3ae191..9021fc3e 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -454,8 +454,8 @@ class AppLocalizationsEs extends AppLocalizations { 'Mostrar esta referencia de atajos de teclado'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Abrir la referencia de Markdown y HTML'; + String get shortcutSyntaxReferenceDescription => + 'Abrir la referencia de sintaxis'; @override String get shortcutSettingsDescription => @@ -2680,116 +2680,294 @@ class AppLocalizationsEs extends AppLocalizations { String get gitErrorCommandFailed => 'El comando de Git ha fallado.'; @override - String get markdownAndHtml => 'Markdown y HTML'; + String get syntaxReference => 'Referencia de sintaxis'; @override - String get markdownHtmlMarkdownBlocks => 'Bloques Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Bloques Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Estructuras de bloque admitidas en el código Markdown y la vista previa.'; @override - String get markdownHtmlInlineFormatting => 'Markdown en línea'; + String get syntaxReferenceInlineFormatting => 'Markdown en línea'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formato dentro de párrafos, elementos de lista y celdas de tabla.'; @override - String get markdownHtmlRawHtmlBlocks => 'Bloques HTML sin procesar'; + String get syntaxReferenceRawHtmlBlocks => 'Bloques HTML sin procesar'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Etiquetas HTML de bloque seguras renderizadas con widgets de vista previa de BusyMark.'; @override - String get markdownHtmlRawHtmlInline => + String get syntaxReferenceRawHtmlInline => 'Etiquetas HTML sin procesar en línea'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Etiquetas HTML en línea seguras renderizadas sin mostrar las etiquetas literales.'; @override - String get markdownHtmlSafety => 'Reglas de seguridad'; + String get syntaxReferenceSafety => 'Reglas de seguridad'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'El HTML sin procesar se analiza y sanea antes de la vista previa.'; @override - String get markdownHtmlHeadings => 'Encabezados'; + String get syntaxReferenceHeadings => 'Encabezados'; @override - String get markdownHtmlParagraphs => 'Párrafos'; + String get syntaxReferenceParagraphs => 'Párrafos'; @override - String get markdownHtmlLists => 'Listas'; + String get syntaxReferenceLists => 'Listas'; @override - String get markdownHtmlHtmlContainers => 'Contenedores'; + String get syntaxReferenceHtmlContainers => 'Contenedores'; @override - String get markdownHtmlHtmlTextBlocks => 'Bloques de texto'; + String get syntaxReferenceHtmlTextBlocks => 'Bloques de texto'; @override - String get markdownHtmlHtmlFigures => 'Figuras e imágenes'; + String get syntaxReferenceHtmlFigures => 'Figuras e imágenes'; @override - String get markdownHtmlHtmlPreformatted => 'Código preformateado'; + String get syntaxReferenceHtmlPreformatted => 'Código preformateado'; @override - String get markdownHtmlHtmlDisclosure => 'Bloques desplegables'; + String get syntaxReferenceHtmlDisclosure => 'Bloques desplegables'; @override - String get markdownHtmlHtmlDescriptionLists => 'Listas de descripción'; + String get syntaxReferenceHtmlDescriptionLists => 'Listas de descripción'; @override - String get markdownHtmlHtmlFormattingTags => 'Etiquetas de formato'; + String get syntaxReferenceHtmlFormattingTags => 'Etiquetas de formato'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Etiquetas de código en línea'; + String get syntaxReferenceHtmlInlineCodeTags => + 'Etiquetas de código en línea'; @override - String get markdownHtmlHtmlNeutralInlineTags => + String get syntaxReferenceHtmlNeutralInlineTags => 'Etiquetas semánticas de texto'; @override - String get markdownHtmlSanitizedPreview => 'Vista previa saneada'; + String get syntaxReferenceSanitizedPreview => 'Vista previa saneada'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'El HTML permitido se convierte en bloques de vista previa de BusyMark, no se renderiza en un navegador.'; @override - String get markdownHtmlSourcePreserved => 'Se conserva el código fuente'; + String get syntaxReferenceSourcePreserved => 'Se conserva el código fuente'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'El HTML sin procesar no editado se guarda exactamente como texto fuente.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown dentro de HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown dentro de HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Los marcadores Markdown dentro de HTML sin procesar se muestran como texto literal.'; @override - String get markdownHtmlBlockedContent => 'Contenido activo bloqueado'; + String get syntaxReferenceBlockedContent => 'Contenido activo bloqueado'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Se bloquean scripts, estilos, marcos, formularios, SVG, MathML, eventos y atributos inseguros.'; @override - String get markdownHtmlSafeUrls => 'Solo URLs seguras'; + String get syntaxReferenceSafeUrls => 'Solo URLs seguras'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Los enlaces permiten http, https, mailto, tel, URLs relativas y fragmentos; los esquemas inseguros se bloquean.'; + @override + String get syntaxReferenceCategory => 'Categoría'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagramas y API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matemáticas'; + + @override + String get syntaxReferenceExample => 'Ejemplo'; + + @override + String get syntaxReferenceIdentifiers => 'Identificadores y alias'; + + @override + String get syntaxReferenceScope => 'Ámbito'; + + @override + String get syntaxReferenceLimitation => 'Limitación de BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Documentación oficial'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown común y Markdown de Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Solo Markdown de Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Solo Markdown y XML de Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Las formas esenciales de Markdown que BusyMark puede crear y previsualizar.'; + + @override + String get syntaxReferenceParagraphExample => 'Un párrafo de texto.'; + + @override + String get syntaxReferenceTableLimitation => + 'Las tablas usan la sintaxis con barras verticales de GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'dos espacios al final de la línea, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark acepta un subconjunto seguro y específico de HTML sin procesar en el código Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Los bloques delimitados Mermaid, PlantUML, D2 y OpenAPI funcionan en código Markdown. Los identificadores no distinguen mayúsculas de minúsculas y BusyMark conserva la grafía original.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Use contenido YAML o JSON dentro de un bloque delimitado. BusyMark no trata cualquier documento YAML o JSON completo como referencia OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Bloques de código semánticos para diagramas'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Las formas semánticas code-block y src admiten Mermaid, PlantUML y D2, no OpenAPI, y solo dentro de proyectos Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Origen de diagrama referenciado'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Las rutas deben ser relativas y permanecer dentro del proyecto Writerside abierto; la forma de bloque delimitado con src solo funciona en Markdown de Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark admite expresiones TeX, no documentos TeX o LaTeX completos.'; + + @override + String get syntaxReferenceInlineMath => 'Matemáticas en línea'; + + @override + String get syntaxReferenceGithubMath => + 'Matemáticas de GitHub con dólar y acento grave'; + + @override + String get syntaxReferenceDisplayMath => 'Matemáticas en bloque'; + + @override + String get syntaxReferenceMathFence => 'Bloque delimitado math'; + + @override + String get syntaxReferenceTexFence => 'Bloque delimitado tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark no reconoce \\(...\\) ni \\[...\\] como delimitadores matemáticos de Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Fuera del modo Writerside, un bloque tex sigue siendo un bloque de código común.'; + + @override + String get syntaxReferenceWritersideMathElement => + 'Elemento math de Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'El elemento math es sintaxis semántica de Writerside, no MathML HTML sin procesar permitido.'; + + @override + String get syntaxReferenceSemanticTexBlock => + 'Bloque de código TeX semántico'; + + @override + String get syntaxReferenceWritersideDescription => + 'Estas extensiones específicas solo se interpretan dentro de proyectos Writerside abiertos.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Cita de aviso'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Una cita simple es un consejo en Markdown de Writerside; en Markdown común sigue siendo una cita normal.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Avisos semánticos'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Markdown común no interpreta estos elementos semánticos de Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Encabezado plegable'; + + @override + String get syntaxReferenceCollapsibleCode => 'Bloque de código plegable'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Contenido semántico plegable'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark admite las formas plegables chapter, procedure, code-block y lista de definiciones, no todo el catálogo de Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Bloques de código semánticos para matemáticas y diagramas'; + + @override + String get syntaxReferenceVideo => 'Vídeo de Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'El vídeo local usa una imagen preview-src local; las fuentes alojadas deben ser URL HTTPS compatibles de YouTube o Vimeo.'; + @override String get exportAsPdf => 'Exportar como PDF'; diff --git a/lib/l10n/generated/app_localizations_et.dart b/lib/l10n/generated/app_localizations_et.dart index 888e8451..483fe3ea 100644 --- a/lib/l10n/generated/app_localizations_et.dart +++ b/lib/l10n/generated/app_localizations_et.dart @@ -449,8 +449,7 @@ class AppLocalizationsEt extends AppLocalizations { String get shortcutKeyboardShortcutsDescription => 'Kuva kiirklahvide loend'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Ava Markdowni ja HTML-i teatmik'; + String get shortcutSyntaxReferenceDescription => 'Ava süntaksiviide'; @override String get shortcutSettingsDescription => 'Ava BusyMarki sätted'; @@ -2651,116 +2650,292 @@ class AppLocalizationsEt extends AppLocalizations { String get gitErrorCommandFailed => 'Giti käsk nurjus.'; @override - String get markdownAndHtml => 'Markdown ja HTML'; + String get syntaxReference => 'Süntaksiviide'; @override - String get markdownHtmlMarkdownBlocks => 'Markdowni plokid'; + String get syntaxReferenceMarkdownBlocks => 'Markdowni plokid'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Markdowni lähtekoodis ja eelvaates toetatud plokkstruktuurid.'; @override - String get markdownHtmlInlineFormatting => 'Reasisene Markdown'; + String get syntaxReferenceInlineFormatting => 'Reasisene Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Vormindus, mida saab kasutada lõikudes, loendiüksustes ja tabelilahtrites.'; @override - String get markdownHtmlRawHtmlBlocks => 'Töötlemata HTML-plokid'; + String get syntaxReferenceRawHtmlBlocks => 'Töötlemata HTML-plokid'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Turvalised plokitaseme HTML-märgendid, mis kuvatakse BusyMarki eelvaatevidinate kaudu.'; @override - String get markdownHtmlRawHtmlInline => + String get syntaxReferenceRawHtmlInline => 'Reasisesed töötlemata HTML-märgendid'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Turvalised reasisesed HTML-märgendid, mis kuvatakse märgendeid endid näitamata.'; @override - String get markdownHtmlSafety => 'Ohutusreeglid'; + String get syntaxReferenceSafety => 'Ohutusreeglid'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Töötlemata HTML parsitakse ja puhastatakse enne eelvaates kuvamist.'; @override - String get markdownHtmlHeadings => 'Pealkirjad'; + String get syntaxReferenceHeadings => 'Pealkirjad'; @override - String get markdownHtmlParagraphs => 'Lõigud'; + String get syntaxReferenceParagraphs => 'Lõigud'; @override - String get markdownHtmlLists => 'Loendid'; + String get syntaxReferenceLists => 'Loendid'; @override - String get markdownHtmlHtmlContainers => 'Konteinerid'; + String get syntaxReferenceHtmlContainers => 'Konteinerid'; @override - String get markdownHtmlHtmlTextBlocks => 'Tekstiplokid'; + String get syntaxReferenceHtmlTextBlocks => 'Tekstiplokid'; @override - String get markdownHtmlHtmlFigures => 'Joonised ja pildid'; + String get syntaxReferenceHtmlFigures => 'Joonised ja pildid'; @override - String get markdownHtmlHtmlPreformatted => 'Eelvormindatud kood'; + String get syntaxReferenceHtmlPreformatted => 'Eelvormindatud kood'; @override - String get markdownHtmlHtmlDisclosure => 'Laiendatavad plokid'; + String get syntaxReferenceHtmlDisclosure => 'Laiendatavad plokid'; @override - String get markdownHtmlHtmlDescriptionLists => 'Kirjeldusloendid'; + String get syntaxReferenceHtmlDescriptionLists => 'Kirjeldusloendid'; @override - String get markdownHtmlHtmlFormattingTags => 'Vormindusmärgendid'; + String get syntaxReferenceHtmlFormattingTags => 'Vormindusmärgendid'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Reasisesed koodimärgendid'; + String get syntaxReferenceHtmlInlineCodeTags => 'Reasisesed koodimärgendid'; @override - String get markdownHtmlHtmlNeutralInlineTags => + String get syntaxReferenceHtmlNeutralInlineTags => 'Semantilised tekstimärgendid'; @override - String get markdownHtmlSanitizedPreview => 'Puhastatud eelvaade'; + String get syntaxReferenceSanitizedPreview => 'Puhastatud eelvaade'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Lubatud HTML teisendatakse BusyMarki eelvaateplokkideks; seda ei kuvata brauseris.'; @override - String get markdownHtmlSourcePreserved => 'Lähtekood säilitatakse'; + String get syntaxReferenceSourcePreserved => 'Lähtekood säilitatakse'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Redigeerimata töötlemata HTML salvestatakse lähdetekstina täpselt algsel kujul.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown HTML-is'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown HTML-is'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Töötlemata HTML-is olevad Markdowni vormindusmärgid kuvatakse lihttekstina.'; @override - String get markdownHtmlBlockedContent => 'Blokeeritud aktiivsisu'; + String get syntaxReferenceBlockedContent => 'Blokeeritud aktiivsisu'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Skriptid, stiilid, raamid, vormid, SVG, MathML, sündmused ja ebaturvalised atribuudid blokeeritakse.'; @override - String get markdownHtmlSafeUrls => 'Ainult turvalised URL-id'; + String get syntaxReferenceSafeUrls => 'Ainult turvalised URL-id'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Linkides on lubatud HTTP-, HTTPS-, mailto- ja tel-skeemiga URL-id ning suhtelised ja fragmendi-URL-id; ebaturvalised skeemid blokeeritakse.'; + @override + String get syntaxReferenceCategory => 'Kategooria'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagrammid ja API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matemaatika'; + + @override + String get syntaxReferenceExample => 'Näide'; + + @override + String get syntaxReferenceIdentifiers => 'Identifikaatorid ja aliased'; + + @override + String get syntaxReferenceScope => 'Ulatus'; + + @override + String get syntaxReferenceLimitation => 'BusyMarki piirang'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Ametlik dokumentatsioon'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Tavaline Markdown ja Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Ainult Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Ainult Writerside Markdown ja Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Põhilised Markdowni vormid, mida BusyMark võimaldab kirjutada ja eelvaadata.'; + + @override + String get syntaxReferenceParagraphExample => 'Tekstilõik.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tabelid kasutavad GitHub Flavored Markdowni püstkriipsusüntaksit.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'kaks tühikut rea lõpus, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark aktsepteerib Markdowni lähtekoodis piiratud turvalist toor-HTML-i alamhulka.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Piiratud Mermaid-, PlantUML-, D2- ja OpenAPI-plokid töötavad Markdowni lähtekoodis. Plokiidentifikaatorid ei ole tõstutundlikud ja BusyMark säilitab algse kirjapildi.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Kasuta piiratud YAML- või JSON-sisu. BusyMark ei käsitle suvalist terviklikku YAML- või JSON-dokumenti OpenAPI viitena.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Semantilised diagrammi koodiplokid'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Semantilised code-block- ja src-vormid toetavad Mermaidi, PlantUML-i ja D2-te, mitte OpenAPI-t, ning ainult Writerside\'i projektides.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Viidatud diagrammiallikas'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Teed peavad olema suhtelised ja jääma avatud Writerside\'i projekti sisse; piiratud vorm koos src-ga on ainult Writerside Markdowni jaoks.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark toetab TeX-i avaldisi, mitte terviklikke TeX-i või LaTeX-i dokumente.'; + + @override + String get syntaxReferenceInlineMath => 'Reasisene matemaatika'; + + @override + String get syntaxReferenceGithubMath => + 'GitHubi matemaatika dollari- ja graavimärgiga'; + + @override + String get syntaxReferenceDisplayMath => 'Plokina matemaatika'; + + @override + String get syntaxReferenceMathFence => 'math-plokk'; + + @override + String get syntaxReferenceTexFence => 'tex-plokk'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark ei tuvasta \\(...\\) ega \\[...\\] Markdowni matemaatika eraldajatena.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Väljaspool Writerside\'i režiimi jääb tex-plokk tavaliseks koodiplokiks.'; + + @override + String get syntaxReferenceWritersideMathElement => + 'Writerside\'i math-element'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math-element on semantiline Writerside\'i süntaks, mitte lubatud toor-HTML-i MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Semantiline TeX-i koodiplokk'; + + @override + String get syntaxReferenceWritersideDescription => + 'Neid valitud laiendusi tõlgendatakse ainult avatud Writerside\'i projektides.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Märkuse plokktsitaat'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Tavaline plokktsitaat on Writerside Markdownis nõuanne; tavalises Markdownis jääb see tavaliseks tsitaadiks.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Semantilised märkused'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Tavaline Markdown ei tõlgenda neid Writerside\'i semantilisi elemente.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Ahendatav pealkiri'; + + @override + String get syntaxReferenceCollapsibleCode => 'Ahendatav koodiplokk'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Semantiline ahendatav sisu'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark toetab ahendatavaid chapter-, procedure-, code-block- ja definitsiooniloendi vorme, mitte kogu Writerside\'i kataloogi.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Semantilised koodiplokid matemaatika ja diagrammide jaoks'; + + @override + String get syntaxReferenceVideo => 'Writerside\'i video'; + + @override + String get syntaxReferenceVideoLimitation => + 'Kohalik video kasutab kohalikku preview-src-pilti; majutatud allikad peavad olema toetatud YouTube\'i või Vimeo HTTPS-aadressid.'; + @override String get exportAsPdf => 'Ekspordi PDF-ina'; diff --git a/lib/l10n/generated/app_localizations_fa.dart b/lib/l10n/generated/app_localizations_fa.dart index 53a81866..3c4598cf 100644 --- a/lib/l10n/generated/app_localizations_fa.dart +++ b/lib/l10n/generated/app_localizations_fa.dart @@ -450,8 +450,7 @@ class AppLocalizationsFa extends AppLocalizations { 'نمایش مرجع میانبرهای صفحه‌کلید'; @override - String get shortcutMarkdownAndHtmlDescription => - 'باز کردن مرجع Markdown و HTML'; + String get shortcutSyntaxReferenceDescription => 'باز کردن راهنمای نحو'; @override String get shortcutSettingsDescription => 'باز کردن تنظیمات BusyMark'; @@ -2706,114 +2705,286 @@ class AppLocalizationsFa extends AppLocalizations { String get gitErrorCommandFailed => 'فرمان Git ناموفق بود.'; @override - String get markdownAndHtml => 'Markdown و HTML'; + String get syntaxReference => 'راهنمای نحو'; @override - String get markdownHtmlMarkdownBlocks => 'بلوک‌های Markdown'; + String get syntaxReferenceMarkdownBlocks => 'بلوک‌های Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'ساختارهای بلوکی پشتیبانی‌شده در متن Markdown و پیش‌نمایش.'; @override - String get markdownHtmlInlineFormatting => 'Markdown درون‌خطی'; + String get syntaxReferenceInlineFormatting => 'Markdown درون‌خطی'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'قالب‌بندی درون پاراگراف‌ها، موارد فهرست و سلول‌های جدول.'; @override - String get markdownHtmlRawHtmlBlocks => 'بلوک‌های HTML خام'; + String get syntaxReferenceRawHtmlBlocks => 'بلوک‌های HTML خام'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'تگ‌های بلوکی HTML امن که با ویجت‌های پیش‌نمایش BusyMark نمایش داده می‌شوند.'; @override - String get markdownHtmlRawHtmlInline => 'تگ‌های HTML درون‌خطی'; + String get syntaxReferenceRawHtmlInline => 'تگ‌های HTML درون‌خطی'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'تگ‌های HTML درون‌خطی امن بدون نمایش خود تگ‌ها رندر می‌شوند.'; @override - String get markdownHtmlSafety => 'قوانین امنیتی'; + String get syntaxReferenceSafety => 'قوانین امنیتی'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'HTML خام پیش از پیش‌نمایش تحلیل و پاک‌سازی می‌شود.'; @override - String get markdownHtmlHeadings => 'عنوان‌ها'; + String get syntaxReferenceHeadings => 'عنوان‌ها'; @override - String get markdownHtmlParagraphs => 'پاراگراف‌ها'; + String get syntaxReferenceParagraphs => 'پاراگراف‌ها'; @override - String get markdownHtmlLists => 'فهرست‌ها'; + String get syntaxReferenceLists => 'فهرست‌ها'; @override - String get markdownHtmlHtmlContainers => 'کانتینرها'; + String get syntaxReferenceHtmlContainers => 'کانتینرها'; @override - String get markdownHtmlHtmlTextBlocks => 'بلوک‌های متن'; + String get syntaxReferenceHtmlTextBlocks => 'بلوک‌های متن'; @override - String get markdownHtmlHtmlFigures => 'شکل‌ها و تصاویر'; + String get syntaxReferenceHtmlFigures => 'شکل‌ها و تصاویر'; @override - String get markdownHtmlHtmlPreformatted => 'کد پیش‌قالب‌بندی‌شده'; + String get syntaxReferenceHtmlPreformatted => 'کد پیش‌قالب‌بندی‌شده'; @override - String get markdownHtmlHtmlDisclosure => 'بلوک‌های بازشونده'; + String get syntaxReferenceHtmlDisclosure => 'بلوک‌های بازشونده'; @override - String get markdownHtmlHtmlDescriptionLists => 'فهرست‌های توصیفی'; + String get syntaxReferenceHtmlDescriptionLists => 'فهرست‌های توصیفی'; @override - String get markdownHtmlHtmlFormattingTags => 'تگ‌های قالب‌بندی'; + String get syntaxReferenceHtmlFormattingTags => 'تگ‌های قالب‌بندی'; @override - String get markdownHtmlHtmlInlineCodeTags => 'تگ‌های کد درون‌خطی'; + String get syntaxReferenceHtmlInlineCodeTags => 'تگ‌های کد درون‌خطی'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'تگ‌های متنی معنایی'; + String get syntaxReferenceHtmlNeutralInlineTags => 'تگ‌های متنی معنایی'; @override - String get markdownHtmlSanitizedPreview => 'پیش‌نمایش پاک‌سازی‌شده'; + String get syntaxReferenceSanitizedPreview => 'پیش‌نمایش پاک‌سازی‌شده'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'HTML مجاز به بلوک‌های پیش‌نمایش BusyMark تبدیل می‌شود، نه اینکه در مرورگر رندر شود.'; @override - String get markdownHtmlSourcePreserved => 'منبع حفظ می‌شود'; + String get syntaxReferenceSourcePreserved => 'منبع حفظ می‌شود'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'HTML خام ویرایش‌نشده دقیقاً به‌عنوان متن منبع ذخیره می‌شود.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown داخل HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown داخل HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'نشانه‌های Markdown داخل HTML خام به‌صورت متن واقعی نمایش داده می‌شوند.'; @override - String get markdownHtmlBlockedContent => 'محتوای فعال مسدود است'; + String get syntaxReferenceBlockedContent => 'محتوای فعال مسدود است'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'اسکریپت‌ها، استایل‌ها، فریم‌ها، فرم‌ها، SVG، MathML، رویدادها و ویژگی‌های ناامن مسدود می‌شوند.'; @override - String get markdownHtmlSafeUrls => 'فقط URLهای امن'; + String get syntaxReferenceSafeUrls => 'فقط URLهای امن'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'پیوندها http، https، mailto، tel، URLهای نسبی و قطعه‌ها را می‌پذیرند؛ طرح‌های ناامن مسدود می‌شوند.'; + @override + String get syntaxReferenceCategory => 'دسته‌بندی'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'نمودارها و API'; + + @override + String get syntaxReferenceCategoryMathematics => 'ریاضیات'; + + @override + String get syntaxReferenceExample => 'نمونه'; + + @override + String get syntaxReferenceIdentifiers => 'شناسه‌ها و نام‌های مستعار'; + + @override + String get syntaxReferenceScope => 'دامنه'; + + @override + String get syntaxReferenceLimitation => 'محدودیت BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'مستندات رسمی'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown معمولی و Markdown در Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'فقط Markdown در Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'فقط Markdown و XML در Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'شکل‌های اصلی Markdown که BusyMark می‌تواند بنویسد و پیش‌نمایش کند.'; + + @override + String get syntaxReferenceParagraphExample => 'یک بند متنی.'; + + @override + String get syntaxReferenceTableLimitation => + 'جدول‌ها از نحو خط عمودی GitHub Flavored Markdown استفاده می‌کنند.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'دو فاصله در پایان خط، \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark زیرمجموعه‌ای محدود و امن از HTML خام را در منبع Markdown می‌پذیرد.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'بلوک‌های حصاردار Mermaid، PlantUML، D2 و OpenAPI در منبع Markdown کار می‌کنند. شناسه‌های حصار به بزرگی و کوچکی حروف حساس نیستند و BusyMark املای اصلی را نگه می‌دارد.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'از محتوای YAML یا JSON حصاردار استفاده کنید. BusyMark هر سند کامل YAML یا JSON را مرجع OpenAPI در نظر نمی‌گیرد.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'بلوک‌های کد معنایی نمودار'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'شکل‌های معنایی code-block و src از Mermaid، PlantUML و D2 پشتیبانی می‌کنند، نه OpenAPI، و فقط در پروژه‌های Writerside کار می‌کنند.'; + + @override + String get syntaxReferenceReferencedDiagramSource => 'منبع ارجاع‌شدهٔ نمودار'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'مسیرها باید نسبی باشند و درون پروژهٔ بازشدهٔ Writerside بمانند؛ شکل حصار همراه src فقط ویژهٔ Markdown در Writerside است.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark از عبارت‌های TeX پشتیبانی می‌کند، نه اسناد کامل TeX یا LaTeX.'; + + @override + String get syntaxReferenceInlineMath => 'ریاضی درون‌خطی'; + + @override + String get syntaxReferenceGithubMath => 'ریاضی GitHub با دلار و بک‌تیک'; + + @override + String get syntaxReferenceDisplayMath => 'ریاضی نمایشی'; + + @override + String get syntaxReferenceMathFence => 'حصار math'; + + @override + String get syntaxReferenceTexFence => 'حصار tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark، ⁨\\(...\\)⁩ یا ⁨\\[...\\]⁩ را جداکنندهٔ ریاضی Markdown نمی‌شناسد.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'بیرون از حالت Writerside، حصار tex یک بلوک کد معمولی باقی می‌ماند.'; + + @override + String get syntaxReferenceWritersideMathElement => 'عنصر math در Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'عنصر math نحو معنایی Writerside است، نه HTML MathML خام مجاز.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'بلوک کد معنایی TeX'; + + @override + String get syntaxReferenceWritersideDescription => + 'این افزونه‌های مشخص فقط در پروژه‌های بازشدهٔ Writerside تفسیر می‌شوند.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'نقل‌قول بلوکی هشدار'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'نقل‌قول بلوکی ساده در Markdown درون Writerside یک نکته است؛ در Markdown معمولی همان نقل‌قول عادی می‌ماند.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'هشدارهای معنایی'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Markdown معمولی این عناصر معنایی Writerside را تفسیر نمی‌کند.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'عنوان جمع‌شونده'; + + @override + String get syntaxReferenceCollapsibleCode => 'حصار کد جمع‌شونده'; + + @override + String get syntaxReferenceSemanticCollapsibles => 'محتوای معنایی جمع‌شونده'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark شکل‌های جمع‌شوندهٔ chapter، procedure، code-block و فهرست تعریف را پشتیبانی می‌کند، نه همهٔ فهرست Writerside را.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'بلوک‌های کد معنایی برای ریاضی و نمودارها'; + + @override + String get syntaxReferenceVideo => 'ویدیوی Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'ویدیوی محلی از تصویر محلی preview-src استفاده می‌کند؛ منابع میزبانی‌شده باید نشانی HTTPS پشتیبانی‌شدهٔ YouTube یا Vimeo باشند.'; + @override String get exportAsPdf => 'خروجی به‌صورت PDF'; diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 7e0ddb5c..330ca9b4 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -454,8 +454,8 @@ class AppLocalizationsFr extends AppLocalizations { 'Afficher cette liste de raccourcis clavier'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Ouvrir la référence Markdown et HTML'; + String get shortcutSyntaxReferenceDescription => + 'Ouvrir la référence de syntaxe'; @override String get shortcutSettingsDescription => 'Ouvrir les paramètres de BusyMark'; @@ -2678,114 +2678,290 @@ class AppLocalizationsFr extends AppLocalizations { String get gitErrorCommandFailed => 'La commande Git a échoué.'; @override - String get markdownAndHtml => 'Markdown et HTML'; + String get syntaxReference => 'Référence de syntaxe'; @override - String get markdownHtmlMarkdownBlocks => 'Blocs Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Blocs Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Structures de blocs prises en charge dans la source Markdown et l’aperçu.'; @override - String get markdownHtmlInlineFormatting => 'Markdown en ligne'; + String get syntaxReferenceInlineFormatting => 'Markdown en ligne'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Mise en forme utilisable dans les paragraphes, listes et cellules de tableau.'; @override - String get markdownHtmlRawHtmlBlocks => 'Blocs HTML bruts'; + String get syntaxReferenceRawHtmlBlocks => 'Blocs HTML bruts'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Balises HTML de bloc sûres rendues par les widgets d’aperçu BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Balises HTML brutes en ligne'; + String get syntaxReferenceRawHtmlInline => 'Balises HTML brutes en ligne'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Balises HTML en ligne sûres rendues sans afficher les balises littérales.'; @override - String get markdownHtmlSafety => 'Règles de sécurité'; + String get syntaxReferenceSafety => 'Règles de sécurité'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Le HTML brut est analysé et assaini avant le rendu de l’aperçu.'; @override - String get markdownHtmlHeadings => 'Titres'; + String get syntaxReferenceHeadings => 'Titres'; @override - String get markdownHtmlParagraphs => 'Paragraphes'; + String get syntaxReferenceParagraphs => 'Paragraphes'; @override - String get markdownHtmlLists => 'Listes'; + String get syntaxReferenceLists => 'Listes'; @override - String get markdownHtmlHtmlContainers => 'Conteneurs'; + String get syntaxReferenceHtmlContainers => 'Conteneurs'; @override - String get markdownHtmlHtmlTextBlocks => 'Blocs de texte'; + String get syntaxReferenceHtmlTextBlocks => 'Blocs de texte'; @override - String get markdownHtmlHtmlFigures => 'Figures et images'; + String get syntaxReferenceHtmlFigures => 'Figures et images'; @override - String get markdownHtmlHtmlPreformatted => 'Code préformaté'; + String get syntaxReferenceHtmlPreformatted => 'Code préformaté'; @override - String get markdownHtmlHtmlDisclosure => 'Blocs dépliables'; + String get syntaxReferenceHtmlDisclosure => 'Blocs dépliables'; @override - String get markdownHtmlHtmlDescriptionLists => 'Listes de description'; + String get syntaxReferenceHtmlDescriptionLists => 'Listes de description'; @override - String get markdownHtmlHtmlFormattingTags => 'Balises de mise en forme'; + String get syntaxReferenceHtmlFormattingTags => 'Balises de mise en forme'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Balises de code en ligne'; + String get syntaxReferenceHtmlInlineCodeTags => 'Balises de code en ligne'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Balises de texte sémantique'; + String get syntaxReferenceHtmlNeutralInlineTags => + 'Balises de texte sémantique'; @override - String get markdownHtmlSanitizedPreview => 'Aperçu assaini'; + String get syntaxReferenceSanitizedPreview => 'Aperçu assaini'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Le HTML autorisé est converti en blocs d’aperçu BusyMark et n’est pas rendu dans un navigateur.'; @override - String get markdownHtmlSourcePreserved => 'Source conservée'; + String get syntaxReferenceSourcePreserved => 'Source conservée'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Le HTML brut non modifié est enregistré exactement comme texte source.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown dans HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown dans HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Les marqueurs Markdown dans le HTML brut sont affichés comme texte littéral.'; @override - String get markdownHtmlBlockedContent => 'Contenu actif bloqué'; + String get syntaxReferenceBlockedContent => 'Contenu actif bloqué'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Les scripts, styles, cadres, formulaires, SVG, MathML, événements et attributs dangereux sont bloqués.'; @override - String get markdownHtmlSafeUrls => 'URL sûres uniquement'; + String get syntaxReferenceSafeUrls => 'URL sûres uniquement'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Les liens acceptent http, https, mailto, tel, les URL relatives et les fragments ; les schémas dangereux sont bloqués.'; + @override + String get syntaxReferenceCategory => 'Catégorie'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagrammes et API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Mathématiques'; + + @override + String get syntaxReferenceExample => 'Exemple'; + + @override + String get syntaxReferenceIdentifiers => 'Identifiants et alias'; + + @override + String get syntaxReferenceScope => 'Portée'; + + @override + String get syntaxReferenceLimitation => 'Limite de BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Documentation officielle'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown ordinaire et Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Markdown Writerside uniquement'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Markdown Writerside et XML Writerside uniquement'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Les formes Markdown essentielles que BusyMark peut créer et prévisualiser.'; + + @override + String get syntaxReferenceParagraphExample => 'Un paragraphe de texte.'; + + @override + String get syntaxReferenceTableLimitation => + 'Les tableaux utilisent la syntaxe à barres verticales de GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'deux espaces en fin de ligne, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark accepte un sous-ensemble sûr et ciblé de HTML brut dans la source Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Les blocs délimités Mermaid, PlantUML, D2 et OpenAPI fonctionnent dans la source Markdown. Les identifiants de bloc sont insensibles à la casse et BusyMark conserve leur orthographe d’origine.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Utilisez du contenu YAML ou JSON dans un bloc délimité. BusyMark ne considère pas un document YAML ou JSON complet quelconque comme une référence OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Blocs de code sémantiques pour diagrammes'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Les formes sémantiques code-block et src prennent en charge Mermaid, PlantUML et D2, mais pas OpenAPI, et uniquement dans les projets Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Source de diagramme référencée'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Les chemins doivent être relatifs et rester dans le projet Writerside ouvert ; la forme bloc délimité avec src est réservée au Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark prend en charge les expressions TeX, pas les documents TeX ou LaTeX complets.'; + + @override + String get syntaxReferenceInlineMath => 'Formule en ligne'; + + @override + String get syntaxReferenceGithubMath => + 'Formule GitHub avec dollar et accent grave'; + + @override + String get syntaxReferenceDisplayMath => 'Formule affichée'; + + @override + String get syntaxReferenceMathFence => 'Bloc délimité math'; + + @override + String get syntaxReferenceTexFence => 'Bloc délimité tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark ne reconnaît pas \\(...\\) ni \\[...\\] comme délimiteurs mathématiques Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'En dehors du mode Writerside, un bloc tex reste un bloc de code ordinaire.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Élément math Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'L’élément math est une syntaxe sémantique Writerside, et non du MathML HTML brut autorisé.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Bloc de code TeX sémantique'; + + @override + String get syntaxReferenceWritersideDescription => + 'Ces extensions ciblées ne sont interprétées que dans les projets Writerside ouverts.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Citation d’avertissement'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Une citation simple est un conseil en Markdown Writerside ; elle reste une citation ordinaire en Markdown ordinaire.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Avertissements sémantiques'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Le Markdown ordinaire n’interprète pas ces éléments sémantiques Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Titre repliable'; + + @override + String get syntaxReferenceCollapsibleCode => 'Bloc de code repliable'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Contenu sémantique repliable'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark prend en charge les formes repliables chapter, procedure, code-block et liste de définitions, pas l’intégralité du catalogue Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Blocs de code sémantiques pour les formules et diagrammes'; + + @override + String get syntaxReferenceVideo => 'Vidéo Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Une vidéo locale utilise une image preview-src locale ; les sources hébergées doivent être des URL HTTPS YouTube ou Vimeo prises en charge.'; + @override String get exportAsPdf => 'Exporter en PDF'; diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart index 013d1555..a5d87d68 100644 --- a/lib/l10n/generated/app_localizations_hi.dart +++ b/lib/l10n/generated/app_localizations_hi.dart @@ -452,8 +452,7 @@ class AppLocalizationsHi extends AppLocalizations { 'यह कीबोर्ड शॉर्टकट संदर्भ दिखाएँ'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Markdown और HTML संदर्भ खोलें'; + String get shortcutSyntaxReferenceDescription => 'सिंटैक्स संदर्भ खोलें'; @override String get shortcutSettingsDescription => 'BusyMark सेटिंग्स खोलें'; @@ -2646,114 +2645,286 @@ class AppLocalizationsHi extends AppLocalizations { String get gitErrorCommandFailed => 'Git कमांड विफल रहा।'; @override - String get markdownAndHtml => 'Markdown और HTML'; + String get syntaxReference => 'सिंटैक्स संदर्भ'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown ब्लॉक'; + String get syntaxReferenceMarkdownBlocks => 'Markdown ब्लॉक'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Markdown स्रोत और प्रीव्यू में समर्थित ब्लॉक संरचनाएँ।'; @override - String get markdownHtmlInlineFormatting => 'इनलाइन Markdown'; + String get syntaxReferenceInlineFormatting => 'इनलाइन Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'ऐसी फ़ॉर्मैटिंग जिसे पैराग्राफ़, सूची आइटम और तालिका सेल के अंदर इस्तेमाल किया जा सकता है।'; @override - String get markdownHtmlRawHtmlBlocks => 'कच्चे HTML ब्लॉक'; + String get syntaxReferenceRawHtmlBlocks => 'कच्चे HTML ब्लॉक'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'सुरक्षित ब्लॉक-स्तर HTML टैग जिन्हें BusyMark प्रीव्यू विजेट से दिखाया जाता है।'; @override - String get markdownHtmlRawHtmlInline => 'इनलाइन HTML टैग'; + String get syntaxReferenceRawHtmlInline => 'इनलाइन HTML टैग'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'सुरक्षित इनलाइन HTML टैग जिन्हें शाब्दिक टैग दिखाए बिना रेंडर किया जाता है।'; @override - String get markdownHtmlSafety => 'सुरक्षा नियम'; + String get syntaxReferenceSafety => 'सुरक्षा नियम'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'कच्चे HTML को प्रीव्यू से पहले पार्स और साफ़ किया जाता है।'; @override - String get markdownHtmlHeadings => 'शीर्षक'; + String get syntaxReferenceHeadings => 'शीर्षक'; @override - String get markdownHtmlParagraphs => 'पैराग्राफ'; + String get syntaxReferenceParagraphs => 'पैराग्राफ'; @override - String get markdownHtmlLists => 'सूचियाँ'; + String get syntaxReferenceLists => 'सूचियाँ'; @override - String get markdownHtmlHtmlContainers => 'कंटेनर'; + String get syntaxReferenceHtmlContainers => 'कंटेनर'; @override - String get markdownHtmlHtmlTextBlocks => 'टेक्स्ट ब्लॉक'; + String get syntaxReferenceHtmlTextBlocks => 'टेक्स्ट ब्लॉक'; @override - String get markdownHtmlHtmlFigures => 'फ़िगर और चित्र'; + String get syntaxReferenceHtmlFigures => 'फ़िगर और चित्र'; @override - String get markdownHtmlHtmlPreformatted => 'पूर्व-स्वरूपित कोड'; + String get syntaxReferenceHtmlPreformatted => 'पूर्व-स्वरूपित कोड'; @override - String get markdownHtmlHtmlDisclosure => 'खुलने वाले ब्लॉक'; + String get syntaxReferenceHtmlDisclosure => 'खुलने वाले ब्लॉक'; @override - String get markdownHtmlHtmlDescriptionLists => 'विवरण सूचियाँ'; + String get syntaxReferenceHtmlDescriptionLists => 'विवरण सूचियाँ'; @override - String get markdownHtmlHtmlFormattingTags => 'फ़ॉर्मैटिंग टैग'; + String get syntaxReferenceHtmlFormattingTags => 'फ़ॉर्मैटिंग टैग'; @override - String get markdownHtmlHtmlInlineCodeTags => 'इनलाइन कोड टैग'; + String get syntaxReferenceHtmlInlineCodeTags => 'इनलाइन कोड टैग'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'अर्थपूर्ण टेक्स्ट टैग'; + String get syntaxReferenceHtmlNeutralInlineTags => 'अर्थपूर्ण टेक्स्ट टैग'; @override - String get markdownHtmlSanitizedPreview => 'साफ़ किया गया प्रीव्यू'; + String get syntaxReferenceSanitizedPreview => 'साफ़ किया गया प्रीव्यू'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'अनुमत HTML को BusyMark प्रीव्यू ब्लॉक में बदला जाता है, ब्राउज़र में रेंडर नहीं किया जाता।'; @override - String get markdownHtmlSourcePreserved => 'स्रोत सुरक्षित रहता है'; + String get syntaxReferenceSourcePreserved => 'स्रोत सुरक्षित रहता है'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'असंपादित कच्चे HTML को ठीक उसी तरह स्रोत टेक्स्ट के रूप में सहेजा जाता है।'; @override - String get markdownHtmlMarkdownInsideHtml => 'HTML के अंदर Markdown'; + String get syntaxReferenceMarkdownInsideHtml => 'HTML के अंदर Markdown'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'कच्चे HTML के अंदर Markdown चिह्न शाब्दिक टेक्स्ट की तरह दिखते हैं।'; @override - String get markdownHtmlBlockedContent => 'सक्रिय सामग्री अवरुद्ध'; + String get syntaxReferenceBlockedContent => 'सक्रिय सामग्री अवरुद्ध'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'स्क्रिप्ट, स्टाइल, फ़्रेम, फ़ॉर्म, SVG, MathML, इवेंट और असुरक्षित एट्रिब्यूट अवरुद्ध किए जाते हैं।'; @override - String get markdownHtmlSafeUrls => 'केवल सुरक्षित URL'; + String get syntaxReferenceSafeUrls => 'केवल सुरक्षित URL'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'लिंक http, https, mailto, tel, सापेक्ष URL और फ़्रैगमेंट स्वीकार करते हैं; असुरक्षित स्कीमें अवरुद्ध की जाती हैं।'; + @override + String get syntaxReferenceCategory => 'श्रेणी'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'आरेख और API'; + + @override + String get syntaxReferenceCategoryMathematics => 'गणित'; + + @override + String get syntaxReferenceExample => 'उदाहरण'; + + @override + String get syntaxReferenceIdentifiers => 'पहचानकर्ता और उपनाम'; + + @override + String get syntaxReferenceScope => 'दायरा'; + + @override + String get syntaxReferenceLimitation => 'BusyMark की सीमा'; + + @override + String get syntaxReferenceOfficialDocumentation => 'आधिकारिक दस्तावेज़'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'सामान्य Markdown और Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'केवल Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'केवल Writerside Markdown और Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'मुख्य Markdown रूप जिन्हें BusyMark लिख और पूर्वावलोकित कर सकता है।'; + + @override + String get syntaxReferenceParagraphExample => 'पाठ का एक अनुच्छेद।'; + + @override + String get syntaxReferenceTableLimitation => + 'तालिकाएँ GitHub Flavored Markdown की पाइप सिंटैक्स का उपयोग करती हैं।'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'पंक्ति के अंत में दो रिक्तियाँ, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark, Markdown स्रोत में कच्चे HTML का सीमित और सुरक्षित उपसमुच्चय स्वीकार करता है।'; + + @override + String get syntaxReferenceDiagramsDescription => + 'बाड़ वाले Mermaid, PlantUML, D2 और OpenAPI ब्लॉक Markdown स्रोत में काम करते हैं। बाड़ पहचानकर्ता अक्षर केस से स्वतंत्र हैं और BusyMark मूल वर्तनी सुरक्षित रखता है।'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'बाड़ वाला YAML या JSON सामग्री उपयोग करें। BusyMark किसी भी पूरे YAML या JSON दस्तावेज़ को OpenAPI संदर्भ नहीं मानता।'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'आरेखों के लिए सिमैंटिक कोड ब्लॉक'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'सिमैंटिक code-block और src रूप Mermaid, PlantUML और D2 का समर्थन करते हैं, OpenAPI का नहीं, और केवल Writerside परियोजनाओं में काम करते हैं।'; + + @override + String get syntaxReferenceReferencedDiagramSource => 'संदर्भित आरेख स्रोत'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'पथ सापेक्ष होने चाहिए और खुले Writerside प्रोजेक्ट के भीतर रहने चाहिए; बाड़ के साथ src वाला रूप केवल Writerside Markdown के लिए है।'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark TeX व्यंजकों का समर्थन करता है, पूर्ण TeX या LaTeX दस्तावेज़ों का नहीं।'; + + @override + String get syntaxReferenceInlineMath => 'इनलाइन गणित'; + + @override + String get syntaxReferenceGithubMath => 'डॉलर और बैकटिक वाला GitHub गणित'; + + @override + String get syntaxReferenceDisplayMath => 'प्रदर्शित गणित'; + + @override + String get syntaxReferenceMathFence => 'math बाड़'; + + @override + String get syntaxReferenceTexFence => 'tex बाड़'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark \\(...\\) या \\[...\\] को Markdown गणित सीमांकक नहीं मानता।'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Writerside मोड के बाहर tex बाड़ सामान्य कोड ब्लॉक ही रहता है।'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside math तत्व'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math तत्व सिमैंटिक Writerside सिंटैक्स है, अनुमत कच्चा HTML MathML नहीं।'; + + @override + String get syntaxReferenceSemanticTexBlock => 'सिमैंटिक TeX कोड ब्लॉक'; + + @override + String get syntaxReferenceWritersideDescription => + 'ये केंद्रित एक्सटेंशन केवल खुले Writerside प्रोजेक्ट में समझे जाते हैं।'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'सूचना ब्लॉककोट'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'सादा ब्लॉककोट Writerside Markdown में सुझाव होता है; सामान्य Markdown में वह सामान्य उद्धरण ही रहता है।'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'सिमैंटिक सूचनाएँ'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'सामान्य Markdown इन सिमैंटिक Writerside तत्वों को नहीं समझता।'; + + @override + String get syntaxReferenceCollapsibleHeading => 'सिकोड़ा जा सकने वाला शीर्षक'; + + @override + String get syntaxReferenceCollapsibleCode => 'सिकोड़ा जा सकने वाला कोड बाड़'; + + @override + String get syntaxReferenceSemanticCollapsibles => 'सिमैंटिक संकुचित सामग्री'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark सिकोड़े जा सकने वाले chapter, procedure, code-block और परिभाषा-सूची रूपों का समर्थन करता है, पूरे Writerside कैटलॉग का नहीं।'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'गणित और आरेखों के लिए सिमैंटिक कोड ब्लॉक'; + + @override + String get syntaxReferenceVideo => 'Writerside वीडियो'; + + @override + String get syntaxReferenceVideoLimitation => + 'स्थानीय वीडियो स्थानीय preview-src चित्र उपयोग करता है; होस्ट किए गए स्रोत समर्थित YouTube या Vimeo HTTPS URL होने चाहिए।'; + @override String get exportAsPdf => 'PDF के रूप में निर्यात करें'; diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart index ef70dc34..8f468f89 100644 --- a/lib/l10n/generated/app_localizations_id.dart +++ b/lib/l10n/generated/app_localizations_id.dart @@ -452,8 +452,7 @@ class AppLocalizationsId extends AppLocalizations { 'Tampilkan referensi pintasan keyboard ini'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Buka referensi Markdown dan HTML'; + String get shortcutSyntaxReferenceDescription => 'Buka referensi sintaks'; @override String get shortcutSettingsDescription => 'Buka pengaturan BusyMark'; @@ -2659,115 +2658,292 @@ class AppLocalizationsId extends AppLocalizations { String get gitErrorCommandFailed => 'Perintah Git gagal.'; @override - String get markdownAndHtml => 'Markdown dan HTML'; + String get syntaxReference => 'Referensi Sintaks'; @override - String get markdownHtmlMarkdownBlocks => 'Blok Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Blok Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Struktur blok didukung dalam sumber Markdown dan pratinjau.'; @override - String get markdownHtmlInlineFormatting => 'Markdown Sebaris'; + String get syntaxReferenceInlineFormatting => 'Markdown Sebaris'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Pemformatan yang bisa muncul di dalam paragraf, item daftar, dan sel tabel.'; @override - String get markdownHtmlRawHtmlBlocks => 'Blok HTML Mentah'; + String get syntaxReferenceRawHtmlBlocks => 'Blok HTML Mentah'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Tag HTML tingkat blok yang aman dirender melalui widget pratinjau BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Tag Sebaris HTML Mentah'; + String get syntaxReferenceRawHtmlInline => 'Tag Sebaris HTML Mentah'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Tag HTML sebaris aman dirender tanpa menampilkan tag literal.'; @override - String get markdownHtmlSafety => 'Aturan Keamanan'; + String get syntaxReferenceSafety => 'Aturan Keamanan'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'HTML mentah diurai dan dibersihkan sebelum rendering pratinjau.'; @override - String get markdownHtmlHeadings => 'Judul'; + String get syntaxReferenceHeadings => 'Judul'; @override - String get markdownHtmlParagraphs => 'Paragraf'; + String get syntaxReferenceParagraphs => 'Paragraf'; @override - String get markdownHtmlLists => 'Daftar'; + String get syntaxReferenceLists => 'Daftar'; @override - String get markdownHtmlHtmlContainers => 'Kontainer'; + String get syntaxReferenceHtmlContainers => 'Kontainer'; @override - String get markdownHtmlHtmlTextBlocks => 'Blok teks'; + String get syntaxReferenceHtmlTextBlocks => 'Blok teks'; @override - String get markdownHtmlHtmlFigures => 'Gambar dan ilustrasi'; + String get syntaxReferenceHtmlFigures => 'Gambar dan ilustrasi'; @override - String get markdownHtmlHtmlPreformatted => + String get syntaxReferenceHtmlPreformatted => 'Kode yang telah diformat sebelumnya'; @override - String get markdownHtmlHtmlDisclosure => 'Blok detail yang dapat dibuka'; + String get syntaxReferenceHtmlDisclosure => 'Blok detail yang dapat dibuka'; @override - String get markdownHtmlHtmlDescriptionLists => 'Daftar deskripsi'; + String get syntaxReferenceHtmlDescriptionLists => 'Daftar deskripsi'; @override - String get markdownHtmlHtmlFormattingTags => 'Tag pemformatan'; + String get syntaxReferenceHtmlFormattingTags => 'Tag pemformatan'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Tag kode sebaris'; + String get syntaxReferenceHtmlInlineCodeTags => 'Tag kode sebaris'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Tag teks semantik'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Tag teks semantik'; @override - String get markdownHtmlSanitizedPreview => 'Pratinjau yang sudah disanitasi'; + String get syntaxReferenceSanitizedPreview => + 'Pratinjau yang sudah disanitasi'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'HTML yang diizinkan diubah menjadi blok pratinjau BusyMark, tidak dirender di browser.'; @override - String get markdownHtmlSourcePreserved => 'Sumber dipertahankan'; + String get syntaxReferenceSourcePreserved => 'Sumber dipertahankan'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'HTML mentah yang belum diedit disimpan kembali persis seperti teks sumber.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown di dalam HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown di dalam HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Penanda Markdown di dalam HTML mentah dirender sebagai teks literal.'; @override - String get markdownHtmlBlockedContent => 'Konten aktif yang diblokir'; + String get syntaxReferenceBlockedContent => 'Konten aktif yang diblokir'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Skrip, gaya, bingkai, formulir, SVG, MathML, peristiwa, dan atribut tidak aman diblokir.'; @override - String get markdownHtmlSafeUrls => 'Hanya URL aman'; + String get syntaxReferenceSafeUrls => 'Hanya URL aman'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Tautan mengizinkan URL http, https, mailto, tel, relatif, dan fragmen; skema yang tidak aman diblokir.'; + @override + String get syntaxReferenceCategory => 'Kategori'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagram dan API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matematika'; + + @override + String get syntaxReferenceExample => 'Contoh'; + + @override + String get syntaxReferenceIdentifiers => 'Pengenal dan alias'; + + @override + String get syntaxReferenceScope => 'Cakupan'; + + @override + String get syntaxReferenceLimitation => 'Batasan BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Dokumentasi resmi'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown biasa dan Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Hanya Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Hanya Markdown Writerside dan XML Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Bentuk Markdown utama yang dapat ditulis dan dipratinjau BusyMark.'; + + @override + String get syntaxReferenceParagraphExample => 'Sebuah paragraf teks.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tabel memakai sintaks garis vertikal GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'dua spasi di akhir baris, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark menerima subset HTML mentah yang terbatas dan aman dalam sumber Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Blok berpagar Mermaid, PlantUML, D2, dan OpenAPI berfungsi dalam sumber Markdown. Pengenal pagar tidak peka huruf besar-kecil dan BusyMark mempertahankan ejaan sumber.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Gunakan konten YAML atau JSON berpagar. BusyMark tidak memperlakukan sembarang dokumen YAML atau JSON utuh sebagai referensi OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Blok kode semantik untuk diagram'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Bentuk semantik code-block dan src mendukung Mermaid, PlantUML, dan D2, bukan OpenAPI, dan hanya dalam proyek Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Sumber diagram yang dirujuk'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Jalur harus relatif dan tetap di dalam proyek Writerside yang dibuka; bentuk pagar dengan src hanya untuk Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark mendukung ekspresi TeX, bukan dokumen TeX atau LaTeX lengkap.'; + + @override + String get syntaxReferenceInlineMath => 'Matematika sebaris'; + + @override + String get syntaxReferenceGithubMath => + 'Matematika GitHub dengan dolar dan tanda petik balik'; + + @override + String get syntaxReferenceDisplayMath => 'Matematika tampilan'; + + @override + String get syntaxReferenceMathFence => 'Pagar math'; + + @override + String get syntaxReferenceTexFence => 'Pagar tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark tidak mengenali \\(...\\) atau \\[...\\] sebagai pembatas matematika Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Di luar mode Writerside, pagar tex tetap menjadi blok kode biasa.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Elemen math Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Elemen math adalah sintaks semantik Writerside, bukan HTML MathML mentah yang diizinkan.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Blok kode TeX semantik'; + + @override + String get syntaxReferenceWritersideDescription => + 'Ekstensi terpilih ini hanya ditafsirkan di dalam proyek Writerside yang dibuka.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Kutipan blok keterangan'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Kutipan blok biasa menjadi tip dalam Markdown Writerside; dalam Markdown biasa tetap menjadi kutipan biasa.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Keterangan semantik'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Markdown biasa tidak menafsirkan elemen semantik Writerside ini.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Judul yang dapat diciutkan'; + + @override + String get syntaxReferenceCollapsibleCode => + 'Pagar kode yang dapat diciutkan'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Konten semantik yang dapat diciutkan'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark mendukung bentuk chapter, procedure, code-block, dan daftar definisi yang dapat diciutkan, bukan seluruh katalog Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Blok kode semantik untuk matematika dan diagram'; + + @override + String get syntaxReferenceVideo => 'Video Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Video lokal memakai gambar preview-src lokal; sumber yang dihosting harus berupa URL HTTPS YouTube atau Vimeo yang didukung.'; + @override String get exportAsPdf => 'Ekspor sebagai PDF'; diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 0f38cf58..857bc52e 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -452,8 +452,8 @@ class AppLocalizationsIt extends AppLocalizations { 'Mostra il riferimento alle scorciatoie da tastiera'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Apri il riferimento Markdown e HTML'; + String get shortcutSyntaxReferenceDescription => + 'Apri il riferimento della sintassi'; @override String get shortcutSettingsDescription => 'Apri le impostazioni di BusyMark'; @@ -2676,114 +2676,291 @@ class AppLocalizationsIt extends AppLocalizations { String get gitErrorCommandFailed => 'Comando Git non riuscito.'; @override - String get markdownAndHtml => 'Markdown e HTML'; + String get syntaxReference => 'Riferimento della sintassi'; @override - String get markdownHtmlMarkdownBlocks => 'Blocchi Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Blocchi Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Strutture a blocchi supportate nel sorgente Markdown e nell’anteprima.'; @override - String get markdownHtmlInlineFormatting => 'Markdown in linea'; + String get syntaxReferenceInlineFormatting => 'Markdown in linea'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formattazione dentro paragrafi, elementi di elenco e celle di tabella.'; @override - String get markdownHtmlRawHtmlBlocks => 'Blocchi HTML grezzi'; + String get syntaxReferenceRawHtmlBlocks => 'Blocchi HTML grezzi'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Tag HTML di blocco sicuri renderizzati dai widget di anteprima BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Tag HTML grezzi in linea'; + String get syntaxReferenceRawHtmlInline => 'Tag HTML grezzi in linea'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Tag HTML in linea sicuri renderizzati senza mostrare i tag letterali.'; @override - String get markdownHtmlSafety => 'Regole di sicurezza'; + String get syntaxReferenceSafety => 'Regole di sicurezza'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'L’HTML grezzo viene analizzato e sanificato prima dell’anteprima.'; @override - String get markdownHtmlHeadings => 'Titoli'; + String get syntaxReferenceHeadings => 'Titoli'; @override - String get markdownHtmlParagraphs => 'Paragrafi'; + String get syntaxReferenceParagraphs => 'Paragrafi'; @override - String get markdownHtmlLists => 'Elenchi'; + String get syntaxReferenceLists => 'Elenchi'; @override - String get markdownHtmlHtmlContainers => 'Contenitori'; + String get syntaxReferenceHtmlContainers => 'Contenitori'; @override - String get markdownHtmlHtmlTextBlocks => 'Blocchi di testo'; + String get syntaxReferenceHtmlTextBlocks => 'Blocchi di testo'; @override - String get markdownHtmlHtmlFigures => 'Figure e immagini'; + String get syntaxReferenceHtmlFigures => 'Figure e immagini'; @override - String get markdownHtmlHtmlPreformatted => 'Codice preformattato'; + String get syntaxReferenceHtmlPreformatted => 'Codice preformattato'; @override - String get markdownHtmlHtmlDisclosure => 'Blocchi espandibili'; + String get syntaxReferenceHtmlDisclosure => 'Blocchi espandibili'; @override - String get markdownHtmlHtmlDescriptionLists => 'Elenchi descrittivi'; + String get syntaxReferenceHtmlDescriptionLists => 'Elenchi descrittivi'; @override - String get markdownHtmlHtmlFormattingTags => 'Tag di formattazione'; + String get syntaxReferenceHtmlFormattingTags => 'Tag di formattazione'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Tag di codice in linea'; + String get syntaxReferenceHtmlInlineCodeTags => 'Tag di codice in linea'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Tag di testo semantico'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Tag di testo semantico'; @override - String get markdownHtmlSanitizedPreview => 'Anteprima sanificata'; + String get syntaxReferenceSanitizedPreview => 'Anteprima sanificata'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'L’HTML consentito viene convertito in blocchi di anteprima BusyMark e non viene renderizzato in un browser.'; @override - String get markdownHtmlSourcePreserved => 'Codice sorgente conservato'; + String get syntaxReferenceSourcePreserved => 'Codice sorgente conservato'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'L’HTML grezzo non modificato viene salvato esattamente come testo sorgente.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown dentro HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown dentro HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'I marcatori Markdown dentro HTML grezzo vengono visualizzati come testo letterale.'; @override - String get markdownHtmlBlockedContent => 'Contenuto attivo bloccato'; + String get syntaxReferenceBlockedContent => 'Contenuto attivo bloccato'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Script, stili, frame, moduli, SVG, MathML, eventi e attributi non sicuri vengono bloccati.'; @override - String get markdownHtmlSafeUrls => 'Solo URL sicuri'; + String get syntaxReferenceSafeUrls => 'Solo URL sicuri'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'I link consentono http, https, mailto, tel, URL relativi e frammenti; gli schemi non sicuri sono bloccati.'; + @override + String get syntaxReferenceCategory => 'Categoria'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagrammi e API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matematica'; + + @override + String get syntaxReferenceExample => 'Esempio'; + + @override + String get syntaxReferenceIdentifiers => 'Identificatori e alias'; + + @override + String get syntaxReferenceScope => 'Ambito'; + + @override + String get syntaxReferenceLimitation => 'Limitazione di BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Documentazione ufficiale'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown normale e Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Solo Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Solo Markdown Writerside e XML Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Le forme Markdown essenziali che BusyMark può creare e visualizzare in anteprima.'; + + @override + String get syntaxReferenceParagraphExample => 'Un paragrafo di testo.'; + + @override + String get syntaxReferenceTableLimitation => + 'Le tabelle usano la sintassi con barre verticali di GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'due spazi a fine riga, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark accetta un sottoinsieme sicuro e mirato di HTML grezzo nel sorgente Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'I blocchi delimitati Mermaid, PlantUML, D2 e OpenAPI funzionano nel sorgente Markdown. Gli identificatori non distinguono maiuscole e minuscole e BusyMark conserva la grafia originale.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Usare contenuto YAML o JSON in un blocco delimitato. BusyMark non considera un qualsiasi documento YAML o JSON completo come riferimento OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Blocchi di codice semantici per diagrammi'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Le forme semantiche code-block e src supportano Mermaid, PlantUML e D2, non OpenAPI, e solo nei progetti Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Sorgente di diagramma referenziato'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'I percorsi devono essere relativi e restare nel progetto Writerside aperto; la forma blocco delimitato con src è solo per Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark supporta espressioni TeX, non documenti TeX o LaTeX completi.'; + + @override + String get syntaxReferenceInlineMath => 'Formula in linea'; + + @override + String get syntaxReferenceGithubMath => + 'Formula GitHub con dollaro e accento grave'; + + @override + String get syntaxReferenceDisplayMath => 'Formula visualizzata'; + + @override + String get syntaxReferenceMathFence => 'Blocco delimitato math'; + + @override + String get syntaxReferenceTexFence => 'Blocco delimitato tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark non riconosce \\(...\\) o \\[...\\] come delimitatori matematici Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Fuori dalla modalità Writerside, un blocco tex resta un normale blocco di codice.'; + + @override + String get syntaxReferenceWritersideMathElement => + 'Elemento math di Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'L’elemento math è sintassi semantica Writerside, non MathML HTML grezzo consentito.'; + + @override + String get syntaxReferenceSemanticTexBlock => + 'Blocco di codice TeX semantico'; + + @override + String get syntaxReferenceWritersideDescription => + 'Queste estensioni mirate sono interpretate solo nei progetti Writerside aperti.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Citazione di avviso'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Una citazione semplice è un suggerimento in Markdown Writerside; resta una citazione normale nel Markdown comune.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Avvisi semantici'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Il Markdown comune non interpreta questi elementi semantici Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Titolo comprimibile'; + + @override + String get syntaxReferenceCollapsibleCode => 'Blocco di codice comprimibile'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Contenuto semantico comprimibile'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark supporta le forme comprimibili chapter, procedure, code-block ed elenco di definizioni, non l’intero catalogo Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Blocchi di codice semantici per formule e diagrammi'; + + @override + String get syntaxReferenceVideo => 'Video Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Il video locale usa un’immagine preview-src locale; le sorgenti ospitate devono essere URL HTTPS supportati di YouTube o Vimeo.'; + @override String get exportAsPdf => 'Esporta come PDF'; diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart index 6c459f50..b8cc4587 100644 --- a/lib/l10n/generated/app_localizations_ja.dart +++ b/lib/l10n/generated/app_localizations_ja.dart @@ -444,7 +444,7 @@ class AppLocalizationsJa extends AppLocalizations { String get shortcutKeyboardShortcutsDescription => 'このキーボードショートカット一覧を表示'; @override - String get shortcutMarkdownAndHtmlDescription => 'Markdown と HTML のリファレンスを開く'; + String get shortcutSyntaxReferenceDescription => '構文リファレンスを開く'; @override String get shortcutSettingsDescription => 'BusyMark の設定を開く'; @@ -2576,114 +2576,282 @@ class AppLocalizationsJa extends AppLocalizations { String get gitErrorCommandFailed => 'Git コマンドに失敗しました。'; @override - String get markdownAndHtml => 'Markdown と HTML'; + String get syntaxReference => '構文リファレンス'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown ブロック'; + String get syntaxReferenceMarkdownBlocks => 'Markdown ブロック'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Markdown のソースとプレビューでサポートされるブロック構造'; @override - String get markdownHtmlInlineFormatting => 'インライン Markdown'; + String get syntaxReferenceInlineFormatting => 'インライン Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => '段落、リスト項目、表のセル内で使用できる書式'; @override - String get markdownHtmlRawHtmlBlocks => '生 HTML ブロック'; + String get syntaxReferenceRawHtmlBlocks => '生 HTML ブロック'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'BusyMark のプレビューウィジェットでレンダリングされる安全なブロックレベル HTML タグ'; @override - String get markdownHtmlRawHtmlInline => '生 HTML インラインタグ'; + String get syntaxReferenceRawHtmlInline => '生 HTML インラインタグ'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'リテラルタグを表示せずにレンダリングされる安全なインライン HTML タグ'; @override - String get markdownHtmlSafety => '安全性のルール'; + String get syntaxReferenceSafety => '安全性のルール'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => '生 HTML はプレビューのレンダリング前に解析およびサニタイズされます。'; @override - String get markdownHtmlHeadings => '見出し'; + String get syntaxReferenceHeadings => '見出し'; @override - String get markdownHtmlParagraphs => '段落'; + String get syntaxReferenceParagraphs => '段落'; @override - String get markdownHtmlLists => 'リスト'; + String get syntaxReferenceLists => 'リスト'; @override - String get markdownHtmlHtmlContainers => 'コンテナー'; + String get syntaxReferenceHtmlContainers => 'コンテナー'; @override - String get markdownHtmlHtmlTextBlocks => 'テキストブロック'; + String get syntaxReferenceHtmlTextBlocks => 'テキストブロック'; @override - String get markdownHtmlHtmlFigures => '図と画像'; + String get syntaxReferenceHtmlFigures => '図と画像'; @override - String get markdownHtmlHtmlPreformatted => '整形済みコード'; + String get syntaxReferenceHtmlPreformatted => '整形済みコード'; @override - String get markdownHtmlHtmlDisclosure => '折りたたみブロック'; + String get syntaxReferenceHtmlDisclosure => '折りたたみブロック'; @override - String get markdownHtmlHtmlDescriptionLists => '説明リスト'; + String get syntaxReferenceHtmlDescriptionLists => '説明リスト'; @override - String get markdownHtmlHtmlFormattingTags => '書式タグ'; + String get syntaxReferenceHtmlFormattingTags => '書式タグ'; @override - String get markdownHtmlHtmlInlineCodeTags => 'インラインコードタグ'; + String get syntaxReferenceHtmlInlineCodeTags => 'インラインコードタグ'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'セマンティックテキストタグ'; + String get syntaxReferenceHtmlNeutralInlineTags => 'セマンティックテキストタグ'; @override - String get markdownHtmlSanitizedPreview => 'サニタイズ済みプレビュー'; + String get syntaxReferenceSanitizedPreview => 'サニタイズ済みプレビュー'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => '許可された HTML はブラウザーでレンダリングされず、BusyMark のプレビューブロックに変換されます。'; @override - String get markdownHtmlSourcePreserved => 'ソースを保持'; + String get syntaxReferenceSourcePreserved => 'ソースを保持'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => '編集されていない生 HTML はソーステキストのまま正確に保存されます。'; @override - String get markdownHtmlMarkdownInsideHtml => 'HTML 内の Markdown'; + String get syntaxReferenceMarkdownInsideHtml => 'HTML 内の Markdown'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => '生 HTML 内の Markdown マーカーはリテラルテキストとしてレンダリングされます。'; @override - String get markdownHtmlBlockedContent => 'ブロックされたアクティブコンテンツ'; + String get syntaxReferenceBlockedContent => 'ブロックされたアクティブコンテンツ'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'スクリプト、スタイル、フレーム、フォーム、SVG、MathML、イベント、安全でない属性はブロックされます。'; @override - String get markdownHtmlSafeUrls => '安全な URL のみ'; + String get syntaxReferenceSafeUrls => '安全な URL のみ'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'リンクでは http、https、mailto、tel、相対パス、フラグメント URL が許可されます。安全でないスキームはブロックされます。'; + @override + String get syntaxReferenceCategory => 'カテゴリ'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => '図と API'; + + @override + String get syntaxReferenceCategoryMathematics => '数式'; + + @override + String get syntaxReferenceExample => '例'; + + @override + String get syntaxReferenceIdentifiers => '識別子と別名'; + + @override + String get syntaxReferenceScope => '対象'; + + @override + String get syntaxReferenceLimitation => 'BusyMark での制限'; + + @override + String get syntaxReferenceOfficialDocumentation => '公式ドキュメント'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + '通常の Markdown と Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => 'Writerside Markdown のみ'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Writerside Markdown と Writerside XML のみ'; + + @override + String get syntaxReferenceMarkdownDescription => + 'BusyMark で作成およびプレビューできる主要な Markdown 形式です。'; + + @override + String get syntaxReferenceParagraphExample => 'テキストの段落です。'; + + @override + String get syntaxReferenceTableLimitation => + '表では GitHub Flavored Markdown のパイプ構文を使用します。'; + + @override + String get syntaxReferenceHardBreakIdentifiers => '行末の半角スペース 2 個、\\、
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark は Markdown ソース内の限定された安全な生 HTML のみを受け付けます。'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Mermaid、PlantUML、D2、OpenAPI のフェンス付きブロックは Markdown ソースで機能します。フェンス識別子では大文字と小文字を区別せず、BusyMark は元の表記を保持します。'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'フェンス内に YAML または JSON を記述してください。BusyMark は任意の YAML または JSON ファイル全体を OpenAPI リファレンスとして扱いません。'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => '図用のセマンティックコードブロック'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'セマンティックな code-block と src 形式で使用できるのは Mermaid、PlantUML、D2 です。OpenAPI には使用できず、Writerside プロジェクト内でのみ機能します。'; + + @override + String get syntaxReferenceReferencedDiagramSource => '参照する図のソース'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'パスは相対パスで、開いている Writerside プロジェクト内に収まる必要があります。フェンスと src の形式は Writerside Markdown 専用です。'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark が対応するのは TeX 式であり、完全な TeX または LaTeX 文書ではありません。'; + + @override + String get syntaxReferenceInlineMath => 'インライン数式'; + + @override + String get syntaxReferenceGithubMath => 'ドル記号とバッククォートによる GitHub 数式'; + + @override + String get syntaxReferenceDisplayMath => '別行立て数式'; + + @override + String get syntaxReferenceMathFence => 'math フェンス'; + + @override + String get syntaxReferenceTexFence => 'tex フェンス'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark は \\(...\\) と \\[...\\] を Markdown の数式区切りとして認識しません。'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Writerside モード以外では、tex フェンスは通常のコードブロックのままです。'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside の math 要素'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math 要素は Writerside のセマンティック構文であり、許可された生 HTML MathML ではありません。'; + + @override + String get syntaxReferenceSemanticTexBlock => 'セマンティック TeX コードブロック'; + + @override + String get syntaxReferenceWritersideDescription => + 'ここで示す拡張は、開いている Writerside プロジェクト内でのみ解釈されます。'; + + @override + String get syntaxReferenceAdmonitionBlockquote => '注意書きの引用'; + + @override + String get syntaxReferenceAdmonitionLimitation => + '通常のブロック引用は Writerside Markdown ではヒントになり、通常の Markdown では通常の引用のままです。'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'セマンティックな注意書き'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + '通常の Markdown は、これらの Writerside セマンティック要素を解釈しません。'; + + @override + String get syntaxReferenceCollapsibleHeading => '折りたたみ可能な見出し'; + + @override + String get syntaxReferenceCollapsibleCode => '折りたたみ可能なコードフェンス'; + + @override + String get syntaxReferenceSemanticCollapsibles => 'セマンティックな折りたたみコンテンツ'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark が対応する折りたたみ形式は chapter、procedure、code-block、定義リストです。Writerside の全カタログには対応しません。'; + + @override + String get syntaxReferenceSemanticCodeBlocks => '数式と図用のセマンティックコードブロック'; + + @override + String get syntaxReferenceVideo => 'Writerside 動画'; + + @override + String get syntaxReferenceVideoLimitation => + 'ローカル動画にはローカルの preview-src 画像を使用します。ホスト動画は対応する YouTube または Vimeo の HTTPS URL に限られます。'; + @override String get exportAsPdf => 'PDF としてエクスポート'; diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart index f1671a23..fc369c89 100644 --- a/lib/l10n/generated/app_localizations_ko.dart +++ b/lib/l10n/generated/app_localizations_ko.dart @@ -442,7 +442,7 @@ class AppLocalizationsKo extends AppLocalizations { String get shortcutKeyboardShortcutsDescription => '이 키보드 단축키 참조 표시'; @override - String get shortcutMarkdownAndHtmlDescription => 'Markdown 및 HTML 참조 열기'; + String get shortcutSyntaxReferenceDescription => '구문 참조 열기'; @override String get shortcutSettingsDescription => 'BusyMark 설정 열기'; @@ -2571,114 +2571,282 @@ class AppLocalizationsKo extends AppLocalizations { String get gitErrorCommandFailed => 'Git 명령이 실패했습니다.'; @override - String get markdownAndHtml => 'Markdown 및 HTML'; + String get syntaxReference => '구문 참조'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown 블록'; + String get syntaxReferenceMarkdownBlocks => 'Markdown 블록'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Markdown 소스 및 미리보기에서 블록 구조가 지원됩니다.'; @override - String get markdownHtmlInlineFormatting => '인라인 Markdown'; + String get syntaxReferenceInlineFormatting => '인라인 Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => '단락, 목록 항목 및 표 셀 내부에 나타날 수 있는 서식입니다.'; @override - String get markdownHtmlRawHtmlBlocks => '원시 HTML 블록'; + String get syntaxReferenceRawHtmlBlocks => '원시 HTML 블록'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'BusyMark 미리보기 위젯을 통해 렌더링되는 안전한 블록 수준 HTML 태그입니다.'; @override - String get markdownHtmlRawHtmlInline => '원시 HTML 인라인 태그'; + String get syntaxReferenceRawHtmlInline => '원시 HTML 인라인 태그'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => '리터럴 태그를 표시하지 않고 렌더링되는 안전한 인라인 HTML 태그입니다.'; @override - String get markdownHtmlSafety => '안전 규칙'; + String get syntaxReferenceSafety => '안전 규칙'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => '원시 HTML은 미리 보기 렌더링 전에 구문 분석되고 정리됩니다.'; @override - String get markdownHtmlHeadings => '제목'; + String get syntaxReferenceHeadings => '제목'; @override - String get markdownHtmlParagraphs => '단락'; + String get syntaxReferenceParagraphs => '단락'; @override - String get markdownHtmlLists => '목록'; + String get syntaxReferenceLists => '목록'; @override - String get markdownHtmlHtmlContainers => '컨테이너'; + String get syntaxReferenceHtmlContainers => '컨테이너'; @override - String get markdownHtmlHtmlTextBlocks => '텍스트 블록'; + String get syntaxReferenceHtmlTextBlocks => '텍스트 블록'; @override - String get markdownHtmlHtmlFigures => '그림 및 이미지'; + String get syntaxReferenceHtmlFigures => '그림 및 이미지'; @override - String get markdownHtmlHtmlPreformatted => '미리 서식이 지정된 코드'; + String get syntaxReferenceHtmlPreformatted => '미리 서식이 지정된 코드'; @override - String get markdownHtmlHtmlDisclosure => '접기 블록'; + String get syntaxReferenceHtmlDisclosure => '접기 블록'; @override - String get markdownHtmlHtmlDescriptionLists => '설명 목록'; + String get syntaxReferenceHtmlDescriptionLists => '설명 목록'; @override - String get markdownHtmlHtmlFormattingTags => '서식 태그'; + String get syntaxReferenceHtmlFormattingTags => '서식 태그'; @override - String get markdownHtmlHtmlInlineCodeTags => '인라인 코드 태그'; + String get syntaxReferenceHtmlInlineCodeTags => '인라인 코드 태그'; @override - String get markdownHtmlHtmlNeutralInlineTags => '의미 있는 텍스트 태그'; + String get syntaxReferenceHtmlNeutralInlineTags => '의미 있는 텍스트 태그'; @override - String get markdownHtmlSanitizedPreview => '정리된 미리 보기'; + String get syntaxReferenceSanitizedPreview => '정리된 미리 보기'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => '허용된 HTML은 브라우저에서 렌더링되지 않고 BusyMark 미리보기 블록으로 변환됩니다.'; @override - String get markdownHtmlSourcePreserved => '소스 보존'; + String get syntaxReferenceSourcePreserved => '소스 보존'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => '편집되지 않은 원시 HTML은 소스 텍스트와 동일하게 다시 저장됩니다.'; @override - String get markdownHtmlMarkdownInsideHtml => 'HTML 내부의 Markdown'; + String get syntaxReferenceMarkdownInsideHtml => 'HTML 내부의 Markdown'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => '원시 HTML 내부의 마크다운 마커는 리터럴 텍스트로 렌더링됩니다.'; @override - String get markdownHtmlBlockedContent => '차단된 활성 콘텐츠'; + String get syntaxReferenceBlockedContent => '차단된 활성 콘텐츠'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => '스크립트, 스타일, 프레임, 양식, SVG, MathML, 이벤트 및 안전하지 않은 속성이 차단됩니다.'; @override - String get markdownHtmlSafeUrls => '안전한 URL만 허용'; + String get syntaxReferenceSafeUrls => '안전한 URL만 허용'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => '링크에는 http, https, mailto, tel, 상대 URL 및 프래그먼트 URL만 허용됩니다. 안전하지 않은 스킴은 차단됩니다.'; + @override + String get syntaxReferenceCategory => '범주'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => '다이어그램 및 API'; + + @override + String get syntaxReferenceCategoryMathematics => '수학'; + + @override + String get syntaxReferenceExample => '예제'; + + @override + String get syntaxReferenceIdentifiers => '식별자 및 별칭'; + + @override + String get syntaxReferenceScope => '적용 범위'; + + @override + String get syntaxReferenceLimitation => 'BusyMark 제한 사항'; + + @override + String get syntaxReferenceOfficialDocumentation => '공식 문서'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + '일반 Markdown 및 Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => 'Writerside Markdown 전용'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Writerside Markdown 및 Writerside XML 전용'; + + @override + String get syntaxReferenceMarkdownDescription => + 'BusyMark에서 작성하고 미리 볼 수 있는 핵심 Markdown 형식입니다.'; + + @override + String get syntaxReferenceParagraphExample => '텍스트 문단입니다.'; + + @override + String get syntaxReferenceTableLimitation => + '표는 GitHub Flavored Markdown의 파이프 구문을 사용합니다.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => '줄 끝 공백 두 개, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark는 Markdown 소스에서 제한된 안전한 원시 HTML 하위 집합만 허용합니다.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Mermaid, PlantUML, D2 및 OpenAPI 펜스 블록은 Markdown 소스에서 작동합니다. 펜스 식별자는 대소문자를 구분하지 않으며 BusyMark는 원래 표기를 유지합니다.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + '펜스 안에 YAML 또는 JSON 콘텐츠를 사용하세요. BusyMark는 임의의 전체 YAML 또는 JSON 문서를 OpenAPI 참조로 취급하지 않습니다.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => '다이어그램용 의미론적 코드 블록'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + '의미론적 code-block 및 src 형식은 Mermaid, PlantUML 및 D2만 지원하고 OpenAPI는 지원하지 않으며 Writerside 프로젝트 안에서만 작동합니다.'; + + @override + String get syntaxReferenceReferencedDiagramSource => '참조된 다이어그램 소스'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + '경로는 상대 경로여야 하고 열린 Writerside 프로젝트 안에 있어야 합니다. 펜스와 src 형식은 Writerside Markdown 전용입니다.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark는 TeX 수식을 지원하지만 완전한 TeX 또는 LaTeX 문서는 지원하지 않습니다.'; + + @override + String get syntaxReferenceInlineMath => '인라인 수식'; + + @override + String get syntaxReferenceGithubMath => '달러와 백틱을 사용하는 GitHub 수식'; + + @override + String get syntaxReferenceDisplayMath => '표시 수식'; + + @override + String get syntaxReferenceMathFence => 'math 펜스'; + + @override + String get syntaxReferenceTexFence => 'tex 펜스'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark는 \\(...\\) 또는 \\[...\\]를 Markdown 수식 구분자로 인식하지 않습니다.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Writerside 모드 밖에서는 tex 펜스가 일반 코드 블록으로 남습니다.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside math 요소'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math 요소는 의미론적 Writerside 구문이며 허용된 원시 HTML MathML이 아닙니다.'; + + @override + String get syntaxReferenceSemanticTexBlock => '의미론적 TeX 코드 블록'; + + @override + String get syntaxReferenceWritersideDescription => + '이 확장 기능은 열린 Writerside 프로젝트 안에서만 해석됩니다.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => '알림 인용구'; + + @override + String get syntaxReferenceAdmonitionLimitation => + '일반 블록 인용은 Writerside Markdown에서는 팁이고 일반 Markdown에서는 일반 인용으로 남습니다.'; + + @override + String get syntaxReferenceSemanticAdmonitions => '의미론적 알림'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + '일반 Markdown은 이러한 Writerside 의미론적 요소를 해석하지 않습니다.'; + + @override + String get syntaxReferenceCollapsibleHeading => '접을 수 있는 제목'; + + @override + String get syntaxReferenceCollapsibleCode => '접을 수 있는 코드 펜스'; + + @override + String get syntaxReferenceSemanticCollapsibles => '의미론적 접이식 콘텐츠'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark는 접을 수 있는 chapter, procedure, code-block 및 정의 목록 형식을 지원하지만 전체 Writerside 카탈로그를 지원하지는 않습니다.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => '수식 및 다이어그램용 의미론적 코드 블록'; + + @override + String get syntaxReferenceVideo => 'Writerside 동영상'; + + @override + String get syntaxReferenceVideoLimitation => + '로컬 동영상은 로컬 preview-src 이미지를 사용합니다. 호스팅 동영상은 지원되는 YouTube 또는 Vimeo HTTPS URL이어야 합니다.'; + @override String get exportAsPdf => 'PDF로 내보내기'; diff --git a/lib/l10n/generated/app_localizations_nb.dart b/lib/l10n/generated/app_localizations_nb.dart index ca6fce00..b1a134fc 100644 --- a/lib/l10n/generated/app_localizations_nb.dart +++ b/lib/l10n/generated/app_localizations_nb.dart @@ -453,8 +453,7 @@ class AppLocalizationsNb extends AppLocalizations { 'Vis denne oversikten over tastatursnarveier'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Åpne Markdown- og HTML-referansen'; + String get shortcutSyntaxReferenceDescription => 'Åpne syntaksreferansen'; @override String get shortcutSettingsDescription => 'Åpne BusyMark-innstillinger'; @@ -2653,114 +2652,288 @@ class AppLocalizationsNb extends AppLocalizations { String get gitErrorCommandFailed => 'Git-kommandoen mislyktes.'; @override - String get markdownAndHtml => 'Markdown og HTML'; + String get syntaxReference => 'Syntaksreferanse'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown-blokker'; + String get syntaxReferenceMarkdownBlocks => 'Markdown-blokker'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Blokkstrukturer som støttes i Markdown-kilde og forhåndsvisning.'; @override - String get markdownHtmlInlineFormatting => 'Inline-Markdown'; + String get syntaxReferenceInlineFormatting => 'Inline-Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formatering i avsnitt, listeelementer og tabellceller.'; @override - String get markdownHtmlRawHtmlBlocks => 'Rå HTML-blokker'; + String get syntaxReferenceRawHtmlBlocks => 'Rå HTML-blokker'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Trygge HTML-blokktagger rendres med BusyMark-forhåndsvisning.'; @override - String get markdownHtmlRawHtmlInline => 'Rå HTML-inline-tagger'; + String get syntaxReferenceRawHtmlInline => 'Rå HTML-inline-tagger'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Trygge inline-HTML-tagger rendres uten å vise taggene bokstavelig.'; @override - String get markdownHtmlSafety => 'Sikkerhetsregler'; + String get syntaxReferenceSafety => 'Sikkerhetsregler'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Rå HTML analyseres og renses før forhåndsvisning.'; @override - String get markdownHtmlHeadings => 'Overskrifter'; + String get syntaxReferenceHeadings => 'Overskrifter'; @override - String get markdownHtmlParagraphs => 'Avsnitt'; + String get syntaxReferenceParagraphs => 'Avsnitt'; @override - String get markdownHtmlLists => 'Lister'; + String get syntaxReferenceLists => 'Lister'; @override - String get markdownHtmlHtmlContainers => 'Beholdere'; + String get syntaxReferenceHtmlContainers => 'Beholdere'; @override - String get markdownHtmlHtmlTextBlocks => 'Tekstblokker'; + String get syntaxReferenceHtmlTextBlocks => 'Tekstblokker'; @override - String get markdownHtmlHtmlFigures => 'Figurer og bilder'; + String get syntaxReferenceHtmlFigures => 'Figurer og bilder'; @override - String get markdownHtmlHtmlPreformatted => 'Forhåndsformatert kode'; + String get syntaxReferenceHtmlPreformatted => 'Forhåndsformatert kode'; @override - String get markdownHtmlHtmlDisclosure => 'Utvidbare blokker'; + String get syntaxReferenceHtmlDisclosure => 'Utvidbare blokker'; @override - String get markdownHtmlHtmlDescriptionLists => 'Beskrivelseslister'; + String get syntaxReferenceHtmlDescriptionLists => 'Beskrivelseslister'; @override - String get markdownHtmlHtmlFormattingTags => 'Formateringstagger'; + String get syntaxReferenceHtmlFormattingTags => 'Formateringstagger'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Inline-kodetagger'; + String get syntaxReferenceHtmlInlineCodeTags => 'Inline-kodetagger'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantiske teksttagger'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Semantiske teksttagger'; @override - String get markdownHtmlSanitizedPreview => 'Renset forhåndsvisning'; + String get syntaxReferenceSanitizedPreview => 'Renset forhåndsvisning'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Tillatt HTML konverteres til BusyMark-forhåndsvisningsblokker og rendres ikke i en nettleser.'; @override - String get markdownHtmlSourcePreserved => 'Kilden bevares'; + String get syntaxReferenceSourcePreserved => 'Kilden bevares'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Uendret rå HTML lagres nøyaktig som kildetekst.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown inni HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown inni HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Markdown-markører inni rå HTML vises som bokstavelig tekst.'; @override - String get markdownHtmlBlockedContent => 'Blokkert aktivt innhold'; + String get syntaxReferenceBlockedContent => 'Blokkert aktivt innhold'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Skript, stiler, rammer, skjemaer, SVG, MathML, hendelser og usikre attributter blokkeres.'; @override - String get markdownHtmlSafeUrls => 'Bare trygge URL-er'; + String get syntaxReferenceSafeUrls => 'Bare trygge URL-er'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Lenker tillater http, https, mailto, tel, relative URL-er og fragmenter; usikre URI-skjemaer blokkeres.'; + @override + String get syntaxReferenceCategory => 'Kategori'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagrammer og API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matematikk'; + + @override + String get syntaxReferenceExample => 'Eksempel'; + + @override + String get syntaxReferenceIdentifiers => 'Identifikatorer og aliaser'; + + @override + String get syntaxReferenceScope => 'Omfang'; + + @override + String get syntaxReferenceLimitation => 'BusyMark-begrensning'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Offisiell dokumentasjon'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Vanlig Markdown og Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Bare Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Bare Writerside Markdown og Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'De viktigste Markdown-formene BusyMark kan skrive og forhåndsvise.'; + + @override + String get syntaxReferenceParagraphExample => 'Et tekstavsnitt.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tabeller bruker pipe-syntaksen fra GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'to mellomrom på slutten av linjen, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark godtar et avgrenset, trygt delsett av rå HTML i Markdown-kilden.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Inngjerdede Mermaid-, PlantUML-, D2- og OpenAPI-blokker fungerer i Markdown-kilde. Blokkidentifikatorer skiller ikke mellom store og små bokstaver, og BusyMark bevarer den opprinnelige skrivemåten.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Bruk inngjerdet YAML- eller JSON-innhold. BusyMark behandler ikke et vilkårlig helt YAML- eller JSON-dokument som en OpenAPI-referanse.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Semantiske kodeblokker for diagrammer'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Semantiske code-block- og src-former støtter Mermaid, PlantUML og D2, ikke OpenAPI, og bare i Writerside-prosjekter.'; + + @override + String get syntaxReferenceReferencedDiagramSource => 'Referert diagramkilde'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Stier må være relative og forbli i det åpne Writerside-prosjektet; inngjerdet form med src gjelder bare Writerside Markdown.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark støtter TeX-uttrykk, ikke komplette TeX- eller LaTeX-dokumenter.'; + + @override + String get syntaxReferenceInlineMath => 'Matematikk i linjen'; + + @override + String get syntaxReferenceGithubMath => + 'GitHub-matematikk med dollartegn og grav aksent'; + + @override + String get syntaxReferenceDisplayMath => 'Matematikk som blokk'; + + @override + String get syntaxReferenceMathFence => 'math-blokk'; + + @override + String get syntaxReferenceTexFence => 'tex-blokk'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark gjenkjenner ikke \\(...\\) eller \\[...\\] som matematikkskilletegn i Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Utenfor Writerside-modus forblir en tex-blokk en vanlig kodeblokk.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside-math-element'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math-elementet er semantisk Writerside-syntaks, ikke tillatt rå HTML MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Semantisk TeX-kodeblokk'; + + @override + String get syntaxReferenceWritersideDescription => + 'Disse målrettede utvidelsene tolkes bare i åpne Writerside-prosjekter.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Merknadssitat'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Et vanlig blokksitat er et tips i Writerside Markdown; i vanlig Markdown forblir det et ordinært sitat.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Semantiske merknader'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Vanlig Markdown tolker ikke disse semantiske Writerside-elementene.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Sammenleggbar overskrift'; + + @override + String get syntaxReferenceCollapsibleCode => 'Sammenleggbar kodeblokk'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Semantisk sammenleggbart innhold'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark støtter sammenleggbare chapter-, procedure-, code-block- og definisjonslisteformer, ikke hele Writerside-katalogen.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Semantiske kodeblokker for matematikk og diagrammer'; + + @override + String get syntaxReferenceVideo => 'Writerside-video'; + + @override + String get syntaxReferenceVideoLimitation => + 'Lokal video bruker et lokalt preview-src-bilde; vertsbaserte kilder må være støttede HTTPS-adresser fra YouTube eller Vimeo.'; + @override String get exportAsPdf => 'Eksporter som PDF'; diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index e6aa598f..be7c6ba7 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -453,8 +453,7 @@ class AppLocalizationsNl extends AppLocalizations { 'Toon deze sneltoetsreferentie'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Open de Markdown- en HTML-referentie'; + String get shortcutSyntaxReferenceDescription => 'Syntaxisreferentie openen'; @override String get shortcutSettingsDescription => 'Open BusyMark-instellingen'; @@ -2665,114 +2664,289 @@ class AppLocalizationsNl extends AppLocalizations { String get gitErrorCommandFailed => 'Git-opdracht is mislukt.'; @override - String get markdownAndHtml => 'Markdown en HTML'; + String get syntaxReference => 'Syntaxisreferentie'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown-blokken'; + String get syntaxReferenceMarkdownBlocks => 'Markdown-blokken'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Blokstructuren ondersteund in Markdown-bron en preview.'; @override - String get markdownHtmlInlineFormatting => 'Inline-opmaak'; + String get syntaxReferenceInlineFormatting => 'Inline-opmaak'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Opmaak die kan verschijnen in alinea\'s, lijstitems en tabelcellen.'; @override - String get markdownHtmlRawHtmlBlocks => 'Ruwe HTML-blokken'; + String get syntaxReferenceRawHtmlBlocks => 'Ruwe HTML-blokken'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Veilige HTML-tags op blokniveau weergegeven via BusyMark-voorbeeldwidgets.'; @override - String get markdownHtmlRawHtmlInline => 'Onbewerkte HTML-inlinetags'; + String get syntaxReferenceRawHtmlInline => 'Onbewerkte HTML-inlinetags'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Veilige inline HTML-tags weergegeven zonder letterlijke tags weer te geven.'; @override - String get markdownHtmlSafety => 'Veiligheidsregels'; + String get syntaxReferenceSafety => 'Veiligheidsregels'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Onbewerkte HTML wordt geparseerd en opgeschoond voordat de preview wordt weergegeven.'; @override - String get markdownHtmlHeadings => 'Koppen'; + String get syntaxReferenceHeadings => 'Koppen'; @override - String get markdownHtmlParagraphs => 'Paragrafen'; + String get syntaxReferenceParagraphs => 'Paragrafen'; @override - String get markdownHtmlLists => 'Lijsten'; + String get syntaxReferenceLists => 'Lijsten'; @override - String get markdownHtmlHtmlContainers => 'Containers'; + String get syntaxReferenceHtmlContainers => 'Containers'; @override - String get markdownHtmlHtmlTextBlocks => 'Tekstblokken'; + String get syntaxReferenceHtmlTextBlocks => 'Tekstblokken'; @override - String get markdownHtmlHtmlFigures => 'Figuren en afbeeldingen'; + String get syntaxReferenceHtmlFigures => 'Figuren en afbeeldingen'; @override - String get markdownHtmlHtmlPreformatted => 'Voorgeformatteerde code'; + String get syntaxReferenceHtmlPreformatted => 'Voorgeformatteerde code'; @override - String get markdownHtmlHtmlDisclosure => 'Openklapbare blokken'; + String get syntaxReferenceHtmlDisclosure => 'Openklapbare blokken'; @override - String get markdownHtmlHtmlDescriptionLists => 'Beschrijvingslijsten'; + String get syntaxReferenceHtmlDescriptionLists => 'Beschrijvingslijsten'; @override - String get markdownHtmlHtmlFormattingTags => 'Opmaaktags'; + String get syntaxReferenceHtmlFormattingTags => 'Opmaaktags'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Inline codetags'; + String get syntaxReferenceHtmlInlineCodeTags => 'Inline codetags'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantische inline-tags'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Semantische inline-tags'; @override - String get markdownHtmlSanitizedPreview => 'Opgeschoond voorbeeld'; + String get syntaxReferenceSanitizedPreview => 'Opgeschoond voorbeeld'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Toegestane HTML wordt geconverteerd naar BusyMark-voorbeeldblokken en niet weergegeven in een browser.'; @override - String get markdownHtmlSourcePreserved => 'Bron behouden'; + String get syntaxReferenceSourcePreserved => 'Bron behouden'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Ruwe HTML wordt exact als brontekst opgeslagen.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown binnen HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown binnen HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Markdown-markeringen in onbewerkte HTML worden weergegeven als letterlijke tekst.'; @override - String get markdownHtmlBlockedContent => 'Actieve inhoud geblokkeerd'; + String get syntaxReferenceBlockedContent => 'Actieve inhoud geblokkeerd'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Scripts, stijlen, frames, formulieren, SVG, MathML, gebeurtenissen en onveilige attributen worden geblokkeerd.'; @override - String get markdownHtmlSafeUrls => 'Alleen veilige URL\'s'; + String get syntaxReferenceSafeUrls => 'Alleen veilige URL\'s'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Links staan http-, https-, mailto-, tel-, relatieve en fragment-URL\'s toe; onveilige schema\'s worden geblokkeerd.'; + @override + String get syntaxReferenceCategory => 'Categorie'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagrammen en API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Wiskunde'; + + @override + String get syntaxReferenceExample => 'Voorbeeld'; + + @override + String get syntaxReferenceIdentifiers => 'Identificatoren en aliassen'; + + @override + String get syntaxReferenceScope => 'Bereik'; + + @override + String get syntaxReferenceLimitation => 'BusyMark-beperking'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Officiële documentatie'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Gewone Markdown en Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Alleen Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Alleen Writerside Markdown en Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'De belangrijkste Markdown-vormen die BusyMark kan schrijven en weergeven.'; + + @override + String get syntaxReferenceParagraphExample => 'Een alinea met tekst.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tabellen gebruiken de pipe-syntaxis van GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'twee spaties aan het einde van de regel, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark accepteert een gerichte, veilige subset van ruwe HTML in Markdown-broncode.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Afgebakende Mermaid-, PlantUML-, D2- en OpenAPI-blokken werken in Markdown-broncode. Blokidentificatoren zijn niet hoofdlettergevoelig en BusyMark behoudt de oorspronkelijke spelling.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Gebruik afgebakende YAML- of JSON-inhoud. BusyMark behandelt een willekeurig volledig YAML- of JSON-document niet als een OpenAPI-referentie.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Semantische codeblokken voor diagrammen'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Semantische code-block- en src-vormen ondersteunen Mermaid, PlantUML en D2, niet OpenAPI, en alleen binnen Writerside-projecten.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Diagrambron met verwijzing'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Paden moeten relatief zijn en binnen het geopende Writerside-project blijven; de afgebakende vorm met src is alleen voor Writerside Markdown.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark ondersteunt TeX-expressies, geen volledige TeX- of LaTeX-documenten.'; + + @override + String get syntaxReferenceInlineMath => 'Wiskunde in de regel'; + + @override + String get syntaxReferenceGithubMath => + 'GitHub-wiskunde met dollar en backtick'; + + @override + String get syntaxReferenceDisplayMath => 'Wiskunde als blok'; + + @override + String get syntaxReferenceMathFence => 'math-blok'; + + @override + String get syntaxReferenceTexFence => 'tex-blok'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark herkent \\(...\\) en \\[...\\] niet als Markdown-wiskundescheidingstekens.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Buiten de Writerside-modus blijft een tex-blok een gewoon codeblok.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside-math-element'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Het math-element is semantische Writerside-syntaxis, geen toegestane ruwe HTML MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Semantisch TeX-codeblok'; + + @override + String get syntaxReferenceWritersideDescription => + 'Deze gerichte uitbreidingen worden alleen in geopende Writerside-projecten geïnterpreteerd.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Waarschuwingscitaat'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Een gewoon blokcitaat is een tip in Writerside Markdown; in gewone Markdown blijft het een normaal citaat.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Semantische waarschuwingen'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Gewone Markdown interpreteert deze semantische Writerside-elementen niet.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Inklapbare kop'; + + @override + String get syntaxReferenceCollapsibleCode => 'Inklapbaar codeblok'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Semantische inklapbare inhoud'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark ondersteunt inklapbare chapter-, procedure-, code-block- en definitielijstvormen, niet de volledige Writerside-catalogus.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Semantische codeblokken voor wiskunde en diagrammen'; + + @override + String get syntaxReferenceVideo => 'Writerside-video'; + + @override + String get syntaxReferenceVideoLimitation => + 'Lokale video gebruikt een lokale preview-src-afbeelding; gehoste bronnen moeten ondersteunde HTTPS-URL\'s van YouTube of Vimeo zijn.'; + @override String get exportAsPdf => 'Exporteren als PDF'; diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index a4abf5b7..66a53774 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -452,8 +452,8 @@ class AppLocalizationsPl extends AppLocalizations { 'Pokaż ten wykaz skrótów klawiaturowych'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Otwórz dokumentację Markdown i HTML'; + String get shortcutSyntaxReferenceDescription => + 'Otwórz dokumentację składni'; @override String get shortcutSettingsDescription => 'Otwórz ustawienia BusyMark'; @@ -2704,114 +2704,289 @@ class AppLocalizationsPl extends AppLocalizations { String get gitErrorCommandFailed => 'Polecenie Git nie powiodło się.'; @override - String get markdownAndHtml => 'Markdown i HTML'; + String get syntaxReference => 'Dokumentacja składni'; @override - String get markdownHtmlMarkdownBlocks => 'Bloki Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Bloki Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Struktury blokowe obsługiwane w źródle Markdown i podglądzie.'; @override - String get markdownHtmlInlineFormatting => 'Markdown w tekście'; + String get syntaxReferenceInlineFormatting => 'Markdown w tekście'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formatowanie w akapitach, elementach list i komórkach tabel.'; @override - String get markdownHtmlRawHtmlBlocks => 'Surowe bloki HTML'; + String get syntaxReferenceRawHtmlBlocks => 'Surowe bloki HTML'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Bezpieczne blokowe tagi HTML renderowane przez widżety podglądu BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Surowe tagi HTML w tekście'; + String get syntaxReferenceRawHtmlInline => 'Surowe tagi HTML w tekście'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Bezpieczne tagi HTML w tekście renderowane bez pokazywania dosłownych tagów.'; @override - String get markdownHtmlSafety => 'Reguły bezpieczeństwa'; + String get syntaxReferenceSafety => 'Reguły bezpieczeństwa'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Surowy HTML jest analizowany i oczyszczany przed renderowaniem podglądu.'; @override - String get markdownHtmlHeadings => 'Nagłówki'; + String get syntaxReferenceHeadings => 'Nagłówki'; @override - String get markdownHtmlParagraphs => 'Akapity'; + String get syntaxReferenceParagraphs => 'Akapity'; @override - String get markdownHtmlLists => 'Listy'; + String get syntaxReferenceLists => 'Listy'; @override - String get markdownHtmlHtmlContainers => 'Kontenery'; + String get syntaxReferenceHtmlContainers => 'Kontenery'; @override - String get markdownHtmlHtmlTextBlocks => 'Bloki tekstowe'; + String get syntaxReferenceHtmlTextBlocks => 'Bloki tekstowe'; @override - String get markdownHtmlHtmlFigures => 'Figury i obrazy'; + String get syntaxReferenceHtmlFigures => 'Figury i obrazy'; @override - String get markdownHtmlHtmlPreformatted => 'Kod preformatowany'; + String get syntaxReferenceHtmlPreformatted => 'Kod preformatowany'; @override - String get markdownHtmlHtmlDisclosure => 'Bloki rozwijane'; + String get syntaxReferenceHtmlDisclosure => 'Bloki rozwijane'; @override - String get markdownHtmlHtmlDescriptionLists => 'Listy opisów'; + String get syntaxReferenceHtmlDescriptionLists => 'Listy opisów'; @override - String get markdownHtmlHtmlFormattingTags => 'Tagi formatowania'; + String get syntaxReferenceHtmlFormattingTags => 'Tagi formatowania'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Tagi kodu w tekście'; + String get syntaxReferenceHtmlInlineCodeTags => 'Tagi kodu w tekście'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantyczne tagi tekstu'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Semantyczne tagi tekstu'; @override - String get markdownHtmlSanitizedPreview => 'Oczyszczony podgląd'; + String get syntaxReferenceSanitizedPreview => 'Oczyszczony podgląd'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Dozwolony HTML jest konwertowany na bloki podglądu BusyMark, a nie renderowany w przeglądarce.'; @override - String get markdownHtmlSourcePreserved => 'Źródło jest zachowane'; + String get syntaxReferenceSourcePreserved => 'Źródło jest zachowane'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Nieedytowany surowy HTML jest zapisywany dokładnie jako tekst źródłowy.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown wewnątrz HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown wewnątrz HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Znaczniki Markdown wewnątrz surowego HTML są wyświetlane jako tekst dosłowny.'; @override - String get markdownHtmlBlockedContent => 'Zablokowana aktywna zawartość'; + String get syntaxReferenceBlockedContent => 'Zablokowana aktywna zawartość'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Skrypty, style, ramki, formularze, SVG, MathML, zdarzenia i niebezpieczne atrybuty są blokowane.'; @override - String get markdownHtmlSafeUrls => 'Tylko bezpieczne adresy URL'; + String get syntaxReferenceSafeUrls => 'Tylko bezpieczne adresy URL'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Łącza dopuszczają http, https, mailto, tel, względne adresy URL i fragmenty; niebezpieczne schematy są blokowane.'; + @override + String get syntaxReferenceCategory => 'Kategoria'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagramy i API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matematyka'; + + @override + String get syntaxReferenceExample => 'Przykład'; + + @override + String get syntaxReferenceIdentifiers => 'Identyfikatory i aliasy'; + + @override + String get syntaxReferenceScope => 'Zakres'; + + @override + String get syntaxReferenceLimitation => 'Ograniczenie BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Oficjalna dokumentacja'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Zwykły Markdown i Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Tylko Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Tylko Markdown Writerside i XML Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Podstawowe formy Markdown, które BusyMark umożliwia tworzyć i wyświetlać.'; + + @override + String get syntaxReferenceParagraphExample => 'Akapit tekstu.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tabele używają składni z pionowymi kreskami GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'dwie spacje na końcu wiersza, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark akceptuje ograniczony, bezpieczny podzbiór surowego HTML w źródle Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Bloki ogrodzone Mermaid, PlantUML, D2 i OpenAPI działają w źródle Markdown. Wielkość liter w identyfikatorach nie ma znaczenia, a BusyMark zachowuje ich oryginalną pisownię.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Użyj ogrodzonej treści YAML lub JSON. BusyMark nie traktuje dowolnego całego dokumentu YAML lub JSON jako dokumentacji OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Semantyczne bloki kodu diagramów'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Semantyczne formy code-block i src obsługują Mermaid, PlantUML i D2, ale nie OpenAPI, i tylko w projektach Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Źródło diagramu z odwołania'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Ścieżki muszą być względne i pozostawać w otwartym projekcie Writerside; forma ogrodzona z src działa tylko w Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark obsługuje wyrażenia TeX, a nie kompletne dokumenty TeX lub LaTeX.'; + + @override + String get syntaxReferenceInlineMath => 'Matematyka w wierszu'; + + @override + String get syntaxReferenceGithubMath => + 'Matematyka GitHub ze znakami dolara i grawisu'; + + @override + String get syntaxReferenceDisplayMath => 'Matematyka blokowa'; + + @override + String get syntaxReferenceMathFence => 'Blok ogrodzony math'; + + @override + String get syntaxReferenceTexFence => 'Blok ogrodzony tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark nie rozpoznaje \\(...\\) ani \\[...\\] jako ograniczników matematycznych Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Poza trybem Writerside blok tex pozostaje zwykłym blokiem kodu.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Element math Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Element math jest semantyczną składnią Writerside, a nie dozwolonym surowym HTML MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Semantyczny blok kodu TeX'; + + @override + String get syntaxReferenceWritersideDescription => + 'Te wybrane rozszerzenia są interpretowane tylko w otwartych projektach Writerside.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Cytat z uwagą'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Zwykły cytat blokowy jest wskazówką w Markdown Writerside; w zwykłym Markdown pozostaje zwykłym cytatem.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Uwagi semantyczne'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Zwykły Markdown nie interpretuje tych semantycznych elementów Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Zwijany nagłówek'; + + @override + String get syntaxReferenceCollapsibleCode => 'Zwijany blok kodu'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Semantyczna zawartość zwijana'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark obsługuje zwijane formy chapter, procedure, code-block i list definicji, ale nie cały katalog Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Semantyczne bloki kodu matematyki i diagramów'; + + @override + String get syntaxReferenceVideo => 'Wideo Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Lokalne wideo używa lokalnego obrazu preview-src; źródła hostowane muszą być obsługiwanymi adresami HTTPS YouTube lub Vimeo.'; + @override String get exportAsPdf => 'Eksportuj jako PDF'; diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index e2c642e9..eb9008ab 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -451,8 +451,8 @@ class AppLocalizationsPt extends AppLocalizations { 'Show this keyboard shortcut reference'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Open the Markdown and HTML reference'; + String get shortcutSyntaxReferenceDescription => + 'Abrir a referência de sintaxe'; @override String get shortcutSettingsDescription => 'Open BusyMark settings'; @@ -2654,113 +2654,289 @@ class AppLocalizationsPt extends AppLocalizations { String get gitErrorCommandFailed => 'Git command failed.'; @override - String get markdownAndHtml => 'Markdown and HTML'; + String get syntaxReference => 'Referência de sintaxe'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown Blocks'; + String get syntaxReferenceMarkdownBlocks => 'Blocos Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => - 'Block structures supported in Markdown source and preview.'; + String get syntaxReferenceMarkdownBlocksDescription => + 'Estruturas de bloco compatíveis no código Markdown e na pré-visualização.'; + + @override + String get syntaxReferenceInlineFormatting => 'Markdown em linha'; + + @override + String get syntaxReferenceInlineFormattingDescription => + 'Formatação dentro de parágrafos, itens de lista e células de tabela.'; + + @override + String get syntaxReferenceRawHtmlBlocks => 'Blocos de HTML bruto'; + + @override + String get syntaxReferenceRawHtmlBlocksDescription => + 'Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.'; + + @override + String get syntaxReferenceRawHtmlInline => 'Tags de HTML bruto em linha'; + + @override + String get syntaxReferenceRawHtmlInlineDescription => + 'Tags HTML em linha seguras renderizadas sem mostrar as tags literais.'; + + @override + String get syntaxReferenceSafety => 'Regras de segurança'; + + @override + String get syntaxReferenceSafetyDescription => + 'O HTML bruto é analisado e higienizado antes da pré-visualização.'; + + @override + String get syntaxReferenceHeadings => 'Títulos'; + + @override + String get syntaxReferenceParagraphs => 'Parágrafos'; + + @override + String get syntaxReferenceLists => 'Listas'; + + @override + String get syntaxReferenceHtmlContainers => 'Contêineres'; + + @override + String get syntaxReferenceHtmlTextBlocks => 'Blocos de texto'; + + @override + String get syntaxReferenceHtmlFigures => 'Figuras e imagens'; + + @override + String get syntaxReferenceHtmlPreformatted => 'Código pré-formatado'; + + @override + String get syntaxReferenceHtmlDisclosure => 'Blocos expansíveis'; + + @override + String get syntaxReferenceHtmlDescriptionLists => 'Listas de descrição'; + + @override + String get syntaxReferenceHtmlFormattingTags => 'Tags de formatação'; + + @override + String get syntaxReferenceHtmlInlineCodeTags => 'Tags de código em linha'; + + @override + String get syntaxReferenceHtmlNeutralInlineTags => 'Tags de texto semântico'; + + @override + String get syntaxReferenceSanitizedPreview => 'Pré-visualização higienizada'; + + @override + String get syntaxReferenceSanitizedPreviewDescription => + 'O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.'; + + @override + String get syntaxReferenceSourcePreserved => 'Código-fonte preservado'; + + @override + String get syntaxReferenceSourcePreservedDescription => + 'HTML bruto não editado é salvo exatamente como texto fonte.'; + + @override + String get syntaxReferenceMarkdownInsideHtml => 'Markdown dentro de HTML'; + + @override + String get syntaxReferenceMarkdownInsideHtmlDescription => + 'Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.'; + + @override + String get syntaxReferenceBlockedContent => 'Conteúdo ativo bloqueado'; + + @override + String get syntaxReferenceBlockedContentDescription => + 'Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.'; + + @override + String get syntaxReferenceSafeUrls => 'Somente URLs seguras'; + + @override + String get syntaxReferenceSafeUrlsDescription => + 'Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.'; + + @override + String get syntaxReferenceCategory => 'Categoria'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagramas e API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matemática'; + + @override + String get syntaxReferenceExample => 'Exemplo'; + + @override + String get syntaxReferenceIdentifiers => 'Identificadores e aliases'; + + @override + String get syntaxReferenceScope => 'Escopo'; + + @override + String get syntaxReferenceLimitation => 'Limitação do BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Documentação oficial'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown comum e Markdown do Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Somente Markdown do Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Somente Markdown e XML do Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'As formas essenciais de Markdown que o BusyMark pode criar e visualizar.'; + + @override + String get syntaxReferenceParagraphExample => 'Um parágrafo de texto.'; + + @override + String get syntaxReferenceTableLimitation => + 'As tabelas usam a sintaxe de barras verticais do GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'dois espaços no fim da linha, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'O BusyMark aceita um subconjunto seguro e específico de HTML bruto no código Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Blocos cercados Mermaid, PlantUML, D2 e OpenAPI funcionam no código Markdown. Os identificadores não diferenciam maiúsculas de minúsculas, e o BusyMark preserva a grafia original.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; @override - String get markdownHtmlInlineFormatting => 'Inline Markdown'; + String get syntaxReferencePlantUml => 'PlantUML'; @override - String get markdownHtmlInlineFormattingDescription => - 'Formatting that can appear inside paragraphs, list items, and table cells.'; + String get syntaxReferenceD2 => 'D2'; @override - String get markdownHtmlRawHtmlBlocks => 'Raw HTML Blocks'; + String get syntaxReferenceOpenApi => 'OpenAPI'; @override - String get markdownHtmlRawHtmlBlocksDescription => - 'Safe block-level HTML tags rendered through BusyMark preview widgets.'; + String get syntaxReferenceOpenApiLimitation => + 'Use conteúdo YAML ou JSON em um bloco cercado. O BusyMark não trata um documento YAML ou JSON completo qualquer como referência OpenAPI.'; @override - String get markdownHtmlRawHtmlInline => 'Raw HTML Inline Tags'; + String get syntaxReferenceSemanticDiagramBlocks => + 'Blocos de código semânticos para diagramas'; @override - String get markdownHtmlRawHtmlInlineDescription => - 'Safe inline HTML tags rendered without showing literal tags.'; + String get syntaxReferenceSemanticDiagramLimitation => + 'As formas semânticas code-block e src aceitam Mermaid, PlantUML e D2, não OpenAPI, e somente em projetos Writerside.'; @override - String get markdownHtmlSafety => 'Safety Rules'; + String get syntaxReferenceReferencedDiagramSource => + 'Origem de diagrama referenciada'; @override - String get markdownHtmlSafetyDescription => - 'Raw HTML is parsed and sanitized before preview rendering.'; + String get syntaxReferenceReferencedDiagramLimitation => + 'Os caminhos devem ser relativos e permanecer dentro do projeto Writerside aberto; a forma de bloco cercado com src é exclusiva do Markdown do Writerside.'; @override - String get markdownHtmlHeadings => 'Headings'; + String get syntaxReferenceMathematicsDescription => + 'O BusyMark aceita expressões TeX, não documentos TeX ou LaTeX completos.'; @override - String get markdownHtmlParagraphs => 'Paragraphs'; + String get syntaxReferenceInlineMath => 'Matemática em linha'; @override - String get markdownHtmlLists => 'Lists'; + String get syntaxReferenceGithubMath => + 'Matemática do GitHub com cifrão e crase'; @override - String get markdownHtmlHtmlContainers => 'Containers'; + String get syntaxReferenceDisplayMath => 'Matemática em bloco'; @override - String get markdownHtmlHtmlTextBlocks => 'Text blocks'; + String get syntaxReferenceMathFence => 'Bloco cercado math'; @override - String get markdownHtmlHtmlFigures => 'Figures and images'; + String get syntaxReferenceTexFence => 'Bloco cercado tex'; @override - String get markdownHtmlHtmlPreformatted => 'Preformatted code'; + String get syntaxReferenceMathDelimitersLimitation => + 'O BusyMark não reconhece \\(...\\) nem \\[...\\] como delimitadores matemáticos do Markdown.'; @override - String get markdownHtmlHtmlDisclosure => 'Disclosure blocks'; + String get syntaxReferenceTexFenceLimitation => + 'Fora do modo Writerside, um bloco tex continua sendo um bloco de código comum.'; @override - String get markdownHtmlHtmlDescriptionLists => 'Description lists'; + String get syntaxReferenceWritersideMathElement => + 'Elemento math do Writerside'; @override - String get markdownHtmlHtmlFormattingTags => 'Formatting tags'; + String get syntaxReferenceWritersideMathElementLimitation => + 'O elemento math é sintaxe semântica do Writerside, não MathML HTML bruto permitido.'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Inline code tags'; + String get syntaxReferenceSemanticTexBlock => 'Bloco de código TeX semântico'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantic text tags'; + String get syntaxReferenceWritersideDescription => + 'Estas extensões específicas são interpretadas somente em projetos Writerside abertos.'; @override - String get markdownHtmlSanitizedPreview => 'Sanitized preview'; + String get syntaxReferenceAdmonitionBlockquote => 'Citação de aviso'; @override - String get markdownHtmlSanitizedPreviewDescription => - 'Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.'; + String get syntaxReferenceAdmonitionLimitation => + 'Uma citação simples é uma dica no Markdown do Writerside; no Markdown comum, continua sendo uma citação normal.'; @override - String get markdownHtmlSourcePreserved => 'Source is preserved'; + String get syntaxReferenceSemanticAdmonitions => 'Avisos semânticos'; @override - String get markdownHtmlSourcePreservedDescription => - 'Unedited raw HTML is saved back exactly as source text.'; + String get syntaxReferenceSemanticMarkupLimitation => + 'O Markdown comum não interpreta estes elementos semânticos do Writerside.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown inside HTML'; + String get syntaxReferenceCollapsibleHeading => 'Título recolhível'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => - 'Markdown markers inside raw HTML render as literal text.'; + String get syntaxReferenceCollapsibleCode => 'Bloco de código recolhível'; @override - String get markdownHtmlBlockedContent => 'Blocked active content'; + String get syntaxReferenceSemanticCollapsibles => + 'Conteúdo semântico recolhível'; @override - String get markdownHtmlBlockedContentDescription => - 'Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.'; + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'O BusyMark aceita as formas recolhíveis chapter, procedure, code-block e lista de definições, não todo o catálogo do Writerside.'; @override - String get markdownHtmlSafeUrls => 'Safe URLs only'; + String get syntaxReferenceSemanticCodeBlocks => + 'Blocos de código semânticos para matemática e diagramas'; @override - String get markdownHtmlSafeUrlsDescription => - 'Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.'; + String get syntaxReferenceVideo => 'Vídeo do Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Vídeo local usa uma imagem preview-src local; fontes hospedadas devem ser URLs HTTPS compatíveis do YouTube ou Vimeo.'; @override String get exportAsPdf => 'Export as PDF'; @@ -3995,8 +4171,8 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'Mostrar esta referência de atalhos de teclado'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Abrir a referência de Markdown e HTML'; + String get shortcutSyntaxReferenceDescription => + 'Abrir a referência de sintaxe'; @override String get shortcutSettingsDescription => @@ -6211,114 +6387,290 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get gitErrorCommandFailed => 'O comando Git falhou.'; @override - String get markdownAndHtml => 'Markdown e HTML'; + String get syntaxReference => 'Referência de sintaxe'; @override - String get markdownHtmlMarkdownBlocks => 'Blocos Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Blocos Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Estruturas de bloco compatíveis no código Markdown e na pré-visualização.'; @override - String get markdownHtmlInlineFormatting => 'Markdown em linha'; + String get syntaxReferenceInlineFormatting => 'Markdown em linha'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Formatação dentro de parágrafos, itens de lista e células de tabela.'; @override - String get markdownHtmlRawHtmlBlocks => 'Blocos de HTML bruto'; + String get syntaxReferenceRawHtmlBlocks => 'Blocos de HTML bruto'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Tags HTML de bloco seguras renderizadas pelos widgets de pré-visualização do BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Tags de HTML bruto em linha'; + String get syntaxReferenceRawHtmlInline => 'Tags de HTML bruto em linha'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Tags HTML em linha seguras renderizadas sem mostrar as tags literais.'; @override - String get markdownHtmlSafety => 'Regras de segurança'; + String get syntaxReferenceSafety => 'Regras de segurança'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'O HTML bruto é analisado e higienizado antes da pré-visualização.'; @override - String get markdownHtmlHeadings => 'Títulos'; + String get syntaxReferenceHeadings => 'Títulos'; @override - String get markdownHtmlParagraphs => 'Parágrafos'; + String get syntaxReferenceParagraphs => 'Parágrafos'; @override - String get markdownHtmlLists => 'Listas'; + String get syntaxReferenceLists => 'Listas'; @override - String get markdownHtmlHtmlContainers => 'Contêineres'; + String get syntaxReferenceHtmlContainers => 'Contêineres'; @override - String get markdownHtmlHtmlTextBlocks => 'Blocos de texto'; + String get syntaxReferenceHtmlTextBlocks => 'Blocos de texto'; @override - String get markdownHtmlHtmlFigures => 'Figuras e imagens'; + String get syntaxReferenceHtmlFigures => 'Figuras e imagens'; @override - String get markdownHtmlHtmlPreformatted => 'Código pré-formatado'; + String get syntaxReferenceHtmlPreformatted => 'Código pré-formatado'; @override - String get markdownHtmlHtmlDisclosure => 'Blocos expansíveis'; + String get syntaxReferenceHtmlDisclosure => 'Blocos expansíveis'; @override - String get markdownHtmlHtmlDescriptionLists => 'Listas de descrição'; + String get syntaxReferenceHtmlDescriptionLists => 'Listas de descrição'; @override - String get markdownHtmlHtmlFormattingTags => 'Tags de formatação'; + String get syntaxReferenceHtmlFormattingTags => 'Tags de formatação'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Tags de código em linha'; + String get syntaxReferenceHtmlInlineCodeTags => 'Tags de código em linha'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Tags de texto semântico'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Tags de texto semântico'; @override - String get markdownHtmlSanitizedPreview => 'Pré-visualização higienizada'; + String get syntaxReferenceSanitizedPreview => 'Pré-visualização higienizada'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'O HTML permitido é convertido em blocos de pré-visualização do BusyMark e não é renderizado em um navegador.'; @override - String get markdownHtmlSourcePreserved => 'Código-fonte preservado'; + String get syntaxReferenceSourcePreserved => 'Código-fonte preservado'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'HTML bruto não editado é salvo exatamente como texto fonte.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown dentro de HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown dentro de HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Marcadores Markdown dentro de HTML bruto são exibidos como texto literal.'; @override - String get markdownHtmlBlockedContent => 'Conteúdo ativo bloqueado'; + String get syntaxReferenceBlockedContent => 'Conteúdo ativo bloqueado'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Scripts, estilos, frames, formulários, SVG, MathML, eventos e atributos inseguros são bloqueados.'; @override - String get markdownHtmlSafeUrls => 'Somente URLs seguras'; + String get syntaxReferenceSafeUrls => 'Somente URLs seguras'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Links permitem http, https, mailto, tel, URLs relativas e fragmentos; esquemas inseguros são bloqueados.'; + @override + String get syntaxReferenceCategory => 'Categoria'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diagramas e API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matemática'; + + @override + String get syntaxReferenceExample => 'Exemplo'; + + @override + String get syntaxReferenceIdentifiers => 'Identificadores e aliases'; + + @override + String get syntaxReferenceScope => 'Escopo'; + + @override + String get syntaxReferenceLimitation => 'Limitação do BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Documentação oficial'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown comum e Markdown do Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Somente Markdown do Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Somente Markdown e XML do Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'As formas essenciais de Markdown que o BusyMark pode criar e visualizar.'; + + @override + String get syntaxReferenceParagraphExample => 'Um parágrafo de texto.'; + + @override + String get syntaxReferenceTableLimitation => + 'As tabelas usam a sintaxe de barras verticais do GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'dois espaços no fim da linha, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'O BusyMark aceita um subconjunto seguro e específico de HTML bruto no código Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Blocos cercados Mermaid, PlantUML, D2 e OpenAPI funcionam no código Markdown. Os identificadores não diferenciam maiúsculas de minúsculas, e o BusyMark preserva a grafia original.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Use conteúdo YAML ou JSON em um bloco cercado. O BusyMark não trata um documento YAML ou JSON completo qualquer como referência OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Blocos de código semânticos para diagramas'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'As formas semânticas code-block e src aceitam Mermaid, PlantUML e D2, não OpenAPI, e somente em projetos Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Origem de diagrama referenciada'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Os caminhos devem ser relativos e permanecer dentro do projeto Writerside aberto; a forma de bloco cercado com src é exclusiva do Markdown do Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'O BusyMark aceita expressões TeX, não documentos TeX ou LaTeX completos.'; + + @override + String get syntaxReferenceInlineMath => 'Matemática em linha'; + + @override + String get syntaxReferenceGithubMath => + 'Matemática do GitHub com cifrão e crase'; + + @override + String get syntaxReferenceDisplayMath => 'Matemática em bloco'; + + @override + String get syntaxReferenceMathFence => 'Bloco cercado math'; + + @override + String get syntaxReferenceTexFence => 'Bloco cercado tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'O BusyMark não reconhece \\(...\\) nem \\[...\\] como delimitadores matemáticos do Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Fora do modo Writerside, um bloco tex continua sendo um bloco de código comum.'; + + @override + String get syntaxReferenceWritersideMathElement => + 'Elemento math do Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'O elemento math é sintaxe semântica do Writerside, não MathML HTML bruto permitido.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Bloco de código TeX semântico'; + + @override + String get syntaxReferenceWritersideDescription => + 'Estas extensões específicas são interpretadas somente em projetos Writerside abertos.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Citação de aviso'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Uma citação simples é uma dica no Markdown do Writerside; no Markdown comum, continua sendo uma citação normal.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Avisos semânticos'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'O Markdown comum não interpreta estes elementos semânticos do Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Título recolhível'; + + @override + String get syntaxReferenceCollapsibleCode => 'Bloco de código recolhível'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Conteúdo semântico recolhível'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'O BusyMark aceita as formas recolhíveis chapter, procedure, code-block e lista de definições, não todo o catálogo do Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Blocos de código semânticos para matemática e diagramas'; + + @override + String get syntaxReferenceVideo => 'Vídeo do Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Vídeo local usa uma imagem preview-src local; fontes hospedadas devem ser URLs HTTPS compatíveis do YouTube ou Vimeo.'; + @override String get exportAsPdf => 'Exportar como PDF'; diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 3ad354c3..cc9c6a87 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -454,8 +454,8 @@ class AppLocalizationsRu extends AppLocalizations { 'Показать справку по сочетаниям клавиш'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Открыть справку по Markdown и HTML'; + String get shortcutSyntaxReferenceDescription => + 'Открыть справочник по синтаксису'; @override String get shortcutSettingsDescription => 'Открыть настройки BusyMark'; @@ -2701,116 +2701,291 @@ class AppLocalizationsRu extends AppLocalizations { String get gitErrorCommandFailed => 'Не удалось выполнить команду Git.'; @override - String get markdownAndHtml => 'Markdown и HTML'; + String get syntaxReference => 'Справочник по синтаксису'; @override - String get markdownHtmlMarkdownBlocks => 'Блоки Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Блоки Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Блочные структуры, поддерживаемые в исходном Markdown и предварительном просмотре.'; @override - String get markdownHtmlInlineFormatting => 'Встроенный Markdown'; + String get syntaxReferenceInlineFormatting => 'Встроенный Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Форматирование внутри абзацев, элементов списков и ячеек таблиц.'; @override - String get markdownHtmlRawHtmlBlocks => 'Блоки исходного HTML'; + String get syntaxReferenceRawHtmlBlocks => 'Блоки исходного HTML'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Безопасные блочные HTML-теги, отображаемые через виджеты предварительного просмотра BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Встроенные HTML-теги'; + String get syntaxReferenceRawHtmlInline => 'Встроенные HTML-теги'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Безопасные встроенные HTML-теги отображаются без показа самих тегов.'; @override - String get markdownHtmlSafety => 'Правила безопасности'; + String get syntaxReferenceSafety => 'Правила безопасности'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Исходный HTML разбирается и очищается перед отображением в предварительном просмотре.'; @override - String get markdownHtmlHeadings => 'Заголовки'; + String get syntaxReferenceHeadings => 'Заголовки'; @override - String get markdownHtmlParagraphs => 'Абзацы'; + String get syntaxReferenceParagraphs => 'Абзацы'; @override - String get markdownHtmlLists => 'Списки'; + String get syntaxReferenceLists => 'Списки'; @override - String get markdownHtmlHtmlContainers => 'Контейнеры'; + String get syntaxReferenceHtmlContainers => 'Контейнеры'; @override - String get markdownHtmlHtmlTextBlocks => 'Текстовые блоки'; + String get syntaxReferenceHtmlTextBlocks => 'Текстовые блоки'; @override - String get markdownHtmlHtmlFigures => 'Фигуры и изображения'; + String get syntaxReferenceHtmlFigures => 'Фигуры и изображения'; @override - String get markdownHtmlHtmlPreformatted => 'Предформатированный код'; + String get syntaxReferenceHtmlPreformatted => 'Предформатированный код'; @override - String get markdownHtmlHtmlDisclosure => 'Раскрывающиеся блоки'; + String get syntaxReferenceHtmlDisclosure => 'Раскрывающиеся блоки'; @override - String get markdownHtmlHtmlDescriptionLists => 'Списки описаний'; + String get syntaxReferenceHtmlDescriptionLists => 'Списки описаний'; @override - String get markdownHtmlHtmlFormattingTags => 'Теги форматирования'; + String get syntaxReferenceHtmlFormattingTags => 'Теги форматирования'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Встроенные теги кода'; + String get syntaxReferenceHtmlInlineCodeTags => 'Встроенные теги кода'; @override - String get markdownHtmlHtmlNeutralInlineTags => + String get syntaxReferenceHtmlNeutralInlineTags => 'Семантические текстовые теги'; @override - String get markdownHtmlSanitizedPreview => + String get syntaxReferenceSanitizedPreview => 'Очищенный предварительный просмотр'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Разрешённый HTML преобразуется в блоки предварительного просмотра BusyMark, а не отображается в браузере.'; @override - String get markdownHtmlSourcePreserved => 'Исходный текст сохраняется'; + String get syntaxReferenceSourcePreserved => 'Исходный текст сохраняется'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Неизменённый исходный HTML сохраняется в точности как исходный текст.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown внутри HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown внутри HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Markdown-разметка внутри исходного HTML отображается как обычный текст.'; @override - String get markdownHtmlBlockedContent => 'Активный контент заблокирован'; + String get syntaxReferenceBlockedContent => 'Активный контент заблокирован'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Скрипты, стили, фреймы, формы, SVG, MathML, события и небезопасные атрибуты блокируются.'; @override - String get markdownHtmlSafeUrls => 'Только безопасные URL'; + String get syntaxReferenceSafeUrls => 'Только безопасные URL'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Ссылки допускают http, https, mailto, tel, относительные URL и фрагменты; небезопасные схемы блокируются.'; + @override + String get syntaxReferenceCategory => 'Категория'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Диаграммы и API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Математика'; + + @override + String get syntaxReferenceExample => 'Пример'; + + @override + String get syntaxReferenceIdentifiers => 'Идентификаторы и псевдонимы'; + + @override + String get syntaxReferenceScope => 'Область применения'; + + @override + String get syntaxReferenceLimitation => 'Ограничение BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Официальная документация'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Обычный Markdown и Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Только Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Только Markdown Writerside и XML Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Основные формы Markdown, которые BusyMark позволяет создавать и просматривать.'; + + @override + String get syntaxReferenceParagraphExample => 'Абзац текста.'; + + @override + String get syntaxReferenceTableLimitation => + 'Таблицы используют синтаксис с вертикальными чертами GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'два пробела в конце строки, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark принимает ограниченное безопасное подмножество необработанного HTML в исходном тексте Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Ограждённые блоки Mermaid, PlantUML, D2 и OpenAPI работают в исходном тексте Markdown. Регистр идентификаторов не учитывается, а BusyMark сохраняет исходное написание.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Используйте ограждённое содержимое YAML или JSON. BusyMark не считает произвольный целый документ YAML или JSON справочником OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Семантические блоки кода диаграмм'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Семантические формы code-block и src поддерживают Mermaid, PlantUML и D2, но не OpenAPI, и только в проектах Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Ссылка на исходник диаграммы'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Пути должны быть относительными и оставаться в открытом проекте Writerside; ограждённая форма с src работает только в Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark поддерживает выражения TeX, но не полные документы TeX или LaTeX.'; + + @override + String get syntaxReferenceInlineMath => 'Встроенная формула'; + + @override + String get syntaxReferenceGithubMath => + 'Формула GitHub с долларом и обратной кавычкой'; + + @override + String get syntaxReferenceDisplayMath => 'Выкладная формула'; + + @override + String get syntaxReferenceMathFence => 'Ограждённый блок math'; + + @override + String get syntaxReferenceTexFence => 'Ограждённый блок tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark не распознаёт \\(...\\) и \\[...\\] как математические разделители Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Вне режима Writerside блок tex остаётся обычным блоком кода.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Элемент math Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Элемент math — семантический синтаксис Writerside, а не разрешённый необработанный HTML MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Семантический блок кода TeX'; + + @override + String get syntaxReferenceWritersideDescription => + 'Эти отдельные расширения интерпретируются только в открытых проектах Writerside.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Цитата-примечание'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Обычная блочная цитата становится советом в Markdown Writerside, а в обычном Markdown остаётся цитатой.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Семантические примечания'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Обычный Markdown не интерпретирует эти семантические элементы Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Сворачиваемый заголовок'; + + @override + String get syntaxReferenceCollapsibleCode => 'Сворачиваемый блок кода'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Семантическое сворачиваемое содержимое'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark поддерживает сворачиваемые формы chapter, procedure, code-block и списка определений, но не весь каталог Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Семантические блоки кода для формул и диаграмм'; + + @override + String get syntaxReferenceVideo => 'Видео Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Локальное видео использует локальное изображение preview-src; размещённые видео должны иметь поддерживаемые HTTPS-адреса YouTube или Vimeo.'; + @override String get exportAsPdf => 'Экспортировать в PDF'; diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index ed504f2f..e03a1b1a 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -453,8 +453,7 @@ class AppLocalizationsTr extends AppLocalizations { 'Bu klavye kısayolu referansını göster'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Markdown ve HTML referansını açın'; + String get shortcutSyntaxReferenceDescription => 'Sözdizimi başvurusunu aç'; @override String get shortcutSettingsDescription => 'BusyMark ayarlarını aç'; @@ -2653,114 +2652,290 @@ class AppLocalizationsTr extends AppLocalizations { String get gitErrorCommandFailed => 'Git komutu başarısız oldu.'; @override - String get markdownAndHtml => 'Markdown ve HTML'; + String get syntaxReference => 'Sözdizimi Başvurusu'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown blokları'; + String get syntaxReferenceMarkdownBlocks => 'Markdown blokları'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Markdown kaynağında ve önizlemesinde desteklenen blok yapıları.'; @override - String get markdownHtmlInlineFormatting => 'Satır içi biçimlendirme'; + String get syntaxReferenceInlineFormatting => 'Satır içi biçimlendirme'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Paragrafların, liste öğelerinin ve tablo hücrelerinin içinde görünebilecek biçimlendirme.'; @override - String get markdownHtmlRawHtmlBlocks => 'Ham HTML Blokları'; + String get syntaxReferenceRawHtmlBlocks => 'Ham HTML Blokları'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'BusyMark önizleme widget\'ları aracılığıyla oluşturulan güvenli blok düzeyinde HTML etiketleri.'; @override - String get markdownHtmlRawHtmlInline => 'Ham HTML Satır İçi Etiketleri'; + String get syntaxReferenceRawHtmlInline => 'Ham HTML Satır İçi Etiketleri'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Gerçek etiketler gösterilmeden oluşturulan güvenli satır içi HTML etiketleri.'; @override - String get markdownHtmlSafety => 'Güvenlik Kuralları'; + String get syntaxReferenceSafety => 'Güvenlik Kuralları'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Ham HTML, önizleme oluşturmadan önce ayrıştırılır ve arındırılır.'; @override - String get markdownHtmlHeadings => 'Başlıklar'; + String get syntaxReferenceHeadings => 'Başlıklar'; @override - String get markdownHtmlParagraphs => 'Paragraflar'; + String get syntaxReferenceParagraphs => 'Paragraflar'; @override - String get markdownHtmlLists => 'Listeler'; + String get syntaxReferenceLists => 'Listeler'; @override - String get markdownHtmlHtmlContainers => 'Konteynerler'; + String get syntaxReferenceHtmlContainers => 'Konteynerler'; @override - String get markdownHtmlHtmlTextBlocks => 'Metin blokları'; + String get syntaxReferenceHtmlTextBlocks => 'Metin blokları'; @override - String get markdownHtmlHtmlFigures => 'Şekiller ve görseller'; + String get syntaxReferenceHtmlFigures => 'Şekiller ve görseller'; @override - String get markdownHtmlHtmlPreformatted => 'Önceden biçimlendirilmiş kod'; + String get syntaxReferenceHtmlPreformatted => 'Önceden biçimlendirilmiş kod'; @override - String get markdownHtmlHtmlDisclosure => 'Açıklama blokları'; + String get syntaxReferenceHtmlDisclosure => 'Açıklama blokları'; @override - String get markdownHtmlHtmlDescriptionLists => 'Açıklama listeleri'; + String get syntaxReferenceHtmlDescriptionLists => 'Açıklama listeleri'; @override - String get markdownHtmlHtmlFormattingTags => 'Etiketleri biçimlendirme'; + String get syntaxReferenceHtmlFormattingTags => 'Etiketleri biçimlendirme'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Satır içi kod etiketleri'; + String get syntaxReferenceHtmlInlineCodeTags => 'Satır içi kod etiketleri'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Anlamsal metin etiketleri'; + String get syntaxReferenceHtmlNeutralInlineTags => + 'Anlamsal metin etiketleri'; @override - String get markdownHtmlSanitizedPreview => 'Temizlenmiş önizleme'; + String get syntaxReferenceSanitizedPreview => 'Temizlenmiş önizleme'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'İzin verilen HTML, tarayıcıda oluşturulmaz, BusyMark önizleme bloklarına dönüştürülür.'; @override - String get markdownHtmlSourcePreserved => 'Kaynak korunur'; + String get syntaxReferenceSourcePreserved => 'Kaynak korunur'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Düzenlenmemiş ham HTML, tam olarak kaynak metin olarak kaydedilir.'; @override - String get markdownHtmlMarkdownInsideHtml => 'HTML içindeki Markdown'; + String get syntaxReferenceMarkdownInsideHtml => 'HTML içindeki Markdown'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Ham HTML içindeki Markdown işaretleri düz metin olarak görüntülenir.'; @override - String get markdownHtmlBlockedContent => 'Engellenen etkin içerik'; + String get syntaxReferenceBlockedContent => 'Engellenen etkin içerik'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Komut dosyaları, stiller, çerçeveler, formlar, SVG, MathML, olaylar ve güvenli olmayan özellikler engellenir.'; @override - String get markdownHtmlSafeUrls => 'Yalnızca güvenli URL\'ler'; + String get syntaxReferenceSafeUrls => 'Yalnızca güvenli URL\'ler'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Bağlantılar http, https, mailto, tel, göreli ve parça URL\'lerine izin verir; güvenli olmayan şemalar engellenir.'; + @override + String get syntaxReferenceCategory => 'Kategori'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Diyagramlar ve API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Matematik'; + + @override + String get syntaxReferenceExample => 'Örnek'; + + @override + String get syntaxReferenceIdentifiers => 'Tanımlayıcılar ve diğer adlar'; + + @override + String get syntaxReferenceScope => 'Kapsam'; + + @override + String get syntaxReferenceLimitation => 'BusyMark sınırlaması'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Resmî belgeler'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Normal Markdown ve Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Yalnızca Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Yalnızca Writerside Markdown ve Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'BusyMark\'ın yazabildiği ve önizleyebildiği temel Markdown biçimleri.'; + + @override + String get syntaxReferenceParagraphExample => 'Bir metin paragrafı.'; + + @override + String get syntaxReferenceTableLimitation => + 'Tablolar GitHub Flavored Markdown dikey çizgi sözdizimini kullanır.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'satır sonunda iki boşluk, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark, Markdown kaynağında sınırlı ve güvenli bir ham HTML alt kümesini kabul eder.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Çitle çevrili Mermaid, PlantUML, D2 ve OpenAPI blokları Markdown kaynağında çalışır. Çit tanımlayıcıları büyük/küçük harfe duyarlı değildir ve BusyMark özgün yazımı korur.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Çitle çevrili YAML veya JSON içeriği kullanın. BusyMark rastgele bir tam YAML ya da JSON belgesini OpenAPI başvurusu olarak değerlendirmez.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Anlamsal diyagram kod blokları'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Anlamsal code-block ve src biçimleri Mermaid, PlantUML ve D2\'yi destekler; OpenAPI\'yi desteklemez ve yalnızca Writerside projelerinde çalışır.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Başvurulan diyagram kaynağı'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Yollar göreli olmalı ve açılan Writerside projesinin içinde kalmalıdır; çit ve src biçimi yalnızca Writerside Markdown içindir.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark TeX ifadelerini destekler; tam TeX veya LaTeX belgelerini desteklemez.'; + + @override + String get syntaxReferenceInlineMath => 'Satır içi matematik'; + + @override + String get syntaxReferenceGithubMath => + 'Dolar ve ters tırnaklı GitHub matematiği'; + + @override + String get syntaxReferenceDisplayMath => 'Blok matematiği'; + + @override + String get syntaxReferenceMathFence => 'math çiti'; + + @override + String get syntaxReferenceTexFence => 'tex çiti'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark \\(...\\) veya \\[...\\] dizilerini Markdown matematik sınırlayıcıları olarak tanımaz.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Writerside modu dışında tex çiti normal bir kod bloğu olarak kalır.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside math öğesi'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math öğesi anlamsal Writerside sözdizimidir; izin verilen ham HTML MathML değildir.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Anlamsal TeX kod bloğu'; + + @override + String get syntaxReferenceWritersideDescription => + 'Bu odaklı uzantılar yalnızca açılmış Writerside projelerinde yorumlanır.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Uyarı blok alıntısı'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Düz blok alıntısı Writerside Markdown\'da ipucudur; normal Markdown\'da sıradan alıntı olarak kalır.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Anlamsal uyarılar'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Normal Markdown bu anlamsal Writerside öğelerini yorumlamaz.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Daraltılabilir başlık'; + + @override + String get syntaxReferenceCollapsibleCode => 'Daraltılabilir kod çiti'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Anlamsal daraltılabilir içerik'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark daraltılabilir chapter, procedure, code-block ve tanım listesi biçimlerini destekler; Writerside kataloğunun tamamını desteklemez.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Matematik ve diyagramlar için anlamsal kod blokları'; + + @override + String get syntaxReferenceVideo => 'Writerside videosu'; + + @override + String get syntaxReferenceVideoLimitation => + 'Yerel video yerel bir preview-src görseli kullanır; barındırılan kaynaklar desteklenen HTTPS YouTube veya Vimeo adresleri olmalıdır.'; + @override String get exportAsPdf => 'PDF olarak dışa aktar'; diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart index 0954eb9b..eb9726b4 100644 --- a/lib/l10n/generated/app_localizations_uk.dart +++ b/lib/l10n/generated/app_localizations_uk.dart @@ -453,8 +453,8 @@ class AppLocalizationsUk extends AppLocalizations { 'Показати довідку з комбінацій клавіш'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Відкрити довідку з Markdown і HTML'; + String get shortcutSyntaxReferenceDescription => + 'Відкрити довідник із синтаксису'; @override String get shortcutSettingsDescription => 'Відкрити налаштування BusyMark'; @@ -2709,114 +2709,289 @@ class AppLocalizationsUk extends AppLocalizations { String get gitErrorCommandFailed => 'Не вдалося виконати команду Git.'; @override - String get markdownAndHtml => 'Markdown і HTML'; + String get syntaxReference => 'Довідник із синтаксису'; @override - String get markdownHtmlMarkdownBlocks => 'Блоки Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Блоки Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Блокові структури, що підтримуються у вихідному Markdown і попередньому перегляді.'; @override - String get markdownHtmlInlineFormatting => 'Вбудований Markdown'; + String get syntaxReferenceInlineFormatting => 'Вбудований Markdown'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Форматування всередині абзаців, елементів списків і комірок таблиць.'; @override - String get markdownHtmlRawHtmlBlocks => 'Блоки необробленого HTML'; + String get syntaxReferenceRawHtmlBlocks => 'Блоки необробленого HTML'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Безпечні блокові HTML-теги, що відображаються через віджети перегляду BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Вбудовані HTML-теги'; + String get syntaxReferenceRawHtmlInline => 'Вбудовані HTML-теги'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Безпечні вбудовані HTML-теги відображаються без показу самих тегів.'; @override - String get markdownHtmlSafety => 'Правила безпеки'; + String get syntaxReferenceSafety => 'Правила безпеки'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'Необроблений HTML аналізується й очищується перед попереднім переглядом.'; @override - String get markdownHtmlHeadings => 'Заголовки'; + String get syntaxReferenceHeadings => 'Заголовки'; @override - String get markdownHtmlParagraphs => 'Абзаци'; + String get syntaxReferenceParagraphs => 'Абзаци'; @override - String get markdownHtmlLists => 'Списки'; + String get syntaxReferenceLists => 'Списки'; @override - String get markdownHtmlHtmlContainers => 'Контейнери'; + String get syntaxReferenceHtmlContainers => 'Контейнери'; @override - String get markdownHtmlHtmlTextBlocks => 'Текстові блоки'; + String get syntaxReferenceHtmlTextBlocks => 'Текстові блоки'; @override - String get markdownHtmlHtmlFigures => 'Фігури та зображення'; + String get syntaxReferenceHtmlFigures => 'Фігури та зображення'; @override - String get markdownHtmlHtmlPreformatted => 'Попередньо форматований код'; + String get syntaxReferenceHtmlPreformatted => 'Попередньо форматований код'; @override - String get markdownHtmlHtmlDisclosure => 'Розкривні блоки'; + String get syntaxReferenceHtmlDisclosure => 'Розкривні блоки'; @override - String get markdownHtmlHtmlDescriptionLists => 'Списки описів'; + String get syntaxReferenceHtmlDescriptionLists => 'Списки описів'; @override - String get markdownHtmlHtmlFormattingTags => 'Теги форматування'; + String get syntaxReferenceHtmlFormattingTags => 'Теги форматування'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Вбудовані теги коду'; + String get syntaxReferenceHtmlInlineCodeTags => 'Вбудовані теги коду'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Семантичні текстові теги'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Семантичні текстові теги'; @override - String get markdownHtmlSanitizedPreview => 'Очищений перегляд'; + String get syntaxReferenceSanitizedPreview => 'Очищений перегляд'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'Дозволений HTML перетворюється на блоки перегляду BusyMark, а не відтворюється в браузері.'; @override - String get markdownHtmlSourcePreserved => 'Вихідний текст зберігається'; + String get syntaxReferenceSourcePreserved => 'Вихідний текст зберігається'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'Незмінений необроблений HTML зберігається точно як вихідний текст.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown всередині HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown всередині HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Markdown-розмітка всередині необробленого HTML відображається як звичайний текст.'; @override - String get markdownHtmlBlockedContent => 'Активний вміст заблоковано'; + String get syntaxReferenceBlockedContent => 'Активний вміст заблоковано'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Скрипти, стилі, фрейми, форми, SVG, MathML, події та небезпечні атрибути блокуються.'; @override - String get markdownHtmlSafeUrls => 'Лише безпечні URL'; + String get syntaxReferenceSafeUrls => 'Лише безпечні URL'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Посилання дозволяють http, https, mailto, tel, відносні URL і фрагменти; небезпечні схеми блокуються.'; + @override + String get syntaxReferenceCategory => 'Категорія'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Діаграми й API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Математика'; + + @override + String get syntaxReferenceExample => 'Приклад'; + + @override + String get syntaxReferenceIdentifiers => 'Ідентифікатори й псевдоніми'; + + @override + String get syntaxReferenceScope => 'Область застосування'; + + @override + String get syntaxReferenceLimitation => 'Обмеження BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Офіційна документація'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Звичайний Markdown і Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Лише Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Лише Markdown Writerside і XML Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Основні форми Markdown, які BusyMark дає змогу створювати й переглядати.'; + + @override + String get syntaxReferenceParagraphExample => 'Абзац тексту.'; + + @override + String get syntaxReferenceTableLimitation => + 'Таблиці використовують синтаксис із вертикальними рисками GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'два пробіли в кінці рядка, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark приймає обмежену безпечну підмножину необробленого HTML у вихідному тексті Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Огороджені блоки Mermaid, PlantUML, D2 й OpenAPI працюють у вихідному тексті Markdown. Регістр ідентифікаторів не враховується, а BusyMark зберігає початкове написання.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Використовуйте огороджений вміст YAML або JSON. BusyMark не вважає довільний цілий документ YAML або JSON довідником OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Семантичні блоки коду діаграм'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Семантичні форми code-block і src підтримують Mermaid, PlantUML і D2, але не OpenAPI, і лише в проєктах Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Посилання на джерело діаграми'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Шляхи мають бути відносними й залишатися у відкритому проєкті Writerside; огороджена форма з src працює лише в Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark підтримує вирази TeX, але не повні документи TeX або LaTeX.'; + + @override + String get syntaxReferenceInlineMath => 'Вбудована формула'; + + @override + String get syntaxReferenceGithubMath => + 'Формула GitHub із доларом і зворотною лапкою'; + + @override + String get syntaxReferenceDisplayMath => 'Викладна формула'; + + @override + String get syntaxReferenceMathFence => 'Огороджений блок math'; + + @override + String get syntaxReferenceTexFence => 'Огороджений блок tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark не розпізнає \\(...\\) і \\[...\\] як математичні роздільники Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Поза режимом Writerside блок tex залишається звичайним блоком коду.'; + + @override + String get syntaxReferenceWritersideMathElement => 'Елемент math Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Елемент math — це семантичний синтаксис Writerside, а не дозволений необроблений HTML MathML.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Семантичний блок коду TeX'; + + @override + String get syntaxReferenceWritersideDescription => + 'Ці окремі розширення інтерпретуються лише у відкритих проєктах Writerside.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Цитата-примітка'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Звичайна блокова цитата стає порадою в Markdown Writerside, а у звичайному Markdown залишається цитатою.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Семантичні примітки'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Звичайний Markdown не інтерпретує ці семантичні елементи Writerside.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Згортаний заголовок'; + + @override + String get syntaxReferenceCollapsibleCode => 'Згортаний блок коду'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Семантичний згортаний вміст'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark підтримує згортані форми chapter, procedure, code-block і списку визначень, але не весь каталог Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Семантичні блоки коду для формул і діаграм'; + + @override + String get syntaxReferenceVideo => 'Відео Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Локальне відео використовує локальне зображення preview-src; розміщені відео повинні мати підтримувані HTTPS-адреси YouTube або Vimeo.'; + @override String get exportAsPdf => 'Експортувати як PDF'; diff --git a/lib/l10n/generated/app_localizations_vi.dart b/lib/l10n/generated/app_localizations_vi.dart index 019f2e2f..de35bd58 100644 --- a/lib/l10n/generated/app_localizations_vi.dart +++ b/lib/l10n/generated/app_localizations_vi.dart @@ -452,8 +452,7 @@ class AppLocalizationsVi extends AppLocalizations { 'Hiển thị tham chiếu phím tắt này'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Mở tham chiếu Markdown và HTML'; + String get shortcutSyntaxReferenceDescription => 'Mở tham chiếu cú pháp'; @override String get shortcutSettingsDescription => 'Mở cài đặt BusyMark'; @@ -2648,114 +2647,290 @@ class AppLocalizationsVi extends AppLocalizations { String get gitErrorCommandFailed => 'Lệnh Git không thành công.'; @override - String get markdownAndHtml => 'Markdown và HTML'; + String get syntaxReference => 'Tham chiếu cú pháp'; @override - String get markdownHtmlMarkdownBlocks => 'Khối Markdown'; + String get syntaxReferenceMarkdownBlocks => 'Khối Markdown'; @override - String get markdownHtmlMarkdownBlocksDescription => + String get syntaxReferenceMarkdownBlocksDescription => 'Các cấu trúc khối được hỗ trợ trong mã nguồn và bản xem trước Markdown.'; @override - String get markdownHtmlInlineFormatting => 'Định dạng Markdown nội tuyến'; + String get syntaxReferenceInlineFormatting => 'Định dạng Markdown nội tuyến'; @override - String get markdownHtmlInlineFormattingDescription => + String get syntaxReferenceInlineFormattingDescription => 'Định dạng có thể xuất hiện trong đoạn văn, mục danh sách và ô bảng.'; @override - String get markdownHtmlRawHtmlBlocks => 'Khối HTML thô'; + String get syntaxReferenceRawHtmlBlocks => 'Khối HTML thô'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => 'Các thẻ HTML cấp khối an toàn được kết xuất thông qua các tiện ích xem trước của BusyMark.'; @override - String get markdownHtmlRawHtmlInline => 'Thẻ HTML nội tuyến thô'; + String get syntaxReferenceRawHtmlInline => 'Thẻ HTML nội tuyến thô'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => 'Các thẻ HTML nội tuyến an toàn được kết xuất mà không hiển thị thẻ theo nghĩa đen.'; @override - String get markdownHtmlSafety => 'Quy tắc an toàn'; + String get syntaxReferenceSafety => 'Quy tắc an toàn'; @override - String get markdownHtmlSafetyDescription => + String get syntaxReferenceSafetyDescription => 'HTML thô được phân tích cú pháp và làm sạch trước khi kết xuất bản xem trước.'; @override - String get markdownHtmlHeadings => 'Tiêu đề'; + String get syntaxReferenceHeadings => 'Tiêu đề'; @override - String get markdownHtmlParagraphs => 'Đoạn văn'; + String get syntaxReferenceParagraphs => 'Đoạn văn'; @override - String get markdownHtmlLists => 'Danh sách'; + String get syntaxReferenceLists => 'Danh sách'; @override - String get markdownHtmlHtmlContainers => 'Vùng chứa'; + String get syntaxReferenceHtmlContainers => 'Vùng chứa'; @override - String get markdownHtmlHtmlTextBlocks => 'Khối văn bản'; + String get syntaxReferenceHtmlTextBlocks => 'Khối văn bản'; @override - String get markdownHtmlHtmlFigures => 'Figure và hình ảnh'; + String get syntaxReferenceHtmlFigures => 'Figure và hình ảnh'; @override - String get markdownHtmlHtmlPreformatted => 'Mã định dạng sẵn'; + String get syntaxReferenceHtmlPreformatted => 'Mã định dạng sẵn'; @override - String get markdownHtmlHtmlDisclosure => 'Khối mở rộng'; + String get syntaxReferenceHtmlDisclosure => 'Khối mở rộng'; @override - String get markdownHtmlHtmlDescriptionLists => 'Danh sách mô tả'; + String get syntaxReferenceHtmlDescriptionLists => 'Danh sách mô tả'; @override - String get markdownHtmlHtmlFormattingTags => 'Thẻ định dạng'; + String get syntaxReferenceHtmlFormattingTags => 'Thẻ định dạng'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Thẻ mã nội tuyến'; + String get syntaxReferenceHtmlInlineCodeTags => 'Thẻ mã nội tuyến'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Thẻ văn bản ngữ nghĩa'; + String get syntaxReferenceHtmlNeutralInlineTags => 'Thẻ văn bản ngữ nghĩa'; @override - String get markdownHtmlSanitizedPreview => 'Bản xem trước đã làm sạch'; + String get syntaxReferenceSanitizedPreview => 'Bản xem trước đã làm sạch'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => 'HTML được cho phép được chuyển thành các khối xem trước của BusyMark, không được kết xuất trong trình duyệt.'; @override - String get markdownHtmlSourcePreserved => 'Giữ nguyên mã nguồn'; + String get syntaxReferenceSourcePreserved => 'Giữ nguyên mã nguồn'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => 'HTML thô chưa chỉnh sửa được lưu lại chính xác như văn bản mã nguồn.'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown bên trong HTML'; + String get syntaxReferenceMarkdownInsideHtml => 'Markdown bên trong HTML'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => 'Các dấu Markdown bên trong HTML thô được kết xuất như văn bản theo nghĩa đen.'; @override - String get markdownHtmlBlockedContent => 'Nội dung hoạt động bị chặn'; + String get syntaxReferenceBlockedContent => 'Nội dung hoạt động bị chặn'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => 'Script, style, frame, form, SVG, MathML, sự kiện và các thuộc tính không an toàn bị chặn.'; @override - String get markdownHtmlSafeUrls => 'Chỉ URL an toàn'; + String get syntaxReferenceSafeUrls => 'Chỉ URL an toàn'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => 'Liên kết cho phép URL http, https, mailto, tel, tương đối và fragment; các scheme không an toàn bị chặn.'; + @override + String get syntaxReferenceCategory => 'Danh mục'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => 'Sơ đồ và API'; + + @override + String get syntaxReferenceCategoryMathematics => 'Toán học'; + + @override + String get syntaxReferenceExample => 'Ví dụ'; + + @override + String get syntaxReferenceIdentifiers => 'Định danh và bí danh'; + + @override + String get syntaxReferenceScope => 'Phạm vi'; + + @override + String get syntaxReferenceLimitation => 'Giới hạn của BusyMark'; + + @override + String get syntaxReferenceOfficialDocumentation => 'Tài liệu chính thức'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + 'Markdown thông thường và Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => + 'Chỉ Markdown Writerside'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + 'Chỉ Markdown Writerside và XML Writerside'; + + @override + String get syntaxReferenceMarkdownDescription => + 'Các dạng Markdown cốt lõi mà BusyMark có thể soạn và xem trước.'; + + @override + String get syntaxReferenceParagraphExample => 'Một đoạn văn bản.'; + + @override + String get syntaxReferenceTableLimitation => + 'Bảng dùng cú pháp dấu gạch đứng của GitHub Flavored Markdown.'; + + @override + String get syntaxReferenceHardBreakIdentifiers => + 'hai dấu cách ở cuối dòng, \\,
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark chấp nhận một tập con HTML thô an toàn, có giới hạn trong mã nguồn Markdown.'; + + @override + String get syntaxReferenceDiagramsDescription => + 'Các khối có hàng rào Mermaid, PlantUML, D2 và OpenAPI hoạt động trong mã nguồn Markdown. Định danh hàng rào không phân biệt hoa thường và BusyMark giữ nguyên cách viết ban đầu.'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + 'Dùng nội dung YAML hoặc JSON có hàng rào. BusyMark không coi một tài liệu YAML hoặc JSON toàn tệp bất kỳ là tham chiếu OpenAPI.'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => + 'Khối mã ngữ nghĩa cho sơ đồ'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + 'Dạng ngữ nghĩa code-block và src hỗ trợ Mermaid, PlantUML và D2, không hỗ trợ OpenAPI, và chỉ dùng trong dự án Writerside.'; + + @override + String get syntaxReferenceReferencedDiagramSource => + 'Nguồn sơ đồ được tham chiếu'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + 'Đường dẫn phải tương đối và nằm trong dự án Writerside đang mở; dạng hàng rào kèm src chỉ dành cho Markdown Writerside.'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark hỗ trợ biểu thức TeX, không hỗ trợ tài liệu TeX hoặc LaTeX hoàn chỉnh.'; + + @override + String get syntaxReferenceInlineMath => 'Toán học nội dòng'; + + @override + String get syntaxReferenceGithubMath => + 'Toán học GitHub với dấu đô la và dấu huyền'; + + @override + String get syntaxReferenceDisplayMath => 'Toán học dạng khối'; + + @override + String get syntaxReferenceMathFence => 'Hàng rào math'; + + @override + String get syntaxReferenceTexFence => 'Hàng rào tex'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark không nhận dạng \\(...\\) hoặc \\[...\\] là dấu phân cách toán học Markdown.'; + + @override + String get syntaxReferenceTexFenceLimitation => + 'Ngoài chế độ Writerside, hàng rào tex vẫn là khối mã thông thường.'; + + @override + String get syntaxReferenceWritersideMathElement => + 'Phần tử math của Writerside'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'Phần tử math là cú pháp Writerside ngữ nghĩa, không phải HTML MathML thô được phép.'; + + @override + String get syntaxReferenceSemanticTexBlock => 'Khối mã TeX ngữ nghĩa'; + + @override + String get syntaxReferenceWritersideDescription => + 'Các phần mở rộng trọng tâm này chỉ được diễn giải trong dự án Writerside đang mở.'; + + @override + String get syntaxReferenceAdmonitionBlockquote => 'Trích dẫn khối lưu ý'; + + @override + String get syntaxReferenceAdmonitionLimitation => + 'Trích dẫn khối thuần là mẹo trong Markdown Writerside; trong Markdown thông thường, nó vẫn là trích dẫn thường.'; + + @override + String get syntaxReferenceSemanticAdmonitions => 'Lưu ý ngữ nghĩa'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + 'Markdown thông thường không diễn giải các phần tử Writerside ngữ nghĩa này.'; + + @override + String get syntaxReferenceCollapsibleHeading => 'Tiêu đề có thể thu gọn'; + + @override + String get syntaxReferenceCollapsibleCode => 'Hàng rào mã có thể thu gọn'; + + @override + String get syntaxReferenceSemanticCollapsibles => + 'Nội dung ngữ nghĩa có thể thu gọn'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark hỗ trợ các dạng chapter, procedure, code-block và danh sách định nghĩa có thể thu gọn, không hỗ trợ toàn bộ danh mục Writerside.'; + + @override + String get syntaxReferenceSemanticCodeBlocks => + 'Khối mã ngữ nghĩa cho toán học và sơ đồ'; + + @override + String get syntaxReferenceVideo => 'Video Writerside'; + + @override + String get syntaxReferenceVideoLimitation => + 'Video cục bộ dùng ảnh preview-src cục bộ; nguồn lưu trữ phải là URL HTTPS YouTube hoặc Vimeo được hỗ trợ.'; + @override String get exportAsPdf => 'Xuất dưới dạng PDF'; diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index ff2b4549..873ca28f 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -451,8 +451,7 @@ class AppLocalizationsZh extends AppLocalizations { 'Show this keyboard shortcut reference'; @override - String get shortcutMarkdownAndHtmlDescription => - 'Open the Markdown and HTML reference'; + String get shortcutSyntaxReferenceDescription => '打开语法参考'; @override String get shortcutSettingsDescription => 'Open BusyMark settings'; @@ -2654,113 +2653,280 @@ class AppLocalizationsZh extends AppLocalizations { String get gitErrorCommandFailed => 'Git command failed.'; @override - String get markdownAndHtml => 'Markdown and HTML'; + String get syntaxReference => '语法参考'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown Blocks'; + String get syntaxReferenceMarkdownBlocks => 'Markdown 块'; @override - String get markdownHtmlMarkdownBlocksDescription => - 'Block structures supported in Markdown source and preview.'; + String get syntaxReferenceMarkdownBlocksDescription => + 'Markdown 源代码和预览中支持的块结构。'; @override - String get markdownHtmlInlineFormatting => 'Inline Markdown'; + String get syntaxReferenceInlineFormatting => '行内 Markdown'; @override - String get markdownHtmlInlineFormattingDescription => - 'Formatting that can appear inside paragraphs, list items, and table cells.'; + String get syntaxReferenceInlineFormattingDescription => + '可出现在段落、列表项和表格单元格中的格式。'; @override - String get markdownHtmlRawHtmlBlocks => 'Raw HTML Blocks'; + String get syntaxReferenceRawHtmlBlocks => '原始 HTML 块'; @override - String get markdownHtmlRawHtmlBlocksDescription => - 'Safe block-level HTML tags rendered through BusyMark preview widgets.'; + String get syntaxReferenceRawHtmlBlocksDescription => + '通过 BusyMark 预览组件渲染的安全块级 HTML 标签。'; + + @override + String get syntaxReferenceRawHtmlInline => '原始 HTML 行内标签'; + + @override + String get syntaxReferenceRawHtmlInlineDescription => + '安全的行内 HTML 标签,渲染时不会显示字面标签。'; + + @override + String get syntaxReferenceSafety => '安全规则'; + + @override + String get syntaxReferenceSafetyDescription => '原始 HTML 会在预览前进行解析和清理。'; + + @override + String get syntaxReferenceHeadings => '标题'; + + @override + String get syntaxReferenceParagraphs => '段落'; + + @override + String get syntaxReferenceLists => '列表'; + + @override + String get syntaxReferenceHtmlContainers => '容器'; + + @override + String get syntaxReferenceHtmlTextBlocks => '文本块'; + + @override + String get syntaxReferenceHtmlFigures => '图和图像'; + + @override + String get syntaxReferenceHtmlPreformatted => '预格式化代码'; + + @override + String get syntaxReferenceHtmlDisclosure => '折叠块'; + + @override + String get syntaxReferenceHtmlDescriptionLists => '描述列表'; + + @override + String get syntaxReferenceHtmlFormattingTags => '格式标签'; + + @override + String get syntaxReferenceHtmlInlineCodeTags => '行内代码标签'; + + @override + String get syntaxReferenceHtmlNeutralInlineTags => '语义文本标签'; + + @override + String get syntaxReferenceSanitizedPreview => '已清理的预览'; + + @override + String get syntaxReferenceSanitizedPreviewDescription => + '允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。'; + + @override + String get syntaxReferenceSourcePreserved => '保留源代码'; + + @override + String get syntaxReferenceSourcePreservedDescription => + '未经编辑的原始 HTML 会按源文本原样保存。'; + + @override + String get syntaxReferenceMarkdownInsideHtml => 'HTML 内的 Markdown'; + + @override + String get syntaxReferenceMarkdownInsideHtmlDescription => + '原始 HTML 内的 Markdown 标记会按字面文本渲染。'; + + @override + String get syntaxReferenceBlockedContent => '被阻止的活动内容'; + + @override + String get syntaxReferenceBlockedContentDescription => + '脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。'; + + @override + String get syntaxReferenceSafeUrls => '仅允许安全 URL'; + + @override + String get syntaxReferenceSafeUrlsDescription => + '链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。'; + + @override + String get syntaxReferenceCategory => '类别'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => '图表和 API'; + + @override + String get syntaxReferenceCategoryMathematics => '数学'; + + @override + String get syntaxReferenceExample => '示例'; + + @override + String get syntaxReferenceIdentifiers => '标识符和别名'; + + @override + String get syntaxReferenceScope => '适用范围'; + + @override + String get syntaxReferenceLimitation => 'BusyMark 限制'; + + @override + String get syntaxReferenceOfficialDocumentation => '官方文档'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + '普通 Markdown 和 Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => '仅 Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + '仅 Writerside Markdown 和 Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'BusyMark 可以编写和预览的核心 Markdown 形式。'; + + @override + String get syntaxReferenceParagraphExample => '一段文本。'; + + @override + String get syntaxReferenceTableLimitation => + '表格使用 GitHub Flavored Markdown 的竖线语法。'; + + @override + String get syntaxReferenceHardBreakIdentifiers => '行尾两个空格、\\、
    '; @override - String get markdownHtmlRawHtmlInline => 'Raw HTML Inline Tags'; + String get syntaxReferenceHtmlDescription => + 'BusyMark 在 Markdown 源码中仅接受有限且安全的原始 HTML 子集。'; @override - String get markdownHtmlRawHtmlInlineDescription => - 'Safe inline HTML tags rendered without showing literal tags.'; + String get syntaxReferenceDiagramsDescription => + '带围栏的 Mermaid、PlantUML、D2 和 OpenAPI 块可在 Markdown 源码中使用。围栏标识符不区分大小写,BusyMark 会保留原始拼写。'; @override - String get markdownHtmlSafety => 'Safety Rules'; + String get syntaxReferenceMermaid => 'Mermaid'; @override - String get markdownHtmlSafetyDescription => - 'Raw HTML is parsed and sanitized before preview rendering.'; + String get syntaxReferencePlantUml => 'PlantUML'; @override - String get markdownHtmlHeadings => 'Headings'; + String get syntaxReferenceD2 => 'D2'; @override - String get markdownHtmlParagraphs => 'Paragraphs'; + String get syntaxReferenceOpenApi => 'OpenAPI'; @override - String get markdownHtmlLists => 'Lists'; + String get syntaxReferenceOpenApiLimitation => + '请使用带围栏的 YAML 或 JSON 内容。BusyMark 不会将任意完整的 YAML 或 JSON 文档视为 OpenAPI 参考。'; @override - String get markdownHtmlHtmlContainers => 'Containers'; + String get syntaxReferenceSemanticDiagramBlocks => '图表的语义代码块'; @override - String get markdownHtmlHtmlTextBlocks => 'Text blocks'; + String get syntaxReferenceSemanticDiagramLimitation => + '语义 code-block 和 src 形式仅支持 Mermaid、PlantUML 和 D2,不支持 OpenAPI,且只能在 Writerside 项目中使用。'; @override - String get markdownHtmlHtmlFigures => 'Figures and images'; + String get syntaxReferenceReferencedDiagramSource => '引用的图表源'; @override - String get markdownHtmlHtmlPreformatted => 'Preformatted code'; + String get syntaxReferenceReferencedDiagramLimitation => + '路径必须是相对路径并位于已打开的 Writerside 项目内;围栏加 src 的形式仅适用于 Writerside Markdown。'; @override - String get markdownHtmlHtmlDisclosure => 'Disclosure blocks'; + String get syntaxReferenceMathematicsDescription => + 'BusyMark 支持 TeX 表达式,但不支持完整的 TeX 或 LaTeX 文档。'; @override - String get markdownHtmlHtmlDescriptionLists => 'Description lists'; + String get syntaxReferenceInlineMath => '行内数学公式'; @override - String get markdownHtmlHtmlFormattingTags => 'Formatting tags'; + String get syntaxReferenceGithubMath => '使用美元符号和反引号的 GitHub 数学公式'; @override - String get markdownHtmlHtmlInlineCodeTags => 'Inline code tags'; + String get syntaxReferenceDisplayMath => '显示数学公式'; @override - String get markdownHtmlHtmlNeutralInlineTags => 'Semantic text tags'; + String get syntaxReferenceMathFence => 'math 围栏'; @override - String get markdownHtmlSanitizedPreview => 'Sanitized preview'; + String get syntaxReferenceTexFence => 'tex 围栏'; @override - String get markdownHtmlSanitizedPreviewDescription => - 'Allowed HTML is converted to BusyMark preview blocks, not rendered in a browser.'; + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark 不会将 \\(...\\) 或 \\[...\\] 识别为 Markdown 数学分隔符。'; @override - String get markdownHtmlSourcePreserved => 'Source is preserved'; + String get syntaxReferenceTexFenceLimitation => + '在 Writerside 模式之外,tex 围栏仍是普通代码块。'; @override - String get markdownHtmlSourcePreservedDescription => - 'Unedited raw HTML is saved back exactly as source text.'; + String get syntaxReferenceWritersideMathElement => 'Writerside math 元素'; @override - String get markdownHtmlMarkdownInsideHtml => 'Markdown inside HTML'; + String get syntaxReferenceWritersideMathElementLimitation => + 'math 元素是语义 Writerside 语法,不是允许的原始 HTML MathML。'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => - 'Markdown markers inside raw HTML render as literal text.'; + String get syntaxReferenceSemanticTexBlock => '语义 TeX 代码块'; @override - String get markdownHtmlBlockedContent => 'Blocked active content'; + String get syntaxReferenceWritersideDescription => + '这些特定扩展仅在已打开的 Writerside 项目中解析。'; @override - String get markdownHtmlBlockedContentDescription => - 'Scripts, styles, frames, forms, SVG, MathML, events, and unsafe attributes are blocked.'; + String get syntaxReferenceAdmonitionBlockquote => '提示块引用'; @override - String get markdownHtmlSafeUrls => 'Safe URLs only'; + String get syntaxReferenceAdmonitionLimitation => + '普通块引用在 Writerside Markdown 中是提示;在普通 Markdown 中仍是普通引用。'; @override - String get markdownHtmlSafeUrlsDescription => - 'Links allow http, https, mailto, tel, relative, and fragment URLs; unsafe schemes are blocked.'; + String get syntaxReferenceSemanticAdmonitions => '语义提示'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + '普通 Markdown 不会解析这些 Writerside 语义元素。'; + + @override + String get syntaxReferenceCollapsibleHeading => '可折叠标题'; + + @override + String get syntaxReferenceCollapsibleCode => '可折叠代码围栏'; + + @override + String get syntaxReferenceSemanticCollapsibles => '语义可折叠内容'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark 支持可折叠的 chapter、procedure、code-block 和定义列表形式,但不支持完整的 Writerside 目录。'; + + @override + String get syntaxReferenceSemanticCodeBlocks => '数学和图表的语义代码块'; + + @override + String get syntaxReferenceVideo => 'Writerside 视频'; + + @override + String get syntaxReferenceVideoLimitation => + '本地视频使用本地 preview-src 图像;托管视频源必须是受支持的 YouTube 或 Vimeo HTTPS URL。'; @override String get exportAsPdf => 'Export as PDF'; @@ -3978,7 +4144,7 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get shortcutKeyboardShortcutsDescription => '显示此键盘快捷键参考'; @override - String get shortcutMarkdownAndHtmlDescription => '打开 Markdown 和 HTML 参考'; + String get shortcutSyntaxReferenceDescription => '打开语法参考'; @override String get shortcutSettingsDescription => '打开 BusyMark 设置'; @@ -6069,111 +6235,281 @@ class AppLocalizationsZhCn extends AppLocalizationsZh { String get gitErrorCommandFailed => 'Git 命令失败。'; @override - String get markdownAndHtml => 'Markdown 和 HTML'; + String get syntaxReference => '语法参考'; @override - String get markdownHtmlMarkdownBlocks => 'Markdown 块'; + String get syntaxReferenceMarkdownBlocks => 'Markdown 块'; @override - String get markdownHtmlMarkdownBlocksDescription => 'Markdown 源代码和预览中支持的块结构。'; + String get syntaxReferenceMarkdownBlocksDescription => + 'Markdown 源代码和预览中支持的块结构。'; @override - String get markdownHtmlInlineFormatting => '行内 Markdown'; + String get syntaxReferenceInlineFormatting => '行内 Markdown'; @override - String get markdownHtmlInlineFormattingDescription => '可出现在段落、列表项和表格单元格中的格式。'; + String get syntaxReferenceInlineFormattingDescription => + '可出现在段落、列表项和表格单元格中的格式。'; @override - String get markdownHtmlRawHtmlBlocks => '原始 HTML 块'; + String get syntaxReferenceRawHtmlBlocks => '原始 HTML 块'; @override - String get markdownHtmlRawHtmlBlocksDescription => + String get syntaxReferenceRawHtmlBlocksDescription => '通过 BusyMark 预览组件渲染的安全块级 HTML 标签。'; @override - String get markdownHtmlRawHtmlInline => '原始 HTML 行内标签'; + String get syntaxReferenceRawHtmlInline => '原始 HTML 行内标签'; @override - String get markdownHtmlRawHtmlInlineDescription => + String get syntaxReferenceRawHtmlInlineDescription => '安全的行内 HTML 标签,渲染时不会显示字面标签。'; @override - String get markdownHtmlSafety => '安全规则'; + String get syntaxReferenceSafety => '安全规则'; @override - String get markdownHtmlSafetyDescription => '原始 HTML 会在预览前进行解析和清理。'; + String get syntaxReferenceSafetyDescription => '原始 HTML 会在预览前进行解析和清理。'; @override - String get markdownHtmlHeadings => '标题'; + String get syntaxReferenceHeadings => '标题'; @override - String get markdownHtmlParagraphs => '段落'; + String get syntaxReferenceParagraphs => '段落'; @override - String get markdownHtmlLists => '列表'; + String get syntaxReferenceLists => '列表'; @override - String get markdownHtmlHtmlContainers => '容器'; + String get syntaxReferenceHtmlContainers => '容器'; @override - String get markdownHtmlHtmlTextBlocks => '文本块'; + String get syntaxReferenceHtmlTextBlocks => '文本块'; @override - String get markdownHtmlHtmlFigures => '图和图像'; + String get syntaxReferenceHtmlFigures => '图和图像'; @override - String get markdownHtmlHtmlPreformatted => '预格式化代码'; + String get syntaxReferenceHtmlPreformatted => '预格式化代码'; @override - String get markdownHtmlHtmlDisclosure => '折叠块'; + String get syntaxReferenceHtmlDisclosure => '折叠块'; @override - String get markdownHtmlHtmlDescriptionLists => '描述列表'; + String get syntaxReferenceHtmlDescriptionLists => '描述列表'; @override - String get markdownHtmlHtmlFormattingTags => '格式标签'; + String get syntaxReferenceHtmlFormattingTags => '格式标签'; @override - String get markdownHtmlHtmlInlineCodeTags => '行内代码标签'; + String get syntaxReferenceHtmlInlineCodeTags => '行内代码标签'; @override - String get markdownHtmlHtmlNeutralInlineTags => '语义文本标签'; + String get syntaxReferenceHtmlNeutralInlineTags => '语义文本标签'; @override - String get markdownHtmlSanitizedPreview => '已清理的预览'; + String get syntaxReferenceSanitizedPreview => '已清理的预览'; @override - String get markdownHtmlSanitizedPreviewDescription => + String get syntaxReferenceSanitizedPreviewDescription => '允许的 HTML 会转换为 BusyMark 预览块,而不是在浏览器中渲染。'; @override - String get markdownHtmlSourcePreserved => '保留源代码'; + String get syntaxReferenceSourcePreserved => '保留源代码'; @override - String get markdownHtmlSourcePreservedDescription => + String get syntaxReferenceSourcePreservedDescription => '未经编辑的原始 HTML 会按源文本原样保存。'; @override - String get markdownHtmlMarkdownInsideHtml => 'HTML 内的 Markdown'; + String get syntaxReferenceMarkdownInsideHtml => 'HTML 内的 Markdown'; @override - String get markdownHtmlMarkdownInsideHtmlDescription => + String get syntaxReferenceMarkdownInsideHtmlDescription => '原始 HTML 内的 Markdown 标记会按字面文本渲染。'; @override - String get markdownHtmlBlockedContent => '被阻止的活动内容'; + String get syntaxReferenceBlockedContent => '被阻止的活动内容'; @override - String get markdownHtmlBlockedContentDescription => + String get syntaxReferenceBlockedContentDescription => '脚本、样式、框架、表单、SVG、MathML、事件和不安全属性都会被阻止。'; @override - String get markdownHtmlSafeUrls => '仅允许安全 URL'; + String get syntaxReferenceSafeUrls => '仅允许安全 URL'; @override - String get markdownHtmlSafeUrlsDescription => + String get syntaxReferenceSafeUrlsDescription => '链接允许 http、https、mailto、tel、相对路径和片段 URL;不安全的 scheme 会被阻止。'; + @override + String get syntaxReferenceCategory => '类别'; + + @override + String get syntaxReferenceCategoryHtml => 'HTML'; + + @override + String get syntaxReferenceCategoryDiagramsAndApi => '图表和 API'; + + @override + String get syntaxReferenceCategoryMathematics => '数学'; + + @override + String get syntaxReferenceExample => '示例'; + + @override + String get syntaxReferenceIdentifiers => '标识符和别名'; + + @override + String get syntaxReferenceScope => '适用范围'; + + @override + String get syntaxReferenceLimitation => 'BusyMark 限制'; + + @override + String get syntaxReferenceOfficialDocumentation => '官方文档'; + + @override + String get syntaxReferenceScopeMarkdownAndWritersideMarkdown => + '普通 Markdown 和 Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdown => '仅 Writerside Markdown'; + + @override + String get syntaxReferenceScopeWritersideMarkdownAndXml => + '仅 Writerside Markdown 和 Writerside XML'; + + @override + String get syntaxReferenceMarkdownDescription => + 'BusyMark 可以编写和预览的核心 Markdown 形式。'; + + @override + String get syntaxReferenceParagraphExample => '一段文本。'; + + @override + String get syntaxReferenceTableLimitation => + '表格使用 GitHub Flavored Markdown 的竖线语法。'; + + @override + String get syntaxReferenceHardBreakIdentifiers => '行尾两个空格、\\、
    '; + + @override + String get syntaxReferenceHtmlDescription => + 'BusyMark 在 Markdown 源码中仅接受有限且安全的原始 HTML 子集。'; + + @override + String get syntaxReferenceDiagramsDescription => + '带围栏的 Mermaid、PlantUML、D2 和 OpenAPI 块可在 Markdown 源码中使用。围栏标识符不区分大小写,BusyMark 会保留原始拼写。'; + + @override + String get syntaxReferenceMermaid => 'Mermaid'; + + @override + String get syntaxReferencePlantUml => 'PlantUML'; + + @override + String get syntaxReferenceD2 => 'D2'; + + @override + String get syntaxReferenceOpenApi => 'OpenAPI'; + + @override + String get syntaxReferenceOpenApiLimitation => + '请使用带围栏的 YAML 或 JSON 内容。BusyMark 不会将任意完整的 YAML 或 JSON 文档视为 OpenAPI 参考。'; + + @override + String get syntaxReferenceSemanticDiagramBlocks => '图表的语义代码块'; + + @override + String get syntaxReferenceSemanticDiagramLimitation => + '语义 code-block 和 src 形式仅支持 Mermaid、PlantUML 和 D2,不支持 OpenAPI,且只能在 Writerside 项目中使用。'; + + @override + String get syntaxReferenceReferencedDiagramSource => '引用的图表源'; + + @override + String get syntaxReferenceReferencedDiagramLimitation => + '路径必须是相对路径并位于已打开的 Writerside 项目内;围栏加 src 的形式仅适用于 Writerside Markdown。'; + + @override + String get syntaxReferenceMathematicsDescription => + 'BusyMark 支持 TeX 表达式,但不支持完整的 TeX 或 LaTeX 文档。'; + + @override + String get syntaxReferenceInlineMath => '行内数学公式'; + + @override + String get syntaxReferenceGithubMath => '使用美元符号和反引号的 GitHub 数学公式'; + + @override + String get syntaxReferenceDisplayMath => '显示数学公式'; + + @override + String get syntaxReferenceMathFence => 'math 围栏'; + + @override + String get syntaxReferenceTexFence => 'tex 围栏'; + + @override + String get syntaxReferenceMathDelimitersLimitation => + 'BusyMark 不会将 \\(...\\) 或 \\[...\\] 识别为 Markdown 数学分隔符。'; + + @override + String get syntaxReferenceTexFenceLimitation => + '在 Writerside 模式之外,tex 围栏仍是普通代码块。'; + + @override + String get syntaxReferenceWritersideMathElement => 'Writerside math 元素'; + + @override + String get syntaxReferenceWritersideMathElementLimitation => + 'math 元素是语义 Writerside 语法,不是允许的原始 HTML MathML。'; + + @override + String get syntaxReferenceSemanticTexBlock => '语义 TeX 代码块'; + + @override + String get syntaxReferenceWritersideDescription => + '这些特定扩展仅在已打开的 Writerside 项目中解析。'; + + @override + String get syntaxReferenceAdmonitionBlockquote => '提示块引用'; + + @override + String get syntaxReferenceAdmonitionLimitation => + '普通块引用在 Writerside Markdown 中是提示;在普通 Markdown 中仍是普通引用。'; + + @override + String get syntaxReferenceSemanticAdmonitions => '语义提示'; + + @override + String get syntaxReferenceSemanticMarkupLimitation => + '普通 Markdown 不会解析这些 Writerside 语义元素。'; + + @override + String get syntaxReferenceCollapsibleHeading => '可折叠标题'; + + @override + String get syntaxReferenceCollapsibleCode => '可折叠代码围栏'; + + @override + String get syntaxReferenceSemanticCollapsibles => '语义可折叠内容'; + + @override + String get syntaxReferenceSemanticCollapsiblesLimitation => + 'BusyMark 支持可折叠的 chapter、procedure、code-block 和定义列表形式,但不支持完整的 Writerside 目录。'; + + @override + String get syntaxReferenceSemanticCodeBlocks => '数学和图表的语义代码块'; + + @override + String get syntaxReferenceVideo => 'Writerside 视频'; + + @override + String get syntaxReferenceVideoLimitation => + '本地视频使用本地 preview-src 图像;托管视频源必须是受支持的 YouTube 或 Vimeo HTTPS URL。'; + @override String get exportAsPdf => '导出为 PDF'; diff --git a/lib/src/app/busymark_app.dart b/lib/src/app/busymark_app.dart index 0e8eff6b..2fa87433 100644 --- a/lib/src/app/busymark_app.dart +++ b/lib/src/app/busymark_app.dart @@ -45,7 +45,7 @@ final busyMarkCommandRegistryProvider = Provider(( BusyMarkCommandIds.search: const _OpenSearchIntent(), BusyMarkCommandIds.keyboardShortcuts: const _KeyboardShortcutsIntent(), BusyMarkCommandIds.commandPalette: const _CommandPaletteIntent(), - BusyMarkCommandIds.markdownAndHtml: const _MarkdownAndHtmlIntent(), + BusyMarkCommandIds.syntaxReference: const _SyntaxReferenceIntent(), BusyMarkCommandIds.settings: const _SettingsIntent(), BusyMarkCommandIds.nextTab: const _NextTabIntent(), BusyMarkCommandIds.previousTab: const _PreviousTabIntent(), @@ -265,13 +265,13 @@ class BusyMarkApp extends ConsumerWidget { return null; }, ), - _MarkdownAndHtmlIntent: - CallbackAction<_MarkdownAndHtmlIntent>( + _SyntaxReferenceIntent: + CallbackAction<_SyntaxReferenceIntent>( onInvoke: (intent) { final navigatorContext = rootNavigatorKey.currentContext; if (navigatorContext != null) { - showBusyMarkMarkdownHtmlDialog(navigatorContext); + showBusyMarkSyntaxReferenceDialog(navigatorContext); } return null; }, @@ -831,10 +831,10 @@ class BusyMarkApp extends ConsumerWidget { keyboardShortcutsGtkAccelerator: accelerator( BusyMarkCommandIds.keyboardShortcuts, ), - markdownAndHtml: label(BusyMarkCommandIds.markdownAndHtml), - markdownAndHtmlShortcut: shortcut(BusyMarkCommandIds.markdownAndHtml), - markdownAndHtmlGtkAccelerator: accelerator( - BusyMarkCommandIds.markdownAndHtml, + syntaxReference: label(BusyMarkCommandIds.syntaxReference), + syntaxReferenceShortcut: shortcut(BusyMarkCommandIds.syntaxReference), + syntaxReferenceGtkAccelerator: accelerator( + BusyMarkCommandIds.syntaxReference, ), reportIssue: l10n.reportIssue, aboutBusyMark: l10n.aboutBusyMark, @@ -1124,8 +1124,8 @@ class _SettingsIntent extends Intent { const _SettingsIntent(); } -class _MarkdownAndHtmlIntent extends Intent { - const _MarkdownAndHtmlIntent(); +class _SyntaxReferenceIntent extends Intent { + const _SyntaxReferenceIntent(); } class _NextTabIntent extends Intent { diff --git a/lib/src/app/busymark_dialog_identity.dart b/lib/src/app/busymark_dialog_identity.dart index dc4fb012..383b1495 100644 --- a/lib/src/app/busymark_dialog_identity.dart +++ b/lib/src/app/busymark_dialog_identity.dart @@ -12,6 +12,7 @@ class BusyMarkInformationalDialog extends StatelessWidget { required this.maxWidth, required this.child, this.maxHeight, + this.scrollable = true, super.key, }); @@ -19,6 +20,7 @@ class BusyMarkInformationalDialog extends StatelessWidget { final double maxWidth; final double? maxHeight; final Widget child; + final bool scrollable; @override Widget build(BuildContext context) { @@ -41,10 +43,12 @@ class BusyMarkInformationalDialog extends StatelessWidget { children: [ BusyMarkDialogTitleBar(closeSemanticLabel: closeLabel), Flexible( - child: SingleChildScrollView( - padding: const EdgeInsets.all(BusyMarkSpacing.lg), - child: child, - ), + child: scrollable + ? SingleChildScrollView( + padding: const EdgeInsets.all(BusyMarkSpacing.lg), + child: child, + ) + : child, ), ], ), diff --git a/lib/src/app/busymark_dialogs.dart b/lib/src/app/busymark_dialogs.dart index 98629078..70219421 100644 --- a/lib/src/app/busymark_dialogs.dart +++ b/lib/src/app/busymark_dialogs.dart @@ -17,6 +17,24 @@ import 'localization.dart'; const _busyMarkWebsiteUrl = 'https://busystack.org'; const _busyMarkRepositoryUrl = 'https://github.com/busystack/busymark/'; const _apacheLicenseUrl = 'https://www.apache.org/licenses/LICENSE-2.0'; +const _commonMarkDocumentationUrl = 'https://spec.commonmark.org/current/'; +const _githubMarkdownDocumentationUrl = 'https://github.github.com/gfm/'; +const _htmlDocumentationUrl = 'https://html.spec.whatwg.org/multipage/'; +const _mermaidDocumentationUrl = + 'https://mermaid.js.org/intro/syntax-reference.html'; +const _plantUmlDocumentationUrl = 'https://plantuml.com/guide'; +const _d2DocumentationUrl = 'https://d2lang.com/tour/intro/'; +const _openApiDocumentationUrl = 'https://spec.openapis.org/oas/latest.html'; +const _writersideAdmonitionDocumentationUrl = + 'https://www.jetbrains.com/help/writerside/admonitions.html'; +const _writersideCollapsibleDocumentationUrl = + 'https://www.jetbrains.com/help/writerside/collapsible-elements.html'; +const _writersideMathDocumentationUrl = + 'https://www.jetbrains.com/help/writerside/math-support.html'; +const _writersideMermaidDocumentationUrl = + 'https://www.jetbrains.com/help/writerside/mermaid-diagrams.html'; +const _writersideVideoDocumentationUrl = + 'https://www.jetbrains.com/help/writerside/videos.html'; const _busyMarkLogoAsset = 'assets/branding/busymark_logo.svg'; const _supportedRawHtmlBlockTags = 'article, aside, div, section, header, footer, main, nav, h1-h6, p, ' @@ -30,6 +48,30 @@ const _supportedRawHtmlInlineTags = final _busyMarkWebsiteUri = Uri.parse(_busyMarkWebsiteUrl); final _busyMarkRepositoryUri = Uri.parse(_busyMarkRepositoryUrl); final _apacheLicenseUri = Uri.parse(_apacheLicenseUrl); +final _commonMarkDocumentationUri = Uri.parse(_commonMarkDocumentationUrl); +final _githubMarkdownDocumentationUri = Uri.parse( + _githubMarkdownDocumentationUrl, +); +final _htmlDocumentationUri = Uri.parse(_htmlDocumentationUrl); +final _mermaidDocumentationUri = Uri.parse(_mermaidDocumentationUrl); +final _plantUmlDocumentationUri = Uri.parse(_plantUmlDocumentationUrl); +final _d2DocumentationUri = Uri.parse(_d2DocumentationUrl); +final _openApiDocumentationUri = Uri.parse(_openApiDocumentationUrl); +final _writersideAdmonitionDocumentationUri = Uri.parse( + _writersideAdmonitionDocumentationUrl, +); +final _writersideCollapsibleDocumentationUri = Uri.parse( + _writersideCollapsibleDocumentationUrl, +); +final _writersideMathDocumentationUri = Uri.parse( + _writersideMathDocumentationUrl, +); +final _writersideMermaidDocumentationUri = Uri.parse( + _writersideMermaidDocumentationUrl, +); +final _writersideVideoDocumentationUri = Uri.parse( + _writersideVideoDocumentationUrl, +); class _DismissBusyMarkModalIntent extends Intent { const _DismissBusyMarkModalIntent(); @@ -494,11 +536,11 @@ void showLegacyBusyMarkKeyboardShortcutsDialog(BuildContext context) { ), ), BusyMarkActionRow( - title: context.l10n.markdownAndHtml, - subtitle: context.l10n.shortcutMarkdownAndHtmlDescription, + title: context.l10n.syntaxReference, + subtitle: context.l10n.shortcutSyntaxReferenceDescription, leading: const Icon(BusyMarkGlyphs.markdownFile), trailing: const _KeyboardShortcutBadge( - BusyMarkAppShortcutLabels.markdownAndHtml, + BusyMarkAppShortcutLabels.syntaxReference, ), ), BusyMarkActionRow( @@ -939,255 +981,709 @@ void showLegacyBusyMarkKeyboardShortcutsDialog(BuildContext context) { ); } -void showBusyMarkMarkdownHtmlDialog(BuildContext context) { +void showBusyMarkSyntaxReferenceDialog(BuildContext context) { final headerBar = LinuxHeaderBarService.instance; unawaited( showBusyMarkModalDialog( context, headerBarService: headerBar.isAvailable ? headerBar : null, - builder: (context) => _BusyMarkInfoDialog( - title: context.l10n.markdownAndHtml, - icon: BusyMarkGlyphs.markdownFile, - maxWidth: BusyMarkSizes.dialogWide, - children: [ - BusyMarkGroupedList( - title: context.l10n.markdownHtmlMarkdownBlocks, - description: context.l10n.markdownHtmlMarkdownBlocksDescription, - filled: true, - children: [ - _ReferenceRow( - title: context.l10n.markdownHtmlHeadings, - syntax: '#, ##, ###', - icon: BusyMarkGlyphs.heading, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlParagraphs, - syntax: 'text', - icon: BusyMarkGlyphs.paragraph, - ), - _ReferenceRow( - title: context.l10n.blockquote, - syntax: '> quote', - icon: BusyMarkGlyphs.blockquote, - ), - _ReferenceRow( - title: context.l10n.codeBlock, - syntax: '```', - icon: BusyMarkGlyphs.code, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlLists, - syntax: '-, *, 1.', - icon: BusyMarkGlyphs.unorderedList, - ), - _ReferenceRow( - title: context.l10n.checklist, - syntax: '- [ ]', - icon: BusyMarkGlyphs.checklist, - ), - _ReferenceRow( - title: context.l10n.table, - syntax: '| --- |', - icon: BusyMarkGlyphs.table, - ), - _ReferenceRow( - title: context.l10n.image, - syntax: '![alt](src)', - icon: BusyMarkGlyphs.image, + builder: (context) => const _SyntaxReferenceDialog(), + ), + ); +} + +enum _SyntaxReferenceCategory { + markdown, + html, + diagramsAndApi, + mathematics, + writerside, +} + +class _SyntaxReferenceDialog extends StatefulWidget { + const _SyntaxReferenceDialog(); + + @override + State<_SyntaxReferenceDialog> createState() => _SyntaxReferenceDialogState(); +} + +class _SyntaxReferenceDialogState extends State<_SyntaxReferenceDialog> { + final _scrollController = ScrollController(); + var _category = _SyntaxReferenceCategory.markdown; + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final colorScheme = Theme.of(context).colorScheme; + return BusyMarkInformationalDialog( + key: const ValueKey('syntax-reference-dialog'), + closeLabel: context.l10n.close, + maxWidth: BusyMarkSizes.dialogWide, + maxHeight: 680, + scrollable: false, + child: Padding( + padding: const EdgeInsetsDirectional.fromSTEB( + BusyMarkSpacing.lg, + BusyMarkSpacing.md, + BusyMarkSpacing.lg, + BusyMarkSpacing.lg, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + Icon( + BusyMarkGlyphs.markdownFile, + size: BusyMarkSizes.iconButton, + color: colorScheme.primary, + ), + const SizedBox(width: BusyMarkSpacing.sm), + Expanded( + child: Text( + context.l10n.syntaxReference, + style: Theme.of(context).textTheme.headlineSmall?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + const SizedBox(height: BusyMarkSpacing.md), + InputDecorator( + decoration: InputDecoration( + labelText: context.l10n.syntaxReferenceCategory, + prefixIcon: const Icon(BusyMarkGlyphs.category), + ), + child: DropdownButtonHideUnderline( + child: DropdownButton<_SyntaxReferenceCategory>( + key: const ValueKey('syntax-reference-category-selector'), + value: _category, + isExpanded: true, + isDense: true, + items: [ + for (final category in _SyntaxReferenceCategory.values) + DropdownMenuItem( + value: category, + child: Text(_categoryLabel(context, category)), + ), + ], + onChanged: (category) { + if (category == null || category == _category) { + return; + } + setState(() => _category = category); + if (_scrollController.hasClients) { + _scrollController.jumpTo(0); + } + }, + ), ), - _ReferenceRow( - title: context.l10n.thematicBreak, - syntax: '---', - icon: BusyMarkGlyphs.thematicBreak, + ), + const SizedBox(height: BusyMarkSpacing.md), + Expanded( + child: Scrollbar( + controller: _scrollController, + child: SingleChildScrollView( + key: ValueKey('syntax-reference-category-${_category.name}'), + controller: _scrollController, + keyboardDismissBehavior: + ScrollViewKeyboardDismissBehavior.onDrag, + child: _categoryContent(context, _category), + ), ), - ], + ), + ], + ), + ), + ); + } + + String _categoryLabel( + BuildContext context, + _SyntaxReferenceCategory category, + ) => switch (category) { + _SyntaxReferenceCategory.markdown => context.l10n.markdown, + _SyntaxReferenceCategory.html => context.l10n.syntaxReferenceCategoryHtml, + _SyntaxReferenceCategory.diagramsAndApi => + context.l10n.syntaxReferenceCategoryDiagramsAndApi, + _SyntaxReferenceCategory.mathematics => + context.l10n.syntaxReferenceCategoryMathematics, + _SyntaxReferenceCategory.writerside => context.l10n.writerside, + }; + + Widget _categoryContent( + BuildContext context, + _SyntaxReferenceCategory category, + ) => switch (category) { + _SyntaxReferenceCategory.markdown => _markdownReference(context), + _SyntaxReferenceCategory.html => _htmlReference(context), + _SyntaxReferenceCategory.diagramsAndApi => _diagramsAndApiReference( + context, + ), + _SyntaxReferenceCategory.mathematics => _mathematicsReference(context), + _SyntaxReferenceCategory.writerside => _writersideReference(context), + }; + + Widget _markdownReference(BuildContext context) { + final l10n = context.l10n; + final scope = l10n.syntaxReferenceScopeMarkdownAndWritersideMarkdown; + return _SyntaxReferenceCategoryContent( + description: l10n.syntaxReferenceMarkdownDescription, + entries: [ + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceHeadings, + example: '# Heading', + identifiers: '#, ##, ###, ####, #####, ######', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceParagraphs, + example: l10n.syntaxReferenceParagraphExample, + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.blockquote, + example: '> Quoted text', + identifiers: '>', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.codeBlock, + example: '```dart\nprint("Hello");\n```', + identifiers: '```, ~~~', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceLists, + example: '- Item\n1. First', + identifiers: '-, *, +, 1., 1)', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.checklist, + example: '- [ ] Draft\n- [x] Published', + identifiers: '- [ ], - [x], - [X]', + scope: scope, + documentationUri: _githubMarkdownDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.table, + example: '| Name | Value |\n| --- | --- |\n| A | 1 |', + identifiers: '| --- |', + scope: scope, + limitation: l10n.syntaxReferenceTableLimitation, + documentationUri: _githubMarkdownDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.link, + example: '[BusyMark](https://busystack.org)', + identifiers: '[text](url), [text][label]', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.image, + example: '![Alternative text](image.png)', + identifiers: '![alt](src), ![alt][label]', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceInlineFormatting, + example: '**bold** *italic* ~~removed~~ `code`', + identifiers: '**, __, *, _, ~~, `', + scope: scope, + documentationUri: _githubMarkdownDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.thematicBreak, + example: '---', + identifiers: '---, ***, ___', + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.hardLineBreak, + example: 'First line \nSecond line', + identifiers: l10n.syntaxReferenceHardBreakIdentifiers, + scope: scope, + documentationUri: _commonMarkDocumentationUri, + ), + ], + ); + } + + Widget _htmlReference(BuildContext context) { + final l10n = context.l10n; + return _SyntaxReferenceCategoryContent( + description: l10n.syntaxReferenceHtmlDescription, + entries: [ + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceRawHtmlBlocks, + example: '
    \n

    Text

    \n
    ', + identifiers: _supportedRawHtmlBlockTags, + scope: l10n.syntaxReferenceScopeMarkdownAndWritersideMarkdown, + limitation: l10n.syntaxReferenceMarkdownInsideHtmlDescription, + documentationUri: _htmlDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceRawHtmlInline, + example: 'Important', + identifiers: _supportedRawHtmlInlineTags, + scope: l10n.syntaxReferenceScopeMarkdownAndWritersideMarkdown, + documentationUri: _htmlDocumentationUri, + ), + ], + footer: BusyMarkGroupedList( + title: l10n.syntaxReferenceSafety, + description: l10n.syntaxReferenceSafetyDescription, + filled: true, + children: [ + BusyMarkActionRow( + title: l10n.syntaxReferenceSanitizedPreview, + subtitle: l10n.syntaxReferenceSanitizedPreviewDescription, + leading: const Icon(BusyMarkGlyphs.check), ), - BusyMarkGroupedList( - title: context.l10n.markdownHtmlInlineFormatting, - description: context.l10n.markdownHtmlInlineFormattingDescription, - filled: true, - children: [ - _ReferenceRow( - title: context.l10n.bold, - syntax: '**text**', - icon: BusyMarkGlyphs.bold, - ), - _ReferenceRow( - title: context.l10n.italic, - syntax: '*text*', - icon: BusyMarkGlyphs.italic, - ), - _ReferenceRow( - title: context.l10n.underline, - syntax: 'text', - icon: BusyMarkGlyphs.underline, - ), - _ReferenceRow( - title: context.l10n.strikethrough, - syntax: '~~text~~', - icon: BusyMarkGlyphs.strikethrough, - ), - _ReferenceRow( - title: context.l10n.inlineCode, - syntax: '`code`', - icon: BusyMarkGlyphs.code, - ), - _ReferenceRow( - title: context.l10n.link, - syntax: '[text](url)', - icon: BusyMarkGlyphs.link, - ), - _ReferenceRow( - title: context.l10n.hardLineBreak, - syntax: '
    ', - icon: BusyMarkGlyphs.hardBreak, - ), - ], + BusyMarkActionRow( + title: l10n.syntaxReferenceSourcePreserved, + subtitle: l10n.syntaxReferenceSourcePreservedDescription, + leading: const Icon(BusyMarkGlyphs.document), ), - BusyMarkGroupedList( - title: context.l10n.markdownHtmlRawHtmlBlocks, - description: - '${context.l10n.markdownHtmlRawHtmlBlocksDescription}\n' - '$_supportedRawHtmlBlockTags.', - filled: true, - children: [ - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlContainers, - syntax: 'div, section', - icon: BusyMarkGlyphs.insertObject, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlTextBlocks, - syntax: 'p, h1-h6', - icon: BusyMarkGlyphs.text, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlLists, - syntax: 'ul, ol, li', - icon: BusyMarkGlyphs.orderedList, - ), - _ReferenceRow( - title: context.l10n.table, - syntax: 'table, tr, td', - icon: BusyMarkGlyphs.table, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlFigures, - syntax: 'figure, img', - icon: BusyMarkGlyphs.image, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlPreformatted, - syntax: 'pre, code', - icon: BusyMarkGlyphs.code, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlDisclosure, - syntax: 'details', - icon: BusyMarkGlyphs.info, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlDescriptionLists, - syntax: 'dl, dt, dd', - icon: BusyMarkGlyphs.unorderedList, - ), - ], + BusyMarkActionRow( + title: l10n.syntaxReferenceMarkdownInsideHtml, + subtitle: l10n.syntaxReferenceMarkdownInsideHtmlDescription, + leading: const Icon(BusyMarkGlyphs.markdownFile), ), - BusyMarkGroupedList( - title: context.l10n.markdownHtmlRawHtmlInline, - description: - '${context.l10n.markdownHtmlRawHtmlInlineDescription}\n' - '$_supportedRawHtmlInlineTags.', - filled: true, - children: [ - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlFormattingTags, - syntax: 'strong, em, u', - icon: BusyMarkGlyphs.bold, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlInlineCodeTags, - syntax: 'kbd, samp, var', - icon: BusyMarkGlyphs.code, - ), - _ReferenceRow( - title: context.l10n.link, - syntax: 'a[href]', - icon: BusyMarkGlyphs.link, - ), - _ReferenceRow( - title: context.l10n.inlineImage, - syntax: 'img[src]', - icon: BusyMarkGlyphs.inlineImage, - ), - _ReferenceRow( - title: context.l10n.markdownHtmlHtmlNeutralInlineTags, - syntax: 'span, time', - icon: BusyMarkGlyphs.symbols, - ), - _ReferenceRow( - title: context.l10n.hardLineBreak, - syntax: 'br, wbr', - icon: BusyMarkGlyphs.hardBreak, - ), - ], + BusyMarkActionRow( + title: l10n.syntaxReferenceBlockedContent, + subtitle: l10n.syntaxReferenceBlockedContentDescription, + leading: const Icon(BusyMarkGlyphs.warning), ), - BusyMarkGroupedList( - title: context.l10n.markdownHtmlSafety, - description: context.l10n.markdownHtmlSafetyDescription, - filled: true, - children: [ - BusyMarkActionRow( - title: context.l10n.markdownHtmlSanitizedPreview, - subtitle: context.l10n.markdownHtmlSanitizedPreviewDescription, - leading: const Icon(BusyMarkGlyphs.check), + BusyMarkActionRow( + title: l10n.syntaxReferenceSafeUrls, + subtitle: l10n.syntaxReferenceSafeUrlsDescription, + leading: const Icon(BusyMarkGlyphs.link), + ), + ], + ), + ); + } + + Widget _diagramsAndApiReference(BuildContext context) { + final l10n = context.l10n; + final scope = l10n.syntaxReferenceScopeMarkdownAndWritersideMarkdown; + return _SyntaxReferenceCategoryContent( + description: l10n.syntaxReferenceDiagramsDescription, + entries: [ + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceMermaid, + example: '```mermaid\nflowchart LR\n A --> B\n```', + identifiers: 'mermaid', + scope: scope, + documentationUri: _mermaidDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferencePlantUml, + example: '```plantuml\n@startuml\nAlice -> Bob: Hello\n@enduml\n```', + identifiers: 'plantuml, puml', + scope: scope, + documentationUri: _plantUmlDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceD2, + example: '```d2\nclient -> server\n```', + identifiers: 'd2', + scope: scope, + documentationUri: _d2DocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceOpenApi, + example: + '```openapi\nopenapi: 3.0.3\ninfo:\n title: Sample API\n' + ' version: 1.0.0\npaths: {}\n```', + identifiers: 'openapi, oas, swagger', + scope: scope, + limitation: l10n.syntaxReferenceOpenApiLimitation, + documentationUri: _openApiDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceSemanticDiagramBlocks, + example: + 'flowchart LR\n' + ' A --> B', + identifiers: 'mermaid, plantuml, puml, d2', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceSemanticDiagramLimitation, + documentationUri: _writersideMermaidDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceReferencedDiagramSource, + example: + '\n\n' + '```mermaid\n```\n{src="../codeSnippets/flow.mmd"}', + identifiers: 'src', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceReferencedDiagramLimitation, + documentationUri: _writersideMermaidDocumentationUri, + ), + ], + ); + } + + Widget _mathematicsReference(BuildContext context) { + final l10n = context.l10n; + final markdownScope = + l10n.syntaxReferenceScopeMarkdownAndWritersideMarkdown; + return _SyntaxReferenceCategoryContent( + description: l10n.syntaxReferenceMathematicsDescription, + entries: [ + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceInlineMath, + example: r'Euler: $e^{i\pi}+1=0$', + identifiers: r'$...$', + scope: markdownScope, + limitation: l10n.syntaxReferenceMathDelimitersLimitation, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceGithubMath, + example: r'The value is $`\sqrt{x^2+y^2}`$.', + identifiers: r'$`...`$', + scope: markdownScope, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceDisplayMath, + example: r'''$$ +\int_0^1 x^2\,dx = \frac{1}{3} +$$''', + identifiers: r'$$...$$', + scope: markdownScope, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceMathFence, + example: '```math\nE = mc^2\n```', + identifiers: 'math', + scope: markdownScope, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceTexFence, + example: '```tex\n\\sum_{i=1}^n i\n```', + identifiers: 'tex', + scope: l10n.syntaxReferenceScopeWritersideMarkdown, + limitation: l10n.syntaxReferenceTexFenceLimitation, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceWritersideMathElement, + example: r'The domain is \mathbb{R}.', + identifiers: '...', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceWritersideMathElementLimitation, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceSemanticTexBlock, + example: + '\n' + '\n' + '', + identifiers: 'tex', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + documentationUri: _writersideMathDocumentationUri, + ), + ], + ); + } + + Widget _writersideReference(BuildContext context) { + final l10n = context.l10n; + return _SyntaxReferenceCategoryContent( + description: l10n.syntaxReferenceWritersideDescription, + entries: [ + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceAdmonitionBlockquote, + example: '> Check this setting.\n{style="warning"}', + identifiers: '>, style="note", style="warning", style="quote"', + scope: l10n.syntaxReferenceScopeWritersideMarkdown, + limitation: l10n.syntaxReferenceAdmonitionLimitation, + documentationUri: _writersideAdmonitionDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceSemanticAdmonitions, + example: + 'Try this first.\n' + 'Remember this.\n' + 'Use care.\n' + 'Quoted text.', + identifiers: 'tip, note, warning, quote', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceSemanticMarkupLimitation, + documentationUri: _writersideAdmonitionDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceCollapsibleHeading, + example: + '## Advanced details {collapsible="true"}\n\nHidden content.', + identifiers: 'collapsible="true"', + scope: l10n.syntaxReferenceScopeWritersideMarkdown, + documentationUri: _writersideCollapsibleDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceCollapsibleCode, + example: + '```kotlin\nval answer = 42\n```\n' + '{collapsible="true" collapsed-title="Example.kt"}', + identifiers: 'collapsible, collapsed-title', + scope: l10n.syntaxReferenceScopeWritersideMarkdown, + documentationUri: _writersideCollapsibleDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceSemanticCollapsibles, + example: + '\n' + '

    Hidden content.

    \n' + '
    ', + identifiers: 'chapter, procedure, code-block, deflist', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceSemanticCollapsiblesLimitation, + documentationUri: _writersideCollapsibleDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceSemanticCodeBlocks, + example: + 'E = mc^2\n' + 'a -> b', + identifiers: 'tex, mermaid, plantuml, puml, d2', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceSemanticDiagramLimitation, + documentationUri: _writersideMathDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceReferencedDiagramSource, + example: '', + identifiers: 'src', + scope: l10n.syntaxReferenceScopeWritersideMarkdownAndXml, + limitation: l10n.syntaxReferenceReferencedDiagramLimitation, + documentationUri: _writersideMermaidDocumentationUri, + ), + _SyntaxReferenceEntry( + title: l10n.syntaxReferenceVideo, + example: + '
    '''); await File( @@ -161,12 +275,21 @@ class _ResolvedFixture { '''); + for (final id in ['foo', 'bar', 'other']) { + await File(p.join(directory.path, '$id.tree')).writeAsString(''' + + + +'''); + } await File(p.join(topics.path, 'main.topic')).writeAsString(''' - + + +

    %currentId%|%thisTopic%|%\\escaped%

    '''); await File(p.join(topics.path, 'library.topic')).writeAsString(''' @@ -176,8 +299,13 @@ class _ResolvedFixture {

    Windows only

    Linux only

    Excluded from guide

    +

    Not foo or bar

    + +

    Unfiltered should be absent

    +

    Filtered only

    +

    Nested content

    diff --git a/test/src/writerside_pdf_export_test.dart b/test/src/writerside_pdf_export_test.dart index aef03f9d..f464bff1 100644 --- a/test/src/writerside_pdf_export_test.dart +++ b/test/src/writerside_pdf_export_test.dart @@ -62,6 +62,17 @@ void main() { .map((inline) => inline.destination), contains(startsWith('file://')), ); + final imageDestinations = blocks + .expand((block) => _allInlines(block.inlines)) + .where((inline) => inline.kind == BusyInlineKind.image) + .map((inline) => inline.destination) + .whereType(); + expect( + imageDestinations, + contains( + allOf(startsWith('file://'), contains('/Shared/images/shared.png')), + ), + ); }, ); @@ -76,6 +87,7 @@ void main() { service.export( WritersidePdfExportRequest( moduleRoot: fixture.module.path, + projectRoot: fixture.root.path, instanceId: 'guide', destinationPath: p.join(fixture.root.path, 'cancelled.pdf'), overwrite: false, @@ -119,6 +131,94 @@ void main() { expect(exporter.request, isNull); }); + test('resolution errors prevent PDF compilation', () async { + final fixture = await _WritersideFixture.create(); + addTearDown(fixture.dispose); + final advanced = File( + p.join(fixture.module.path, 'topics', 'advanced.topic'), + ); + await advanced.writeAsString( + (await advanced.readAsString()).replaceFirst( + '', + '', + ), + ); + final exporter = _RecordingMarkdownExporter(); + final service = WritersidePdfExportService(markdownExporter: exporter); + + await expectLater( + service.export( + WritersidePdfExportRequest( + moduleRoot: fixture.module.path, + projectRoot: fixture.root.path, + instanceId: 'guide', + destinationPath: p.join(fixture.root.path, 'failed.pdf'), + overwrite: false, + ), + ), + throwsA( + isA() + .having( + (error) => error.code, + 'code', + WritersidePdfFailureCode.invalidRequest, + ) + .having( + (error) => error.detail, + 'detail', + contains('writerside.include.unresolved-source'), + ), + ), + ); + expect(exporter.request, isNull); + }); + + test( + 'nonfatal resolution diagnostics are returned as PDF warnings', + () async { + final fixture = await _WritersideFixture.create(); + addTearDown(fixture.dispose); + final advanced = File( + p.join(fixture.module.path, 'topics', 'advanced.topic'), + ); + await advanced.writeAsString( + (await advanced.readAsString()).replaceFirst( + '', + '

    %missing-variable%

    ', + ), + ); + final exporter = _RecordingMarkdownExporter(); + final service = WritersidePdfExportService(markdownExporter: exporter); + + final result = await service.export( + WritersidePdfExportRequest( + moduleRoot: fixture.module.path, + projectRoot: fixture.root.path, + instanceId: 'guide', + destinationPath: p.join(fixture.root.path, 'warning.pdf'), + overwrite: false, + ), + ); + + expect( + result.warnings, + contains( + isA() + .having( + (warning) => warning.code, + 'code', + MarkdownPdfWarningCode.writersideResolution, + ) + .having( + (warning) => warning.destination, + 'diagnostic', + 'writerside.variable.unresolved', + ), + ), + ); + }, + ); + test('native exporter failures use Writerside failure codes', () async { final fixture = await _WritersideFixture.create(); addTearDown(fixture.dispose); @@ -134,6 +234,7 @@ void main() { service.export( WritersidePdfExportRequest( moduleRoot: fixture.module.path, + projectRoot: fixture.root.path, instanceId: 'guide', destinationPath: p.join(fixture.root.path, 'unavailable.pdf'), overwrite: false, @@ -255,19 +356,25 @@ Inline math: \$x^2\$. ).writeAsBytes(const [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); final shared = await Directory(p.join(root.path, 'Shared')).create(); await Directory(p.join(shared.path, 'topics')).create(); + await Directory(p.join(shared.path, 'images')).create(); await File(p.join(shared.path, 'writerside.cfg')).writeAsString(''' + '''); await File(p.join(shared.path, 'topics', 'library.topic')).writeAsString('''

    Cross-module include content.

    + Shared image
    '''); + await File( + p.join(shared.path, 'images', 'shared.png'), + ).writeAsBytes(const [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); return _WritersideFixture(root: root, module: module); } diff --git a/test/src/writerside_project_test.dart b/test/src/writerside_project_test.dart index 8ca2908d..df098f53 100644 --- a/test/src/writerside_project_test.dart +++ b/test/src/writerside_project_test.dart @@ -2,8 +2,11 @@ import 'dart:io'; import 'package:busymark/src/workspace/workspace_model.dart'; import 'package:busymark/src/workspace/workspace_service.dart'; +import 'package:busymark/src/core/diagnostic.dart'; +import 'package:busymark/src/markdown/busymark_document.dart'; import 'package:busymark/src/writerside/writerside_document_renderer.dart'; import 'package:busymark/src/writerside/writerside_document_resolver.dart'; +import 'package:busymark/src/writerside/writerside_document_serializer.dart'; import 'package:busymark/src/writerside/writerside_project.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:path/path.dart' as p; @@ -84,6 +87,83 @@ void main() { expect(workspace.writersideModule, isNotNull); }, ); + + test( + 'workspace module and instance selection changes active context', + () async { + final fixture = await _ProjectFixture.create(); + addTearDown(fixture.dispose); + const service = WorkspaceService(); + final workspace = await service.openPath(fixture.path); + + final selected = await service.selectWritersideContext( + workspace, + moduleId: 'shared-docs', + instanceId: 'guide', + ); + + expect(selected.writersideProject?.activeModuleId, 'shared-docs'); + expect(selected.writersideProject?.activeInstanceId, 'guide'); + expect(selected.writersideModule?.config.moduleName, 'shared-docs'); + expect(selected.activeFilePath, endsWith('shared.topic')); + }, + ); + + test('BusyMark processes the same fixture as the official builder', () async { + final root = p.join( + Directory.current.path, + 'test', + 'fixtures', + 'writerside', + 'conformance_project', + ); + final project = await const WritersideProjectService().load(root); + final module = project.activeModule!; + final instance = project.activeInstance!; + final renderedText = StringBuffer(); + final diagnostics = []; + + for (final topic in module.topics) { + expect( + const WritersideDocumentSerializer().serialize(topic.document), + topic.document.source, + ); + final resolved = const WritersideDocumentResolver().resolve( + topic.document, + WritersideResolveContext( + module: module, + topic: topic, + instance: instance, + modulesByOrigin: project.modulesByOrigin, + ), + ); + diagnostics.addAll(resolved.diagnostics); + final rendered = const WritersideDocumentRenderer().toBusyDocument( + resolved.document, + title: resolved.title, + ); + for (final block in _walkBlocks(rendered.blocks)) { + renderedText.writeln(block.plainText); + } + } + + expect( + diagnostics.where( + (diagnostic) => diagnostic.severity == DiagnosticSeverity.error, + ), + isEmpty, + ); + expect(renderedText.toString(), contains('Lossless semantic quote')); + expect(renderedText.toString(), contains('Reusable semantic content')); + expect(renderedText.toString(), contains('BusyMark')); + }); +} + +Iterable _walkBlocks(Iterable blocks) sync* { + for (final block in blocks) { + yield block; + yield* _walkBlocks(block.children); + } } class _ProjectFixture { From ca2639174dd212cdc63b0e37ed778b1fe89ab0d0 Mon Sep 17 00:00:00 2001 From: albert Date: Sun, 30 Aug 2026 20:34:04 -0700 Subject: [PATCH 08/11] Add support for qualified XML attributes and improve Writerside project/module handling --- lib/src/workspace/workspace_service.dart | 92 ++++++++++++++---- lib/src/writerside/writerside_document.dart | 27 ++++++ .../writerside_document_parser.dart | 17 ++++ .../writerside_document_serializer.dart | 61 +++++++++++- lib/src/writerside/writerside_model.dart | 18 ++++ lib/src/writerside/writerside_project.dart | 38 ++++++++ .../conformance_project/topics/features.topic | 4 +- test/src/writerside_document_test.dart | 65 +++++++++++++ test/src/writerside_project_test.dart | 96 +++++++++++++++++++ 9 files changed, 393 insertions(+), 25 deletions(-) diff --git a/lib/src/workspace/workspace_service.dart b/lib/src/workspace/workspace_service.dart index 24756581..cc42aa45 100644 --- a/lib/src/workspace/workspace_service.dart +++ b/lib/src/workspace/workspace_service.dart @@ -1288,19 +1288,12 @@ class WorkspaceService { source: source, topicsRoot: topic!.topicRoot, ); - final resolutionDiagnostics = _writersideResolutionDiagnostics( + return _workspaceWithReparsedWritersideTopic( workspace, module!, + topic, parsed, ); - return workspace.copyWith( - markdown: parsed.markdown, - diagnostics: sortDiagnostics([ - ...module.diagnostics, - ...parsed.diagnostics, - ...resolutionDiagnostics, - ]), - ); } if (topic?.format == WritersideTopicFormat.xml) { final parsed = writersideService.topicParser.parseXml( @@ -1308,18 +1301,12 @@ class WorkspaceService { source: source, topicsRoot: topic!.topicRoot, ); - final resolutionDiagnostics = _writersideResolutionDiagnostics( + return _workspaceWithReparsedWritersideTopic( workspace, module!, + topic, parsed, ); - return workspace.copyWith( - diagnostics: sortDiagnostics([ - ...module.diagnostics, - ...parsed.diagnostics, - ...resolutionDiagnostics, - ]), - ); } return workspace.copyWith(diagnostics: module?.diagnostics); } @@ -1335,6 +1322,77 @@ class WorkspaceService { ); } + Workspace _workspaceWithReparsedWritersideTopic( + Workspace workspace, + WritersideModule module, + WritersideTopic previousTopic, + WritersideTopic parsedTopic, + ) { + final activePath = parsedTopic.filePath; + final updatedModule = module.copyWith( + topics: List.unmodifiable([ + for (final topic in module.topics) + if (p.equals(topic.filePath, activePath)) parsedTopic else topic, + ]), + diagnostics: sortDiagnostics([ + for (final diagnostic in module.diagnostics) + if (!p.equals(diagnostic.filePath, activePath)) diagnostic, + ...parsedTopic.diagnostics, + ]), + ); + final previousProject = workspace.writersideProject; + final updatedProject = previousProject?.withModule(updatedModule); + final indexedWorkspace = workspace.copyWith( + markdown: parsedTopic.markdown, + writersideModule: updatedProject?.activeModule ?? updatedModule, + writersideProject: updatedProject, + ); + final resolutionDiagnostics = _writersideResolutionDiagnostics( + indexedWorkspace, + indexedWorkspace.writersideModule!, + parsedTopic, + ); + final previousResolutionDiagnostics = _writersideResolutionDiagnostics( + workspace, + module, + previousTopic, + ); + final preservedWorkspaceDiagnostics = [ + for (final diagnostic in workspace.diagnostics) + if (!_isProjectDiagnostic(previousProject, diagnostic) && + !p.equals(diagnostic.filePath, activePath) && + !previousResolutionDiagnostics.any( + (previous) => _sameDiagnostic(previous, diagnostic), + )) + diagnostic, + ]; + return indexedWorkspace.copyWith( + diagnostics: sortDiagnostics([ + ...?updatedProject?.diagnostics, + if (updatedProject == null) ...updatedModule.diagnostics, + ...preservedWorkspaceDiagnostics, + ...resolutionDiagnostics, + ]), + ); + } + + bool _isProjectDiagnostic( + WritersideProject? project, + Diagnostic diagnostic, + ) => + project?.diagnostics.any( + (candidate) => identical(candidate, diagnostic), + ) ?? + false; + + bool _sameDiagnostic(Diagnostic first, Diagnostic second) { + return first.code == second.code && + first.severity == second.severity && + p.equals(first.filePath, second.filePath) && + first.sourceSpan?.startOffset == second.sourceSpan?.startOffset && + first.sourceSpan?.endOffset == second.sourceSpan?.endOffset; + } + PreviewDocument? buildPreview(Workspace workspace, String source) { final active = workspace.activeFilePath ?? workspace.markdown?.filePath; if (active == null) { diff --git a/lib/src/writerside/writerside_document.dart b/lib/src/writerside/writerside_document.dart index acd77e88..32efec6b 100644 --- a/lib/src/writerside/writerside_document.dart +++ b/lib/src/writerside/writerside_document.dart @@ -19,6 +19,21 @@ class WritersideSourceProvenance { final String topicPath; } +/// The source spelling of an XML attribute alongside its normalized semantic +/// lookup name. Writerside semantics use [name], while lossless serialization +/// must retain namespace prefixes and original casing from [qualifiedName]. +class WritersideQualifiedAttribute { + const WritersideQualifiedAttribute({ + required this.name, + required this.qualifiedName, + required this.value, + }); + + final String name; + final String qualifiedName; + final String value; +} + class WritersideDocument { const WritersideDocument({ required this.filePath, @@ -141,7 +156,9 @@ class WritersideRawNode extends WritersideDocumentNode { sealed class WritersideElementNode extends WritersideDocumentNode { const WritersideElementNode({ required this.name, + required this.qualifiedName, required this.attributes, + required this.qualifiedAttributes, required this.attributeSpans, required this.children, required super.span, @@ -151,7 +168,9 @@ sealed class WritersideElementNode extends WritersideDocumentNode { }); final String name; + final String qualifiedName; final Map attributes; + final List qualifiedAttributes; final Map attributeSpans; final List children; @@ -181,7 +200,9 @@ class WritersideSemanticElementNode extends WritersideElementNode { const WritersideSemanticElementNode({ required this.kind, required super.name, + required super.qualifiedName, required super.attributes, + required super.qualifiedAttributes, required super.attributeSpans, required super.children, required super.span, @@ -209,7 +230,9 @@ class WritersideSemanticElementNode extends WritersideElementNode { return WritersideSemanticElementNode( kind: kind, name: name, + qualifiedName: qualifiedName, attributes: nextAttributes, + qualifiedAttributes: qualifiedAttributes, attributeSpans: attributeSpans, children: nextChildren, span: span, @@ -229,7 +252,9 @@ class WritersideGenericElementNode extends WritersideElementNode { const WritersideGenericElementNode({ required this.schemaKnown, required super.name, + required super.qualifiedName, required super.attributes, + required super.qualifiedAttributes, required super.attributeSpans, required super.children, required super.span, @@ -255,7 +280,9 @@ class WritersideGenericElementNode extends WritersideElementNode { return WritersideGenericElementNode( schemaKnown: schemaKnown, name: name, + qualifiedName: qualifiedName, attributes: nextAttributes, + qualifiedAttributes: qualifiedAttributes, attributeSpans: attributeSpans, children: nextChildren, span: span, diff --git a/lib/src/writerside/writerside_document_parser.dart b/lib/src/writerside/writerside_document_parser.dart index 9261b008..3000593e 100644 --- a/lib/src/writerside/writerside_document_parser.dart +++ b/lib/src/writerside/writerside_document_parser.dart @@ -108,10 +108,19 @@ class WritersideDocumentParser { final opening = source.substring(localStart, localEnd); final frame = _ElementFrame( name: _localName(event.name), + qualifiedName: event.name, attributes: { for (final attribute in event.attributes) _localName(attribute.name): attribute.value, }, + qualifiedAttributes: [ + for (final attribute in event.attributes) + WritersideQualifiedAttribute( + name: _localName(attribute.name), + qualifiedName: attribute.name, + value: attribute.value, + ), + ], attributeSpans: _attributeSpans( filePath: filePath, fullSource: fullSource, @@ -203,14 +212,18 @@ class WritersideDocumentParser { class _ElementFrame { _ElementFrame({ required this.name, + required this.qualifiedName, required this.attributes, + required this.qualifiedAttributes, required this.attributeSpans, required this.startOffset, required this.openingEndOffset, }); final String name; + final String qualifiedName; final Map attributes; + final List qualifiedAttributes; final Map attributeSpans; final int startOffset; final int openingEndOffset; @@ -236,7 +249,9 @@ class _ElementFrame { return WritersideSemanticElementNode( kind: capability.kind, name: name, + qualifiedName: qualifiedName, attributes: Map.unmodifiable(attributes), + qualifiedAttributes: List.unmodifiable(qualifiedAttributes), attributeSpans: Map.unmodifiable(attributeSpans), children: List.unmodifiable(children), span: span, @@ -246,7 +261,9 @@ class _ElementFrame { return WritersideGenericElementNode( schemaKnown: WritersideSchema.isKnownElement(name), name: name, + qualifiedName: qualifiedName, attributes: Map.unmodifiable(attributes), + qualifiedAttributes: List.unmodifiable(qualifiedAttributes), attributeSpans: Map.unmodifiable(attributeSpans), children: List.unmodifiable(children), span: span, diff --git a/lib/src/writerside/writerside_document_serializer.dart b/lib/src/writerside/writerside_document_serializer.dart index 83c18d35..54d94030 100644 --- a/lib/src/writerside/writerside_document_serializer.dart +++ b/lib/src/writerside/writerside_document_serializer.dart @@ -60,15 +60,54 @@ class WritersideDocumentSerializer { } String _serializeElement(WritersideElementNode element) { - final attributes = element.attributes.entries - .map((entry) => ' ${entry.key}="${_escapeAttribute(entry.value)}"') - .join(); + final attributes = _serializeAttributes(element); if (element.children.isEmpty && RegExp(r'/\s*>$').hasMatch(element.rawSource.trim())) { - return '<${element.name}$attributes/>'; + return '<${element.qualifiedName}$attributes/>'; } final children = element.children.map(_serializeNode).join(); - return '<${element.name}$attributes>$children'; + return '<${element.qualifiedName}$attributes>' + '$children'; + } + + String _serializeAttributes(WritersideElementNode element) { + final originalValues = { + for (final attribute in element.qualifiedAttributes) + attribute.name: attribute.value, + }; + final attributesModified = !_sameStringMap( + element.attributes, + originalValues, + ); + final emitted = {}; + final result = StringBuffer(); + for (final attribute in element.qualifiedAttributes) { + if (!element.attributes.containsKey(attribute.name)) { + continue; + } + final value = attributesModified + ? element.attributes[attribute.name]! + : attribute.value; + result + ..write(' ') + ..write(attribute.qualifiedName) + ..write('="') + ..write(_escapeAttribute(value)) + ..write('"'); + emitted.add(attribute.name); + } + for (final entry in element.attributes.entries) { + if (!emitted.add(entry.key)) { + continue; + } + result + ..write(' ') + ..write(entry.key) + ..write('="') + ..write(_escapeAttribute(entry.value)) + ..write('"'); + } + return result.toString(); } String _escapeText(String value) => value @@ -79,3 +118,15 @@ class WritersideDocumentSerializer { String _escapeAttribute(String value) => _escapeText(value).replaceAll('"', '"'); } + +bool _sameStringMap(Map first, Map second) { + if (first.length != second.length) { + return false; + } + for (final entry in first.entries) { + if (second[entry.key] != entry.value) { + return false; + } + } + return true; +} diff --git a/lib/src/writerside/writerside_model.dart b/lib/src/writerside/writerside_model.dart index b35d312d..474c282c 100644 --- a/lib/src/writerside/writerside_model.dart +++ b/lib/src/writerside/writerside_model.dart @@ -538,6 +538,24 @@ class WritersideModule { final WritersideBuildProfilesConfig? buildProfiles; final WritersideInstanceGroupsConfig? instanceGroups; + WritersideModule copyWith({ + List? topics, + List? diagnostics, + }) { + return WritersideModule( + rootPath: rootPath, + config: config, + instances: instances, + topics: topics ?? this.topics, + variables: variables, + categories: categories, + diagnostics: diagnostics ?? this.diagnostics, + validatedImageDirs: validatedImageDirs, + buildProfiles: buildProfiles, + instanceGroups: instanceGroups, + ); + } + String get effectiveImagesDir => validatedImageDirs.firstOrNull ?? 'images'; Map get topicsByFileName { diff --git a/lib/src/writerside/writerside_project.dart b/lib/src/writerside/writerside_project.dart index fe159bca..1e24ab52 100644 --- a/lib/src/writerside/writerside_project.dart +++ b/lib/src/writerside/writerside_project.dart @@ -570,6 +570,44 @@ class WritersideProject { diagnostics: diagnostics, ); } + + /// Replaces an in-memory module and rebuilds every topic-derived symbol and + /// reference while retaining discovered file/resource symbols. + WritersideProject withModule(WritersideModule module) { + final replaced = modules.any( + (candidate) => p.equals(candidate.rootPath, module.rootPath), + ); + if (!replaced) { + return this; + } + final nextModules = [ + for (final candidate in modules) + if (p.equals(candidate.rootPath, module.rootPath)) + module + else + candidate, + ]; + final nextIndex = WritersideProjectIndex.build( + nextModules, + fileSymbols: index.symbols.where( + (symbol) => + symbol.kind == WritersideSymbolKind.image || + symbol.kind == WritersideSymbolKind.resource || + symbol.kind == WritersideSymbolKind.apiSpecification, + ), + ); + return WritersideProject( + rootPath: rootPath, + modules: List.unmodifiable(nextModules), + activeModuleId: activeModuleId, + activeInstanceId: activeInstanceId, + index: nextIndex, + diagnostics: sortDiagnostics([ + for (final candidate in nextModules) ...candidate.diagnostics, + ...nextIndex.diagnostics, + ]), + ); + } } class WritersideProjectService { diff --git a/test/fixtures/writerside/conformance_project/topics/features.topic b/test/fixtures/writerside/conformance_project/topics/features.topic index 1fc88ee6..9135d25b 100644 --- a/test/fixtures/writerside/conformance_project/topics/features.topic +++ b/test/fixtures/writerside/conformance_project/topics/features.topic @@ -1,7 +1,5 @@ - +

    Use Settings, docs/index.md, , busymark, , and diff --git a/test/src/writerside_document_test.dart b/test/src/writerside_document_test.dart index c42f23ea..a183dd12 100644 --- a/test/src/writerside_document_test.dart +++ b/test/src/writerside_document_test.dart @@ -15,6 +15,7 @@ import 'package:busymark/src/writerside/writerside_schema.dart'; import 'package:busymark/src/workspace/workspace_service.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:path/path.dart' as p; +import 'package:xml/xml.dart'; void main() { test( @@ -111,6 +112,70 @@ void main() { expect(reparsed.rootElement!.plainText, 'After & '); }); + test('modified conformance topic retains qualified namespace names', () async { + final fixture = File( + p.join( + Directory.current.path, + 'test', + 'fixtures', + 'writerside', + 'conformance_project', + 'topics', + 'features.topic', + ), + ); + final expected = await fixture.readAsString(); + final source = expected.replaceFirst( + 'Lossless semantic quote.', + 'Before namespace-safe edit.', + ); + final document = const WritersideDocumentParser().parseXml( + filePath: fixture.path, + source: source, + ); + final root = document.rootElement!; + final quote = root.children.whereType().singleWhere( + (element) => element.name == 'quote', + ); + final quoteText = quote.children.whereType().single; + final changedQuote = quote.copyWith( + children: [quoteText.copyWith(text: 'Lossless semantic quote.')], + ); + final changedRoot = root.copyWith( + children: [ + for (final child in root.children) + if (identical(child, quote)) changedQuote else child, + ], + ); + final changed = document.copyWith( + nodes: [ + for (final node in document.nodes) + if (identical(node, root)) changedRoot else node, + ], + ); + + final serialized = const WritersideDocumentSerializer().serialize(changed); + final parsed = XmlDocument.parse(serialized); + + expect(root.qualifiedName, 'topic'); + expect( + root.qualifiedAttributes.map((attribute) => attribute.qualifiedName), + containsAll(['xmlns:xsi', 'xsi:noNamespaceSchemaLocation']), + ); + expect( + serialized, + contains('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'), + ); + expect( + serialized, + contains( + 'xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"', + ), + ); + expect(parsed.rootElement.name.local, 'topic'); + expect(serialized, expected); + }); + test( 'resolver applies includes, filters, groups, variables, and cycles', () async { diff --git a/test/src/writerside_project_test.dart b/test/src/writerside_project_test.dart index df098f53..998dfabb 100644 --- a/test/src/writerside_project_test.dart +++ b/test/src/writerside_project_test.dart @@ -3,6 +3,8 @@ import 'dart:io'; import 'package:busymark/src/workspace/workspace_model.dart'; import 'package:busymark/src/workspace/workspace_service.dart'; import 'package:busymark/src/core/diagnostic.dart'; +import 'package:busymark/src/editor/source/source_autocomplete.dart'; +import 'package:busymark/src/editor/source/source_document.dart'; import 'package:busymark/src/markdown/busymark_document.dart'; import 'package:busymark/src/writerside/writerside_document_renderer.dart'; import 'package:busymark/src/writerside/writerside_document_resolver.dart'; @@ -109,6 +111,96 @@ void main() { }, ); + test( + 'reparse overlays indexed symbols and preserves unrelated diagnostics', + () async { + final fixture = await _ProjectFixture.create(); + addTearDown(fixture.dispose); + const service = WorkspaceService(); + final workspace = await service.openPath(fixture.path); + final activePath = workspace.activeFilePath!; + final unrelatedPath = p.join( + fixture.path, + 'shared', + 'topics', + 'shared.topic', + ); + + expect( + workspace.diagnostics.where( + (diagnostic) => + diagnostic.code == 'writerside.index.unresolved-reference' && + p.equals(diagnostic.filePath, unrelatedPath), + ), + isNotEmpty, + ); + expect( + workspace.diagnostics.where( + (diagnostic) => + diagnostic.code == + 'writerside.schema.missing-required-attribute' && + p.equals(diagnostic.filePath, activePath), + ), + isNotEmpty, + ); + + final reparsed = await service.reparseActive(workspace, ''' + + +

    Indexed while unsaved.

    +
    +'''); + final project = reparsed.writersideProject!; + final moduleId = project.activeModuleId; + final topicNames = project.index.names( + WritersideSymbolKind.topic, + moduleId: moduleId, + ); + final snippetNames = project.index.names( + WritersideSymbolKind.snippet, + moduleId: moduleId, + ); + final completion = const SourceAutocompleteProvider().suggestions( + document: SourceDocument(fullText: ' suggestion.insertText), + contains('renamed-main'), + ); + expect( + reparsed.diagnostics.where( + (diagnostic) => + diagnostic.code == 'writerside.index.unresolved-reference' && + p.equals(diagnostic.filePath, unrelatedPath), + ), + isNotEmpty, + ); + expect( + reparsed.diagnostics.where( + (diagnostic) => + diagnostic.code == + 'writerside.schema.missing-required-attribute' && + p.equals(diagnostic.filePath, activePath), + ), + isEmpty, + ); + }, + ); + test('BusyMark processes the same fixture as the official builder', () async { final root = p.join( Directory.current.path, @@ -185,6 +277,7 @@ class _ProjectFixture { +

    Missing ID before reparse.

    ''', ); @@ -196,6 +289,9 @@ class _ProjectFixture { topic: ''' Shared module content + + + ''', ); From e91b2de4e9ed95144ddf5e60ddcec9cdbb94669a Mon Sep 17 00:00:00 2001 From: albert Date: Sun, 30 Aug 2026 20:57:00 -0700 Subject: [PATCH 09/11] Introduce `sourceOverrides` to Writerside module and project handling for in-memory source modifications. --- lib/src/workspace/workspace_service.dart | 92 ++++++++++- lib/src/writerside/writerside_model.dart | 7 + .../writerside/writerside_module_service.dart | 64 +++++++- lib/src/writerside/writerside_project.dart | 52 +++++- test/src/writerside_project_test.dart | 155 ++++++++++++++++++ 5 files changed, 360 insertions(+), 10 deletions(-) diff --git a/lib/src/workspace/workspace_service.dart b/lib/src/workspace/workspace_service.dart index cc42aa45..9e252566 100644 --- a/lib/src/workspace/workspace_service.dart +++ b/lib/src/workspace/workspace_service.dart @@ -1308,7 +1308,23 @@ class WorkspaceService { parsed, ); } - return workspace.copyWith(diagnostics: module?.diagnostics); + if (module != null && _isWritersideProjectFile(module, active)) { + final updatedModule = await writersideService.load( + module.rootPath, + options: _useWorkspaceScanOptionsForWriterside ? scanOptions : null, + sourceOverrides: { + ...module.sourceOverrides, + normalizePath(active): source, + }, + ); + return _workspaceWithReparsedWritersideModule( + workspace, + module, + updatedModule, + rediscoverFileSymbols: p.equals(active, module.config.filePath), + ); + } + return workspace; } final markdown = await markdownParser.parseAsync( filePath: active, @@ -1339,6 +1355,10 @@ class WorkspaceService { if (!p.equals(diagnostic.filePath, activePath)) diagnostic, ...parsedTopic.diagnostics, ]), + sourceOverrides: { + ...module.sourceOverrides, + normalizePath(activePath): parsedTopic.document.source, + }, ); final previousProject = workspace.writersideProject; final updatedProject = previousProject?.withModule(updatedModule); @@ -1376,6 +1396,76 @@ class WorkspaceService { ); } + Future _workspaceWithReparsedWritersideModule( + Workspace workspace, + WritersideModule previousModule, + WritersideModule updatedModule, { + required bool rediscoverFileSymbols, + }) async { + final previousProject = workspace.writersideProject; + final updatedProject = previousProject == null + ? null + : await _writersideProjectService.replaceModule( + previousProject, + updatedModule, + rediscoverFileSymbols: rediscoverFileSymbols, + ); + final previousResolutionDiagnostics = [ + for (final topic in previousModule.topics) + ..._writersideResolutionDiagnostics(workspace, previousModule, topic), + ]; + final preservedWorkspaceDiagnostics = [ + for (final diagnostic in workspace.diagnostics) + if (!_isProjectDiagnostic(previousProject, diagnostic) && + !previousModule.diagnostics.any( + (candidate) => identical(candidate, diagnostic), + ) && + !previousResolutionDiagnostics.any( + (previous) => _sameDiagnostic(previous, diagnostic), + )) + diagnostic, + ]; + return workspace.copyWith( + markdown: null, + writersideModule: updatedProject?.activeModule ?? updatedModule, + writersideProject: updatedProject, + diagnostics: sortDiagnostics([ + ...?updatedProject?.diagnostics, + if (updatedProject == null) ...updatedModule.diagnostics, + ...preservedWorkspaceDiagnostics, + ]), + ); + } + + bool _isWritersideProjectFile(WritersideModule module, String filePath) { + final config = module.config; + final candidates = { + config.filePath, + for (final instance in module.instances) instance.sourceTreePath, + for (final instance in config.instances) + _moduleConfiguredPath(module.rootPath, instance.src), + if (config.varsFile case final path?) + _moduleConfiguredPath(module.rootPath, path), + if (config.categoriesFile case final path?) + _moduleConfiguredPath(module.rootPath, path), + if (config.instanceGroupsFile case final path?) + _moduleConfiguredPath(module.rootPath, path), + _moduleConfiguredPath( + module.rootPath, + p.join(config.buildConfigDir, 'buildprofiles.xml'), + ), + }; + return candidates.any((candidate) => p.equals(candidate, filePath)); + } + + String _moduleConfiguredPath(String rootPath, String configuredPath) { + return normalizePath( + p.isAbsolute(configuredPath) + ? configuredPath + : p.join(rootPath, configuredPath), + ); + } + bool _isProjectDiagnostic( WritersideProject? project, Diagnostic diagnostic, diff --git a/lib/src/writerside/writerside_model.dart b/lib/src/writerside/writerside_model.dart index 474c282c..cdd743ac 100644 --- a/lib/src/writerside/writerside_model.dart +++ b/lib/src/writerside/writerside_model.dart @@ -525,6 +525,7 @@ class WritersideModule { required this.validatedImageDirs, this.buildProfiles, this.instanceGroups, + this.sourceOverrides = const {}, }); final String rootPath; @@ -538,9 +539,14 @@ class WritersideModule { final WritersideBuildProfilesConfig? buildProfiles; final WritersideInstanceGroupsConfig? instanceGroups; + /// Unsaved project sources that must win over their on-disk counterparts + /// when the module is recomputed after another project-file edit. + final Map sourceOverrides; + WritersideModule copyWith({ List? topics, List? diagnostics, + Map? sourceOverrides, }) { return WritersideModule( rootPath: rootPath, @@ -553,6 +559,7 @@ class WritersideModule { validatedImageDirs: validatedImageDirs, buildProfiles: buildProfiles, instanceGroups: instanceGroups, + sourceOverrides: sourceOverrides ?? this.sourceOverrides, ); } diff --git a/lib/src/writerside/writerside_module_service.dart b/lib/src/writerside/writerside_module_service.dart index 884ae572..30fe70ef 100644 --- a/lib/src/writerside/writerside_module_service.dart +++ b/lib/src/writerside/writerside_module_service.dart @@ -41,8 +41,13 @@ class WritersideModuleService { Future load( String rootPath, { WorkspaceScanOptions? options, + Map sourceOverrides = const {}, }) async { final effectiveScanOptions = options ?? scanOptions; + final normalizedOverrides = Map.unmodifiable({ + for (final entry in sourceOverrides.entries) + normalizePath(entry.key): entry.value, + }); var root = normalizePath(rootPath); final diagnostics = []; final CanonicalPathAnchor anchor; @@ -59,7 +64,12 @@ class WritersideModuleService { args: {'error': '$error'}, ), ); - return _emptyModule(root, expectedPath, diagnostics); + return _emptyModule( + root, + expectedPath, + diagnostics, + sourceOverrides: normalizedOverrides, + ); } final configCandidate = await _resolveConfigPath(root); if (configCandidate == null) { @@ -70,7 +80,12 @@ class WritersideModuleService { filePath: p.join(root, 'writerside.cfg'), ), ); - return _emptyModule(root, p.join(root, 'writerside.cfg'), diagnostics); + return _emptyModule( + root, + p.join(root, 'writerside.cfg'), + diagnostics, + sourceOverrides: normalizedOverrides, + ); } final AnchoredPathResolution configResolution; try { @@ -88,7 +103,12 @@ class WritersideModuleService { error: error, ), ); - return _emptyModule(root, configCandidate, diagnostics); + return _emptyModule( + root, + configCandidate, + diagnostics, + sourceOverrides: normalizedOverrides, + ); } if (configResolution.type != FileSystemEntityType.file) { diagnostics.add( @@ -98,7 +118,12 @@ class WritersideModuleService { filePath: configResolution.path, ), ); - return _emptyModule(root, configResolution.path, diagnostics); + return _emptyModule( + root, + configResolution.path, + diagnostics, + sourceOverrides: normalizedOverrides, + ); } final configPath = configResolution.path; final configSource = await _readFileForParsing( @@ -106,9 +131,15 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'workspace.file.read-failed', + sourceOverrides: normalizedOverrides, ); if (configSource == null) { - return _emptyModule(root, configPath, diagnostics); + return _emptyModule( + root, + configPath, + diagnostics, + sourceOverrides: normalizedOverrides, + ); } final config = configParser.parse(configPath, configSource); diagnostics.addAll(config.diagnostics); @@ -221,6 +252,7 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'workspace.file.read-failed', + sourceOverrides: normalizedOverrides, ); if (buildProfilesSource != null) { buildProfiles = buildProfilesParser.parse( @@ -238,6 +270,7 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'workspace.file.read-failed', + sourceOverrides: normalizedOverrides, ); if (groupsSource != null) { instanceGroups = instanceGroupsParser.parse( @@ -281,6 +314,7 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'workspace.file.read-failed', + sourceOverrides: normalizedOverrides, ); if (treeSource == null) { continue; @@ -351,6 +385,7 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'writerside.topic.read-failed', + sourceOverrides: normalizedOverrides, ); if (source == null) { unparsedTopics.add(topicFileName); @@ -399,6 +434,7 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'workspace.file.read-failed', + sourceOverrides: normalizedOverrides, ); if (source == null) { validateVariables = false; @@ -419,6 +455,7 @@ class WritersideModuleService { diagnostics, effectiveScanOptions, readFailureCode: 'workspace.file.read-failed', + sourceOverrides: normalizedOverrides, ); if (source == null) { validateCategories = false; @@ -441,6 +478,7 @@ class WritersideModuleService { validatedImageDirs: validatedImageDirs, buildProfiles: buildProfiles, instanceGroups: instanceGroups, + sourceOverrides: normalizedOverrides, ); diagnostics.addAll( _resolve( @@ -462,6 +500,7 @@ class WritersideModuleService { validatedImageDirs: module.validatedImageDirs, buildProfiles: module.buildProfiles, instanceGroups: module.instanceGroups, + sourceOverrides: normalizedOverrides, ); } @@ -490,8 +529,9 @@ class WritersideModuleService { WritersideModule _emptyModule( String root, String configPath, - List diagnostics, - ) { + List diagnostics, { + Map sourceOverrides = const {}, + }) { final emptyConfig = WritersideConfig( filePath: configPath, version: null, @@ -521,6 +561,7 @@ class WritersideModuleService { categories: const [], diagnostics: sortDiagnostics(diagnostics), validatedImageDirs: const ['images'], + sourceOverrides: sourceOverrides, ); } @@ -529,12 +570,21 @@ class WritersideModuleService { List diagnostics, WorkspaceScanOptions options, { required String readFailureCode, + Map sourceOverrides = const {}, }) async { final maxBytes = options.maxParsedFileBytes; if (maxBytes < 0) { diagnostics.add(_fileTooLargeDiagnostic(file.path)); return null; } + final override = sourceOverrides[normalizePath(file.path)]; + if (override != null) { + if (utf8.encode(override).length > maxBytes) { + diagnostics.add(_fileTooLargeDiagnostic(file.path)); + return null; + } + return override; + } try { final bytes = BytesBuilder(copy: false); await for (final chunk in file.openRead(0, maxBytes + 1)) { diff --git a/lib/src/writerside/writerside_project.dart b/lib/src/writerside/writerside_project.dart index 1e24ab52..659d32ed 100644 --- a/lib/src/writerside/writerside_project.dart +++ b/lib/src/writerside/writerside_project.dart @@ -574,6 +574,7 @@ class WritersideProject { /// Replaces an in-memory module and rebuilds every topic-derived symbol and /// reference while retaining discovered file/resource symbols. WritersideProject withModule(WritersideModule module) { + final previousActiveModule = activeModule; final replaced = modules.any( (candidate) => p.equals(candidate.rootPath, module.rootPath), ); @@ -596,11 +597,29 @@ class WritersideProject { symbol.kind == WritersideSymbolKind.apiSpecification, ), ); + final replacedActiveModule = + previousActiveModule != null && + p.equals(previousActiveModule.rootPath, module.rootPath); + final nextActiveModuleId = replacedActiveModule + ? _moduleId(module) + : activeModuleId; + var nextActiveInstanceId = activeInstanceId; + if (replacedActiveModule && + !module.instances.any( + (instance) => instance.id == nextActiveInstanceId, + )) { + nextActiveInstanceId = + module.instances + .where((instance) => !instance.isLibrary) + .firstOrNull + ?.id ?? + module.instances.firstOrNull?.id; + } return WritersideProject( rootPath: rootPath, modules: List.unmodifiable(nextModules), - activeModuleId: activeModuleId, - activeInstanceId: activeInstanceId, + activeModuleId: nextActiveModuleId, + activeInstanceId: nextActiveInstanceId, index: nextIndex, diagnostics: sortDiagnostics([ for (final candidate in nextModules) ...candidate.diagnostics, @@ -683,6 +702,35 @@ class WritersideProjectService { ); } + /// Replaces one already-discovered module. Configuration reparses can ask + /// for file symbols to be rediscovered because image/resource/specification + /// roots may have changed in the unsaved configuration. + Future replaceModule( + WritersideProject project, + WritersideModule module, { + bool rediscoverFileSymbols = false, + }) async { + final replaced = project.withModule(module); + if (!rediscoverFileSymbols || identical(replaced, project)) { + return replaced; + } + final index = WritersideProjectIndex.build( + replaced.modules, + fileSymbols: await _discoverFileSymbols(replaced.modules), + ); + return WritersideProject( + rootPath: replaced.rootPath, + modules: replaced.modules, + activeModuleId: replaced.activeModuleId, + activeInstanceId: replaced.activeInstanceId, + index: index, + diagnostics: sortDiagnostics([ + for (final candidate in replaced.modules) ...candidate.diagnostics, + ...index.diagnostics, + ]), + ); + } + Future> _discoverFileSymbols( List modules, ) async { diff --git a/test/src/writerside_project_test.dart b/test/src/writerside_project_test.dart index 998dfabb..05f210c4 100644 --- a/test/src/writerside_project_test.dart +++ b/test/src/writerside_project_test.dart @@ -201,6 +201,161 @@ void main() { }, ); + test( + 'reparse of variables updates completion and resolution without reopening', + () async { + final fixture = await _ProjectFixture.create(); + addTearDown(fixture.dispose); + final mainRoot = p.join(fixture.path, 'main'); + final configPath = p.join(mainRoot, 'writerside.cfg'); + final variablesPath = p.join(mainRoot, 'v.list'); + final topicPath = p.join(mainRoot, 'topics', 'main.topic'); + await File(configPath).writeAsString(''' + + + + + + + +'''); + await File( + variablesPath, + ).writeAsString(''); + await File(topicPath).writeAsString(''' +

    %live-name%

    +'''); + + const service = WorkspaceService(); + final workspace = await service.openPath(fixture.path); + final scanDiagnostic = Diagnostic( + code: 'workspace.scan.skipped', + severity: DiagnosticSeverity.warning, + filePath: fixture.path, + ); + final variableWorkspace = workspace.copyWith( + activeFilePath: variablesPath, + markdown: null, + diagnostics: [...workspace.diagnostics, scanDiagnostic], + ); + final reparsed = await service.reparseActive( + variableWorkspace, + '', + ); + final project = reparsed.writersideProject!; + final module = reparsed.writersideModule!; + final suggestions = const SourceAutocompleteProvider().suggestions( + document: SourceDocument(fullText: 'live'), + fullOffset: 'live'.length, + context: SourceAutocompleteContext( + projectIndex: project.index, + moduleId: project.activeModuleId, + ), + ); + final topic = module.topicByReference('main.topic')!; + final resolved = const WritersideDocumentResolver().resolve( + topic.document, + WritersideResolveContext( + module: module, + topic: topic, + instance: project.activeInstance, + modulesByOrigin: project.modulesByOrigin, + ), + ); + final rendered = const WritersideDocumentRenderer().toBusyDocument( + resolved.document, + title: resolved.title, + ); + + expect(module.variables.map((variable) => variable.name), ['live-name']); + expect( + project.index.names( + WritersideSymbolKind.variable, + moduleId: project.activeModuleId, + ), + contains('live-name'), + ); + expect( + project.index.names( + WritersideSymbolKind.variable, + moduleId: project.activeModuleId, + ), + isNot(contains('old-name')), + ); + expect( + suggestions + .where( + (suggestion) => + suggestion.kind == SourceAutocompleteKind.variable, + ) + .map((suggestion) => suggestion.insertText), + contains('live-name'), + ); + expect( + resolved.diagnostics.map((diagnostic) => diagnostic.code), + isNot(contains('writerside.variable.unresolved')), + ); + expect( + _walkBlocks(rendered.blocks).map((block) => block.plainText).join('\n'), + contains('Live value'), + ); + expect(reparsed.diagnostics, contains(scanDiagnostic)); + }, + ); + + test('reparse of an instance tree updates active project context', () async { + final fixture = await _ProjectFixture.create(); + addTearDown(fixture.dispose); + const service = WorkspaceService(); + final workspace = await service.openPath(fixture.path); + final treePath = p.join(fixture.path, 'main', 'guide.tree'); + final unrelatedPath = p.join( + fixture.path, + 'shared', + 'topics', + 'shared.topic', + ); + final treeWorkspace = workspace.copyWith( + activeFilePath: treePath, + markdown: null, + ); + + final reparsed = await service.reparseActive(treeWorkspace, ''' + + + +'''); + final project = reparsed.writersideProject!; + + expect(reparsed.writersideModule?.instances.single.id, 'live-guide'); + expect(reparsed.writersideModule?.instances.single.name, 'Live Guide'); + expect(project.activeInstanceId, 'live-guide'); + expect(project.activeInstance?.id, 'live-guide'); + expect( + project.index.names( + WritersideSymbolKind.instance, + moduleId: project.activeModuleId, + ), + contains('live-guide'), + ); + expect( + project.index.names( + WritersideSymbolKind.instance, + moduleId: project.activeModuleId, + ), + isNot(contains('guide')), + ); + expect( + reparsed.diagnostics.where( + (diagnostic) => + diagnostic.code == 'writerside.index.unresolved-reference' && + p.equals(diagnostic.filePath, unrelatedPath), + ), + isNotEmpty, + ); + }); + test('BusyMark processes the same fixture as the official builder', () async { final root = p.join( Directory.current.path, From 51ff9cab4fb640697ea2bfd7bcc81e97d648bfa9 Mon Sep 17 00:00:00 2001 From: albert Date: Mon, 31 Aug 2026 17:07:30 -0700 Subject: [PATCH 10/11] Fix Flutter 3.47 CI verification --- lib/src/app/app_locale.dart | 12 ++++++--- lib/src/workspace/workspace_controller.dart | 2 +- pubspec.lock | 28 ++++++++++----------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/src/app/app_locale.dart b/lib/src/app/app_locale.dart index e883c57b..a310d158 100644 --- a/lib/src/app/app_locale.dart +++ b/lib/src/app/app_locale.dart @@ -70,7 +70,8 @@ String? normalizeBusyMarkLocaleTag(String? tag) { } if (parsed.languageCode == 'zh') { - final isTraditional = parsed.scriptCode == 'Hant' || + final isTraditional = + parsed.scriptCode == 'Hant' || parsed.countryCode == 'TW' || parsed.countryCode == 'HK' || parsed.countryCode == 'MO'; @@ -78,12 +79,15 @@ String? normalizeBusyMarkLocaleTag(String? tag) { (parsed.countryCode != null && parsed.countryCode != 'CN')) { return null; } - return const Locale.fromSubtags(languageCode: 'zh', countryCode: 'CN') - .toLanguageTag(); + return const Locale.fromSubtags( + languageCode: 'zh', + countryCode: 'CN', + ).toLanguageTag(); } for (final option in busyMarkLocaleOptions) { - if (option.locale == parsed || option.locale.languageCode == parsed.languageCode) { + if (option.locale == parsed || + option.locale.languageCode == parsed.languageCode) { return option.tag; } } diff --git a/lib/src/workspace/workspace_controller.dart b/lib/src/workspace/workspace_controller.dart index e59130f5..9ed20143 100644 --- a/lib/src/workspace/workspace_controller.dart +++ b/lib/src/workspace/workspace_controller.dart @@ -1889,7 +1889,7 @@ class WorkspaceController extends Notifier { .where((buffer) => buffer.filePath == path) .firstOrNull; if (existing != null) { - return _activateBuffer( + return await _activateBuffer( selected, existing, documentBuffers: state.documentBuffers, diff --git a/pubspec.lock b/pubspec.lock index 16254ae7..95ba64d3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -409,10 +409,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" url: "https://pub.dev" source: hosted - version: "0.20.2" + version: "0.20.3" io: dependency: transitive description: @@ -497,10 +497,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.20" material_color_utilities: dependency: transitive description: @@ -521,10 +521,10 @@ packages: dependency: transitive description: name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.0" mime: dependency: transitive description: @@ -862,26 +862,26 @@ packages: dependency: transitive description: name: test - sha256: "8d9ceddbab833f180fbefed08afa76d7c03513dfdba87ffcec2718b02bbcbf20" + sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f url: "https://pub.dev" source: hosted - version: "1.31.0" + version: "1.31.1" test_api: dependency: transitive description: name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" test_core: dependency: transitive description: name: test_core - sha256: "1991d4cfe85d5043241acac92962c3977c8d2f2add1ee73130c7b286417d1d34" + sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 url: "https://pub.dev" source: hosted - version: "0.6.17" + version: "0.6.18" typed_data: dependency: transitive description: @@ -998,10 +998,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" vm_service: dependency: transitive description: From cf1375c8e7261133dd2f1a9a8bc1c7ac4e5f3188 Mon Sep 17 00:00:00 2001 From: albert Date: Mon, 31 Aug 2026 17:31:21 -0700 Subject: [PATCH 11/11] Bump version to 0.3.3 --- lib/src/app/app_metadata.dart | 2 +- linux/io.busystack.busymark.metainfo.xml | 1 + pubspec.yaml | 2 +- snap/snapcraft.yaml | 2 +- test/src/visualization_packaging_audit_test.dart | 10 +++++----- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/src/app/app_metadata.dart b/lib/src/app/app_metadata.dart index f47be82c..002a227a 100644 --- a/lib/src/app/app_metadata.dart +++ b/lib/src/app/app_metadata.dart @@ -1 +1 @@ -const busyMarkAppVersion = '0.3.2'; +const busyMarkAppVersion = '0.3.3'; diff --git a/linux/io.busystack.busymark.metainfo.xml b/linux/io.busystack.busymark.metainfo.xml index 03c5b553..08579f31 100644 --- a/linux/io.busystack.busymark.metainfo.xml +++ b/linux/io.busystack.busymark.metainfo.xml @@ -87,6 +87,7 @@ https://github.com/busystack/busymark/issues + diff --git a/pubspec.yaml b/pubspec.yaml index b2b47ff7..532571a7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: busymark description: Local-first Markdown and Writerside-compatible documentation editor. publish_to: 'none' -version: 0.3.2 +version: 0.3.3 environment: sdk: ^3.12.1 diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 969daf74..c850509e 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,6 +1,6 @@ name: busymark title: BusyMark -version: "0.3.2" +version: "0.3.3" summary: Markdown and Writerside documentation editor # Snap Store listing translations are managed outside this Flutter package. # Update store metadata when approved translated listing text is supplied. diff --git a/test/src/visualization_packaging_audit_test.dart b/test/src/visualization_packaging_audit_test.dart index afb2c950..3dce7c9e 100644 --- a/test/src/visualization_packaging_audit_test.dart +++ b/test/src/visualization_packaging_audit_test.dart @@ -11,10 +11,10 @@ void main() { 'linux/io.busystack.busymark.metainfo.xml', ).readAsStringSync(); - expect(pubspec, contains(RegExp(r'^version: 0\.3\.2$', multiLine: true))); + expect(pubspec, contains(RegExp(r'^version: 0\.3\.3$', multiLine: true))); expect( snapcraft, - contains(RegExp(r'^version: "0\.3\.2"$', multiLine: true)), + contains(RegExp(r'^version: "0\.3\.3"$', multiLine: true)), ); expect(snapcraft, contains(RegExp(r'^grade: stable$', multiLine: true))); expect( @@ -39,9 +39,9 @@ void main() { ), ), ); - expect(metainfo, contains('