Repository navigation
v2026.0.3
动态国际化
- 新增站点语言管理:可配置语言、文字方向、默认语言、回退链及界面/内容启用状态。
- 新增界面语言包草稿、发布、JSON 导入导出和 ICU 消息支持;Cookie/账号语言同步到服务端首屏。
- 成就改为按启用语言动态填写名称、说明和提示,旧中英文数据自动迁移;逐语言版本校验避免覆盖其他翻译,草稿不泄露到公开响应。
- 通用多语言字段组件支持复制及翻译空白字段,可供后续会员和等级模块复用。
成就模块
- 管理员可默认关闭或启用成就模块,并配置公开陈列、解锁通知、用户隐藏权限和陈列数量。
- 新增 18 项阅读、创作、社区和账号白名单指标,支持 all/any 多条件、阈值、时间窗口、对象过滤、系列等级、稀有度与中英文文案。
- 成就图标支持 Font Awesome、栅格图片和安全净化 SVG;自动评估使用持久化去重事件与后台重算任务。
- 新增“我的成就”、公开主页成就陈列、人工授予与撤销、展示偏好、通知偏好和完整审计记录。
完整提交记录(125 条)
- chore: release 2026.0.3 (f965a92)
- chore(release): promote unreleased changelog notes into new version (46f221b)
- chore(release): verify version sources match the tag in release.sh (f019372)
- style(detail): make the "you may also like" grid fit columns to width (4f08900)
- feat(achievements): split the definition modal into basic and localization tabs (d2162ab)
- feat(i18n): make the language switcher an icon dropdown (a0febee)
- fix(home): drop invalid className on latest-list CoverImage (0f181ec)
- feat(achievements): add reading-days, published-books and tags-used metrics (f0759c6)
- feat(achievements): link category to rule metrics, add a date-time picker (5e9c4b6)
- feat(home): rebuild the content area to the new prototype layout (6a7f5cc)
- feat(detail): split contents and reviews into horizontal tabs (e9d50bd)
- feat(explore): add a members-only books filter for signed-in users (f20a65f)
- feat(books): auto-fit book grid columns to the viewport width (ab90836)
- feat(books): let the copy dialog set the new book's access path (b43d79a)
- feat(seo): serve /sitemap.xml with public books and published chapters (2be8095)
- feat(import): web-collected chapters follow parent status when enabled (870e871)
- fix(auth): only show the email-activation banner when activation is required (40f118e)
- refactor(admin): move language management to its own left-nav menu (cebb95d)
- fix(reader,writer): reset scroll to top on chapter switch; link writer title (3f8b9d6)
- feat(books): allow book descriptions up to 1000 characters (3172af1)
- feat(achievements): scope create button to definitions tab, i18n metric catalog (572f0bc)
- fix(server): let long text columns exceed the MySQL 64KB text limit (21cb4b9)
- chore: ignore the .rundata browser session directory (e0ecce9)
- fix(ui): let achievement controls follow the theme control size (5fd1214)
- fix(i18n): remove stray Chinese text from two English strings (67fd446)
- feat(i18n): make site languages, UI messages and content translatable at runtime (050b345)
- docs: add installation guide (e923a50)
- fix(ui): let custom max-width classes override the Modal default (f29e01d)
- ci: run checks on pushes to dev (3db0a5f)
- ci: add i18n integrity check to web checks (a5cebdd)
- fix(i18n): add missing common.settings fallback key (6c45d87)
- fix(i18n): translate revision reason label in history list (cd5c823)
- refactor(seo): generate sitemaps via Go background job and move site URL to site settings (9e25c65)
- feat(seo): serve sitemaps from static files refreshed daily in background (377557a)
- feat(seo): shard sitemap into an index for scale and faster builds (f757672)
- feat(seo): include public chapter reader URLs in sitemap (79c7d03)
- fix(seo): emit canonical /book/detail/{slug} URLs in sitemap (03ed207)
- feat(book): split localization & versions into a dedicated settings tab (c0029eb)
- fix(i18n): replace missing admin.nav.chapters references with admin.nav.documents (3401fb9)
- fix(i18n): resolve tsc errors in web (a3da129)
- fix(achievements): widen the achievement editor modal to fit its content (68c0326)
- i18n: localize print TOC heading and editor component-snippet scaffolding (eeedc67)
- i18n(admin): localize the achievements admin page (aaf69de)
- i18n(admin): drop dead task label maps, localize oauth hints and translation placeholder (ffe9314)
- i18n(install): localize the setup wizard (b88ebf2)
- i18n(achievements): localize the my-achievements page (0509ae3)
- i18n: localize site meta description fallback and admin system console strings (9d0095d)
- i18n(writer): localize the book writer workbench (fb14886)
- i18n(2fa): localize TwoFactorSettings (6f8432e)
- i18n(book-settings): localize access-path, data and danger tabs (4293477)
- feat(admin,books): dedicated footer-links tab, group localization fields (4227a8c)
- feat(editor): metadata toolbar button with icon picker, add Accordion/Steps inserts (6353acf)
- fix(writer): surface save/publish feedback, auto-scroll TOC to active chapter (565b6f8)
- feat(editor): add Accordion and Steps blocks, verify recursive block parsing (f07315f)
- feat(achievements): add configurable achievement system (474b31c)
- fix(i18n): restore web quality gates (55b8057)
- feat(i18n): wire books page, BookForm and book settings pages to i18n (a807298)
- feat(i18n): wire base UI components and fill missing locale keys (b24b9ec)
- i18n(global): localize _app.tsx loading messages (5440b31)
- i18n(user/profile): localize public profile page (00c3096)
- i18n(user/theme): localize theme page (f902d34)
- i18n(user/reading): localize reading page (c57294b)
- i18n(user/oauth): localize oauth page (d05e380)
- i18n(user/export): localize export page (214f4f7)
- i18n(user/trash): localize trash page (05353af)
- i18n(user/security): localize security page (6820cb4)
- i18n(user/notes): localize notes page (6fc88f9)
- i18n(user/analytics): localize analytics page (c240651)
- i18n(user/profile): localize profile page (5b099b2)
- fix(markdown): handle indented migration content and unanchored tag matching (0c50253)
- i18n(admin/settings): localize translation page (666c4d9)
- i18n(admin/settings): localize captcha page (860117d)
- i18n(admin/settings): localize registration page (a9d2939)
- i18n(admin/settings): localize login security page (2405ecb)
- i18n(admin/settings): localize content page (ef8e882)
- i18n(admin/settings): localize oauth page (44b86e7)
- i18n(admin/settings): localize mail and storage pages (97263ec)
- i18n(admin/settings): localize index and site pages (c1abc1a)
- fix(markdown): fence-aware and nesting-aware block scanning for extensions (0670c81)
- i18n(admin): localize admin pages (b65345b)
- i18n(admin): localize achievements management page (6229816)
- feat(documents): promote draft book to in_progress when a chapter is published (0b52ee7)
- i18n(components): localize shared layout and admin components (6963a45)
- i18n(components): finish shared translations (8fb5c96)
- i18n(components): localize shared user-facing components (5fa3578)
- feat(translation): configurable translation with editor translate button (faa1b1b)
- feat(reviews): add book ratings and reviews (d231cd3)
- feat(editor): support Tabs/Note/Warning/Tip components and sub-chapter TOC (bb3a13c)
- feat(docs): custom tree icons via metadata (51d9865)
- feat(site): make footer links admin-configurable by group (c61f124)
- feat(site): render release notes as markdown in the version modal (ba7c938)
- fix(books): enter first chapter after copy, add reader TOC expand/collapse-all (7f8ea52)
- fix(books): tidy slug editor layout, add save loading + child-status toggle to book settings (e29ccbf)
- feat(writer): let authors set a custom document path (slug) (a9213e9)
- i18n(user): localize danger zone and invite-code pages (c13878e)
- fix(ui): smoother cover loading — fade in over gradient, no gray skeleton (2b3f07f)
- i18n(user): localize favorites and notification settings pages (5ded150)
- fix(home): show real meta under hero book cards instead of empty bars (3a4ec32)
- i18n(reader): localize the chapter reader page (70ee408)
- feat(ui): add a loading skeleton for book cover images (0fbca54)
- fix(2fa): keep the step-up modal above other dialogs; test trash-delete step-up (62305f4)
- i18n(detail): localize the book detail page (f0b8b85)
- i18n(books,comments): localize create-book page and the comments section (0cac27c)
- i18n(books): localize BookCard status/visibility/description (shared across lists) (fad1df0)
- i18n(public): localize the explore and search pages (10797c9)
- i18n(home): localize the home page (hero, stats, latest, popular sections) (f677683)
- feat(books): one-time editable access path for copied books (12a1282)
- fix(explore): stop the browse tabs and content overflowing on mobile (42fe1c1)
- fix(books): copy all config on duplicate; reactive + in-reader variant switch (af121f9)
- i18n(auth): localize forgot/reset password, verify-email, oauth callback, 404 (6ee8799)
- i18n(auth): localize login, register and OAuth surfaces (7be568d)
- fix(ui): show per-row loading for backend actions in lists (b67b6df)
- i18n(nav): localize the app shell (header, nav, footer, user menu) (dc1bc1c)
- feat(chapters): cascade publish status to children and follow-parent default (721538c)
- feat(i18n): add internationalization with namespace.function.keyname keys (4274136)
- feat(writer): support all heading levels H1-H6 in the toolbar (7bd941b)
- feat(site): configurable help doc, user agreement and privacy policy (f778485)
- feat(books): icon actions and more operations in chapter management (90766e6)
- fix(notifications): use the themed content container (dda96dc)
- fix(ui): make toasts compact and theme-size independent (6341bf0)
- fix(notify): don't flash the admin-disabled banner while loading (f15a795)
- fix(writer): guard document loader against out-of-order responses (76e7ae9)
- fix(release): cross-compile Docker image and use complete release notes (1ff6888)
- feat(writer): git-diff-style comparison in version history (4f49d3b)
- chore(release): bump version to 2026.0.3 (d2bfa7e)
完整更新日志见 CHANGELOG.md。