From 0ab78983d4797fa0a5383b84d25a8d77bfc39c60 Mon Sep 17 00:00:00 2001 From: chiba Date: Wed, 6 Mar 2024 16:17:06 +0800 Subject: [PATCH 1/4] [U] update i18n.ts type and more intuitive --- AquaNet/src/libs/i18n.ts | 83 ++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/AquaNet/src/libs/i18n.ts b/AquaNet/src/libs/i18n.ts index 81815537..8f3a8cca 100644 --- a/AquaNet/src/libs/i18n.ts +++ b/AquaNet/src/libs/i18n.ts @@ -1,5 +1,7 @@ - -const EN_REF = { +const EN_REF_USER = { + 'TEST': 'TEST' +} +const EN_REF_Welcome = { 'back': 'Back', 'email': 'Email', 'password': 'Password', @@ -12,48 +14,65 @@ const EN_REF = { 'welcome.turnstile-error': 'Error verifying your network environment. Please turn off your VPN and try again.', 'welcome.turnstile-timeout': 'Network verification timed out. Please try again.', 'welcome.verification-sent': 'A verification email has been sent to ${email}. Please check your inbox!', - 'welcome.verify-state-0': "You haven't verified your email. A verification email had been sent to your inbox less than a minute ago. Please check your inbox!", - 'welcome.verify-state-1': "You haven't verified your email. We've already sent 3 emails over the last 24 hours so we'll not send another one. Please check your inbox!", - 'welcome.verify-state-2': "You haven't verified your email. We just sent you another verification email. Please check your inbox!", - 'welcome.verifying': "Verifying your email... please wait.", - 'welcome.verified': "Your email has been verified! You can now log in now.", + 'welcome.verify-state-0': 'You haven\'t verified your email. A verification email had been sent to your inbox less than a minute ago. Please check your inbox!', + 'welcome.verify-state-1': 'You haven\'t verified your email. We\'ve already sent 3 emails over the last 24 hours so we\'ll not send another one. Please check your inbox!', + 'welcome.verify-state-2': 'You haven\'t verified your email. We just sent you another verification email. Please check your inbox!', + 'welcome.verifying': 'Verifying your email... please wait.', + 'welcome.verified': 'Your email has been verified! You can now log in now.', 'welcome.verification-failed': 'Verification failed: ${message}. Please try again.', } -const msgs: { [index: string]: typeof EN_REF } = { - en: EN_REF, - zh: { - 'back': '返回', - 'email': '邮箱', - 'password': '密码', - 'username': '用户名', - 'welcome.btn-login': '登录', - 'welcome.btn-signup': '注册', - 'welcome.email-password-missing': '邮箱和密码必须填哦', - 'welcome.username-missing': '用户名/邮箱必须填哦', - 'welcome.waiting-turnstile': '正在验证网络环境...', - 'welcome.turnstile-error': '验证网络环境出错了,请关闭VPN后重试', - 'welcome.turnstile-timeout': '验证网络环境超时了,请重试', - 'welcome.verification-sent': '验证邮件已发送至 ${email},请翻翻收件箱', - 'welcome.verify-state-0': '您还没有验证邮箱哦!验证邮件一分钟内刚刚发到您的邮箱,请翻翻收件箱', - 'welcome.verify-state-1': '您还没有验证邮箱哦!我们在过去的24小时内已经发送了3封验证邮件,所以我们不会再发送了,请翻翻收件箱', - 'welcome.verify-state-2': '您还没有验证邮箱哦!我们刚刚又发送了一封验证邮件,请翻翻收件箱', - 'welcome.verifying': '正在验证邮箱...请稍等', - 'welcome.verified': '您的邮箱已经验证成功!您现在可以登录了', - 'welcome.verification-failed': '验证失败:${message}。请重试', - } +const zhWelcome ={ + 'back': '返回', + 'email': '邮箱', + 'password': '密码', + 'username': '用户名', + 'welcome.btn-login': '登录', + 'welcome.btn-signup': '注册', + 'welcome.email-password-missing': '邮箱和密码必须填哦', + 'welcome.username-missing': '用户名/邮箱必须填哦', + 'welcome.waiting-turnstile': '正在验证网络环境...', + 'welcome.turnstile-error': '验证网络环境出错了,请关闭VPN后重试', + 'welcome.turnstile-timeout': '验证网络环境超时了,请重试', + 'welcome.verification-sent': '验证邮件已发送至 ${email},请翻翻收件箱', + 'welcome.verify-state-0': '您还没有验证邮箱哦!验证邮件一分钟内刚刚发到您的邮箱,请翻翻收件箱', + 'welcome.verify-state-1': '您还没有验证邮箱哦!我们在过去的24小时内已经发送了3封验证邮件,所以我们不会再发送了,请翻翻收件箱', + 'welcome.verify-state-2': '您还没有验证邮箱哦!我们刚刚又发送了一封验证邮件,请翻翻收件箱', + 'welcome.verifying': '正在验证邮箱...请稍等', + 'welcome.verified': '您的邮箱已经验证成功!您现在可以登录了', + 'welcome.verification-failed': '验证失败:${message}。请重试', +} +const zhUser={ + 'test':'test' } -let lang = 'en' + +type LocalizationMessages = { + [key: string]: string; +}; + +const allI18n: { en: LocalizationMessages; zh: LocalizationMessages } = { + en: { ...EN_REF_USER, ...EN_REF_Welcome }, + zh: { ...zhUser, ...zhWelcome } +}; + + +const msgs: { [index: string]: LocalizationMessages} = { + en: allI18n.en, + zh: allI18n.zh +} + + +let lang:string = 'en' // Infer language from browser if (navigator.language.startsWith('zh')) { lang = 'zh' } -export function t(key: keyof typeof EN_REF, variables?: { [index: string]: string }) { +export function t(key: keyof typeof allI18n.zh |keyof typeof allI18n.en, variables?: { [index: string]: string }) { if (variables) { - return msgs[lang][key].replace(/\${(.*?)}/g, (_, v) => variables[v]) + return msgs[lang][key].replace(/\${(.*?)}/g, (_:string, v: string | number) => variables[v]) } return msgs[lang][key] } From 45cf082bb97c2a5cd6ddedebbf37cf9408eb45c3 Mon Sep 17 00:00:00 2001 From: chiba Date: Wed, 6 Mar 2024 16:23:45 +0800 Subject: [PATCH 2/4] [F] FIX i18n.ts type --- AquaNet/src/libs/i18n.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AquaNet/src/libs/i18n.ts b/AquaNet/src/libs/i18n.ts index 8f3a8cca..da66272e 100644 --- a/AquaNet/src/libs/i18n.ts +++ b/AquaNet/src/libs/i18n.ts @@ -57,7 +57,7 @@ const allI18n: { en: LocalizationMessages; zh: LocalizationMessages } = { }; -const msgs: { [index: string]: LocalizationMessages} = { +const msgs: { [lang: string]: LocalizationMessages} = { en: allI18n.en, zh: allI18n.zh } @@ -70,7 +70,7 @@ if (navigator.language.startsWith('zh')) { lang = 'zh' } -export function t(key: keyof typeof allI18n.zh |keyof typeof allI18n.en, variables?: { [index: string]: string }) { +export function t(key: keyof LocalizationMessages, variables?: { [index: string]: string }) { if (variables) { return msgs[lang][key].replace(/\${(.*?)}/g, (_:string, v: string | number) => variables[v]) } From aa90b345116a8352991645f48d82f9e8f30c0c71 Mon Sep 17 00:00:00 2001 From: chiba Date: Wed, 6 Mar 2024 17:19:51 +0800 Subject: [PATCH 3/4] [F] FIX i18n.ts type --- AquaNet/src/libs/i18n.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/AquaNet/src/libs/i18n.ts b/AquaNet/src/libs/i18n.ts index da66272e..9531cf53 100644 --- a/AquaNet/src/libs/i18n.ts +++ b/AquaNet/src/libs/i18n.ts @@ -51,19 +51,21 @@ type LocalizationMessages = { [key: string]: string; }; -const allI18n: { en: LocalizationMessages; zh: LocalizationMessages } = { +type Lang = 'en' | 'zh' + +const allI18n: Record = { en: { ...EN_REF_USER, ...EN_REF_Welcome }, zh: { ...zhUser, ...zhWelcome } }; -const msgs: { [lang: string]: LocalizationMessages} = { +const msgs: Record = { en: allI18n.en, zh: allI18n.zh } -let lang:string = 'en' +let lang: Lang = 'en' // Infer language from browser if (navigator.language.startsWith('zh')) { From 40f700910a96859aed22e518327becb8d64da400 Mon Sep 17 00:00:00 2001 From: chiba Date: Wed, 6 Mar 2024 21:18:27 +0800 Subject: [PATCH 4/4] Update UseHome.svelte I18n support --- AquaNet/src/libs/i18n.ts | 26 ++++++++++++++++++++++++-- AquaNet/src/pages/UserHome.svelte | 25 +++++++++++++------------ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/AquaNet/src/libs/i18n.ts b/AquaNet/src/libs/i18n.ts index 9531cf53..73f1f1bd 100644 --- a/AquaNet/src/libs/i18n.ts +++ b/AquaNet/src/libs/i18n.ts @@ -1,5 +1,16 @@ const EN_REF_USER = { - 'TEST': 'TEST' + 'UseHome.ServerRank': 'Server Rank', + 'UseHome.Ratting':'DX Ratting', + 'UseHome.Statistics':'Statistics', + 'UseHome.Accuracy':'Accuracy', + 'UseHome.DXScore':'DX Score', + 'UseHome.PlayActivity':' Play Activity', + 'UseHome.Plays':'Plays', + 'UseHome.PlayTime':'Play Time', + 'UseHome.FirstSeen':'First Seen', + 'UseHome.LastSeen':'Last Seen', + 'UseHome.Vesion':'Last Version', + 'UseHome.RecentScores':'Recent Scores' } const EN_REF_Welcome = { 'back': 'Back', @@ -43,7 +54,18 @@ const zhWelcome ={ 'welcome.verification-failed': '验证失败:${message}。请重试', } const zhUser={ - 'test':'test' + 'UseHome.ServerRank':'服务器排名', + 'UseHome.Ratting':'DX B50分', + 'UseHome.Statistics':'统计数据', + 'UseHome.Accuracy':'准确度', + 'UseHome.DXScore':'DX 得分', + 'UseHome.PlayActivity':'游戏活动', + 'UseHome.Plays':'出勤次', + 'UseHome.PlayTime':'出勤时间', + 'UseHome.FirstSeen':'发现新大陆', + 'UseHome.LastSeen':'上次出勤', + 'UseHome.Version':'最新最热否', + 'UseHome.RecentScores':'我的战绩' } diff --git a/AquaNet/src/pages/UserHome.svelte b/AquaNet/src/pages/UserHome.svelte index b76d7c80..fbcf1b28 100644 --- a/AquaNet/src/pages/UserHome.svelte +++ b/AquaNet/src/pages/UserHome.svelte @@ -10,6 +10,7 @@ import { type GameName, getMult } from "../libs/scoring"; import StatusOverlays from "../components/StatusOverlays.svelte"; import Icon from "@iconify/svelte"; + import {t} from "../libs/i18n"; registerChart() @@ -73,17 +74,17 @@
-

{titleText} Statistics

+

{titleText} {t('UseHome.Statistics')}

- {game === 'mai2' ? 'DX Rating' : 'Rating'} + {game === 'mai2' ? t("UseHome.Ratting"): 'Rating'} {d.user.rating.toLocaleString()}
- Server Rank + {t('UseHome.ServerRank')} #{+d.user.serverRank.toLocaleString() + 1}
@@ -122,7 +123,7 @@
- Accuracy + {t('UseHome.Accuracy')} {(d.user.accuracy).toFixed(2)}%
@@ -142,7 +143,7 @@
- {game === 'mai2' ? 'DX Score' : 'Total Score'} + {game === 'mai2' ? t('UseHome.DXScore') : 'Total Score'} {d.user.totalScore.toLocaleString()}
@@ -150,33 +151,33 @@
-

Play Activity

+

{t('UseHome.PlayActivity')}

- Plays + {t("UseHome.Plays")} {d.user.plays}
- Play Time + {t('UseHome.PlayTime')} {(d.user.totalPlayTime / 60).toFixed(1)} hr
- First Seen + {t('UseHome.FirstSeen')} {moment(d.user.joined).format("YYYY-MM-DD")}
- Last Seen + {t('UseHome.LastSeen')} {moment(d.user.lastSeen).format("YYYY-MM-DD")}
- Last Version + {t('UseHome.Version')} {d.user.lastVersion}
@@ -184,7 +185,7 @@
-

Recent Scores

+

{t('UseHome.RecentScores')}

{#each d.recent as r, i}