From 971c5022b86393671ef0624362d82cd76997683c Mon Sep 17 00:00:00 2001 From: mebtte Date: Thu, 27 Jul 2023 22:17:38 +0800 Subject: [PATCH] fix i18n string replacement --- apps/cli/src/i18n/index.ts | 6 +++-- apps/cli/src/i18n/ja.ts | 10 ++++++++ apps/pwa/src/i18n/en.ts | 8 +++++-- apps/pwa/src/i18n/index.ts | 9 ++++++-- apps/pwa/src/i18n/ja.ts | 10 ++++++++ apps/pwa/src/i18n/zh_hans.ts | 6 ++++- .../pwa/src/pages/login/email_panel/index.tsx | 2 +- .../pages/user_manage/create_user_dialog.tsx | 23 ++++++++----------- shared/constants/index.ts | 1 + 9 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 apps/cli/src/i18n/ja.ts create mode 100644 apps/pwa/src/i18n/ja.ts diff --git a/apps/cli/src/i18n/index.ts b/apps/cli/src/i18n/index.ts index 740582a4..a1c4a412 100644 --- a/apps/cli/src/i18n/index.ts +++ b/apps/cli/src/i18n/index.ts @@ -2,18 +2,20 @@ import { Language } from '#/constants'; import { Key } from './constants'; import en from './en'; import zhHans from './zh_hans'; +import ja from './ja'; const LANGUAGE_MAP: Record = { [Language.EN]: en, [Language.ZH_HANS]: zhHans, + [Language.JA]: ja, }; export function t(key: Key, language: Language, ...args: string[]) { - const value = LANGUAGE_MAP[language][key]; + let value = LANGUAGE_MAP[language][key]; if (args.length) { for (let i = 0; i < args.length; i += 1) { - value.replace(`%s${i + 1}`, args[i]); + value = value.replace(`%s${i + 1}`, args[i]); } } diff --git a/apps/cli/src/i18n/ja.ts b/apps/cli/src/i18n/ja.ts new file mode 100644 index 00000000..a7e393fa --- /dev/null +++ b/apps/cli/src/i18n/ja.ts @@ -0,0 +1,10 @@ +import { Key } from './constants'; +import en from './en'; + +const ja: { + [key in Key]: string; +} = { + ...en, +}; + +export default ja; diff --git a/apps/pwa/src/i18n/en.ts b/apps/pwa/src/i18n/en.ts index 06164264..08fb94b2 100644 --- a/apps/pwa/src/i18n/en.ts +++ b/apps/pwa/src/i18n/en.ts @@ -14,7 +14,7 @@ export default { please_enter_valid_email: 'please enter valid email', captcha: 'captcha', get_login_code: 'get login code', - login_code_has_emailed: 'login code has emailed', + login_code_emailed: 'login code emailed', change_language_question: 'changing language will reload application, continue ?', relative_volume: 'relative volume', @@ -24,7 +24,7 @@ export default { musicbill: 'musicbill', user_management: 'user management', logout: 'logout', - logout_question: 'Are you sure to logout ?', + logout_question: 'are you sure to logout ?', search: 'search', shared_musicbill_invitation: 'shared musicbill invitation', public_musicbill_collection: 'public musicbill collection', @@ -35,4 +35,8 @@ export default { create_at: 'create at', no_music_in_musicbill: 'no music in musicbill', find_in_musicbill: 'find in musicbill', + user_created: 'user created', + create_user: 'create user', + remark: 'remark', + create: 'create', }; diff --git a/apps/pwa/src/i18n/index.ts b/apps/pwa/src/i18n/index.ts index aa798ba3..8602526c 100644 --- a/apps/pwa/src/i18n/index.ts +++ b/apps/pwa/src/i18n/index.ts @@ -8,17 +8,21 @@ switch (setting.get().language) { ({ default: translation } = await import('./zh_hans')); break; } + case Language.JA: { + ({ default: translation } = await import('./ja')); + break; + } default: { ({ default: translation } = await import('./en')); } } export function t(key: Key, ...args: string[]) { - const value = translation[key]; + let value = translation[key]; if (args.length) { for (let i = 0; i < args.length; i += 1) { - value.replace(`%s${i + 1}`, args[i]); + value = value.replace(`%s${i + 1}`, args[i]); } } @@ -33,6 +37,7 @@ export const LANGUAGE_MAP: Record< > = { [Language.EN]: { label: 'english' }, [Language.ZH_HANS]: { label: '简体中文' }, + [Language.JA]: { label: '日本語' }, }; export { Key }; diff --git a/apps/pwa/src/i18n/ja.ts b/apps/pwa/src/i18n/ja.ts new file mode 100644 index 00000000..a7e393fa --- /dev/null +++ b/apps/pwa/src/i18n/ja.ts @@ -0,0 +1,10 @@ +import { Key } from './constants'; +import en from './en'; + +const ja: { + [key in Key]: string; +} = { + ...en, +}; + +export default ja; diff --git a/apps/pwa/src/i18n/zh_hans.ts b/apps/pwa/src/i18n/zh_hans.ts index def06cd6..35b0f4ce 100644 --- a/apps/pwa/src/i18n/zh_hans.ts +++ b/apps/pwa/src/i18n/zh_hans.ts @@ -17,7 +17,7 @@ const zhCN: { please_enter_valid_email: '请输入合法的邮箱', captcha: '验证码', get_login_code: '获取登录验证码', - login_code_has_emailed: '登录验证码已经发送到邮箱', + login_code_emailed: '登录验证码已发送到邮箱', change_language_question: '更换语言将会重新加载应用, 是否继续?', relative_volume: '相对音量', music_play_record_short: '播放记录', @@ -37,6 +37,10 @@ const zhCN: { create_at: '创建于', no_music_in_musicbill: '乐单暂无音乐', find_in_musicbill: '乐单内查找', + user_created: '用户已创建', + create_user: '创建用户', + remark: '备注', + create: '创建', }; export default zhCN; diff --git a/apps/pwa/src/pages/login/email_panel/index.tsx b/apps/pwa/src/pages/login/email_panel/index.tsx index d24bd5e6..b6be292d 100644 --- a/apps/pwa/src/pages/login/email_panel/index.tsx +++ b/apps/pwa/src/pages/login/email_panel/index.tsx @@ -50,7 +50,7 @@ function EmailPanel({ toNext }: { toNext: (email: string) => void }) { captchaId, captchaValue, }); - notice.info(t('login_code_has_emailed')); + notice.info(t('login_code_emailed')); toNext(email); } catch (error) { logger.error(error, 'Failed to get login code'); diff --git a/apps/pwa/src/pages/player/pages/user_manage/create_user_dialog.tsx b/apps/pwa/src/pages/player/pages/user_manage/create_user_dialog.tsx index cb0a911a..128771b6 100644 --- a/apps/pwa/src/pages/player/pages/user_manage/create_user_dialog.tsx +++ b/apps/pwa/src/pages/player/pages/user_manage/create_user_dialog.tsx @@ -7,6 +7,7 @@ import notice from '@/utils/notice'; import { EMAIL } from '#/constants/regexp'; import logger from '@/utils/logger'; import adminCreateUser from '@/server/api/admin_create_user'; +import { t } from '@/i18n'; import e, { EventType } from './eventemitter'; import { ZIndex } from '../../constants'; @@ -33,11 +34,8 @@ function CreateUserDialog() { const [loading, setLoading] = useState(false); const onCreate = async () => { - if (!email) { - return notice.error('请输入邮箱'); - } - if (!EMAIL.test(email)) { - return notice.error('邮箱格式错误'); + if (!email || !EMAIL.test(email)) { + return notice.error(t('please_enter_valid_email')); } setLoading(true); @@ -47,11 +45,11 @@ function CreateUserDialog() { remark: remark.replace(/\s+/g, ' ').trim(), }); - notice.info('已创建用户'); + notice.info(t('user_created')); onClose(); e.emit(EventType.RELOAD_DATA, null); } catch (error) { - logger.error(error, '创建用户失败'); + logger.error(error, 'Failed to create user'); notice.error(error.message); } setLoading(false); @@ -67,10 +65,10 @@ function CreateUserDialog() { return ( - 创建用户 + {t('create_user')} diff --git a/shared/constants/index.ts b/shared/constants/index.ts index dd3a5361..9dc6b8c5 100644 --- a/shared/constants/index.ts +++ b/shared/constants/index.ts @@ -94,6 +94,7 @@ export const SINGER_MODIFY_RECORD_TTL = 1000 * 60 * 60 * 24 * 180; export enum Language { EN = 'en', ZH_HANS = 'zh-hans', + JA = 'ja', } export const DEFAULT_LANGUAGE = Language.EN;