diff --git a/.github/workflows/flutter-linux.yml b/.github/workflows/flutter-linux.yml
index 575b53dd..c4943ff0 100644
--- a/.github/workflows/flutter-linux.yml
+++ b/.github/workflows/flutter-linux.yml
@@ -31,9 +31,11 @@ jobs:
sudo apt-get update
sudo apt-get install -y \
apparmor-profiles \
+ at-spi2-core \
bubblewrap \
clang \
cmake \
+ dbus-daemon \
fonts-noto-core \
fonts-noto-cjk \
fonts-noto-mono \
@@ -89,6 +91,9 @@ jobs:
- name: Resolve locked dependencies
run: flutter pub get --enforce-lockfile
+ - name: Test production GTK accent lookup and observer
+ run: xvfb-run -a env GDK_BACKEND=x11 bash tools/test_gtk_accent.sh
+
- name: Generate localizations
run: flutter gen-l10n
@@ -121,6 +126,9 @@ jobs:
- name: Build Linux release
run: flutter build linux --release
+ - name: Test production GTK accent channel host and lifecycle
+ run: xvfb-run -a env GDK_BACKEND=x11 bash tools/test_gtk_accent_host.sh
+
- name: Verify release ships catalog and notices without language pairs
run: |
spelling_root="build/linux/x64/release/bundle/share/busymark/spelling"
@@ -230,6 +238,11 @@ jobs:
- name: Check out repository
uses: actions/checkout@v7
+ - name: Prepare clean Snap artifact selection
+ run: |
+ rm -f ./*.snap
+ touch "${RUNNER_TEMP}/busymark-snap-build-start"
+
- name: Build strict Snap from a clean core24 environment (attempt 1)
id: snapcraft
uses: snapcore/action-build@v1
@@ -244,11 +257,27 @@ jobs:
id: snap-artifact
env:
PRIMARY_SNAP: ${{ steps.snapcraft.outputs.snap }}
+ PRIMARY_OUTCOME: ${{ steps.snapcraft.outcome }}
RETRY_SNAP: ${{ steps.snapcraft-retry.outputs.snap }}
+ RETRY_OUTCOME: ${{ steps.snapcraft-retry.outcome }}
run: |
- snap_path="${PRIMARY_SNAP:-$RETRY_SNAP}"
+ if [ "$PRIMARY_OUTCOME" = success ]; then
+ snap_path="$PRIMARY_SNAP"
+ else
+ test "$PRIMARY_OUTCOME" = failure
+ test "$RETRY_OUTCOME" = success
+ snap_path="$RETRY_SNAP"
+ fi
test -n "$snap_path"
test -f "$snap_path"
+ test "$snap_path" -nt "${RUNNER_TEMP}/busymark-snap-build-start"
+ snap_path="$(realpath "$snap_path")"
+ case "$snap_path" in
+ "$GITHUB_WORKSPACE"/*.snap) ;;
+ *) echo "Refusing Snap outside the clean checkout: $snap_path" >&2; exit 1 ;;
+ esac
+ test "$(unsquashfs -cat "$snap_path" snap/snapcraft.yaml | sha256sum | cut -d' ' -f1)" = \
+ "$(sha256sum snap/snapcraft.yaml | cut -d' ' -f1)"
echo "snap=$snap_path" >> "$GITHUB_OUTPUT"
- name: Upload Snap artifact
@@ -277,6 +306,104 @@ jobs:
"$query" "$loader" | grep -q "\"svg\" 6 \"gdk-pixbuf\""
'
+ - name: Verify shared runtimes, packaged tools, media, and resources
+ run: |
+ snap run --shell busymark -c '
+ set -eu
+ inspect_dependencies() {
+ dependency_object="$1"
+ if dependency_output="$(ldd "$dependency_object" 2>&1)"; then
+ :
+ else
+ printf "Dependency inspection failed: %s\n%s\n" \
+ "$dependency_object" "$dependency_output" >&2
+ exit 1
+ fi
+ case "$dependency_output" in
+ *"not found"*)
+ printf "Unresolved dependencies: %s\n%s\n" \
+ "$dependency_object" "$dependency_output" >&2
+ exit 1
+ ;;
+ esac
+ }
+ require_resolution() {
+ required_library="$1"
+ required_path="$2"
+ resolved_path="$(printf "%s\n" "$dependency_output" | \
+ awk -v name="$required_library" \
+ "\$1 == name && \$2 == \"=>\" { print \$3; exit }")"
+ if [ -z "$resolved_path" ] || \
+ ! expected_real="$(readlink -e "$required_path")" || \
+ ! resolved_real="$(readlink -e "$resolved_path")" || \
+ [ "$resolved_real" != "$expected_real" ]; then
+ printf "Unexpected resolution for %s in %s; expected %s\n%s\n" \
+ "$required_library" "$dependency_object" \
+ "$required_path" "$dependency_output" >&2
+ exit 1
+ fi
+ }
+ app_lib="$SNAP/usr/lib/$SNAP_LAUNCHER_ARCH_TRIPLET"
+ inspect_dependencies "$SNAP/busymark"
+ for library in \
+ libhandy-1.so.0 libsecret-1.so.0 libwebkit2gtk-4.1.so.0 \
+ libgtk-3.so.0 libglib-2.0.so.0 libpango-1.0.so.0; do
+ test ! -e "$app_lib/$library"
+ require_resolution "$library" \
+ "$SNAP_DESKTOP_RUNTIME/usr/lib/$SNAP_LAUNCHER_ARCH_TRIPLET/$library"
+ done
+ graphics_lib="$SNAP/gpu-2404/usr/lib/$SNAP_LAUNCHER_ARCH_TRIPLET"
+ for library in \
+ libX11.so.6 libXdamage.so.1 libXext.so.6 libXfixes.so.3 \
+ libxcb-shm.so.0 libxcb.so.1 libwayland-client.so.0 \
+ libwayland-cursor.so.0 libwayland-egl.so.1; do
+ test ! -e "$app_lib/$library"
+ test -e "$graphics_lib/$library"
+ require_resolution "$library" "$graphics_lib/$library"
+ done
+ for helper in WebKitWebProcess WebKitNetworkProcess WebKitGPUProcess; do
+ test -x "$SNAP_DESKTOP_RUNTIME/usr/lib/$SNAP_LAUNCHER_ARCH_TRIPLET/webkit2gtk-4.1/$helper"
+ done
+ test -x "$SNAP/usr/bin/git"
+ test -x "$SNAP/usr/bin/ssh"
+ test -x "$SNAP/usr/bin/setsid"
+ inspect_dependencies "$SNAP/usr/lib/git-core/git-remote-http"
+ require_resolution libcurl-gnutls.so.4 \
+ "$app_lib/libcurl-gnutls.so.4"
+ GIT_EXEC_PATH="$SNAP/usr/lib/git-core" \
+ "$SNAP/usr/bin/git" --exec-path | grep -Fx "$SNAP/usr/lib/git-core"
+ "$SNAP/usr/bin/ssh" -V
+ provider_plugins="$SNAP_DESKTOP_RUNTIME/usr/lib/$SNAP_LAUNCHER_ARCH_TRIPLET/gstreamer-1.0"
+ for plugin in libgstavi.so libgstisomp4.so libgstmatroska.so \
+ libgstogg.so libgsttheora.so libgstvpx.so; do
+ test -f "$provider_plugins/$plugin"
+ inspect_dependencies "$provider_plugins/$plugin"
+ done
+ private_plugins="$SNAP/usr/lib/$SNAP_LAUNCHER_ARCH_TRIPLET/gstreamer-1.0"
+ for plugin in libgstavi.so libgstisomp4.so libgstmatroska.so \
+ libgstogg.so libgsttheora.so libgstvpx.so; do
+ test ! -e "$private_plugins/$plugin"
+ done
+ for plugin in libgstlibav.so libgstvideoparsersbad.so \
+ libgstmpeg2dec.so; do
+ test -f "$private_plugins/$plugin"
+ inspect_dependencies "$private_plugins/$plugin"
+ done
+ test -L "$SNAP/share/busymark/fonts"
+ test "$(readlink "$SNAP/share/busymark/fonts")" = \
+ ../../usr/share/fonts/truetype/noto
+ test -f "$SNAP/share/busymark/fonts/NotoSans-Regular.ttf"
+ test -f "$SNAP/usr/share/doc/fonts-noto-core/copyright"
+ test -f "$SNAP/usr/share/doc/fonts-noto-mono/copyright"
+ for resource_kind in themes icons; do
+ for resource_name in Yaru Yaru-dark; do
+ resource="$SNAP/share/$resource_kind/$resource_name"
+ test -L "$resource"
+ test -e "$resource"
+ done
+ done
+ '
+
- name: Install one strict-Snap dictionary and verify refresh/offline use
run: |
report="$HOME/snap/busymark/common/spelling-release.json"
diff --git a/README.md b/README.md
index f07efe3e..e0cd2a22 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@ for filesystem and Git-integration details.
## Run from source
-BusyMark currently uses Flutter 3.47.4. Install the Linux packages required by
+BusyMark currently uses Flutter 3.47.5. Install the Linux packages required by
Flutter and BusyMark's CMake configuration:
```bash
@@ -89,6 +89,31 @@ PDF, and sandbox verification. Those packages are not required for an ordinary
local build; see [the Linux workflow](.github/workflows/flutter-linux.yml) when
reproducing release verification.
+## Snap release and security builds
+
+Release, security-refresh, and packaging-change artifacts must be built from
+the current `snap/snapcraft.yaml` in a clean Ubuntu 24.04 amd64 Snapcraft build
+environment. The authoritative build sequence is:
+
+```bash
+snapcraft --version
+snapcraft expand-extensions
+snapcraft clean
+snapcraft
+sha256sum ./busymark_*.snap
+```
+
+Inspect and test the exact file emitted by the final `snapcraft` command. A
+failed build must not fall back to an older `.snap`. The `snap` job in
+[the Linux workflow](.github/workflows/flutter-linux.yml) follows this route,
+installs that selected artifact, and runs the strict-confinement smoke checks.
+
+`tools/build_install_snap_local.sh` is intentionally different: it replaces
+the Flutter payload in an installed Snap scaffold for quick development and
+may retain that scaffold's Ubuntu libraries and bundled tools. Even with
+`--no-install`, its output is not a dependency refresh and must not be used for
+a release, a security update, or validation of `stage-packages` changes.
+
## Screenshots
diff --git a/docs/development/writerside-toc-implementation.md b/docs/development/writerside-toc-implementation.md
index bf153be8..a18d5efb 100644
--- a/docs/development/writerside-toc-implementation.md
+++ b/docs/development/writerside-toc-implementation.md
@@ -10,7 +10,7 @@ parity**; retained safety and integration differences are listed below.
The receiving checkout was clean at `c3b53ff` (BusyMark 0.4.2). The named handoff
implementation points matched the receiving source; no archive was copied over it.
-Flutter 3.47.4 and Dart 3.13.2 were used without upgrading dependencies.
+Flutter 3.47.5 and Dart 3.13.2 were used without upgrading dependencies.
User decisions: retain BusyMark AI, Git, clipboard, and file commands **after** the
Writerside actions; use installed Writerside **2026.07.8925** for undocumented
@@ -344,7 +344,7 @@ production controller/services. Only desktop host/theme and persistence services
are isolated. Their framework menu fallback is test-only; these checks do not
replace or claim a new recording of the native GTK evidence above.
-Review verification (Flutter 3.47.4 / Dart 3.13.2):
+Review verification (Flutter 3.47.5 / Dart 3.13.2):
- Full `flutter test --no-pub --concurrency=2 --file-reporter
json:/tmp/busymark-toc-review-full.json`: exit 0, **1,921 passed, 58 optional
@@ -404,7 +404,7 @@ remain explicitly documented adaptations. Full original-Writerside parity is
not claimed. Translations are BusyMark translations, not verified original
JetBrains locale strings.
-Verification for this follow-up (Flutter 3.47.4 / Dart 3.13.2):
+Verification for this follow-up (Flutter 3.47.5 / Dart 3.13.2):
- Full `flutter test --no-pub --concurrency=2 --file-reporter json:/tmp/busymark-title-full.json`:
exit 0, **1,938 passed, 58 optional integration skips**; 17 new regressions.
diff --git a/docs/snap-confinement.md b/docs/snap-confinement.md
index fb70b43d..567e6b6b 100644
--- a/docs/snap-confinement.md
+++ b/docs/snap-confinement.md
@@ -5,10 +5,21 @@ Typst, D2, WebKitGTK, and its other runtime dependencies rather than executing
arbitrary host programs.
The application plugs the standard desktop, display, audio, network, `home`,
-`removable-media`, and `ssh-keys` interfaces. This supports documentation
-projects in ordinary home-directory locations and connected removable media.
-Interfaces that expose sensitive SSH material are controlled by snapd and may
-require an explicit connection on the installed system.
+`removable-media`, `ssh-keys`, and `password-manager-service` interfaces. This
+supports documentation projects in ordinary home-directory locations and
+connected removable media. Interfaces that expose SSH keys or the system
+credential store are not automatically connected. Connect only the access you
+need on the installed system:
+
+```bash
+sudo snap connect busymark:ssh-keys
+sudo snap connect busymark:password-manager-service
+```
+
+BusyMark's AI provider keys use the system credential store. Saving, reading,
+or removing those keys in a strict Snap requires the second connection. It
+grants access to the session's password manager, so make that choice only on a
+trusted installation.
## Git author identity
diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb
index 3ac306b7..e228187e 100644
--- a/lib/l10n/app_ar.arb
+++ b/lib/l10n/app_ar.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "لا توجد اقتراحات إملائية",
"spellingWordCheckFailed": "تعذّر التحقق من هذه الكلمة",
"spellingCheckFailed": "فشل التدقيق الإملائي",
+ "spellingSettingsLoadFailed": "تعذّر تحميل إعدادات التدقيق الإملائي",
+ "retrySpellingSettings": "إعادة محاولة تحميل إعدادات التدقيق الإملائي",
"spellingCheckIncomplete": "التدقيق الإملائي غير مكتمل",
"spellingDictionaryNotInstalled": "القاموس غير مثبّت",
"spellingDictionaryNotInstalledForLanguage": "قاموس {dictionary} غير مثبّت",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "تُشتق معرّفات الموضوعات من أسماء ملفاتها. استخدم «إعادة تسمية ملف الموضوع» في جدول المحتويات أو الشريط الجانبي للملفات.",
"diagnosticWritersideWebFileNameInvalid": "ينشر المثيل \"{instanceId}\" اسم ملف ويب غير صالح \"{webFileName}\" للموضوع \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "ينشر المثيل \"{instanceId}\" الموضوعين \"{firstTopic}\" و\"{secondTopic}\" باسم \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "تم تغيير قاموس التدقيق الإملائي خارجيًا. تم الاحتفاظ بنسخة استرداد."
+ "spellingDictionaryRecoveryConflict": "تم تغيير قاموس التدقيق الإملائي خارجيًا. تم الاحتفاظ بنسخة استرداد.",
+ "windowMinimize": "تصغير",
+ "windowMaximize": "تكبير",
+ "windowRestore": "استعادة"
}
diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb
index d8e66e47..68fa4274 100644
--- a/lib/l10n/app_de.arb
+++ b/lib/l10n/app_de.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Keine Rechtschreibvorschläge",
"spellingWordCheckFailed": "Dieses Wort konnte nicht geprüft werden",
"spellingCheckFailed": "Rechtschreibprüfung fehlgeschlagen",
+ "spellingSettingsLoadFailed": "Rechtschreibeinstellungen konnten nicht geladen werden",
+ "retrySpellingSettings": "Rechtschreibeinstellungen erneut laden",
"spellingCheckIncomplete": "Rechtschreibprüfung ist unvollständig",
"spellingDictionaryNotInstalled": "Wörterbuch nicht installiert",
"spellingDictionaryNotInstalledForLanguage": "Das Wörterbuch {dictionary} ist nicht installiert",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Themen-IDs werden aus ihren Dateinamen abgeleitet. Verwenden Sie „Themendatei umbenennen“ im Inhaltsverzeichnis oder in der Seitenleiste „Dateien“.",
"diagnosticWritersideWebFileNameInvalid": "Instanz \"{instanceId}\" veröffentlicht den ungültigen Webdateinamen \"{webFileName}\" für das Thema \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Instanz \"{instanceId}\" veröffentlicht sowohl \"{firstTopic}\" als auch \"{secondTopic}\" unter \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Das Rechtschreibwörterbuch wurde extern geändert. Eine Wiederherstellungskopie wurde aufbewahrt."
+ "spellingDictionaryRecoveryConflict": "Das Rechtschreibwörterbuch wurde extern geändert. Eine Wiederherstellungskopie wurde aufbewahrt.",
+ "windowMinimize": "Minimieren",
+ "windowMaximize": "Maximieren",
+ "windowRestore": "Wiederherstellen"
}
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 32eb36df..3b6bf08c 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -2768,6 +2768,10 @@
"noSpellingSuggestions": "No spelling suggestions",
"spellingWordCheckFailed": "Could not check this word",
"spellingCheckFailed": "Spelling check failed",
+ "spellingSettingsLoadFailed": "Could not load spelling settings",
+ "@spellingSettingsLoadFailed": {"description": "Settings failure shown when a spelling word store cannot be read."},
+ "retrySpellingSettings": "Retry loading spelling settings",
+ "@retrySpellingSettings": {"description": "Action that deliberately retries failed spelling settings preparation."},
"spellingCheckIncomplete": "Spelling check is incomplete",
"spellingDictionaryNotInstalled": "Dictionary not installed",
"spellingDictionaryNotInstalledForLanguage": "{dictionary} dictionary is not installed",
@@ -2802,5 +2806,11 @@
}
}
},
- "spellingDictionaryRecoveryConflict": "The spelling dictionary changed externally. A recovery copy was preserved."
+ "spellingDictionaryRecoveryConflict": "The spelling dictionary changed externally. A recovery copy was preserved.",
+ "windowMinimize": "Minimize",
+ "@windowMinimize": {"description": "Tooltip and accessibility label for minimizing the application window."},
+ "windowMaximize": "Maximize",
+ "@windowMaximize": {"description": "Tooltip and accessibility label for maximizing the application window."},
+ "windowRestore": "Restore",
+ "@windowRestore": {"description": "Tooltip and accessibility label for restoring a maximized or fullscreen window to its normal size."}
}
diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb
index b93644a7..c45668c2 100644
--- a/lib/l10n/app_es.arb
+++ b/lib/l10n/app_es.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "No hay sugerencias ortográficas",
"spellingWordCheckFailed": "No se pudo comprobar esta palabra",
"spellingCheckFailed": "La revisión ortográfica falló",
+ "spellingSettingsLoadFailed": "No se pudo cargar la configuración ortográfica",
+ "retrySpellingSettings": "Volver a cargar la configuración ortográfica",
"spellingCheckIncomplete": "La revisión ortográfica está incompleta",
"spellingDictionaryNotInstalled": "Diccionario no instalado",
"spellingDictionaryNotInstalledForLanguage": "El diccionario de {dictionary} no está instalado",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Los ID de los temas proceden de sus nombres de archivo. Use «Cambiar nombre del archivo de tema» en la tabla de contenido o en la barra lateral Archivos.",
"diagnosticWritersideWebFileNameInvalid": "La instancia \"{instanceId}\" publica el nombre de archivo web no válido \"{webFileName}\" para el tema \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "La instancia \"{instanceId}\" publica \"{firstTopic}\" y \"{secondTopic}\" como \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "El diccionario ortográfico se modificó externamente. Se conservó una copia de recuperación."
+ "spellingDictionaryRecoveryConflict": "El diccionario ortográfico se modificó externamente. Se conservó una copia de recuperación.",
+ "windowMinimize": "Minimizar",
+ "windowMaximize": "Maximizar",
+ "windowRestore": "Restaurar"
}
diff --git a/lib/l10n/app_et.arb b/lib/l10n/app_et.arb
index f129aa47..a5d62879 100644
--- a/lib/l10n/app_et.arb
+++ b/lib/l10n/app_et.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Õigekirjasoovitusi pole",
"spellingWordCheckFailed": "Seda sõna ei saanud kontrollida",
"spellingCheckFailed": "Õigekirjakontroll nurjus",
+ "spellingSettingsLoadFailed": "Õigekirjakontrolli sätteid ei õnnestunud laadida",
+ "retrySpellingSettings": "Laadi õigekirjakontrolli sätted uuesti",
"spellingCheckIncomplete": "Õigekirjakontroll on pooleli",
"spellingDictionaryNotInstalled": "Sõnastik pole installitud",
"spellingDictionaryNotInstalledForLanguage": "{dictionary} sõnastik pole installitud",
@@ -3834,5 +3836,8 @@
"renameTopicFileInstead": "Teema ID-d tuletatakse failinimedest. Kasuta sisukorras või failide külgribal käsku „Nimeta teemafail ümber“.",
"diagnosticWritersideWebFileNameInvalid": "Eksemplar \"{instanceId}\" avaldab teema \"{topic}\" jaoks sobimatu veebifailinime \"{webFileName}\".",
"diagnosticWritersideWebFileNameCollision": "Eksemplar \"{instanceId}\" avaldab nii \"{firstTopic}\" kui ka \"{secondTopic}\" nimega \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Õigekirjasõnastikku muudeti väliselt. Taastekoopia säilitati."
+ "spellingDictionaryRecoveryConflict": "Õigekirjasõnastikku muudeti väliselt. Taastekoopia säilitati.",
+ "windowMinimize": "Minimeeri",
+ "windowMaximize": "Maksimeeri",
+ "windowRestore": "Taasta"
}
diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb
index a324bdfc..942b4b97 100644
--- a/lib/l10n/app_fa.arb
+++ b/lib/l10n/app_fa.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "پیشنهاد املایی وجود ندارد",
"spellingWordCheckFailed": "بررسی این واژه ممکن نشد",
"spellingCheckFailed": "بررسی املا ناموفق بود",
+ "spellingSettingsLoadFailed": "تنظیمات بررسی املا بارگیری نشد",
+ "retrySpellingSettings": "بارگیری دوبارهٔ تنظیمات بررسی املا",
"spellingCheckIncomplete": "بررسی املا کامل نیست",
"spellingDictionaryNotInstalled": "واژهنامه نصب نشده است",
"spellingDictionaryNotInstalledForLanguage": "واژهنامهٔ {dictionary} نصب نشده است",
@@ -3416,5 +3418,8 @@
"renameTopicFileInstead": "شناسههای موضوع از نام فایلهایشان گرفته میشوند. از «تغییر نام فایل موضوع» در فهرست مطالب یا نوار کناری فایلها استفاده کنید.",
"diagnosticWritersideWebFileNameInvalid": "نمونهٔ \"{instanceId}\" نام فایل وب نامعتبر \"{webFileName}\" را برای موضوع \"{topic}\" منتشر میکند.",
"diagnosticWritersideWebFileNameCollision": "نمونهٔ \"{instanceId}\" هر دو موضوع \"{firstTopic}\" و \"{secondTopic}\" را با نام \"{webFileName}\" منتشر میکند.",
- "spellingDictionaryRecoveryConflict": "فرهنگ لغت املایی بهصورت خارجی تغییر کرد. یک نسخهٔ بازیابی حفظ شد."
+ "spellingDictionaryRecoveryConflict": "فرهنگ لغت املایی بهصورت خارجی تغییر کرد. یک نسخهٔ بازیابی حفظ شد.",
+ "windowMinimize": "کوچک کردن",
+ "windowMaximize": "بزرگ کردن",
+ "windowRestore": "بازیابی"
}
diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb
index ac279995..a762505a 100644
--- a/lib/l10n/app_fr.arb
+++ b/lib/l10n/app_fr.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Aucune suggestion orthographique",
"spellingWordCheckFailed": "Impossible de vérifier ce mot",
"spellingCheckFailed": "Échec de la vérification orthographique",
+ "spellingSettingsLoadFailed": "Impossible de charger les paramètres de correction orthographique",
+ "retrySpellingSettings": "Réessayer de charger les paramètres de correction orthographique",
"spellingCheckIncomplete": "La vérification orthographique est incomplète",
"spellingDictionaryNotInstalled": "Dictionnaire non installé",
"spellingDictionaryNotInstalledForLanguage": "Le dictionnaire {dictionary} n’est pas installé",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Les ID de sujet proviennent de leur nom de fichier. Utilisez « Renommer le fichier de sujet » dans la table des matières ou la barre latérale Fichiers.",
"diagnosticWritersideWebFileNameInvalid": "L’instance \"{instanceId}\" publie le nom de fichier web non valide \"{webFileName}\" pour le sujet \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "L’instance \"{instanceId}\" publie \"{firstTopic}\" et \"{secondTopic}\" sous le nom \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Le dictionnaire orthographique a été modifié en externe. Une copie de récupération a été conservée."
+ "spellingDictionaryRecoveryConflict": "Le dictionnaire orthographique a été modifié en externe. Une copie de récupération a été conservée.",
+ "windowMinimize": "Réduire",
+ "windowMaximize": "Agrandir",
+ "windowRestore": "Restaurer"
}
diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb
index 3490fb0a..df43a635 100644
--- a/lib/l10n/app_hi.arb
+++ b/lib/l10n/app_hi.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "कोई वर्तनी सुझाव नहीं",
"spellingWordCheckFailed": "इस शब्द की जाँच नहीं हो सकी",
"spellingCheckFailed": "वर्तनी जाँच विफल रही",
+ "spellingSettingsLoadFailed": "वर्तनी जाँच सेटिंग लोड नहीं हो सकीं",
+ "retrySpellingSettings": "वर्तनी जाँच सेटिंग फिर से लोड करें",
"spellingCheckIncomplete": "वर्तनी जाँच अधूरी है",
"spellingDictionaryNotInstalled": "शब्दकोश इंस्टॉल नहीं है",
"spellingDictionaryNotInstalledForLanguage": "{dictionary} शब्दकोश इंस्टॉल नहीं है",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "विषय ID उनके फ़ाइल नामों से बनते हैं। विषय-सूची या फ़ाइलें साइडबार में ‘विषय फ़ाइल का नाम बदलें’ का उपयोग करें।",
"diagnosticWritersideWebFileNameInvalid": "इंस्टेंस \"{instanceId}\" विषय \"{topic}\" के लिए अमान्य वेब फ़ाइल नाम \"{webFileName}\" प्रकाशित करता है।",
"diagnosticWritersideWebFileNameCollision": "इंस्टेंस \"{instanceId}\" \"{firstTopic}\" और \"{secondTopic}\" दोनों को \"{webFileName}\" के रूप में प्रकाशित करता है।",
- "spellingDictionaryRecoveryConflict": "वर्तनी शब्दकोश को बाहरी रूप से बदला गया। पुनर्प्राप्ति प्रति सुरक्षित रखी गई।"
+ "spellingDictionaryRecoveryConflict": "वर्तनी शब्दकोश को बाहरी रूप से बदला गया। पुनर्प्राप्ति प्रति सुरक्षित रखी गई।",
+ "windowMinimize": "छोटा करें",
+ "windowMaximize": "अधिकतम करें",
+ "windowRestore": "पुनर्स्थापित करें"
}
diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb
index e512d425..0c5de50d 100644
--- a/lib/l10n/app_id.arb
+++ b/lib/l10n/app_id.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Tidak ada saran ejaan",
"spellingWordCheckFailed": "Kata ini tidak dapat diperiksa",
"spellingCheckFailed": "Pemeriksaan ejaan gagal",
+ "spellingSettingsLoadFailed": "Pengaturan pemeriksaan ejaan tidak dapat dimuat",
+ "retrySpellingSettings": "Coba muat ulang pengaturan pemeriksaan ejaan",
"spellingCheckIncomplete": "Pemeriksaan ejaan belum lengkap",
"spellingDictionaryNotInstalled": "Kamus belum terpasang",
"spellingDictionaryNotInstalledForLanguage": "Kamus {dictionary} belum terpasang",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "ID topik berasal dari nama filenya. Gunakan Ganti Nama File Topik di daftar isi atau bilah samping File.",
"diagnosticWritersideWebFileNameInvalid": "Instans \"{instanceId}\" menerbitkan nama file web tidak valid \"{webFileName}\" untuk topik \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Instans \"{instanceId}\" menerbitkan \"{firstTopic}\" dan \"{secondTopic}\" sebagai \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Kamus ejaan diubah secara eksternal. Salinan pemulihan telah disimpan."
+ "spellingDictionaryRecoveryConflict": "Kamus ejaan diubah secara eksternal. Salinan pemulihan telah disimpan.",
+ "windowMinimize": "Minimalkan",
+ "windowMaximize": "Maksimalkan",
+ "windowRestore": "Pulihkan"
}
diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb
index 1dc0d3b0..510e6b53 100644
--- a/lib/l10n/app_it.arb
+++ b/lib/l10n/app_it.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Nessun suggerimento ortografico",
"spellingWordCheckFailed": "Impossibile controllare questa parola",
"spellingCheckFailed": "Controllo ortografico non riuscito",
+ "spellingSettingsLoadFailed": "Impossibile caricare le impostazioni di controllo ortografico",
+ "retrySpellingSettings": "Riprova a caricare le impostazioni di controllo ortografico",
"spellingCheckIncomplete": "Il controllo ortografico è incompleto",
"spellingDictionaryNotInstalled": "Dizionario non installato",
"spellingDictionaryNotInstalledForLanguage": "Il dizionario {dictionary} non è installato",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Gli ID degli argomenti derivano dai nomi dei file. Usa Rinomina file argomento nel sommario o nella barra laterale File.",
"diagnosticWritersideWebFileNameInvalid": "L’istanza \"{instanceId}\" pubblica il nome file web non valido \"{webFileName}\" per l’argomento \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "L’istanza \"{instanceId}\" pubblica sia \"{firstTopic}\" sia \"{secondTopic}\" come \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Il dizionario ortografico è stato modificato esternamente. È stata conservata una copia di ripristino."
+ "spellingDictionaryRecoveryConflict": "Il dizionario ortografico è stato modificato esternamente. È stata conservata una copia di ripristino.",
+ "windowMinimize": "Riduci",
+ "windowMaximize": "Ingrandisci",
+ "windowRestore": "Ripristina"
}
diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb
index 2902a604..16e412cd 100644
--- a/lib/l10n/app_ja.arb
+++ b/lib/l10n/app_ja.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "スペル候補はありません",
"spellingWordCheckFailed": "この単語を確認できませんでした",
"spellingCheckFailed": "スペルチェックに失敗しました",
+ "spellingSettingsLoadFailed": "スペルチェックの設定を読み込めませんでした",
+ "retrySpellingSettings": "スペルチェックの設定を再読み込み",
"spellingCheckIncomplete": "スペルチェックが完了していません",
"spellingDictionaryNotInstalled": "辞書がインストールされていません",
"spellingDictionaryNotInstalledForLanguage": "{dictionary} の辞書がインストールされていません",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "トピック ID はファイル名から生成されます。目次またはファイルサイドバーの「トピックファイルの名前を変更」を使用してください。",
"diagnosticWritersideWebFileNameInvalid": "インスタンス \"{instanceId}\" はトピック \"{topic}\" に無効な Web ファイル名 \"{webFileName}\" を使用しています。",
"diagnosticWritersideWebFileNameCollision": "インスタンス \"{instanceId}\" は \"{firstTopic}\" と \"{secondTopic}\" の両方を \"{webFileName}\" として公開します。",
- "spellingDictionaryRecoveryConflict": "スペルチェック辞書が外部で変更されました。復旧用コピーを保持しました。"
+ "spellingDictionaryRecoveryConflict": "スペルチェック辞書が外部で変更されました。復旧用コピーを保持しました。",
+ "windowMinimize": "最小化",
+ "windowMaximize": "最大化",
+ "windowRestore": "元に戻す"
}
diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb
index bc9f4ada..d7a6c25e 100644
--- a/lib/l10n/app_ko.arb
+++ b/lib/l10n/app_ko.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "맞춤법 제안이 없습니다",
"spellingWordCheckFailed": "이 단어를 확인할 수 없습니다",
"spellingCheckFailed": "맞춤법 검사에 실패했습니다",
+ "spellingSettingsLoadFailed": "맞춤법 검사 설정을 불러올 수 없습니다",
+ "retrySpellingSettings": "맞춤법 검사 설정 다시 불러오기",
"spellingCheckIncomplete": "맞춤법 검사가 완료되지 않았습니다",
"spellingDictionaryNotInstalled": "사전이 설치되지 않음",
"spellingDictionaryNotInstalledForLanguage": "{dictionary} 사전이 설치되지 않았습니다",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "토픽 ID는 파일 이름에서 생성됩니다. 목차 또는 파일 사이드바에서 토픽 파일 이름 바꾸기를 사용하세요.",
"diagnosticWritersideWebFileNameInvalid": "인스턴스 \"{instanceId}\"에서 토픽 \"{topic}\"의 웹 파일 이름 \"{webFileName}\"이 올바르지 않습니다.",
"diagnosticWritersideWebFileNameCollision": "인스턴스 \"{instanceId}\"에서 \"{firstTopic}\"과 \"{secondTopic}\"이 모두 \"{webFileName}\"으로 게시됩니다.",
- "spellingDictionaryRecoveryConflict": "맞춤법 사전이 외부에서 변경되었습니다. 복구 사본을 보존했습니다."
+ "spellingDictionaryRecoveryConflict": "맞춤법 사전이 외부에서 변경되었습니다. 복구 사본을 보존했습니다.",
+ "windowMinimize": "최소화",
+ "windowMaximize": "최대화",
+ "windowRestore": "복원"
}
diff --git a/lib/l10n/app_nb.arb b/lib/l10n/app_nb.arb
index b805ea54..c62892c6 100644
--- a/lib/l10n/app_nb.arb
+++ b/lib/l10n/app_nb.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Ingen staveforslag",
"spellingWordCheckFailed": "Kunne ikke kontrollere dette ordet",
"spellingCheckFailed": "Stavekontrollen mislyktes",
+ "spellingSettingsLoadFailed": "Kunne ikke laste inn innstillinger for stavekontroll",
+ "retrySpellingSettings": "Prøv å laste inn innstillinger for stavekontroll på nytt",
"spellingCheckIncomplete": "Stavekontrollen er ufullstendig",
"spellingDictionaryNotInstalled": "Ordliste er ikke installert",
"spellingDictionaryNotInstalledForLanguage": "Ordlisten for {dictionary} er ikke installert",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Emne-ID-er kommer fra filnavnene. Bruk Gi nytt navn til emnefil i innholdsfortegnelsen eller sidepanelet Filer.",
"diagnosticWritersideWebFileNameInvalid": "Instansen \"{instanceId}\" publiserer det ugyldige nettfilnavnet \"{webFileName}\" for emnet \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Instansen \"{instanceId}\" publiserer både \"{firstTopic}\" og \"{secondTopic}\" som \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Staveordboken ble endret eksternt. En gjenopprettingskopi ble bevart."
+ "spellingDictionaryRecoveryConflict": "Staveordboken ble endret eksternt. En gjenopprettingskopi ble bevart.",
+ "windowMinimize": "Minimer",
+ "windowMaximize": "Maksimer",
+ "windowRestore": "Gjenopprett"
}
diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb
index 88ea5ddc..34d32ec0 100644
--- a/lib/l10n/app_nl.arb
+++ b/lib/l10n/app_nl.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Geen spellingsuggesties",
"spellingWordCheckFailed": "Dit woord kon niet worden gecontroleerd",
"spellingCheckFailed": "Spellingcontrole mislukt",
+ "spellingSettingsLoadFailed": "Instellingen voor spellingcontrole konden niet worden geladen",
+ "retrySpellingSettings": "Instellingen voor spellingcontrole opnieuw laden",
"spellingCheckIncomplete": "De spellingcontrole is onvolledig",
"spellingDictionaryNotInstalled": "Woordenboek niet geïnstalleerd",
"spellingDictionaryNotInstalledForLanguage": "Het woordenboek voor {dictionary} is niet geïnstalleerd",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "Onderwerp-ID's zijn afgeleid van de bestandsnamen. Gebruik Onderwerpbestand hernoemen in de inhoudsopgave of de zijbalk Bestanden.",
"diagnosticWritersideWebFileNameInvalid": "Instantie \"{instanceId}\" publiceert de ongeldige webbestandsnaam \"{webFileName}\" voor onderwerp \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Instantie \"{instanceId}\" publiceert zowel \"{firstTopic}\" als \"{secondTopic}\" als \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Het spellingwoordenboek is extern gewijzigd. Er is een herstelkopie bewaard."
+ "spellingDictionaryRecoveryConflict": "Het spellingwoordenboek is extern gewijzigd. Er is een herstelkopie bewaard.",
+ "windowMinimize": "Minimaliseren",
+ "windowMaximize": "Maximaliseren",
+ "windowRestore": "Herstellen"
}
diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb
index e76da42e..b26ec680 100644
--- a/lib/l10n/app_pl.arb
+++ b/lib/l10n/app_pl.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Brak sugestii pisowni",
"spellingWordCheckFailed": "Nie można sprawdzić tego słowa",
"spellingCheckFailed": "Sprawdzanie pisowni nie powiodło się",
+ "spellingSettingsLoadFailed": "Nie można wczytać ustawień sprawdzania pisowni",
+ "retrySpellingSettings": "Ponów wczytywanie ustawień sprawdzania pisowni",
"spellingCheckIncomplete": "Sprawdzanie pisowni jest niepełne",
"spellingDictionaryNotInstalled": "Słownik nie jest zainstalowany",
"spellingDictionaryNotInstalledForLanguage": "Słownik {dictionary} nie jest zainstalowany",
@@ -3400,5 +3402,8 @@
"renameTopicFileInstead": "Identyfikatory tematów pochodzą z nazw ich plików. Użyj polecenia Zmień nazwę pliku tematu w spisie treści lub na pasku bocznym Pliki.",
"diagnosticWritersideWebFileNameInvalid": "Instancja \"{instanceId}\" publikuje nieprawidłową nazwę pliku internetowego \"{webFileName}\" dla tematu \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Instancja \"{instanceId}\" publikuje zarówno \"{firstTopic}\", jak i \"{secondTopic}\" jako \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Słownik pisowni został zmieniony zewnętrznie. Zachowano kopię odzyskiwania."
+ "spellingDictionaryRecoveryConflict": "Słownik pisowni został zmieniony zewnętrznie. Zachowano kopię odzyskiwania.",
+ "windowMinimize": "Minimalizuj",
+ "windowMaximize": "Maksymalizuj",
+ "windowRestore": "Przywróć"
}
diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb
index 0f24d460..e3fde3e5 100644
--- a/lib/l10n/app_pt.arb
+++ b/lib/l10n/app_pt.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Sem sugestões ortográficas",
"spellingWordCheckFailed": "Não foi possível verificar esta palavra",
"spellingCheckFailed": "A verificação ortográfica falhou",
+ "spellingSettingsLoadFailed": "Não foi possível carregar as definições de verificação ortográfica",
+ "retrySpellingSettings": "Tentar carregar novamente as definições de verificação ortográfica",
"spellingCheckIncomplete": "A verificação ortográfica está incompleta",
"spellingDictionaryNotInstalled": "Dicionário não instalado",
"spellingDictionaryNotInstalledForLanguage": "O dicionário de {dictionary} não está instalado",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Os IDs dos tópicos provêm dos nomes dos ficheiros. Utilize Mudar o nome do ficheiro de tópico no índice ou na barra lateral Ficheiros.",
"diagnosticWritersideWebFileNameInvalid": "A instância \"{instanceId}\" publica o nome de ficheiro Web inválido \"{webFileName}\" para o tópico \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "A instância \"{instanceId}\" publica \"{firstTopic}\" e \"{secondTopic}\" como \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "O dicionário ortográfico foi alterado externamente. Foi preservada uma cópia de recuperação."
+ "spellingDictionaryRecoveryConflict": "O dicionário ortográfico foi alterado externamente. Foi preservada uma cópia de recuperação.",
+ "windowMinimize": "Minimizar",
+ "windowMaximize": "Maximizar",
+ "windowRestore": "Restaurar"
}
diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb
index b745d481..0cf716a9 100644
--- a/lib/l10n/app_pt_BR.arb
+++ b/lib/l10n/app_pt_BR.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Nenhuma sugestão ortográfica",
"spellingWordCheckFailed": "Não foi possível verificar esta palavra",
"spellingCheckFailed": "A verificação ortográfica falhou",
+ "spellingSettingsLoadFailed": "Não foi possível carregar as configurações de verificação ortográfica",
+ "retrySpellingSettings": "Tentar carregar novamente as configurações de verificação ortográfica",
"spellingCheckIncomplete": "A verificação ortográfica está incompleta",
"spellingDictionaryNotInstalled": "Dicionário não instalado",
"spellingDictionaryNotInstalledForLanguage": "O dicionário de {dictionary} não está instalado",
@@ -3374,5 +3376,8 @@
"renameTopicFileInstead": "Os IDs dos tópicos vêm dos nomes dos arquivos. Use Renomear arquivo do tópico no sumário ou na barra lateral Arquivos.",
"diagnosticWritersideWebFileNameInvalid": "A instância \"{instanceId}\" publica o nome de arquivo da Web inválido \"{webFileName}\" para o tópico \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "A instância \"{instanceId}\" publica \"{firstTopic}\" e \"{secondTopic}\" como \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "O dicionário ortográfico foi alterado externamente. Uma cópia de recuperação foi preservada."
+ "spellingDictionaryRecoveryConflict": "O dicionário ortográfico foi alterado externamente. Uma cópia de recuperação foi preservada.",
+ "windowMinimize": "Minimizar",
+ "windowMaximize": "Maximizar",
+ "windowRestore": "Restaurar"
}
diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb
index fc0020b9..66a76827 100644
--- a/lib/l10n/app_ru.arb
+++ b/lib/l10n/app_ru.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Нет вариантов исправления",
"spellingWordCheckFailed": "Не удалось проверить это слово",
"spellingCheckFailed": "Не удалось проверить правописание",
+ "spellingSettingsLoadFailed": "Не удалось загрузить настройки проверки орфографии",
+ "retrySpellingSettings": "Повторить загрузку настроек проверки орфографии",
"spellingCheckIncomplete": "Проверка правописания не завершена",
"spellingDictionaryNotInstalled": "Словарь не установлен",
"spellingDictionaryNotInstalledForLanguage": "Словарь «{dictionary}» не установлен",
@@ -3400,5 +3402,8 @@
"renameTopicFileInstead": "ID тем определяются именами их файлов. Используйте «Переименовать файл темы» в оглавлении или на боковой панели «Файлы».",
"diagnosticWritersideWebFileNameInvalid": "Экземпляр \"{instanceId}\" публикует недопустимое имя веб-файла \"{webFileName}\" для темы \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Экземпляр \"{instanceId}\" публикует темы \"{firstTopic}\" и \"{secondTopic}\" под одним именем \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Орфографический словарь был изменён извне. Резервная копия для восстановления сохранена."
+ "spellingDictionaryRecoveryConflict": "Орфографический словарь был изменён извне. Резервная копия для восстановления сохранена.",
+ "windowMinimize": "Свернуть",
+ "windowMaximize": "Развернуть",
+ "windowRestore": "Восстановить"
}
diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb
index 926e572c..ebb10c7c 100644
--- a/lib/l10n/app_tr.arb
+++ b/lib/l10n/app_tr.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Yazım önerisi yok",
"spellingWordCheckFailed": "Bu sözcük denetlenemedi",
"spellingCheckFailed": "Yazım denetimi başarısız oldu",
+ "spellingSettingsLoadFailed": "Yazım denetimi ayarları yüklenemedi",
+ "retrySpellingSettings": "Yazım denetimi ayarlarını yeniden yükle",
"spellingCheckIncomplete": "Yazım denetimi tamamlanmadı",
"spellingDictionaryNotInstalled": "Sözlük yüklü değil",
"spellingDictionaryNotInstalledForLanguage": "{dictionary} sözlüğü yüklü değil",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "Konu kimlikleri dosya adlarından gelir. İçindekiler tablosunda veya Dosyalar kenar çubuğunda Konu Dosyasını Yeniden Adlandır'ı kullanın.",
"diagnosticWritersideWebFileNameInvalid": "\"{instanceId}\" örneği, \"{topic}\" konusu için geçersiz \"{webFileName}\" web dosyası adını yayımlıyor.",
"diagnosticWritersideWebFileNameCollision": "\"{instanceId}\" örneği hem \"{firstTopic}\" hem de \"{secondTopic}\" konusunu \"{webFileName}\" olarak yayımlıyor.",
- "spellingDictionaryRecoveryConflict": "Yazım sözlüğü harici olarak değiştirildi. Bir kurtarma kopyası korundu."
+ "spellingDictionaryRecoveryConflict": "Yazım sözlüğü harici olarak değiştirildi. Bir kurtarma kopyası korundu.",
+ "windowMinimize": "Simge durumuna küçült",
+ "windowMaximize": "Ekranı kapla",
+ "windowRestore": "Geri yükle"
}
diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb
index f1a8f944..e7911df4 100644
--- a/lib/l10n/app_uk.arb
+++ b/lib/l10n/app_uk.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Немає варіантів виправлення",
"spellingWordCheckFailed": "Не вдалося перевірити це слово",
"spellingCheckFailed": "Не вдалося перевірити правопис",
+ "spellingSettingsLoadFailed": "Не вдалося завантажити налаштування перевірки правопису",
+ "retrySpellingSettings": "Повторити завантаження налаштувань перевірки правопису",
"spellingCheckIncomplete": "Перевірку правопису не завершено",
"spellingDictionaryNotInstalled": "Словник не встановлено",
"spellingDictionaryNotInstalledForLanguage": "Словник «{dictionary}» не встановлено",
@@ -3400,5 +3402,8 @@
"renameTopicFileInstead": "ID тем визначаються іменами їхніх файлів. Скористайтеся командою «Перейменувати файл теми» у змісті або на бічній панелі «Файли».",
"diagnosticWritersideWebFileNameInvalid": "Екземпляр \"{instanceId}\" публікує неприпустиме ім’я вебфайлу \"{webFileName}\" для теми \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Екземпляр \"{instanceId}\" публікує теми \"{firstTopic}\" і \"{secondTopic}\" під одним іменем \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Орфографічний словник було змінено ззовні. Копію для відновлення збережено."
+ "spellingDictionaryRecoveryConflict": "Орфографічний словник було змінено ззовні. Копію для відновлення збережено.",
+ "windowMinimize": "Згорнути",
+ "windowMaximize": "Розгорнути",
+ "windowRestore": "Відновити"
}
diff --git a/lib/l10n/app_vi.arb b/lib/l10n/app_vi.arb
index b125a60f..2b1a081c 100644
--- a/lib/l10n/app_vi.arb
+++ b/lib/l10n/app_vi.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "Không có đề xuất chính tả",
"spellingWordCheckFailed": "Không thể kiểm tra từ này",
"spellingCheckFailed": "Kiểm tra chính tả thất bại",
+ "spellingSettingsLoadFailed": "Không thể tải cài đặt kiểm tra chính tả",
+ "retrySpellingSettings": "Thử tải lại cài đặt kiểm tra chính tả",
"spellingCheckIncomplete": "Kiểm tra chính tả chưa hoàn tất",
"spellingDictionaryNotInstalled": "Từ điển chưa được cài đặt",
"spellingDictionaryNotInstalledForLanguage": "Từ điển {dictionary} chưa được cài đặt",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "ID chủ đề được tạo từ tên tệp. Hãy dùng Đổi tên tệp chủ đề trong mục lục hoặc thanh bên Tệp.",
"diagnosticWritersideWebFileNameInvalid": "Phiên bản \"{instanceId}\" xuất bản tên tệp web không hợp lệ \"{webFileName}\" cho chủ đề \"{topic}\".",
"diagnosticWritersideWebFileNameCollision": "Phiên bản \"{instanceId}\" xuất bản cả \"{firstTopic}\" và \"{secondTopic}\" dưới tên \"{webFileName}\".",
- "spellingDictionaryRecoveryConflict": "Từ điển chính tả đã được thay đổi từ bên ngoài. Một bản sao khôi phục đã được giữ lại."
+ "spellingDictionaryRecoveryConflict": "Từ điển chính tả đã được thay đổi từ bên ngoài. Một bản sao khôi phục đã được giữ lại.",
+ "windowMinimize": "Thu nhỏ",
+ "windowMaximize": "Phóng to",
+ "windowRestore": "Khôi phục"
}
diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb
index 208f9870..23411f24 100644
--- a/lib/l10n/app_zh.arb
+++ b/lib/l10n/app_zh.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "没有拼写建议",
"spellingWordCheckFailed": "无法检查此单词",
"spellingCheckFailed": "拼写检查失败",
+ "spellingSettingsLoadFailed": "无法加载拼写检查设置",
+ "retrySpellingSettings": "重试加载拼写检查设置",
"spellingCheckIncomplete": "拼写检查未完成",
"spellingDictionaryNotInstalled": "尚未安装词典",
"spellingDictionaryNotInstalledForLanguage": "尚未安装 {dictionary} 词典",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "主题 ID 来自其文件名。请在目录或“文件”侧边栏中使用“重命名主题文件”。",
"diagnosticWritersideWebFileNameInvalid": "实例 \"{instanceId}\" 为主题 \"{topic}\" 发布了无效的 Web 文件名 \"{webFileName}\"。",
"diagnosticWritersideWebFileNameCollision": "实例 \"{instanceId}\" 将 \"{firstTopic}\" 和 \"{secondTopic}\" 都发布为 \"{webFileName}\"。",
- "spellingDictionaryRecoveryConflict": "拼写词典已被外部更改。已保留恢复副本。"
+ "spellingDictionaryRecoveryConflict": "拼写词典已被外部更改。已保留恢复副本。",
+ "windowMinimize": "最小化",
+ "windowMaximize": "最大化",
+ "windowRestore": "还原"
}
diff --git a/lib/l10n/app_zh_CN.arb b/lib/l10n/app_zh_CN.arb
index ae0bbb1d..c3450a62 100644
--- a/lib/l10n/app_zh_CN.arb
+++ b/lib/l10n/app_zh_CN.arb
@@ -104,6 +104,8 @@
"noSpellingSuggestions": "没有拼写建议",
"spellingWordCheckFailed": "无法检查此单词",
"spellingCheckFailed": "拼写检查失败",
+ "spellingSettingsLoadFailed": "无法加载拼写检查设置",
+ "retrySpellingSettings": "重试加载拼写检查设置",
"spellingCheckIncomplete": "拼写检查未完成",
"spellingDictionaryNotInstalled": "尚未安装词典",
"spellingDictionaryNotInstalledForLanguage": "尚未安装 {dictionary} 词典",
@@ -4913,5 +4915,8 @@
"renameTopicFileInstead": "主题 ID 来自其文件名。请在目录或“文件”侧边栏中使用“重命名主题文件”。",
"diagnosticWritersideWebFileNameInvalid": "实例 \"{instanceId}\" 为主题 \"{topic}\" 发布了无效的 Web 文件名 \"{webFileName}\"。",
"diagnosticWritersideWebFileNameCollision": "实例 \"{instanceId}\" 将 \"{firstTopic}\" 和 \"{secondTopic}\" 都发布为 \"{webFileName}\"。",
- "spellingDictionaryRecoveryConflict": "拼写词典已被外部更改。已保留恢复副本。"
+ "spellingDictionaryRecoveryConflict": "拼写词典已被外部更改。已保留恢复副本。",
+ "windowMinimize": "最小化",
+ "windowMaximize": "最大化",
+ "windowRestore": "还原"
}
diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart
index 93b9d9fc..3f19c907 100644
--- a/lib/l10n/generated/app_localizations.dart
+++ b/lib/l10n/generated/app_localizations.dart
@@ -7752,6 +7752,18 @@ abstract class AppLocalizations {
/// **'Spelling check failed'**
String get spellingCheckFailed;
+ /// Settings failure shown when a spelling word store cannot be read.
+ ///
+ /// In en, this message translates to:
+ /// **'Could not load spelling settings'**
+ String get spellingSettingsLoadFailed;
+
+ /// Action that deliberately retries failed spelling settings preparation.
+ ///
+ /// In en, this message translates to:
+ /// **'Retry loading spelling settings'**
+ String get retrySpellingSettings;
+
/// No description provided for @spellingCheckIncomplete.
///
/// In en, this message translates to:
@@ -7853,6 +7865,24 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'The spelling dictionary changed externally. A recovery copy was preserved.'**
String get spellingDictionaryRecoveryConflict;
+
+ /// Tooltip and accessibility label for minimizing the application window.
+ ///
+ /// In en, this message translates to:
+ /// **'Minimize'**
+ String get windowMinimize;
+
+ /// Tooltip and accessibility label for maximizing the application window.
+ ///
+ /// In en, this message translates to:
+ /// **'Maximize'**
+ String get windowMaximize;
+
+ /// Tooltip and accessibility label for restoring a maximized or fullscreen window to its normal size.
+ ///
+ /// In en, this message translates to:
+ /// **'Restore'**
+ String get windowRestore;
}
class _AppLocalizationsDelegate
diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart
index 35f4eb30..19f6a8a4 100644
--- a/lib/l10n/generated/app_localizations_ar.dart
+++ b/lib/l10n/generated/app_localizations_ar.dart
@@ -4612,6 +4612,14 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get spellingCheckFailed => 'فشل التدقيق الإملائي';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'تعذّر تحميل إعدادات التدقيق الإملائي';
+
+ @override
+ String get retrySpellingSettings =>
+ 'إعادة محاولة تحميل إعدادات التدقيق الإملائي';
+
@override
String get spellingCheckIncomplete => 'التدقيق الإملائي غير مكتمل';
@@ -4674,4 +4682,13 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'تم تغيير قاموس التدقيق الإملائي خارجيًا. تم الاحتفاظ بنسخة استرداد.';
+
+ @override
+ String get windowMinimize => 'تصغير';
+
+ @override
+ String get windowMaximize => 'تكبير';
+
+ @override
+ String get windowRestore => 'استعادة';
}
diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart
index 0555ff1b..afa42a8e 100644
--- a/lib/l10n/generated/app_localizations_de.dart
+++ b/lib/l10n/generated/app_localizations_de.dart
@@ -4622,6 +4622,13 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get spellingCheckFailed => 'Rechtschreibprüfung fehlgeschlagen';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Rechtschreibeinstellungen konnten nicht geladen werden';
+
+ @override
+ String get retrySpellingSettings => 'Rechtschreibeinstellungen erneut laden';
+
@override
String get spellingCheckIncomplete => 'Rechtschreibprüfung ist unvollständig';
@@ -4685,4 +4692,13 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Das Rechtschreibwörterbuch wurde extern geändert. Eine Wiederherstellungskopie wurde aufbewahrt.';
+
+ @override
+ String get windowMinimize => 'Minimieren';
+
+ @override
+ String get windowMaximize => 'Maximieren';
+
+ @override
+ String get windowRestore => 'Wiederherstellen';
}
diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart
index 8b5c64be..eb19725f 100644
--- a/lib/l10n/generated/app_localizations_en.dart
+++ b/lib/l10n/generated/app_localizations_en.dart
@@ -4597,6 +4597,12 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get spellingCheckFailed => 'Spelling check failed';
+ @override
+ String get spellingSettingsLoadFailed => 'Could not load spelling settings';
+
+ @override
+ String get retrySpellingSettings => 'Retry loading spelling settings';
+
@override
String get spellingCheckIncomplete => 'Spelling check is incomplete';
@@ -4659,4 +4665,13 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'The spelling dictionary changed externally. A recovery copy was preserved.';
+
+ @override
+ String get windowMinimize => 'Minimize';
+
+ @override
+ String get windowMaximize => 'Maximize';
+
+ @override
+ String get windowRestore => 'Restore';
}
diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart
index f355d87a..cd5fdbb2 100644
--- a/lib/l10n/generated/app_localizations_es.dart
+++ b/lib/l10n/generated/app_localizations_es.dart
@@ -4623,6 +4623,14 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get spellingCheckFailed => 'La revisión ortográfica falló';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'No se pudo cargar la configuración ortográfica';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Volver a cargar la configuración ortográfica';
+
@override
String get spellingCheckIncomplete =>
'La revisión ortográfica está incompleta';
@@ -4688,4 +4696,13 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'El diccionario ortográfico se modificó externamente. Se conservó una copia de recuperación.';
+
+ @override
+ String get windowMinimize => 'Minimizar';
+
+ @override
+ String get windowMaximize => 'Maximizar';
+
+ @override
+ String get windowRestore => 'Restaurar';
}
diff --git a/lib/l10n/generated/app_localizations_et.dart b/lib/l10n/generated/app_localizations_et.dart
index d313d670..4941ceba 100644
--- a/lib/l10n/generated/app_localizations_et.dart
+++ b/lib/l10n/generated/app_localizations_et.dart
@@ -4579,6 +4579,13 @@ class AppLocalizationsEt extends AppLocalizations {
@override
String get spellingCheckFailed => 'Õigekirjakontroll nurjus';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Õigekirjakontrolli sätteid ei õnnestunud laadida';
+
+ @override
+ String get retrySpellingSettings => 'Laadi õigekirjakontrolli sätted uuesti';
+
@override
String get spellingCheckIncomplete => 'Õigekirjakontroll on pooleli';
@@ -4643,4 +4650,13 @@ class AppLocalizationsEt extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Õigekirjasõnastikku muudeti väliselt. Taastekoopia säilitati.';
+
+ @override
+ String get windowMinimize => 'Minimeeri';
+
+ @override
+ String get windowMaximize => 'Maksimeeri';
+
+ @override
+ String get windowRestore => 'Taasta';
}
diff --git a/lib/l10n/generated/app_localizations_fa.dart b/lib/l10n/generated/app_localizations_fa.dart
index cf14e58c..00b197f5 100644
--- a/lib/l10n/generated/app_localizations_fa.dart
+++ b/lib/l10n/generated/app_localizations_fa.dart
@@ -4620,6 +4620,12 @@ class AppLocalizationsFa extends AppLocalizations {
@override
String get spellingCheckFailed => 'بررسی املا ناموفق بود';
+ @override
+ String get spellingSettingsLoadFailed => 'تنظیمات بررسی املا بارگیری نشد';
+
+ @override
+ String get retrySpellingSettings => 'بارگیری دوبارهٔ تنظیمات بررسی املا';
+
@override
String get spellingCheckIncomplete => 'بررسی املا کامل نیست';
@@ -4682,4 +4688,13 @@ class AppLocalizationsFa extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'فرهنگ لغت املایی بهصورت خارجی تغییر کرد. یک نسخهٔ بازیابی حفظ شد.';
+
+ @override
+ String get windowMinimize => 'کوچک کردن';
+
+ @override
+ String get windowMaximize => 'بزرگ کردن';
+
+ @override
+ String get windowRestore => 'بازیابی';
}
diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart
index 8952190b..3e3336a3 100644
--- a/lib/l10n/generated/app_localizations_fr.dart
+++ b/lib/l10n/generated/app_localizations_fr.dart
@@ -4625,6 +4625,14 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get spellingCheckFailed => 'Échec de la vérification orthographique';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Impossible de charger les paramètres de correction orthographique';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Réessayer de charger les paramètres de correction orthographique';
+
@override
String get spellingCheckIncomplete =>
'La vérification orthographique est incomplète';
@@ -4690,4 +4698,13 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Le dictionnaire orthographique a été modifié en externe. Une copie de récupération a été conservée.';
+
+ @override
+ String get windowMinimize => 'Réduire';
+
+ @override
+ String get windowMaximize => 'Agrandir';
+
+ @override
+ String get windowRestore => 'Restaurer';
}
diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart
index 27d7b3c9..daafa607 100644
--- a/lib/l10n/generated/app_localizations_hi.dart
+++ b/lib/l10n/generated/app_localizations_hi.dart
@@ -4572,6 +4572,13 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get spellingCheckFailed => 'वर्तनी जाँच विफल रही';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'वर्तनी जाँच सेटिंग लोड नहीं हो सकीं';
+
+ @override
+ String get retrySpellingSettings => 'वर्तनी जाँच सेटिंग फिर से लोड करें';
+
@override
String get spellingCheckIncomplete => 'वर्तनी जाँच अधूरी है';
@@ -4634,4 +4641,13 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'वर्तनी शब्दकोश को बाहरी रूप से बदला गया। पुनर्प्राप्ति प्रति सुरक्षित रखी गई।';
+
+ @override
+ String get windowMinimize => 'छोटा करें';
+
+ @override
+ String get windowMaximize => 'अधिकतम करें';
+
+ @override
+ String get windowRestore => 'पुनर्स्थापित करें';
}
diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart
index d8099504..76234651 100644
--- a/lib/l10n/generated/app_localizations_id.dart
+++ b/lib/l10n/generated/app_localizations_id.dart
@@ -4581,6 +4581,14 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get spellingCheckFailed => 'Pemeriksaan ejaan gagal';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Pengaturan pemeriksaan ejaan tidak dapat dimuat';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Coba muat ulang pengaturan pemeriksaan ejaan';
+
@override
String get spellingCheckIncomplete => 'Pemeriksaan ejaan belum lengkap';
@@ -4643,4 +4651,13 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Kamus ejaan diubah secara eksternal. Salinan pemulihan telah disimpan.';
+
+ @override
+ String get windowMinimize => 'Minimalkan';
+
+ @override
+ String get windowMaximize => 'Maksimalkan';
+
+ @override
+ String get windowRestore => 'Pulihkan';
}
diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart
index 9c85d3f8..4371bf1f 100644
--- a/lib/l10n/generated/app_localizations_it.dart
+++ b/lib/l10n/generated/app_localizations_it.dart
@@ -4619,6 +4619,14 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get spellingCheckFailed => 'Controllo ortografico non riuscito';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Impossibile caricare le impostazioni di controllo ortografico';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Riprova a caricare le impostazioni di controllo ortografico';
+
@override
String get spellingCheckIncomplete => 'Il controllo ortografico è incompleto';
@@ -4683,4 +4691,13 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Il dizionario ortografico è stato modificato esternamente. È stata conservata una copia di ripristino.';
+
+ @override
+ String get windowMinimize => 'Riduci';
+
+ @override
+ String get windowMaximize => 'Ingrandisci';
+
+ @override
+ String get windowRestore => 'Ripristina';
}
diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart
index 66538f3a..593ced6d 100644
--- a/lib/l10n/generated/app_localizations_ja.dart
+++ b/lib/l10n/generated/app_localizations_ja.dart
@@ -4454,6 +4454,12 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get spellingCheckFailed => 'スペルチェックに失敗しました';
+ @override
+ String get spellingSettingsLoadFailed => 'スペルチェックの設定を読み込めませんでした';
+
+ @override
+ String get retrySpellingSettings => 'スペルチェックの設定を再読み込み';
+
@override
String get spellingCheckIncomplete => 'スペルチェックが完了していません';
@@ -4515,4 +4521,13 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'スペルチェック辞書が外部で変更されました。復旧用コピーを保持しました。';
+
+ @override
+ String get windowMinimize => '最小化';
+
+ @override
+ String get windowMaximize => '最大化';
+
+ @override
+ String get windowRestore => '元に戻す';
}
diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart
index a38007c9..9d449e02 100644
--- a/lib/l10n/generated/app_localizations_ko.dart
+++ b/lib/l10n/generated/app_localizations_ko.dart
@@ -4448,6 +4448,12 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get spellingCheckFailed => '맞춤법 검사에 실패했습니다';
+ @override
+ String get spellingSettingsLoadFailed => '맞춤법 검사 설정을 불러올 수 없습니다';
+
+ @override
+ String get retrySpellingSettings => '맞춤법 검사 설정 다시 불러오기';
+
@override
String get spellingCheckIncomplete => '맞춤법 검사가 완료되지 않았습니다';
@@ -4509,4 +4515,13 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'맞춤법 사전이 외부에서 변경되었습니다. 복구 사본을 보존했습니다.';
+
+ @override
+ String get windowMinimize => '최소화';
+
+ @override
+ String get windowMaximize => '최대화';
+
+ @override
+ String get windowRestore => '복원';
}
diff --git a/lib/l10n/generated/app_localizations_nb.dart b/lib/l10n/generated/app_localizations_nb.dart
index 82239d9f..66f86e5b 100644
--- a/lib/l10n/generated/app_localizations_nb.dart
+++ b/lib/l10n/generated/app_localizations_nb.dart
@@ -4580,6 +4580,14 @@ class AppLocalizationsNb extends AppLocalizations {
@override
String get spellingCheckFailed => 'Stavekontrollen mislyktes';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Kunne ikke laste inn innstillinger for stavekontroll';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Prøv å laste inn innstillinger for stavekontroll på nytt';
+
@override
String get spellingCheckIncomplete => 'Stavekontrollen er ufullstendig';
@@ -4643,4 +4651,13 @@ class AppLocalizationsNb extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Staveordboken ble endret eksternt. En gjenopprettingskopi ble bevart.';
+
+ @override
+ String get windowMinimize => 'Minimer';
+
+ @override
+ String get windowMaximize => 'Maksimer';
+
+ @override
+ String get windowRestore => 'Gjenopprett';
}
diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart
index 71d37bfe..46609f1d 100644
--- a/lib/l10n/generated/app_localizations_nl.dart
+++ b/lib/l10n/generated/app_localizations_nl.dart
@@ -4625,6 +4625,14 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get spellingCheckFailed => 'Spellingcontrole mislukt';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Instellingen voor spellingcontrole konden niet worden geladen';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Instellingen voor spellingcontrole opnieuw laden';
+
@override
String get spellingCheckIncomplete => 'De spellingcontrole is onvolledig';
@@ -4689,4 +4697,13 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Het spellingwoordenboek is extern gewijzigd. Er is een herstelkopie bewaard.';
+
+ @override
+ String get windowMinimize => 'Minimaliseren';
+
+ @override
+ String get windowMaximize => 'Maximaliseren';
+
+ @override
+ String get windowRestore => 'Herstellen';
}
diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart
index 24a9c53d..da40313f 100644
--- a/lib/l10n/generated/app_localizations_pl.dart
+++ b/lib/l10n/generated/app_localizations_pl.dart
@@ -4634,6 +4634,14 @@ class AppLocalizationsPl extends AppLocalizations {
@override
String get spellingCheckFailed => 'Sprawdzanie pisowni nie powiodło się';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Nie można wczytać ustawień sprawdzania pisowni';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Ponów wczytywanie ustawień sprawdzania pisowni';
+
@override
String get spellingCheckIncomplete => 'Sprawdzanie pisowni jest niepełne';
@@ -4696,4 +4704,13 @@ class AppLocalizationsPl extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Słownik pisowni został zmieniony zewnętrznie. Zachowano kopię odzyskiwania.';
+
+ @override
+ String get windowMinimize => 'Minimalizuj';
+
+ @override
+ String get windowMaximize => 'Maksymalizuj';
+
+ @override
+ String get windowRestore => 'Przywróć';
}
diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart
index 6df76e1d..20dc1425 100644
--- a/lib/l10n/generated/app_localizations_pt.dart
+++ b/lib/l10n/generated/app_localizations_pt.dart
@@ -4638,6 +4638,14 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get spellingCheckFailed => 'A verificação ortográfica falhou';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Não foi possível carregar as definições de verificação ortográfica';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Tentar carregar novamente as definições de verificação ortográfica';
+
@override
String get spellingCheckIncomplete =>
'A verificação ortográfica está incompleta';
@@ -4703,6 +4711,15 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'O dicionário ortográfico foi alterado externamente. Foi preservada uma cópia de recuperação.';
+
+ @override
+ String get windowMinimize => 'Minimizar';
+
+ @override
+ String get windowMaximize => 'Maximizar';
+
+ @override
+ String get windowRestore => 'Restaurar';
}
/// The translations for Portuguese, as used in Brazil (`pt_BR`).
@@ -9336,6 +9353,14 @@ class AppLocalizationsPtBr extends AppLocalizationsPt {
@override
String get spellingCheckFailed => 'A verificação ortográfica falhou';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Não foi possível carregar as configurações de verificação ortográfica';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Tentar carregar novamente as configurações de verificação ortográfica';
+
@override
String get spellingCheckIncomplete =>
'A verificação ortográfica está incompleta';
@@ -9401,4 +9426,13 @@ class AppLocalizationsPtBr extends AppLocalizationsPt {
@override
String get spellingDictionaryRecoveryConflict =>
'O dicionário ortográfico foi alterado externamente. Uma cópia de recuperação foi preservada.';
+
+ @override
+ String get windowMinimize => 'Minimizar';
+
+ @override
+ String get windowMaximize => 'Maximizar';
+
+ @override
+ String get windowRestore => 'Restaurar';
}
diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart
index c5313195..60229af7 100644
--- a/lib/l10n/generated/app_localizations_ru.dart
+++ b/lib/l10n/generated/app_localizations_ru.dart
@@ -4638,6 +4638,14 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get spellingCheckFailed => 'Не удалось проверить правописание';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Не удалось загрузить настройки проверки орфографии';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Повторить загрузку настроек проверки орфографии';
+
@override
String get spellingCheckIncomplete => 'Проверка правописания не завершена';
@@ -4700,4 +4708,13 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Орфографический словарь был изменён извне. Резервная копия для восстановления сохранена.';
+
+ @override
+ String get windowMinimize => 'Свернуть';
+
+ @override
+ String get windowMaximize => 'Развернуть';
+
+ @override
+ String get windowRestore => 'Восстановить';
}
diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart
index 911544eb..5449e4b7 100644
--- a/lib/l10n/generated/app_localizations_tr.dart
+++ b/lib/l10n/generated/app_localizations_tr.dart
@@ -4582,6 +4582,13 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get spellingCheckFailed => 'Yazım denetimi başarısız oldu';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Yazım denetimi ayarları yüklenemedi';
+
+ @override
+ String get retrySpellingSettings => 'Yazım denetimi ayarlarını yeniden yükle';
+
@override
String get spellingCheckIncomplete => 'Yazım denetimi tamamlanmadı';
@@ -4645,4 +4652,13 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Yazım sözlüğü harici olarak değiştirildi. Bir kurtarma kopyası korundu.';
+
+ @override
+ String get windowMinimize => 'Simge durumuna küçült';
+
+ @override
+ String get windowMaximize => 'Ekranı kapla';
+
+ @override
+ String get windowRestore => 'Geri yükle';
}
diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart
index fbf67d6f..17dd1e25 100644
--- a/lib/l10n/generated/app_localizations_uk.dart
+++ b/lib/l10n/generated/app_localizations_uk.dart
@@ -4645,6 +4645,14 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get spellingCheckFailed => 'Не вдалося перевірити правопис';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Не вдалося завантажити налаштування перевірки правопису';
+
+ @override
+ String get retrySpellingSettings =>
+ 'Повторити завантаження налаштувань перевірки правопису';
+
@override
String get spellingCheckIncomplete => 'Перевірку правопису не завершено';
@@ -4709,4 +4717,13 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Орфографічний словник було змінено ззовні. Копію для відновлення збережено.';
+
+ @override
+ String get windowMinimize => 'Згорнути';
+
+ @override
+ String get windowMaximize => 'Розгорнути';
+
+ @override
+ String get windowRestore => 'Відновити';
}
diff --git a/lib/l10n/generated/app_localizations_vi.dart b/lib/l10n/generated/app_localizations_vi.dart
index c302818b..cbcc944c 100644
--- a/lib/l10n/generated/app_localizations_vi.dart
+++ b/lib/l10n/generated/app_localizations_vi.dart
@@ -4573,6 +4573,13 @@ class AppLocalizationsVi extends AppLocalizations {
@override
String get spellingCheckFailed => 'Kiểm tra chính tả thất bại';
+ @override
+ String get spellingSettingsLoadFailed =>
+ 'Không thể tải cài đặt kiểm tra chính tả';
+
+ @override
+ String get retrySpellingSettings => 'Thử tải lại cài đặt kiểm tra chính tả';
+
@override
String get spellingCheckIncomplete => 'Kiểm tra chính tả chưa hoàn tất';
@@ -4635,4 +4642,13 @@ class AppLocalizationsVi extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict =>
'Từ điển chính tả đã được thay đổi từ bên ngoài. Một bản sao khôi phục đã được giữ lại.';
+
+ @override
+ String get windowMinimize => 'Thu nhỏ';
+
+ @override
+ String get windowMaximize => 'Phóng to';
+
+ @override
+ String get windowRestore => 'Khôi phục';
}
diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart
index aabe1633..9d7276da 100644
--- a/lib/l10n/generated/app_localizations_zh.dart
+++ b/lib/l10n/generated/app_localizations_zh.dart
@@ -4381,6 +4381,12 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get spellingCheckFailed => '拼写检查失败';
+ @override
+ String get spellingSettingsLoadFailed => '无法加载拼写检查设置';
+
+ @override
+ String get retrySpellingSettings => '重试加载拼写检查设置';
+
@override
String get spellingCheckIncomplete => '拼写检查未完成';
@@ -4441,6 +4447,15 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get spellingDictionaryRecoveryConflict => '拼写词典已被外部更改。已保留恢复副本。';
+
+ @override
+ String get windowMinimize => '最小化';
+
+ @override
+ String get windowMaximize => '最大化';
+
+ @override
+ String get windowRestore => '还原';
}
/// The translations for Chinese, as used in China (`zh_CN`).
@@ -8818,6 +8833,12 @@ class AppLocalizationsZhCn extends AppLocalizationsZh {
@override
String get spellingCheckFailed => '拼写检查失败';
+ @override
+ String get spellingSettingsLoadFailed => '无法加载拼写检查设置';
+
+ @override
+ String get retrySpellingSettings => '重试加载拼写检查设置';
+
@override
String get spellingCheckIncomplete => '拼写检查未完成';
@@ -8878,4 +8899,13 @@ class AppLocalizationsZhCn extends AppLocalizationsZh {
@override
String get spellingDictionaryRecoveryConflict => '拼写词典已被外部更改。已保留恢复副本。';
+
+ @override
+ String get windowMinimize => '最小化';
+
+ @override
+ String get windowMaximize => '最大化';
+
+ @override
+ String get windowRestore => '还原';
}
diff --git a/lib/main.dart b/lib/main.dart
index bc682a30..5d2a8fcd 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,39 +1,66 @@
+import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:window_manager/window_manager.dart';
+import 'package:yaru/yaru.dart';
import 'src/app/busymark_app.dart';
import 'src/app/startup_path.dart';
import 'src/app/system_accent.dart';
import 'src/git/application/git_controller.dart';
import 'src/git/data/git_cli_gateway.dart';
-import 'src/platform/linux_header_bar_service.dart';
+import 'src/platform/gtk_animation_settings_service.dart';
+import 'src/platform/gtk_window_preferences_service.dart';
+import 'src/platform/gtk_header_icon_service.dart';
+import 'src/platform/linux_gtk_accent_service.dart';
import 'src/spellcheck/spelling_release_smoke.dart';
import 'src/visualization/visualization_release_smoke.dart';
Future main(List args) async {
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
- await LinuxHeaderBarService.instance.initialize();
+ if (Platform.isLinux) await YaruWindow.ensureInitialized();
if (visualizationReleaseSmokeReportPath(args) case final reportPath?) {
exit(await runVisualizationReleaseSmoke(reportPath));
}
if (spellingReleaseSmokeReportPath(args) case final reportPath?) {
exit(await runSpellingReleaseSmoke(reportPath));
}
- var initialAccent = busyMarkDefaultAccentColor;
- if (Platform.isLinux) {
- initialAccent =
- await const LinuxPortalAppearance().readAccentColor() ??
- busyMarkDefaultAccentColor;
- }
+ final accentCoordinator = LinuxAccentCoordinator(
+ sources: Platform.isLinux
+ ? [const LinuxGtkAccentService(), const LinuxPortalAppearance()]
+ : [],
+ );
+ await accentCoordinator.initialize();
+ final chrome = await Future.wait