Browse Source

Merge pull request #2463 from visuddhinanda/development

Development
visuddhinanda 1 week ago
parent
commit
eba6c0596b

+ 16 - 0
dashboard-v6/src/api/task.ts

@@ -275,3 +275,19 @@ export async function projectLoader({ params }: LoaderFunctionArgs) {
 
   return res.data;
 }
+
+export async function taskLoader({ params }: LoaderFunctionArgs) {
+  const taskId = params.taskId;
+
+  if (!taskId) {
+    throw new Response("Missing taskId", { status: 400 });
+  }
+
+  const res = await get<ITaskResponse>(`/api/v2/task/${taskId}`);
+
+  if (!res.ok) {
+    throw new Response("Task not found", { status: 404 });
+  }
+
+  return res.data;
+}

+ 29 - 14
dashboard-v6/src/components/navigation/MainMenu.tsx

@@ -132,18 +132,24 @@ const Widget = ({ onSearch }: Props) => {
     {
       key: "search",
       icon: <SearchOutlined />,
-      label: "搜索",
+      label: intl.formatMessage({ id: "labels.search" }),
     },
     {
       key: "/workspace",
       icon: <HomeOutlined />,
-      label: "主页",
+      label: intl.formatMessage({ id: "labels.home" }),
       activeId: "workspace.home",
       extra: (
         <PlusOutlined
           role="button"
-          aria-label="open-home-new-tab"
-          title="在新标签页打开主页"
+          aria-label={intl.formatMessage(
+            { id: "buttons.open.in.new.tab" },
+            { item: intl.formatMessage({ id: "labels.home" }) }
+          )}
+          title={intl.formatMessage(
+            { id: "buttons.open.in.new.tab" },
+            { item: intl.formatMessage({ id: "labels.home" }) }
+          )}
           onClick={(e) => {
             e.stopPropagation();
             window.open(fullUrl("workspace"), "_blank");
@@ -186,7 +192,7 @@ const Widget = ({ onSearch }: Props) => {
     {
       key: "/workspace/doc",
       icon: <DocumentIcon />,
-      label: "文档",
+      label: intl.formatMessage({ id: "labels.documents" }),
       children: [
         {
           key: "/workspace/article",
@@ -242,7 +248,7 @@ const Widget = ({ onSearch }: Props) => {
       children: [
         {
           key: "/workspace/task/pending",
-          label: "Pending",
+          label: intl.formatMessage({ id: "labels.task.pending" }),
           activeId: "workspace.task.pending",
         },
         {
@@ -254,7 +260,7 @@ const Widget = ({ onSearch }: Props) => {
         },
         {
           key: "/workspace/task/list",
-          label: "To-Do List",
+          label: intl.formatMessage({ id: "labels.task.mine" }),
           activeId: "workspace.task.list",
         },
         {
@@ -276,7 +282,7 @@ const Widget = ({ onSearch }: Props) => {
     {
       key: "/workspace/tools",
       icon: <CourseOutLinedIcon />,
-      label: "tools",
+      label: intl.formatMessage({ id: "labels.tools" }),
       children: [
         {
           key: "/workspace/tag",
@@ -287,12 +293,16 @@ const Widget = ({ onSearch }: Props) => {
         },
         {
           key: "/workspace/driver",
-          label: "driver",
+          label: intl.formatMessage({
+            id: "columns.studio.attachment.title",
+          }),
           activeId: "workspace.driver",
         },
         {
           key: "/workspace/dict",
-          label: "dict",
+          label: intl.formatMessage({
+            id: "columns.studio.userdict.title",
+          }),
           activeId: "workspace.dict",
         },
       ],
@@ -304,23 +314,28 @@ const Widget = ({ onSearch }: Props) => {
       children: [
         {
           key: "/workspace/team",
-          label: "team",
+          label: intl.formatMessage({
+            id: "columns.studio.group.title",
+          }),
           activeId: "workspace.team",
         },
         {
           key: "/workspace/invite",
-          label: "invite",
+          label: intl.formatMessage({
+            id: "columns.studio.invite.title",
+          }),
           activeId: "workspace.invite",
         },
         {
           key: "/workspace/transfer",
-          label: "transfer",
+          label: intl.formatMessage({
+            id: "columns.studio.transfer.title",
+          }),
           activeId: "workspace.transfer",
         },
       ],
     },
   ];
-  console.log("nav", routeId);
   /** 当前选中 */
   const selectedKey = findSelectedKey(items, routeId);
 

+ 1 - 1
dashboard-v6/src/components/task/TaskEditDrawer.tsx

@@ -57,7 +57,7 @@ const TaskEditDrawer = ({
           <Button
             type="link"
             onClick={() => {
-              window.open(fullUrl(`/article/task/${taskId}`), "_blank");
+              window.open(fullUrl(`/workspace/task/${taskId}`), "_blank");
             }}
           >
             {intl.formatMessage(

+ 5 - 0
dashboard-v6/src/locales/en-US/label.ts

@@ -8,6 +8,10 @@ const items = {
   "labels.week.6": "Sat",
   "labels.collaborators": "collaborators",
   "labels.collaboration": "collaboration",
+  "labels.search": "Search",
+  "labels.home": "Home",
+  "labels.documents": "Documents",
+  "labels.tools": "Tools",
   "labels.link": "link",
   "labels.library.access.link": "Library access link",
   "labels.library.access.tip":
@@ -59,6 +63,7 @@ const items = {
   "labels.task": "task",
   "labels.task.hall": "task hall",
   "labels.task.mine": "my task",
+  "labels.task.pending": "Pending",
   "labels.task.my.project": "my projects",
   "labels.all": "all",
   "labels.mention.me": "mention",

+ 1 - 0
dashboard-v6/src/locales/en-US/pages.ts

@@ -9,6 +9,7 @@ const items = {
   "pages.workspace.home.title": "Welcome to WikiPali",
   "pages.team.title": "Team",
   "pages.task.project.title": "Project",
+  "pages.task.show.title": "Task",
   "pages.tipitaka.chapter.title": "Chapter",
   "pages.tipitaka.para.title": "Paragraph",
   "pages.tipitaka.cs-para.title": "CS Paragraph",

+ 5 - 0
dashboard-v6/src/locales/zh-Hans/label.ts

@@ -8,6 +8,10 @@ const items = {
   "labels.week.6": "星期六",
   "labels.collaborators": "协作者",
   "labels.collaboration": "协作",
+  "labels.search": "搜索",
+  "labels.home": "主页",
+  "labels.documents": "文档",
+  "labels.tools": "工具",
   "labels.link": "链接",
   "labels.library.access.link": "藏经阁访问链接",
   "labels.library.access.tip": "任何获得此链接的人,都可以在藏经阁中阅读该术语。",
@@ -63,6 +67,7 @@ const items = {
   "labels.task": "任务",
   "labels.task.hall": "任务大厅",
   "labels.task.mine": "我的任务",
+  "labels.task.pending": "待办",
   "labels.task.my.project": "我的项目",
   "labels.all": "全部",
   "labels.mention.me": "提及我的",

+ 1 - 0
dashboard-v6/src/locales/zh-Hans/pages.ts

@@ -9,6 +9,7 @@ const items = {
   "pages.workspace.home.title": "欢迎来到wikipali",
   "pages.team.title": "团队",
   "pages.task.project.title": "项目",
+  "pages.task.show.title": "任务",
   "pages.tipitaka.chapter.title": "章节",
   "pages.tipitaka.para.title": "段落",
   "pages.tipitaka.cs-para.title": "CS段落",

+ 64 - 1
dashboard-v6/src/locales/zh-Hant.ts

@@ -1 +1,64 @@
-export default {};
+import forms from "./zh-Hant/forms";
+import buttons from "./zh-Hant/buttons";
+import nut from "./zh-Hant/nut";
+import dict from "./zh-Hant/dict";
+import utilities from "./zh-Hant/utilities";
+import setting from "./zh-Hant/setting";
+import auth from "./zh-Hant/auth";
+import course from "./zh-Hant/course";
+import message from "./zh-Hant/message";
+import label from "./zh-Hant/label";
+import error from "./zh-Hant/error";
+import pages from "./zh-Hant/pages";
+
+const items = {
+  "columns.library.title": "藏經閣",
+  "columns.library.home.title": "首頁",
+  "columns.library.community.title": "社群",
+  "columns.library.palicanon.title": "聖典",
+  "columns.library.course.title": "課程",
+  "columns.library.term.title": "術語百科",
+  "columns.library.dict.title": "字典",
+  "columns.library.anthology.title": "文集",
+  "columns.library.help.title": "幫助",
+  "columns.library.more.title": "更多",
+  "columns.library.calendar.title": "佛曆",
+  "columns.library.convertor.title": "巴利字元轉換器",
+  "columns.library.palihandbook.title": "語法手冊",
+  "columns.library.statistics.title": "單詞統計",
+  "columns.library.blog.label": "個人空間",
+  "columns.studio.title": "譯經樓",
+  "columns.studio.palicanon.title": "聖典",
+  "columns.studio.recent.title": "最近編輯",
+  "columns.studio.channel.title": "版本風格",
+  "columns.studio.group.title": "群組",
+  "columns.studio.userdict.title": "使用者字典",
+  "columns.studio.term.title": "術語",
+  "columns.studio.course.title": "課程",
+  "columns.studio.article.title": "文章",
+  "columns.studio.anthology.title": "文集",
+  "columns.studio.analysis.title": "分析",
+  "columns.studio.collaboration.title": "協作",
+  "columns.studio.basic.title": "常用",
+  "columns.studio.advance.title": "進階",
+  "columns.studio.setting.title": "設定",
+  "columns.exp.title": "經驗",
+  "columns.studio.invite.title": "註冊邀請",
+  "columns.studio.transfer.title": "轉讓",
+  "columns.studio.attachment.title": "網盤",
+  "columns.studio.tag.title": "標籤",
+  ...buttons,
+  ...forms,
+  ...nut,
+  ...dict,
+  ...utilities,
+  ...setting,
+  ...auth,
+  ...course,
+  ...message,
+  ...label,
+  ...error,
+  ...pages,
+};
+
+export default items;

+ 19 - 0
dashboard-v6/src/locales/zh-Hant/auth/index.ts

@@ -0,0 +1,19 @@
+const items = {
+  "auth.role.label": "角色",
+  "auth.role.all": "全部角色",
+  "auth.role.owner": "擁有者",
+  "auth.role.manager": "管理員",
+  "auth.role.editor": "編輯者",
+  "auth.role.member": "成員",
+  "auth.role.student": "學生",
+  "auth.role.assistant": "助理老師",
+  "auth.role.unknown": "未知",
+  "auth.role.delete": "已刪除",
+  "auth.role.reader": "閱讀者",
+  "auth.type.user": "使用者",
+  "auth.type.group": "群組",
+  "auth.sign-up.email-certification": "郵箱驗證",
+  "auth.sign-up.info": "完善個人資訊",
+};
+
+export default items;

+ 120 - 1
dashboard-v6/src/locales/zh-Hant/buttons.ts

@@ -1,3 +1,122 @@
-const items = {};
+const items = {
+  "buttons.submit": "提交",
+  "buttons.create": "新建",
+  "buttons.edit": "編輯",
+  "buttons.translate": "翻譯",
+  "buttons.read": "閱讀",
+  "buttons.wbw": "逐詞解析",
+  "buttons.delete": "刪除",
+  "buttons.remove": "移除",
+  "buttons.delete.all": "批次刪除",
+  "buttons.selected": "已選擇",
+  "buttons.select": "選擇",
+  "buttons.unselect": "全不選",
+  "buttons.option": "操作",
+  "buttons.save": "儲存",
+  "buttons.save.publish": "儲存並公開到社群詞典",
+  "buttons.save.my.dict": "儲存並新增到個人單詞本",
+  "buttons.cancel": "取消",
+  "buttons.setting": "設定",
+  "buttons.sign-in": "登入",
+  "buttons.sign-out": "退出登入",
+  "buttons.welcome": "歡迎遨遊法的海洋",
+  "buttons.click.upload": "點選上傳",
+  "buttons.group.exit": "退群",
+  "buttons.group.add.member": "加人",
+  "buttons.lesson.add.lesson": "加入",
+  "buttons.ok": "確定",
+  "buttons.close": "關閉",
+  "buttons.copy": "複製",
+  "buttons.paste": "貼上",
+  "buttons.copy.to": "複製到",
+  "buttons.copy.text": "複製文本",
+  "buttons.copy.pali.text": "複製巴利語文本",
+  "buttons.basic.information": "基本資訊",
+  "buttons.share": "分享",
+  "buttons.yes": "是",
+  "buttons.no": "否",
+  "buttons.open.in.library": "在藏經閣中開啟",
+  "buttons.preview": "預覽",
+  "buttons.view": "檢視",
+  "buttons.empty": "清空",
+  "buttons.basic": "基本",
+  "buttons.bookmark": "書籤",
+  "buttons.note": "註解",
+  "buttons.advance": "進階",
+  "buttons.attachments": "附件",
+  "buttons.sim": "相似句",
+  "buttons.add": "新增",
+  "buttons.spell": "拼寫",
+  "buttons.more": "更多",
+  "buttons.import": "匯入",
+  "buttons.export": "匯出",
+  "buttons.add.tag": "新增標籤",
+  "buttons.remove.selected": "清除選擇",
+  "buttons.multiple.select": "多選",
+  "buttons.download": "下載",
+  "buttons.download.link": "下載連結",
+  "buttons.lookup": "查字典",
+  "buttons.invite": "邀請",
+  "buttons.relate.to": "關聯到",
+  "buttons.copy.link": "複製連結",
+  "buttons.copy.id": "複製編號",
+  "buttons.reply": "回覆",
+  "buttons.open": "開啟",
+  "buttons.compact": "緊湊",
+  "buttons.magic-dict": "神奇字典",
+  "buttons.theme.ant": "預設",
+  "buttons.theme.dark": "夜間",
+  "buttons.channel.all": "全部",
+  "buttons.channel.my": "我的",
+  "buttons.channel.collaborator": "協作",
+  "buttons.channel.public": "公開",
+  "buttons.refresh": "重新整理",
+  "buttons.timeline": "時間線",
+  "buttons.discussion": "討論",
+  "buttons.suggestion": "修改建議",
+  "buttons.accept": "接受",
+  "buttons.refuse": "拒絕",
+  "buttons.use.as.guest": "以訪客身份繼續使用",
+  "buttons.got.it": "知道了",
+  "buttons.statistic": "統計",
+  "buttons.relate": "關聯",
+  "buttons.convert": "轉換",
+  "buttons.copy.tpl": "複製模版",
+  "buttons.open.in.new.tab": "在新標籤頁中開啟{item}",
+  "buttons.add_to_anthology": "新增到文集",
+  "buttons.open.in.studio": "在Studio中開啟",
+  "buttons.admin": "後臺管理",
+  "buttons.open.in.tab": "在新標籤頁中開啟",
+  "buttons.reset.wbw": "重置逐詞解析",
+  "buttons.reset.password": "重置密碼",
+  "buttons.forgot.password": "忘記密碼",
+  "buttons.select.channel": "選擇版本風格",
+  "buttons.set.display.mode": "顯示模式",
+  "buttons.manage": "管理",
+  "buttons.delete.wbw.sentence": "刪除整句逐詞解析",
+  "buttons.ai.translate": "AI 翻譯",
+  "buttons.task.status.change.to.pending": "未發布",
+  "buttons.task.status.change.to.published": "發布",
+  "buttons.task.status.change.to.running": "領取",
+  "buttons.task.status.change.to.done": "完成任務",
+  "buttons.task.status.change.to.restarted": "重做",
+  "buttons.task.status.change.to.requested_restart": "請求重做",
+  "buttons.task.status.change.to.quit": "放棄任務",
+  "buttons.access-token.get": "獲取訪問口令",
+  "buttons.task.add.pre-task": "新增前置任務",
+  "buttons.task.add.next-task": "新增後置任務",
+  "buttons.remove.milestone": "移除里程碑",
+  "buttons.set.milestone": "設定為里程碑",
+  "buttons.next": "下一步",
+  "buttons.previous": "上一步",
+  "buttons.clone": "克隆",
+  "buttons.general": "常規",
+  "buttons.ai-models": "AI模型",
+  "buttons.new": "新建",
+  "buttons.sign-up": "註冊",
+  "buttons.get_template": "獲取引用模版",
+  "buttons.duplicate": "建立副本",
+  "buttons.word_count": "字數統計",
+};
 
 export default items;

+ 69 - 0
dashboard-v6/src/locales/zh-Hant/course/index.ts

@@ -0,0 +1,69 @@
+const items = {
+  "course.basic.info.label": "基本資訊",
+  "course.exp.start.label": "起始經驗",
+  "course.exp.end.label": "結束經驗",
+  "course.exp.current.label": "當前經驗",
+  "course.member.status.none.label": " ",
+  "course.member.status.normal.label": "報名成功",
+  "course.member.status.joined.label": "已經參加了",
+  "course.member.status.join.button": "參課",
+  "course.member.status.join.message":
+    "本課程為自學課程,加入後無需錄取,隨時開始學習。確定參加{course}嗎?",
+  "course.member.status.applied.label": "已經報名",
+  "course.member.status.apply.button": "報名",
+  "course.member.status.apply.message":
+    "報名後您的學習記錄將會向本課程組織者公開,需組織者審核錄取後方可開始學習。確定報名{course}嗎?",
+  "course.member.status.canceled.label": "已經取消",
+  "course.member.status.cancel.button": "取消",
+  "course.member.status.cancel.message": "要取消{course}的報名嗎?",
+  "course.member.status.agreed.label": "已接受邀請",
+  "course.member.status.agree.button": "接受邀請",
+  "course.member.status.agree.message": "要接受作為{course}的{role}的邀請嗎?",
+  "course.member.status.disagreed.label": "已拒絕邀請",
+  "course.member.status.disagree.button": "拒絕邀請",
+  "course.member.status.disagree.message": "要拒絕作為{course}的{role}邀請嗎?",
+  "course.member.status.left.label": "已退出",
+  "course.member.status.leave.button": "退出",
+  "course.member.status.leave.message": "要退出{course}嗎?",
+  "course.member.status.invited.label": "已經邀請",
+  "course.member.status.invite.button": "邀請",
+  "course.member.status.invite.message": "要邀請{user}成為{role}嗎?",
+  "course.member.status.revoked.label": "已經撤銷邀請",
+  "course.member.status.revoke.button": "撤銷邀請",
+  "course.member.status.revoke.message": "要撤銷{user}成為{role}嗎?",
+  "course.member.status.accepted.label": "已錄取",
+  "course.member.status.accept.button": "錄取",
+  "course.member.status.accept.message": "錄取{user}嗎?",
+  "course.member.status.rejected.label": "未錄取",
+  "course.member.status.reject.button": "不錄取",
+  "course.member.status.reject.message": "不錄取{user}嗎?",
+  "course.member.status.blocked.label": "已清退",
+  "course.member.status.block.button": "清退",
+  "course.member.status.block.message": "清退{user}嗎?",
+  "course.join.mode.invite.label": "僅限邀請",
+  "course.join.mode.invite.message": "本課程僅限內部邀請。",
+  "course.join.mode.manual.label": "人工審核",
+  "course.join.mode.manual.message":
+    "本課程為報名後人工審核課程。報名後請等待組織者審核。",
+  "course.join.mode.manual.user-accept.message": "您確定要接受課程邀請嗎?",
+  "course.join.mode.open.label": "開放自學",
+  "course.join.mode.open.message": "本課程為開放課程。加入後可以立即開始學習。",
+  "course.leave.message": "離開後將無法再次報名,您確定要離開嗎?",
+  "course.rejected.message": "拒絕後將無法再次報名,您確定要拒絕嗎?",
+  "course.exp.request.none.label": "無需",
+  "course.exp.request.none.message": " ",
+  "course.exp.request.begin-end.label": "起始和結束",
+  "course.exp.request.begin-end.message":
+    "課程組織者需要檢視您的課程起始和結束的學習時長。報名意味著您同意。",
+  "course.exp.request.daily.label": "每日",
+  "course.exp.request.daily.message":
+    "課程組織者需要檢視您在課程期間的每日學習時長。報名意味著您同意。",
+  "course.table.count.member.title": "成員數",
+  "course.table.count.progressing.title": "待審核",
+  "course.timeline.all": "全部參課記錄",
+  "course.timeline.current": "當前課程",
+  "course.channel.unbound": "未繫結",
+  "course.member.timeline": "參課記錄",
+};
+
+export default items;

+ 172 - 0
dashboard-v6/src/locales/zh-Hant/dict/index.ts

@@ -0,0 +1,172 @@
+const items = {
+  dict: "字典",
+  "dict.fields.sn.label": "序號",
+  "dict.fields.word.label": "單詞",
+  "dict.fields.type.label": "類型",
+  "dict.fields.grammar.label": "語法",
+  "dict.fields.case.label": "格位",
+  "dict.fields.parent.label": "詞典源型",
+  "dict.fields.meaning.label": "整體含義",
+  "dict.fields.factors.label": "拆分方式",
+  "dict.fields.factormeaning.label": "拆分含義",
+  "dict.fields.note.label": "註釋",
+  "dict.fields.confidence.label": "信心指數",
+  "dict.fields.dictname.label": "字典名稱",
+  "dict.fields.type.n.label": "名詞",
+  "dict.fields.type.n.short.label": "名",
+  "dict.fields.type.ti.label": "三性",
+  "dict.fields.type.ti.short.label": "三",
+  "dict.fields.type.v.label": "動詞",
+  "dict.fields.type.v.short.label": "動",
+  "dict.fields.type.v:ind.label": "動不變",
+  "dict.fields.type.v:ind.short.label": "動不變",
+  "dict.fields.type.ind.label": "不變詞",
+  "dict.fields.type.ind.short.label": "不",
+  "dict.fields.type.m.label": "陽性",
+  "dict.fields.type.m.short.label": "陽",
+  "dict.fields.type.nt.label": "中性",
+  "dict.fields.type.nt.short.label": "中",
+  "dict.fields.type.f.label": "陰性",
+  "dict.fields.type.f.short.label": "陰",
+  "dict.fields.type.sg.label": "單數",
+  "dict.fields.type.sg.short.label": "單",
+  "dict.fields.type.pl.label": "複數",
+  "dict.fields.type.pl.short.label": "複",
+  "dict.fields.type.nom.label": "主格",
+  "dict.fields.type.nom.short.label": "主",
+  "dict.fields.type.acc.label": "賓格",
+  "dict.fields.type.acc.short.label": "賓",
+  "dict.fields.type.gen.label": "屬格",
+  "dict.fields.type.gen.short.label": "屬",
+  "dict.fields.type.dat.label": "目的格",
+  "dict.fields.type.dat.short.label": "目的",
+  "dict.fields.type.inst.label": "工具格",
+  "dict.fields.type.inst.short.label": "具",
+  "dict.fields.type.voc.label": "呼格",
+  "dict.fields.type.voc.short.label": "呼",
+  "dict.fields.type.abl.label": "來源格",
+  "dict.fields.type.abl.short.label": "源",
+  "dict.fields.type.loc.label": "處格",
+  "dict.fields.type.loc.short.label": "處",
+  "dict.fields.type.base.label": "詞幹",
+  "dict.fields.type.base.short.label": "幹",
+  "dict.fields.type.imp.label": "命令",
+  "dict.fields.type.imp.short.label": "命令",
+  "dict.fields.type.cond.label": "條件",
+  "dict.fields.type.cond.short.label": "條件",
+  "dict.fields.type.opt.label": "潛能",
+  "dict.fields.type.opt.short.label": "潛",
+  "dict.fields.type.pres.label": "現",
+  "dict.fields.type.pres.short.label": "現",
+  "dict.fields.type.aor.label": "過",
+  "dict.fields.type.aor.short.label": "過",
+  "dict.fields.type.pf.label": "完",
+  "dict.fields.type.pf.short.label": "完",
+  "dict.fields.type.fut.label": "將",
+  "dict.fields.type.fut.short.label": "將",
+  "dict.fields.type.act.label": "主動",
+  "dict.fields.type.act.short.label": "主動",
+  "dict.fields.type.refl.label": "反照",
+  "dict.fields.type.refl.short.label": "反",
+  "dict.fields.type.1p.label": "第一",
+  "dict.fields.type.1p.short.label": "一",
+  "dict.fields.type.2p.label": "第二",
+  "dict.fields.type.2p.short.label": "二",
+  "dict.fields.type.3p.label": "第三",
+  "dict.fields.type.3p.short.label": "三",
+  "dict.fields.type.prp.label": "現在分詞",
+  "dict.fields.type.prp.short.label": "現分",
+  "dict.fields.type.prpp.label": "被動現在分詞",
+  "dict.fields.type.prpp.short.label": "被現分",
+  "dict.fields.type.pp.label": "過去分詞",
+  "dict.fields.type.pp.short.label": "過分",
+  "dict.fields.type.ppa.label": "主過分",
+  "dict.fields.type.ppa.short.label": "主過分",
+  "dict.fields.type.ppp.label": "被過分",
+  "dict.fields.type.ppp.short.label": "被過分",
+  "dict.fields.type.futp.label": "未來分詞",
+  "dict.fields.type.futp.short.label": "未分",
+  "dict.fields.type.fpa.short.label": "主未分",
+  "dict.fields.type.grd.label": "義務",
+  "dict.fields.type.grd.short.label": "義務",
+  "dict.fields.type.pass.label": "被動",
+  "dict.fields.type.pass.short.label": "被動",
+  "dict.fields.type.caus.label": "使役",
+  "dict.fields.type.caus.short.label": "使役",
+  "dict.fields.type.desid.label": "意欲",
+  "dict.fields.type.desid.short.label": "意欲",
+  "dict.fields.type.intens.label": "強意",
+  "dict.fields.type.intens.short.label": "強意",
+  "dict.fields.type.denom.label": "名動",
+  "dict.fields.type.denom.short.label": "名動",
+  "dict.fields.type.ger.label": "連續",
+  "dict.fields.type.ger.short.label": "連續",
+  "dict.fields.type.abs.label": "絕對",
+  "dict.fields.type.abs.short.label": "絕對",
+  "dict.fields.type.inf.label": "不定",
+  "dict.fields.type.inf.short.label": "不定",
+  "dict.fields.type.adj.label": "形容詞",
+  "dict.fields.type.adj.short.label": "形",
+  "dict.fields.type.pron.label": "代詞",
+  "dict.fields.type.pron.short.label": "代",
+  "dict.fields.type.num.label": "數詞",
+  "dict.fields.type.num.short.label": "數",
+  "dict.fields.type.num:base.label": "數詞詞幹",
+  "dict.fields.type.num:base.short.label": "數幹",
+  "dict.fields.type.adv.label": "副詞",
+  "dict.fields.type.adv.short.label": "副",
+  "dict.fields.type.conj.label": "連詞",
+  "dict.fields.type.conj.short.label": "連",
+  "dict.fields.type.prep.label": "介詞",
+  "dict.fields.type.prep.short.label": "介",
+  "dict.fields.type.interj.label": "感嘆",
+  "dict.fields.type.interj.short.label": "感",
+  "dict.fields.type.pre.label": "字首",
+  "dict.fields.type.pre.short.label": "前",
+  "dict.fields.type.suf.label": "字尾",
+  "dict.fields.type.suf.short.label": "後",
+  "dict.fields.type.end.label": "語尾",
+  "dict.fields.type.end.short.label": "尾",
+  "dict.fields.type.part.label": "複合詞組份",
+  "dict.fields.type.part.short.label": "合",
+  "dict.fields.type.un.label": "粘音",
+  "dict.fields.type.un.short.label": "粘",
+  "dict.fields.type.none.label": "無",
+  "dict.fields.type.none.short.label": "_",
+  "dict.fields.type.null.label": "空",
+  "dict.fields.type.null.short.label": "_",
+  "dict.fields.type.?.label": "待定",
+  "dict.fields.type.?.short.label": "待定",
+  "dict.fields.type.ti:base.label": "三性詞幹",
+  "dict.fields.type.ti:base.short.label": "三性詞幹",
+  "dict.fields.type.n:base.label": "名詞幹",
+  "dict.fields.type.n:base.short.label": "名詞幹",
+  "dict.fields.type.v:base.label": "動詞幹",
+  "dict.fields.type.v:base.short.label": "動詞幹",
+  "dict.fields.type.adj:base.label": "形詞幹",
+  "dict.fields.type.adj:base.short.label": "形詞幹",
+  "dict.fields.type.fpp.label": "未來被動分詞",
+  "dict.fields.type.fpp.short.label": "未被分",
+  "dict.fields.type.cp.short.label": "合",
+  "dict.fields.type.cp.label": "複合詞組分",
+  "dict.fields.type.indconj.short.label": "連",
+  "dict.fields.type.indconj.label": "連詞",
+  "dict.fields.type.pron:base.short.label": "代幹",
+  "dict.fields.type.pron:base.label": "代詞詞幹",
+  "dict.fields.type.note.short.label": "縮",
+  "dict.fields.type.note.label": "縮寫",
+  "dict.fields.type.vind.short.label": "動不變",
+  "dict.fields.type.vind.label": "動不變",
+  "dict.fields.type.vdn.label": "動名詞",
+  "dict.fields.type.vdn.short.label": "動名",
+  "dict.fields.type.comp.label": "複合詞",
+  "dict.fields.type.comp.short.label": "合",
+  "dict.fields.type.others.label": "其他",
+  "dict.fields.type.others.short.label": "其他",
+  "dict.case.category.verb": "動詞",
+  "dict.case.category.derivative": "衍生詞",
+  "dict.case.category.passive-verb": "被動動詞",
+  "dict.case.category.participle": "分詞",
+};
+
+export default items;

+ 5 - 0
dashboard-v6/src/locales/zh-Hant/error.ts

@@ -0,0 +1,5 @@
+const items = {
+  "error.email.exists": "該郵箱已經存在",
+};
+
+export default items;

+ 105 - 1
dashboard-v6/src/locales/zh-Hant/forms.ts

@@ -1,3 +1,107 @@
-const items = {};
+const items = {
+  "forms.fields.email.label": "電子郵箱",
+  "forms.fields.email.or.username.label": "電子郵箱/使用者名稱",
+  "forms.fields.password.label": "密碼",
+  "forms.fields.confirm-password.label": "確認密碼",
+  "forms.fields.id.label": "ID",
+  "forms.fields.message.label": "訊息",
+  "forms.fields.created-at.label": "建立時間",
+  "forms.fields.updated-at.label": "更新時間",
+  "forms.fields.lang.label": "語言",
+  "forms.message.lang.required": "請選擇一種語言",
+  "forms.fields.title.label": "標題",
+  "forms.message.title.required": "請輸入標題",
+  "forms.fields.subtitle.label": "副標題",
+  "forms.fields.summary.label": "摘要",
+  "forms.fields.content.label": "內容",
+  "forms.fields.content.placeholder": "請輸入內容",
+  "forms.fields.tag.label": "標籤",
+  "forms.fields.power.label": "權限",
+  "forms.fields.type.label": "類型",
+  "forms.fields.publicity.label": "公開性",
+  "forms.fields.publicity.all.label": "全部",
+  "forms.fields.publicity.disable.label": "停用",
+  "forms.fields.publicity.blocked.label": "鎖定",
+  "forms.fields.publicity.private.label": "私有",
+  "forms.fields.publicity.public_no_list.label": "公開不列出",
+  "forms.fields.publicity.public.label": "公開",
+  "forms.fields.publicity.public.edit.label": "公開可編輯",
+  "forms.fields.teacher.label": "主講人",
+  "forms.fields.studentsassistant.label": "學生與助教",
+  "forms.fields.student.label": "學生",
+  "forms.fields.assistant.label": "助教",
+  "forms.fields.lesson.label": "講",
+  "forms.fields.note.label": "註解",
+  "forms.fields.confidence.label": "信心指數",
+  "forms.fields.confidence.0.label": "不靠譜",
+  "forms.fields.confidence.25.label": "沒把握",
+  "forms.fields.confidence.50.label": "一般",
+  "forms.fields.confidence.75.label": "還可以",
+  "forms.fields.confidence.100.label": "有把握",
+  "forms.fields.upload.texture": "上傳封面",
+  "forms.fields.markdown.label": "markdown效果預覽",
+  "forms.fields.role.label": "角色",
+  "forms.fields.name.label": "名稱",
+  "forms.fields.meaning.label": "整體含義",
+  "forms.fields.meaning.tooltip": "最長為 256個字元",
+  "forms.message.meaning.required": "請輸入意思",
+  "forms.fields.factors.label": "拆分方式",
+  "forms.fields.factors.tooltip": "最長為 256個字元",
+  "forms.fields.factor.meaning.label": "拆分含義",
+  "forms.fields.factor.meaning.tooltip": "最長為 256個字元",
+  "forms.fields.parent.label": "詞典源型",
+  "forms.fields.parent.tooltip": "最長為 256個字元",
+  "forms.fields.case.label": "語法資訊",
+  "forms.fields.case.tooltip": "語法資訊參見……",
+  "forms.fields.user.label": "使用者",
+  "forms.message.user.required": "請選擇使用者",
+  "forms.message.user.delete": "刪除使用者嗎?此操作無法恢復。",
+  "forms.message.member.remove": "移除此成員嗎?此操作無法恢復。",
+  "forms.fields.description.label": "簡介",
+  "forms.fields.textbook.label": "課本",
+  "forms.fields.status.label": "狀態",
+  "forms.fields.ending.label": "語尾",
+  "forms.fields.relation.label": "關係",
+  "forms.fields.from.label": "從",
+  "forms.fields.to.label": "連線到",
+  "forms.fields.count.label": "計數",
+  "forms.fields.owner.label": "擁有者",
+  "forms.message.res.remove": "將此資源從群中移除嗎?",
+  "forms.fields.parent2.label": "衍生原型",
+  "forms.fields.parent2.tooltip": "最長為 256個字元",
+  "forms.fields.username.label": "使用者名稱(登入名)",
+  "forms.fields.nickname.label": "暱稱",
+  "forms.fields.editor.label": "編輯者",
+  "forms.fields.category.label": "分類",
+  "forms.fields.match.label": "匹配方式",
+  "forms.fields.dict.name.label": "字典名",
+  "forms.fields.dict.shortname.label": "字典名",
+  "forms.fields.url.label": "url",
+  "forms.fields.fail.label": "失敗",
+  "forms.fields.success.label": "成功",
+  "forms.fields.receiver.label": "接收",
+  "forms.fields.event.label": "事件",
+  "forms.message.question.required": "請輸入您的問題(必填)",
+  "forms.message.question.description.option": "問題詳細描述(選填)",
+  "forms.fields.replay.label": "回覆",
+  "forms.status.transferred.label": "等待處理",
+  "forms.status.accept.label": "已經接受",
+  "forms.status.refuse.label": "已經拒絕",
+  "forms.status.cancel.label": "已經撤回",
+  "forms.fields.sign-up-message.label": "報名訊息",
+  "forms.fields.color.label": "顏色",
+  "forms.fields.executors.label": "執行者們",
+  "forms.fields.executor.label": "執行者",
+  "forms.fields.milestone.label": "里程碑",
+  "forms.fields.started-at.label": "開始時間",
+  "forms.fields.finished-at.label": "完成時間",
+  "forms.fields.assignees.label": "指派給",
+  "forms.fields.model.label": "模型",
+  "forms.fields.key.label": "金鑰",
+  group: "群組",
+  "group.fields.name.label": "群組名",
+  "group.files": "群文件",
+  "group.member": "群成員",
+};
 
 export default items;

+ 60 - 1
dashboard-v6/src/locales/zh-Hant/index.ts

@@ -1,3 +1,62 @@
-const items = {};
+import forms from "./forms";
+import buttons from "./buttons";
+import nut from "./nut";
+import dict from "./dict";
+import utilities from "./utilities";
+import setting from "./setting";
+import auth from "./auth";
+import course from "./course";
+import message from "./message";
+import label from "./label";
+import error from "./error";
+
+const items = {
+  "columns.library.title": "藏經閣",
+  "columns.library.home.title": "首頁",
+  "columns.library.community.title": "社群",
+  "columns.library.palicanon.title": "聖典",
+  "columns.library.course.title": "課程",
+  "columns.library.term.title": "術語百科",
+  "columns.library.dict.title": "字典",
+  "columns.library.anthology.title": "文集",
+  "columns.library.help.title": "幫助",
+  "columns.library.more.title": "更多",
+  "columns.library.calendar.title": "佛曆",
+  "columns.library.convertor.title": "巴利字元轉換器",
+  "columns.library.palihandbook.title": "語法手冊",
+  "columns.library.statistics.title": "單詞統計",
+  "columns.library.blog.label": "個人空間",
+  "columns.studio.title": "譯經樓",
+  "columns.studio.palicanon.title": "聖典",
+  "columns.studio.recent.title": "最近編輯",
+  "columns.studio.channel.title": "版本風格",
+  "columns.studio.group.title": "群組",
+  "columns.studio.userdict.title": "使用者字典",
+  "columns.studio.term.title": "術語",
+  "columns.studio.course.title": "課程",
+  "columns.studio.article.title": "文章",
+  "columns.studio.anthology.title": "文集",
+  "columns.studio.analysis.title": "分析",
+  "columns.studio.collaboration.title": "協作",
+  "columns.studio.basic.title": "常用",
+  "columns.studio.advance.title": "進階",
+  "columns.studio.setting.title": "設定",
+  "columns.exp.title": "經驗",
+  "columns.studio.invite.title": "註冊邀請",
+  "columns.studio.transfer.title": "轉讓",
+  "columns.studio.attachment.title": "網盤",
+  "columns.studio.tag.title": "標籤",
+  ...buttons,
+  ...forms,
+  ...nut,
+  ...dict,
+  ...utilities,
+  ...setting,
+  ...auth,
+  ...course,
+  ...message,
+  ...label,
+  ...error,
+};
 
 export default items;

+ 153 - 0
dashboard-v6/src/locales/zh-Hant/label.ts

@@ -0,0 +1,153 @@
+const items = {
+  "labels.week.0": "星期日",
+  "labels.week.1": "星期一",
+  "labels.week.2": "星期二",
+  "labels.week.3": "星期三",
+  "labels.week.4": "星期四",
+  "labels.week.5": "星期五",
+  "labels.week.6": "星期六",
+  "labels.collaborators": "協作者",
+  "labels.collaboration": "協作",
+  "labels.search": "搜尋",
+  "labels.home": "主頁",
+  "labels.documents": "文件",
+  "labels.tools": "工具",
+  "labels.link": "連結",
+  "labels.library.access.link": "藏經閣訪問連結",
+  "labels.library.access.tip": "任何獲得此連結的人,都可以在藏經閣中閱讀該術語。",
+  "labels.studio.access.link": "譯經樓訪問連結",
+  "labels.upload": "上傳",
+  "labels.first-term": "第一個術語",
+  "labels.sign-in": "登入",
+  "labels.first-wbw": "第一個逐詞解析",
+  "labels.first-translation": "第一個譯文",
+  "labels.first-course": "第一個課程",
+  "labels.updated-at": "更新於",
+  "labels.created-at": "創建於",
+  "labels.recent-scan": "最近開啟",
+  "labels.icp": "ICP:",
+  "labels.no.login": "尚未登入",
+  "labels.page.number.type.M": "緬文版頁碼",
+  "labels.page.number.type.T": "泰文版頁碼",
+  "labels.page.number.type.P": "PTS版頁碼",
+  "labels.page.number.type.V": "印度內觀研究所版頁碼",
+  "labels.page.number.type.O": "其他頁碼",
+  "labels.page.number.type.para": "緬文段落",
+  "labels.curr.paragraph.only": "僅顯示此段",
+  "labels.curr.paragraph.open": "在新標籤頁開啟",
+  "labels.curr.paragraph.copy.tpl": "複製句子編號",
+  "labels.curr.paragraph.quote.link.tpl": "引用連結模版",
+  "labels.curr.paragraph.copy.quote.link.tpl": "複製引用模版",
+  "labels.input": "請輸入",
+  "labels.selected": "已經選擇",
+  "labels.page.number.type.c": "章節名稱",
+  "labels.loading": "載入中",
+  "labels.empty": "無內容",
+  "labels.curr.paragraph.cart.tpl": "新增到手推車",
+  "labels.dict.pass.0": "內文查詢",
+  "labels.dict.pass.1": "直接查",
+  "labels.dict.pass.2": "查詞典源型",
+  "labels.dict.pass.3": "查衍生",
+  "labels.dict.pass.4": "查二次衍生",
+  "labels.software.edition.guest": "未註冊",
+  "labels.software.edition.basic": "基礎版",
+  "labels.software.edition.pro": "增強版",
+  "labels.table-of-content": "目錄",
+  "labels.this-studio": "此工作室",
+  "labels.feedback": "網站功能報錯與建議",
+  "labels.email.sign-up.subject": "歡迎註冊wikipāli",
+  "labels.sign-up": "註冊",
+  "labels.done": "完成",
+  "labels.tag.list": "標籤列表",
+  "labels.error.401": "未登入",
+  "labels.error.403": "沒有權限",
+  "labels.error.404": "沒有找到指定的資源",
+  "labels.error.429": "請求過於頻繁",
+  "labels.error.500": "伺服器內部錯誤",
+  "labels.task": "任務",
+  "labels.task.hall": "任務大廳",
+  "labels.task.mine": "我的任務",
+  "labels.task.pending": "待辦",
+  "labels.task.my.project": "我的專案",
+  "labels.all": "全部",
+  "labels.mention.me": "提及我的",
+  "labels.in.progressing": "進行中",
+  "labels.closed": "已關閉",
+  "labels.workflow": "工作流",
+  "labels.task.status.pending": "待定",
+  "labels.task.status.published": "已發布",
+  "labels.task.status.running": "進行中",
+  "labels.task.status.done": "已完成",
+  "labels.task.status.restarted": "已重啟",
+  "labels.task.status.requested_restart": "已請求重啟",
+  "labels.task.status.closed": "已關閉",
+  "labels.task.status.canceled": "已取消",
+  "labels.task.status.expired": "已過期",
+  "labels.task.status.queue": "排隊中",
+  "labels.task.status.stop": "停止",
+  "labels.task.status.quit": "放棄",
+  "labels.task.status.pause": "暫停",
+  "labels.filter": "過濾器",
+  "labels.participants": "參與者",
+  "labels.task.category": "任務類型",
+  "labels.task.category.translate": "翻譯",
+  "labels.task.category.vocabulary": "詞彙表",
+  "labels.task.category.team": "術語",
+  "labels.task.category.review": "審稿",
+  "labels.task.category.proofread": "潤色",
+  "labels.task.category.suggest": "修改建議",
+  "labels.ai-assistant": "人工智慧助手",
+  "labels.filters.includes": "包含",
+  "labels.filters.not-includes": "不包含",
+  "labels.filters.equal": "等於",
+  "labels.filters.not-equal": "不等於",
+  "labels.filters.null": "為空",
+  "labels.filters.not-null": "不為空",
+  "labels.filters.and": "全部條件",
+  "labels.filters.or": "任一條件",
+  "labels.task.workflows": "工作流",
+  "labels.milestone": "里程碑",
+  "labels.flowchart": "流程圖",
+  "labels.table": "表格",
+  "labels.list": "列表",
+  "labels.shared": "共享",
+  "labels.community": "社群",
+  "labels.task.prev.executors": "前置執行者",
+  "channel.title": "版本風格",
+  "channel.type": "類型",
+  "channel.name": "名稱",
+  "channel.create.message.noname": "請輸入版本名稱",
+  "channel.type.all.title": "全部",
+  "channel.type.translation.label": "譯文",
+  "channel.type.nissaya.label": "Nissaya",
+  "channel.type.commentary.label": "註疏",
+  "channel.type.original.label": "原文",
+  "channel.type.message.required": "請輸入版本類型",
+  "channel.lang": "語言",
+  "channel.fields.lang.label": "語言",
+  "channel.fields.type.label": "類型",
+  "channel.fields.name.label": "名稱",
+  "channel.type.similar.label": "相似句",
+  "channel.source_type": "來源",
+  "channel.source_type.original": "原創",
+  "channel.source_type.reprint": "轉載",
+  "channel.source_type.ai": "人工智慧",
+  "channel.source_id": "來源ID",
+  "article.lable": "文章",
+  "article.fields.article.count.label": "文章數量",
+  "term.fields.sn.label": "序號",
+  "term.fields.word.label": "詞頭",
+  "term.fields.description.label": "標籤",
+  "term.fields.description.tooltip":
+    "單詞說明,可以用來區分相同拼寫的不同單詞。",
+  "term.fields.channel.label": "所屬版本",
+  "term.fields.channel.tooltip": "該術語僅僅用於某個版本",
+  "term.fields.meaning.label": "意思",
+  "term.fields.meaning.tooltip": "單詞的首選意思",
+  "term.fields.meaning2.label": "其他意思",
+  "term.fields.meaning2.tooltip": "其他意思將出現在後面的括號裡",
+  "term.fields.note.label": "註釋",
+  "term.general-in-studio": "通用於本Studio",
+};
+
+export default items;

+ 23 - 0
dashboard-v6/src/locales/zh-Hant/message.ts

@@ -0,0 +1,23 @@
+const items = {
+  "flashes.success": "操作成功",
+  "message.copy.success": "已複製到剪貼簿",
+  "message.copy.fail": "複製失敗",
+  "message.irrevocable": "此操作不可撤銷",
+  "message.delete.confirm": "確定刪除嗎?",
+  "message.auth.guest.alert":
+    "伺服器未返回登入資訊,目前只能檢視公開資料,其他功能無法使用;請重新整理頁面或重新登入。",
+  "message.channel.empty.alert": "沒有版本風格被選擇,僅顯示原文。",
+  "message.time": "用時 {time} 秒",
+  "message.result": "{count} 條結果",
+  "message.send.reset.email":
+    "系統將向您的註冊郵箱傳送郵件。請輸入您的註冊郵箱。並確保該郵箱可以接受郵件。",
+  "message.send.reset.email.successful": "重置密碼的郵件已經發送到您的郵箱",
+  "message.password.reset.successful": "重置密碼成功",
+  "message.password.reset": "請設定新的密碼",
+  "message.get.token.fail": "獲取token失敗",
+  "message.confirm-password.validate.fail": "兩次密碼不一致",
+  "message.delete.success": "成功刪除{count}條資料",
+  "message.task.status.change": "將任務狀態修改為{status}嗎?",
+};
+
+export default items;

+ 7 - 1
dashboard-v6/src/locales/zh-Hant/nut/index.ts

@@ -1,3 +1,9 @@
-const items = {};
+const items = {
+  "nut.users.sign-in.title": "登入",
+  "nut.users.sign-up.title": "註冊",
+  "nut.users.sign-in-up.title": "登入/註冊",
+  "nut.users.logs.title": "日誌列表",
+  "nut.users.forgot-password.title": "忘記密碼",
+};
 
 export default items;

+ 19 - 0
dashboard-v6/src/locales/zh-Hant/pages.ts

@@ -0,0 +1,19 @@
+const items = {
+  "pages.dashboard.title": "控制台",
+  "pages.ai-model.edit.title": "編輯 AI 模型",
+  "pages.ai-model.log.title": "AI 模型日誌",
+  "pages.users.account-info.title": "帳戶資訊",
+  "pages.users.change-password.title": "修改密碼",
+  "pages.users.personal.title": "個人中心",
+  "pages.tipitaka.title": "聖典",
+  "pages.workspace.home.title": "歡迎來到wikipali",
+  "pages.team.title": "團隊",
+  "pages.task.project.title": "專案",
+  "pages.task.show.title": "任務",
+  "pages.tipitaka.chapter.title": "章節",
+  "pages.tipitaka.para.title": "段落",
+  "pages.tipitaka.cs-para.title": "CS段落",
+  "pages.tipitaka.page.title": "頁碼",
+};
+
+export default items;

+ 50 - 0
dashboard-v6/src/locales/zh-Hant/setting/index.ts

@@ -0,0 +1,50 @@
+const items = {
+  "setting.display.original.label": "顯示原文",
+  "setting.display.original.description": "是否顯示原文(僅閱讀模式)",
+  "setting.layout.direction.label": "排版方向",
+  "setting.layout.direction.description": "橫向或者縱向排版",
+  "setting.layout.direction.col.label": "縱向排版",
+  "setting.layout.direction.row.label": "橫向排版",
+  "setting.translate.layout.direction.label": "排版方向",
+  "setting.translate.layout.direction.description":
+    "翻譯模式下原文與譯文的排版方向(自動時與閱讀模式一致)",
+  "setting.translate.layout.direction.auto.label": "自動",
+  "setting.layout.paragraph.label": "對照方式",
+  "setting.layout.paragraph.description": "逐段或逐句對照(僅閱讀模式)",
+  "setting.layout.paragraph.paragraph.label": "逐段",
+  "setting.layout.paragraph.sentence.label": "逐句",
+  "setting.pali.script.primary.label": "巴利文字",
+  "setting.pali.script.primary.description": "首要的巴利語文字",
+  "setting.pali.script.secondary.label": "第二巴利文字",
+  "setting.pali.script.secondary.description": "第二個巴利語文字",
+  "setting.pali.script.rome.label": "羅馬巴利",
+  "setting.pali.script.my.label": "緬文字母",
+  "setting.pali.script.si.label": "新哈拉字母",
+  "setting.pali.script.thai.label": "泰文字母",
+  "setting.pali.script.tai.label": "傣仂文字母",
+  "setting.pali.script.none.label": "不顯示",
+  "setting.search.match.label": "單詞匹配",
+  "setting.search.match.complete.label": "精確",
+  "setting.search.match.case.label": "變格",
+  "setting.search.match.similar.label": "形似",
+  "setting.search.orderby.label": "排序",
+  "setting.search.orderby.rank.label": "相關度",
+  "setting.search.orderby.paragraph.label": "段落",
+  "setting.dict.lang.label": "字典語言",
+  "setting.dict.lang.description": "字典查詢結果的語言排序",
+  "setting.nissaya.layout.read.label": "閱讀排版方式",
+  "setting.nissaya.layout.edit.label": "編輯排版方式",
+  "setting.nissaya.layout.inline.label": "連續",
+  "setting.nissaya.layout.list.label": "列表",
+  "setting.wbw.order.label": "顯示輸入順序提示",
+  "setting.term.first.show.label": "第一個術語",
+  "setting.term.first.show.description": "第一個術語的顯示方式",
+  "term.first.show.meaning_pali_others": "意思巴利及其他意思",
+  "term.first.show.meaning_pali": "意思巴利",
+  "term.first.show.meaning_others": "意思其他解釋",
+  "term.first.show.meaning": "僅意思",
+  "setting.layout.commentary.label": "註釋排版方向",
+  "setting.layout.root.fixed.label": "根節點固定顯示",
+};
+
+export default items;

+ 13 - 0
dashboard-v6/src/locales/zh-Hant/utilities.ts

@@ -0,0 +1,13 @@
+const items = {
+  "utilities.time.now": "現在",
+  "utilities.time.secs_ago": "秒之前",
+  "utilities.time.mins_ago": "分鐘之前",
+  "utilities.time.hs_ago": "小時之前",
+  "utilities.time.days_ago": "天之前",
+  "utilities.time.weeks_ago": "周之前",
+  "utilities.time.months_ago": "月之前",
+  "utilities.time.year_ago": "年之前",
+  "utilities.time.years_ago": "年之前",
+};
+
+export default items;

+ 27 - 0
dashboard-v6/src/pages/workspace/task/show.tsx

@@ -0,0 +1,27 @@
+// 任务详情页面
+import { useMatches, useParams } from "react-router";
+import { useIntl } from "react-intl";
+
+import Task from "../../../components/task/Task";
+
+const Widget = () => {
+  const { taskId } = useParams();
+  const intl = useIntl();
+  const matches = useMatches() as {
+    data?: { title?: string; name?: string; word?: string };
+  }[];
+  const data = [...matches].reverse().find((m) => m.data)?.data;
+  const name = data?.title ?? data?.name ?? data?.word;
+  const prefix = intl.formatMessage({ id: "pages.task.show.title" });
+
+  return (
+    <>
+      <title>{name ? `${prefix}-${name}` : prefix}</title>
+      <div style={{ maxWidth: 1000, margin: "0 auto" }}>
+        <Task taskId={taskId} />
+      </div>
+    </>
+  );
+};
+
+export default Widget;

+ 11 - 1
dashboard-v6/src/routes/taskRouters.ts

@@ -1,7 +1,7 @@
 // src/routes/taskRouters.ts
 import { lazy } from "react";
 import type { RouteObject } from "react-router";
-import { projectLoader } from "../api/task";
+import { projectLoader, taskLoader } from "../api/task";
 
 // 懒加载页面组件
 const hall = lazy(() => import("../pages/workspace/task/hall"));
@@ -11,6 +11,7 @@ const projects = lazy(() => import("../pages/workspace/task/projects"));
 const project = lazy(() => import("../pages/workspace/task/project"));
 const projectEdit = lazy(() => import("../pages/workspace/task/project-edit"));
 const workflows = lazy(() => import("../pages/workspace/task/workflow"));
+const show = lazy(() => import("../pages/workspace/task/show"));
 
 const taskRoutes: RouteObject[] = [
   {
@@ -32,6 +33,15 @@ const taskRoutes: RouteObject[] = [
         Component: list,
         handle: { id: "workspace.task.list", crumb: "list" },
       },
+      {
+        path: ":taskId",
+        Component: show,
+        loader: taskLoader,
+        handle: {
+          id: "workspace.task.show",
+          crumb: (match: { data: { title: string } }) => match.data.title,
+        },
+      },
       {
         path: "project",
         handle: { id: "workspace.task.project", crumb: "project" },