quartz/quartz/i18n/locales/id-ID.ts
Soushi888 b29dc907e8 feat(components): add RecentChanges component
Adds a RecentChanges component that displays a live activity feed of
recently created and modified notes, with richer UX than RecentNotes.

Features:
- Created vs. modified distinction (badge + 1h threshold heuristic)
- Tab filter UI: All / New (by creation date) / Updated (modified only)
- Load-more pagination per tab with configurable page size
- Client-side relative timestamps via Intl.RelativeTimeFormat (locale-aware)
- Progressive enhancement: SSR initial render + JSON data island for client
- localStorage persistence of the active filter tab
- Fully i18n: all UI strings go through cfg.locale

New files:
- quartz/components/RecentChanges.tsx
- quartz/components/scripts/recentChanges.inline.ts
- quartz/components/utils/recentChanges.ts
- quartz/components/styles/recentChanges.scss

Modified:
- quartz/components/index.ts: export RecentChanges
- quartz/i18n/locales/definition.ts: add recentChanges translation block
- quartz/i18n/locales/*.ts (30 files): add English fallback translations
2026-03-17 23:10:46 -04:00

98 lines
2.5 KiB
TypeScript

import { Translation } from "./definition"
export default {
propertyDefaults: {
title: "Tanpa Judul",
description: "Tidak ada deskripsi",
},
components: {
callout: {
note: "Catatan",
abstract: "Abstrak",
info: "Info",
todo: "Daftar Tugas",
tip: "Tips",
success: "Berhasil",
question: "Pertanyaan",
warning: "Peringatan",
failure: "Gagal",
danger: "Bahaya",
bug: "Bug",
example: "Contoh",
quote: "Kutipan",
},
backlinks: {
title: "Tautan Balik",
noBacklinksFound: "Tidak ada tautan balik ditemukan",
},
themeToggle: {
lightMode: "Mode Terang",
darkMode: "Mode Gelap",
},
readerMode: {
title: "Mode Pembaca",
},
explorer: {
title: "Penjelajah",
},
footer: {
createdWith: "Dibuat dengan",
},
graph: {
title: "Tampilan Grafik",
},
recentNotes: {
title: "Catatan Terbaru",
seeRemainingMore: ({ remaining }) => `Lihat ${remaining} lagi →`,
},
recentChanges: {
title: "Recent Changes",
filterAll: "All",
filterNew: "New",
filterUpdated: "Updated",
loadMoreTemplate: "Load {count} more · {remaining} remaining",
noChanges: "No recent changes found.",
badgeNew: "New",
badgeUpdated: "Edited",
},
transcludes: {
transcludeOf: ({ targetSlug }) => `Transklusi dari ${targetSlug}`,
linkToOriginal: "Tautan ke asli",
},
search: {
title: "Cari",
searchBarPlaceholder: "Cari sesuatu",
},
tableOfContents: {
title: "Daftar Isi",
},
contentMeta: {
readingTime: ({ minutes }) => `${minutes} menit baca`,
},
},
pages: {
rss: {
recentNotes: "Catatan terbaru",
lastFewNotes: ({ count }) => `${count} catatan terakhir`,
},
error: {
title: "Tidak Ditemukan",
notFound: "Halaman ini bersifat privat atau tidak ada.",
home: "Kembali ke Beranda",
},
folderContent: {
folder: "Folder",
itemsUnderFolder: ({ count }) =>
count === 1 ? "1 item di bawah folder ini." : `${count} item di bawah folder ini.`,
},
tagContent: {
tag: "Tag",
tagIndex: "Indeks Tag",
itemsUnderTag: ({ count }) =>
count === 1 ? "1 item dengan tag ini." : `${count} item dengan tag ini.`,
showingFirst: ({ count }) => `Menampilkan ${count} tag pertama.`,
totalTags: ({ count }) => `Ditemukan total ${count} tag.`,
},
},
} as const satisfies Translation