From 1856479de9e2692d0dfb6c72a6eebdb12d758a63 Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Tue, 3 Dec 2024 19:51:15 -0800 Subject: [PATCH] Translate topbar command menu (#1784) * Rename script * Translate menu labels * Update translations * Display translated menu items --- lint-staged.config.js | 4 +- scripts/update-constants-locale.ts | 57 ++++++++++++++++++++++++ scripts/update-setting-locale.ts | 39 ---------------- src/components/topbar/CommandMenubar.vue | 24 +++++++++- src/locales/en.json | 5 +++ src/locales/ja.json | 5 +++ src/locales/ru.json | 5 +++ src/locales/zh.json | 5 +++ 8 files changed, 101 insertions(+), 43 deletions(-) create mode 100644 scripts/update-constants-locale.ts delete mode 100644 scripts/update-setting-locale.ts diff --git a/lint-staged.config.js b/lint-staged.config.js index f5682f495..b3bfdc2f0 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -10,8 +10,8 @@ export default { './src/locales/en.json': () => ['lobe-i18n locale'], - './src/constants/coreSettings.ts': () => [ - 'tsx scripts/update-setting-locale.ts', + './src/constants/*.ts': () => [ + 'tsx scripts/update-constants-locale.ts', 'lobe-i18n locale' ] } diff --git a/scripts/update-constants-locale.ts b/scripts/update-constants-locale.ts new file mode 100644 index 000000000..b380dc245 --- /dev/null +++ b/scripts/update-constants-locale.ts @@ -0,0 +1,57 @@ +import fs from 'fs' +import { CORE_SETTINGS } from '../src/constants/coreSettings' +import { CORE_MENU_COMMANDS } from '../src/constants/coreMenuCommands' + +interface SettingLocale { + name: string + tooltip?: string +} + +const extractSettingLocaleStrings = (): Record => { + return Object.fromEntries( + CORE_SETTINGS.sort((a, b) => a.id.localeCompare(b.id)).map((setting) => [ + // '.' is not allowed in JSON keys, so we replace it with '_' + setting.id.replace(/\./g, '_'), + { + name: setting.name, + tooltip: setting.tooltip + } + ]) + ) +} + +const extractMenuCommandLocaleStrings = (): Record => { + const labels = new Set() + for (const [category, _] of CORE_MENU_COMMANDS) { + category.forEach((category) => labels.add(category)) + } + return Object.fromEntries(Array.from(labels).map((label) => [label, label])) +} + +const main = () => { + const settingLocaleStrings = extractSettingLocaleStrings() + const menuCommandLocaleStrings = extractMenuCommandLocaleStrings() + + const localePath = './src/locales/en.json' + const globalLocale = JSON.parse(fs.readFileSync(localePath, 'utf-8')) + fs.writeFileSync( + localePath, + JSON.stringify( + { + ...globalLocale, + settingsDialog: { + ...(globalLocale.settingsDialog ?? {}), + ...settingLocaleStrings + }, + menuLabels: { + ...(globalLocale.menuLabels ?? {}), + ...menuCommandLocaleStrings + } + }, + null, + 2 + ) + ) +} + +main() diff --git a/scripts/update-setting-locale.ts b/scripts/update-setting-locale.ts deleted file mode 100644 index c9fb23ec7..000000000 --- a/scripts/update-setting-locale.ts +++ /dev/null @@ -1,39 +0,0 @@ -import fs from 'fs' -import { CORE_SETTINGS } from '../src/constants/coreSettings' - -interface SettingLocale { - name: string - tooltip?: string -} - -const extractLocaleStrings = (): Record => { - return Object.fromEntries( - CORE_SETTINGS.sort((a, b) => a.id.localeCompare(b.id)).map((setting) => [ - // '.' is not allowed in JSON keys, so we replace it with '_' - setting.id.replace(/\./g, '_'), - { - name: setting.name, - tooltip: setting.tooltip - } - ]) - ) -} - -const main = () => { - const localeStrings = extractLocaleStrings() - const localePath = './src/locales/en.json' - const globalLocale = JSON.parse(fs.readFileSync(localePath, 'utf-8')) - fs.writeFileSync( - localePath, - JSON.stringify( - { - ...globalLocale, - settingsDialog: { ...globalLocale.settingsDialog, ...localeStrings } - }, - null, - 2 - ) - ) -} - -main() diff --git a/src/components/topbar/CommandMenubar.vue b/src/components/topbar/CommandMenubar.vue index 2e2913c0f..328f64570 100644 --- a/src/components/topbar/CommandMenubar.vue +++ b/src/components/topbar/CommandMenubar.vue @@ -1,6 +1,6 @@