feat: add Chinese translations

This commit is contained in:
2026-08-23 11:58:02 +08:00
parent 02b367fcaa
commit 5a8a478386
10 changed files with 12777 additions and 8 deletions

View File

@@ -60,3 +60,7 @@ pnpm-debug.log
# Cloud compose (separate deployment) # Cloud compose (separate deployment)
cloud/ cloud/
# Local temporary caches
.pnpm-store
v8-compile-cache-0

5
.gitignore vendored
View File

@@ -4,6 +4,9 @@
node_modules node_modules
.pnp .pnp
.pnp.js .pnp.js
.pnpm/
.pnpm-store/
v8-compile-cache-0/
# testing # testing
coverage coverage
@@ -58,4 +61,4 @@ i18n.cache
# local scripts # local scripts
scripts/ scripts/
.claude .claude

View File

@@ -2,7 +2,7 @@
"version": "1.10", "version": "1.10",
"locale": { "locale": {
"source": "en", "source": "en",
"targets": ["fr", "de", "es", "it", "nl", "ru", "pl", "pt-BR"] "targets": ["fr", "de", "es", "it", "nl", "ru", "pl", "pt-BR", "zh-CN"]
}, },
"buckets": { "buckets": {
"json": { "json": {

View File

@@ -3,7 +3,7 @@ import { formatter } from "@lingui/format-json";
export default defineConfig({ export default defineConfig({
locales: ["en", "fr", "de", "es", "it", "nl", "ru", "pl", "pt-BR"], locales: ["en", "fr", "de", "es", "it", "nl", "ru", "pl", "pt-BR", "zh-CN"],
sourceLocale: "en", sourceLocale: "en",
catalogs: [ catalogs: [
{ {

View File

@@ -1,6 +1,6 @@
import type { Locale as DateFnsLocale } from "date-fns"; import type { Locale as DateFnsLocale } from "date-fns";
import { useLingui } from "@lingui/react"; import { useLingui } from "@lingui/react";
import { de, enGB, es, fr, it, nl, pl, ptBR, ru } from "date-fns/locale"; import { de, enGB, es, fr, it, nl, pl, ptBR, ru, zhCN } from "date-fns/locale";
import type { Locale } from "~/locales"; import type { Locale } from "~/locales";
import { useLinguiContext } from "~/providers/lingui"; import { useLinguiContext } from "~/providers/lingui";
@@ -20,6 +20,7 @@ export function useLocalisation() {
ru, ru,
pl, pl,
ptbr: ptBR, ptbr: ptBR,
"zh-CN": zhCN,
}; };
const currentDateLocale = dateLocaleMap[locale] ?? enGB; const currentDateLocale = dateLocaleMap[locale] ?? enGB;

View File

@@ -7,7 +7,8 @@ export const locales = [
"nl", "nl",
"ru", "ru",
"pl", "pl",
"ptbr" "ptbr",
"zh-CN",
] as const; ] as const;
export type Locale = (typeof locales)[number]; export type Locale = (typeof locales)[number];
@@ -24,4 +25,5 @@ export const localeNames: Record<Locale, string> = {
ru: "Русский", ru: "Русский",
pl: "Polski", pl: "Polski",
ptbr: "Português", ptbr: "Português",
"zh-CN": "简体中文",
}; };

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -35,10 +35,31 @@ function detectBrowserLocale(availableLocales: readonly string[]): Locale {
const browserLanguages = navigator.languages || [navigator.language]; const browserLanguages = navigator.languages || [navigator.language];
for (const browserLang of browserLanguages) { for (const browserLang of browserLanguages) {
const langCode = browserLang.split("-")[0]; const normalizedLocale = browserLang.toLowerCase();
const exactLocale = availableLocales.find(
(availableLocale) => availableLocale.toLowerCase() === normalizedLocale,
);
if (langCode && availableLocales.includes(langCode.toLowerCase())) { if (exactLocale) {
return langCode.toLowerCase() as Locale; return exactLocale as Locale;
}
const languageCode = normalizedLocale.split("-")[0];
if (languageCode === "zh" && availableLocales.includes("zh-CN")) {
return "zh-CN";
}
if (languageCode === "pt" && availableLocales.includes("ptbr")) {
return "ptbr";
}
const baseLocale = availableLocales.find(
(availableLocale) => availableLocale.toLowerCase() === languageCode,
);
if (baseLocale) {
return baseLocale as Locale;
} }
} }

View File

@@ -24,6 +24,8 @@ const loadMessages = async (locale: Locale) => {
return (await import("~/locales/pl/messages")).messages; return (await import("~/locales/pl/messages")).messages;
case "ptbr": case "ptbr":
return (await import("~/locales/ptbr/messages")).messages; return (await import("~/locales/ptbr/messages")).messages;
case "zh-CN":
return (await import("~/locales/zh-CN/messages")).messages;
default: default:
return enMessages; return enMessages;
} }