880 字
4 分钟
对 Fuwari 的增强改动教程
注意

fuwari 现在还没有版本之分(这时候),都是 v0.0.1 的版本。

无论是哪个版本,请不要随意升级。

进行过自定义更改,修改过代码的,

升级建议通过下载新的重命名旧的,手动复制配置,

粘贴使用的文件,如果代码在新版本不兼容等各项事项都应该尝试自己解决。

归档页面添加更新日期#

1.给Post数据补上updated字段#

补充

这个字段不需要你去赋值,

上游已经传递了,你只需要在Post接口中声明一下即可

ArchivePanel.svelte
interface Post {
slug: string;
data: {
title: string;
tags: string[];
category?: string;
published: Date;
updated: Date;
};
}

2.在formatDate函数后再添加一个函数#

ArchivePanel.svelte
function formatDateTwo(date: Date,datePublished: Date) {
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date.getDate().toString().padStart(2, "0");
const year = date.getFullYear();
if (date.getFullYear() != datePublished.getFullYear()) {
return `${year}-${month}-${day}`;
}
return `${month}-${day}`;
}
疑惑

为什么不使用formatDate函数?而是再写一个?

原本的formatDate函数仅输出月份和日期,没有年份。

而更新日期是可能会跨年的,所以需要单独写一个函数来处理。

3.注释taglist元素后创建更新日期元素#

tag list说实话非常鸡肋,都有标签容器了,根本没必要在归档容器中在末尾写这个东西。

所以建议注释掉,相比标签,更新日期明显更有用。

ArchivePanel.svelte
<!-- tag list ... -->
<!-- 自己加的更新日期(包括i18n支持!) -->
<div
class="hidden md:block md:w-[15%] text-left text-sm transition
whitespace-nowrap overflow-ellipsis overflow-hidden text-30"
>
{post.data.updated && i18n(I18nKey.updatedAt)+" "+formatDateTwo(post.data.updated,post.data.published)}
</div>

看看效果吧#

效果图

疑惑

为什么更新日期和发布日期相同时会显示?

这里没有判断是否相同的代码,如果不想在相同时显示请尝试自己写个判断,或者删除相应的更新日期属性。

分类,标签翻译#

你是否好奇如何实现翻译过的标签或分类?

是否还在为fuwari官方没有文档和相关描写关于如何实现翻译而苦恼?

这里教你!

1.在i18n文件夹下新建一个ts文件#

我自己命名叫translite.ts,写下如下内容:

i18n/translite.ts
const transTable: { [key: string]: string } = {
"Products" : "产品",
"Today" : "今日",
"Daily" : "日常",
"Tutorial" : "教程",
"Game" : "游戏",
"Program" : "程序",
// 写下自己的翻译
}
export function Translite(key: string): string {
return transTable[key] || key;
}

你会发现,这里仅仅只是一个函数根据key返回对应的value,如果value不存在,则返回key本身。

这个就是最核心的内容,是不是很简单?

提醒

你可能对这个做法产生困惑,为什么不用自带的i18n函数呢?

因为i18n需要定义枚举,还要在对应语言文件下定义对应的value,太麻烦了!

而且fuwari目前本来就不支持实时多语言切换,没必要用这么复杂的东西。

还不如直接一张字符串表,更改简单!

2.修改组件生成的文本#

在下面用到Translite函数的地方记得引用,不然会报错(这不当然?)

公共部分
import { Translite } from "@i18n/translite";

修改PostMeta组件#

PostMeta 组件的 categoriestags 部分的文本内容表达式改成:

components/PostMeta.astro
<!-- categories 60行左右 -->
{category && Translite(category) || i18n(I18nKey.uncategorized)}
<!-- tags 77行左右 -->
{Translite(tag.trim())}

修改widget文件夹下的组件#

components/widget/Categories.astro
<!-- 31行左右 -->
label={`View all posts in the ${c.name.trim()} category`}
<!-- 33行左右 -->
{Translite(c.name.trim())}
components/widget/Tags.astro
<!-- 27行左右 -->
label={`View all posts with the ${Translite(t.name.trim())} tag`}
<!-- 28行左右 -->
{Translite(t.name.trim())}

完成!#

效果图

对 Fuwari 的增强改动教程
https://authorzixi.github.io/posts/today/2025/0804/
作者
AuthorZiXi
发布于
2025-08-04
许可协议
CC BY-NC-SA 4.0