feat(i18n): support zh_CN (#51)

This commit is contained in:
scarletsky
2025-11-03 11:26:09 +08:00
committed by GitHub
parent a501a55ae4
commit de3d43b70e
11 changed files with 2340 additions and 5 deletions

View File

@@ -3,7 +3,7 @@ import { formatter } from "@lingui/format-json";
import type { SupportedLocale } from "./src/lib/i18n/schema"; import type { SupportedLocale } from "./src/lib/i18n/schema";
const config = defineConfig({ const config = defineConfig({
locales: ["ja", "en"] satisfies SupportedLocale[], locales: ["ja", "en", "zh_CN"] satisfies SupportedLocale[],
sourceLocale: "en", sourceLocale: "en",
fallbackLocales: { fallbackLocales: {
default: "en", default: "en",

View File

@@ -254,6 +254,9 @@ export const SettingsControls: FC<SettingsControlsProps> = ({
<SelectItem value="en"> <SelectItem value="en">
<Trans id="settings.locale.en" /> <Trans id="settings.locale.en" />
</SelectItem> </SelectItem>
<SelectItem value="zh_CN">
<Trans id="settings.locale.zh_CN" />
</SelectItem>
</SelectContent> </SelectContent>
</Select> </Select>
{showDescriptions && ( {showDescriptions && (

View File

@@ -1,6 +1,7 @@
import { format } from "date-fns"; import { format } from "date-fns";
import { enUS } from "date-fns/locale/en-US"; import { enUS } from "date-fns/locale/en-US";
import { ja } from "date-fns/locale/ja"; import { ja } from "date-fns/locale/ja";
import { zhCN } from "date-fns/locale/zh-CN";
import type { SupportedLocale } from "../i18n/schema"; import type { SupportedLocale } from "../i18n/schema";
export const convertDateFnsLocale = (locale: SupportedLocale) => { export const convertDateFnsLocale = (locale: SupportedLocale) => {
@@ -9,6 +10,8 @@ export const convertDateFnsLocale = (locale: SupportedLocale) => {
return ja; return ja;
case "en": case "en":
return enUS; return enUS;
case "zh_CN":
return zhCN;
default: default:
locale satisfies never; locale satisfies never;
return enUS; return enUS;
@@ -49,6 +52,15 @@ export const formatLocaleDate = (
case "time": case "time":
return "MM/dd/yyyy HH:mm"; return "MM/dd/yyyy HH:mm";
} }
} else if (locale === "zh_CN") {
switch (target) {
case "month":
return "yyyy年M月";
case "day":
return "yyyy年M月d日";
case "time":
return "yyyy年M月d日 HH:mm";
}
} }
// default // default
switch (target) { switch (target) {

View File

@@ -1,7 +1,7 @@
import { i18n } from "@lingui/core"; import { i18n } from "@lingui/core";
import type { SupportedLocale } from "./schema"; import type { SupportedLocale } from "./schema";
export const locales: SupportedLocale[] = ["ja", "en"]; export const locales: SupportedLocale[] = ["ja", "en", "zh_CN"];
const importMessages = async (locale: SupportedLocale) => { const importMessages = async (locale: SupportedLocale) => {
switch (locale) { switch (locale) {
@@ -9,6 +9,8 @@ const importMessages = async (locale: SupportedLocale) => {
return import("./locales/ja/messages"); return import("./locales/ja/messages");
case "en": case "en":
return import("./locales/en/messages"); return import("./locales/en/messages");
case "zh_CN":
return import("./locales/zh_CN/messages");
default: default:
locale satisfies never; locale satisfies never;
throw new Error(`Unsupported locale: ${locale}`); throw new Error(`Unsupported locale: ${locale}`);

View File

@@ -303,6 +303,12 @@
"origin": [["src/components/SettingsControls.tsx", 255]], "origin": [["src/components/SettingsControls.tsx", 255]],
"translation": "English" "translation": "English"
}, },
"settings.locale.zh_CN": {
"placeholders": {},
"comments": [],
"origin": [["src/components/SettingsControls.tsx", 258]],
"translation": "Chinese (Simplified)"
},
"settings.locale.description": { "settings.locale.description": {
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],

File diff suppressed because one or more lines are too long

View File

@@ -303,6 +303,12 @@
"origin": [["src/components/SettingsControls.tsx", 255]], "origin": [["src/components/SettingsControls.tsx", 255]],
"translation": "English" "translation": "English"
}, },
"settings.locale.zh_CN": {
"placeholders": {},
"comments": [],
"origin": [["src/components/SettingsControls.tsx", 258]],
"translation": "中国語(簡体字)"
},
"settings.locale.description": { "settings.locale.description": {
"placeholders": {}, "placeholders": {},
"comments": [], "comments": [],

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
import z from "zod"; import z from "zod";
export const localeSchema = z.enum(["ja", "en"]); export const localeSchema = z.enum(["ja", "en", "zh_CN"]);
export type SupportedLocale = z.infer<typeof localeSchema>; export type SupportedLocale = z.infer<typeof localeSchema>;