From c47b183e0e43b5817dfcf096826dc2561ba92d85 Mon Sep 17 00:00:00 2001 From: qianyu Date: Fri, 4 Sep 2026 19:46:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E8=84=9A=E5=8A=A0=E5=BC=80=E6=BA=90?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.go | 3 +- config.example.env | 2 + config.go | 2 + i18n_de.go | 1 + i18n_en.go | 1 + i18n_es.go | 1 + i18n_fr.go | 1 + i18n_id.go | 1 + i18n_ja.go | 1 + i18n_ko.go | 1 + i18n_pt.go | 1 + i18n_ru.go | 1 + i18n_tr.go | 1 + i18n_vi.go | 1 + layout.html | 356 ++++++++++++++++++++++++++++++++++++++++++ templates/layout.html | 3 +- 16 files changed, 375 insertions(+), 2 deletions(-) create mode 100644 layout.html diff --git a/app.go b/app.go index 7ff97f3..d9f3b03 100644 --- a/app.go +++ b/app.go @@ -46,6 +46,7 @@ type Base struct { SiteTitle string BaseURL string RepoURL string + SourceURL string AuthorGitHub string AuthorX string SubsitesEnabled bool @@ -245,7 +246,7 @@ func (a *App) sameOrigin(r *http.Request) bool { } func (a *App) base(r *http.Request) Base { - b := Base{SiteTitle: a.cfg.SiteTitle, BaseURL: a.cfg.BaseURL, RepoURL: a.cfg.RepoURL, AuthorGitHub: a.cfg.AuthorGitHub, AuthorX: a.cfg.AuthorX, SubsitesEnabled: a.cfg.SubsitesEnabled, + b := Base{SiteTitle: a.cfg.SiteTitle, BaseURL: a.cfg.BaseURL, RepoURL: a.cfg.RepoURL, SourceURL: a.cfg.SourceURL, AuthorGitHub: a.cfg.AuthorGitHub, AuthorX: a.cfg.AuthorX, SubsitesEnabled: a.cfg.SubsitesEnabled, IsMobile: isMobile(r), InApp: inAppBrowser(r.UserAgent()), HasBGM: hasBGM, Me: a.currentSite(r)} if b.Me != nil { b.MeID = b.Me.ID diff --git a/config.example.env b/config.example.env index 1e11e29..514a1a9 100644 --- a/config.example.env +++ b/config.example.env @@ -10,6 +10,8 @@ ADMIN_PASSWORD= # 页脚作者链接(可留空不显示) AUTHOR_GITHUB=https://github.com/qianyubtc AUTHOR_X=https://x.com/qianyuwing +# 本站源码仓库,页脚展示(留空不显示) +SOURCE_URL=https://github.com/qianyubtc/newbeggar # 说明:ADMIN_PASSWORD 只在首次建站或这里的值改变时写入;主站在后台改过口令后重启不会被冲掉 # 站点标题 diff --git a/config.go b/config.go index 794301c..dddc43c 100644 --- a/config.go +++ b/config.go @@ -18,6 +18,7 @@ type Config struct { AdminPassword string // 主站登录口令(路径留空 + 此口令) SiteTitle string RepoURL string + SourceURL string // 本站自己的开源仓库,页脚展示(留空不显示) AuthorGitHub string // 页脚作者 GitHub 链接 AuthorX string // 页脚作者 X 链接 @@ -115,6 +116,7 @@ func loadConfig(path string) (*Config, error) { AdminPassword: get("ADMIN_PASSWORD", get("ADMIN_TOKEN", "")), SiteTitle: get("SITE_TITLE", "赛博要饭"), RepoURL: get("REPO_URL", "https://github.com/qianyubtc/BinancePayTool"), + SourceURL: get("SOURCE_URL", "https://github.com/qianyubtc/newbeggar"), AuthorGitHub: get("AUTHOR_GITHUB", "https://github.com/qianyubtc"), AuthorX: get("AUTHOR_X", "https://x.com/qianyuwing"), MainName: get("MAIN_NAME", "站长"), diff --git a/i18n_de.go b/i18n_de.go index e85ebf8..8d3fbf1 100644 --- a/i18n_de.go +++ b/i18n_de.go @@ -3,6 +3,7 @@ package main // 德语:key 是中文原文,占位符 %s/%d 顺序须与中文一致。查不到回落英文。 func init() { translations["de"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Diese Seite ist Open Source ⭐", // ---- 站名 / meta ---- "赛博要饭": "Cyber-Bettler", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Cyber-Bettler: eine kleine Münze, gute Seele. Spende mit Binance Pay und hinterlass eine Zeile im Buch der Verdienste; pleite? wirf eine Gratis-Münze; ein Tweet auf X und dein eigener Napf steht.", diff --git a/i18n_en.go b/i18n_en.go index 2f0488b..29f9e41 100644 --- a/i18n_en.go +++ b/i18n_en.go @@ -3,6 +3,7 @@ package main // 英文:其它语言查不到时也回落到这里。key 是中文原文(模板/代码里的 T "…"),占位符 %s/%d 顺序须与中文一致。 func init() { translations["en"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "This site is open source — star it ⭐", // ---- 站名 / meta ---- "赛博要饭": "Cyber Beggar", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Cyber Beggar: spare a coin. Tip with Binance Pay and leave a line in the Book of Merit; toss a free coin if you're broke; open your own bowl with one tweet on X.", diff --git a/i18n_es.go b/i18n_es.go index bd66e7e..c2ac5b1 100644 --- a/i18n_es.go +++ b/i18n_es.go @@ -3,6 +3,7 @@ package main // 西班牙语(中性拉美 / 国际)。key 是中文原文,占位符 %s/%d 顺序须与中文一致。 func init() { translations["es"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Este sitio es de código abierto ⭐", // ---- 站名 / meta ---- "赛博要饭": "Mendigo Cyber", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Mendigo Cyber: una monedita, buena gente. Dona con Binance Pay y deja una frase en el Libro de Méritos; si no tienes dinero, lanza una moneda gratis; abre tu propio cuenco con un tuit en X.", diff --git a/i18n_fr.go b/i18n_fr.go index e4c34f8..e8fed0a 100644 --- a/i18n_fr.go +++ b/i18n_fr.go @@ -3,6 +3,7 @@ package main // 法语:key 是中文原文,占位符 %s/%d 顺序须与中文一致。查不到回落英文。 func init() { translations["fr"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Ce site est open source ⭐", // ---- 站名 / meta ---- "赛博要饭": "Cyber Mendiant", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Cyber Mendiant : une petite pièce, brave âme. Donne avec Binance Pay et laisse un mot dans le Livre des Mérites ; fauché ? lance un jeton gratuit ; un tweet sur X et tu ouvres ton propre bol.", diff --git a/i18n_id.go b/i18n_id.go index 5b9ffc4..8083bc9 100644 --- a/i18n_id.go +++ b/i18n_id.go @@ -3,6 +3,7 @@ package main // 印尼语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。 func init() { translations["id"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Situs ini open source ⭐", // ---- 站名 / meta ---- "赛博要饭": "Pengemis Cyber", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Pengemis Cyber: kasihanilah, beri sesuap nasi. Sedekah lewat Binance Pay dan tinggalkan pesan di Buku Amal; bokek? lempar koin gratis; satu tweet di X langsung punya mangkuk sendiri.", diff --git a/i18n_ja.go b/i18n_ja.go index 863f4bc..b9cff8b 100644 --- a/i18n_ja.go +++ b/i18n_ja.go @@ -3,6 +3,7 @@ package main // 日本語。key は中文原文(テンプレート/コードの T "…")、%s/%d の順序は中文と同じ。 func init() { translations["ja"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "本サイトはオープンソースです ⭐", // ---- 站名 / meta ---- "赛博要饭": "サイバー物乞い", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "サイバー物乞い:お恵みを、一口だけでも。Binance Pay で投げ銭して功徳帳にひとこと残そう。お金がなくても無料コインを投げられる。X でツイート1本、自分の椀が持てる。", diff --git a/i18n_ko.go b/i18n_ko.go index 1c31b6b..25f0c15 100644 --- a/i18n_ko.go +++ b/i18n_ko.go @@ -3,6 +3,7 @@ package main // 한국어. key 는 중국어 원문(템플릿/코드의 T "…"), %s/%d 순서는 중국어와 동일. func init() { translations["ko"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "이 사이트는 오픈소스입니다 ⭐", // ---- 站名 / meta ---- "赛博要饭": "사이버 거지", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "사이버 거지: 한 푼만 적선해 주세요. Binance Pay로 적선하고 공덕부에 한마디 남기기. 돈이 없으면 무료 동전이라도. X에 트윗 한 번이면 내 그릇도 열 수 있어요.", diff --git a/i18n_pt.go b/i18n_pt.go index 76b917d..d834920 100644 --- a/i18n_pt.go +++ b/i18n_pt.go @@ -3,6 +3,7 @@ package main // 葡萄牙语(巴西)。key 是中文原文,占位符 %s/%d 顺序须与中文一致。 func init() { translations["pt"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Este site é open source ⭐", // ---- 站名 / meta ---- "赛博要饭": "Mendigo Cyber", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Mendigo Cyber: uma moedinha, gente boa. Doe com Binance Pay e deixe uma frase no Livro de Méritos; sem grana, jogue uma moeda grátis; abra sua própria tigela com um tweet no X.", diff --git a/i18n_ru.go b/i18n_ru.go index 2b2a0d7..c9d17af 100644 --- a/i18n_ru.go +++ b/i18n_ru.go @@ -3,6 +3,7 @@ package main // 俄语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。 func init() { translations["ru"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Сайт с открытым кодом — ставьте ⭐", // ---- 站名 / meta ---- "赛博要饭": "Кибер-нищий", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Кибер-нищий: подайте монетку. Подайте через Binance Pay и оставьте строчку в Книге добрых дел; нет денег — киньте бесплатную монетку; один твит в X открывает вашу собственную миску.", diff --git a/i18n_tr.go b/i18n_tr.go index 2304967..c12a577 100644 --- a/i18n_tr.go +++ b/i18n_tr.go @@ -3,6 +3,7 @@ package main // 土耳其语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。 func init() { translations["tr"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Bu site açık kaynak ⭐", // ---- 站名 / meta ---- "赛博要饭": "Siber Dilenci", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Siber Dilenci: bir sadaka ver. Binance Pay ile bağış yap ve Sevap Defteri'ne bir satır bırak; paran yoksa ücretsiz jeton at; X'te tek tweetle kendi kaseni aç.", diff --git a/i18n_vi.go b/i18n_vi.go index 9a9b153..e3922df 100644 --- a/i18n_vi.go +++ b/i18n_vi.go @@ -3,6 +3,7 @@ package main // 越南语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。 func init() { translations["vi"] = map[string]string{ + "本站开源,欢迎 Star ⭐": "Trang này là mã nguồn mở ⭐", // ---- 站名 / meta ---- "赛博要饭": "Ăn Xin Cyber", "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Ăn Xin Cyber: làm ơn làm phước, cho xin miếng cơm. Bố thí bằng Binance Pay và để lại một câu trong Sổ Công Đức; hết tiền thì ném xu miễn phí; một tweet trên X là có bát ăn xin riêng.", diff --git a/layout.html b/layout.html new file mode 100644 index 0000000..12f4393 --- /dev/null +++ b/layout.html @@ -0,0 +1,356 @@ +{{define "layout"}} + + + + + +{{template "title" .}} + + + + +{{if .OGImage}}{{end}} + + +{{if .NoIndex}}{{end}} + + + + +{{if .HasBGM}}{{end}} +
+ + +{{template "content" .}} + +
+ +{{block "scripts" .}}{{end}} + +{{end}} +{{define "pager"}}{{if gt .Pages 1}}{{end}}{{end}} diff --git a/templates/layout.html b/templates/layout.html index b9b5cbd..12f4393 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -270,7 +270,8 @@ footer a{color:var(--muted)}