diff --git a/src/desktop-main.ts b/src/desktop-main.ts index b37ba800..b245c0c0 100644 --- a/src/desktop-main.ts +++ b/src/desktop-main.ts @@ -1,6 +1,6 @@ import { createApp } from 'vue'; import { createPinia } from 'pinia'; -import { createI18n } from 'vue-i18n'; +import { type I18n, type Composer, createI18n } from 'vue-i18n'; import { createVuetify } from 'vuetify'; import { VAlert } from 'vuetify/components/VAlert'; @@ -45,6 +45,7 @@ import { VTextField } from 'vuetify/components/VTextField'; import { VToolbar } from 'vuetify/components/VToolbar'; import { VTooltip } from 'vuetify/components/VTooltip'; import { VWindow, VWindowItem } from 'vuetify/components/VWindow'; +import type { LocaleInstance } from 'vuetify/lib/framework.d.ts'; import { aliases, mdi } from 'vuetify/iconsets/mdi-svg'; import 'vuetify/styles'; @@ -113,7 +114,7 @@ import App from './DesktopApp.vue'; const app = createApp(App); const pinia = createPinia(); -const i18n = createI18n(getI18nOptions()); +const i18n = createI18n(getI18nOptions()) as I18n, Record, Record, string, false>; const vuetify = createVuetify({ components: { VAlert, @@ -428,9 +429,56 @@ const vuetify = createVuetify({ } } } + }, + locale: { + adapter: ((i18nGlobal: Composer) => { + const instance: LocaleInstance = { + name: 'ezBookkeeping i18n', + messages: i18nGlobal.messages, + current: i18nGlobal.locale, + fallback: i18nGlobal.locale, // no need to let vuetify know what fallback locale is + t: (key: string, ...params: unknown[]): string => { + if (!key) { + return ''; + } + + if (!key.startsWith('$vuetify.')) { + return key; + } + + key = key.substring(9); // remove '$vuetify.' prefix + const mappedTextKey = vuetifyI18nTextKeyMap[key]; + + if (!mappedTextKey) { + return key; + } + + if (params && params.length > 0) { + // @ts-expect-error the arguments passed in are compatible with vue-i18n method arguments + return i18nGlobal.t(mappedTextKey, ...params); + } else { + return i18nGlobal.t(mappedTextKey); + } + }, + n: (value: number): string => { + return i18nGlobal.n(value); + }, + provide: (): LocaleInstance => { + return instance; + } + }; + + return instance; + })(i18n.global) as LocaleInstance, } }); +// key is in the original i18n text of vuetify (in vuetify/lib/locale/en.js), value is the text in the ezBookkeeping i18n files +const vuetifyI18nTextKeyMap: Record = { + 'open': 'Open', + 'close': 'Close' +} + echarts.use([ CanvasRenderer, LineChart, diff --git a/src/locales/de.json b/src/locales/de.json index ffe870b3..4680674f 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -1323,6 +1323,7 @@ "OK": "OK", "Cancel": "Abbrechen", "Operation": "Vorgang", + "Open": "Open", "Close": "Schließen", "Submit": "Einreichen", "Add": "Hinzufügen", diff --git a/src/locales/en.json b/src/locales/en.json index 49d184a3..d7326ba3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1323,6 +1323,7 @@ "OK": "OK", "Cancel": "Cancel", "Operation": "Operation", + "Open": "Open", "Close": "Close", "Submit": "Submit", "Add": "Add", diff --git a/src/locales/es.json b/src/locales/es.json index a912863b..5f59fa51 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -1323,6 +1323,7 @@ "OK": "Aceptar", "Cancel": "Cancelar", "Operation": "Operación", + "Open": "Open", "Close": "Cerrar", "Submit": "Enviar", "Add": "Agregar", diff --git a/src/locales/it.json b/src/locales/it.json index 272d1f13..3ea1e340 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -1323,6 +1323,7 @@ "OK": "OK", "Cancel": "Annulla", "Operation": "Operazione", + "Open": "Open", "Close": "Chiudi", "Submit": "Invia", "Add": "Aggiungi", diff --git a/src/locales/ja.json b/src/locales/ja.json index 34b1f01a..6dec8117 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -1323,6 +1323,7 @@ "OK": "OK", "Cancel": "キャンセル", "Operation": "操作", + "Open": "Open", "Close": "閉じる", "Submit": "送信", "Add": "追加", diff --git a/src/locales/pt_BR.json b/src/locales/pt_BR.json index 6c56bb6d..ab81c173 100644 --- a/src/locales/pt_BR.json +++ b/src/locales/pt_BR.json @@ -1323,6 +1323,7 @@ "OK": "OK", "Cancel": "Cancelar", "Operation": "Operação", + "Open": "Open", "Close": "Fechar", "Submit": "Enviar", "Add": "Adicionar", diff --git a/src/locales/ru.json b/src/locales/ru.json index 9329eddb..dc69ac59 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -1323,6 +1323,7 @@ "OK": "ОК", "Cancel": "Отмена", "Operation": "Операция", + "Open": "Open", "Close": "Закрыть", "Submit": "Отправить", "Add": "Добавить", diff --git a/src/locales/uk.json b/src/locales/uk.json index f3a328d9..4ae81817 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -1323,6 +1323,7 @@ "OK": "ОК", "Cancel": "Скасувати", "Operation": "Дія", + "Open": "Open", "Close": "Закрити", "Submit": "Підтвердити", "Add": "Додати", diff --git a/src/locales/vi.json b/src/locales/vi.json index 32cfc08c..eda9e8fb 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -1323,6 +1323,7 @@ "OK": "OK", "Cancel": "Hủy", "Operation": "Thao tác", + "Open": "Open", "Close": "Đóng", "Submit": "Gửi", "Add": "Thêm", diff --git a/src/locales/zh_Hans.json b/src/locales/zh_Hans.json index d68e8da1..c7a096ea 100644 --- a/src/locales/zh_Hans.json +++ b/src/locales/zh_Hans.json @@ -1323,6 +1323,7 @@ "OK": "确定", "Cancel": "取消", "Operation": "操作", + "Open": "打开", "Close": "关闭", "Submit": "提交", "Add": "添加", diff --git a/src/locales/zh_Hant.json b/src/locales/zh_Hant.json index 5a34e6f7..a9397895 100644 --- a/src/locales/zh_Hant.json +++ b/src/locales/zh_Hant.json @@ -1323,6 +1323,7 @@ "OK": "確定", "Cancel": "取消", "Operation": "操作", + "Open": "開啟", "Close": "關閉", "Submit": "提交", "Add": "新增",