Browse Source

Merge pull request #2449 from visuddhinanda/development

Development
visuddhinanda 3 weeks ago
parent
commit
4db617dc5f

+ 1 - 0
api-v13/app/Http/Controllers/BookTitleController.php

@@ -34,6 +34,7 @@ class BookTitleController extends Controller
             $relatedNames = $this->relatedNames($result);
             foreach ($result as $row) {
                 $key = "{$row->book}-{$row->paragraph}";
+                $row->pcd_book_id = $row->sn;
                 $row->toc = $meta[$key]['toc'] ?? null;
                 $row->tags = $meta[$key]['tags'] ?? [];
                 $row->related_name = $relatedNames[$key] ?? null;

+ 49 - 49
dashboard-v4/dashboard/src/components/fts/book_name.ts

@@ -705,7 +705,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Dutiyo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -715,7 +715,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Tatiyo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -725,7 +725,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Catuttho bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -735,7 +735,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Pañcamo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -745,7 +745,7 @@ export const bookName = [
     name: "Dhammasaṅgaṇīpāḷi",
     term: "dhammasaṅgaṇīpāḷi",
     v_title: "dhammasaṅgaṇīpāḷi",
-    m_title: "dhammasaṅgaṇīpāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "dhammasaṅgaṇīpāḷi",
     abbr: "abhi. dha.",
   },
@@ -755,7 +755,7 @@ export const bookName = [
     name: "Vibhaṅgapāḷi",
     term: "vibhaṅgapāḷi",
     v_title: "vibhaṅgapāḷi",
-    m_title: "vibhaṅgapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "vibhaṅgapāḷi",
     abbr: "abhi. vi.",
   },
@@ -765,7 +765,7 @@ export const bookName = [
     name: "Dhātukathāpāḷi",
     term: "dhātukathāpāḷi",
     v_title: "dhātukathāpāḷi",
-    m_title: "dhātukathāpāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "dhātukathāpāḷi",
     abbr: "abhi. dhā.",
   },
@@ -775,7 +775,7 @@ export const bookName = [
     name: "Puggalapaññattipāḷi",
     term: "puggalapaññattipāḷi",
     v_title: "puggalapaññattipāḷi",
-    m_title: "puggalapaññattipāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "puggalapaññattipāḷi",
     abbr: "abhi. pu.",
   },
@@ -785,7 +785,7 @@ export const bookName = [
     name: "Kathāvatthupāḷi",
     term: "kathāvatthupāḷi",
     v_title: "kathāvatthupāḷi",
-    m_title: "kathāvatthupāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "kathāvatthupāḷi",
     abbr: "abhi. ka.",
   },
@@ -795,7 +795,7 @@ export const bookName = [
     name: "Yamakapāḷi (paṭhamo bhāgo)",
     term: "yamakapāḷi",
     v_title: "yamakapāḷi",
-    m_title: "yamakapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "yamakapāḷi",
     abbr: "yamaka.",
   },
@@ -805,7 +805,7 @@ export const bookName = [
     name: "Yamakapāḷi (dutiyo bhāgo)",
     term: "yamakapāḷi",
     v_title: "yamakapāḷi",
-    m_title: "yamakapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "yamakapāḷi",
     abbr: "yamaka.",
   },
@@ -815,7 +815,7 @@ export const bookName = [
     name: "Yamakapāḷi (tatiyo bhāgo)",
     term: "yamakapāḷi",
     v_title: "yamakapāḷi",
-    m_title: "yamakapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "yamakapāḷi",
     abbr: "yamaka.",
   },
@@ -825,7 +825,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Paṭhamo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -973,9 +973,9 @@ export const bookName = [
     id: 102,
     book: 96,
     name: "Dhammasaṅgaṇī-aṭṭhakathā",
-    term: "dhammasaṅgaṇī-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "dhammasaṅgaṇī-aṭṭhakathā",
-    m_title: "dhammasaṅgaṇī-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "dhammasaṅgaṇī-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 1",
   },
@@ -983,9 +983,9 @@ export const bookName = [
     id: 103,
     book: 97,
     name: "Vibhaṅga-aṭṭhakathā",
-    term: "vibhaṅga-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "vibhaṅga-aṭṭhakathā",
-    m_title: "vibhaṅga-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "vibhaṅga-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 2",
   },
@@ -993,9 +993,9 @@ export const bookName = [
     id: 104,
     book: 98,
     name: "Pañcapakaraṇa-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1003,9 +1003,9 @@ export const bookName = [
     id: 105,
     book: 98,
     name: "puggalapaññatti-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1013,9 +1013,9 @@ export const bookName = [
     id: 106,
     book: 98,
     name: "kathāvatthu-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1023,9 +1023,9 @@ export const bookName = [
     id: 107,
     book: 98,
     name: "yamakappakaraṇa-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1033,9 +1033,9 @@ export const bookName = [
     id: 108,
     book: 98,
     name: "paṭṭhānappakaraṇa-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1515,7 +1515,7 @@ export const bookName = [
     name: "Pārājikakaṇḍa-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "pārājikakaṇḍa-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1525,7 +1525,7 @@ export const bookName = [
     name: "Pācittiya-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "pācittiyādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1535,7 +1535,7 @@ export const bookName = [
     name: "Mahāvagga-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "pācittiyādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1545,7 +1545,7 @@ export const bookName = [
     name: "Cūḷavagga-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "cūḷavaggādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1555,7 +1555,7 @@ export const bookName = [
     name: "Parivāra-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "cūḷavaggādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1863,9 +1863,9 @@ export const bookName = [
     id: 191,
     book: 172,
     name: "dhammasaṅgaṇī-mūlaṭīkā",
-    term: "dhammasaṅgaṇī-mūlaṭīkā",
+    term: "mūlaṭīkā",
     v_title: "dhammasaṅgaṇī-mūlaṭīkā",
-    m_title: "dhammasaṅgaṇī-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "dhammasaṅgaṇī-mūlaṭīkā",
     abbr: "mūlaṭī. 1",
   },
@@ -1873,9 +1873,9 @@ export const bookName = [
     id: 192,
     book: 173,
     name: "vibhaṅga-mūlaṭīkā",
-    term: "vibhaṅga-mūlaṭīkā",
+    term: "mūlaṭīkā",
     v_title: "vibhaṅga-mūlaṭīkā",
-    m_title: "vibhaṅga-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "vibhaṅga-mūlaṭīkā",
     abbr: "mūlaṭī. 2",
   },
@@ -1883,9 +1883,9 @@ export const bookName = [
     id: 193,
     book: 173,
     name: "Vibhaṅga-anuṭīkā",
-    term: "vibhaṅga-anuṭīkā",
+    term: "anuṭīkā",
     v_title: "vibhaṅga-anuṭīkā",
-    m_title: "vibhaṅga-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "vibhaṅga-anuṭīkā",
     abbr: "anuṭī. 2",
   },
@@ -1895,7 +1895,7 @@ export const bookName = [
     name: "pañcapakaraṇa-mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1905,7 +1905,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1915,7 +1915,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1925,7 +1925,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1935,7 +1935,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1945,7 +1945,7 @@ export const bookName = [
     name: "dhammasaṅgaṇī-anuṭīkā",
     term: "dhammasaṅgaṇī-anuṭīkā",
     v_title: "dhammasaṅgaṇī-anuṭīkā",
-    m_title: "dhammasaṅgaṇī-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "dhammasaṅgaṇī-anuṭīkā",
     abbr: "anuṭī. 1",
   },
@@ -1955,7 +1955,7 @@ export const bookName = [
     name: "dhātukathāpakaraṇa-anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1965,7 +1965,7 @@ export const bookName = [
     name: "puggalapaññattipakaraṇa-anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1975,7 +1975,7 @@ export const bookName = [
     name: "kathāvatthupakaraṇa-anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1985,7 +1985,7 @@ export const bookName = [
     name: "anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1995,7 +1995,7 @@ export const bookName = [
     name: "anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },

+ 18 - 7
dashboard-v6/src/api/article.ts

@@ -578,22 +578,33 @@ export async function articleLoader({ params }: LoaderFunctionArgs) {
 /**
  * 页码导航
  *
- * pageId 形如 `M-dīghanikāya-2-10`(页码类型_书名_卷号_页码),
- * 内部通过 bookName 表把书名 term 反查为 book id 后请求
- * GET /api/v2/nav-page/{TYPE}-{booksId}-{volume}-{page}
+ * pageId 形如 `M-dīghanikāya-2-10`(页码类型_书名_卷号_页码)。
+ * 书名(第 2 段)需按页码类型对应不同版本的书名标题字段反查 book id:
+ * M 缅文版 → m_title,P PTS版 → p_title,V 内观研究所版 → v_title,
+ * 其余类型退回 term(与后端 pageInfoByPara 的映射保持一致),
+ * 之后请求 GET /api/v2/nav-page/{TYPE}-{booksId}-{volume}-{page}。
  */
 export const fetchPageNav = (pageId: string): Promise<IPageNavResponse> => {
   const pageParam = pageId.split("_");
   if (pageParam.length < 4) {
     return Promise.reject(new Error(`invalid page id: ${pageId}`));
   }
+  const type = pageParam[0].toUpperCase();
+  const titleField: "term" | "m_title" | "p_title" | "v_title" =
+    type === "M"
+      ? "m_title"
+      : type === "P"
+        ? "p_title"
+        : type === "V"
+          ? "v_title"
+          : "term";
   const booksId = bookName
-    .filter((value) => value.term === pageParam[1])
+    .filter((value) => value[titleField] === pageParam[1])
     .map((item) => item.id)
     .join("_");
-  const url = `/api/v2/nav-page/${pageParam[0].toUpperCase()}-${booksId}-${
-    pageParam[2]
-  }-${pageParam[3]}`;
+  const url = `/api/v2/nav-page/${type}-${booksId}-${pageParam[2]}-${
+    pageParam[3]
+  }`;
   return get<IPageNavResponse>(url);
 };
 

+ 49 - 49
dashboard-v6/src/api/bookName.ts

@@ -705,7 +705,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Dutiyo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -715,7 +715,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Tatiyo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -725,7 +725,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Catuttho bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -735,7 +735,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Pañcamo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -745,7 +745,7 @@ export const bookName = [
     name: "Dhammasaṅgaṇīpāḷi",
     term: "dhammasaṅgaṇīpāḷi",
     v_title: "dhammasaṅgaṇīpāḷi",
-    m_title: "dhammasaṅgaṇīpāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "dhammasaṅgaṇīpāḷi",
     abbr: "abhi. dha.",
   },
@@ -755,7 +755,7 @@ export const bookName = [
     name: "Vibhaṅgapāḷi",
     term: "vibhaṅgapāḷi",
     v_title: "vibhaṅgapāḷi",
-    m_title: "vibhaṅgapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "vibhaṅgapāḷi",
     abbr: "abhi. vi.",
   },
@@ -765,7 +765,7 @@ export const bookName = [
     name: "Dhātukathāpāḷi",
     term: "dhātukathāpāḷi",
     v_title: "dhātukathāpāḷi",
-    m_title: "dhātukathāpāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "dhātukathāpāḷi",
     abbr: "abhi. dhā.",
   },
@@ -775,7 +775,7 @@ export const bookName = [
     name: "Puggalapaññattipāḷi",
     term: "puggalapaññattipāḷi",
     v_title: "puggalapaññattipāḷi",
-    m_title: "puggalapaññattipāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "puggalapaññattipāḷi",
     abbr: "abhi. pu.",
   },
@@ -785,7 +785,7 @@ export const bookName = [
     name: "Kathāvatthupāḷi",
     term: "kathāvatthupāḷi",
     v_title: "kathāvatthupāḷi",
-    m_title: "kathāvatthupāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "kathāvatthupāḷi",
     abbr: "abhi. ka.",
   },
@@ -795,7 +795,7 @@ export const bookName = [
     name: "Yamakapāḷi (paṭhamo bhāgo)",
     term: "yamakapāḷi",
     v_title: "yamakapāḷi",
-    m_title: "yamakapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "yamakapāḷi",
     abbr: "yamaka.",
   },
@@ -805,7 +805,7 @@ export const bookName = [
     name: "Yamakapāḷi (dutiyo bhāgo)",
     term: "yamakapāḷi",
     v_title: "yamakapāḷi",
-    m_title: "yamakapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "yamakapāḷi",
     abbr: "yamaka.",
   },
@@ -815,7 +815,7 @@ export const bookName = [
     name: "Yamakapāḷi (tatiyo bhāgo)",
     term: "yamakapāḷi",
     v_title: "yamakapāḷi",
-    m_title: "yamakapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "yamakapāḷi",
     abbr: "yamaka.",
   },
@@ -825,7 +825,7 @@ export const bookName = [
     name: "Paṭṭhānapāḷi(Paṭhamo bhāgo)",
     term: "paṭṭhānapāḷi",
     v_title: "paṭṭhānapāḷi",
-    m_title: "paṭṭhānapāḷi",
+    m_title: "abhidhammapiṭaka",
     p_title: "paṭṭhānapāḷi",
     abbr: "paṭṭhāna.",
   },
@@ -973,9 +973,9 @@ export const bookName = [
     id: 102,
     book: 96,
     name: "Dhammasaṅgaṇī-aṭṭhakathā",
-    term: "dhammasaṅgaṇī-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "dhammasaṅgaṇī-aṭṭhakathā",
-    m_title: "dhammasaṅgaṇī-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "dhammasaṅgaṇī-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 1",
   },
@@ -983,9 +983,9 @@ export const bookName = [
     id: 103,
     book: 97,
     name: "Vibhaṅga-aṭṭhakathā",
-    term: "vibhaṅga-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "vibhaṅga-aṭṭhakathā",
-    m_title: "vibhaṅga-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "vibhaṅga-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 2",
   },
@@ -993,9 +993,9 @@ export const bookName = [
     id: 104,
     book: 98,
     name: "Pañcapakaraṇa-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1003,9 +1003,9 @@ export const bookName = [
     id: 105,
     book: 98,
     name: "puggalapaññatti-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1013,9 +1013,9 @@ export const bookName = [
     id: 106,
     book: 98,
     name: "kathāvatthu-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1023,9 +1023,9 @@ export const bookName = [
     id: 107,
     book: 98,
     name: "yamakappakaraṇa-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1033,9 +1033,9 @@ export const bookName = [
     id: 108,
     book: 98,
     name: "paṭṭhānappakaraṇa-aṭṭhakathā",
-    term: "pañcapakaraṇa-aṭṭhakathā",
+    term: "abhidhamma-aṭṭhakathā",
     v_title: "pañcapakaraṇa-aṭṭhakathā",
-    m_title: "pañcapakaraṇa-aṭṭhakathā",
+    m_title: "abhidhamma-aṭṭhakathā",
     p_title: "pañcapakaraṇa-aṭṭhakathā",
     abbr: "abhi. ṭṭha. 3",
   },
@@ -1515,7 +1515,7 @@ export const bookName = [
     name: "Pārājikakaṇḍa-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "pārājikakaṇḍa-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1525,7 +1525,7 @@ export const bookName = [
     name: "Pācittiya-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "pācittiyādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1535,7 +1535,7 @@ export const bookName = [
     name: "Mahāvagga-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "pācittiyādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1545,7 +1545,7 @@ export const bookName = [
     name: "Cūḷavagga-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "cūḷavaggādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1555,7 +1555,7 @@ export const bookName = [
     name: "Parivāra-aṭṭhakathā",
     term: "vinaya-aṭṭhakathā",
     v_title: "vinaya-aṭṭhakathā",
-    m_title: "cūḷavaggādi-aṭṭhakathā",
+    m_title: "vinaya-aṭṭhakathā",
     p_title: "vinaya-aṭṭhakathā",
     abbr: "vi. ṭṭha.",
   },
@@ -1863,9 +1863,9 @@ export const bookName = [
     id: 191,
     book: 172,
     name: "dhammasaṅgaṇī-mūlaṭīkā",
-    term: "dhammasaṅgaṇī-mūlaṭīkā",
+    term: "mūlaṭīkā",
     v_title: "dhammasaṅgaṇī-mūlaṭīkā",
-    m_title: "dhammasaṅgaṇī-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "dhammasaṅgaṇī-mūlaṭīkā",
     abbr: "mūlaṭī. 1",
   },
@@ -1873,9 +1873,9 @@ export const bookName = [
     id: 192,
     book: 173,
     name: "vibhaṅga-mūlaṭīkā",
-    term: "vibhaṅga-mūlaṭīkā",
+    term: "mūlaṭīkā",
     v_title: "vibhaṅga-mūlaṭīkā",
-    m_title: "vibhaṅga-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "vibhaṅga-mūlaṭīkā",
     abbr: "mūlaṭī. 2",
   },
@@ -1883,9 +1883,9 @@ export const bookName = [
     id: 193,
     book: 173,
     name: "Vibhaṅga-anuṭīkā",
-    term: "vibhaṅga-anuṭīkā",
+    term: "anuṭīkā",
     v_title: "vibhaṅga-anuṭīkā",
-    m_title: "vibhaṅga-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "vibhaṅga-anuṭīkā",
     abbr: "anuṭī. 2",
   },
@@ -1895,7 +1895,7 @@ export const bookName = [
     name: "pañcapakaraṇa-mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1905,7 +1905,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1915,7 +1915,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1925,7 +1925,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1935,7 +1935,7 @@ export const bookName = [
     name: "mūlaṭīkā",
     term: "pañcapakaraṇa-mūlaṭīkā",
     v_title: "pañcapakaraṇa-mūlaṭīkā",
-    m_title: "pañcapakaraṇa-mūlaṭīkā",
+    m_title: "mūlaṭīkā",
     p_title: "pañcapakaraṇa-mūlaṭīkā",
     abbr: "mūlaṭī. 3",
   },
@@ -1945,7 +1945,7 @@ export const bookName = [
     name: "dhammasaṅgaṇī-anuṭīkā",
     term: "dhammasaṅgaṇī-anuṭīkā",
     v_title: "dhammasaṅgaṇī-anuṭīkā",
-    m_title: "dhammasaṅgaṇī-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "dhammasaṅgaṇī-anuṭīkā",
     abbr: "anuṭī. 1",
   },
@@ -1955,7 +1955,7 @@ export const bookName = [
     name: "dhātukathāpakaraṇa-anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1965,7 +1965,7 @@ export const bookName = [
     name: "puggalapaññattipakaraṇa-anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1975,7 +1975,7 @@ export const bookName = [
     name: "kathāvatthupakaraṇa-anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1985,7 +1985,7 @@ export const bookName = [
     name: "anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },
@@ -1995,7 +1995,7 @@ export const bookName = [
     name: "anuṭīkā",
     term: "pañcapakaraṇa-anuṭīkā",
     v_title: "pañcapakaraṇa-anuṭīkā",
-    m_title: "pañcapakaraṇa-anuṭīkā",
+    m_title: "anuṭīkā",
     p_title: "pañcapakaraṇa-anuṭīkā",
     abbr: "anuṭī. 3",
   },

+ 24 - 11
dashboard-v6/src/components/dict/SearchVocabulary.tsx

@@ -3,6 +3,7 @@ import type { IVocabularyListResponse } from "../../api/dict";
 import { useEffect, useRef, useState } from "react";
 import { AutoComplete, Input, Space, Typography } from "antd";
 import { DictIcon } from "../../assets/icon";
+import { useDebouncedCallback } from "./hooks/useDebouncedCallback";
 
 const { Text, Link } = Typography;
 
@@ -30,7 +31,8 @@ const SearchVocabulary = ({
   const [fetching, setFetching] = useState(false);
   const [input, setInput] = useState<string | undefined>(value);
   const [factors, setFactors] = useState<string[]>([]);
-  const intervalRef = useRef<number | null>(null);
+  // 请求序号:用于竞态防护,只保留最新一次请求的结果
+  const seqRef = useRef(0);
 
   // 外部 value(点击单词触发的查词)变化时,同步输入框显示。
   // 仅在 value 真正变化时同步,用户手动输入时 value 不会变,因此不会打断输入。
@@ -55,13 +57,6 @@ const SearchVocabulary = ({
     ),
   });
 
-  const stopLookup = () => {
-    if (intervalRef.current) {
-      window.clearInterval(intervalRef.current);
-      intervalRef.current = null;
-    }
-  };
-
   const factorChange = (word?: string) => {
     if (typeof word === "undefined" || word.includes(":")) {
       setFactors([]);
@@ -78,11 +73,14 @@ const SearchVocabulary = ({
   };
 
   const search = (value: string) => {
-    stopLookup();
     if (value === "") return;
 
+    // 记录本次请求序号,响应回来时若已不是最新序号则丢弃(竞态防护)
+    const seq = ++seqRef.current;
+
     get<IVocabularyListResponse>(`/api/v2/${api}?view=key&key=${value}`)
       .then((json) => {
+        if (seq !== seqRef.current) return;
         const words: ValueType[] = json.data.rows
           .map((item) => {
             let weight = item.count / (item.strlen - value.length + 0.1);
@@ -103,10 +101,16 @@ const SearchVocabulary = ({
         setOptions(words);
       })
       .finally(() => {
-        setFetching(false);
+        if (seq === seqRef.current) {
+          setFetching(false);
+        }
       });
   };
 
+  // 输入补全防抖:连续输入 300ms 内只发最后一次请求
+  const { debounced: debouncedSearch, cancel: cancelSearch } =
+    useDebouncedCallback(search, 300);
+
   return (
     <div style={{ width: "100%" }}>
       {fetching ? <></> : null}
@@ -125,8 +129,16 @@ const SearchVocabulary = ({
         }}
         showSearch={{
           onSearch: (val: string) => {
+            if (val === "") {
+              // 空输入:立即取消挂起请求,并使在途请求失效,清空建议
+              seqRef.current++;
+              cancelSearch();
+              setOptions([]);
+              setFetching(false);
+              return;
+            }
             setFetching(true);
-            search(val);
+            debouncedSearch(val);
           },
         }}
         onSelect={(val: string) => {
@@ -137,6 +149,7 @@ const SearchVocabulary = ({
           style={{ width: "100%" }}
           size={compact ? undefined : "large"}
           placeholder="search here"
+          loading={fetching}
           onSearch={(val: string) => {
             onSearch?.(val);
           }}

+ 116 - 0
dashboard-v6/src/components/dict/hooks/useDebouncedCallback.ts

@@ -0,0 +1,116 @@
+// hooks/useDebouncedCallback.ts
+// 通用防抖回调 Hook。
+// 默认尾沿触发(trailing):连续调用时只有最后一次调用会真正执行;
+// 提供 leading 立即触发、cancel 取消挂起调用、flush 立即执行挂起调用。
+// debounced 返回引用稳定的函数,内部通过 ref 读取最新 callback,避免过期闭包。
+
+import { useCallback, useEffect, useRef } from "react";
+
+export interface IDebounceOptions {
+  /** 连续调用的第一次是否立即触发,默认 false */
+  leading?: boolean;
+  /** 静默期结束后是否触发最后一次,默认 true */
+  trailing?: boolean;
+}
+
+export interface IDebouncedCallback<Args extends unknown[]> {
+  /** 防抖后的函数(引用稳定) */
+  debounced: (...args: Args) => void;
+  /** 取消挂起的调用 */
+  cancel: () => void;
+  /** 立即执行当前挂起的调用 */
+  flush: () => void;
+}
+
+export function useDebouncedCallback<Args extends unknown[]>(
+  callback: (...args: Args) => void,
+  delay: number,
+  options: IDebounceOptions = {}
+): IDebouncedCallback<Args> {
+  const { leading = false, trailing = true } = options;
+
+  // 用 ref 保存最新值,debounced 内部通过 ref 读取,避免持有过期闭包
+  const callbackRef = useRef(callback);
+  const delayRef = useRef(delay);
+  const leadingRef = useRef(leading);
+  const trailingRef = useRef(trailing);
+
+  useEffect(() => {
+    callbackRef.current = callback;
+    delayRef.current = delay;
+    leadingRef.current = leading;
+    trailingRef.current = trailing;
+  });
+
+  const timerRef = useRef<number | null>(null);
+  const lastArgsRef = useRef<Args | null>(null);
+  // 上一次真正执行的时刻,用于 leading 的节流判断。
+  // 初始为 0:首调用时 time - 0 远大于 delay,视为可 leading。
+  const lastInvokeTimeRef = useRef(0);
+
+  const invoke = useCallback((time: number) => {
+    if (lastArgsRef.current === null) return;
+    const args = lastArgsRef.current;
+    lastArgsRef.current = null;
+    lastInvokeTimeRef.current = time;
+    callbackRef.current(...args);
+  }, []);
+
+  const cancel = useCallback(() => {
+    if (timerRef.current !== null) {
+      window.clearTimeout(timerRef.current);
+      timerRef.current = null;
+    }
+    lastArgsRef.current = null;
+  }, []);
+
+  const flush = useCallback(() => {
+    if (timerRef.current === null) return;
+    window.clearTimeout(timerRef.current);
+    timerRef.current = null;
+    invoke(Date.now());
+  }, [invoke]);
+
+  const debounced = useCallback(
+    (...args: Args) => {
+      const time = Date.now();
+      lastArgsRef.current = args;
+
+      // 距上次执行已超过 delay,且开启 leading 时,立即执行一次
+      const canLeading =
+        leadingRef.current &&
+        time - lastInvokeTimeRef.current >= delayRef.current;
+
+      // 清除旧的挂起定时器,重新计时(尾沿触发)
+      if (timerRef.current !== null) {
+        window.clearTimeout(timerRef.current);
+        timerRef.current = null;
+      }
+
+      if (canLeading) {
+        invoke(time);
+        // 仅 leading:不排尾沿定时器,直接返回
+        if (!trailingRef.current) return;
+      }
+
+      timerRef.current = window.setTimeout(() => {
+        timerRef.current = null;
+        if (trailingRef.current && lastArgsRef.current !== null) {
+          invoke(Date.now());
+        }
+      }, delayRef.current);
+    },
+    [invoke]
+  );
+
+  // 卸载时清理定时器,避免对已卸载组件 setState
+  useEffect(() => {
+    return () => {
+      if (timerRef.current !== null) {
+        window.clearTimeout(timerRef.current);
+      }
+    };
+  }, []);
+
+  return { debounced, cancel, flush };
+}

+ 13 - 3
dashboard-v6/src/components/sentence/SentContent.tsx

@@ -88,9 +88,19 @@ const SentContentWidget = ({
     if (containerWidth > 0 && containerWidth < 550) return "column";
     if (containerWidth === 0) return layout; // SSR / first render fallback
 
-    const userDirection = GetUserSetting("setting.layout.direction", settings);
-    if (typeof userDirection === "string") {
-      return userDirection as TDirection;
+    // 翻译模式排版方向:优先使用翻译设置,auto(或未设置)时回退到阅读模式
+    const translateDirection = GetUserSetting(
+      "setting.translate.layout.direction",
+      settings
+    );
+    const userDirection =
+      translateDirection === "auto" ||
+      typeof translateDirection === "undefined"
+        ? GetUserSetting("setting.layout.direction", settings)
+        : translateDirection;
+
+    if (userDirection === "row" || userDirection === "column") {
+      return userDirection;
     }
     return layout;
   }, [containerWidth, layout, settings]);

+ 2 - 2
dashboard-v6/src/components/sentence/SentRead.tsx

@@ -119,10 +119,10 @@ const SentReadFrame = ({
           __html: `<span class="pcd_sent" id="sent_${book}-${para}-${wordStart}-${wordEnd}"></span>`,
         }}
       />
-      <Flex vertical={layoutCommentary === "row"}>
+      <Flex vertical={layoutCommentary === "column"}>
         <Flex
           gap="middle"
-          vertical={layoutDirection === "row"}
+          vertical={layoutDirection === "column"}
           style={{ flex: 5 }}
         >
           {/* 原文 */}

+ 3 - 0
dashboard-v6/src/components/setting/SettingEditor.tsx

@@ -33,6 +33,9 @@ const SettingEditor = () => {
           id: `buttons.translate`,
         })}
       </Divider>
+      <SettingItem
+        data={SettingFind("setting.translate.layout.direction", settings)}
+      />
 
       <Divider>
         {intl.formatMessage({

+ 24 - 0
dashboard-v6/src/components/setting/default.ts

@@ -75,6 +75,30 @@ export const defaultSetting: ISetting[] = [
     ],
     widget: "radio-button",
   },
+  {
+    /**
+     * 翻译模式排版方向
+     */
+    key: "setting.translate.layout.direction",
+    label: "setting.translate.layout.direction.label",
+    description: "setting.translate.layout.direction.description",
+    defaultValue: "auto",
+    options: [
+      {
+        value: "auto",
+        label: "setting.translate.layout.direction.auto.label",
+      },
+      {
+        value: "column",
+        label: "setting.layout.direction.col.label",
+      },
+      {
+        value: "row",
+        label: "setting.layout.direction.row.label",
+      },
+    ],
+    widget: "select",
+  },
   {
     /**
      * commentary排版方向

+ 2 - 2
dashboard-v6/src/components/tipitaka/components/ParagraphReadPara.tsx

@@ -32,8 +32,8 @@ const ParagraphReadPara = ({ data }: IWidget) => {
   });
 
   return (
-    <Flex vertical={layoutCommentary === "row"}>
-      <Flex gap="middle" vertical={direction === "row"} style={{ flex: 5 }}>
+    <Flex vertical={layoutCommentary === "column"}>
+      <Flex gap="middle" vertical={direction === "column"} style={{ flex: 5 }}>
         {/**原文区 */}
         <div className="sent_read" style={{ flex: 5, padding: 4 }}>
           {data?.map((item) => {

+ 2 - 2
dashboard-v6/src/components/tipitaka/components/ParagraphReadSent.tsx

@@ -26,10 +26,10 @@ const ParagraphReadSent = ({ data }: IWidget) => {
     <div>
       {data?.map((item) => {
         return (
-          <Flex vertical={layoutCommentary === "row"}>
+          <Flex vertical={layoutCommentary === "column"}>
             <Flex
               gap="middle"
-              vertical={direction === "row"}
+              vertical={direction === "column"}
               style={{ flex: 5 }}
             >
               {/**原文区 */}

+ 4 - 0
dashboard-v6/src/locales/en-US/setting/index.ts

@@ -5,6 +5,10 @@ const items = {
   "setting.layout.direction.description": "横向或者纵向排版",
   "setting.layout.direction.col.label": "colum",
   "setting.layout.direction.row.label": "row",
+  "setting.translate.layout.direction.label": "direction",
+  "setting.translate.layout.direction.description":
+    "Original & translation layout in translation mode (auto follows reading mode)",
+  "setting.translate.layout.direction.auto.label": "auto",
   "setting.layout.paragraph.label": "对照方式",
   "setting.layout.paragraph.description": "逐段或逐句对照(仅阅读模式)",
   "setting.layout.paragraph.paragraph.label": "逐段",

+ 4 - 0
dashboard-v6/src/locales/zh-Hans/setting/index.ts

@@ -5,6 +5,10 @@ const items = {
   "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": "逐段",