From 2f14cc76df3c875259d1d09282dc627df52cd2eb Mon Sep 17 00:00:00 2001 From: JackalEthen Date: Thu, 17 Sep 2026 12:15:17 +0800 Subject: [PATCH] feat(i18n): add Simplified Chinese (zh-Hans) localization - Full translation of 4 namespaces: common, settings, pages, phone - Migrate CrisisResources, TogetherApp, WorkApp to use i18n keys - Add EN i18n keys for crisis resources, activity labels, availability reasons - Fix TFn type to use i18next TFunction, add as never for dynamic template keys --- apps/web/src/components/CrisisResources.tsx | 11 +- apps/web/src/components/phone/TogetherApp.tsx | 11 +- apps/web/src/components/phone/WorkApp.tsx | 6 +- apps/web/src/i18n/locales.ts | 2 +- apps/web/src/i18n/locales/en/common.json | 17 + apps/web/src/i18n/locales/en/phone.json | 22 + apps/web/src/i18n/locales/zh-Hans/common.json | 561 +++++ apps/web/src/i18n/locales/zh-Hans/pages.json | 2073 +++++++++++++++++ apps/web/src/i18n/locales/zh-Hans/phone.json | 651 ++++++ .../src/i18n/locales/zh-Hans/settings.json | 38 + 10 files changed, 3379 insertions(+), 13 deletions(-) create mode 100644 apps/web/src/i18n/locales/zh-Hans/common.json create mode 100644 apps/web/src/i18n/locales/zh-Hans/pages.json create mode 100644 apps/web/src/i18n/locales/zh-Hans/phone.json create mode 100644 apps/web/src/i18n/locales/zh-Hans/settings.json diff --git a/apps/web/src/components/CrisisResources.tsx b/apps/web/src/components/CrisisResources.tsx index 4a37d00..32128fa 100644 --- a/apps/web/src/components/CrisisResources.tsx +++ b/apps/web/src/components/CrisisResources.tsx @@ -1,15 +1,20 @@ -import { CRISIS_RESOURCES, CRISIS_BLURB } from '@dsim/shared'; +import { useTranslation } from 'react-i18next'; + +type CrisisResource = { label: string; detail: string }; /** * Real-world crisis resources, shown to the PLAYER (not the fiction) — at the * tragic-outcomes opt-in and on a memorialized character's page. Calm and plain. */ export function CrisisResources({ className = '' }: { className?: string }) { + const { t } = useTranslation('common'); + const blurb = t('crisis.blurb'); + const resources = t('crisis.resources', { returnObjects: true }) as CrisisResource[]; return (
-

{CRISIS_BLURB}

+

{blurb}