diff --git a/src/components/Toolbar.vue b/src/components/Toolbar.vue
index d476dee..5cc7a49 100644
--- a/src/components/Toolbar.vue
+++ b/src/components/Toolbar.vue
@@ -116,13 +116,13 @@
\ No newline at end of file
+
diff --git a/src/ts/useSafeI18n.ts b/src/ts/useSafeI18n.ts
new file mode 100644
index 0000000..f778421
--- /dev/null
+++ b/src/ts/useSafeI18n.ts
@@ -0,0 +1,22 @@
+import { useI18n } from 'vue-i18n'
+
+type TranslateFn = (key: string, ...args: any[]) => string
+
+export function useSafeI18n(fallbackMap: Record = {}) {
+ let safeT: TranslateFn = (key) => fallbackMap[key] ?? key
+
+ try {
+ const { t } = useI18n()
+ safeT = (key: string, ...args: any[]) => {
+ const translated = t(key, ...args)
+ if (typeof translated === 'string' && translated.length > 0) {
+ return translated
+ }
+ return fallbackMap[key] ?? key
+ }
+ } catch {
+ // The host app may not install vue-i18n; fallback to key/default text.
+ }
+
+ return { t: safeT }
+}