From 22e171840d1ad996e1751f145feb04b76f7ada18 Mon Sep 17 00:00:00 2001 From: liding Date: Mon, 10 Jun 2024 12:43:46 +0800 Subject: [PATCH] Fix article sort problem in non-zh environment. --- package-lock.json | 6 ++++++ package.json | 1 + src/components/article/CollectionSummary.astro | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) 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..178de8e 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, "en"); } ) : 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, "en"); } ); return object;