mirror of
https://github.com/aljazceru/claude-code-viewer.git
synced 2025-12-18 13:54:19 +01:00
feat(i18n): support zh_CN (#51)
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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 && (
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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}`);
|
||||||
|
|||||||
@@ -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
@@ -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
2305
src/lib/i18n/locales/zh_CN/messages.json
Normal file
2305
src/lib/i18n/locales/zh_CN/messages.json
Normal file
File diff suppressed because it is too large
Load Diff
1
src/lib/i18n/locales/zh_CN/messages.ts
Normal file
1
src/lib/i18n/locales/zh_CN/messages.ts
Normal file
File diff suppressed because one or more lines are too long
@@ -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>;
|
||||||
|
|||||||
Reference in New Issue
Block a user