diff --git a/README.en.md b/README.en.md index 7203d6e..7683db8 100644 --- a/README.en.md +++ b/README.en.md @@ -46,7 +46,7 @@ homepage ## Contribution Guide -See [CONTRIBUTING.md](docs/en-US/CONTRIBUTING.md) in the `docs` directory to learn how to participate in the project. +See [CONTRIBUTING.md](docs/en/CONTRIBUTING.md) in the `docs` directory to learn how to participate in the project. ## License diff --git a/README.md b/README.md index c20b6c9..373b908 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ homepage ## 贡献指南 -参见 `docs` 目录中的 [CONTRIBUTING.md](docs/zh-CN/CONTRIBUTING.md) 了解如何参与项目。 +参见 `docs` 目录中的 [CONTRIBUTING.md](docs/zh-Hans/CONTRIBUTING.md) 了解如何参与项目。 ## 许可 diff --git a/README.zh-Hant.md b/README.zh-Hant.md index b55b296..43f0500 100644 --- a/README.zh-Hant.md +++ b/README.zh-Hant.md @@ -46,7 +46,7 @@ homepage ## 貢獻指南 -參見 `docs` 目錄中的 [CONTRIBUTING.md](docs/zh-TW/CONTRIBUTING.md) 了解如何參與專案。 +參見 `docs` 目錄中的 [CONTRIBUTING.md](docs/zh-Hant/CONTRIBUTING.md) 了解如何參與專案。 ## 許可 diff --git a/data/en-US/about.json b/data/en/about.json similarity index 100% rename from data/en-US/about.json rename to data/en/about.json diff --git a/data/en-US/contributors.json b/data/en/contributors.json similarity index 100% rename from data/en-US/contributors.json rename to data/en/contributors.json diff --git a/data/en-US/index.json b/data/en/index.json similarity index 100% rename from data/en-US/index.json rename to data/en/index.json diff --git a/data/en-US/projects.json b/data/en/projects.json similarity index 100% rename from data/en-US/projects.json rename to data/en/projects.json diff --git a/data/en-US/sponsors.json b/data/en/sponsors.json similarity index 100% rename from data/en-US/sponsors.json rename to data/en/sponsors.json diff --git a/data/en-US/updates.json b/data/en/updates.json similarity index 100% rename from data/en-US/updates.json rename to data/en/updates.json diff --git a/data/en-US/updates/2023/starset-wiki-calls-for-contributions.md b/data/en/updates/2023/starset-wiki-calls-for-contributions.md similarity index 100% rename from data/en-US/updates/2023/starset-wiki-calls-for-contributions.md rename to data/en/updates/2023/starset-wiki-calls-for-contributions.md diff --git a/data/en-US/updates/2024/changes-about-our-social-profiles.md b/data/en/updates/2024/changes-about-our-social-profiles.md similarity index 100% rename from data/en-US/updates/2024/changes-about-our-social-profiles.md rename to data/en/updates/2024/changes-about-our-social-profiles.md diff --git a/data/en-US/updates/2024/starset-wiki-project-update-2024.md b/data/en/updates/2024/starset-wiki-project-update-2024.md similarity index 100% rename from data/en-US/updates/2024/starset-wiki-project-update-2024.md rename to data/en/updates/2024/starset-wiki-project-update-2024.md diff --git a/data/en-US/updates/2025/introducing-tss-rocks.md b/data/en/updates/2025/introducing-tss-rocks.md similarity index 100% rename from data/en-US/updates/2025/introducing-tss-rocks.md rename to data/en/updates/2025/introducing-tss-rocks.md diff --git a/data/en-US/updates/index/2023.json b/data/en/updates/index/2023.json similarity index 100% rename from data/en-US/updates/index/2023.json rename to data/en/updates/index/2023.json diff --git a/data/en-US/updates/index/2024.json b/data/en/updates/index/2024.json similarity index 100% rename from data/en-US/updates/index/2024.json rename to data/en/updates/index/2024.json diff --git a/data/en-US/updates/index/2025.json b/data/en/updates/index/2025.json similarity index 100% rename from data/en-US/updates/index/2025.json rename to data/en/updates/index/2025.json diff --git a/data/zh-CN/about.json b/data/zh-Hans/about.json similarity index 100% rename from data/zh-CN/about.json rename to data/zh-Hans/about.json diff --git a/data/zh-CN/contributors.json b/data/zh-Hans/contributors.json similarity index 100% rename from data/zh-CN/contributors.json rename to data/zh-Hans/contributors.json diff --git a/data/zh-CN/index.json b/data/zh-Hans/index.json similarity index 100% rename from data/zh-CN/index.json rename to data/zh-Hans/index.json diff --git a/data/zh-CN/projects.json b/data/zh-Hans/projects.json similarity index 100% rename from data/zh-CN/projects.json rename to data/zh-Hans/projects.json diff --git a/data/zh-CN/sponsors.json b/data/zh-Hans/sponsors.json similarity index 100% rename from data/zh-CN/sponsors.json rename to data/zh-Hans/sponsors.json diff --git a/data/zh-CN/updates.json b/data/zh-Hans/updates.json similarity index 100% rename from data/zh-CN/updates.json rename to data/zh-Hans/updates.json diff --git a/data/zh-CN/updates/2020/journal-2020q3.md b/data/zh-Hans/updates/2020/journal-2020q3.md similarity index 100% rename from data/zh-CN/updates/2020/journal-2020q3.md rename to data/zh-Hans/updates/2020/journal-2020q3.md diff --git a/data/zh-CN/updates/2021/disclaimer-about-bilibili-horizons-dmca.md b/data/zh-Hans/updates/2021/disclaimer-about-bilibili-horizons-dmca.md similarity index 100% rename from data/zh-CN/updates/2021/disclaimer-about-bilibili-horizons-dmca.md rename to data/zh-Hans/updates/2021/disclaimer-about-bilibili-horizons-dmca.md diff --git a/data/zh-CN/updates/2021/journal-2020q4.md b/data/zh-Hans/updates/2021/journal-2020q4.md similarity index 100% rename from data/zh-CN/updates/2021/journal-2020q4.md rename to data/zh-Hans/updates/2021/journal-2020q4.md diff --git a/data/zh-CN/updates/2021/one-year-anniversary.md b/data/zh-Hans/updates/2021/one-year-anniversary.md similarity index 100% rename from data/zh-CN/updates/2021/one-year-anniversary.md rename to data/zh-Hans/updates/2021/one-year-anniversary.md diff --git a/data/zh-CN/updates/2021/summary-202102.md b/data/zh-Hans/updates/2021/summary-202102.md similarity index 100% rename from data/zh-CN/updates/2021/summary-202102.md rename to data/zh-Hans/updates/2021/summary-202102.md diff --git a/data/zh-CN/updates/2021/summary-202108.md b/data/zh-Hans/updates/2021/summary-202108.md similarity index 100% rename from data/zh-CN/updates/2021/summary-202108.md rename to data/zh-Hans/updates/2021/summary-202108.md diff --git a/data/zh-CN/updates/2022/journal-2021h2.md b/data/zh-Hans/updates/2022/journal-2021h2.md similarity index 100% rename from data/zh-CN/updates/2022/journal-2021h2.md rename to data/zh-Hans/updates/2022/journal-2021h2.md diff --git a/data/zh-CN/updates/2023/10th-anniversary-special.md b/data/zh-Hans/updates/2023/10th-anniversary-special.md similarity index 100% rename from data/zh-CN/updates/2023/10th-anniversary-special.md rename to data/zh-Hans/updates/2023/10th-anniversary-special.md diff --git a/data/zh-CN/updates/2023/journal-2022.md b/data/zh-Hans/updates/2023/journal-2022.md similarity index 100% rename from data/zh-CN/updates/2023/journal-2022.md rename to data/zh-Hans/updates/2023/journal-2022.md diff --git a/data/zh-CN/updates/2023/lyrics-translation-completed.md b/data/zh-Hans/updates/2023/lyrics-translation-completed.md similarity index 100% rename from data/zh-CN/updates/2023/lyrics-translation-completed.md rename to data/zh-Hans/updates/2023/lyrics-translation-completed.md diff --git a/data/zh-CN/updates/2023/summary-202310.md b/data/zh-Hans/updates/2023/summary-202310.md similarity index 100% rename from data/zh-CN/updates/2023/summary-202310.md rename to data/zh-Hans/updates/2023/summary-202310.md diff --git a/data/zh-CN/updates/2024/journal-2023.md b/data/zh-Hans/updates/2024/journal-2023.md similarity index 100% rename from data/zh-CN/updates/2024/journal-2023.md rename to data/zh-Hans/updates/2024/journal-2023.md diff --git a/data/zh-CN/updates/2025/introducing-tss-rocks.md b/data/zh-Hans/updates/2025/introducing-tss-rocks.md similarity index 100% rename from data/zh-CN/updates/2025/introducing-tss-rocks.md rename to data/zh-Hans/updates/2025/introducing-tss-rocks.md diff --git a/data/zh-CN/updates/2025/journal-2024.md b/data/zh-Hans/updates/2025/journal-2024.md similarity index 100% rename from data/zh-CN/updates/2025/journal-2024.md rename to data/zh-Hans/updates/2025/journal-2024.md diff --git a/data/zh-CN/updates/2025/starset-mirror-now-part-of-wholetrans.md b/data/zh-Hans/updates/2025/starset-mirror-now-part-of-wholetrans.md similarity index 100% rename from data/zh-CN/updates/2025/starset-mirror-now-part-of-wholetrans.md rename to data/zh-Hans/updates/2025/starset-mirror-now-part-of-wholetrans.md diff --git a/data/zh-CN/updates/index/2020.json b/data/zh-Hans/updates/index/2020.json similarity index 100% rename from data/zh-CN/updates/index/2020.json rename to data/zh-Hans/updates/index/2020.json diff --git a/data/zh-CN/updates/index/2021.json b/data/zh-Hans/updates/index/2021.json similarity index 100% rename from data/zh-CN/updates/index/2021.json rename to data/zh-Hans/updates/index/2021.json diff --git a/data/zh-CN/updates/index/2022.json b/data/zh-Hans/updates/index/2022.json similarity index 100% rename from data/zh-CN/updates/index/2022.json rename to data/zh-Hans/updates/index/2022.json diff --git a/data/zh-CN/updates/index/2023.json b/data/zh-Hans/updates/index/2023.json similarity index 100% rename from data/zh-CN/updates/index/2023.json rename to data/zh-Hans/updates/index/2023.json diff --git a/data/zh-CN/updates/index/2024.json b/data/zh-Hans/updates/index/2024.json similarity index 100% rename from data/zh-CN/updates/index/2024.json rename to data/zh-Hans/updates/index/2024.json diff --git a/data/zh-CN/updates/index/2025.json b/data/zh-Hans/updates/index/2025.json similarity index 100% rename from data/zh-CN/updates/index/2025.json rename to data/zh-Hans/updates/index/2025.json diff --git a/data/zh-TW/about.json b/data/zh-Hant/about.json similarity index 100% rename from data/zh-TW/about.json rename to data/zh-Hant/about.json diff --git a/data/zh-TW/contributors.json b/data/zh-Hant/contributors.json similarity index 100% rename from data/zh-TW/contributors.json rename to data/zh-Hant/contributors.json diff --git a/data/zh-TW/index.json b/data/zh-Hant/index.json similarity index 100% rename from data/zh-TW/index.json rename to data/zh-Hant/index.json diff --git a/data/zh-TW/projects.json b/data/zh-Hant/projects.json similarity index 100% rename from data/zh-TW/projects.json rename to data/zh-Hant/projects.json diff --git a/data/zh-TW/sponsors.json b/data/zh-Hant/sponsors.json similarity index 100% rename from data/zh-TW/sponsors.json rename to data/zh-Hant/sponsors.json diff --git a/data/zh-TW/updates.json b/data/zh-Hant/updates.json similarity index 100% rename from data/zh-TW/updates.json rename to data/zh-Hant/updates.json diff --git a/data/zh-TW/updates/2020/journal-2020q3.md b/data/zh-Hant/updates/2020/journal-2020q3.md similarity index 100% rename from data/zh-TW/updates/2020/journal-2020q3.md rename to data/zh-Hant/updates/2020/journal-2020q3.md diff --git a/data/zh-TW/updates/2021/disclaimer-about-bilibili-horizons-dmca.md b/data/zh-Hant/updates/2021/disclaimer-about-bilibili-horizons-dmca.md similarity index 100% rename from data/zh-TW/updates/2021/disclaimer-about-bilibili-horizons-dmca.md rename to data/zh-Hant/updates/2021/disclaimer-about-bilibili-horizons-dmca.md diff --git a/data/zh-TW/updates/2021/journal-2020q4.md b/data/zh-Hant/updates/2021/journal-2020q4.md similarity index 100% rename from data/zh-TW/updates/2021/journal-2020q4.md rename to data/zh-Hant/updates/2021/journal-2020q4.md diff --git a/data/zh-TW/updates/2021/one-year-anniversary.md b/data/zh-Hant/updates/2021/one-year-anniversary.md similarity index 100% rename from data/zh-TW/updates/2021/one-year-anniversary.md rename to data/zh-Hant/updates/2021/one-year-anniversary.md diff --git a/data/zh-TW/updates/2021/summary-202102.md b/data/zh-Hant/updates/2021/summary-202102.md similarity index 100% rename from data/zh-TW/updates/2021/summary-202102.md rename to data/zh-Hant/updates/2021/summary-202102.md diff --git a/data/zh-TW/updates/2021/summary-202108.md b/data/zh-Hant/updates/2021/summary-202108.md similarity index 100% rename from data/zh-TW/updates/2021/summary-202108.md rename to data/zh-Hant/updates/2021/summary-202108.md diff --git a/data/zh-TW/updates/2022/journal-2021h2.md b/data/zh-Hant/updates/2022/journal-2021h2.md similarity index 100% rename from data/zh-TW/updates/2022/journal-2021h2.md rename to data/zh-Hant/updates/2022/journal-2021h2.md diff --git a/data/zh-TW/updates/2023/10th-anniversary-special.md b/data/zh-Hant/updates/2023/10th-anniversary-special.md similarity index 100% rename from data/zh-TW/updates/2023/10th-anniversary-special.md rename to data/zh-Hant/updates/2023/10th-anniversary-special.md diff --git a/data/zh-TW/updates/2023/journal-2022.md b/data/zh-Hant/updates/2023/journal-2022.md similarity index 100% rename from data/zh-TW/updates/2023/journal-2022.md rename to data/zh-Hant/updates/2023/journal-2022.md diff --git a/data/zh-TW/updates/2023/lyrics-translation-completed.md b/data/zh-Hant/updates/2023/lyrics-translation-completed.md similarity index 100% rename from data/zh-TW/updates/2023/lyrics-translation-completed.md rename to data/zh-Hant/updates/2023/lyrics-translation-completed.md diff --git a/data/zh-TW/updates/2023/summary-202310.md b/data/zh-Hant/updates/2023/summary-202310.md similarity index 100% rename from data/zh-TW/updates/2023/summary-202310.md rename to data/zh-Hant/updates/2023/summary-202310.md diff --git a/data/zh-TW/updates/2024/journal-2023.md b/data/zh-Hant/updates/2024/journal-2023.md similarity index 100% rename from data/zh-TW/updates/2024/journal-2023.md rename to data/zh-Hant/updates/2024/journal-2023.md diff --git a/data/zh-TW/updates/2025/introducing-tss-rocks.md b/data/zh-Hant/updates/2025/introducing-tss-rocks.md similarity index 100% rename from data/zh-TW/updates/2025/introducing-tss-rocks.md rename to data/zh-Hant/updates/2025/introducing-tss-rocks.md diff --git a/data/zh-TW/updates/2025/journal-2024.md b/data/zh-Hant/updates/2025/journal-2024.md similarity index 100% rename from data/zh-TW/updates/2025/journal-2024.md rename to data/zh-Hant/updates/2025/journal-2024.md diff --git a/data/zh-TW/updates/2025/starset-mirror-now-part-of-wholetrans.md b/data/zh-Hant/updates/2025/starset-mirror-now-part-of-wholetrans.md similarity index 100% rename from data/zh-TW/updates/2025/starset-mirror-now-part-of-wholetrans.md rename to data/zh-Hant/updates/2025/starset-mirror-now-part-of-wholetrans.md diff --git a/data/zh-TW/updates/index/2020.json b/data/zh-Hant/updates/index/2020.json similarity index 100% rename from data/zh-TW/updates/index/2020.json rename to data/zh-Hant/updates/index/2020.json diff --git a/data/zh-TW/updates/index/2021.json b/data/zh-Hant/updates/index/2021.json similarity index 100% rename from data/zh-TW/updates/index/2021.json rename to data/zh-Hant/updates/index/2021.json diff --git a/data/zh-TW/updates/index/2022.json b/data/zh-Hant/updates/index/2022.json similarity index 100% rename from data/zh-TW/updates/index/2022.json rename to data/zh-Hant/updates/index/2022.json diff --git a/data/zh-TW/updates/index/2023.json b/data/zh-Hant/updates/index/2023.json similarity index 100% rename from data/zh-TW/updates/index/2023.json rename to data/zh-Hant/updates/index/2023.json diff --git a/data/zh-TW/updates/index/2024.json b/data/zh-Hant/updates/index/2024.json similarity index 100% rename from data/zh-TW/updates/index/2024.json rename to data/zh-Hant/updates/index/2024.json diff --git a/data/zh-TW/updates/index/2025.json b/data/zh-Hant/updates/index/2025.json similarity index 100% rename from data/zh-TW/updates/index/2025.json rename to data/zh-Hant/updates/index/2025.json diff --git a/docs/README.md b/docs/README.md index 5c0e54e..df9788c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,3 @@ -- [简体中文](./zh-CN/) -- [繁體中文](./zh-TW/) -- [English](./en-US/) +- [简体中文](./zh-Hans/) +- [繁體中文](./zh-Hant/) +- [English](./en/) diff --git a/docs/en-US/CONTRIBUTING.md b/docs/en/CONTRIBUTING.md similarity index 100% rename from docs/en-US/CONTRIBUTING.md rename to docs/en/CONTRIBUTING.md diff --git a/docs/zh-CN/CONTRIBUTING.md b/docs/zh-Hans/CONTRIBUTING.md similarity index 100% rename from docs/zh-CN/CONTRIBUTING.md rename to docs/zh-Hans/CONTRIBUTING.md diff --git a/docs/zh-TW/CONTRIBUTING.md b/docs/zh-Hant/CONTRIBUTING.md similarity index 100% rename from docs/zh-TW/CONTRIBUTING.md rename to docs/zh-Hant/CONTRIBUTING.md diff --git a/scripts/generate-rss.ts b/scripts/generate-rss.ts index 4c56dbd..81d9a8d 100644 --- a/scripts/generate-rss.ts +++ b/scripts/generate-rss.ts @@ -14,22 +14,22 @@ interface LanguageConfig { const LANGUAGES: LanguageConfig[] = [ { - code: 'en-US', - dataDir: 'en-US', - title: 'STARSET Mirror Site Updates', - description: 'Latest updates from STARSET Mirror Site' + code: 'en', + dataDir: 'en', + title: 'Starset Mirror - Updates', + description: 'Latest updates from Starset Mirror' }, { - code: 'zh-CN', - dataDir: 'zh-CN', - title: 'STARSET Mirror 项目动态', - description: 'STARSET Mirror 最新动态' + code: 'zh-Hans', + dataDir: 'zh-Hans', + title: 'Starset Mirror - 更新', + description: 'Starset Mirror 的最新更新' }, { code: 'zh-Hant', - dataDir: 'zh-TW', - title: 'STARSET Mirror 專案動态', - description: 'STARSET Mirror 最新動態' + dataDir: 'zh-Hant', + title: 'Starset Mirror - 更新', + description: 'Starset Mirror 的最新更新' } ]; diff --git a/scripts/generate-sitemap.ts b/scripts/generate-sitemap.ts index 0c1ce36..db8492e 100644 --- a/scripts/generate-sitemap.ts +++ b/scripts/generate-sitemap.ts @@ -6,7 +6,7 @@ import xml2js from 'xml2js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const LANGUAGES = ['en-US', 'zh-CN', 'zh-TW']; +const LANGUAGES = ['en', 'zh-Hans', 'zh-Hant']; const BASE_URL = 'mirror.starset.fans'; interface Update { diff --git a/scripts/generate-update-sitemaps.js b/scripts/generate-update-sitemaps.js index bc4aeed..1126697 100644 --- a/scripts/generate-update-sitemaps.js +++ b/scripts/generate-update-sitemaps.js @@ -6,7 +6,7 @@ import xml2js from 'xml2js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const LANGUAGES = ['en-US', 'zh-CN', 'zh-TW']; +const LANGUAGES = ['en', 'zh-Hans', 'zh-Hant']; const BASE_URL = 'starset.wiki'; // Replace with your actual domain async function getYearlyIndices(lang) { diff --git a/src/components/About.tsx b/src/components/About.tsx index ca5d26b..1472682 100644 --- a/src/components/About.tsx +++ b/src/components/About.tsx @@ -4,22 +4,24 @@ import iconMap from '../utils/iconMap'; const About = () => { const { t } = useTranslation(); - const aboutData = t('data.about', { returnObjects: true }); - const socialLinks = t('social.links', { returnObjects: true }); + const aboutData = t('data.about', { returnObjects: true }) || {}; + const socialLinks = t('social.links', { returnObjects: true }) || []; + + if (!aboutData) return null; return (

