diff --git a/src/app/[lang]/components/menu/content.tsx b/src/app/[lang]/components/menu/content.tsx index fabc1a25..21019e72 100644 --- a/src/app/[lang]/components/menu/content.tsx +++ b/src/app/[lang]/components/menu/content.tsx @@ -73,7 +73,7 @@ export function Content({ href: `/${lang}`, }, { - title: dict.menu.auhtor, + title: dict.menu.author, label: {authorCount}, icon: UserRound, variant: /^(\/author)/.test(pathname) ? "default" : "ghost", @@ -93,13 +93,6 @@ export function Content({ variant: /^(\/tag)/.test(pathname) ? "default" : "ghost", href: `/${lang}/tag`, }, - // { - // title: dict.menu.print, - // icon: Printer, - // label: , - // variant: /^(\/print)/.test(pathname) ? "default" : "ghost", - // href: `/tools/print`, - // }, ]} /> @@ -138,7 +131,7 @@ export function Content({

{dict.menu.language}

-
+
diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx index 3654faf0..e2323de1 100644 --- a/src/components/ui/select.tsx +++ b/src/components/ui/select.tsx @@ -118,7 +118,7 @@ const SelectItem = React.forwardRef< import("./zh-Hant.json").then((module) => module.default), "zh-Hans": () => import("./zh-Hans.json").then((module) => module.default), en: () => import("./en.json").then((module) => module.default), + ja: () => import("./ja.json").then((module) => module.default), + ko: () => import("./ko.json").then((module) => module.default), }; export type Locale = (typeof locales)[number]; @@ -14,12 +16,14 @@ export type Locale = (typeof locales)[number]; * 生成多语言 meta hreflang 标签 */ export const getMetaDataAlternates = (suffix: string, lang: Locale) => { + const languages: Record = {}; + + for (const locale of locales) { + languages[locale] = `/${locale}${suffix}`; + } + return { - languages: { - "zh-Hans": `/zh-Hans${suffix}`, - "zh-Hant": `/zh-Hant${suffix}`, - en: `/en${suffix}`, - }, + languages, canonical: `/${lang}${suffix}`, }; }; diff --git a/src/dictionaries/ja.json b/src/dictionaries/ja.json new file mode 100644 index 00000000..ca84fcf7 --- /dev/null +++ b/src/dictionaries/ja.json @@ -0,0 +1,78 @@ +{ + "title": "近代詩学習ウェブサイト", + "description": "aspoem.comは、近代詩学習のためのモダンなウェブサイトであり、サイト全体の検索機能を提供しています。この機能を利用することで、律詩や絶句、詩人たちの作品をより迅速に検索することができます。また、私たちは拼音の表示方法、注釈や白話文の展示方法などを最適化し、詩をより読みやすくしています。さらに、古代詩学の学習をサポートする詩学印刷ツールも提供しています。ぜひ、私たちのウェブサイトの魅力を体験してください!", + "point_keywords": [ + "詩学習", + "古詩学習", + "唐詩300首", + "宋詞300首", + "李白詩集", + "杜甫詩集" + ], + "keywords": [ + "詩学習", + "古詩学習", + "唐詩300首", + "宋詞300首", + "李白詩集", + "杜甫詩集", + "古詩", + "詩", + "詩人統計", + "詩検索", + "詩の拼音", + "詩の注釈", + "詩の翻訳", + "ピンイン" + ], + "menu": { + "poem": "詩", + "author": "詩人", + "ci_pai_ming": "詞牌名", + "tag": "タグ", + "contact": "連絡先", + "theme": "テーマ", + "language": "言語", + "feedback": "フィードバック", + "print": "印刷" + }, + "feedback_desc": "ここでは、ウェブサイトの更新履歴や将来の計画、新機能に関するディスカッションを確認することができます。また、提案や意見を残すこともできます。", + "home": { + "poem": "おすすめ", + "all_poems": "すべての詩" + }, + "poem": { + "title": "詩", + "pinyin": "拼音", + "pinyin_show": "拼音を表示", + "pinyin_hide": "拼音を非表示", + "translation": "翻訳", + "tools": "ツール", + "more": "さらに探索", + "comment": "コメント", + "comment_desc1": "異なる年齢、成長環境、経験には、異なる視点があります。", + "comment_desc2": "従って、標準答えは存在せず、自分が好きなものを選ぶだけでいいです!ぜひ、思いを残してください!👏🏻👏🏻👏🏻", + "report_error": "エラー報告", + "report_error_desc": "もし間違いを見つけた場合は、下にコメントして指摘してください!" + }, + "poem_list": { + "title": "詩のリスト", + "empty": "関連する詩が見つかりませんでした", + "tab_new": "最新", + "tab_improve": "改善待ち" + }, + "author": { + "title": "詩人" + }, + "author_detail": { + "title": "詩人詳細" + }, + "search": { + "placeholder": "詩人、詩、名言を検索", + "empty": "関連する詩が見つかりませんでした" + }, + "pagination": { + "prev": "前へ", + "next": "次へ" + } +} diff --git a/src/dictionaries/ko.json b/src/dictionaries/ko.json new file mode 100644 index 00000000..ea89a74c --- /dev/null +++ b/src/dictionaries/ko.json @@ -0,0 +1,78 @@ +{ + "title": "현대시 학습 웹사이트", + "description": "aspoem.com은 현대화된 시 학습 웹사이트로, 전체 사이트 검색 기능을 제공합니다. 리듀시, 절, 그리고 다양한 시인들의 작품을 더 빠르게 검색할 수 있도록 편리한 전체 사이트 검색 기능을 제공합니다. 또한 우리는 발음 표기, 주석, 평문 등의 표시 방식을 최적화하여 시를 더욱 쉽게 읽을 수 있도록 했습니다. 게다가 고대 시를 공부하기 위한 시인프린터 도구도 제공합니다. 지금 저희 웹사이트의 매력을 경험해보세요!", + "point_keywords": [ + "시 학습", + "고대 시 학습", + "당시 삼백곡", + "송시 삼백곡", + "이백 시 전집", + "두풀 시 전집" + ], + "keywords": [ + "시 학습", + "고대 시 학습", + "당시 삼백곡", + "송시 삼백곡", + "이백 시 전집", + "두풀 시 전집", + "고대 시", + "시", + "시인 통계", + "시 검색", + "시 발음", + "시 주석", + "시 번역", + "pinyin" + ], + "menu": { + "poem": "시", + "author": "시인", + "ci_pai_ming": "사파명", + "tag": "태그", + "contact": "연락처", + "theme": "주제", + "language": "언어", + "feedback": "의견", + "print": "인쇄" + }, + "feedback_desc": "이곳에서 웹사이트의 업데이트 로그, 미래 계획 및 새로운 기능에 대한 토론을 확인할 수 있습니다. 동시에 여러분의 제안과 의견을 남길 수도 있습니다.", + "home": { + "poem": "추천", + "all_poems": "전체 시" + }, + "poem": { + "title": "시", + "pinyin": "발음", + "pinyin_show": "발음 표시", + "pinyin_hide": "발음 숨기기", + "translation": "번역", + "tools": "도구", + "more": "더 많은 탐색", + "comment": "자유롭게 의견을 표현하세요", + "comment_desc1": "다른 나이, 성장 환경, 경험에 따라 다른 시각이 있을 것입니다.", + "comment_desc2": "따라서 표준 답변은 없습니다. 자신이 좋아하는 대로 하세요! 여러분의 생각을 남겨주세요!👏🏻👏🏻👏🏻", + "report_error": "오류 신고", + "report_error_desc": "오류를 발견하신 경우 아래에 의견을 남겨주시면 감사하겠습니다!" + }, + "poem_list": { + "title": "시 목록", + "empty": "관련 시를 찾을 수 없습니다", + "tab_new": "최신", + "tab_improve": "보완 필요" + }, + "author": { + "title": "시인" + }, + "author_detail": { + "title": "시인" + }, + "search": { + "placeholder": "시인, 시, 명구 검색", + "empty": "관련 시를 찾을 수 없습니다" + }, + "pagination": { + "prev": "이전", + "next": "다음" + } +} diff --git a/src/dictionaries/zh-Hans.json b/src/dictionaries/zh-Hans.json index e6ec76a1..1eb823b0 100644 --- a/src/dictionaries/zh-Hans.json +++ b/src/dictionaries/zh-Hans.json @@ -27,7 +27,7 @@ ], "menu": { "poem": "诗词", - "auhtor": "诗人", + "author": "诗人", "ci_pai_ming": "词牌名", "tag": "标签", "contact": "联系方式", diff --git a/src/dictionaries/zh-Hant.json b/src/dictionaries/zh-Hant.json index da222dda..b1887144 100644 --- a/src/dictionaries/zh-Hant.json +++ b/src/dictionaries/zh-Hant.json @@ -27,7 +27,7 @@ ], "menu": { "poem": "詩詞", - "auhtor": "詩人", + "author": "詩人", "ci_pai_ming": "詞牌名", "tag": "標籤", "contact": "聯繫方式", diff --git a/src/server/api/routers/poem.ts b/src/server/api/routers/poem.ts index 3831b032..727a985d 100644 --- a/src/server/api/routers/poem.ts +++ b/src/server/api/routers/poem.ts @@ -323,8 +323,6 @@ export const poemRouter = createTRPCRouter({ } } - console.log(contentArr, connectTagId); - if (connectTagId !== -1) { void ctx.db.poem .update({ diff --git a/src/server/api/utils.tsx b/src/server/api/utils.tsx index 6c2882d7..4362a68e 100644 --- a/src/server/api/utils.tsx +++ b/src/server/api/utils.tsx @@ -1,8 +1,9 @@ import { type Tag, type Poem } from "@prisma/client"; import { mapKeys, pick } from "lodash-es"; import { z } from "zod"; +import { locales } from "~/dictionaries"; -export const LangZod = z.enum(["zh-Hans", "zh-Hant", "en"]).default("zh-Hans"); +export const LangZod = z.enum(locales).default("zh-Hans"); function transform>( res: T,