diff --git a/package-lock.json b/package-lock.json index dd75b91..5413f1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@astrojs/check": "^0.7.0", "@astrojs/sitemap": "^3.1.5", "astro": "^4.9.2", + "pinyin-pro": "^3.22.0", "typescript": "^5.4.5" } }, @@ -4620,6 +4621,11 @@ "node": ">=6" } }, + "node_modules/pinyin-pro": { + "version": "3.22.0", + "resolved": "https://registry.npmmirror.com/pinyin-pro/-/pinyin-pro-3.22.0.tgz", + "integrity": "sha512-fz1rvX72K/OmUp3Bbj8/jzRt0aSetmmx/Su4My1H/nUu5x2udnp0Qiq+ojxDXk1CojXBgSUcjXyMI3XNhwSoLg==" + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", diff --git a/package.json b/package.json index f97e8e3..ce6f076 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@astrojs/check": "^0.7.0", "@astrojs/sitemap": "^3.1.5", "astro": "^4.9.2", + "pinyin-pro": "^3.22.0", "typescript": "^5.4.5" } } diff --git a/src/components/article/CollectionSummary.astro b/src/components/article/CollectionSummary.astro index 1eba3a1..8f3050e 100644 --- a/src/components/article/CollectionSummary.astro +++ b/src/components/article/CollectionSummary.astro @@ -3,6 +3,8 @@ import type { CollectionEntry } from "astro:content"; import { getCollection, type CollectionKey } from "astro:content"; import CategorySummary from "./CategorySummary.astro"; +import * as pinyinpro from "pinyin-pro"; + interface Props { collectionName: CollectionKey; sortedByTimeline: boolean; @@ -36,7 +38,13 @@ const categoriedPostList: Array = allCategories.map((key) => { if (postA.data.lastUpdate !== postB.data.lastUpdate) { return postA.data.lastUpdate < postB.data.lastUpdate ? 1 : -1; } - return postA.id.localeCompare(postB.id); + let postATitle = pinyinpro.convert(pinyinpro.pinyin(postA.id), { + format: "symbolToNum", + }); + let postBTitle = pinyinpro.convert(pinyinpro.pinyin(postB.id), { + format: "symbolToNum", + }); + return postATitle.localeCompare(postBTitle); } ) : object[key].sort( @@ -44,7 +52,13 @@ const categoriedPostList: Array = allCategories.map((key) => { postA: CollectionEntry, postB: CollectionEntry ) => { - return postA.id.localeCompare(postB.id); + let postATitle = pinyinpro.convert(pinyinpro.pinyin(postA.id), { + format: "symbolToNum", + }); + let postBTitle = pinyinpro.convert(pinyinpro.pinyin(postB.id), { + format: "symbolToNum", + }); + return postATitle.localeCompare(postBTitle); } ); return object;