{t('about.title')}

- {aboutData.content.intro.map((paragraph: string, index: number) => ( + {aboutData.content?.intro?.map((paragraph: string, index: number) => (

{paragraph}

))}
- {aboutData.stats.map((stat: { value: string; label: string }, index: number) => ( + {aboutData.stats?.map((stat: { value: string; label: string }, index: number) => (

{stat.value}

{stat.label}

@@ -27,7 +29,7 @@ const About = () => { ))}
- {aboutData.content.workScope && ( + {aboutData.content?.workScope && (

工作范围

    @@ -36,7 +38,7 @@ const About = () => { {index + 1} - {item} + {item} ))}
@@ -67,14 +69,14 @@ const About = () => {

{t('about.join.title')}

- {aboutData.content.contact.description} + {aboutData.content?.contact?.description}

diff --git a/src/components/Comments.tsx b/src/components/Comments.tsx index 0f6fe37..183b282 100644 --- a/src/components/Comments.tsx +++ b/src/components/Comments.tsx @@ -1,5 +1,6 @@ import { useCallback, useRef, useEffect } from 'react' import { useLocation } from 'react-router-dom' +import { useTranslation } from 'react-i18next' import 'artalk/dist/Artalk.css' import Artalk from 'artalk' @@ -9,6 +10,7 @@ interface CommentsProps { const Comments = ({ title }: CommentsProps) => { const { pathname } = useLocation() + const { t } = useTranslation() const artalkRef = useRef() const containerRef = useRef(null) diff --git a/src/components/Contributors.tsx b/src/components/Contributors.tsx index f9aabe2..7059b00 100644 --- a/src/components/Contributors.tsx +++ b/src/components/Contributors.tsx @@ -23,7 +23,8 @@ interface Contributor { const Contributors: React.FC = () => { const { t } = useTranslation(); - const members = t('data.contributors.members', { returnObjects: true }) as Contributor[]; + const contributorsData = t('data.contributors', { returnObjects: true }) || {}; + const members = Array.isArray(contributorsData.members) ? contributorsData.members : []; // Fisher-Yates shuffle algorithm const shuffleArray = (array: T[]): T[] => { diff --git a/src/components/LanguageSwitcher.tsx b/src/components/LanguageSwitcher.tsx index 12f94ad..7570ed9 100644 --- a/src/components/LanguageSwitcher.tsx +++ b/src/components/LanguageSwitcher.tsx @@ -8,9 +8,9 @@ const LanguageSwitcher = () => { const menuRef = useRef(null); const languages = [ - { code: 'zh-CN', name: '简体中文' }, - { code: 'zh-TW', name: '繁體中文' }, - { code: 'en-US', name: 'English' } + { code: 'zh-Hans', name: '简体中文' }, + { code: 'zh-Hant', name: '繁體中文' }, + { code: 'en', name: 'English' } ]; useEffect(() => { diff --git a/src/components/Projects.tsx b/src/components/Projects.tsx index 03a66f3..6670df8 100644 --- a/src/components/Projects.tsx +++ b/src/components/Projects.tsx @@ -13,18 +13,19 @@ interface Project { const Projects = () => { const { t } = useTranslation(); - const projects = t('data.projects.projects', { returnObjects: true }) as Project[]; + const projectsData = t('data.projects', { returnObjects: true }) || {}; + const projects = Array.isArray(projectsData.projects) ? projectsData.projects : []; const [selectedTags, setSelectedTags] = useState([]); // 获取所有可用的标签 const allTags = Array.from( - new Set(projects.flatMap(project => project.tags)) + new Set(projects.flatMap(project => project.tags || [])) ); // 根据选中的标签筛选项目 const filteredProjects = selectedTags.length > 0 ? projects.filter(project => - selectedTags.every(tag => project.tags.includes(tag)) + selectedTags.every(tag => (project.tags || []).includes(tag)) ) : projects; @@ -119,7 +120,7 @@ const Projects = () => { {/* 标签区域固定高度 */}
- {project.tags.map((tag) => ( + {(project.tags || []).map((tag) => (
)} -

{sponsor.nickname}

+

{getMessage(sponsor)}

{sponsor.year} diff --git a/src/components/Timeline.tsx b/src/components/Timeline.tsx index 07be642..582f08c 100644 --- a/src/components/Timeline.tsx +++ b/src/components/Timeline.tsx @@ -62,6 +62,7 @@ const Pagination: React.FC = ({ const Timeline = () => { const { t, i18n } = useTranslation(); const LANGUAGE_CODE_MAP: Record = { + 'zh-CN': 'zh-Hans', 'zh-TW': 'zh-Hant' }; const [searchParams, setSearchParams] = useSearchParams(); diff --git a/src/components/TranslationBackground.tsx b/src/components/TranslationBackground.tsx index 8ff1609..9c29bc6 100644 --- a/src/components/TranslationBackground.tsx +++ b/src/components/TranslationBackground.tsx @@ -36,10 +36,33 @@ const TranslationBackground = () => { setIsVisible(true); }, []); + const getLanguageName = (language: string) => { + switch (language) { + case 'zh-Hans': + return '简体中文'; + case 'zh-Hant': + return '繁體中文'; + default: + return 'English'; + } + }; + + const getTranslationName = (language: string) => { + switch (language) { + case 'zh-Hans': + case 'zh-Hant': + return '翻译'; + default: + return 'Translation'; + } + }; + const getMainText = (translation: typeof translations.translations[0]) => { switch (i18n.language) { + case 'zh-Hans': case 'zh-CN': return translation.zh_CN; + case 'zh-Hant': case 'zh-TW': return translation.zh_TW; default: @@ -49,7 +72,9 @@ const TranslationBackground = () => { const getSecondaryText = (translation: typeof translations.translations[0]) => { switch (i18n.language) { + case 'zh-Hans': case 'zh-CN': + case 'zh-Hant': case 'zh-TW': return translation.en; default: diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 50626e6..a0d1e58 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -3,42 +3,42 @@ import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; // 导入翻译文件 -import zhCNTranslation from '../../data/zh-CN/index.json'; -import zhTWTranslation from '../../data/zh-TW/index.json'; -import enUSTranslation from '../../data/en-US/index.json'; +import zhHansTranslation from '../../data/zh-Hans/index.json'; +import zhHantTranslation from '../../data/zh-Hant/index.json'; +import enTranslation from '../../data/en/index.json'; // 导入数据文件 -import zhCNAbout from '../../data/zh-CN/about.json'; -import zhCNProjects from '../../data/zh-CN/projects.json'; -import zhCNContributors from '../../data/zh-CN/contributors.json'; -import zhCNUpdates from '../../data/zh-CN/updates.json'; +import zhHansAbout from '../../data/zh-Hans/about.json'; +import zhHansProjects from '../../data/zh-Hans/projects.json'; +import zhHansContributors from '../../data/zh-Hans/contributors.json'; +import zhHansUpdates from '../../data/zh-Hans/updates.json'; -import zhTWAbout from '../../data/zh-TW/about.json'; -import zhTWProjects from '../../data/zh-TW/projects.json'; -import zhTWContributors from '../../data/zh-TW/contributors.json'; -import zhTWUpdates from '../../data/zh-TW/updates.json'; +import zhHantAbout from '../../data/zh-Hant/about.json'; +import zhHantProjects from '../../data/zh-Hant/projects.json'; +import zhHantContributors from '../../data/zh-Hant/contributors.json'; +import zhHantUpdates from '../../data/zh-Hant/updates.json'; -import enUSAbout from '../../data/en-US/about.json'; -import enUSProjects from '../../data/en-US/projects.json'; -import enUSContributors from '../../data/en-US/contributors.json'; -import enUSUpdates from '../../data/en-US/updates.json'; +import enAbout from '../../data/en/about.json'; +import enProjects from '../../data/en/projects.json'; +import enContributors from '../../data/en/contributors.json'; +import enUpdates from '../../data/en/updates.json'; i18n .use(LanguageDetector) .use(initReactI18next) .init({ resources: { - 'zh-CN': { - translation: zhCNTranslation.translation + 'zh-Hans': { + translation: zhHansTranslation.translation }, - 'zh-TW': { - translation: zhTWTranslation.translation + 'zh-Hant': { + translation: zhHantTranslation.translation }, - 'en-US': { - translation: enUSTranslation.translation + 'en': { + translation: enTranslation.translation } }, - fallbackLng: 'zh-CN', + fallbackLng: 'zh-Hans', interpolation: { escapeValue: false, }, @@ -48,30 +48,30 @@ i18n }); // 添加数据命名空间 -i18n.addResourceBundle('zh-CN', 'translation', { +i18n.addResourceBundle('zh-Hans', 'translation', { data: { - about: zhCNAbout, - projects: zhCNProjects, - contributors: zhCNContributors, - updates: zhCNUpdates + about: zhHansAbout, + projects: zhHansProjects, + contributors: zhHansContributors, + updates: zhHansUpdates } }, true, true); -i18n.addResourceBundle('zh-TW', 'translation', { +i18n.addResourceBundle('zh-Hant', 'translation', { data: { - about: zhTWAbout, - projects: zhTWProjects, - contributors: zhTWContributors, - updates: zhTWUpdates + about: zhHantAbout, + projects: zhHantProjects, + contributors: zhHantContributors, + updates: zhHantUpdates } }, true, true); -i18n.addResourceBundle('en-US', 'translation', { +i18n.addResourceBundle('en', 'translation', { data: { - about: enUSAbout, - projects: enUSProjects, - contributors: enUSContributors, - updates: enUSUpdates + about: enAbout, + projects: enProjects, + contributors: enContributors, + updates: enUpdates } }, true, true);