多语言:12 种语言(中英日韩俄西葡法德越印尼土),中文原文为 key,按浏览器语言自动选 + 导航栏切换
This commit is contained in:
1 parent
2145b5a74a
commit
47d0819688
29 files changed
+5937
-311
No files matched your search
@@ -59,6 +59,7 @@
|
||||
| 徽章与回复 | 🏁 首位施主 💎 单笔最大 🔥 常客;站长可回复留言;感谢页一键生成像素分享卡 |
|
||||
| 声音 | 8-bit 音效由 Web Audio 现场合成,不加载音频文件;背景音乐可选(放一个 `static/bgm.m4a` 即可);喇叭一键静音 |
|
||||
| 后台 | 改资料、设收款、确认 / 拒绝手动施舍、屏蔽、回复、改口令(弹窗);主站站长额外可巡查全站留言、除名违规子站、帮站长重置口令 |
|
||||
| 多语言 | 中文原文即 key,按语言查表:中 / 英 / 日 / 韩 / 俄 / 西 / 葡 / 法 / 德 / 越 / 印尼 / 土 12 种;按浏览器语言自动选,导航栏 🌐 可切换(记 cookie);查不到的回落英文再回落中文 |
|
||||
| 部署 | 单二进制、SQLite(无 CGO)、模板与字体全部内嵌;交叉编译扔到任何 Linux 上就能跑 |
|
||||
|
||||
## 工作原理
|
||||
@@ -226,6 +227,8 @@ python3 e2e/real_gateway.py --serve --port=8124 # 同上但不退出,造一
|
||||
python3 tools/sprite.py > templates/sprite.html # 从字符网格重新生成像素小人 / 金币 / 碗
|
||||
```
|
||||
|
||||
多语言:模板里的中文用 `{{T "…"}}` 包起来,Go 里用 `a.T(r, "…")` / `tr(lang, "…")`,中文原文就是 key;译文在 `i18n_<lang>.go`,新增语言只需加一个文件并在 `i18n.go` 的 `langs` 里登记。`tools/i18n_wrap.py` 可把模板里裸露的中文批量包上 T 并列出 key。
|
||||
|
||||
背景音乐是可选的:把一段 AAC 循环片段放到 `static/bgm.m4a` 再编译即可,仓库不附带。换曲子请改文件名(静态路由是永久缓存)。
|
||||
|
||||
## 常见问题
|
||||
|
||||
@@ -32,7 +32,7 @@ type App struct {
|
||||
cfg *Config
|
||||
st *Store
|
||||
mux *http.ServeMux
|
||||
tpl map[string]*template.Template
|
||||
tpl map[string]map[string]*template.Template
|
||||
lim *limiter
|
||||
secure bool
|
||||
session []byte // 会话签名密钥(首次启动生成,存 meta 表)
|
||||
@@ -55,6 +55,8 @@ type Base struct {
|
||||
InApp bool // App 内置浏览器(X/微信等)
|
||||
HasBGM bool // static/bgm.m4a 存在才渲染背景音乐
|
||||
HomePath string // 左上角站名点回哪:刚才浏览的子站(cookie bhome),否则主站
|
||||
Lang string // 当前语言代码
|
||||
Langs []langInfo
|
||||
NoIndex bool // 未收录的子站不让搜索引擎收录
|
||||
Desc string // 页面描述(站点页用站名 + 口号)
|
||||
OGImage string // 分享缩略图(站点页用 X 头像)
|
||||
@@ -116,6 +118,7 @@ func (a *App) loadTemplates() error {
|
||||
"xav": a.xAvatar,
|
||||
"handleOf": handleOf,
|
||||
"lastSeg": xHandle,
|
||||
"safeHTML": func(s string) template.HTML { return template.HTML(s) },
|
||||
"dict": func(kv ...any) map[string]any {
|
||||
m := map[string]any{}
|
||||
for i := 0; i+1 < len(kv); i += 2 {
|
||||
@@ -124,17 +127,42 @@ func (a *App) loadTemplates() error {
|
||||
return m
|
||||
},
|
||||
}
|
||||
a.tpl = map[string]*template.Template{}
|
||||
for _, p := range []string{"site", "pay", "status", "new", "login", "manage", "rank", "error"} {
|
||||
t, err := template.New(p).Funcs(funcs).ParseFS(tplFS, "templates/layout.html", "templates/sprite.html", "templates/paypanel.html", "templates/"+p+".html")
|
||||
if err != nil {
|
||||
return err
|
||||
// 每种语言各编译一套:T / ago / level 等输出文案的函数绑定到对应语言
|
||||
a.tpl = map[string]map[string]*template.Template{}
|
||||
for _, l := range langs {
|
||||
fm := template.FuncMap{}
|
||||
for k, v := range funcs {
|
||||
fm[k] = v
|
||||
}
|
||||
a.tpl[p] = t
|
||||
for k, v := range langFuncs(l.Code) {
|
||||
fm[k] = v
|
||||
}
|
||||
set := map[string]*template.Template{}
|
||||
for _, p := range []string{"site", "pay", "status", "new", "login", "manage", "rank", "error"} {
|
||||
t, err := template.New(p).Funcs(fm).ParseFS(tplFS, "templates/layout.html", "templates/sprite.html", "templates/paypanel.html", "templates/"+p+".html")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
set[p] = t
|
||||
}
|
||||
a.tpl[l.Code] = set
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// langOf 渲染数据里的语言(所有页面数据都内嵌 Base)。
|
||||
type langData interface{ langCode() string }
|
||||
|
||||
func (b Base) langCode() string { return b.Lang }
|
||||
|
||||
func (a *App) tplFor(data any, page string) *template.Template {
|
||||
lang := "zh"
|
||||
if ld, ok := data.(langData); ok && langOK(ld.langCode()) {
|
||||
lang = ld.langCode()
|
||||
}
|
||||
return a.tpl[lang][page]
|
||||
}
|
||||
|
||||
func (a *App) routes() {
|
||||
m := http.NewServeMux()
|
||||
m.HandleFunc("GET /healthz", func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -158,6 +186,7 @@ func (a *App) routes() {
|
||||
m.HandleFunc("POST /d/{code}/claim", a.handleGatewayClaim)
|
||||
m.HandleFunc("POST /bpg/notify", a.handleNotify)
|
||||
m.HandleFunc("GET /rank", a.handleRank)
|
||||
m.HandleFunc("GET /lang", a.handleLang)
|
||||
m.HandleFunc("GET /new", a.handleNewGet)
|
||||
m.HandleFunc("POST /new/verify", a.handleNewVerify)
|
||||
m.HandleFunc("POST /new", a.handleNewPost)
|
||||
@@ -220,6 +249,7 @@ func (a *App) base(r *http.Request) Base {
|
||||
if b.Me != nil {
|
||||
b.MeID = b.Me.ID
|
||||
}
|
||||
b.Lang, b.Langs = a.lang(r), langs
|
||||
b.HomePath = "/"
|
||||
if s := cookieVal(r, "bhome"); s != "" && validSlug(s) {
|
||||
b.HomePath = "/" + s
|
||||
@@ -230,7 +260,7 @@ func (a *App) base(r *http.Request) Base {
|
||||
// renderFragment 只渲染某个 define(弹窗用的 HTML 片段)。
|
||||
func (a *App) renderFragment(w http.ResponseWriter, status int, page, name string, data any) {
|
||||
var buf bytes.Buffer
|
||||
if err := a.tpl[page].ExecuteTemplate(&buf, name, data); err != nil {
|
||||
if err := a.tplFor(data, page).ExecuteTemplate(&buf, name, data); err != nil {
|
||||
log.Printf("[error] 渲染片段 %s: %v", name, err)
|
||||
http.Error(w, "页面渲染失败", http.StatusInternalServerError)
|
||||
return
|
||||
@@ -243,7 +273,7 @@ func (a *App) renderFragment(w http.ResponseWriter, status int, page, name strin
|
||||
|
||||
func (a *App) render(w http.ResponseWriter, status int, name string, data any) {
|
||||
var buf bytes.Buffer
|
||||
if err := a.tpl[name].ExecuteTemplate(&buf, "layout", data); err != nil {
|
||||
if err := a.tplFor(data, name).ExecuteTemplate(&buf, "layout", data); err != nil {
|
||||
log.Printf("[error] 渲染 %s: %v", name, err)
|
||||
http.Error(w, "页面渲染失败", http.StatusInternalServerError)
|
||||
return
|
||||
|
||||
+5
-5
@@ -378,7 +378,7 @@ func TestFullFlow(t *testing.T) {
|
||||
|
||||
// 金额 / 垃圾过滤
|
||||
st, body, _ = c.post("/donate", url.Values{"site": {""}, "amount": {"0.001"}})
|
||||
must(t, st == 400 && strings.Contains(body, "最多 2 位小数"), "小数校验: %d", st)
|
||||
must(t, st == 400 && strings.Contains(body, "最多两位小数"), "小数校验: %d", st)
|
||||
st, body, _ = c.post("/donate", url.Values{"site": {""}, "amount": {"0.05"}})
|
||||
must(t, st == 400 && strings.Contains(body, "最少施舍 0.1"), "下限校验: %d", st)
|
||||
st, body, _ = c.post("/donate", url.Values{"site": {""}, "amount": {"1"}, "message": {"加微信 abc123 领福利"}})
|
||||
@@ -414,7 +414,7 @@ func TestFullFlow(t *testing.T) {
|
||||
must(t, p1 != nil && p1.Avatar != "", "施主头像应异步抓取: %+v", p1)
|
||||
st, body, _ = c.get("/d/" + code)
|
||||
must(t, st == 200 && strings.Contains(body, "谢谢施主 路人") && strings.Contains(body, "+5.0037") && strings.Contains(body, "生成分享卡"), "到账页: %d", st)
|
||||
must(t, strings.Contains(body, "排第 <b>1</b> 位"), "名次")
|
||||
must(t, strings.Contains(body, "排第 1 位"), "名次")
|
||||
st, body, _ = c.get("/")
|
||||
must(t, strings.Contains(body, "加油要饭 <b>x</b>") && strings.Contains(body, "🥇") && strings.Contains(body, "5.0037"), "主页功德簿/榜")
|
||||
must(t, strings.Contains(body, "/a/"+p1.Avatar) && strings.Contains(body, "@qianyu_fan") && strings.Contains(body, "🏁"), "主页应显示 X 头像与徽章")
|
||||
@@ -508,7 +508,7 @@ func TestFullFlow(t *testing.T) {
|
||||
must(t, st == 302 && strings.HasPrefix(h.Get("Location"), "/pay/BEG"), "子站下单: %d %s", st, h.Get("Location"))
|
||||
code3 := strings.TrimPrefix(h.Get("Location"), "/pay/")
|
||||
st, body, _ = c2.get("/pay/" + code3)
|
||||
must(t, st == 200 && strings.Contains(body, "123456") && strings.Contains(body, "支付</b>」→「<b>转账") && strings.Contains(body, "我已施舍"), "手动付款页: %d", st)
|
||||
must(t, st == 200 && strings.Contains(body, "123456") && strings.Contains(body, "「支付」→「转账」") && strings.Contains(body, "我已施舍"), "手动付款页: %d", st)
|
||||
st, _, h = c2.post("/pay/"+code3+"/claim", url.Values{"binance_order_id": {"452100000000000077"}})
|
||||
must(t, st == 302 && h.Get("Location") == "/d/"+code3, "自报: %d", st)
|
||||
st, body, _ = c.get("/manage")
|
||||
@@ -622,7 +622,7 @@ func TestFullFlow(t *testing.T) {
|
||||
must(t, st == 200, "重置口令直接渲染: %d", st)
|
||||
i := strings.Index(body, "的口令为 ")
|
||||
must(t, i > 0, "应显示新口令")
|
||||
newpw := strings.TrimSpace(strings.SplitN(body[i+len("的口令为 "):], " ", 2)[0])
|
||||
newpw := strings.TrimSpace(strings.SplitN(body[i+len("的口令为 "):], "(", 2)[0])
|
||||
st, _, _ = c.get("/manage")
|
||||
must(t, st == 302, "管理员重置口令后站长旧会话应失效: %d", st)
|
||||
st, _, _ = c.post("/login", url.Values{"slug": {"qianyuwing"}, "password": {newpw}})
|
||||
@@ -658,7 +658,7 @@ func TestFullFlow(t *testing.T) {
|
||||
// ⑬ 弹窗:异步下单返回付款面板;回填订单编号由本站代转网关核对
|
||||
c8 := e.client()
|
||||
st, body, h = c8.post("/donate", url.Values{"site": {""}, "amount": {"0.001"}, "ajax": {"1"}})
|
||||
must(t, st == 400 && strings.Contains(body, "最多 2 位小数") && !strings.Contains(body, "<html"), "异步下单错误应为纯文本: %d", st)
|
||||
must(t, st == 400 && strings.Contains(body, "最多两位小数") && !strings.Contains(body, "<html"), "异步下单错误应为纯文本: %d", st)
|
||||
st, body, h = c8.post("/donate", url.Values{"site": {""}, "nickname": {"弹窗党"}, "amount": {"2"}, "ajax": {"1"}})
|
||||
code8 := h.Get("X-Donation")
|
||||
must(t, st == 200 && strings.HasPrefix(code8, "BEG") && strings.Contains(body, `class="paypanel"`) && strings.Contains(body, "帮我核对") && !strings.Contains(body, "<html"), "异步下单应返回面板片段: %d", st)
|
||||
|
||||
+18
-16
@@ -85,7 +85,7 @@ func (a *App) renderSite(w http.ResponseWriter, r *http.Request, status int, sit
|
||||
Ready: site.PaymentReady(), Err: errMsg, Nick: nick, XHandle: xh, Amount: amount, Message: message,
|
||||
MinAmount: fmtE8(a.cfg.MinAmountE8), MaxAmount: fmtE8(a.cfg.MaxAmountE8), CoinsPerDay: a.cfg.CoinsPerDay}
|
||||
p.NoIndex = !site.Listed
|
||||
p.Desc = site.Name + ":" + site.Slogan + " · 赛博要饭,行行好"
|
||||
p.Desc = a.T(r, "%s:%s · 赛博要饭,行行好", site.Name, site.Slogan)
|
||||
if site.AvatarURL() != "" {
|
||||
p.OGImage = a.cfg.BaseURL + site.AvatarURL()
|
||||
}
|
||||
@@ -209,15 +209,15 @@ func (a *App) handleDonate(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
e8, err := parseAmountE8(rawAmt, 2)
|
||||
if err != nil {
|
||||
bad("金额" + err.Error() + "(最多两位小数)")
|
||||
bad(a.T(r, "金额格式不对(最多两位小数)"))
|
||||
return
|
||||
}
|
||||
if e8 < a.cfg.MinAmountE8 {
|
||||
bad("最少施舍 " + fmtE8(a.cfg.MinAmountE8) + " " + site.Currency)
|
||||
bad(a.T(r, "最少施舍 %s %s", fmtE8(a.cfg.MinAmountE8), site.Currency))
|
||||
return
|
||||
}
|
||||
if e8 > a.cfg.MaxAmountE8 {
|
||||
bad("最多施舍 " + fmtE8(a.cfg.MaxAmountE8) + " " + site.Currency + ",真有这么多请分几次")
|
||||
bad(a.T(r, "最多施舍 %s %s,真有这么多请分几次", fmtE8(a.cfg.MaxAmountE8), site.Currency))
|
||||
return
|
||||
}
|
||||
key := nickKey(nick)
|
||||
@@ -243,7 +243,7 @@ func (a *App) handleDonate(w http.ResponseWriter, r *http.Request) {
|
||||
if err := a.createGatewayOrder(site, d); err != nil {
|
||||
a.st.SetStatusIf(d.ID, []string{"pending"}, "failed")
|
||||
a.logf("[error] 下单 %s 失败: %v", d.Code, err)
|
||||
bad("支付网关开小差了:" + gatewayErr(err))
|
||||
bad(a.T(r, "支付网关开小差了:%s", gatewayErrL(a.lang(r), err)))
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -270,29 +270,29 @@ func (a *App) handleCoin(w http.ResponseWriter, r *http.Request) {
|
||||
json.NewEncoder(w).Encode(v)
|
||||
}
|
||||
if !a.lim.allow("coin:"+a.ip(r), 60, time.Minute) {
|
||||
reply(429, map[string]any{"ok": false, "msg": "手速太快了"})
|
||||
reply(429, map[string]any{"ok": false, "msg": a.T(r, "手速太快了")})
|
||||
return
|
||||
}
|
||||
slug := strings.ToLower(strings.TrimSpace(r.FormValue("site")))
|
||||
site, err := a.st.GetSiteBySlug(slug)
|
||||
if err != nil || site == nil || site.Status != "active" {
|
||||
reply(404, map[string]any{"ok": false, "msg": "这个乞丐不在"})
|
||||
reply(404, map[string]any{"ok": false, "msg": a.T(r, "这个乞丐不在")})
|
||||
return
|
||||
}
|
||||
visitor := cookieVal(r, "bv")
|
||||
if len(visitor) != 24 { // 访客标识只在打开页面时发放;跨站脚本发的请求带不上,直接拒
|
||||
reply(403, map[string]any{"ok": false, "msg": "请先打开要饭页再丢"})
|
||||
reply(403, map[string]any{"ok": false, "msg": a.T(r, "请先打开要饭页再丢")})
|
||||
return
|
||||
}
|
||||
added, msg, err := a.st.AddCoin(site.ID, visitor, a.ip(r), today(), a.cfg.CoinsPerDay, a.cfg.CoinsIPCap)
|
||||
if err != nil {
|
||||
a.logf("[error] 丢钢镚: %v", err)
|
||||
reply(500, map[string]any{"ok": false, "msg": "服务器开小差了"})
|
||||
reply(500, map[string]any{"ok": false, "msg": a.T(r, "服务器开小差了")})
|
||||
return
|
||||
}
|
||||
total, todayN, _ := a.st.CoinStats(site.ID)
|
||||
mine, _ := a.st.VisitorCoinsToday(site.ID, visitor)
|
||||
reply(200, map[string]any{"ok": true, "added": added, "msg": msg, "total": total, "today": todayN, "mine": mine, "per_day": a.cfg.CoinsPerDay})
|
||||
reply(200, map[string]any{"ok": true, "added": added, "msg": a.T(r, msg), "total": total, "today": todayN, "mine": mine, "per_day": a.cfg.CoinsPerDay})
|
||||
}
|
||||
|
||||
// payPanel 付款面板(弹窗 / 状态页 / 付款页共用)。
|
||||
@@ -384,7 +384,7 @@ func (a *App) handleClaim(w http.ResponseWriter, r *http.Request) {
|
||||
ajax := r.FormValue("ajax") == "1"
|
||||
if !a.lim.allow("claim:"+a.ip(r), 5, time.Minute) {
|
||||
if ajax {
|
||||
replyJSON(w, 429, map[string]any{"ok": false, "msg": "手速太快了,歇一会儿"})
|
||||
replyJSON(w, 429, map[string]any{"ok": false, "msg": a.T(r, "手速太快了,歇一会儿")})
|
||||
} else {
|
||||
a.errorPage(w, r, http.StatusTooManyRequests, "手速太快了", "歇一会儿再来。")
|
||||
}
|
||||
@@ -403,6 +403,7 @@ func (a *App) handleClaim(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
fail := func(status int, m string) {
|
||||
m = a.T(r, m)
|
||||
if ajax {
|
||||
replyJSON(w, status, map[string]any{"ok": false, "msg": m})
|
||||
} else {
|
||||
@@ -424,7 +425,7 @@ func (a *App) handleClaim(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
a.logf("[info] 施舍 %s 自报已转账 %s %s(站点 %d)", d.Code, d.Amount, d.Currency, site.ID)
|
||||
if ajax {
|
||||
replyJSON(w, 200, map[string]any{"ok": true, "status": "claimed", "msg": "已提交,等站长确认"})
|
||||
replyJSON(w, 200, map[string]any{"ok": true, "status": "claimed", "msg": a.T(r, "已提交,等站长确认")})
|
||||
return
|
||||
}
|
||||
http.Redirect(w, r, "/d/"+d.Code, http.StatusFound)
|
||||
@@ -438,6 +439,7 @@ func (a *App) handleGatewayClaim(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
fail := func(status int, m string) {
|
||||
m = a.T(r, m)
|
||||
if ajax {
|
||||
replyJSON(w, status, map[string]any{"ok": false, "status": d.Status, "msg": m})
|
||||
} else {
|
||||
@@ -463,16 +465,16 @@ func (a *App) handleGatewayClaim(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
code, err := a.gatewayClaim(d, boid)
|
||||
if err != nil {
|
||||
fail(http.StatusBadGateway, gatewayErr(err))
|
||||
fail(http.StatusBadGateway, gatewayErrL(a.lang(r), err))
|
||||
return
|
||||
}
|
||||
a.refreshFromGateway(d)
|
||||
msg := claimMsgs[code]
|
||||
msg := a.T(r, claimMsgs[code])
|
||||
if msg == "" {
|
||||
msg = "网关返回 " + code
|
||||
msg = a.T(r, "网关返回 %s", code)
|
||||
}
|
||||
if ajax {
|
||||
replyJSON(w, 200, map[string]any{"ok": d.Status == "paid", "status": d.Status, "msg": msg})
|
||||
replyJSON(w, 200, map[string]any{"ok": d.Status == "paid", "status": d.Status, "msg": a.T(r, msg)})
|
||||
return
|
||||
}
|
||||
http.Redirect(w, r, "/d/"+d.Code, http.StatusFound)
|
||||
|
||||
+27
-25
@@ -42,24 +42,26 @@ type verifyProfile struct {
|
||||
}
|
||||
|
||||
// tweetTexts 发推话术模板,第一条为默认;都带验证码和站点链接(顺便传播)。
|
||||
func (a *App) tweetTexts(code, purpose string) []string {
|
||||
func (a *App) tweetTexts(lang, code, purpose string) []string {
|
||||
site := shortURL(a.cfg.BaseURL) // 推文里只放裸域名,短
|
||||
if purpose == "reset" {
|
||||
return []string{
|
||||
"我在「" + a.cfg.SiteTitle + "」要饭的碗口令忘了,发推证明是我本人 🥣 " + code + " " + site,
|
||||
tr(lang, "我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s", tr(lang, a.cfg.SiteTitle), code, site),
|
||||
}
|
||||
}
|
||||
return []string{
|
||||
"我在「" + a.cfg.SiteTitle + "」摆了个碗 🥣 行行好,赏口饭吃~ " + code + " #赛博丐帮 " + site,
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 " + code + " #赛博丐帮 " + site,
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 " + code + " #赛博丐帮 " + site,
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 " + code + " #赛博丐帮 " + site,
|
||||
tr(lang, "我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s", tr(lang, a.cfg.SiteTitle), code, site),
|
||||
tr(lang, "本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s", code, site),
|
||||
tr(lang, "不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s", code, site),
|
||||
tr(lang, "丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s", code, site),
|
||||
}
|
||||
}
|
||||
|
||||
func intentFor(text string) string { return "https://x.com/intent/post?text=" + url.QueryEscape(text) }
|
||||
|
||||
func (a *App) intentURL(code string) string { return intentFor(a.tweetTexts(code, "new")[0]) }
|
||||
func (a *App) intentURL(lang, code string) string {
|
||||
return intentFor(a.tweetTexts(lang, code, "new")[0])
|
||||
}
|
||||
|
||||
// startVerify 生成验证码并渲染第一步。验证码与浏览器 cookie 里的密钥绑定:推文是公开的,光知道码没用。
|
||||
func (a *App) startVerify(w http.ResponseWriter, r *http.Request, purpose, errMsg string) {
|
||||
@@ -89,7 +91,7 @@ func (a *App) startVerify(w http.ResponseWriter, r *http.Request, purpose, errMs
|
||||
a.setCookie(w, "xv_"+code, secret, 24*3600)
|
||||
a.setCookie(w, "xvp_"+purpose, code, 24*3600)
|
||||
}
|
||||
texts := a.tweetTexts(code, purpose)
|
||||
texts := a.tweetTexts(a.lang(r), code, purpose)
|
||||
a.render(w, http.StatusOK, "new", newPage{Base: a.base(r), Step: 1, Purpose: purpose, Code: code, Texts: texts, IntentURL: intentFor(texts[0]), Err: errMsg})
|
||||
}
|
||||
|
||||
@@ -128,7 +130,7 @@ func (a *App) verifyTweet(r *http.Request, purpose string) (*Verify, *xUser, str
|
||||
}
|
||||
text, u, created, err := a.fetchTweet(id)
|
||||
if err != nil {
|
||||
return v, nil, err.Error()
|
||||
return v, nil, a.T(r, err.Error())
|
||||
}
|
||||
if !strings.Contains(strings.ToUpper(text), code) {
|
||||
// 页面上的码和推文里的不一致(发推后页面重载换了码):推文里只要有本浏览器生成过的任何一个有效码就认
|
||||
@@ -143,7 +145,7 @@ func (a *App) verifyTweet(r *http.Request, purpose string) (*Verify, *xUser, str
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
return v, nil, "这条推文里没有验证码 " + code + ",请检查是否发对了"
|
||||
return v, nil, a.T(r, "这条推文里没有验证码 %s,请检查是否发对了", code)
|
||||
}
|
||||
}
|
||||
if created > 0 && created < v.CreatedAt-10*60*1000 {
|
||||
@@ -166,12 +168,12 @@ func (a *App) handleNewVerify(w http.ResponseWriter, r *http.Request) {
|
||||
a.startVerify(w, r, "new", msg)
|
||||
return
|
||||
}
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "new", Code: v.Code, Texts: a.tweetTexts(v.Code, "new"), IntentURL: a.intentURL(v.Code), TweetURL: r.FormValue("tweet_url"), Err: msg})
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "new", Code: v.Code, Texts: a.tweetTexts(a.lang(r), v.Code, "new"), IntentURL: a.intentURL(a.lang(r), v.Code), TweetURL: r.FormValue("tweet_url"), Err: msg})
|
||||
return
|
||||
}
|
||||
if exist := a.siteOfX(u); exist != nil {
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "new", Code: v.Code, Texts: a.tweetTexts(v.Code, "new"), IntentURL: a.intentURL(v.Code),
|
||||
Err: "@" + u.Handle + " 已经开过站了:" + a.cfg.BaseURL + exist.Path() + "。忘了口令可以在登录页用 X 重置。"})
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "new", Code: v.Code, Texts: a.tweetTexts(a.lang(r), v.Code, "new"), IntentURL: a.intentURL(a.lang(r), v.Code),
|
||||
Err: a.T(r, "@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。", u.Handle, a.cfg.BaseURL+exist.Path())})
|
||||
return
|
||||
}
|
||||
prof := verifyProfile{Name: cleanText(u.Name, 20, false), Handle: u.Handle, XID: u.ID, AvatarURL: u.Avatar}
|
||||
@@ -251,18 +253,18 @@ func (a *App) handleNewPost(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
if exist := a.siteOfX(&xUser{ID: prof.XID, Handle: prof.Handle}); exist != nil {
|
||||
bad("@" + prof.Handle + " 已经开过站了")
|
||||
bad(a.T(r, "@%s 已经开过站了", prof.Handle))
|
||||
return
|
||||
}
|
||||
site := &Site{Slug: f.Slug, Name: prof.Name, Slogan: f.Slogan, Story: f.Story, Avatar: "🥣", XURL: "https://x.com/" + prof.Handle,
|
||||
XHandle: prof.Handle, XName: prof.Name, XAvatar: prof.AvatarFile, XID: prof.XID, Listed: !a.cfg.SubsiteReview, PassHash: hashPassword(pw), Currency: a.cfg.Currency}
|
||||
id, err := a.st.CreateSite(site)
|
||||
if errors.Is(err, ErrSlugTaken) {
|
||||
bad("路径 " + f.Slug + " 已被占用(@" + prof.Handle + " 可能已经开过站,忘了口令可在登录页用 X 找回)")
|
||||
bad(a.T(r, "路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)", f.Slug, prof.Handle))
|
||||
return
|
||||
}
|
||||
if errors.Is(err, ErrXTaken) {
|
||||
bad("@" + prof.Handle + " 已经开过站了")
|
||||
bad(a.T(r, "@%s 已经开过站了", prof.Handle))
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
@@ -293,20 +295,20 @@ func (a *App) handleResetVerify(w http.ResponseWriter, r *http.Request) {
|
||||
a.startVerify(w, r, "reset", msg)
|
||||
return
|
||||
}
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(v.Code, "reset")[0]), TweetURL: r.FormValue("tweet_url"), Err: msg})
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(a.lang(r), v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(a.lang(r), v.Code, "reset")[0]), TweetURL: r.FormValue("tweet_url"), Err: msg})
|
||||
return
|
||||
}
|
||||
site := a.siteOfX(u) // 先按 X 数字 ID 认人(改过用户名也能找回),再按用户名
|
||||
if site != nil && site.IsMain() {
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(v.Code, "reset")[0]), Err: "主站口令在服务器 config.env 里改,不走 X 找回"})
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(a.lang(r), v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(a.lang(r), v.Code, "reset")[0]), Err: "主站口令在服务器 config.env 里改,不走 X 找回"})
|
||||
return
|
||||
}
|
||||
if site == nil {
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(v.Code, "reset")[0]), Err: "@" + u.Handle + " 还没开过要饭站"})
|
||||
a.render(w, http.StatusBadRequest, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(a.lang(r), v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(a.lang(r), v.Code, "reset")[0]), Err: a.T(r, "@%s 还没开过要饭站", u.Handle)})
|
||||
return
|
||||
}
|
||||
if !a.lim.allow("reset:"+strconv.FormatInt(site.ID, 10), 3, 24*time.Hour) {
|
||||
a.render(w, http.StatusTooManyRequests, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(v.Code, "reset")[0]), Err: "这个 X 今天重置得太频繁了,明天再来"})
|
||||
a.render(w, http.StatusTooManyRequests, "new", newPage{Base: a.base(r), Step: 1, Purpose: "reset", Code: v.Code, Texts: a.tweetTexts(a.lang(r), v.Code, "reset"), IntentURL: intentFor(a.tweetTexts(a.lang(r), v.Code, "reset")[0]), Err: "这个 X 今天重置得太频繁了,明天再来"})
|
||||
return
|
||||
}
|
||||
a.syncSiteX(site, u) // X 上改了昵称/用户名/头像:站点资料跟着更新
|
||||
@@ -719,7 +721,7 @@ func (a *App) handleManagePayment(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
if site.PayMode == "gateway" {
|
||||
if err := a.unbindAccount(site); err != nil {
|
||||
a.renderManage(w, r, site, "解绑币安 Key 失败:"+gatewayErr(err))
|
||||
a.renderManage(w, r, site, a.T(r, "解绑币安 Key 失败:%s", gatewayErrL(a.lang(r), err)))
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -762,7 +764,7 @@ func (a *App) handleManageBind(w http.ResponseWriter, r *http.Request) {
|
||||
acc, err := a.bindAccount(site, key, secret, uid, link)
|
||||
if err != nil {
|
||||
a.logf("[warn] 站点 /%s 绑定 Key 失败: %v", site.Slug, err)
|
||||
a.renderManage(w, r, site, "绑定失败:"+gatewayErr(err))
|
||||
a.renderManage(w, r, site, a.T(r, "绑定失败:%s", gatewayErrL(a.lang(r), err)))
|
||||
return
|
||||
}
|
||||
if err := a.st.UpdateSitePayment(site.ID, "gateway", acc.AccountID, uid, link, site.PayID); err != nil {
|
||||
@@ -784,7 +786,7 @@ func (a *App) handleManageUnbind(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
if err := a.unbindAccount(site); err != nil {
|
||||
a.renderManage(w, r, site, "解绑失败:"+gatewayErr(err))
|
||||
a.renderManage(w, r, site, a.T(r, "解绑失败:%s", gatewayErrL(a.lang(r), err)))
|
||||
return
|
||||
}
|
||||
if err := a.st.UpdateSitePayment(site.ID, "manual", "", "", site.ReceiveLink, site.PayID); err != nil {
|
||||
@@ -809,7 +811,7 @@ func (a *App) handleManageVerify(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
if _, err := a.verifyAccount(site); err != nil {
|
||||
a.flash(w, "校验失败:"+gatewayErr(err))
|
||||
a.flash(w, a.T(r, "校验失败:%s", gatewayErrL(a.lang(r), err)))
|
||||
} else {
|
||||
a.flash(w, "校验通过:币安 Key 可用,到账会自动确认")
|
||||
}
|
||||
@@ -951,7 +953,7 @@ func (a *App) handleManageSite(w http.ResponseWriter, r *http.Request) {
|
||||
pw := strings.ToLower(randCode(10))
|
||||
if err = a.st.SetSitePassword(target.ID, hashPassword(pw)); err == nil {
|
||||
a.logf("[info] 重置站点 /%s 口令", target.Slug)
|
||||
a.renderManageFlash(w, r, site, "", "已重置 /"+target.Slug+" 的口令为 "+pw+" (只显示这一次,请转告站长)")
|
||||
a.renderManageFlash(w, r, site, "", a.T(r, "已重置 /%s 的口令为 %s(只显示这一次,请转告站长)", target.Slug, pw))
|
||||
return
|
||||
}
|
||||
default:
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 多语言:模板与代码里的中文原文就是 key,按语言查表;查不到回落英文,再回落中文。
|
||||
// 各语言表在 i18n_<lang>.go 里注册(translations[lang][中文] = 译文),占位符用 %s / %d。
|
||||
|
||||
type langInfo struct{ Code, Name string }
|
||||
|
||||
var langs = []langInfo{
|
||||
{"zh", "中文"}, {"en", "English"}, {"ja", "日本語"}, {"ko", "한국어"}, {"ru", "Русский"}, {"es", "Español"},
|
||||
{"pt", "Português"}, {"fr", "Français"}, {"de", "Deutsch"}, {"vi", "Tiếng Việt"}, {"id", "Bahasa Indonesia"}, {"tr", "Türkçe"},
|
||||
}
|
||||
|
||||
var translations = map[string]map[string]string{}
|
||||
|
||||
func langOK(c string) bool {
|
||||
for _, l := range langs {
|
||||
if l.Code == c {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// tr 翻译一句(s 为中文原文),带参数时按 fmt 格式化。
|
||||
func tr(lang, s string, args ...any) string {
|
||||
if lang != "zh" && s != "" {
|
||||
if t, ok := translations[lang][s]; ok {
|
||||
s = t // 译文为空串也算有(中文量词在别的语言里就是没有)
|
||||
} else if t, ok := translations["en"][s]; ok {
|
||||
s = t
|
||||
}
|
||||
}
|
||||
if len(args) > 0 {
|
||||
return fmt.Sprintf(s, args...)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// lang 当前请求的语言:cookie lang 优先,其次 Accept-Language,都没有就中文。
|
||||
func (a *App) lang(r *http.Request) string {
|
||||
if c := cookieVal(r, "lang"); langOK(c) {
|
||||
return c
|
||||
}
|
||||
for _, part := range strings.Split(r.Header.Get("Accept-Language"), ",") {
|
||||
tag := strings.ToLower(strings.TrimSpace(strings.SplitN(part, ";", 2)[0]))
|
||||
if tag == "" || tag == "*" {
|
||||
continue
|
||||
}
|
||||
primary := strings.SplitN(tag, "-", 2)[0]
|
||||
if langOK(primary) {
|
||||
return primary
|
||||
}
|
||||
return "en" // 列表外的语言一律英文
|
||||
}
|
||||
return "zh"
|
||||
}
|
||||
|
||||
func (a *App) T(r *http.Request, s string, args ...any) string { return tr(a.lang(r), s, args...) }
|
||||
|
||||
// handleLang GET /lang?to=xx:记 cookie 一年,回到来时的页面。
|
||||
func (a *App) handleLang(w http.ResponseWriter, r *http.Request) {
|
||||
to := r.URL.Query().Get("to")
|
||||
if !langOK(to) {
|
||||
http.Redirect(w, r, "/", http.StatusFound)
|
||||
return
|
||||
}
|
||||
a.setCookie(w, "lang", to, 365*24*3600)
|
||||
back := "/"
|
||||
if ref, err := url.Parse(r.Referer()); err == nil && ref.Path != "" && ref.Path != "/lang" {
|
||||
back = ref.Path
|
||||
if ref.RawQuery != "" {
|
||||
back += "?" + ref.RawQuery
|
||||
}
|
||||
}
|
||||
http.Redirect(w, r, back, http.StatusFound)
|
||||
}
|
||||
|
||||
// agoL 相对时间(按语言)。
|
||||
func agoL(lang string, t int64) string {
|
||||
if t <= 0 {
|
||||
return ""
|
||||
}
|
||||
d := time.Since(time.UnixMilli(t))
|
||||
switch {
|
||||
case d < time.Minute:
|
||||
return tr(lang, "刚刚")
|
||||
case d < time.Hour:
|
||||
return tr(lang, "%d 分钟前", int(d.Minutes()))
|
||||
case d < 24*time.Hour:
|
||||
return tr(lang, "%d 小时前", int(d.Hours()))
|
||||
case d < 30*24*time.Hour:
|
||||
return tr(lang, "%d 天前", int(d.Hours()/24))
|
||||
}
|
||||
return time.UnixMilli(t).Format("2006-01-02")
|
||||
}
|
||||
|
||||
// langFuncs 每种语言一套模板函数:T 与几个会输出文案的函数都绑定到该语言。
|
||||
func langFuncs(lang string) map[string]any {
|
||||
return map[string]any{
|
||||
"T": func(s string, args ...any) string { return tr(lang, s, args...) },
|
||||
"ago": func(t int64) string { return agoL(lang, t) },
|
||||
"level": func(exp int64) LevelInfo {
|
||||
li := levelOf(exp)
|
||||
li.Title, li.NextT = tr(lang, li.Title), tr(lang, li.NextT)
|
||||
return li
|
||||
},
|
||||
"beggarLevel": func(exp int64) string { return tr(lang, beggarLevel(exp)) },
|
||||
"sectTitle": func(pos int) string { return tr(lang, sectTitle(pos)) },
|
||||
"donorTier": func(e8 int64) string { return tr(lang, donorTier(e8)) },
|
||||
"statusText": func(s string) string { return tr(lang, statusText(s)) },
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 德语:key 是中文原文,占位符 %s/%d 顺序须与中文一致。查不到回落英文。
|
||||
func init() {
|
||||
translations["de"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Eine kleine Münze, gute Seele. Spenden und ins Buch der Verdienste; eine Gratis-Münze ist auch Liebe.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Cyber-Bettler",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Eine kleine Münze, gute Seele. Spende mit Binance Pay und hinterlass eine Zeile im Buch der Verdienste.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(ausgeblendet: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Zurück auf die Straße",
|
||||
"回到刚才看的碗": "Zurück zum Napf von eben",
|
||||
"声音开关": "Ton an/aus",
|
||||
"声音": "Ton",
|
||||
"排行榜": "Rangliste",
|
||||
"我的后台": "Mein Dashboard",
|
||||
"站长": "Besitzer ",
|
||||
"登录": "Anmelden",
|
||||
"我的站": "Mein Napf",
|
||||
"开通要饭站": "Napf aufstellen",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Eine kleine Münze, gute Seele",
|
||||
"🪙 一毛也是爱": "🪙 Jeder Cent zählt",
|
||||
"💸 投币就上榜": "💸 Spenden und auf die Rangliste",
|
||||
"📜 留一句话刻功德簿": "📜 Hinterlass eine Zeile im Buch der Verdienste",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Ein Tweet und dein eigener Napf steht",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Cyber-Bettlergilde: ein Napf für jeden",
|
||||
"· 赛博丐帮,行行好": "· Cyber-Bettlergilde · Hab Erbarmen",
|
||||
"作者": "Autor",
|
||||
"收款由": "Zahlungen über",
|
||||
"驱动 · 字体": "· Schrift",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Ton: aus",
|
||||
"声音:开(点击静音)": "Ton: an (klicken zum Stummschalten)",
|
||||
"点一下开始播放": "Antippen für Musik",
|
||||
"已复制": "Kopiert",
|
||||
"功德 +": "Verdienst +",
|
||||
"你的名号和留言已刻上功德簿": "Dein Name und deine Zeile stehen jetzt im Buch der Verdienste",
|
||||
"看看功德簿": "Buch der Verdienste ansehen",
|
||||
"分享卡片": "Teilen-Karte",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Abgeschickt. Sobald der Besitzer bestätigt, bist du auf der Rangliste. Diese Seite aktualisiert sich von selbst.",
|
||||
"这笔施舍已": "Diese Spende ist ",
|
||||
"过期": "abgelaufen",
|
||||
"下单失败": "beim Anlegen fehlgeschlagen",
|
||||
"被站长拒绝": "vom Besitzer abgelehnt",
|
||||
"关闭": "geschlossen",
|
||||
",请回到页面重新投币。": ". Bitte zurück zur Seite und nochmal spenden.",
|
||||
"没成功,再试试": "Hat nicht geklappt, nochmal",
|
||||
"网络开小差了": "Netzwerk hakt",
|
||||
"分页": "Seiten",
|
||||
"‹ 上一页": "‹ Zurück",
|
||||
"下一页 ›": "Weiter ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Besitzer-Login ·",
|
||||
"🔑 站长登录": "🔑 Besitzer-Login",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Melde dich mit deinem X-Benutzernamen und dem Passwort an, das du beim Aufstellen des Napfs gesetzt hast. Besitzer der Hauptseite: Benutzername leer lassen.",
|
||||
"X 用户名": "X-Benutzername",
|
||||
"例如 qianyuwing(主站留空)": "z. B. qianyuwing (Hauptseite: leer lassen)",
|
||||
"口令": "Passwort",
|
||||
"忘了口令?": "Passwort vergessen?",
|
||||
"用 X 发推找回": "Per Tweet wiederherstellen",
|
||||
"。还没有要饭站?": ". Noch keinen Napf?",
|
||||
"用 X 开一个": "Mit X einen aufstellen",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Dashboard ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 Eröffnet! Dein Napf",
|
||||
"已上线": "ist online",
|
||||
"(待主站站长收录后进榜)": " (auf die Ranglisten kommt er, sobald der Hauptseiten-Besitzer ihn listet)",
|
||||
"下一步:": "Nächster Schritt: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "trag unten unter „Zahlung“ deine Binance-UID ein (zehn Sekunden), sonst kann dir niemand etwas geben.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Komm später über %s zurück (X-Name %s + dein Passwort). Vergessen? Einfach noch einen Tweet posten.",
|
||||
"后台": "das Dashboard",
|
||||
"· 碗里": "· Im Napf",
|
||||
"位施主 ·": "Spender ·",
|
||||
"次 · 钢镚": "Spenden · Münzen",
|
||||
"待收录": "ungelistet",
|
||||
"🔑 改口令": "🔑 Passwort",
|
||||
"退出": "Abmelden",
|
||||
"⏳ 待确认": "⏳ Offen",
|
||||
"✏️ 资料": "✏️ Profil",
|
||||
"💰 收款方式": "💰 Zahlung",
|
||||
"📜 施舍记录": "📜 Spenden",
|
||||
"🏚 所有站点": "🏚 Alle Näpfe",
|
||||
"🧹 留言巡查": "🧹 Nachrichten",
|
||||
"⏳ 待确认的施舍": "⏳ Spenden warten auf Bestätigung",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Prüf die Überweisung in der Binance-App (Betrag und Memo-Code), dann bestätigen und ab auf die Rangliste.",
|
||||
"备注码": "Memo",
|
||||
"· 币安订单": "· Binance-Auftrag",
|
||||
"✓ 确认到账": "✓ Erhalten",
|
||||
"✗ 没收到": "✗ Nicht erhalten",
|
||||
"站点标题": "Napf-Name",
|
||||
"(来自 X @": "(von X @",
|
||||
",锁定)": ", gesperrt)",
|
||||
"头像 emoji": "Avatar-Emoji",
|
||||
"一句话口号": "Einzeiler-Slogan",
|
||||
"绑定 X": "X verknüpfen",
|
||||
"(主页链接或 @名字,留空不显示)": "(Profil-Link oder @Name; leer = ausblenden)",
|
||||
"https://x.com/你的名字": "https://x.com/deinname",
|
||||
"保存资料": "Profil speichern",
|
||||
"config.env 配置": "in config.env gesetzt",
|
||||
"已绑币安 Key · 自动确认": "Binance-Key verknüpft · Auto-Bestätigung",
|
||||
"直接转账 · UID": "Direktüberweisung · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Noch kein Napf — antippen zum Einrichten",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "Die Zahlungsmethode der Hauptseite wird in config.env auf dem Server gesetzt. Aktuell: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "Auto-Bestätigung über das BinancePayTool-Gateway (Standardkonto)",
|
||||
"直接转账": "Direktüberweisung",
|
||||
"校验网关默认账号": "Standardkonto des Gateways prüfen",
|
||||
"✅ 已绑定币安账号(UID": "✅ Binance-Konto verknüpft (UID",
|
||||
"),施主付款后": "). Spenden werden ",
|
||||
"自动确认上榜": "automatisch bestätigt",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " Das Zahlungsfenster zeigt deinen QR-Code / Ein-Tipp-Öffnen.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Füg einen Empfangslink hinzu, damit Spender scannen oder die App direkt öffnen können.",
|
||||
"重新校验 Key": "Key erneut prüfen",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Nach dem Trennen gilt Direktüberweisung (du bestätigst jede Zahlung von Hand). Weiter?",
|
||||
"解绑": "Trennen",
|
||||
"换一个 Key / 更新收款链接": "Key wechseln / Empfangslink aktualisieren",
|
||||
"当前是": "Aktueller Modus: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Spender überweisen in der Binance-App an deine UID, tippen auf „Ich habe gespendet“, und du bestätigst hier.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Noch kein Napf: Binance-UID eintragen und du kannst Geld empfangen. Zehn Sekunden.",
|
||||
"方式一:填币安 UID(最简单)": "Option 1: deine Binance-UID (am einfachsten)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Binance-App → Avatar oben links antippen; die Nummer darunter ist deine",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (auch deine Pay ID). Spender sehen sie beim Spenden und überweisen über Binance-App „Pay → Überweisen“, ohne Gebühren.",
|
||||
"币安 UID": "Binance-UID",
|
||||
"例如 12345678": "z. B. 12345678",
|
||||
"收款链接": "Empfangslink",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(optional. Damit können Spender scannen oder die Binance-App direkt öffnen; ohne überweisen sie per UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "So bekommst du ihn: auf der Binance-Empfangsseite „Bild speichern“ antippen, den QR mit einer beliebigen Scanner-App lesen und den Link hier einfügen.",
|
||||
"保存": "Speichern",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Option 2: schreibgeschützten Binance API Key verknüpfen (Auto-Bestätigung)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Spenden werden automatisch bestätigt. Der Key braucht nur „Lesen erlauben“ und kann kein Geld bewegen; diese Seite speichert ihn nie, das Zahlungs-Gateway hält ihn verschlüsselt.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "gesamt · Spam ausblenden oder Person blockieren (Einträge bleiben) · antworten",
|
||||
"已屏蔽此人": "Person blockiert",
|
||||
"(已屏蔽:": "(ausgeblendet: ",
|
||||
"🥣 站长:": "🥣 Besitzer: ",
|
||||
"恢复留言": "Nachricht einblenden",
|
||||
"屏蔽留言": "Nachricht ausblenden",
|
||||
"恢复此人": "Person entblocken",
|
||||
"屏蔽此人": "Person blockieren",
|
||||
"回一句…": "Antworten…",
|
||||
"回复": "Antworten",
|
||||
"还没有施舍记录": "Noch keine Spenden",
|
||||
"🔑 修改口令": "🔑 Passwort ändern",
|
||||
"新口令(至少 6 位)": "Neues Passwort (mind. 6 Zeichen)",
|
||||
"再输一遍": "Nochmal eingeben",
|
||||
"改完后其它设备上的登录会失效。": "Andere Geräte werden abgemeldet.",
|
||||
"确认修改": "Passwort ändern",
|
||||
"🏚 所有要饭站": "🏚 Alle Näpfe",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "gesamt · Regelbrecher verbannen · Passwort eines Besitzers zurücksetzen",
|
||||
"已除名": "verbannt",
|
||||
"未收录": "ungelistet",
|
||||
"已绑 Key 自动确认": "Key verknüpft, Auto-Bestätigung",
|
||||
"位施主 · 钢镚": "Spender · Münzen",
|
||||
"开张": "eröffnet",
|
||||
"取消收录": "Auslisten",
|
||||
"收录上榜": "Listen",
|
||||
"除名": "Verbannen",
|
||||
"恢复": "Wiederherstellen",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Passwort für /%s zurücksetzen? Das neue wird nur einmal angezeigt.",
|
||||
"重置口令": "Passwort zurücksetzen",
|
||||
"还没有子站": "Noch keine Näpfe",
|
||||
"🧹 全站最新留言": "🧹 Neueste Nachrichten seitenweit",
|
||||
"条 · 跨站点巡查广告": "gesamt · Spam-Streife über alle Näpfe",
|
||||
"暂无留言": "Noch keine Nachrichten",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Binance-App → Konto → API-Verwaltung → API erstellen: ",
|
||||
"只勾「允许读取」": "nur „Lesen erlauben“ anhaken",
|
||||
",其它权限都不要,": ", sonst nichts, ",
|
||||
"不用设 IP 白名单": "keine IP-Whitelist nötig",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (ein Lese-Key kann kein Geld bewegen). Er liest nur deine Eingänge, wird verschlüsselt gespeichert und nie angezeigt.",
|
||||
"(App 头像页可见)": "(auf deiner Profilseite in der App zu sehen)",
|
||||
"(选填,填了施主能扫码)": "(optional; Spender können dann einen QR scannen)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "So bekommst du den Empfangslink: auf der Binance-Empfangsseite „Bild speichern“ antippen und den QR mit einer Scanner-App lesen.",
|
||||
"绑定并校验": "Verknüpfen und prüfen",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Passwort mit X wiederherstellen",
|
||||
"🔑 用 X 找回口令": "🔑 Passwort mit X wiederherstellen",
|
||||
"🏚 开通我的要饭站": "🏚 Meinen Napf aufstellen",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Poste einen Tweet mit dem Code, um zu beweisen, dass du der Besitzer bist, dann setz ein neues Passwort.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Keine Spende nötig. Ein Tweet von deinem X-Konto stellt deinen Napf auf: benannt nach deinem X-Anzeigenamen, mit deinem X-Avatar, ein Napf pro Konto. Der Tweet stellt deinen Napf gleich auf die Straße.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Du bist in einem In-App-Browser. Der Ein-Tipp-Tweet öffnet X vielleicht nicht, und beim Zurückkommen kann der Stand verloren gehen.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Tipp oben rechts auf „⋯“ und wähl „Im Browser öffnen“",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (oder kopier den Link in Safari / Chrome), bevor du weitermachst.",
|
||||
"复制本页链接": "Link dieser Seite kopieren",
|
||||
"发一条推文,带上验证码": "Poste einen Tweet mit dem Code",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Tweet-Text (frei änderbar, nur den Code drinlassen)",
|
||||
"换一条": "Anderer Text",
|
||||
"🐦 一键去 X 发推": "🐦 Auf X posten",
|
||||
"复制文案": "Text kopieren",
|
||||
"没拉起 X App?点这里用网页版发 →": "X-App nicht geöffnet? Über die Website posten →",
|
||||
"验证码": "Code",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": " – Groß-/Kleinschreibung egal, 24 Stunden gültig. Der Text enthält den Link zu deinem Napf, der Tweet ist also gleich Werbung.",
|
||||
"把推文链接贴回来": "Tweet-Link hier einfügen",
|
||||
"推文链接": "Tweet-Link",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/deinname/status/1234567890",
|
||||
"验证": "Prüfen",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Nach dem Posten: Teilen-Button des Tweets → Link kopieren.",
|
||||
"还没开过站?": "Noch keinen Napf? ",
|
||||
"去开一个": "Einen aufstellen",
|
||||
"已经开过站?": "Schon einen Napf? ",
|
||||
"站长登录": "Besitzer-Login",
|
||||
"🔑 设置新口令": "🔑 Neues Passwort setzen",
|
||||
"保存并登录": "Speichern und anmelden",
|
||||
"✅ X 验证通过": "✅ X verifiziert",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· Name und Avatar kommen von X (Avatar wird regelmäßig synchronisiert)",
|
||||
"站点地址": "Napf-Adresse",
|
||||
"(就是你的 X 用户名,不用填)": "(dein X-Benutzername; nichts auszufüllen)",
|
||||
"行行好,赏口饭吃 🙏": "Eine kleine Münze, gute Seele 🙏",
|
||||
"登录口令": "Login-Passwort",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Später mit X-Name + Passwort anmelden; vergessen? Einfach noch einen Tweet posten.",
|
||||
"口令(至少 6 位)": "Passwort (mind. 6 Zeichen)",
|
||||
"开张 🏚": "Eröffnen 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Nach der Eröffnung im Dashboard einen Binance-Key verknüpfen oder deine UID eintragen, um Geld zu empfangen. Für deine Inhalte bist du selbst verantwortlich; Spam-Näpfe verbannt die Gilde.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "An %s spenden",
|
||||
"先回去看看": "Erstmal zurück",
|
||||
"给 %s 投币": "Spende an %s",
|
||||
"金额要": "Der Betrag muss ",
|
||||
"一分不差": "exakt stimmen",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": das Gateway erkennt die Zahlung an dieser einmaligen Endung und bestätigt in Sekunden",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Direkt an den Besitzer mit Binance Pay überweisen, dann unten auf „Ich habe gespendet“ tippen",
|
||||
"打开币安 App 转账": "Binance-App zum Zahlen öffnen",
|
||||
"唤起后手动输入金额": "In der App den Betrag eingeben",
|
||||
",备注填": ", Memo",
|
||||
"用另一台手机扫码": "Mit einem anderen Handy scannen",
|
||||
"收款二维码": "Zahlungs-QR-Code",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Binance-App → Scannen → Betrag eingeben",
|
||||
"或手动转账": "Oder manuell überweisen",
|
||||
"转账信息": "Überweisungsdaten",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Binance-App → „Pay“ → „Überweisen“ → Empfänger: die UID unten → Betrag",
|
||||
"→ 备注填": "→ Memo",
|
||||
"→ 转完回来点「我已施舍」": "→ zurückkommen und auf „Ich habe gespendet“ tippen",
|
||||
"收款方": "Empfänger",
|
||||
"复制": "Kopieren",
|
||||
"金额": "Betrag",
|
||||
"备注": "Memo",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Warte auf Zahlung… wird nach dem Senden automatisch bestätigt; diese Seite aktualisiert sich selbst",
|
||||
"付了但一直没确认?": "Bezahlt, aber nicht bestätigt?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Binance-Auftragsnummer (18 Ziffern, in den Überweisungsdetails)",
|
||||
"我付过了,帮我核对": "Ich habe bezahlt, bitte prüfen",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Binance-Auftragsnummer (optional, 18 Ziffern; beschleunigt die Bestätigung)",
|
||||
"我已施舍,等站长确认": "Ich habe gespendet, warte auf den Besitzer",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Tipp „Ich habe gespendet“ auf dem Gerät, das die Spende gestartet hat.",
|
||||
"打不开?": "Geht nicht auf? ",
|
||||
"用网关收银页支付": "Über die Gateway-Kasse zahlen",
|
||||
"施舍进行中": "Spende läuft",
|
||||
"🙏 谢谢施主": "🙏 Danke, edler Spender",
|
||||
"你在 %s 的施主榜排第 %d 位": "Auf der Spenderliste von %s bist du Nr. %d",
|
||||
"回到 %s 的碗": "Zurück zum Napf von %s",
|
||||
"复制链接分享": "Link zum Teilen kopieren",
|
||||
"🖼 分享卡片": "🖼 Teilen-Karte",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Erzeug eine Pixel-Karte für X oder deine Freunde und mach dem Bettler etwas Werbung.",
|
||||
"生成分享卡": "Karte erstellen",
|
||||
"分享卡": "Teilen-Karte",
|
||||
"长按图片保存,或": "Lange drücken zum Speichern, oder ",
|
||||
"下载": "herunterladen",
|
||||
"🏚 你也可以要饭": "🏚 Du kannst auch betteln",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Ein Tweet von deinem X-Konto stellt deinen eigenen Napf auf; das Geld geht direkt auf dein Binance-Konto.",
|
||||
"站长没有确认这笔施舍": "Der Besitzer hat diese Spende nicht bestätigt",
|
||||
"这笔施舍已过期": "Diese Spende ist abgelaufen",
|
||||
"如果你确实转了,请联系站长核对。": "Falls du wirklich überwiesen hast, kontaktier den Besitzer zum Prüfen.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Nichts wurde abgebucht; fang neu an, wenn du spenden willst.",
|
||||
"再来一次": "Nochmal",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Rangliste ·",
|
||||
"🏆 施主榜": "🏆 Spender",
|
||||
"🥣 乞丐榜": "🥣 Bettler",
|
||||
"🪙 人气榜": "🪙 Beliebtheit",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · alle Näpfe zusammen ·",
|
||||
"位施主": "Spender",
|
||||
"总榜": "Gesamt",
|
||||
"本周": "Diese Woche",
|
||||
"要到最多的要饭站 · 共": "Näpfe mit der größten Ausbeute ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Meiste Münzen erhalten (kostenlos) ·",
|
||||
"← 回到刚才看的碗": "← Zurück zum Napf von eben",
|
||||
"施主自己填的 X,未经验证": "Vom Spender angegebenes X, nicht verifiziert",
|
||||
"次 · 施舍过": "Spenden · gab an",
|
||||
"个乞丐": "Bettler",
|
||||
"榜上无人": "Noch niemand hier",
|
||||
"就是我": "ich",
|
||||
"还没有人上榜": "Noch niemand auf der Rangliste",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "bettelt ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ Dieser Napf ist noch nicht von der Gilde gelistet, also nicht auf den Ranglisten.",
|
||||
"主站站长审核后会收录。": "Der Hauptseiten-Besitzer listet ihn nach Prüfung.",
|
||||
"· 榜 #": "· Rang #",
|
||||
"升%s要 %s": "%s ab %s EXP",
|
||||
"满级": "Max-Level",
|
||||
"饱食度": "Sättigung",
|
||||
"今天还没吃饭": "Heute noch nichts gegessen",
|
||||
"今天有人投币了": "Heute hat jemand gespendet",
|
||||
"今天丢过了": "Heute schon geworfen",
|
||||
"丢个钢镚(免费)": "Münze werfen (gratis)",
|
||||
"💸 投币施舍": "💸 Spenden",
|
||||
"还没摆碗,暂不能投币": "Noch kein Napf, Spenden geht nicht",
|
||||
"去配置": "Einrichten",
|
||||
"钢镚": "Münzen",
|
||||
"· 今日": "· heute",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 Münze =",
|
||||
"碗里已有": "Im Napf",
|
||||
"施主": "Spender",
|
||||
"人": "",
|
||||
"今日": "Heute",
|
||||
"🕹️ 投币施舍": "🕹️ Münze einwerfen",
|
||||
"玩家名(上榜用,可留空)": "Spielername (für die Rangliste, optional)",
|
||||
"匿名施主": "Anonym",
|
||||
"你的 X(可选,显示头像)": "Dein X (optional, zeigt deinen Avatar)",
|
||||
"投多少": "Betrag in",
|
||||
"✏️ 自定义": "✏️ Eigener",
|
||||
"输入金额,最多两位小数": "Betrag, max. 2 Nachkommastellen",
|
||||
"对乞丐喊话": "Sag dem Bettler was",
|
||||
"例如:别买烟了,去吃饭": "z. B. Keine Kippen, kauf dir was zu essen",
|
||||
"投币 💸": "Spenden 💸",
|
||||
"投币": "Spenden",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Mit der Binance-App scannen oder direkt öffnen; nach Eingang landet es automatisch im Buch der Verdienste.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Direkt an den Besitzer per Binance Pay überweisen; er bestätigt und du bist auf der Rangliste.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Min. %s, max. %s. Keine Links oder Kontaktdaten in der Nachricht.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Dieser Bettler hat noch keinen Napf aufgestellt (keine Zahlungsmethode) und kann kein Geld empfangen.",
|
||||
"去后台配置 →": "Im Dashboard einrichten →",
|
||||
"🏚 想自己要饭?": "🏚 Selbst betteln?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Ein Tweet von deinem X-Konto stellt deinen eigenen Napf auf: eigene Adresse, eigenes Buch der Verdienste und eigene Spenderliste, das Geld direkt auf dein Binance-Konto.",
|
||||
"用 X 开通我的要饭站 →": "Meinen Napf mit X aufstellen →",
|
||||
"人气榜": "Beliebtheit",
|
||||
"功德簿": "Verdienste",
|
||||
"施主榜": "Spender",
|
||||
"乞丐榜": "Bettler",
|
||||
"已屏蔽的施主": "Blockierter Spender",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "Das Buch der Verdienste ist leer. Die erste Münze wird hier eingetragen.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · Top-Spender für",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 erster Spender 💎 größte Spende 🔥 Stammgast",
|
||||
"丐帮排名 · 要到最多的要饭站": "Gilden-Rangliste · Näpfe mit der größten Ausbeute",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Beliebtheit · Näpfe mit den meisten Münzen (Münzen sind gratis)",
|
||||
"次": "Spenden",
|
||||
"榜上无人,第一个投币的就是首席施主": "Noch niemand hier. Wer zuerst spendet, wird Chef-Spender.",
|
||||
"本站": "dieser Napf",
|
||||
"叮!钢镚 +1": "Kling! Münze +1",
|
||||
"没丢进去": "Daneben geworfen",
|
||||
"网络开小差了,再试一次": "Netzwerk hakt, nochmal versuchen",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Ungültiger Betrag (max. 2 Nachkommastellen)",
|
||||
"最少施舍 %s %s": "Mindestspende: %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "Höchstspende: %s %s. Wenn du wirklich so viel hast, teil es auf",
|
||||
"支付网关开小差了:%s": "Zahlungs-Gateway hakt: %s",
|
||||
"手速太快了": "Zu schnell",
|
||||
"这个乞丐不在": "Dieser Bettler ist nicht da",
|
||||
"请先打开要饭页再丢": "Erst die Napf-Seite öffnen",
|
||||
"服务器开小差了": "Server hakt",
|
||||
"手速太快了,歇一会儿": "Zu schnell, mach mal Pause",
|
||||
"已提交,等站长确认": "Abgeschickt, warte auf Bestätigung des Besitzers",
|
||||
"网关返回 %s": "Gateway meldet %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "Ich habe das Passwort für meinen Napf auf %s vergessen, dieser Tweet beweist, dass ich es bin 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "Ich habe meinen Napf auf %s aufgestellt 🥣 Eine kleine Münze, gute Seelen~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Ich bin jetzt in der Cyber-Bettlergilde 🧎 Jeder Cent zählt, eine Gratis-Münze tut's auch 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Job gekündigt, jetzt wird gebettelt. Der Napf steht hier, seid gnädig 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "Die Bettlergilde sucht Nachwuchs und ich mache den Anfang 🥣 Spenden und ins Buch der Verdienste, oder eine Gratis-Münze werfen %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Dieser Tweet enthält den Code %s nicht. Prüf, ob du den richtigen gepostet hast",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s hat schon einen Napf: %s. Passwort vergessen? Auf der Login-Seite mit X zurücksetzen.",
|
||||
"@%s 已经开过站了": "@%s hat schon einen Napf",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "Die Adresse %s ist vergeben (@%s hat vielleicht schon einen Napf; Passwort auf der Login-Seite mit X wiederherstellen)",
|
||||
"@%s 还没开过要饭站": "@%s hat noch keinen Napf",
|
||||
"解绑币安 Key 失败:%s": "Binance-Key konnte nicht getrennt werden: %s",
|
||||
"绑定失败:%s": "Verknüpfen fehlgeschlagen: %s",
|
||||
"解绑失败:%s": "Trennen fehlgeschlagen: %s",
|
||||
"校验失败:%s": "Prüfung fehlgeschlagen: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Passwort für /%s auf %s zurückgesetzt (wird nur einmal angezeigt, gib es dem Besitzer weiter)",
|
||||
"本站未配置支付网关": "Kein Zahlungs-Gateway konfiguriert",
|
||||
"网关连不上,请稍后再试": "Gateway nicht erreichbar, später nochmal versuchen",
|
||||
"方法不允许": "Methode nicht erlaubt",
|
||||
"主站不存在": "Hauptseite nicht gefunden",
|
||||
"页面不存在": "Seite nicht gefunden",
|
||||
"赛博丐帮没有这条路。": "Diesen Weg gibt es in der Cyber-Bettlergilde nicht.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Entweder noch nicht eröffnet oder von der Gilde verbannt.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Dieser Bettler hat noch keinen Napf aufgestellt (keine Zahlungsmethode) und kann noch kein Geld empfangen",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "Der X-Benutzername darf nur Buchstaben, Ziffern und Unterstriche enthalten (mit oder ohne @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Keine Links oder Kontaktdaten in Name oder Nachricht. Bettler nehmen keine Werbung",
|
||||
"没有这笔施舍": "Spende nicht gefunden",
|
||||
"站点不存在": "Napf nicht gefunden",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Tipp „Ich habe gespendet“ auf dem Gerät, das die Spende gestartet hat",
|
||||
"币安订单编号是 18 位数字,不填也行": "Die Binance-Auftragsnummer hat 18 Ziffern (optional)",
|
||||
"核对失败": "Prüfung fehlgeschlagen",
|
||||
"这笔施舍不是网关模式": "Diese Spende läuft nicht über das Gateway",
|
||||
"试得太频繁了,一分钟后再试": "Zu viele Versuche, in einer Minute nochmal",
|
||||
"请在发起施舍的那台设备上回填": "Gib die Auftragsnummer auf dem Gerät ein, das die Spende gestartet hat",
|
||||
"币安订单编号是 18 位数字": "Die Binance-Auftragsnummer hat 18 Ziffern",
|
||||
"本站未开放开站": "Näpfe aufstellen ist auf dieser Seite deaktiviert",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "Der Code ist abgelaufen (oder wurde in einem anderen Browser erzeugt). Erzeug einen neuen",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Ungültiger Tweet-Link. Er sollte so aussehen: https://x.com/deinname/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Dieser Tweet ist älter als der Code. Nimm einen Tweet, der nach dem Erzeugen des Codes gepostet wurde",
|
||||
"验证已失效,请重新验证": "Verifizierung abgelaufen, bitte erneut prüfen",
|
||||
"口号和介绍里别放链接、联系方式": "Keine Links oder Kontaktdaten im Slogan",
|
||||
"口令至少 6 位": "Passwort braucht mindestens 6 Zeichen",
|
||||
"两次口令不一致": "Passwörter stimmen nicht überein",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "Das Passwort der Hauptseite wird in config.env auf dem Server gesetzt, nicht über X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Zu viele Resets für dieses X-Konto heute, komm morgen wieder",
|
||||
"口令至少 6 位,且两次一致": "Passwort braucht mindestens 6 Zeichen und muss übereinstimmen",
|
||||
"口令已重置,其它设备上的登录已失效": "Passwort zurückgesetzt. Andere Geräte wurden abgemeldet",
|
||||
"X 用户名或口令不对": "X-Benutzername oder Passwort falsch",
|
||||
"请先登录": "Bitte erst anmelden",
|
||||
"登录状态已失效,请重新登录。": "Deine Sitzung ist abgelaufen, bitte neu anmelden.",
|
||||
"歇一会儿再来。": "Mach eine Pause und komm wieder.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Zu viele falsche Passwörter für diesen Napf. Mach eine Pause.",
|
||||
"站点标题不能为空": "Napf-Name darf nicht leer sein",
|
||||
"资料里别放链接、联系方式": "Keine Links oder Kontaktdaten im Profil",
|
||||
"资料已保存": "Profil gespeichert",
|
||||
"主站的收款方式在服务器 config.env 里改": "Die Zahlungsmethode der Hauptseite wird in config.env auf dem Server gesetzt",
|
||||
"填一下币安 UID,不然钱没处去": "Trag deine Binance-UID ein, sonst weiß das Geld nicht wohin",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Auf Direktüberweisung umgestellt: Spender melden ihre Zahlung und du bestätigst hier",
|
||||
"本站不支持绑定": "Verknüpfen ist auf dieser Seite nicht verfügbar",
|
||||
"API Key 和 Secret 都要填": "API Key und Secret sind beide erforderlich",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Die Binance-UID besteht nur aus Ziffern (auf deiner Profilseite in der App zu sehen)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Verknüpft! Binance hat den Key bestätigt; Spenden werden ab jetzt automatisch bestätigt",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Getrennt. Du bist jetzt im Direktüberweisungs-Modus, achte darauf, dass deine UID eingetragen ist",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Geprüft: der Binance-Key funktioniert, Zahlungen werden automatisch bestätigt",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "Das Passwort der Hauptseite wird in config.env (ADMIN_PASSWORD) auf dem Server gesetzt",
|
||||
"口令已修改,其它设备上的登录已失效": "Passwort geändert. Andere Geräte wurden abgemeldet",
|
||||
"这笔施舍当前不能确认/拒绝": "Diese Spende kann gerade nicht bestätigt oder abgelehnt werden",
|
||||
"只能回复自己站的施舍": "Du kannst nur auf Spenden an deinen eigenen Napf antworten",
|
||||
"回复里别放链接、联系方式": "Keine Links oder Kontaktdaten in Antworten",
|
||||
"未知操作": "Unbekannte Aktion",
|
||||
"无权操作": "Nicht erlaubt",
|
||||
"没有这个站": "Diesen Napf gibt es nicht",
|
||||
"未配置支付网关": "Kein Zahlungs-Gateway konfiguriert",
|
||||
"请求来源不对": "Falsche Anfrage-Herkunft",
|
||||
"请从本站页面操作。": "Bitte über die Seiten dieser Website vorgehen.",
|
||||
"页面渲染失败": "Seite konnte nicht gerendert werden",
|
||||
"稍后再试。": "Später nochmal versuchen.",
|
||||
"地址已被占用": "Adresse bereits vergeben",
|
||||
"这个 X 账号已经开过站了": "Dieses X-Konto hat schon einen Napf",
|
||||
"连不上 X 接口: %w": "X nicht erreichbar: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tweet nicht gefunden (falscher Link oder Tweet nicht öffentlich)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Tweet nicht lesbar (gelöscht oder Konto geschützt)",
|
||||
"头像地址不在允许的域名": "Avatar-URL liegt nicht auf einer erlaubten Domain",
|
||||
"头像下载失败": "Avatar-Download fehlgeschlagen",
|
||||
"头像不是有效图片": "Avatar ist kein gültiges Bild",
|
||||
"金额格式不对": "Ungültiger Betrag",
|
||||
"收款链接过长": "Empfangslink zu lang",
|
||||
"收款链接须为 https 链接": "Empfangslink muss ein https-Link sein",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Empfangslink muss eine Binance-Domain sein (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "Der X-Profil-Link sollte so aussehen: https://x.com/deinname",
|
||||
"核对成功,已到账": "Geprüft, Zahlung eingegangen",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Überweisung gefunden, aber Betrag zu niedrig; mit dem tatsächlichen Betrag verbucht",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Überweisung nicht gefunden: prüf Auftragsnummer und Empfängerkonto und versuch es nochmal, sobald Binance sie anzeigt",
|
||||
"这笔转账已经被别的订单用过了": "Diese Überweisung wurde schon für einen anderen Auftrag verwendet",
|
||||
"币种不对": "Falsche Währung",
|
||||
"这笔施舍当前状态不能回填": "Der Status dieser Spende erlaubt keine Auftragsnummer",
|
||||
"这个网络今天丢得够多了": "Dieses Netzwerk hat heute genug Münzen geworfen",
|
||||
"今天已经丢过了,明天再来": "Heute schon geworfen, komm morgen wieder",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "unbezahlt",
|
||||
"待确认": "ausstehend",
|
||||
"已到账": "bezahlt",
|
||||
"已过期": "abgelaufen",
|
||||
"已关闭": "geschlossen",
|
||||
"已拒绝": "abgelehnt",
|
||||
"空碗未入帮": "Leerer Napf",
|
||||
"一袋弟子": "1-Sack-Jünger",
|
||||
"二袋弟子": "2-Sack-Jünger",
|
||||
"三袋弟子": "3-Sack-Jünger",
|
||||
"四袋弟子": "4-Sack-Jünger",
|
||||
"五袋弟子": "5-Sack-Jünger",
|
||||
"六袋弟子": "6-Sack-Jünger",
|
||||
"七袋弟子": "7-Sack-Jünger",
|
||||
"八袋弟子": "8-Sack-Jünger",
|
||||
"九袋长老": "9-Sack-Ältester",
|
||||
"帮主": "Gildenmeister",
|
||||
"副帮主": "Vize-Gildenmeister",
|
||||
"传功长老": "Ältester der Lehre",
|
||||
"执法长老": "Ältester des Gesetzes",
|
||||
"掌棒龙头": "Stabhüter",
|
||||
"掌钵龙头": "Napfhüter",
|
||||
"长老": "Ältester",
|
||||
"舵主": "Zweigleiter",
|
||||
"弟子": "Jünger",
|
||||
"总舵": "Hauptquartier",
|
||||
"投了个硬币": "hat eine Münze geworfen",
|
||||
"善心人": "gute Seele",
|
||||
"大善人": "großer Wohltäter",
|
||||
"活菩萨": "lebender Heiliger",
|
||||
"财神爷": "Gott des Reichtums",
|
||||
"刚刚": "gerade eben",
|
||||
"%d 分钟前": "vor %d Min.",
|
||||
"%d 小时前": "vor %d Std.",
|
||||
"%d 天前": "vor %d Tagen",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 英文:其它语言查不到时也回落到这里。key 是中文原文(模板/代码里的 T "…"),占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["en"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Spare a coin. Tip to enter the Book of Merit; a free coin counts as love too.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Cyber Beggar",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Spare a coin. Tip with Binance Pay and leave a line in the Book of Merit.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(hidden: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Back to the street",
|
||||
"回到刚才看的碗": "Back to the bowl you were viewing",
|
||||
"声音开关": "Sound toggle",
|
||||
"声音": "Sound",
|
||||
"排行榜": "Leaderboard",
|
||||
"我的后台": "Dashboard",
|
||||
"站长": "Owner ",
|
||||
"登录": "Login",
|
||||
"我的站": "My bowl",
|
||||
"开通要饭站": "Open bowl",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Spare a coin, kind stranger",
|
||||
"🪙 一毛也是爱": "🪙 Every cent counts",
|
||||
"💸 投币就上榜": "💸 Tip and get on the board",
|
||||
"📜 留一句话刻功德簿": "📜 Leave a line in the Book of Merit",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 One tweet opens your own bowl",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Cyber Beggars Guild: a bowl for everyone",
|
||||
"· 赛博丐帮,行行好": "· Cyber Beggars Guild · Spare a coin",
|
||||
"作者": "Author",
|
||||
"收款由": "Payments by",
|
||||
"驱动 · 字体": "· Font",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Sound: off",
|
||||
"声音:开(点击静音)": "Sound: on (click to mute)",
|
||||
"点一下开始播放": "Tap to start the music",
|
||||
"已复制": "Copied",
|
||||
"功德 +": "Merit +",
|
||||
"你的名号和留言已刻上功德簿": "Your name and message are now in the Book of Merit",
|
||||
"看看功德簿": "See the Book of Merit",
|
||||
"分享卡片": "Share card",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Submitted. You'll be on the board once the owner confirms. This page updates automatically.",
|
||||
"这笔施舍已": "This donation has ",
|
||||
"过期": "expired",
|
||||
"下单失败": "failed to create",
|
||||
"被站长拒绝": "been rejected by the owner",
|
||||
"关闭": "been closed",
|
||||
",请回到页面重新投币。": ". Please go back and tip again.",
|
||||
"没成功,再试试": "Didn't work, try again",
|
||||
"网络开小差了": "Network hiccup",
|
||||
"分页": "Pagination",
|
||||
"‹ 上一页": "‹ Prev",
|
||||
"下一页 ›": "Next ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Owner login ·",
|
||||
"🔑 站长登录": "🔑 Owner login",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Log in with your X username and the password you set when opening your bowl. Main-site owner: leave the username empty.",
|
||||
"X 用户名": "X username",
|
||||
"例如 qianyuwing(主站留空)": "e.g. qianyuwing (leave empty for the main site)",
|
||||
"口令": "Password",
|
||||
"忘了口令?": "Forgot your password?",
|
||||
"用 X 发推找回": "Recover with a tweet",
|
||||
"。还没有要饭站?": ". No bowl yet?",
|
||||
"用 X 开一个": "Open one with X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Dashboard ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 You're open for business! Your bowl",
|
||||
"已上线": "is live",
|
||||
"(待主站站长收录后进榜)": " (it joins the boards once the main-site owner lists it)",
|
||||
"下一步:": "Next: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "fill in your Binance UID under \"Payment\" below (ten seconds), otherwise nobody can pay you.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Come back via %s (X username %s + your password). Forgot it? Recover with another tweet.",
|
||||
"后台": "dashboard",
|
||||
"· 碗里": "· Bowl",
|
||||
"位施主 ·": "donors ·",
|
||||
"次 · 钢镚": "tips · coins",
|
||||
"待收录": "unlisted",
|
||||
"🔑 改口令": "🔑 Password",
|
||||
"退出": "Log out",
|
||||
"⏳ 待确认": "⏳ Pending",
|
||||
"✏️ 资料": "✏️ Profile",
|
||||
"💰 收款方式": "💰 Payment",
|
||||
"📜 施舍记录": "📜 Donations",
|
||||
"🏚 所有站点": "🏚 All bowls",
|
||||
"🧹 留言巡查": "🧹 Messages",
|
||||
"⏳ 待确认的施舍": "⏳ Donations awaiting confirmation",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Check the Binance app for the transfer (amount and memo code), then confirm to put them on the board.",
|
||||
"备注码": "Memo",
|
||||
"· 币安订单": "· Binance order",
|
||||
"✓ 确认到账": "✓ Received",
|
||||
"✗ 没收到": "✗ Not received",
|
||||
"站点标题": "Bowl name",
|
||||
"(来自 X @": "(from X @",
|
||||
",锁定)": ", locked)",
|
||||
"头像 emoji": "Avatar emoji",
|
||||
"一句话口号": "One-line slogan",
|
||||
"绑定 X": "Link X",
|
||||
"(主页链接或 @名字,留空不显示)": "(profile URL or @name; leave empty to hide)",
|
||||
"https://x.com/你的名字": "https://x.com/yourname",
|
||||
"保存资料": "Save profile",
|
||||
"config.env 配置": "set in config.env",
|
||||
"已绑币安 Key · 自动确认": "Binance Key linked · auto-confirm",
|
||||
"直接转账 · UID": "Direct transfer · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ No bowl yet — tap to set up",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "The main site's payment method is set in config.env on the server. Current: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "BinancePayTool gateway auto-confirm (default account)",
|
||||
"直接转账": "direct transfer",
|
||||
"校验网关默认账号": "Verify gateway default account",
|
||||
"✅ 已绑定币安账号(UID": "✅ Binance account linked (UID",
|
||||
"),施主付款后": "). Donations are ",
|
||||
"自动确认上榜": "confirmed automatically",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " The payment panel shows your QR code / one-tap open.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Add a receive link so donors can scan or open the app in one tap.",
|
||||
"重新校验 Key": "Re-verify Key",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Unlinking switches to direct transfer (you confirm each payment by hand). Continue?",
|
||||
"解绑": "Unlink",
|
||||
"换一个 Key / 更新收款链接": "Change Key / update receive link",
|
||||
"当前是": "Current mode: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Donors transfer to your UID in the Binance app, tap \"I've paid\", and you confirm here.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ No bowl yet: enter your Binance UID and you can receive money. Ten seconds.",
|
||||
"方式一:填币安 UID(最简单)": "Option 1: your Binance UID (easiest)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Binance app → tap your avatar top-left; the number under it is your",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (also your Pay ID). Donors see it when tipping and send to it via Binance app \"Pay → Transfer\", zero fees.",
|
||||
"币安 UID": "Binance UID",
|
||||
"例如 12345678": "e.g. 12345678",
|
||||
"收款链接": "Receive link",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(optional. With it donors can scan or open the Binance app in one tap; without it they transfer by UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "How to get it: on the Binance receive page tap \"Save image\", read the QR with any scanner app, and paste the link here.",
|
||||
"保存": "Save",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Option 2: link a read-only Binance API Key (auto-confirm)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Donations are confirmed automatically. The Key only needs \"Enable Reading\" and cannot move funds; this site never stores it, the payment gateway keeps it encrypted.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "total · hide spam messages or block the user (records kept) · reply",
|
||||
"已屏蔽此人": "User blocked",
|
||||
"(已屏蔽:": "(hidden: ",
|
||||
"🥣 站长:": "🥣 Owner: ",
|
||||
"恢复留言": "Unhide message",
|
||||
"屏蔽留言": "Hide message",
|
||||
"恢复此人": "Unblock user",
|
||||
"屏蔽此人": "Block user",
|
||||
"回一句…": "Reply…",
|
||||
"回复": "Reply",
|
||||
"还没有施舍记录": "No donations yet",
|
||||
"🔑 修改口令": "🔑 Change password",
|
||||
"新口令(至少 6 位)": "New password (min 6 chars)",
|
||||
"再输一遍": "Repeat it",
|
||||
"改完后其它设备上的登录会失效。": "Other devices will be logged out.",
|
||||
"确认修改": "Change password",
|
||||
"🏚 所有要饭站": "🏚 All bowls",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "total · ban rule-breakers · reset an owner's password",
|
||||
"已除名": "banned",
|
||||
"未收录": "unlisted",
|
||||
"已绑 Key 自动确认": "Key linked, auto-confirm",
|
||||
"位施主 · 钢镚": "donors · coins",
|
||||
"开张": "opened",
|
||||
"取消收录": "Unlist",
|
||||
"收录上榜": "List",
|
||||
"除名": "Ban",
|
||||
"恢复": "Restore",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Reset the password for /%s? The new password is shown only once.",
|
||||
"重置口令": "Reset password",
|
||||
"还没有子站": "No bowls yet",
|
||||
"🧹 全站最新留言": "🧹 Latest messages site-wide",
|
||||
"条 · 跨站点巡查广告": "total · spam patrol across all bowls",
|
||||
"暂无留言": "No messages yet",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Binance app → Account → API Management → Create API: ",
|
||||
"只勾「允许读取」": "tick only \"Enable Reading\"",
|
||||
",其它权限都不要,": ", nothing else, ",
|
||||
"不用设 IP 白名单": "no IP whitelist needed",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (a read-only Key cannot move funds). It is only used to read your incoming transfers, stored encrypted, never displayed.",
|
||||
"(App 头像页可见)": "(shown on your profile page in the app)",
|
||||
"(选填,填了施主能扫码)": "(optional; lets donors scan a QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "How to get the receive link: on the Binance receive page tap \"Save image\" and read the QR with any scanner app.",
|
||||
"绑定并校验": "Link and verify",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Recover password with X",
|
||||
"🔑 用 X 找回口令": "🔑 Recover password with X",
|
||||
"🏚 开通我的要饭站": "🏚 Open my bowl",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Post a tweet with the verification code to prove you're the owner, then set a new password.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "No donation required. One tweet from your X account opens your bowl: named after your X display name, with your X avatar, one bowl per account. The tweet also puts your bowl on the street.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 You're inside an in-app browser. One-tap tweeting may not open X, and you may lose your place when you come back.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Tap \"⋯\" top-right and choose \"Open in browser\"",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (or copy the link into Safari / Chrome) before continuing.",
|
||||
"复制本页链接": "Copy this page's link",
|
||||
"发一条推文,带上验证码": "Post a tweet containing the code",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Tweet text (edit freely, just keep the code)",
|
||||
"换一条": "Another one",
|
||||
"🐦 一键去 X 发推": "🐦 Post on X",
|
||||
"复制文案": "Copy text",
|
||||
"没拉起 X App?点这里用网页版发 →": "X app didn't open? Post via the web →",
|
||||
"验证码": "Code",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "is case-insensitive and valid for 24 hours. The text includes your bowl's link, so the tweet doubles as promotion.",
|
||||
"把推文链接贴回来": "Paste the tweet link back here",
|
||||
"推文链接": "Tweet link",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/yourname/status/1234567890",
|
||||
"验证": "Verify",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "After posting, tap the tweet's share button → Copy link.",
|
||||
"还没开过站?": "No bowl yet? ",
|
||||
"去开一个": "Open one",
|
||||
"已经开过站?": "Already have a bowl? ",
|
||||
"站长登录": "Owner login",
|
||||
"🔑 设置新口令": "🔑 Set a new password",
|
||||
"保存并登录": "Save and log in",
|
||||
"✅ X 验证通过": "✅ X verified",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· name and avatar come from X (avatar syncs periodically)",
|
||||
"站点地址": "Bowl address",
|
||||
"(就是你的 X 用户名,不用填)": "(your X username; nothing to fill in)",
|
||||
"行行好,赏口饭吃 🙏": "Spare a coin, kind stranger 🙏",
|
||||
"登录口令": "Login password",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Log in later with X username + password; forgot it? Recover with another tweet.",
|
||||
"口令(至少 6 位)": "Password (min 6 chars)",
|
||||
"开张 🏚": "Open for business 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "After opening, link a Binance Key or enter your UID in the dashboard to receive money. You're responsible for your content; spam bowls get banned by the guild.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Tip %s",
|
||||
"先回去看看": "Go back for now",
|
||||
"给 %s 投币": "Tipping %s",
|
||||
"金额要": "The amount must be ",
|
||||
"一分不差": "exact",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": the gateway matches by this unique tail and confirms within seconds",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Transfer directly to the owner with Binance Pay, then tap \"I've paid\" below",
|
||||
"打开币安 App 转账": "Open Binance app to pay",
|
||||
"唤起后手动输入金额": "In the app, enter amount",
|
||||
",备注填": ", memo",
|
||||
"用另一台手机扫码": "Scan with another phone",
|
||||
"收款二维码": "Payment QR code",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Binance app → Scan → enter amount",
|
||||
"或手动转账": "Or transfer manually",
|
||||
"转账信息": "Transfer details",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Binance app → \"Pay\" → \"Transfer\" → recipient: the UID below → amount",
|
||||
"→ 备注填": "→ memo",
|
||||
"→ 转完回来点「我已施舍」": "→ come back and tap \"I've paid\"",
|
||||
"收款方": "Recipient",
|
||||
"复制": "Copy",
|
||||
"金额": "Amount",
|
||||
"备注": "Memo",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Waiting for payment… confirms automatically once sent; this page updates itself",
|
||||
"付了但一直没确认?": "Paid but not confirmed?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Binance order ID (18 digits, in the transfer details)",
|
||||
"我付过了,帮我核对": "I've paid, please check",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Binance order ID (optional, 18 digits; speeds up confirmation)",
|
||||
"我已施舍,等站长确认": "I've paid, waiting for the owner",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Tap \"I've paid\" on the device that started this donation.",
|
||||
"打不开?": "Can't open it? ",
|
||||
"用网关收银页支付": "Pay via the gateway checkout page",
|
||||
"施舍进行中": "Donation in progress",
|
||||
"🙏 谢谢施主": "🙏 Thank you, kind donor",
|
||||
"你在 %s 的施主榜排第 %d 位": "You rank #%[2]d on %[1]s's donor board",
|
||||
"回到 %s 的碗": "Back to %s's bowl",
|
||||
"复制链接分享": "Copy link to share",
|
||||
"🖼 分享卡片": "🖼 Share card",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Generate a pixel share card for X or your friends, and give the beggar a shout-out.",
|
||||
"生成分享卡": "Make share card",
|
||||
"分享卡": "Share card",
|
||||
"长按图片保存,或": "Long-press to save, or ",
|
||||
"下载": "download",
|
||||
"🏚 你也可以要饭": "🏚 You can beg too",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "One tweet from your X account opens your own bowl; money goes straight to your Binance account.",
|
||||
"站长没有确认这笔施舍": "The owner didn't confirm this donation",
|
||||
"这笔施舍已过期": "This donation has expired",
|
||||
"如果你确实转了,请联系站长核对。": "If you did transfer, contact the owner to check.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Nothing was charged; start again if you'd like to tip.",
|
||||
"再来一次": "Try again",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Leaderboard ·",
|
||||
"🏆 施主榜": "🏆 Donors",
|
||||
"🥣 乞丐榜": "🥣 Beggars",
|
||||
"🪙 人气榜": "🪙 Popularity",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · all bowls combined ·",
|
||||
"位施主": "donors",
|
||||
"总榜": "All time",
|
||||
"本周": "This week",
|
||||
"要到最多的要饭站 · 共": "Bowls that collected the most ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Most coins received (free to give) ·",
|
||||
"← 回到刚才看的碗": "← Back to the bowl you were viewing",
|
||||
"施主自己填的 X,未经验证": "X handle entered by the donor, unverified",
|
||||
"次 · 施舍过": "tips · gave to",
|
||||
"个乞丐": "beggars",
|
||||
"榜上无人": "Nobody here yet",
|
||||
"就是我": "me",
|
||||
"还没有人上榜": "Nobody on the board yet",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "is begging ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ This bowl isn't listed by the guild yet, so it's not on the boards.",
|
||||
"主站站长审核后会收录。": "The main-site owner will list it after review.",
|
||||
"· 榜 #": "· Rank #",
|
||||
"升%s要 %s": "→ %s at %s",
|
||||
"满级": "Max level",
|
||||
"饱食度": "Fullness",
|
||||
"今天还没吃饭": "Nothing to eat today",
|
||||
"今天有人投币了": "Someone tipped today",
|
||||
"今天丢过了": "Already tossed today",
|
||||
"丢个钢镚(免费)": "Toss a coin (free)",
|
||||
"💸 投币施舍": "💸 Tip",
|
||||
"还没摆碗,暂不能投币": "No bowl set up yet, can't tip",
|
||||
"去配置": "Set it up",
|
||||
"钢镚": "Coins",
|
||||
"· 今日": "· today",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 coin =",
|
||||
"碗里已有": "In the bowl",
|
||||
"施主": "Donors",
|
||||
"人": "",
|
||||
"今日": "Today",
|
||||
"🕹️ 投币施舍": "🕹️ Insert coin",
|
||||
"玩家名(上榜用,可留空)": "Player name (for the board, optional)",
|
||||
"匿名施主": "Anonymous",
|
||||
"你的 X(可选,显示头像)": "Your X (optional, shows your avatar)",
|
||||
"投多少": "Amount in",
|
||||
"✏️ 自定义": "✏️ Custom",
|
||||
"输入金额,最多两位小数": "Amount, up to 2 decimals",
|
||||
"对乞丐喊话": "Say something to the beggar",
|
||||
"例如:别买烟了,去吃饭": "e.g. Skip the cigarettes, buy food",
|
||||
"投币 💸": "Tip 💸",
|
||||
"投币": "Tip",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Scan with the Binance app or open it in one tap; once received it's written into the Book of Merit automatically.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Transfer directly to the owner via Binance Pay; the owner confirms and you're on the board.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Min %s, max %s. No links or contact info in messages.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "This beggar hasn't set up a bowl (no payment method yet), so they can't receive money.",
|
||||
"去后台配置 →": "Set it up in the dashboard →",
|
||||
"🏚 想自己要饭?": "🏚 Want to beg too?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "One tweet from your X account opens your own bowl: your own address, your own Book of Merit and donor board, money straight into your Binance account.",
|
||||
"用 X 开通我的要饭站 →": "Open my bowl with X →",
|
||||
"人气榜": "Popularity",
|
||||
"功德簿": "Merit",
|
||||
"施主榜": "Donors",
|
||||
"乞丐榜": "Beggars",
|
||||
"已屏蔽的施主": "Blocked donor",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "The Book of Merit is empty. The first coin gets written here.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · top tippers for",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 first donor 💎 biggest tip 🔥 regular",
|
||||
"丐帮排名 · 要到最多的要饭站": "Guild ranking · bowls that collected the most",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Popularity · bowls with the most coins (coins are free)",
|
||||
"次": "tips",
|
||||
"榜上无人,第一个投币的就是首席施主": "Nobody here yet. The first tipper becomes the chief donor.",
|
||||
"本站": "this bowl",
|
||||
"叮!钢镚 +1": "Ding! Coin +1",
|
||||
"没丢进去": "Missed the bowl",
|
||||
"网络开小差了,再试一次": "Network hiccup, try again",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Invalid amount (up to 2 decimals)",
|
||||
"最少施舍 %s %s": "Minimum tip is %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "Maximum tip is %s %s. If you really have that much, split it up",
|
||||
"支付网关开小差了:%s": "Payment gateway hiccup: %s",
|
||||
"手速太快了": "Too fast",
|
||||
"这个乞丐不在": "This beggar isn't here",
|
||||
"请先打开要饭页再丢": "Open the bowl page first",
|
||||
"服务器开小差了": "Server hiccup",
|
||||
"手速太快了,歇一会儿": "Too fast, take a break",
|
||||
"已提交,等站长确认": "Submitted, waiting for the owner to confirm",
|
||||
"网关返回 %s": "Gateway returned %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "I forgot the password to my bowl on %s, posting to prove it's me 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "I set up a bowl on %s 🥣 Spare a coin, kind strangers~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "I've joined the Cyber Beggars Guild 🧎 Every cent counts, a free coin works too 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Quit my job, begging now. Bowl's right here, be kind 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "Beggars guild is recruiting and I'm going first 🥣 Tip and get in the Book of Merit, or toss a free coin %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "That tweet doesn't contain the code %s. Check that you posted the right one",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s already has a bowl: %s. Forgot the password? Reset it with X on the login page.",
|
||||
"@%s 已经开过站了": "@%s already has a bowl",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "The address %s is taken (@%s may already have a bowl; recover the password with X on the login page)",
|
||||
"@%s 还没开过要饭站": "@%s doesn't have a bowl yet",
|
||||
"解绑币安 Key 失败:%s": "Failed to unlink the Binance Key: %s",
|
||||
"绑定失败:%s": "Linking failed: %s",
|
||||
"解绑失败:%s": "Unlinking failed: %s",
|
||||
"校验失败:%s": "Verification failed: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Password for /%s reset to %s (shown only once, pass it to the owner)",
|
||||
"本站未配置支付网关": "No payment gateway configured",
|
||||
"网关连不上,请稍后再试": "Can't reach the gateway, try again later",
|
||||
"方法不允许": "Method not allowed",
|
||||
"主站不存在": "Main site not found",
|
||||
"页面不存在": "Page not found",
|
||||
"赛博丐帮没有这条路。": "No such road in the Cyber Beggars Guild.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Either not open yet, or banned by the guild.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "This beggar hasn't set up a bowl (no payment method), can't receive money yet",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "X username can only contain letters, digits and underscores (with or without @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "No links or contact info in your name or message. Beggars don't take ads",
|
||||
"没有这笔施舍": "Donation not found",
|
||||
"站点不存在": "Bowl not found",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Tap \"I've paid\" on the device that started this donation",
|
||||
"币安订单编号是 18 位数字,不填也行": "The Binance order ID is 18 digits (optional)",
|
||||
"核对失败": "Check failed",
|
||||
"这笔施舍不是网关模式": "This donation doesn't use the gateway",
|
||||
"试得太频繁了,一分钟后再试": "Too many attempts, try again in a minute",
|
||||
"请在发起施舍的那台设备上回填": "Submit the order ID from the device that started this donation",
|
||||
"币安订单编号是 18 位数字": "The Binance order ID is 18 digits",
|
||||
"本站未开放开站": "Opening bowls is disabled on this site",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "The code has expired (or was created in another browser). Generate a new one",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Invalid tweet link. It should look like https://x.com/yourname/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "That tweet is older than the code. Use a tweet posted after generating the code",
|
||||
"验证已失效,请重新验证": "Verification expired, please verify again",
|
||||
"口号和介绍里别放链接、联系方式": "No links or contact info in the slogan",
|
||||
"口令至少 6 位": "Password must be at least 6 characters",
|
||||
"两次口令不一致": "Passwords don't match",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "The main site's password is set in config.env on the server, not via X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Too many resets for this X account today, come back tomorrow",
|
||||
"口令至少 6 位,且两次一致": "Password must be at least 6 characters and match",
|
||||
"口令已重置,其它设备上的登录已失效": "Password reset. Other devices have been logged out",
|
||||
"X 用户名或口令不对": "Wrong X username or password",
|
||||
"请先登录": "Please log in",
|
||||
"登录状态已失效,请重新登录。": "Your session has expired, please log in again.",
|
||||
"歇一会儿再来。": "Take a break and come back.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Too many wrong passwords for this bowl. Take a break.",
|
||||
"站点标题不能为空": "Bowl name can't be empty",
|
||||
"资料里别放链接、联系方式": "No links or contact info in your profile",
|
||||
"资料已保存": "Profile saved",
|
||||
"主站的收款方式在服务器 config.env 里改": "The main site's payment method is set in config.env on the server",
|
||||
"填一下币安 UID,不然钱没处去": "Enter your Binance UID, otherwise the money has nowhere to go",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Switched to direct transfer: donors report their payment and you confirm here",
|
||||
"本站不支持绑定": "Linking isn't available on this site",
|
||||
"API Key 和 Secret 都要填": "Both API Key and Secret are required",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Binance UID is digits only (shown on your profile page in the app)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Linked! Binance verified the Key; donations will now be confirmed automatically",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Unlinked. You're in direct-transfer mode now, make sure your UID is filled in",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Verified: the Binance Key works, payments will be confirmed automatically",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "The main site's password is set in config.env (ADMIN_PASSWORD) on the server",
|
||||
"口令已修改,其它设备上的登录已失效": "Password changed. Other devices have been logged out",
|
||||
"这笔施舍当前不能确认/拒绝": "This donation can't be confirmed or rejected right now",
|
||||
"只能回复自己站的施舍": "You can only reply to donations on your own bowl",
|
||||
"回复里别放链接、联系方式": "No links or contact info in replies",
|
||||
"未知操作": "Unknown action",
|
||||
"无权操作": "Not allowed",
|
||||
"没有这个站": "No such bowl",
|
||||
"未配置支付网关": "No payment gateway configured",
|
||||
"请求来源不对": "Bad request origin",
|
||||
"请从本站页面操作。": "Please use the site's own pages.",
|
||||
"页面渲染失败": "Failed to render page",
|
||||
"稍后再试。": "Try again later.",
|
||||
"地址已被占用": "Address already taken",
|
||||
"这个 X 账号已经开过站了": "This X account already has a bowl",
|
||||
"连不上 X 接口: %w": "Can't reach X: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tweet not found (wrong link, or the tweet isn't public)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Can't read the tweet (deleted, or the account is protected)",
|
||||
"头像地址不在允许的域名": "Avatar URL is not on an allowed domain",
|
||||
"头像下载失败": "Avatar download failed",
|
||||
"头像不是有效图片": "Avatar is not a valid image",
|
||||
"金额格式不对": "Invalid amount",
|
||||
"收款链接过长": "Receive link is too long",
|
||||
"收款链接须为 https 链接": "Receive link must be an https link",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Receive link must be a Binance domain (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "X profile link should look like https://x.com/yourname",
|
||||
"核对成功,已到账": "Verified, payment received",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Transfer found but the amount is short; recorded as paid",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Transfer not found: check the order ID and the recipient account, then try again once Binance shows it",
|
||||
"这笔转账已经被别的订单用过了": "This transfer was already used by another order",
|
||||
"币种不对": "Wrong currency",
|
||||
"这笔施舍当前状态不能回填": "This donation's status doesn't allow submitting an order ID",
|
||||
"这个网络今天丢得够多了": "This network has tossed enough coins today",
|
||||
"今天已经丢过了,明天再来": "Already tossed today, come back tomorrow",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "unpaid",
|
||||
"待确认": "pending",
|
||||
"已到账": "paid",
|
||||
"已过期": "expired",
|
||||
"已关闭": "closed",
|
||||
"已拒绝": "rejected",
|
||||
"空碗未入帮": "Empty bowl",
|
||||
"一袋弟子": "1-Sack Disciple",
|
||||
"二袋弟子": "2-Sack Disciple",
|
||||
"三袋弟子": "3-Sack Disciple",
|
||||
"四袋弟子": "4-Sack Disciple",
|
||||
"五袋弟子": "5-Sack Disciple",
|
||||
"六袋弟子": "6-Sack Disciple",
|
||||
"七袋弟子": "7-Sack Disciple",
|
||||
"八袋弟子": "8-Sack Disciple",
|
||||
"九袋长老": "9-Sack Elder",
|
||||
"帮主": "Guild Master",
|
||||
"副帮主": "Deputy Master",
|
||||
"传功长老": "Elder of Teachings",
|
||||
"执法长老": "Elder of Law",
|
||||
"掌棒龙头": "Staff Chief",
|
||||
"掌钵龙头": "Bowl Chief",
|
||||
"长老": "Elder",
|
||||
"舵主": "Branch Chief",
|
||||
"弟子": "Disciple",
|
||||
"总舵": "Headquarters",
|
||||
"投了个硬币": "tossed a coin",
|
||||
"善心人": "kind soul",
|
||||
"大善人": "great benefactor",
|
||||
"活菩萨": "living saint",
|
||||
"财神爷": "god of wealth",
|
||||
"刚刚": "just now",
|
||||
"%d 分钟前": "%d min ago",
|
||||
"%d 小时前": "%d h ago",
|
||||
"%d 天前": "%d d ago",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 西班牙语(中性拉美 / 国际)。key 是中文原文,占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["es"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Una monedita, buena gente. Dona y entra al Libro de Méritos; una moneda gratis también es amor.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Mendigo Cyber",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Una monedita, buena gente. Dona con Binance Pay y deja una frase en el Libro de Méritos.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(oculto: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Volver a la calle",
|
||||
"回到刚才看的碗": "Volver al cuenco que estabas viendo",
|
||||
"声音开关": "Activar/desactivar sonido",
|
||||
"声音": "Sonido",
|
||||
"排行榜": "Ranking",
|
||||
"我的后台": "Mi panel",
|
||||
"站长": "Dueño ",
|
||||
"登录": "Entrar",
|
||||
"我的站": "Mi cuenco",
|
||||
"开通要饭站": "Empezar a mendigar",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Una monedita, buena gente",
|
||||
"🪙 一毛也是爱": "🪙 Cada centavo cuenta",
|
||||
"💸 投币就上榜": "💸 Dona y entra al ranking",
|
||||
"📜 留一句话刻功德簿": "📜 Deja una frase en el Libro de Méritos",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Un tuit y tienes tu propio cuenco",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Gremio de Mendigos Cyber: un cuenco para cada quien",
|
||||
"· 赛博丐帮,行行好": "· Gremio de Mendigos Cyber · Una monedita",
|
||||
"作者": "Autor",
|
||||
"收款由": "Pagos por",
|
||||
"驱动 · 字体": "· Fuente",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Sonido: apagado",
|
||||
"声音:开(点击静音)": "Sonido: encendido (clic para silenciar)",
|
||||
"点一下开始播放": "Toca para iniciar la música",
|
||||
"已复制": "Copiado",
|
||||
"功德 +": "Mérito +",
|
||||
"你的名号和留言已刻上功德簿": "Tu nombre y tu mensaje ya están en el Libro de Méritos",
|
||||
"看看功德簿": "Ver el Libro de Méritos",
|
||||
"分享卡片": "Tarjeta para compartir",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Enviado. Entrarás al ranking cuando el dueño confirme. Esta página se actualiza sola.",
|
||||
"这笔施舍已": "Esta donación ",
|
||||
"过期": "expiró",
|
||||
"下单失败": "no se pudo crear",
|
||||
"被站长拒绝": "fue rechazada por el dueño",
|
||||
"关闭": "fue cerrada",
|
||||
",请回到页面重新投币。": ". Vuelve a la página y dona de nuevo.",
|
||||
"没成功,再试试": "No funcionó, inténtalo otra vez",
|
||||
"网络开小差了": "La red se distrajo",
|
||||
"分页": "Paginación",
|
||||
"‹ 上一页": "‹ Anterior",
|
||||
"下一页 ›": "Siguiente ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Acceso de dueño ·",
|
||||
"🔑 站长登录": "🔑 Acceso de dueño",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Entra con tu usuario de X y la contraseña que pusiste al abrir tu cuenco. Dueño del sitio principal: deja el usuario vacío.",
|
||||
"X 用户名": "Usuario de X",
|
||||
"例如 qianyuwing(主站留空)": "p. ej. qianyuwing (vacío para el sitio principal)",
|
||||
"口令": "Contraseña",
|
||||
"忘了口令?": "¿Olvidaste la contraseña?",
|
||||
"用 X 发推找回": "Recupérala con un tuit",
|
||||
"。还没有要饭站?": ". ¿Aún no tienes cuenco?",
|
||||
"用 X 开一个": "Abre uno con X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Panel ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 ¡Negocio abierto! Tu cuenco",
|
||||
"已上线": "ya está en línea",
|
||||
"(待主站站长收录后进榜)": " (entrará al ranking cuando el dueño del sitio principal lo apruebe)",
|
||||
"下一步:": "Siguiente paso: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "pon tu UID de Binance en \"Cobro\" aquí abajo (diez segundos); si no, nadie podrá pagarte.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Vuelve por %s (usuario de X %s + tu contraseña). ¿La olvidaste? Recupérala con otro tuit.",
|
||||
"后台": "panel",
|
||||
"· 碗里": "· En el cuenco",
|
||||
"位施主 ·": "donantes ·",
|
||||
"次 · 钢镚": "donaciones · monedas",
|
||||
"待收录": "sin aprobar",
|
||||
"🔑 改口令": "🔑 Contraseña",
|
||||
"退出": "Salir",
|
||||
"⏳ 待确认": "⏳ Pendientes",
|
||||
"✏️ 资料": "✏️ Perfil",
|
||||
"💰 收款方式": "💰 Cobro",
|
||||
"📜 施舍记录": "📜 Donaciones",
|
||||
"🏚 所有站点": "🏚 Todos los cuencos",
|
||||
"🧹 留言巡查": "🧹 Mensajes",
|
||||
"⏳ 待确认的施舍": "⏳ Donaciones por confirmar",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Revisa la transferencia en la app de Binance (monto y código de nota) y confirma para subirlos al ranking.",
|
||||
"备注码": "Nota",
|
||||
"· 币安订单": "· Orden de Binance",
|
||||
"✓ 确认到账": "✓ Recibido",
|
||||
"✗ 没收到": "✗ No recibido",
|
||||
"站点标题": "Nombre del cuenco",
|
||||
"(来自 X @": "(de X @",
|
||||
",锁定)": ", fijo)",
|
||||
"头像 emoji": "Emoji de avatar",
|
||||
"一句话口号": "Lema en una línea",
|
||||
"绑定 X": "Vincular X",
|
||||
"(主页链接或 @名字,留空不显示)": "(enlace del perfil o @nombre; vacío para ocultar)",
|
||||
"https://x.com/你的名字": "https://x.com/tunombre",
|
||||
"保存资料": "Guardar perfil",
|
||||
"config.env 配置": "definido en config.env",
|
||||
"已绑币安 Key · 自动确认": "Key de Binance vinculada · confirmación automática",
|
||||
"直接转账 · UID": "Transferencia directa · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Aún no hay cuenco — toca para configurarlo",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "El método de cobro del sitio principal se define en config.env en el servidor. Actual: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "Confirmación automática por la pasarela BinancePayTool (cuenta predeterminada)",
|
||||
"直接转账": "transferencia directa",
|
||||
"校验网关默认账号": "Verificar la cuenta predeterminada de la pasarela",
|
||||
"✅ 已绑定币安账号(UID": "✅ Cuenta de Binance vinculada (UID",
|
||||
"),施主付款后": "). Las donaciones se ",
|
||||
"自动确认上榜": "confirman automáticamente",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " El panel de pago mostrará tu código QR / apertura con un toque.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Agrega un enlace de cobro para que los donantes puedan escanear o abrir la app con un toque.",
|
||||
"重新校验 Key": "Volver a verificar la Key",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Al desvincular pasas a transferencia directa (confirmas cada pago a mano). ¿Continuar?",
|
||||
"解绑": "Desvincular",
|
||||
"换一个 Key / 更新收款链接": "Cambiar Key / actualizar enlace de cobro",
|
||||
"当前是": "Modo actual: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Los donantes transfieren a tu UID en la app de Binance, tocan \"Ya doné\" y tú confirmas aquí.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Aún no hay cuenco: pon tu UID de Binance y ya puedes recibir dinero. Diez segundos.",
|
||||
"方式一:填币安 UID(最简单)": "Opción 1: tu UID de Binance (lo más fácil)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "App de Binance → toca tu avatar arriba a la izquierda; el número debajo es tu",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (también es tu Pay ID). Los donantes lo verán al donar y te envían por la app de Binance en \"Pagar → Transferir\", sin comisiones.",
|
||||
"币安 UID": "UID de Binance",
|
||||
"例如 12345678": "p. ej. 12345678",
|
||||
"收款链接": "Enlace de cobro",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(opcional. Con él los donantes pueden escanear o abrir la app de Binance con un toque; sin él transfieren por UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Cómo obtenerlo: en la página de cobro de Binance toca \"Guardar imagen\", lee el QR con cualquier app de escaneo y pega el enlace aquí.",
|
||||
"保存": "Guardar",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Opción 2: vincular una API Key de Binance de solo lectura (confirmación automática)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Las donaciones se confirman solas, sin trabajo manual. La Key solo necesita \"Habilitar lectura\" y no puede mover fondos; este sitio nunca la guarda, la pasarela de pagos la almacena cifrada.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "en total · oculta mensajes de spam o bloquea al usuario (el registro se conserva) · responde",
|
||||
"已屏蔽此人": "Usuario bloqueado",
|
||||
"(已屏蔽:": "(oculto: ",
|
||||
"🥣 站长:": "🥣 Dueño: ",
|
||||
"恢复留言": "Mostrar mensaje",
|
||||
"屏蔽留言": "Ocultar mensaje",
|
||||
"恢复此人": "Desbloquear usuario",
|
||||
"屏蔽此人": "Bloquear usuario",
|
||||
"回一句…": "Responder…",
|
||||
"回复": "Responder",
|
||||
"还没有施舍记录": "Todavía no hay donaciones",
|
||||
"🔑 修改口令": "🔑 Cambiar contraseña",
|
||||
"新口令(至少 6 位)": "Nueva contraseña (mín. 6 caracteres)",
|
||||
"再输一遍": "Repítela",
|
||||
"改完后其它设备上的登录会失效。": "Se cerrará la sesión en los demás dispositivos.",
|
||||
"确认修改": "Cambiar contraseña",
|
||||
"🏚 所有要饭站": "🏚 Todos los cuencos",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "en total · expulsa a quien rompa las reglas · restablece la contraseña de un dueño",
|
||||
"已除名": "expulsado",
|
||||
"未收录": "sin aprobar",
|
||||
"已绑 Key 自动确认": "Key vinculada, confirmación automática",
|
||||
"位施主 · 钢镚": "donantes · monedas",
|
||||
"开张": "abierto",
|
||||
"取消收录": "Quitar del ranking",
|
||||
"收录上榜": "Aprobar",
|
||||
"除名": "Expulsar",
|
||||
"恢复": "Restaurar",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "¿Restablecer la contraseña de /%s? La nueva se muestra una sola vez.",
|
||||
"重置口令": "Restablecer contraseña",
|
||||
"还没有子站": "Todavía no hay cuencos",
|
||||
"🧹 全站最新留言": "🧹 Últimos mensajes de todo el sitio",
|
||||
"条 · 跨站点巡查广告": "en total · patrulla de spam en todos los cuencos",
|
||||
"暂无留言": "Todavía no hay mensajes",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "App de Binance → Cuenta → Gestión de API → Crear API: ",
|
||||
"只勾「允许读取」": "marca solo \"Habilitar lectura\"",
|
||||
",其它权限都不要,": ", nada más, ",
|
||||
"不用设 IP 白名单": "sin lista blanca de IP",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (una Key de solo lectura no puede mover fondos). Solo se usa para leer tus cobros, se guarda cifrada y nunca se muestra.",
|
||||
"(App 头像页可见)": "(visible en tu página de perfil en la app)",
|
||||
"(选填,填了施主能扫码)": "(opcional; permite a los donantes escanear un QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Cómo obtener el enlace de cobro: en la página de cobro de Binance toca \"Guardar imagen\" y lee el QR con cualquier app de escaneo.",
|
||||
"绑定并校验": "Vincular y verificar",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Recuperar contraseña con X",
|
||||
"🔑 用 X 找回口令": "🔑 Recuperar contraseña con X",
|
||||
"🏚 开通我的要饭站": "🏚 Abrir mi cuenco",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Publica un tuit con el código de verificación para demostrar que eres el dueño y pon una contraseña nueva.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "No hace falta donar antes. Un tuit desde tu cuenta de X abre tu cuenco: con el nombre y el avatar de tu X, un cuenco por cuenta. El tuit además saca tu cuenco a la calle.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Estás en el navegador interno de una app. Puede que X no se abra con un toque y que pierdas el progreso al volver.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Toca \"⋯\" arriba a la derecha y elige \"Abrir en el navegador\"",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (o copia el enlace en Safari / Chrome) antes de continuar.",
|
||||
"复制本页链接": "Copiar el enlace de esta página",
|
||||
"发一条推文,带上验证码": "Publica un tuit con el código",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Texto del tuit (edítalo a gusto, solo conserva el código)",
|
||||
"换一条": "Otro",
|
||||
"🐦 一键去 X 发推": "🐦 Publicar en X",
|
||||
"复制文案": "Copiar texto",
|
||||
"没拉起 X App?点这里用网页版发 →": "¿No se abrió la app de X? Publica desde la web →",
|
||||
"验证码": "El código",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "no distingue mayúsculas y vale 24 horas. El texto incluye el enlace de tu cuenco, así el tuit también sirve de promoción.",
|
||||
"把推文链接贴回来": "Pega aquí el enlace del tuit",
|
||||
"推文链接": "Enlace del tuit",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/tunombre/status/1234567890",
|
||||
"验证": "Verificar",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Después de publicar, toca el botón de compartir del tuit → Copiar enlace.",
|
||||
"还没开过站?": "¿Aún no tienes cuenco? ",
|
||||
"去开一个": "Abre uno",
|
||||
"已经开过站?": "¿Ya tienes cuenco? ",
|
||||
"站长登录": "Acceso de dueño",
|
||||
"🔑 设置新口令": "🔑 Nueva contraseña",
|
||||
"保存并登录": "Guardar y entrar",
|
||||
"✅ X 验证通过": "✅ X verificado",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· el nombre y el avatar vienen de X (el avatar se sincroniza periódicamente)",
|
||||
"站点地址": "Dirección del cuenco",
|
||||
"(就是你的 X 用户名,不用填)": "(es tu usuario de X; no hay que rellenar nada)",
|
||||
"行行好,赏口饭吃 🙏": "Una monedita, buena gente 🙏",
|
||||
"登录口令": "Contraseña de acceso",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Luego entras con usuario de X + contraseña; si la olvidas, recupérala con otro tuit.",
|
||||
"口令(至少 6 位)": "Contraseña (mín. 6 caracteres)",
|
||||
"开张 🏚": "Abrir el negocio 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Después de abrir, vincula una Key de Binance o pon tu UID en el panel para recibir dinero. Eres responsable de tu contenido; los cuencos de spam son expulsados por el gremio.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Donar a %s",
|
||||
"先回去看看": "Volver por ahora",
|
||||
"给 %s 投币": "Donando a %s",
|
||||
"金额要": "El monto debe ser ",
|
||||
"一分不差": "exacto",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": la pasarela lo reconoce por esta terminación única y confirma en segundos",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Transfiere directo al dueño con Binance Pay y luego toca \"Ya doné\" abajo",
|
||||
"打开币安 App 转账": "Abrir la app de Binance para pagar",
|
||||
"唤起后手动输入金额": "En la app, escribe el monto",
|
||||
",备注填": ", nota",
|
||||
"用另一台手机扫码": "Escanea con otro teléfono",
|
||||
"收款二维码": "Código QR de pago",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "App de Binance → Escanear → escribe el monto",
|
||||
"或手动转账": "O transfiere a mano",
|
||||
"转账信息": "Datos de la transferencia",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "App de Binance → \"Pagar\" → \"Transferir\" → destinatario: el UID de abajo → monto",
|
||||
"→ 备注填": "→ nota",
|
||||
"→ 转完回来点「我已施舍」": "→ vuelve y toca \"Ya doné\"",
|
||||
"收款方": "Destinatario",
|
||||
"复制": "Copiar",
|
||||
"金额": "Monto",
|
||||
"备注": "Nota",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Esperando el pago… se confirma solo al enviarlo; esta página se actualiza sola",
|
||||
"付了但一直没确认?": "¿Pagaste y no se confirma?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "ID de orden de Binance (18 dígitos, en el detalle de la transferencia)",
|
||||
"我付过了,帮我核对": "Ya pagué, revísalo por favor",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "ID de orden de Binance (opcional, 18 dígitos; acelera la confirmación)",
|
||||
"我已施舍,等站长确认": "Ya doné, esperando al dueño",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Toca \"Ya doné\" en el dispositivo donde iniciaste la donación.",
|
||||
"打不开?": "¿No se abre? ",
|
||||
"用网关收银页支付": "Pagar por la página de cobro de la pasarela",
|
||||
"施舍进行中": "Donación en curso",
|
||||
"🙏 谢谢施主": "🙏 Gracias, buena gente",
|
||||
"你在 %s 的施主榜排第 %d 位": "En el ranking de donantes de %s estás en el puesto #%d",
|
||||
"回到 %s 的碗": "Volver al cuenco de %s",
|
||||
"复制链接分享": "Copiar enlace para compartir",
|
||||
"🖼 分享卡片": "🖼 Tarjeta para compartir",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Genera una tarjeta pixel para X o tus amigos y dale un empujón al mendigo.",
|
||||
"生成分享卡": "Crear tarjeta",
|
||||
"分享卡": "Tarjeta",
|
||||
"长按图片保存,或": "Mantén pulsada la imagen para guardarla, o ",
|
||||
"下载": "descárgala",
|
||||
"🏚 你也可以要饭": "🏚 Tú también puedes mendigar",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Un tuit desde tu cuenta de X abre tu propio cuenco; el dinero va directo a tu cuenta de Binance.",
|
||||
"站长没有确认这笔施舍": "El dueño no confirmó esta donación",
|
||||
"这笔施舍已过期": "Esta donación expiró",
|
||||
"如果你确实转了,请联系站长核对。": "Si de verdad transferiste, contacta al dueño para revisarlo.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "No se cobró nada; si quieres donar, empieza de nuevo.",
|
||||
"再来一次": "Intentar de nuevo",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Ranking ·",
|
||||
"🏆 施主榜": "🏆 Donantes",
|
||||
"🥣 乞丐榜": "🥣 Mendigos",
|
||||
"🪙 人气榜": "🪙 Popularidad",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · todos los cuencos juntos ·",
|
||||
"位施主": "donantes",
|
||||
"总榜": "Histórico",
|
||||
"本周": "Esta semana",
|
||||
"要到最多的要饭站 · 共": "Cuencos que más recaudaron ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Más monedas recibidas (gratis) ·",
|
||||
"← 回到刚才看的碗": "← Volver al cuenco que estabas viendo",
|
||||
"施主自己填的 X,未经验证": "X escrito por el donante, sin verificar",
|
||||
"次 · 施舍过": "donaciones · dio a",
|
||||
"个乞丐": "mendigos",
|
||||
"榜上无人": "Aquí no hay nadie todavía",
|
||||
"就是我": "yo",
|
||||
"还没有人上榜": "Nadie en el ranking todavía",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "está mendigando ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ El gremio aún no aprobó este cuenco, así que no aparece en los rankings.",
|
||||
"主站站长审核后会收录。": "El dueño del sitio principal lo aprobará tras revisarlo.",
|
||||
"· 榜 #": "· Puesto #",
|
||||
"升%s要 %s": "%s con %s EXP",
|
||||
"满级": "Nivel máximo",
|
||||
"饱食度": "Saciedad",
|
||||
"今天还没吃饭": "Hoy no ha comido nada",
|
||||
"今天有人投币了": "Hoy alguien donó",
|
||||
"今天丢过了": "Ya lanzaste hoy",
|
||||
"丢个钢镚(免费)": "Lanza una moneda (gratis)",
|
||||
"💸 投币施舍": "💸 Donar",
|
||||
"还没摆碗,暂不能投币": "Aún no hay cuenco, no se puede donar",
|
||||
"去配置": "Configurar",
|
||||
"钢镚": "Monedas",
|
||||
"· 今日": "· hoy",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 moneda =",
|
||||
"碗里已有": "En el cuenco",
|
||||
"施主": "Donantes",
|
||||
"人": "",
|
||||
"今日": "Hoy",
|
||||
"🕹️ 投币施舍": "🕹️ Inserta una moneda",
|
||||
"玩家名(上榜用,可留空)": "Nombre de jugador (para el ranking, opcional)",
|
||||
"匿名施主": "Anónimo",
|
||||
"你的 X(可选,显示头像)": "Tu X (opcional, muestra tu avatar)",
|
||||
"投多少": "Cuánto en",
|
||||
"✏️ 自定义": "✏️ Otro monto",
|
||||
"输入金额,最多两位小数": "Monto, hasta 2 decimales",
|
||||
"对乞丐喊话": "Dile algo al mendigo",
|
||||
"例如:别买烟了,去吃饭": "p. ej. Deja los cigarros y compra comida",
|
||||
"投币 💸": "Donar 💸",
|
||||
"投币": "Donar",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Escanea con la app de Binance o ábrela con un toque; al recibirse queda escrito en el Libro de Méritos automáticamente.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Transfiere directo al dueño por Binance Pay; el dueño confirma y entras al ranking.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Mín. %s, máx. %s. Sin enlaces ni datos de contacto en el mensaje.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Este mendigo aún no puso su cuenco (sin método de cobro), así que no puede recibir dinero.",
|
||||
"去后台配置 →": "Configúralo en el panel →",
|
||||
"🏚 想自己要饭?": "🏚 ¿Quieres mendigar tú también?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Un tuit desde tu cuenta de X abre tu propio cuenco: tu propia dirección, tu Libro de Méritos y tu ranking de donantes, con el dinero directo a tu cuenta de Binance.",
|
||||
"用 X 开通我的要饭站 →": "Abrir mi cuenco con X →",
|
||||
"人气榜": "Popularidad",
|
||||
"功德簿": "Méritos",
|
||||
"施主榜": "Donantes",
|
||||
"乞丐榜": "Mendigos",
|
||||
"已屏蔽的施主": "Donante bloqueado",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "El Libro de Méritos está vacío. La primera moneda se escribe aquí.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · los que más donaron a",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 primer donante 💎 mayor donación 🔥 habitual",
|
||||
"丐帮排名 · 要到最多的要饭站": "Ranking del gremio · cuencos que más recaudaron",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Popularidad · cuencos con más monedas (las monedas son gratis)",
|
||||
"次": "donaciones",
|
||||
"榜上无人,第一个投币的就是首席施主": "Aquí no hay nadie todavía. El primero en donar será el donante principal.",
|
||||
"本站": "este cuenco",
|
||||
"叮!钢镚 +1": "¡Clin! Moneda +1",
|
||||
"没丢进去": "No cayó en el cuenco",
|
||||
"网络开小差了,再试一次": "La red se distrajo, inténtalo otra vez",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Monto no válido (hasta 2 decimales)",
|
||||
"最少施舍 %s %s": "La donación mínima es %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "La donación máxima es %s %s. Si de verdad tienes tanto, divídelo en varias",
|
||||
"支付网关开小差了:%s": "La pasarela de pago se distrajo: %s",
|
||||
"手速太快了": "Demasiado rápido",
|
||||
"这个乞丐不在": "Este mendigo no está",
|
||||
"请先打开要饭页再丢": "Abre primero la página del cuenco",
|
||||
"服务器开小差了": "El servidor se distrajo",
|
||||
"手速太快了,歇一会儿": "Demasiado rápido, descansa un poco",
|
||||
"已提交,等站长确认": "Enviado, esperando la confirmación del dueño",
|
||||
"网关返回 %s": "La pasarela respondió %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "Olvidé la contraseña de mi cuenco en %s, tuiteo para demostrar que soy yo 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "Puse mi cuenco en %s 🥣 Una monedita, buena gente~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Me uní al Gremio de Mendigos Cyber 🧎 Cada centavo cuenta, una moneda gratis también vale 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Dejé el trabajo, ahora mendigo. Aquí está el cuenco, sean buenos 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "El gremio de mendigos recluta y yo voy primero 🥣 Dona y entra al Libro de Méritos, o lanza una moneda gratis %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Ese tuit no contiene el código %s. Revisa que publicaste el correcto",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s ya tiene un cuenco: %s. ¿Olvidaste la contraseña? Restablécela con X en la página de acceso.",
|
||||
"@%s 已经开过站了": "@%s ya tiene un cuenco",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "La dirección %s ya está ocupada (@%s quizá ya tiene un cuenco; recupera la contraseña con X en la página de acceso)",
|
||||
"@%s 还没开过要饭站": "@%s todavía no tiene cuenco",
|
||||
"解绑币安 Key 失败:%s": "No se pudo desvincular la Key de Binance: %s",
|
||||
"绑定失败:%s": "Error al vincular: %s",
|
||||
"解绑失败:%s": "Error al desvincular: %s",
|
||||
"校验失败:%s": "Error de verificación: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Contraseña de /%s restablecida a %s (se muestra solo esta vez, pásasela al dueño)",
|
||||
"本站未配置支付网关": "No hay pasarela de pago configurada",
|
||||
"网关连不上,请稍后再试": "No se puede conectar con la pasarela, inténtalo más tarde",
|
||||
"方法不允许": "Método no permitido",
|
||||
"主站不存在": "El sitio principal no existe",
|
||||
"页面不存在": "Página no encontrada",
|
||||
"赛博丐帮没有这条路。": "Ese camino no existe en el Gremio de Mendigos Cyber.",
|
||||
"要么还没开张,要么已被丐帮除名。": "O aún no ha abierto, o el gremio lo expulsó.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Este mendigo aún no puso su cuenco (sin método de cobro), no puede recibir dinero por ahora",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "El usuario de X solo puede tener letras, números y guiones bajos (con o sin @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Sin enlaces ni datos de contacto en el nombre o el mensaje. Los mendigos no aceptan publicidad",
|
||||
"没有这笔施舍": "Donación no encontrada",
|
||||
"站点不存在": "Cuenco no encontrado",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Toca \"Ya doné\" en el dispositivo donde iniciaste la donación",
|
||||
"币安订单编号是 18 位数字,不填也行": "El ID de orden de Binance tiene 18 dígitos (opcional)",
|
||||
"核对失败": "Error al revisar",
|
||||
"这笔施舍不是网关模式": "Esta donación no usa la pasarela",
|
||||
"试得太频繁了,一分钟后再试": "Demasiados intentos, prueba en un minuto",
|
||||
"请在发起施舍的那台设备上回填": "Envía el ID de orden desde el dispositivo donde iniciaste la donación",
|
||||
"币安订单编号是 18 位数字": "El ID de orden de Binance tiene 18 dígitos",
|
||||
"本站未开放开站": "Abrir cuencos está desactivado en este sitio",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "El código expiró (o se creó en otro navegador). Genera uno nuevo",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Enlace del tuit no válido. Debe verse como https://x.com/tunombre/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Ese tuit es anterior al código. Usa un tuit publicado después de generar el código",
|
||||
"验证已失效,请重新验证": "La verificación expiró, vuelve a verificar",
|
||||
"口号和介绍里别放链接、联系方式": "Sin enlaces ni datos de contacto en el lema",
|
||||
"口令至少 6 位": "La contraseña debe tener al menos 6 caracteres",
|
||||
"两次口令不一致": "Las contraseñas no coinciden",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "La contraseña del sitio principal se define en config.env en el servidor, no se recupera con X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Demasiados restablecimientos para esta cuenta de X hoy, vuelve mañana",
|
||||
"口令至少 6 位,且两次一致": "La contraseña debe tener al menos 6 caracteres y coincidir",
|
||||
"口令已重置,其它设备上的登录已失效": "Contraseña restablecida. Se cerró la sesión en los demás dispositivos",
|
||||
"X 用户名或口令不对": "Usuario de X o contraseña incorrectos",
|
||||
"请先登录": "Inicia sesión primero",
|
||||
"登录状态已失效,请重新登录。": "Tu sesión expiró, inicia sesión de nuevo.",
|
||||
"歇一会儿再来。": "Descansa un poco y vuelve.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Demasiadas contraseñas incorrectas para este cuenco. Descansa un poco.",
|
||||
"站点标题不能为空": "El nombre del cuenco no puede estar vacío",
|
||||
"资料里别放链接、联系方式": "Sin enlaces ni datos de contacto en el perfil",
|
||||
"资料已保存": "Perfil guardado",
|
||||
"主站的收款方式在服务器 config.env 里改": "El método de cobro del sitio principal se define en config.env en el servidor",
|
||||
"填一下币安 UID,不然钱没处去": "Pon tu UID de Binance; si no, el dinero no tiene a dónde ir",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Cambiado a transferencia directa: los donantes avisan su pago y tú confirmas aquí",
|
||||
"本站不支持绑定": "La vinculación no está disponible en este sitio",
|
||||
"API Key 和 Secret 都要填": "Hay que indicar tanto la API Key como el Secret",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "El UID de Binance es solo números (visible en tu página de perfil en la app)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "¡Vinculado! Binance verificó la Key; desde ahora las donaciones se confirman automáticamente",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Desvinculado. Ahora estás en modo transferencia directa, asegúrate de tener tu UID puesto",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Verificado: la Key de Binance funciona, los pagos se confirmarán automáticamente",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "La contraseña del sitio principal se define en config.env (ADMIN_PASSWORD) en el servidor",
|
||||
"口令已修改,其它设备上的登录已失效": "Contraseña cambiada. Se cerró la sesión en los demás dispositivos",
|
||||
"这笔施舍当前不能确认/拒绝": "Esta donación no se puede confirmar ni rechazar ahora",
|
||||
"只能回复自己站的施舍": "Solo puedes responder a donaciones de tu propio cuenco",
|
||||
"回复里别放链接、联系方式": "Sin enlaces ni datos de contacto en las respuestas",
|
||||
"未知操作": "Acción desconocida",
|
||||
"无权操作": "No permitido",
|
||||
"没有这个站": "Ese cuenco no existe",
|
||||
"未配置支付网关": "No hay pasarela de pago configurada",
|
||||
"请求来源不对": "Origen de la solicitud incorrecto",
|
||||
"请从本站页面操作。": "Usa las páginas del propio sitio.",
|
||||
"页面渲染失败": "No se pudo mostrar la página",
|
||||
"稍后再试。": "Inténtalo más tarde.",
|
||||
"地址已被占用": "Dirección ya ocupada",
|
||||
"这个 X 账号已经开过站了": "Esta cuenta de X ya tiene un cuenco",
|
||||
"连不上 X 接口: %w": "No se puede conectar con X: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tuit no encontrado (enlace incorrecto o el tuit no es público)",
|
||||
"推文读不到(可能被删除或账号受保护)": "No se puede leer el tuit (borrado, o la cuenta está protegida)",
|
||||
"头像地址不在允许的域名": "La URL del avatar no está en un dominio permitido",
|
||||
"头像下载失败": "No se pudo descargar el avatar",
|
||||
"头像不是有效图片": "El avatar no es una imagen válida",
|
||||
"金额格式不对": "Monto no válido",
|
||||
"收款链接过长": "El enlace de cobro es demasiado largo",
|
||||
"收款链接须为 https 链接": "El enlace de cobro debe ser https",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "El enlace de cobro debe ser un dominio de Binance (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "El enlace del perfil de X debe verse como https://x.com/tunombre",
|
||||
"核对成功,已到账": "Verificado, pago recibido",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Transferencia encontrada pero el monto es menor; se registró lo pagado",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Transferencia no encontrada: revisa el ID de orden y la cuenta destino, y vuelve a intentar cuando Binance la muestre",
|
||||
"这笔转账已经被别的订单用过了": "Esta transferencia ya se usó en otra orden",
|
||||
"币种不对": "Moneda incorrecta",
|
||||
"这笔施舍当前状态不能回填": "El estado de esta donación no permite enviar un ID de orden",
|
||||
"这个网络今天丢得够多了": "Esta red ya lanzó suficientes monedas hoy",
|
||||
"今天已经丢过了,明天再来": "Ya lanzaste hoy, vuelve mañana",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "sin pagar",
|
||||
"待确认": "pendiente",
|
||||
"已到账": "pagado",
|
||||
"已过期": "expirado",
|
||||
"已关闭": "cerrado",
|
||||
"已拒绝": "rechazado",
|
||||
"空碗未入帮": "Cuenco vacío",
|
||||
"一袋弟子": "Discípulo de 1 Saco",
|
||||
"二袋弟子": "Discípulo de 2 Sacos",
|
||||
"三袋弟子": "Discípulo de 3 Sacos",
|
||||
"四袋弟子": "Discípulo de 4 Sacos",
|
||||
"五袋弟子": "Discípulo de 5 Sacos",
|
||||
"六袋弟子": "Discípulo de 6 Sacos",
|
||||
"七袋弟子": "Discípulo de 7 Sacos",
|
||||
"八袋弟子": "Discípulo de 8 Sacos",
|
||||
"九袋长老": "Anciano de 9 Sacos",
|
||||
"帮主": "Maestro del Gremio",
|
||||
"副帮主": "Maestro Adjunto",
|
||||
"传功长老": "Anciano de Enseñanzas",
|
||||
"执法长老": "Anciano de la Ley",
|
||||
"掌棒龙头": "Jefe del Bastón",
|
||||
"掌钵龙头": "Jefe del Cuenco",
|
||||
"长老": "Anciano",
|
||||
"舵主": "Jefe de Rama",
|
||||
"弟子": "Discípulo",
|
||||
"总舵": "Sede Central",
|
||||
"投了个硬币": "lanzó una moneda",
|
||||
"善心人": "alma bondadosa",
|
||||
"大善人": "gran benefactor",
|
||||
"活菩萨": "santo viviente",
|
||||
"财神爷": "dios de la riqueza",
|
||||
"刚刚": "justo ahora",
|
||||
"%d 分钟前": "hace %d min",
|
||||
"%d 小时前": "hace %d h",
|
||||
"%d 天前": "hace %d d",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 法语:key 是中文原文,占位符 %s/%d 顺序须与中文一致。查不到回落英文。
|
||||
func init() {
|
||||
translations["fr"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Une petite pièce, brave âme. Un don et tu entres au Livre des Mérites ; un jeton gratuit, c'est de l'amour aussi.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s : %s · Cyber Mendiant",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Une petite pièce, brave âme. Donne avec Binance Pay et laisse un mot dans le Livre des Mérites.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(masqué : %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Retour à la rue",
|
||||
"回到刚才看的碗": "Retour au bol que tu regardais",
|
||||
"声音开关": "Bouton son",
|
||||
"声音": "Son",
|
||||
"排行榜": "Classement",
|
||||
"我的后台": "Mon tableau de bord",
|
||||
"站长": "Proprio ",
|
||||
"登录": "Connexion",
|
||||
"我的站": "Mon bol",
|
||||
"开通要饭站": "Ouvrir un bol",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Une petite pièce, brave âme",
|
||||
"🪙 一毛也是爱": "🪙 Chaque centime compte",
|
||||
"💸 投币就上榜": "💸 Un don et te voilà au classement",
|
||||
"📜 留一句话刻功德簿": "📜 Laisse un mot dans le Livre des Mérites",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Un tweet suffit pour ouvrir ton propre bol",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Guilde des Cyber-Mendiants : un bol pour chacun",
|
||||
"· 赛博丐帮,行行好": "· Guilde des Cyber-Mendiants · Une petite pièce",
|
||||
"作者": "Auteur",
|
||||
"收款由": "Paiements par",
|
||||
"驱动 · 字体": "· Police",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Son : coupé",
|
||||
"声音:开(点击静音)": "Son : activé (clic pour couper)",
|
||||
"点一下开始播放": "Touche pour lancer la musique",
|
||||
"已复制": "Copié",
|
||||
"功德 +": "Mérite +",
|
||||
"你的名号和留言已刻上功德簿": "Ton nom et ton mot sont gravés dans le Livre des Mérites",
|
||||
"看看功德簿": "Voir le Livre des Mérites",
|
||||
"分享卡片": "Carte à partager",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Envoyé. Tu seras au classement dès que le proprio confirme. Cette page se met à jour toute seule.",
|
||||
"这笔施舍已": "Ce don a ",
|
||||
"过期": "expiré",
|
||||
"下单失败": "échoué à la création",
|
||||
"被站长拒绝": "été refusé par le proprio",
|
||||
"关闭": "été clôturé",
|
||||
",请回到页面重新投币。": ". Retourne à la page pour redonner.",
|
||||
"没成功,再试试": "Raté, réessaie",
|
||||
"网络开小差了": "Le réseau fait des siennes",
|
||||
"分页": "Pagination",
|
||||
"‹ 上一页": "‹ Précédent",
|
||||
"下一页 ›": "Suivant ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Connexion proprio ·",
|
||||
"🔑 站长登录": "🔑 Connexion proprio",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Connecte-toi avec ton nom d'utilisateur X et le mot de passe choisi à l'ouverture du bol. Proprio du site principal : laisse le nom vide.",
|
||||
"X 用户名": "Nom d'utilisateur X",
|
||||
"例如 qianyuwing(主站留空)": "ex. qianyuwing (vide pour le site principal)",
|
||||
"口令": "Mot de passe",
|
||||
"忘了口令?": "Mot de passe oublié ?",
|
||||
"用 X 发推找回": "Récupérer avec un tweet",
|
||||
"。还没有要饭站?": ". Pas encore de bol ?",
|
||||
"用 X 开一个": "Ouvre-en un avec X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Tableau de bord ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 C'est ouvert ! Ton bol",
|
||||
"已上线": "est en ligne",
|
||||
"(待主站站长收录后进榜)": " (il entrera au classement une fois listé par le proprio du site principal)",
|
||||
"下一步:": "Étape suivante : ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "renseigne ton UID Binance dans « Paiement » ci-dessous (dix secondes), sinon personne ne peut te payer.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Reviens par %s (nom X %s + ton mot de passe). Oublié ? Un autre tweet et c'est récupéré.",
|
||||
"后台": "le tableau de bord",
|
||||
"· 碗里": "· Dans le bol",
|
||||
"位施主 ·": "donateurs ·",
|
||||
"次 · 钢镚": "dons · jetons",
|
||||
"待收录": "non listé",
|
||||
"🔑 改口令": "🔑 Mot de passe",
|
||||
"退出": "Déconnexion",
|
||||
"⏳ 待确认": "⏳ En attente",
|
||||
"✏️ 资料": "✏️ Profil",
|
||||
"💰 收款方式": "💰 Paiement",
|
||||
"📜 施舍记录": "📜 Dons",
|
||||
"🏚 所有站点": "🏚 Tous les bols",
|
||||
"🧹 留言巡查": "🧹 Messages",
|
||||
"⏳ 待确认的施舍": "⏳ Dons en attente de confirmation",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Vérifie le virement dans l'app Binance (montant et code en mémo), puis confirme pour les mettre au classement.",
|
||||
"备注码": "Mémo",
|
||||
"· 币安订单": "· Commande Binance",
|
||||
"✓ 确认到账": "✓ Reçu",
|
||||
"✗ 没收到": "✗ Pas reçu",
|
||||
"站点标题": "Nom du bol",
|
||||
"(来自 X @": "(depuis X @",
|
||||
",锁定)": ", verrouillé)",
|
||||
"头像 emoji": "Emoji d'avatar",
|
||||
"一句话口号": "Slogan en une ligne",
|
||||
"绑定 X": "Lier X",
|
||||
"(主页链接或 @名字,留空不显示)": "(lien du profil ou @nom ; vide pour masquer)",
|
||||
"https://x.com/你的名字": "https://x.com/tonnom",
|
||||
"保存资料": "Enregistrer le profil",
|
||||
"config.env 配置": "défini dans config.env",
|
||||
"已绑币安 Key · 自动确认": "Key Binance liée · confirmation auto",
|
||||
"直接转账 · UID": "Virement direct · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Pas encore de bol — touche pour configurer",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "Le mode de paiement du site principal se règle dans config.env sur le serveur. Actuel : ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "confirmation auto via la passerelle BinancePayTool (compte par défaut)",
|
||||
"直接转账": "virement direct",
|
||||
"校验网关默认账号": "Vérifier le compte par défaut de la passerelle",
|
||||
"✅ 已绑定币安账号(UID": "✅ Compte Binance lié (UID",
|
||||
"),施主付款后": "). Les dons sont ",
|
||||
"自动确认上榜": "confirmés automatiquement",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " Le panneau de paiement affiche ton QR code / ouverture en un clic.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Ajoute un lien de réception pour que les donateurs puissent scanner ou ouvrir l'app en un clic.",
|
||||
"重新校验 Key": "Revérifier la Key",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Délier passe en virement direct (tu confirmes chaque paiement à la main). Continuer ?",
|
||||
"解绑": "Délier",
|
||||
"换一个 Key / 更新收款链接": "Changer de Key / mettre à jour le lien",
|
||||
"当前是": "Mode actuel : ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Les donateurs virent sur ton UID dans l'app Binance, touchent « J'ai donné », et tu confirmes ici.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Pas encore de bol : entre ton UID Binance et tu peux recevoir de l'argent. Dix secondes.",
|
||||
"方式一:填币安 UID(最简单)": "Option 1 : ton UID Binance (le plus simple)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "App Binance → touche ton avatar en haut à gauche ; le numéro en dessous est ton",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (aussi ton Pay ID). Les donateurs le voient en donnant et l'utilisent dans l'app Binance « Pay → Transfert », sans frais.",
|
||||
"币安 UID": "UID Binance",
|
||||
"例如 12345678": "ex. 12345678",
|
||||
"收款链接": "Lien de réception",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(facultatif. Avec, les donateurs peuvent scanner ou ouvrir l'app Binance en un clic ; sans, ils virent par UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Pour l'obtenir : sur la page de réception Binance, touche « Enregistrer l'image », lis le QR avec n'importe quel scanner, et colle le lien ici.",
|
||||
"保存": "Enregistrer",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Option 2 : lier une API Key Binance en lecture seule (confirmation auto)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Les dons sont confirmés automatiquement. La Key n'a besoin que de « Activer la lecture » et ne peut pas déplacer de fonds ; ce site ne la garde jamais, la passerelle de paiement la stocke chiffrée.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "au total · masque les messages spam ou bloque la personne (données conservées) · réponds",
|
||||
"已屏蔽此人": "Personne bloquée",
|
||||
"(已屏蔽:": "(masqué : ",
|
||||
"🥣 站长:": "🥣 Proprio : ",
|
||||
"恢复留言": "Réafficher le message",
|
||||
"屏蔽留言": "Masquer le message",
|
||||
"恢复此人": "Débloquer la personne",
|
||||
"屏蔽此人": "Bloquer la personne",
|
||||
"回一句…": "Répondre…",
|
||||
"回复": "Répondre",
|
||||
"还没有施舍记录": "Aucun don pour l'instant",
|
||||
"🔑 修改口令": "🔑 Changer le mot de passe",
|
||||
"新口令(至少 6 位)": "Nouveau mot de passe (6 caractères min.)",
|
||||
"再输一遍": "Répète-le",
|
||||
"改完后其它设备上的登录会失效。": "Les autres appareils seront déconnectés.",
|
||||
"确认修改": "Changer le mot de passe",
|
||||
"🏚 所有要饭站": "🏚 Tous les bols",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "au total · bannis les tricheurs · réinitialise le mot de passe d'un proprio",
|
||||
"已除名": "banni",
|
||||
"未收录": "non listé",
|
||||
"已绑 Key 自动确认": "Key liée, confirmation auto",
|
||||
"位施主 · 钢镚": "donateurs · jetons",
|
||||
"开张": "ouvert",
|
||||
"取消收录": "Délister",
|
||||
"收录上榜": "Lister",
|
||||
"除名": "Bannir",
|
||||
"恢复": "Rétablir",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Réinitialiser le mot de passe de /%s ? Le nouveau ne s'affiche qu'une fois.",
|
||||
"重置口令": "Réinitialiser le mot de passe",
|
||||
"还没有子站": "Aucun bol pour l'instant",
|
||||
"🧹 全站最新留言": "🧹 Derniers messages sur tout le site",
|
||||
"条 · 跨站点巡查广告": "au total · patrouille anti-spam sur tous les bols",
|
||||
"暂无留言": "Aucun message pour l'instant",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "App Binance → Compte → Gestion API → Créer une API : ",
|
||||
"只勾「允许读取」": "coche uniquement « Activer la lecture »",
|
||||
",其它权限都不要,": ", rien d'autre, ",
|
||||
"不用设 IP 白名单": "pas besoin de liste blanche d'IP",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (une Key en lecture seule ne peut pas déplacer de fonds). Elle sert uniquement à lire tes virements entrants, stockée chiffrée, jamais affichée.",
|
||||
"(App 头像页可见)": "(visible sur ta page de profil dans l'app)",
|
||||
"(选填,填了施主能扫码)": "(facultatif ; permet aux donateurs de scanner un QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Pour obtenir le lien : sur la page de réception Binance, touche « Enregistrer l'image » et lis le QR avec n'importe quel scanner.",
|
||||
"绑定并校验": "Lier et vérifier",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Récupérer le mot de passe avec X",
|
||||
"🔑 用 X 找回口令": "🔑 Récupérer le mot de passe avec X",
|
||||
"🏚 开通我的要饭站": "🏚 Ouvrir mon bol",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Poste un tweet avec le code de vérification pour prouver que tu es le proprio, puis choisis un nouveau mot de passe.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Pas besoin de donner d'abord. Un tweet depuis ton compte X ouvre ton bol : nommé d'après ton pseudo X, avec ton avatar X, un bol par compte. Le tweet met aussi ton bol dans la rue.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Tu es dans un navigateur intégré à une app. Le tweet en un clic peut ne pas ouvrir X, et tu risques de perdre ta place en revenant.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Touche « ⋯ » en haut à droite et choisis « Ouvrir dans le navigateur »",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (ou copie le lien dans Safari / Chrome) avant de continuer.",
|
||||
"复制本页链接": "Copier le lien de cette page",
|
||||
"发一条推文,带上验证码": "Poste un tweet contenant le code",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Texte du tweet (modifie-le librement, garde juste le code)",
|
||||
"换一条": "Un autre",
|
||||
"🐦 一键去 X 发推": "🐦 Poster sur X",
|
||||
"复制文案": "Copier le texte",
|
||||
"没拉起 X App?点这里用网页版发 →": "L'app X ne s'est pas ouverte ? Poste via le web →",
|
||||
"验证码": "Code",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": " : majuscules ou minuscules, peu importe, valable 24 h. Le texte contient le lien de ton bol, le tweet fait aussi de la pub.",
|
||||
"把推文链接贴回来": "Colle le lien du tweet ici",
|
||||
"推文链接": "Lien du tweet",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/tonnom/status/1234567890",
|
||||
"验证": "Vérifier",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Une fois posté, touche le bouton partager du tweet → Copier le lien.",
|
||||
"还没开过站?": "Pas encore de bol ? ",
|
||||
"去开一个": "Ouvre-en un",
|
||||
"已经开过站?": "Déjà un bol ? ",
|
||||
"站长登录": "Connexion proprio",
|
||||
"🔑 设置新口令": "🔑 Nouveau mot de passe",
|
||||
"保存并登录": "Enregistrer et se connecter",
|
||||
"✅ X 验证通过": "✅ X vérifié",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· nom et avatar viennent de X (l'avatar se synchronise régulièrement)",
|
||||
"站点地址": "Adresse du bol",
|
||||
"(就是你的 X 用户名,不用填)": "(ton nom d'utilisateur X ; rien à remplir)",
|
||||
"行行好,赏口饭吃 🙏": "Une petite pièce, brave âme 🙏",
|
||||
"登录口令": "Mot de passe de connexion",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Connecte-toi ensuite avec nom X + mot de passe ; oublié ? Un autre tweet et c'est récupéré.",
|
||||
"口令(至少 6 位)": "Mot de passe (6 caractères min.)",
|
||||
"开张 🏚": "C'est ouvert 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Une fois ouvert, lie une Key Binance ou entre ton UID dans le tableau de bord pour recevoir de l'argent. Tu es responsable de ton contenu ; les bols spam sont bannis par la guilde.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Donner à %s",
|
||||
"先回去看看": "Retourner voir",
|
||||
"给 %s 投币": "Don à %s",
|
||||
"金额要": "Le montant doit être ",
|
||||
"一分不差": "exact",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": " : la passerelle reconnaît le paiement grâce à cette terminaison unique et confirme en quelques secondes",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Vire directement au proprio avec Binance Pay, puis touche « J'ai donné » ci-dessous",
|
||||
"打开币安 App 转账": "Ouvrir l'app Binance pour payer",
|
||||
"唤起后手动输入金额": "Dans l'app, entre le montant",
|
||||
",备注填": ", mémo",
|
||||
"用另一台手机扫码": "Scanner avec un autre téléphone",
|
||||
"收款二维码": "QR code de paiement",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "App Binance → Scanner → entre le montant",
|
||||
"或手动转账": "Ou virer manuellement",
|
||||
"转账信息": "Détails du virement",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "App Binance → « Pay » → « Transfert » → destinataire : l'UID ci-dessous → montant",
|
||||
"→ 备注填": "→ mémo",
|
||||
"→ 转完回来点「我已施舍」": "→ reviens et touche « J'ai donné »",
|
||||
"收款方": "Destinataire",
|
||||
"复制": "Copier",
|
||||
"金额": "Montant",
|
||||
"备注": "Mémo",
|
||||
"等待到账…转完自动确认,本页会自动更新": "En attente du paiement… confirmation automatique une fois envoyé ; cette page se met à jour toute seule",
|
||||
"付了但一直没确认?": "Payé mais toujours pas confirmé ?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "N° de commande Binance (18 chiffres, dans les détails du virement)",
|
||||
"我付过了,帮我核对": "J'ai payé, vérifiez",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "N° de commande Binance (facultatif, 18 chiffres ; accélère la confirmation)",
|
||||
"我已施舍,等站长确认": "J'ai donné, en attente du proprio",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Touche « J'ai donné » sur l'appareil qui a lancé ce don.",
|
||||
"打不开?": "Ça ne s'ouvre pas ? ",
|
||||
"用网关收银页支付": "Payer via la page de la passerelle",
|
||||
"施舍进行中": "Don en cours",
|
||||
"🙏 谢谢施主": "🙏 Merci, généreux donateur",
|
||||
"你在 %s 的施主榜排第 %d 位": "Au classement des donateurs de %s, tu es n° %d",
|
||||
"回到 %s 的碗": "Retour au bol de %s",
|
||||
"复制链接分享": "Copier le lien pour partager",
|
||||
"🖼 分享卡片": "🖼 Carte à partager",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Génère une carte pixel à partager sur X ou avec tes amis, et fais de la pub au mendiant.",
|
||||
"生成分享卡": "Créer la carte",
|
||||
"分享卡": "Carte à partager",
|
||||
"长按图片保存,或": "Appui long pour enregistrer, ou ",
|
||||
"下载": "télécharger",
|
||||
"🏚 你也可以要饭": "🏚 Toi aussi, tu peux mendier",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Un tweet depuis ton compte X ouvre ton propre bol ; l'argent va directement sur ton compte Binance.",
|
||||
"站长没有确认这笔施舍": "Le proprio n'a pas confirmé ce don",
|
||||
"这笔施舍已过期": "Ce don a expiré",
|
||||
"如果你确实转了,请联系站长核对。": "Si tu as vraiment viré, contacte le proprio pour vérifier.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Rien n'a été débité ; recommence si tu veux donner.",
|
||||
"再来一次": "Réessayer",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Classement ·",
|
||||
"🏆 施主榜": "🏆 Donateurs",
|
||||
"🥣 乞丐榜": "🥣 Mendiants",
|
||||
"🪙 人气榜": "🪙 Popularité",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · tous les bols réunis ·",
|
||||
"位施主": "donateurs",
|
||||
"总榜": "Général",
|
||||
"本周": "Cette semaine",
|
||||
"要到最多的要饭站 · 共": "Les bols qui ont récolté le plus ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Le plus de jetons reçus (gratuits) ·",
|
||||
"← 回到刚才看的碗": "← Retour au bol que tu regardais",
|
||||
"施主自己填的 X,未经验证": "Compte X saisi par le donateur, non vérifié",
|
||||
"次 · 施舍过": "dons · a donné à",
|
||||
"个乞丐": "mendiants",
|
||||
"榜上无人": "Personne ici pour l'instant",
|
||||
"就是我": "moi",
|
||||
"还没有人上榜": "Personne au classement pour l'instant",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "mendie ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ Ce bol n'est pas encore listé par la guilde, donc pas au classement.",
|
||||
"主站站长审核后会收录。": "Le proprio du site principal le listera après vérification.",
|
||||
"· 榜 #": "· Rang #",
|
||||
"升%s要 %s": "%s à %s EXP",
|
||||
"满级": "Niveau max",
|
||||
"饱食度": "Satiété",
|
||||
"今天还没吃饭": "Rien à manger aujourd'hui",
|
||||
"今天有人投币了": "Quelqu'un a donné aujourd'hui",
|
||||
"今天丢过了": "Déjà lancé aujourd'hui",
|
||||
"丢个钢镚(免费)": "Lancer un jeton (gratuit)",
|
||||
"💸 投币施舍": "💸 Donner",
|
||||
"还没摆碗,暂不能投币": "Pas encore de bol, impossible de donner",
|
||||
"去配置": "Configurer",
|
||||
"钢镚": "Jetons",
|
||||
"· 今日": "· aujourd'hui",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 jeton =",
|
||||
"碗里已有": "Dans le bol",
|
||||
"施主": "Donateurs",
|
||||
"人": "",
|
||||
"今日": "Aujourd'hui",
|
||||
"🕹️ 投币施舍": "🕹️ Insérer une pièce",
|
||||
"玩家名(上榜用,可留空)": "Nom de joueur (pour le classement, facultatif)",
|
||||
"匿名施主": "Anonyme",
|
||||
"你的 X(可选,显示头像)": "Ton X (facultatif, affiche ton avatar)",
|
||||
"投多少": "Montant en",
|
||||
"✏️ 自定义": "✏️ Libre",
|
||||
"输入金额,最多两位小数": "Montant, 2 décimales max.",
|
||||
"对乞丐喊话": "Un mot pour le mendiant",
|
||||
"例如:别买烟了,去吃饭": "ex. Laisse tomber les clopes, va manger",
|
||||
"投币 💸": "Donner 💸",
|
||||
"投币": "Donner",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Scanne avec l'app Binance ou ouvre-la en un clic ; une fois reçu, c'est gravé automatiquement dans le Livre des Mérites.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Vire directement au proprio via Binance Pay ; il confirme et te voilà au classement.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Min %s, max %s. Pas de liens ni de contacts dans le message.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Ce mendiant n'a pas encore posé son bol (pas de mode de paiement), il ne peut pas recevoir d'argent.",
|
||||
"去后台配置 →": "Configurer dans le tableau de bord →",
|
||||
"🏚 想自己要饭?": "🏚 Envie de mendier aussi ?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Un tweet depuis ton compte X ouvre ton propre bol : ta propre adresse, ton Livre des Mérites et ton classement de donateurs, l'argent directement sur ton compte Binance.",
|
||||
"用 X 开通我的要饭站 →": "Ouvrir mon bol avec X →",
|
||||
"人气榜": "Popularité",
|
||||
"功德簿": "Mérites",
|
||||
"施主榜": "Donateurs",
|
||||
"乞丐榜": "Mendiants",
|
||||
"已屏蔽的施主": "Donateur bloqué",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "Le Livre des Mérites est vide. La première pièce sera gravée ici.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · meilleurs donateurs de",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 premier donateur 💎 plus gros don 🔥 habitué",
|
||||
"丐帮排名 · 要到最多的要饭站": "Classement de la guilde · les bols qui ont récolté le plus",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Popularité · les bols avec le plus de jetons (les jetons sont gratuits)",
|
||||
"次": "dons",
|
||||
"榜上无人,第一个投币的就是首席施主": "Personne ici pour l'instant. Le premier donateur devient donateur en chef.",
|
||||
"本站": "ce bol",
|
||||
"叮!钢镚 +1": "Ding ! Jeton +1",
|
||||
"没丢进去": "Raté le bol",
|
||||
"网络开小差了,再试一次": "Le réseau fait des siennes, réessaie",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Montant invalide (2 décimales max.)",
|
||||
"最少施舍 %s %s": "Don minimum : %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "Don maximum : %s %s. Si tu as vraiment autant, fais-le en plusieurs fois",
|
||||
"支付网关开小差了:%s": "La passerelle de paiement fait des siennes : %s",
|
||||
"手速太快了": "Trop rapide",
|
||||
"这个乞丐不在": "Ce mendiant n'est pas là",
|
||||
"请先打开要饭页再丢": "Ouvre d'abord la page du bol",
|
||||
"服务器开小差了": "Le serveur fait des siennes",
|
||||
"手速太快了,歇一会儿": "Trop rapide, fais une pause",
|
||||
"已提交,等站长确认": "Envoyé, en attente de confirmation du proprio",
|
||||
"网关返回 %s": "La passerelle a répondu %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "J'ai oublié le mot de passe de mon bol sur %s, je tweete pour prouver que c'est bien moi 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "J'ai posé mon bol sur %s 🥣 Une petite pièce, braves gens~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "J'ai rejoint la Guilde des Cyber-Mendiants 🧎 Chaque centime compte, un jeton gratuit aussi 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "J'ai lâché le boulot, je mendie maintenant. Le bol est là, soyez généreux 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "La guilde des mendiants recrute et j'ouvre le bal 🥣 Un don et tu entres au Livre des Mérites, sinon lance un jeton gratuit %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Ce tweet ne contient pas le code %s. Vérifie que tu as posté le bon",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s a déjà un bol : %s. Mot de passe oublié ? Réinitialise-le avec X sur la page de connexion.",
|
||||
"@%s 已经开过站了": "@%s a déjà un bol",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "L'adresse %s est prise (@%s a peut-être déjà un bol ; récupère le mot de passe avec X sur la page de connexion)",
|
||||
"@%s 还没开过要饭站": "@%s n'a pas encore de bol",
|
||||
"解绑币安 Key 失败:%s": "Impossible de délier la Key Binance : %s",
|
||||
"绑定失败:%s": "Liaison échouée : %s",
|
||||
"解绑失败:%s": "Déliaison échouée : %s",
|
||||
"校验失败:%s": "Vérification échouée : %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Mot de passe de /%s réinitialisé : %s (affiché une seule fois, transmets-le au proprio)",
|
||||
"本站未配置支付网关": "Aucune passerelle de paiement configurée",
|
||||
"网关连不上,请稍后再试": "Passerelle injoignable, réessaie plus tard",
|
||||
"方法不允许": "Méthode non autorisée",
|
||||
"主站不存在": "Site principal introuvable",
|
||||
"页面不存在": "Page introuvable",
|
||||
"赛博丐帮没有这条路。": "Cette route n'existe pas dans la Guilde des Cyber-Mendiants.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Soit pas encore ouvert, soit banni par la guilde.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Ce mendiant n'a pas encore posé son bol (pas de mode de paiement), il ne peut pas encore recevoir d'argent",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "Le nom d'utilisateur X ne peut contenir que des lettres, chiffres et tirets bas (avec ou sans @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Pas de liens ni de contacts dans ton nom ou ton message. Les mendiants ne prennent pas de pub",
|
||||
"没有这笔施舍": "Don introuvable",
|
||||
"站点不存在": "Bol introuvable",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Touche « J'ai donné » sur l'appareil qui a lancé ce don",
|
||||
"币安订单编号是 18 位数字,不填也行": "Le n° de commande Binance fait 18 chiffres (facultatif)",
|
||||
"核对失败": "Vérification échouée",
|
||||
"这笔施舍不是网关模式": "Ce don ne passe pas par la passerelle",
|
||||
"试得太频繁了,一分钟后再试": "Trop de tentatives, réessaie dans une minute",
|
||||
"请在发起施舍的那台设备上回填": "Renseigne le n° de commande depuis l'appareil qui a lancé ce don",
|
||||
"币安订单编号是 18 位数字": "Le n° de commande Binance fait 18 chiffres",
|
||||
"本站未开放开站": "L'ouverture de bols est désactivée sur ce site",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "Le code a expiré (ou a été créé dans un autre navigateur). Génère-en un nouveau",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Lien de tweet invalide. Il doit ressembler à https://x.com/tonnom/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Ce tweet est plus ancien que le code. Utilise un tweet posté après la génération du code",
|
||||
"验证已失效,请重新验证": "Vérification expirée, recommence",
|
||||
"口号和介绍里别放链接、联系方式": "Pas de liens ni de contacts dans le slogan",
|
||||
"口令至少 6 位": "Le mot de passe doit faire au moins 6 caractères",
|
||||
"两次口令不一致": "Les mots de passe ne correspondent pas",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "Le mot de passe du site principal se change dans config.env sur le serveur, pas via X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Trop de réinitialisations pour ce compte X aujourd'hui, reviens demain",
|
||||
"口令至少 6 位,且两次一致": "Le mot de passe doit faire au moins 6 caractères et correspondre",
|
||||
"口令已重置,其它设备上的登录已失效": "Mot de passe réinitialisé. Les autres appareils ont été déconnectés",
|
||||
"X 用户名或口令不对": "Nom d'utilisateur X ou mot de passe incorrect",
|
||||
"请先登录": "Connecte-toi d'abord",
|
||||
"登录状态已失效,请重新登录。": "Ta session a expiré, reconnecte-toi.",
|
||||
"歇一会儿再来。": "Fais une pause et reviens.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Trop de mots de passe erronés pour ce bol. Fais une pause.",
|
||||
"站点标题不能为空": "Le nom du bol ne peut pas être vide",
|
||||
"资料里别放链接、联系方式": "Pas de liens ni de contacts dans ton profil",
|
||||
"资料已保存": "Profil enregistré",
|
||||
"主站的收款方式在服务器 config.env 里改": "Le mode de paiement du site principal se règle dans config.env sur le serveur",
|
||||
"填一下币安 UID,不然钱没处去": "Entre ton UID Binance, sinon l'argent n'a nulle part où aller",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Passé en virement direct : les donateurs signalent leur paiement et tu confirmes ici",
|
||||
"本站不支持绑定": "La liaison n'est pas disponible sur ce site",
|
||||
"API Key 和 Secret 都要填": "API Key et Secret sont tous deux requis",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "L'UID Binance ne contient que des chiffres (visible sur ta page de profil dans l'app)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Liée ! Binance a validé la Key ; les dons seront désormais confirmés automatiquement",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Déliée. Tu es en mode virement direct, vérifie que ton UID est bien renseigné",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Vérifié : la Key Binance fonctionne, les paiements seront confirmés automatiquement",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "Le mot de passe du site principal se change dans config.env (ADMIN_PASSWORD) sur le serveur",
|
||||
"口令已修改,其它设备上的登录已失效": "Mot de passe modifié. Les autres appareils ont été déconnectés",
|
||||
"这笔施舍当前不能确认/拒绝": "Ce don ne peut pas être confirmé ou refusé pour le moment",
|
||||
"只能回复自己站的施舍": "Tu ne peux répondre qu'aux dons de ton propre bol",
|
||||
"回复里别放链接、联系方式": "Pas de liens ni de contacts dans les réponses",
|
||||
"未知操作": "Action inconnue",
|
||||
"无权操作": "Non autorisé",
|
||||
"没有这个站": "Ce bol n'existe pas",
|
||||
"未配置支付网关": "Aucune passerelle de paiement configurée",
|
||||
"请求来源不对": "Origine de la requête incorrecte",
|
||||
"请从本站页面操作。": "Utilise les pages du site.",
|
||||
"页面渲染失败": "Échec du rendu de la page",
|
||||
"稍后再试。": "Réessaie plus tard.",
|
||||
"地址已被占用": "Adresse déjà prise",
|
||||
"这个 X 账号已经开过站了": "Ce compte X a déjà un bol",
|
||||
"连不上 X 接口: %w": "Impossible de joindre X : %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tweet introuvable (mauvais lien, ou tweet non public)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Impossible de lire le tweet (supprimé, ou compte protégé)",
|
||||
"头像地址不在允许的域名": "L'URL de l'avatar n'est pas sur un domaine autorisé",
|
||||
"头像下载失败": "Téléchargement de l'avatar échoué",
|
||||
"头像不是有效图片": "L'avatar n'est pas une image valide",
|
||||
"金额格式不对": "Montant invalide",
|
||||
"收款链接过长": "Lien de réception trop long",
|
||||
"收款链接须为 https 链接": "Le lien de réception doit être en https",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Le lien de réception doit être un domaine Binance (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "Le lien de profil X doit ressembler à https://x.com/tonnom",
|
||||
"核对成功,已到账": "Vérifié, paiement reçu",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Virement trouvé mais montant insuffisant ; enregistré au montant réel",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Virement introuvable : vérifie le n° de commande et le compte destinataire, puis réessaie une fois que Binance l'affiche",
|
||||
"这笔转账已经被别的订单用过了": "Ce virement a déjà été utilisé pour une autre commande",
|
||||
"币种不对": "Mauvaise devise",
|
||||
"这笔施舍当前状态不能回填": "L'état de ce don ne permet pas de renseigner un n° de commande",
|
||||
"这个网络今天丢得够多了": "Ce réseau a assez lancé de jetons aujourd'hui",
|
||||
"今天已经丢过了,明天再来": "Déjà lancé aujourd'hui, reviens demain",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "non payé",
|
||||
"待确认": "en attente",
|
||||
"已到账": "payé",
|
||||
"已过期": "expiré",
|
||||
"已关闭": "clôturé",
|
||||
"已拒绝": "refusé",
|
||||
"空碗未入帮": "Bol vide",
|
||||
"一袋弟子": "Disciple à 1 sac",
|
||||
"二袋弟子": "Disciple à 2 sacs",
|
||||
"三袋弟子": "Disciple à 3 sacs",
|
||||
"四袋弟子": "Disciple à 4 sacs",
|
||||
"五袋弟子": "Disciple à 5 sacs",
|
||||
"六袋弟子": "Disciple à 6 sacs",
|
||||
"七袋弟子": "Disciple à 7 sacs",
|
||||
"八袋弟子": "Disciple à 8 sacs",
|
||||
"九袋长老": "Ancien à 9 sacs",
|
||||
"帮主": "Maître de la guilde",
|
||||
"副帮主": "Vice-maître",
|
||||
"传功长老": "Ancien des enseignements",
|
||||
"执法长老": "Ancien de la loi",
|
||||
"掌棒龙头": "Gardien du bâton",
|
||||
"掌钵龙头": "Gardien du bol",
|
||||
"长老": "Ancien",
|
||||
"舵主": "Chef de branche",
|
||||
"弟子": "Disciple",
|
||||
"总舵": "Quartier général",
|
||||
"投了个硬币": "a lancé une pièce",
|
||||
"善心人": "âme charitable",
|
||||
"大善人": "grand bienfaiteur",
|
||||
"活菩萨": "saint vivant",
|
||||
"财神爷": "dieu de la fortune",
|
||||
"刚刚": "à l'instant",
|
||||
"%d 分钟前": "il y a %d min",
|
||||
"%d 小时前": "il y a %d h",
|
||||
"%d 天前": "il y a %d j",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 印尼语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["id"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Kasihanilah, beri sesuap nasi. Sedekah masuk Buku Amal; koin gratis pun tanda sayang.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Pengemis Cyber",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Kasihanilah, beri sesuap nasi. Sedekah lewat Binance Pay dan tinggalkan pesan di Buku Amal.",
|
||||
"#赛博丐帮": "#PengemisCyber",
|
||||
"(已屏蔽:%s)": "(disembunyikan: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Kembali ke jalanan",
|
||||
"回到刚才看的碗": "Kembali ke mangkuk tadi",
|
||||
"声音开关": "Tombol suara",
|
||||
"声音": "Suara",
|
||||
"排行榜": "Papan peringkat",
|
||||
"我的后台": "Dasbor",
|
||||
"站长": "Pemilik ",
|
||||
"登录": "Masuk",
|
||||
"我的站": "Mangkukku",
|
||||
"开通要饭站": "Buka mangkuk",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Kasihanilah, beri sesuap nasi",
|
||||
"🪙 一毛也是爱": "🪙 Seperak pun tanda sayang",
|
||||
"💸 投币就上榜": "💸 Sedekah langsung masuk papan",
|
||||
"📜 留一句话刻功德簿": "📜 Tinggalkan pesan di Buku Amal",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Satu tweet, mangkuk sendiri jadi",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Perguruan Pengemis Cyber: semua punya mangkuk",
|
||||
"· 赛博丐帮,行行好": "· Perguruan Pengemis Cyber · Kasihanilah",
|
||||
"作者": "Pembuat",
|
||||
"收款由": "Pembayaran oleh",
|
||||
"驱动 · 字体": "· Font",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Suara: mati",
|
||||
"声音:开(点击静音)": "Suara: nyala (klik untuk bisukan)",
|
||||
"点一下开始播放": "Ketuk untuk putar musik",
|
||||
"已复制": "Tersalin",
|
||||
"功德 +": "Amal +",
|
||||
"你的名号和留言已刻上功德簿": "Nama dan pesanmu sudah terukir di Buku Amal",
|
||||
"看看功德簿": "Lihat Buku Amal",
|
||||
"分享卡片": "Kartu bagikan",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Terkirim. Kamu masuk papan begitu pemilik mengonfirmasi. Halaman ini memperbarui diri otomatis.",
|
||||
"这笔施舍已": "Sedekah ini sudah ",
|
||||
"过期": "kedaluwarsa",
|
||||
"下单失败": "gagal dibuat",
|
||||
"被站长拒绝": "ditolak pemilik",
|
||||
"关闭": "ditutup",
|
||||
",请回到页面重新投币。": ". Silakan kembali dan sedekah lagi.",
|
||||
"没成功,再试试": "Belum berhasil, coba lagi",
|
||||
"网络开小差了": "Jaringan lagi ngadat",
|
||||
"分页": "Halaman",
|
||||
"‹ 上一页": "‹ Sebelumnya",
|
||||
"下一页 ›": "Berikutnya ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Masuk pemilik ·",
|
||||
"🔑 站长登录": "🔑 Masuk pemilik",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Masuk dengan username X + kata sandi yang kamu buat saat membuka mangkuk. Pemilik situs utama: kosongkan username.",
|
||||
"X 用户名": "Username X",
|
||||
"例如 qianyuwing(主站留空)": "mis. qianyuwing (kosongkan untuk situs utama)",
|
||||
"口令": "Kata sandi",
|
||||
"忘了口令?": "Lupa kata sandi?",
|
||||
"用 X 发推找回": "Pulihkan lewat tweet",
|
||||
"。还没有要饭站?": ". Belum punya mangkuk?",
|
||||
"用 X 开一个": "Buka satu dengan X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Dasbor ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 Selamat buka lapak! Mangkukmu",
|
||||
"已上线": "sudah tayang",
|
||||
"(待主站站长收录后进榜)": " (masuk papan setelah pemilik situs utama menyetujuinya)",
|
||||
"下一步:": "Berikutnya: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "isi UID Binance di bagian \"Pembayaran\" di bawah (sepuluh detik saja), kalau tidak, tak ada yang bisa mengirimimu uang.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Lain kali masuk lewat %s (username X %s + kata sandimu). Lupa? Pulihkan dengan tweet lagi.",
|
||||
"后台": "dasbor",
|
||||
"· 碗里": "· Isi mangkuk",
|
||||
"位施主 ·": "dermawan ·",
|
||||
"次 · 钢镚": "kali · koin",
|
||||
"待收录": "belum disetujui",
|
||||
"🔑 改口令": "🔑 Kata sandi",
|
||||
"退出": "Keluar",
|
||||
"⏳ 待确认": "⏳ Menunggu",
|
||||
"✏️ 资料": "✏️ Profil",
|
||||
"💰 收款方式": "💰 Pembayaran",
|
||||
"📜 施舍记录": "📜 Sedekah",
|
||||
"🏚 所有站点": "🏚 Semua mangkuk",
|
||||
"🧹 留言巡查": "🧹 Pesan",
|
||||
"⏳ 待确认的施舍": "⏳ Sedekah menunggu konfirmasi",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Cek transfer di aplikasi Binance (jumlah dan kode memo), lalu konfirmasi agar mereka masuk papan.",
|
||||
"备注码": "Kode memo",
|
||||
"· 币安订单": "· Order Binance",
|
||||
"✓ 确认到账": "✓ Diterima",
|
||||
"✗ 没收到": "✗ Belum diterima",
|
||||
"站点标题": "Nama mangkuk",
|
||||
"(来自 X @": "(dari X @",
|
||||
",锁定)": ", terkunci)",
|
||||
"头像 emoji": "Emoji avatar",
|
||||
"一句话口号": "Slogan satu baris",
|
||||
"绑定 X": "Tautkan X",
|
||||
"(主页链接或 @名字,留空不显示)": "(tautan profil atau @nama; kosongkan agar tidak tampil)",
|
||||
"https://x.com/你的名字": "https://x.com/namamu",
|
||||
"保存资料": "Simpan profil",
|
||||
"config.env 配置": "diatur di config.env",
|
||||
"已绑币安 Key · 自动确认": "Binance Key tertaut · konfirmasi otomatis",
|
||||
"直接转账 · UID": "Transfer langsung · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Belum ada mangkuk — ketuk untuk atur",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "Metode pembayaran situs utama diatur di config.env pada server. Saat ini: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "Gateway BinancePayTool konfirmasi otomatis (akun default)",
|
||||
"直接转账": "transfer langsung",
|
||||
"校验网关默认账号": "Verifikasi akun default gateway",
|
||||
"✅ 已绑定币安账号(UID": "✅ Akun Binance tertaut (UID",
|
||||
"),施主付款后": "). Sedekah akan ",
|
||||
"自动确认上榜": "dikonfirmasi otomatis dan masuk papan",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " Panel pembayaran menampilkan kode QR-mu / buka aplikasi sekali ketuk.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Tambahkan tautan penerimaan agar dermawan bisa pindai QR / buka aplikasi sekali ketuk.",
|
||||
"重新校验 Key": "Verifikasi ulang Key",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Melepas tautan akan beralih ke transfer langsung (kamu konfirmasi tiap pembayaran secara manual). Lanjut?",
|
||||
"解绑": "Lepas tautan",
|
||||
"换一个 Key / 更新收款链接": "Ganti Key / perbarui tautan penerimaan",
|
||||
"当前是": "Mode saat ini: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Dermawan transfer ke UID-mu di aplikasi Binance, ketuk \"Sudah sedekah\", lalu kamu konfirmasi di sini agar mereka masuk papan.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Belum ada mangkuk: isi UID Binance dan kamu bisa terima uang. Sepuluh detik saja.",
|
||||
"方式一:填币安 UID(最简单)": "Cara 1: isi UID Binance (paling gampang)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Aplikasi Binance → ketuk avatar di kiri atas, deretan angka di bawah avatar itulah",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (juga Pay ID-mu). Dermawan melihatnya saat sedekah, cukup masukkan di aplikasi Binance \"Pay → Transfer\" dan uang terkirim, tanpa biaya.",
|
||||
"币安 UID": "UID Binance",
|
||||
"例如 12345678": "mis. 12345678",
|
||||
"收款链接": "Tautan penerimaan",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(opsional. Dengan ini dermawan bisa pindai QR / buka aplikasi Binance sekali ketuk; tanpa ini tetap bisa transfer lewat UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Cara dapat: di halaman terima uang aplikasi Binance ketuk \"Simpan gambar\", baca QR-nya dengan aplikasi pemindai apa saja, lalu tempel tautannya di sini.",
|
||||
"保存": "Simpan",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Cara 2: tautkan API Key Binance baca-saja (konfirmasi otomatis)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Sedekah dikonfirmasi otomatis, kamu tak perlu cek manual. Key cukup izin \"Enable Reading\" dan tak bisa memindahkan dana; situs ini tak menyimpan Key, hanya gateway pembayaran yang menyimpannya terenkripsi.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "total · pesan iklan bisa disembunyikan atau orangnya diblokir (catatan tetap ada) · bisa dibalas",
|
||||
"已屏蔽此人": "Pengguna diblokir",
|
||||
"(已屏蔽:": "(disembunyikan: ",
|
||||
"🥣 站长:": "🥣 Pemilik: ",
|
||||
"恢复留言": "Tampilkan pesan",
|
||||
"屏蔽留言": "Sembunyikan pesan",
|
||||
"恢复此人": "Buka blokir",
|
||||
"屏蔽此人": "Blokir orang ini",
|
||||
"回一句…": "Balas…",
|
||||
"回复": "Balas",
|
||||
"还没有施舍记录": "Belum ada sedekah",
|
||||
"🔑 修改口令": "🔑 Ganti kata sandi",
|
||||
"新口令(至少 6 位)": "Kata sandi baru (min. 6 karakter)",
|
||||
"再输一遍": "Ulangi lagi",
|
||||
"改完后其它设备上的登录会失效。": "Perangkat lain akan otomatis keluar.",
|
||||
"确认修改": "Ganti kata sandi",
|
||||
"🏚 所有要饭站": "🏚 Semua mangkuk",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "total · pelanggar bisa diusir · bisa reset kata sandi pemilik",
|
||||
"已除名": "diusir",
|
||||
"未收录": "belum disetujui",
|
||||
"已绑 Key 自动确认": "Key tertaut, konfirmasi otomatis",
|
||||
"位施主 · 钢镚": "dermawan · koin",
|
||||
"开张": "dibuka",
|
||||
"取消收录": "Cabut dari papan",
|
||||
"收录上榜": "Masukkan ke papan",
|
||||
"除名": "Usir",
|
||||
"恢复": "Pulihkan",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Reset kata sandi /%s? Kata sandi baru hanya ditampilkan sekali.",
|
||||
"重置口令": "Reset kata sandi",
|
||||
"还没有子站": "Belum ada mangkuk",
|
||||
"🧹 全站最新留言": "🧹 Pesan terbaru seluruh situs",
|
||||
"条 · 跨站点巡查广告": "total · patroli iklan lintas mangkuk",
|
||||
"暂无留言": "Belum ada pesan",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Aplikasi Binance → Akun → Manajemen API → Buat API: ",
|
||||
"只勾「允许读取」": "centang hanya \"Enable Reading\"",
|
||||
",其它权限都不要,": ", jangan yang lain, ",
|
||||
"不用设 IP 白名单": "tak perlu whitelist IP",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (Key baca-saja tak bisa memindahkan dana). Key hanya dipakai membaca riwayat uang masukmu, disimpan terenkripsi di server, tak pernah ditampilkan.",
|
||||
"(App 头像页可见)": "(terlihat di halaman profil aplikasi)",
|
||||
"(选填,填了施主能扫码)": "(opsional; dermawan bisa pindai QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Cara dapat tautan penerimaan: di halaman terima uang aplikasi Binance ketuk \"Simpan gambar\" lalu baca QR-nya dengan aplikasi pemindai apa saja.",
|
||||
"绑定并校验": "Tautkan dan verifikasi",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Pulihkan kata sandi dengan X",
|
||||
"🔑 用 X 找回口令": "🔑 Pulihkan kata sandi dengan X",
|
||||
"🏚 开通我的要饭站": "🏚 Buka mangkukku",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Posting tweet berisi kode verifikasi untuk membuktikan kamu pemiliknya, lalu buat kata sandi baru.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Tak perlu sedekah dulu. Satu tweet dari akun X-mu langsung membuka mangkuk: namanya dari nama tampilan X, avatarnya dari X, satu akun X satu mangkuk. Tweet itu sekalian menaruh mangkukmu di jalanan.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Kamu sedang di browser dalam aplikasi. Tweet sekali ketuk mungkin tak membuka X, dan saat kembali progresmu bisa hilang.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Ketuk \"⋯\" di kanan atas lalu pilih \"Buka di browser\"",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (atau salin tautannya ke Safari / Chrome) sebelum lanjut.",
|
||||
"复制本页链接": "Salin tautan halaman ini",
|
||||
"发一条推文,带上验证码": "Posting tweet yang memuat kodenya",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Isi tweet (bebas diubah, asal kodenya tetap ada)",
|
||||
"换一条": "Ganti kalimat",
|
||||
"🐦 一键去 X 发推": "🐦 Posting di X",
|
||||
"复制文案": "Salin teks",
|
||||
"没拉起 X App?点这里用网页版发 →": "Aplikasi X tak terbuka? Posting lewat web →",
|
||||
"验证码": "Kode",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "tidak peka huruf besar-kecil, berlaku 24 jam. Teksnya sudah memuat tautan mangkukmu, jadi tweet-nya sekalian promosi.",
|
||||
"把推文链接贴回来": "Tempel tautan tweet-nya di sini",
|
||||
"推文链接": "Tautan tweet",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/namamu/status/1234567890",
|
||||
"验证": "Verifikasi",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Setelah posting, ketuk tombol bagikan di tweet → Salin tautan.",
|
||||
"还没开过站?": "Belum punya mangkuk? ",
|
||||
"去开一个": "Buka satu",
|
||||
"已经开过站?": "Sudah punya mangkuk? ",
|
||||
"站长登录": "Masuk pemilik",
|
||||
"🔑 设置新口令": "🔑 Buat kata sandi baru",
|
||||
"保存并登录": "Simpan dan masuk",
|
||||
"✅ X 验证通过": "✅ X terverifikasi",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· nama dan avatar diambil dari X (avatar disinkronkan berkala)",
|
||||
"站点地址": "Alamat mangkuk",
|
||||
"(就是你的 X 用户名,不用填)": "(yaitu username X-mu, tak perlu diisi)",
|
||||
"行行好,赏口饭吃 🙏": "Kasihanilah, beri sesuap nasi 🙏",
|
||||
"登录口令": "Kata sandi masuk",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Nanti masuk dengan username X + kata sandi; lupa? Pulihkan dengan tweet lagi.",
|
||||
"口令(至少 6 位)": "Kata sandi (min. 6 karakter)",
|
||||
"开张 🏚": "Buka lapak 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Setelah buka, tautkan Binance Key atau isi UID di dasbor untuk terima uang. Isi situs tanggung jawabmu sendiri; mangkuk iklan diusir oleh perguruan.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Sedekah untuk %s",
|
||||
"先回去看看": "Kembali dulu",
|
||||
"给 %s 投币": "Sedekah untuk %s",
|
||||
"金额要": "Jumlahnya harus ",
|
||||
"一分不差": "persis",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": gateway mencocokkan lewat angka ekor unik ini, beberapa detik setelah transfer langsung terkonfirmasi",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Transfer langsung ke pemilik lewat Binance Pay, lalu ketuk \"Sudah sedekah\" di bawah",
|
||||
"打开币安 App 转账": "Buka aplikasi Binance untuk transfer",
|
||||
"唤起后手动输入金额": "Di aplikasi, masukkan jumlahnya",
|
||||
",备注填": ", memo",
|
||||
"用另一台手机扫码": "Pindai dengan ponsel lain",
|
||||
"收款二维码": "Kode QR pembayaran",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Aplikasi Binance → Pindai → masukkan jumlah",
|
||||
"或手动转账": "Atau transfer manual",
|
||||
"转账信息": "Detail transfer",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Aplikasi Binance → \"Pay\" → \"Transfer\" → penerima: UID di bawah → jumlah",
|
||||
"→ 备注填": "→ memo",
|
||||
"→ 转完回来点「我已施舍」": "→ setelah transfer kembali dan ketuk \"Sudah sedekah\"",
|
||||
"收款方": "Penerima",
|
||||
"复制": "Salin",
|
||||
"金额": "Jumlah",
|
||||
"备注": "Memo",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Menunggu pembayaran… terkonfirmasi otomatis setelah terkirim; halaman ini memperbarui diri",
|
||||
"付了但一直没确认?": "Sudah bayar tapi belum terkonfirmasi?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "ID order Binance (18 digit, ada di detail transfer)",
|
||||
"我付过了,帮我核对": "Sudah bayar, tolong cek",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "ID order Binance (opsional, 18 digit; mempercepat konfirmasi pemilik)",
|
||||
"我已施舍,等站长确认": "Sudah sedekah, menunggu pemilik",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Ketuk \"Sudah sedekah\" di perangkat yang memulai sedekah ini.",
|
||||
"打不开?": "Tak bisa dibuka? ",
|
||||
"用网关收银页支付": "Bayar lewat halaman kasir gateway",
|
||||
"施舍进行中": "Sedekah sedang berjalan",
|
||||
"🙏 谢谢施主": "🙏 Terima kasih, dermawan",
|
||||
"你在 %s 的施主榜排第 %d 位": "Di papan dermawan %s kamu peringkat #%d",
|
||||
"回到 %s 的碗": "Kembali ke mangkuk %s",
|
||||
"复制链接分享": "Salin tautan untuk dibagikan",
|
||||
"🖼 分享卡片": "🖼 Kartu bagikan",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Buat kartu piksel untuk dibagikan ke X atau teman-teman, sekalian bantu si pengemis promosi.",
|
||||
"生成分享卡": "Buat kartu",
|
||||
"分享卡": "Kartu bagikan",
|
||||
"长按图片保存,或": "Tekan lama gambar untuk menyimpan, atau ",
|
||||
"下载": "unduh",
|
||||
"🏚 你也可以要饭": "🏚 Kamu juga bisa mengemis",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Satu tweet dari akun X-mu langsung membuka mangkuk sendiri; uangnya masuk langsung ke akun Binance-mu.",
|
||||
"站长没有确认这笔施舍": "Pemilik tidak mengonfirmasi sedekah ini",
|
||||
"这笔施舍已过期": "Sedekah ini sudah kedaluwarsa",
|
||||
"如果你确实转了,请联系站长核对。": "Kalau kamu memang sudah transfer, hubungi pemilik untuk dicek.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Belum bayar berarti tak ada yang dipotong; mau sedekah, ulangi dari awal.",
|
||||
"再来一次": "Coba lagi",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Papan peringkat ·",
|
||||
"🏆 施主榜": "🏆 Dermawan",
|
||||
"🥣 乞丐榜": "🥣 Pengemis",
|
||||
"🪙 人气榜": "🪙 Popularitas",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · semua mangkuk digabung ·",
|
||||
"位施主": "dermawan",
|
||||
"总榜": "Sepanjang masa",
|
||||
"本周": "Minggu ini",
|
||||
"要到最多的要饭站 · 共": "Mangkuk yang paling banyak dapat ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Paling banyak koin (gratis) ·",
|
||||
"← 回到刚才看的碗": "← Kembali ke mangkuk tadi",
|
||||
"施主自己填的 X,未经验证": "X diisi sendiri oleh dermawan, belum diverifikasi",
|
||||
"次 · 施舍过": "kali · pernah sedekah ke",
|
||||
"个乞丐": "pengemis",
|
||||
"榜上无人": "Belum ada siapa-siapa",
|
||||
"就是我": "aku",
|
||||
"还没有人上榜": "Belum ada yang masuk papan",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "sedang mengemis ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ Mangkuk ini belum disetujui perguruan, jadi belum masuk papan.",
|
||||
"主站站长审核后会收录。": "Pemilik situs utama akan menyetujuinya setelah ditinjau.",
|
||||
"· 榜 #": "· Peringkat #",
|
||||
"升%s要 %s": "→ %s butuh %s",
|
||||
"满级": "Level maks",
|
||||
"饱食度": "Kekenyangan",
|
||||
"今天还没吃饭": "Hari ini belum makan",
|
||||
"今天有人投币了": "Hari ini ada yang sedekah",
|
||||
"今天丢过了": "Hari ini sudah lempar",
|
||||
"丢个钢镚(免费)": "Lempar koin (gratis)",
|
||||
"💸 投币施舍": "💸 Sedekah",
|
||||
"还没摆碗,暂不能投币": "Belum ada mangkuk, belum bisa sedekah",
|
||||
"去配置": "Atur sekarang",
|
||||
"钢镚": "Koin",
|
||||
"· 今日": "· hari ini",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 koin =",
|
||||
"碗里已有": "Isi mangkuk",
|
||||
"施主": "Dermawan",
|
||||
"人": "",
|
||||
"今日": "Hari ini",
|
||||
"🕹️ 投币施舍": "🕹️ Masukkan koin",
|
||||
"玩家名(上榜用,可留空)": "Nama pemain (untuk papan, boleh kosong)",
|
||||
"匿名施主": "Dermawan anonim",
|
||||
"你的 X(可选,显示头像)": "X-mu (opsional, untuk tampilkan avatar)",
|
||||
"投多少": "Berapa",
|
||||
"✏️ 自定义": "✏️ Bebas",
|
||||
"输入金额,最多两位小数": "Masukkan jumlah, maks. 2 desimal",
|
||||
"对乞丐喊话": "Bilang sesuatu ke pengemis",
|
||||
"例如:别买烟了,去吃饭": "mis. Jangan beli rokok, beli makan",
|
||||
"投币 💸": "Sedekah 💸",
|
||||
"投币": "Sedekah",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Pindai dengan aplikasi Binance atau buka sekali ketuk; begitu diterima langsung terukir di Buku Amal.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Transfer langsung ke pemilik lewat Binance Pay; setelah pemilik mengonfirmasi, kamu masuk papan.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Min. %s, maks. %s. Pesan tak boleh berisi tautan atau kontak.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Pengemis ini belum menaruh mangkuk (belum atur pembayaran), jadi belum bisa terima uang.",
|
||||
"去后台配置 →": "Atur di dasbor →",
|
||||
"🏚 想自己要饭?": "🏚 Mau ikut mengemis?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Satu tweet dari akun X-mu langsung membuka mangkuk sendiri: alamat sendiri, mangkuk sendiri, Buku Amal dan papan dermawan sendiri, uang langsung masuk akun Binance-mu.",
|
||||
"用 X 开通我的要饭站 →": "Buka mangkukku dengan X →",
|
||||
"人气榜": "Popularitas",
|
||||
"功德簿": "Buku Amal",
|
||||
"施主榜": "Dermawan",
|
||||
"乞丐榜": "Pengemis",
|
||||
"已屏蔽的施主": "Dermawan diblokir",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "Buku Amal masih kosong. Koin pertama akan terukir di sini",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · penyumbang terbesar untuk",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 dermawan pertama 💎 sedekah terbesar 🔥 langganan",
|
||||
"丐帮排名 · 要到最多的要饭站": "Peringkat perguruan · mangkuk yang paling banyak dapat",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Popularitas · mangkuk dengan koin terbanyak (koin gratis, tak perlu bayar)",
|
||||
"次": "kali",
|
||||
"榜上无人,第一个投币的就是首席施主": "Belum ada siapa-siapa. Penyumbang pertama jadi dermawan utama",
|
||||
"本站": "mangkuk ini",
|
||||
"叮!钢镚 +1": "Ting! Koin +1",
|
||||
"没丢进去": "Meleset dari mangkuk",
|
||||
"网络开小差了,再试一次": "Jaringan lagi ngadat, coba lagi",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Jumlah tidak valid (maks. 2 desimal)",
|
||||
"最少施舍 %s %s": "Sedekah minimal %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "Sedekah maksimal %s %s. Kalau memang sebanyak itu, bagi jadi beberapa kali",
|
||||
"支付网关开小差了:%s": "Gateway pembayaran lagi ngadat: %s",
|
||||
"手速太快了": "Kecepatan",
|
||||
"这个乞丐不在": "Pengemisnya tidak ada di sini",
|
||||
"请先打开要饭页再丢": "Buka halaman mangkuknya dulu baru lempar",
|
||||
"服务器开小差了": "Server lagi ngadat",
|
||||
"手速太快了,歇一会儿": "Kecepatan, istirahat dulu",
|
||||
"已提交,等站长确认": "Terkirim, menunggu konfirmasi pemilik",
|
||||
"网关返回 %s": "Gateway membalas %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "Aku lupa kata sandi mangkukku di %s, tweet ini bukti kalau ini aku 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "Aku naruh mangkuk di %s 🥣 Kasihanilah, beri sesuap nasi~ %s #PengemisCyber %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Aku resmi gabung Perguruan Pengemis Cyber 🧎 Seperak pun tanda sayang, lempar koin gratis juga boleh 🪙 %s #PengemisCyber %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Berhenti kerja, banting setir jadi pengemis. Mangkuknya di sini, para dermawan kasihanilah 🥣 %s #PengemisCyber %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "Perguruan pengemis buka pendaftaran, aku yang mulai duluan 🥣 Sedekah masuk Buku Amal, lempar koin gratis pun dihitung %s #PengemisCyber %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Tweet itu tidak memuat kode %s. Cek lagi apakah yang diposting sudah benar",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s sudah punya mangkuk: %s. Lupa kata sandi? Reset dengan X di halaman masuk.",
|
||||
"@%s 已经开过站了": "@%s sudah punya mangkuk",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "Alamat %s sudah dipakai (@%s mungkin sudah punya mangkuk; lupa kata sandi? pulihkan dengan X di halaman masuk)",
|
||||
"@%s 还没开过要饭站": "@%s belum punya mangkuk",
|
||||
"解绑币安 Key 失败:%s": "Gagal melepas Binance Key: %s",
|
||||
"绑定失败:%s": "Gagal menautkan: %s",
|
||||
"解绑失败:%s": "Gagal melepas tautan: %s",
|
||||
"校验失败:%s": "Verifikasi gagal: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Kata sandi /%s direset menjadi %s (hanya ditampilkan sekali, sampaikan ke pemiliknya)",
|
||||
"本站未配置支付网关": "Gateway pembayaran belum diatur di situs ini",
|
||||
"网关连不上,请稍后再试": "Gateway tidak bisa dihubungi, coba lagi nanti",
|
||||
"方法不允许": "Metode tidak diizinkan",
|
||||
"主站不存在": "Situs utama tidak ditemukan",
|
||||
"页面不存在": "Halaman tidak ditemukan",
|
||||
"赛博丐帮没有这条路。": "Tidak ada jalan ini di Perguruan Pengemis Cyber.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Belum dibuka, atau sudah diusir perguruan.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Pengemis ini belum menaruh mangkuk (belum atur pembayaran), belum bisa terima uang",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "Username X hanya boleh huruf, angka, dan garis bawah (dengan atau tanpa @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Jangan taruh tautan atau kontak di nama dan pesan. Pengemis tidak terima iklan",
|
||||
"没有这笔施舍": "Sedekah tidak ditemukan",
|
||||
"站点不存在": "Mangkuk tidak ditemukan",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Ketuk \"Sudah sedekah\" di perangkat yang memulai sedekah ini",
|
||||
"币安订单编号是 18 位数字,不填也行": "ID order Binance terdiri dari 18 digit (opsional)",
|
||||
"核对失败": "Pengecekan gagal",
|
||||
"这笔施舍不是网关模式": "Sedekah ini tidak lewat gateway",
|
||||
"试得太频繁了,一分钟后再试": "Terlalu sering mencoba, coba lagi semenit lagi",
|
||||
"请在发起施舍的那台设备上回填": "Masukkan ID order dari perangkat yang memulai sedekah ini",
|
||||
"币安订单编号是 18 位数字": "ID order Binance terdiri dari 18 digit",
|
||||
"本站未开放开站": "Pembukaan mangkuk dimatikan di situs ini",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "Kode sudah kedaluwarsa (atau dibuat di browser lain). Buat kode baru",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Tautan tweet tidak valid. Bentuknya seperti https://x.com/namamu/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Tweet itu lebih lama dari kodenya. Pakai tweet yang diposting setelah kode dibuat",
|
||||
"验证已失效,请重新验证": "Verifikasi kedaluwarsa, silakan verifikasi ulang",
|
||||
"口号和介绍里别放链接、联系方式": "Jangan taruh tautan atau kontak di slogan",
|
||||
"口令至少 6 位": "Kata sandi minimal 6 karakter",
|
||||
"两次口令不一致": "Kata sandi tidak cocok",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "Kata sandi situs utama diatur di config.env pada server, bukan lewat X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Akun X ini terlalu sering reset hari ini, kembali besok",
|
||||
"口令至少 6 位,且两次一致": "Kata sandi minimal 6 karakter dan harus cocok",
|
||||
"口令已重置,其它设备上的登录已失效": "Kata sandi direset. Perangkat lain sudah dikeluarkan",
|
||||
"X 用户名或口令不对": "Username X atau kata sandi salah",
|
||||
"请先登录": "Silakan masuk dulu",
|
||||
"登录状态已失效,请重新登录。": "Sesi kedaluwarsa, silakan masuk lagi.",
|
||||
"歇一会儿再来。": "Istirahat dulu, nanti kembali.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Terlalu banyak kata sandi salah untuk mangkuk ini. Istirahat dulu.",
|
||||
"站点标题不能为空": "Nama mangkuk tidak boleh kosong",
|
||||
"资料里别放链接、联系方式": "Jangan taruh tautan atau kontak di profil",
|
||||
"资料已保存": "Profil tersimpan",
|
||||
"主站的收款方式在服务器 config.env 里改": "Metode pembayaran situs utama diatur di config.env pada server",
|
||||
"填一下币安 UID,不然钱没处去": "Isi UID Binance, kalau tidak uangnya tak tahu mau ke mana",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Beralih ke transfer langsung: dermawan melapor sendiri, kamu konfirmasi di sini",
|
||||
"本站不支持绑定": "Penautan tidak tersedia di situs ini",
|
||||
"API Key 和 Secret 都要填": "API Key dan Secret keduanya wajib diisi",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "UID Binance hanya angka (terlihat di halaman profil aplikasi)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Tertaut! Binance memverifikasi Key-nya; mulai sekarang sedekah dikonfirmasi otomatis",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Tautan dilepas. Sekarang mode transfer langsung, pastikan UID-mu sudah diisi",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Terverifikasi: Binance Key berfungsi, pembayaran akan dikonfirmasi otomatis",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "Kata sandi situs utama diatur di config.env (ADMIN_PASSWORD) pada server",
|
||||
"口令已修改,其它设备上的登录已失效": "Kata sandi diganti. Perangkat lain sudah dikeluarkan",
|
||||
"这笔施舍当前不能确认/拒绝": "Sedekah ini sedang tidak bisa dikonfirmasi/ditolak",
|
||||
"只能回复自己站的施舍": "Hanya bisa membalas sedekah di mangkuk sendiri",
|
||||
"回复里别放链接、联系方式": "Jangan taruh tautan atau kontak di balasan",
|
||||
"未知操作": "Aksi tidak dikenal",
|
||||
"无权操作": "Tidak diizinkan",
|
||||
"没有这个站": "Mangkuk tidak ada",
|
||||
"未配置支付网关": "Gateway pembayaran belum diatur",
|
||||
"请求来源不对": "Asal permintaan tidak valid",
|
||||
"请从本站页面操作。": "Gunakan halaman situs ini sendiri.",
|
||||
"页面渲染失败": "Gagal merender halaman",
|
||||
"稍后再试。": "Coba lagi nanti.",
|
||||
"地址已被占用": "Alamat sudah dipakai",
|
||||
"这个 X 账号已经开过站了": "Akun X ini sudah punya mangkuk",
|
||||
"连不上 X 接口: %w": "Tidak bisa menghubungi X: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tweet tidak ditemukan (tautan salah, atau tweet tidak publik)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Tweet tidak bisa dibaca (mungkin dihapus, atau akunnya terproteksi)",
|
||||
"头像地址不在允许的域名": "URL avatar bukan dari domain yang diizinkan",
|
||||
"头像下载失败": "Gagal mengunduh avatar",
|
||||
"头像不是有效图片": "Avatar bukan gambar yang valid",
|
||||
"金额格式不对": "Jumlah tidak valid",
|
||||
"收款链接过长": "Tautan penerimaan terlalu panjang",
|
||||
"收款链接须为 https 链接": "Tautan penerimaan harus https",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Tautan penerimaan harus domain Binance (semacam app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "Tautan profil X bentuknya seperti https://x.com/namamu",
|
||||
"核对成功,已到账": "Terverifikasi, pembayaran diterima",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Transfer ditemukan tapi jumlahnya kurang; dicatat sesuai yang dibayar",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Transfer tidak ditemukan: cek ID order dan akun tujuannya, lalu coba lagi setelah masuk di Binance",
|
||||
"这笔转账已经被别的订单用过了": "Transfer ini sudah dipakai order lain",
|
||||
"币种不对": "Mata uang salah",
|
||||
"这笔施舍当前状态不能回填": "Status sedekah ini tidak memungkinkan memasukkan ID order",
|
||||
"这个网络今天丢得够多了": "Jaringan ini sudah cukup banyak lempar koin hari ini",
|
||||
"今天已经丢过了,明天再来": "Hari ini sudah lempar, kembali besok",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "belum bayar",
|
||||
"待确认": "menunggu",
|
||||
"已到账": "diterima",
|
||||
"已过期": "kedaluwarsa",
|
||||
"已关闭": "ditutup",
|
||||
"已拒绝": "ditolak",
|
||||
"空碗未入帮": "Mangkuk kosong, belum masuk perguruan",
|
||||
"一袋弟子": "Murid 1 Karung",
|
||||
"二袋弟子": "Murid 2 Karung",
|
||||
"三袋弟子": "Murid 3 Karung",
|
||||
"四袋弟子": "Murid 4 Karung",
|
||||
"五袋弟子": "Murid 5 Karung",
|
||||
"六袋弟子": "Murid 6 Karung",
|
||||
"七袋弟子": "Murid 7 Karung",
|
||||
"八袋弟子": "Murid 8 Karung",
|
||||
"九袋长老": "Tetua 9 Karung",
|
||||
"帮主": "Ketua Perguruan",
|
||||
"副帮主": "Wakil Ketua",
|
||||
"传功长老": "Tetua Pewaris Ilmu",
|
||||
"执法长老": "Tetua Penegak Hukum",
|
||||
"掌棒龙头": "Kepala Tongkat",
|
||||
"掌钵龙头": "Kepala Mangkuk",
|
||||
"长老": "Tetua",
|
||||
"舵主": "Kepala Cabang",
|
||||
"弟子": "Murid",
|
||||
"总舵": "Markas Besar",
|
||||
"投了个硬币": "melempar sekeping koin",
|
||||
"善心人": "orang baik",
|
||||
"大善人": "dermawan besar",
|
||||
"活菩萨": "malaikat hidup",
|
||||
"财神爷": "dewa rezeki",
|
||||
"刚刚": "baru saja",
|
||||
"%d 分钟前": "%d mnt lalu",
|
||||
"%d 小时前": "%d jam lalu",
|
||||
"%d 天前": "%d hari lalu",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 日本語。key は中文原文(テンプレート/コードの T "…")、%s/%d の順序は中文と同じ。
|
||||
func init() {
|
||||
translations["ja"] = map[string]string{
|
||||
// ---- 站名 / meta ----
|
||||
"赛博要饭": "サイバー物乞い",
|
||||
"赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "サイバー物乞い:お恵みを、一口だけでも。Binance Pay で投げ銭して功徳帳にひとこと残そう。お金がなくても無料コインを投げられる。X でツイート1本、自分の椀が持てる。",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "お恵みを、一口だけでも。投げ銭で功徳帳入り、無料コインだって愛。",
|
||||
"%s:%s · 赛博要饭,行行好": "%s:%s · サイバー物乞い、お恵みを",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "お恵みを、一口だけでも。Binance Pay で投げ銭して功徳帳にひとこと残そう。",
|
||||
"#赛博丐帮": "#サイバー丐幫",
|
||||
"(已屏蔽:%s)": "(非表示:%s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "街に戻る",
|
||||
"回到刚才看的碗": "さっき見ていた椀に戻る",
|
||||
"声音开关": "サウンド切替",
|
||||
"声音": "サウンド",
|
||||
"排行榜": "ランキング",
|
||||
"我的后台": "管理画面",
|
||||
"站长": "オーナー",
|
||||
"登录": "ログイン",
|
||||
"我的站": "自分の椀",
|
||||
"开通要饭站": "物乞いを始める",
|
||||
"🙏 行行好,赏口饭吃": "🙏 お恵みを、一口だけでも",
|
||||
"🪙 一毛也是爱": "🪙 一円だって愛",
|
||||
"💸 投币就上榜": "💸 投げ銭でランキング入り",
|
||||
"📜 留一句话刻功德簿": "📜 ひとこと残して功徳帳に刻む",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 ツイート1本で自分の椀が持てる",
|
||||
"👾 赛博丐帮,人人有碗": "👾 サイバー丐幫、誰にでも椀がある",
|
||||
"· 赛博丐帮,行行好": "· サイバー丐幫 · お恵みを",
|
||||
"作者": "作者",
|
||||
"收款由": "決済は",
|
||||
"驱动 · 字体": "提供 · フォント",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "サウンド:オフ",
|
||||
"声音:开(点击静音)": "サウンド:オン(クリックでミュート)",
|
||||
"点一下开始播放": "タップで音楽スタート",
|
||||
"已复制": "コピーしました",
|
||||
"功德 +": "功徳 +",
|
||||
"你的名号和留言已刻上功德簿": "あなたの名前とメッセージを功徳帳に刻みました",
|
||||
"看看功德簿": "功徳帳を見る",
|
||||
"分享卡片": "シェアカード",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "送信しました。オーナーの確認後にランキングに載ります。このページは自動更新されます。",
|
||||
"这笔施舍已": "この施しは",
|
||||
"过期": "期限切れになりました",
|
||||
"下单失败": "作成に失敗しました",
|
||||
"被站长拒绝": "オーナーに拒否されました",
|
||||
"关闭": "閉じられました",
|
||||
",请回到页面重新投币。": "。ページに戻ってもう一度投げ銭してください。",
|
||||
"没成功,再试试": "失敗しました、もう一度",
|
||||
"网络开小差了": "ネットワークが不調です",
|
||||
"分页": "ページ送り",
|
||||
"‹ 上一页": "‹ 前へ",
|
||||
"下一页 ›": "次へ ›",
|
||||
"页": "ページ",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "オーナーログイン ·",
|
||||
"🔑 站长登录": "🔑 オーナーログイン",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "「X ユーザー名 + 開店時に決めたパスワード」で管理画面にログイン。メインサイトのオーナーはユーザー名を空欄に。",
|
||||
"X 用户名": "X ユーザー名",
|
||||
"例如 qianyuwing(主站留空)": "例:qianyuwing(メインサイトは空欄)",
|
||||
"口令": "パスワード",
|
||||
"忘了口令?": "パスワードを忘れた?",
|
||||
"用 X 发推找回": "X のツイートで再設定",
|
||||
"。还没有要饭站?": "。まだ椀がない?",
|
||||
"用 X 开一个": "X で開く",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "管理画面 ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 開店おめでとう!あなたの椀",
|
||||
"已上线": "が公開されました",
|
||||
"(待主站站长收录后进榜)": "(メインサイトのオーナーが掲載を承認するとランキングに入ります)",
|
||||
"下一步:": "次のステップ:",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "下の「受取方法」に Binance UID を入力してください(10秒で終わります)。入れないと誰もお金を送れません。",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "今後は %s から入ってください(X ユーザー名 %s + パスワード)。忘れたらもう一度ツイートで再設定できます。",
|
||||
"后台": "管理画面",
|
||||
"· 碗里": "· 椀の中",
|
||||
"位施主 ·": "人の施主 ·",
|
||||
"次 · 钢镚": "回 · コイン",
|
||||
"待收录": "掲載待ち",
|
||||
"🔑 改口令": "🔑 パスワード",
|
||||
"退出": "ログアウト",
|
||||
"⏳ 待确认": "⏳ 確認待ち",
|
||||
"✏️ 资料": "✏️ プロフィール",
|
||||
"💰 收款方式": "💰 受取方法",
|
||||
"📜 施舍记录": "📜 施しの記録",
|
||||
"🏚 所有站点": "🏚 全ての椀",
|
||||
"🧹 留言巡查": "🧹 メッセージ巡回",
|
||||
"⏳ 待确认的施舍": "⏳ 確認待ちの施し",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Binance アプリで入金(金額とメモコード)を確認してから承認すると、ランキングに載ります。",
|
||||
"备注码": "メモコード",
|
||||
"· 币安订单": "· Binance 注文",
|
||||
"✓ 确认到账": "✓ 入金確認",
|
||||
"✗ 没收到": "✗ 未着",
|
||||
"站点标题": "椀の名前",
|
||||
"(来自 X @": "(X @",
|
||||
",锁定)": " から取得、変更不可)",
|
||||
"头像 emoji": "アバター絵文字",
|
||||
"一句话口号": "ひとことスローガン",
|
||||
"绑定 X": "X を連携",
|
||||
"(主页链接或 @名字,留空不显示)": "(プロフィール URL か @名前。空欄なら非表示)",
|
||||
"https://x.com/你的名字": "https://x.com/あなたの名前",
|
||||
"保存资料": "プロフィールを保存",
|
||||
"config.env 配置": "config.env で設定",
|
||||
"已绑币安 Key · 自动确认": "Binance Key 連携済み · 自動確認",
|
||||
"直接转账 · UID": "直接送金 · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ まだ椀がありません。タップして設定",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "メインサイトの受取方法はサーバーの config.env で設定します。現在:",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "BinancePayTool ゲートウェイで自動確認(デフォルトアカウント)",
|
||||
"直接转账": "直接送金",
|
||||
"校验网关默认账号": "ゲートウェイのデフォルトアカウントを検証",
|
||||
"✅ 已绑定币安账号(UID": "✅ Binance アカウント連携済み(UID",
|
||||
"),施主付款后": ")。施主の支払い後は",
|
||||
"自动确认上榜": "自動で確認してランキングに載ります",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " 支払い画面にあなたの受取 QR / ワンタップ起動が表示されます。",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " 受取リンクを追加すると、施主が QR スキャン / ワンタップで送れるようになります。",
|
||||
"重新校验 Key": "Key を再検証",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "解除すると直接送金モードになります(入金は手動確認)。よろしいですか?",
|
||||
"解绑": "解除",
|
||||
"换一个 Key / 更新收款链接": "Key を変更 / 受取リンクを更新",
|
||||
"当前是": "現在は",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": "モードです。施主は Binance アプリであなたの UID 宛に送金して「施しました」をタップ、あなたが管理画面で確認するとランキングに載ります。",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ まだ椀がありません。Binance UID を入れるだけで受け取れます。10秒で終わります。",
|
||||
"方式一:填币安 UID(最简单)": "方法1:Binance UID を入力(いちばん簡単)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Binance アプリ → 左上のアバターをタップ。その下の数字があなたの",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": "(Pay ID でもあります)。施主は投げ銭時にこれを見て、Binance アプリの「ペイ → 送金」で入力すれば手数料ゼロで送れます。",
|
||||
"币安 UID": "Binance UID",
|
||||
"例如 12345678": "例:12345678",
|
||||
"收款链接": "受取リンク",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(任意。あると施主が QR スキャン / ワンタップで Binance アプリを起動できます。なくても UID 宛に送金できます)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "取得方法:Binance アプリの受取画面で「画像を保存」し、任意の QR リーダー(カメラや写真アプリでも可)で画像内のリンクを読み取ってここに貼り付けます。",
|
||||
"保存": "保存",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "方法2:読み取り専用の Binance API Key を連携(入金を自動確認)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "施主の支払い後に自動でランキングに載り、手動確認は不要です。Key は「読み取りを有効化」の権限だけで、資金は動かせません。このサイトは Key を保存せず、決済ゲートウェイが暗号化して保管します。",
|
||||
"共": "全",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "件 · スパムはメッセージ非表示か本人ブロック(記録は残ります)· 返信可",
|
||||
"已屏蔽此人": "ブロック済み",
|
||||
"(已屏蔽:": "(非表示:",
|
||||
"🥣 站长:": "🥣 オーナー:",
|
||||
"恢复留言": "メッセージを再表示",
|
||||
"屏蔽留言": "メッセージを非表示",
|
||||
"恢复此人": "ブロック解除",
|
||||
"屏蔽此人": "この人をブロック",
|
||||
"回一句…": "返信する…",
|
||||
"回复": "返信",
|
||||
"还没有施舍记录": "まだ施しの記録はありません",
|
||||
"🔑 修改口令": "🔑 パスワード変更",
|
||||
"新口令(至少 6 位)": "新しいパスワード(6文字以上)",
|
||||
"再输一遍": "もう一度入力",
|
||||
"改完后其它设备上的登录会失效。": "変更すると他の端末はログアウトされます。",
|
||||
"确认修改": "変更する",
|
||||
"🏚 所有要饭站": "🏚 全ての椀",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "件 · 違反は除名可 · オーナーのパスワード再設定可",
|
||||
"已除名": "除名済み",
|
||||
"未收录": "未掲載",
|
||||
"已绑 Key 自动确认": "Key 連携 · 自動確認",
|
||||
"位施主 · 钢镚": "人の施主 · コイン",
|
||||
"开张": "に開店",
|
||||
"取消收录": "掲載取消",
|
||||
"收录上榜": "掲載する",
|
||||
"除名": "除名",
|
||||
"恢复": "復帰",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "/%s のパスワードを再設定しますか?新しいパスワードは一度だけ表示されます。",
|
||||
"重置口令": "パスワード再設定",
|
||||
"还没有子站": "まだ椀はありません",
|
||||
"🧹 全站最新留言": "🧹 全サイトの最新メッセージ",
|
||||
"条 · 跨站点巡查广告": "件 · 全ての椀を横断してスパム巡回",
|
||||
"暂无留言": "メッセージはまだありません",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Binance アプリ → アカウント → API 管理 → API 作成:",
|
||||
"只勾「允许读取」": "「読み取りを有効化」だけにチェック",
|
||||
",其它权限都不要,": "、他の権限は付けず、",
|
||||
"不用设 IP 白名单": "IP ホワイトリストも不要",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": "(読み取り専用 Key では資金は動かせません)。Key は入金履歴の読み取りだけに使い、サーバー側で暗号化保存し、表示されることはありません。",
|
||||
"(App 头像页可见)": "(アプリのプロフィール画面で確認できます)",
|
||||
"(选填,填了施主能扫码)": "(任意。あると施主が QR スキャンできます)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "受取リンクの取得方法:Binance アプリの受取画面で「画像を保存」し、任意の QR リーダーで画像内のリンクを読み取ります。",
|
||||
"绑定并校验": "連携して検証",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "X でパスワード再設定",
|
||||
"🔑 用 X 找回口令": "🔑 X でパスワード再設定",
|
||||
"🏚 开通我的要饭站": "🏚 自分の椀を開く",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "コード入りのツイートを投稿して本人確認すれば、パスワードを再設定できます。",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "施しは不要。X アカウントでツイート1本で開けます。椀の名前は X の表示名、アバターは X のアイコン、1アカウントにつき椀は1つ。ツイートがそのまま街での呼び込みになります。",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 アプリ内ブラウザで開いています。ワンタップ投稿で X が起動しなかったり、戻ってきたときに状態が消えることがあります。",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "右上の「⋯」から「ブラウザで開く」を選ぶ",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": "(またはリンクをコピーして Safari / Chrome で開く)ことをおすすめします。",
|
||||
"复制本页链接": "このページのリンクをコピー",
|
||||
"发一条推文,带上验证码": "コード入りのツイートを投稿",
|
||||
"推文内容(可以随便改,只要保留验证码)": "ツイート本文(自由に編集可。コードだけは残してください)",
|
||||
"换一条": "別の文にする",
|
||||
"🐦 一键去 X 发推": "🐦 X で投稿",
|
||||
"复制文案": "本文をコピー",
|
||||
"没拉起 X App?点这里用网页版发 →": "X アプリが開かない?ここからウェブ版で投稿 →",
|
||||
"验证码": "コード",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "は大文字小文字を区別せず、24時間有効です。本文にはあなたの椀のリンクが入っているので、投稿がそのまま宣伝になります。",
|
||||
"把推文链接贴回来": "ツイートのリンクを貼り付け",
|
||||
"推文链接": "ツイートのリンク",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/あなたの名前/status/1234567890",
|
||||
"验证": "検証",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "投稿後、ツイートの共有ボタン → 「リンクをコピー」でOKです。",
|
||||
"还没开过站?": "まだ椀がない?",
|
||||
"去开一个": "開きに行く",
|
||||
"已经开过站?": "もう椀を持っている?",
|
||||
"站长登录": "オーナーログイン",
|
||||
"🔑 设置新口令": "🔑 新しいパスワードを設定",
|
||||
"保存并登录": "保存してログイン",
|
||||
"✅ X 验证通过": "✅ X 認証済み",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· 名前とアバターは X から取得(アバターは定期的に同期)",
|
||||
"站点地址": "椀のアドレス",
|
||||
"(就是你的 X 用户名,不用填)": "(X ユーザー名がそのまま使われます。入力不要)",
|
||||
"行行好,赏口饭吃 🙏": "お恵みを、一口だけでも 🙏",
|
||||
"登录口令": "ログインパスワード",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "今後は「X ユーザー名 + パスワード」で管理画面にログイン。忘れたらもう一度ツイートで再設定できます。",
|
||||
"口令(至少 6 位)": "パスワード(6文字以上)",
|
||||
"开张 🏚": "開店する 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "開店後、管理画面で Binance Key を連携するか UID を入力すれば受け取れます。内容は自己責任、スパムの椀は丐幫から除名されます。",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "%s に施す",
|
||||
"先回去看看": "いったん戻る",
|
||||
"给 %s 投币": "%s に投げ銭",
|
||||
"金额要": "金額は",
|
||||
"一分不差": "ぴったり",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": "に。ゲートウェイはこの固有の端数で自動照合し、送金後数秒で着金します",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Binance Pay でオーナーに直接送金し、送ったら下の「施しました」をタップ",
|
||||
"打开币安 App 转账": "Binance アプリで送金",
|
||||
"唤起后手动输入金额": "アプリで金額を入力:",
|
||||
",备注填": "、メモは",
|
||||
"用另一台手机扫码": "別のスマホでスキャン",
|
||||
"收款二维码": "受取 QR コード",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Binance アプリ → 「スキャン」→ 金額を入力:",
|
||||
"或手动转账": "または手動で送金",
|
||||
"转账信息": "送金情報",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Binance アプリ → 下の「ペイ」→「送金」→ 受取人に下の UID を入力 → 金額は",
|
||||
"→ 备注填": "→ メモは",
|
||||
"→ 转完回来点「我已施舍」": "→ 送ったら戻って「施しました」をタップ",
|
||||
"收款方": "受取人",
|
||||
"复制": "コピー",
|
||||
"金额": "金額",
|
||||
"备注": "メモ",
|
||||
"等待到账…转完自动确认,本页会自动更新": "入金待ち…送金後に自動確認、このページは自動更新されます",
|
||||
"付了但一直没确认?": "払ったのに確認されない?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Binance 注文番号(18桁の数字、送金詳細に記載)",
|
||||
"我付过了,帮我核对": "支払い済み、照合して",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Binance 注文番号(任意、18桁の数字。入れるとオーナーの確認が早くなります)",
|
||||
"我已施舍,等站长确认": "施しました、オーナーの確認待ち",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "「施しました」は施しを始めた端末でタップしてください。",
|
||||
"打不开?": "開けない?",
|
||||
"用网关收银页支付": "ゲートウェイの決済ページで支払う",
|
||||
"施舍进行中": "施し進行中",
|
||||
"🙏 谢谢施主": "🙏 施主さま、ありがとう",
|
||||
"你在 %s 的施主榜排第 %d 位": "あなたは %s の施主ランキングで %d 位です",
|
||||
"回到 %s 的碗": "%s の椀に戻る",
|
||||
"复制链接分享": "リンクをコピーしてシェア",
|
||||
"🖼 分享卡片": "🖼 シェアカード",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "ピクセル風のシェア画像を作って X や友だちに送り、物乞いの宣伝も手伝ってあげよう。",
|
||||
"生成分享卡": "シェアカードを作る",
|
||||
"分享卡": "シェアカード",
|
||||
"长按图片保存,或": "画像を長押しして保存、または",
|
||||
"下载": "ダウンロード",
|
||||
"🏚 你也可以要饭": "🏚 あなたも物乞いできる",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "X アカウントでツイート1本、自分の椀が持てます。もらったお金はそのままあなたの Binance アカウントへ。",
|
||||
"站长没有确认这笔施舍": "オーナーはこの施しを確認しませんでした",
|
||||
"这笔施舍已过期": "この施しは期限切れです",
|
||||
"如果你确实转了,请联系站长核对。": "本当に送金した場合は、オーナーに連絡して確認してもらってください。",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "未払いなら請求はありません。施したい場合はもう一度どうぞ。",
|
||||
"再来一次": "もう一度",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "ランキング ·",
|
||||
"🏆 施主榜": "🏆 施主",
|
||||
"🥣 乞丐榜": "🥣 物乞い",
|
||||
"🪙 人气榜": "🪙 人気",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · 全ての椀の合計 · 全",
|
||||
"位施主": "人の施主",
|
||||
"总榜": "総合",
|
||||
"本周": "今週",
|
||||
"要到最多的要饭站 · 共": "いちばん集めた椀 · 全",
|
||||
"个": "件",
|
||||
"收到钢镚最多(免费投)· 共": "コインをいちばん集めた(無料)· 全",
|
||||
"← 回到刚才看的碗": "← さっき見ていた椀に戻る",
|
||||
"施主自己填的 X,未经验证": "施主が自己申告した X、未検証",
|
||||
"次 · 施舍过": "回 · 施した相手",
|
||||
"个乞丐": "人",
|
||||
"榜上无人": "まだ誰もいません",
|
||||
"就是我": "自分",
|
||||
"还没有人上榜": "まだ誰もランクインしていません",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "が物乞い中 ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ この椀はまだ丐幫に掲載されておらず、ランキングには入りません。",
|
||||
"主站站长审核后会收录。": "メインサイトのオーナーが審査後に掲載します。",
|
||||
"· 榜 #": "· 順位 #",
|
||||
"升%s要 %s": "%s は EXP %s から",
|
||||
"满级": "最大レベル",
|
||||
"饱食度": "満腹度",
|
||||
"今天还没吃饭": "今日はまだ何も食べていない",
|
||||
"今天有人投币了": "今日は投げ銭あり",
|
||||
"今天丢过了": "今日はもう投げた",
|
||||
"丢个钢镚(免费)": "コインを投げる(無料)",
|
||||
"💸 投币施舍": "💸 投げ銭",
|
||||
"还没摆碗,暂不能投币": "まだ椀がないので投げ銭できません",
|
||||
"去配置": "設定する",
|
||||
"钢镚": "コイン",
|
||||
"· 今日": "· 今日",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · コイン1枚 =",
|
||||
"碗里已有": "椀の中",
|
||||
"施主": "施主",
|
||||
"人": "人",
|
||||
"今日": "今日",
|
||||
"🕹️ 投币施舍": "🕹️ コインを入れる",
|
||||
"玩家名(上榜用,可留空)": "プレイヤー名(ランキング用、空欄可)",
|
||||
"匿名施主": "匿名の施主",
|
||||
"你的 X(可选,显示头像)": "あなたの X(任意、アバター表示用)",
|
||||
"投多少": "いくら投げる",
|
||||
"✏️ 自定义": "✏️ 自由入力",
|
||||
"输入金额,最多两位小数": "金額を入力(小数点以下2桁まで)",
|
||||
"对乞丐喊话": "物乞いにひとこと",
|
||||
"例如:别买烟了,去吃饭": "例:タバコはやめて、ご飯を食べな",
|
||||
"投币 💸": "投げ銭 💸",
|
||||
"投币": "投げ銭",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Binance アプリで QR スキャン / ワンタップ支払い。着金すると自動で功徳帳に刻まれます。",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Binance Pay でオーナーに直接送金。送信後、オーナーが確認するとランキングに載ります。",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "最小 %s、最大 %s。メッセージにリンクや連絡先は入れられません。",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "この物乞いはまだ椀を出していません(受取方法が未設定)。今はお金を受け取れません。",
|
||||
"去后台配置 →": "管理画面で設定 →",
|
||||
"🏚 想自己要饭?": "🏚 自分も物乞いしたい?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "X アカウントでツイート1本、自分の椀が持てます。専用アドレス、自分の椀、功徳帳と施主ランキング付き。お金はそのままあなたの Binance アカウントへ。",
|
||||
"用 X 开通我的要饭站 →": "X で自分の椀を開く →",
|
||||
"人气榜": "人気",
|
||||
"功德簿": "功徳帳",
|
||||
"施主榜": "施主",
|
||||
"乞丐榜": "物乞い",
|
||||
"已屏蔽的施主": "ブロック済みの施主",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "功徳帳はまだ空っぽ。最初のコインがここに刻まれます",
|
||||
"HIGH SCORE · 给": "HIGH SCORE ·",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "に最も投げ銭した人 · 🏁 最初の施主 💎 最高額 🔥 常連",
|
||||
"丐帮排名 · 要到最多的要饭站": "丐幫ランキング · いちばん集めた椀",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "人気ランキング · コインをいちばん集めた椀(コインは無料)",
|
||||
"次": "回",
|
||||
"榜上无人,第一个投币的就是首席施主": "まだ誰もいません。最初に投げた人が筆頭施主になります",
|
||||
"本站": "この椀",
|
||||
"叮!钢镚 +1": "チャリン!コイン +1",
|
||||
"没丢进去": "椀に入らなかった",
|
||||
"网络开小差了,再试一次": "ネットワークが不調です、もう一度",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "金額の形式が正しくありません(小数点以下2桁まで)",
|
||||
"最少施舍 %s %s": "最小 %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "最大 %s %s。本当にそんなにあるなら何回かに分けてください",
|
||||
"支付网关开小差了:%s": "決済ゲートウェイが不調です:%s",
|
||||
"手速太快了": "速すぎます",
|
||||
"这个乞丐不在": "この物乞いはいません",
|
||||
"请先打开要饭页再丢": "先に椀のページを開いてください",
|
||||
"服务器开小差了": "サーバーが不調です",
|
||||
"手速太快了,歇一会儿": "速すぎます、少し休んで",
|
||||
"已提交,等站长确认": "送信しました、オーナーの確認待ち",
|
||||
"网关返回 %s": "ゲートウェイの応答:%s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "「%s」で物乞い中の椀のパスワードを忘れたので、本人証明のツイート 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "「%s」に椀を置きました 🥣 お恵みを、一口だけでも〜 %s #サイバー丐幫 %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "サイバー丐幫に入門、本日より物乞い開業 🧎 一円だって愛、無料コインでもOK 🪙 %s #サイバー丐幫 %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "仕事を辞めて物乞いに転職。椀はここ、善き人よお恵みを 🥣 %s #サイバー丐幫 %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "丐幫メンバー募集中、まず自分から物乞い 🥣 投げ銭した人は功徳帳入り、無料コインでも可 %s #サイバー丐幫 %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "このツイートにコード %s が含まれていません。正しいツイートか確認してください",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s はすでに椀を持っています:%s。パスワードを忘れたらログインページから X で再設定できます。",
|
||||
"@%s 已经开过站了": "@%s はすでに椀を持っています",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "アドレス %s は使用中です(@%s がすでに椀を持っているかも。パスワードを忘れたらログインページから X で再設定)",
|
||||
"@%s 还没开过要饭站": "@%s はまだ椀を持っていません",
|
||||
"解绑币安 Key 失败:%s": "Binance Key の解除に失敗:%s",
|
||||
"绑定失败:%s": "連携に失敗:%s",
|
||||
"解绑失败:%s": "解除に失敗:%s",
|
||||
"校验失败:%s": "検証に失敗:%s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "/%s のパスワードを %s に再設定しました(一度だけ表示。オーナーに伝えてください)",
|
||||
"本站未配置支付网关": "決済ゲートウェイが未設定です",
|
||||
"网关连不上,请稍后再试": "ゲートウェイに接続できません。後でもう一度",
|
||||
"方法不允许": "許可されていないメソッドです",
|
||||
"主站不存在": "メインサイトが見つかりません",
|
||||
"页面不存在": "ページが見つかりません",
|
||||
"赛博丐帮没有这条路。": "サイバー丐幫にこんな道はありません。",
|
||||
"要么还没开张,要么已被丐帮除名。": "まだ開店していないか、丐幫から除名されています。",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "この物乞いはまだ椀を出していません(受取方法が未設定)。今はお金を受け取れません",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "X ユーザー名は英数字とアンダースコアのみ(@ はなくても可)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "名前やメッセージにリンクや連絡先は入れないでください。物乞いは広告お断り",
|
||||
"没有这笔施舍": "その施しは見つかりません",
|
||||
"站点不存在": "椀が見つかりません",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "施しを始めた端末で「施しました」をタップしてください",
|
||||
"币安订单编号是 18 位数字,不填也行": "Binance 注文番号は18桁の数字です(任意)",
|
||||
"核对失败": "照合に失敗",
|
||||
"这笔施舍不是网关模式": "この施しはゲートウェイモードではありません",
|
||||
"试得太频繁了,一分钟后再试": "試行が多すぎます。1分後にもう一度",
|
||||
"请在发起施舍的那台设备上回填": "施しを始めた端末から注文番号を送信してください",
|
||||
"币安订单编号是 18 位数字": "Binance 注文番号は18桁の数字です",
|
||||
"本站未开放开站": "このサイトでは椀の新規開設を受け付けていません",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "コードが無効です(期限切れか、別のブラウザで生成されたもの)。再生成してください",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "ツイートのリンクが正しくありません。https://x.com/あなたの名前/status/1234567890 の形式で",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "このツイートはコード生成より前のものです。コード生成後に投稿したツイートを使ってください",
|
||||
"验证已失效,请重新验证": "認証の期限が切れました。もう一度認証してください",
|
||||
"口号和介绍里别放链接、联系方式": "スローガンにリンクや連絡先は入れないでください",
|
||||
"口令至少 6 位": "パスワードは6文字以上",
|
||||
"两次口令不一致": "パスワードが一致しません",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "メインサイトのパスワードはサーバーの config.env で変更します。X での再設定は使えません",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "この X アカウントは今日の再設定回数が上限です。明日また",
|
||||
"口令至少 6 位,且两次一致": "パスワードは6文字以上で、2回とも同じにしてください",
|
||||
"口令已重置,其它设备上的登录已失效": "パスワードを再設定しました。他の端末はログアウトされました",
|
||||
"X 用户名或口令不对": "X ユーザー名かパスワードが違います",
|
||||
"请先登录": "ログインしてください",
|
||||
"登录状态已失效,请重新登录。": "セッションが切れました。もう一度ログインしてください。",
|
||||
"歇一会儿再来。": "少し休んでからまた来てください。",
|
||||
"这个站点的错误口令太多,歇一会儿。": "この椀へのパスワード誤りが多すぎます。少し休んでください。",
|
||||
"站点标题不能为空": "椀の名前は空にできません",
|
||||
"资料里别放链接、联系方式": "プロフィールにリンクや連絡先は入れないでください",
|
||||
"资料已保存": "プロフィールを保存しました",
|
||||
"主站的收款方式在服务器 config.env 里改": "メインサイトの受取方法はサーバーの config.env で変更します",
|
||||
"填一下币安 UID,不然钱没处去": "Binance UID を入力してください。ないとお金の行き先がありません",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "直接送金に切り替えました。施主が送金を自己申告し、あなたがここで確認します",
|
||||
"本站不支持绑定": "このサイトでは連携できません",
|
||||
"API Key 和 Secret 都要填": "API Key と Secret の両方が必要です",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Binance UID は数字のみです(アプリのプロフィール画面で確認できます)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "連携完了!Binance の検証に通りました。今後の施しは自動で確認されランキングに載ります",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "解除しました。現在は直接送金モードです。UID を忘れずに入力してください",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "検証OK:Binance Key は有効です。入金は自動確認されます",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "メインサイトのパスワードはサーバーの config.env(ADMIN_PASSWORD)で変更します",
|
||||
"口令已修改,其它设备上的登录已失效": "パスワードを変更しました。他の端末はログアウトされました",
|
||||
"这笔施舍当前不能确认/拒绝": "この施しは今は承認/拒否できません",
|
||||
"只能回复自己站的施舍": "返信できるのは自分の椀への施しだけです",
|
||||
"回复里别放链接、联系方式": "返信にリンクや連絡先は入れないでください",
|
||||
"未知操作": "不明な操作です",
|
||||
"无权操作": "権限がありません",
|
||||
"没有这个站": "その椀はありません",
|
||||
"未配置支付网关": "決済ゲートウェイが未設定です",
|
||||
"请求来源不对": "リクエスト元が正しくありません",
|
||||
"请从本站页面操作。": "このサイトのページから操作してください。",
|
||||
"页面渲染失败": "ページの描画に失敗しました",
|
||||
"稍后再试。": "後でもう一度お試しください。",
|
||||
"地址已被占用": "アドレスは使用中です",
|
||||
"这个 X 账号已经开过站了": "この X アカウントはすでに椀を持っています",
|
||||
"连不上 X 接口: %w": "X に接続できません: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "ツイートが見つかりません(リンク違いか、非公開)",
|
||||
"推文读不到(可能被删除或账号受保护)": "ツイートを読めません(削除済みか、鍵アカウント)",
|
||||
"头像地址不在允许的域名": "アバターの URL が許可ドメイン外です",
|
||||
"头像下载失败": "アバターのダウンロードに失敗しました",
|
||||
"头像不是有效图片": "アバターが有効な画像ではありません",
|
||||
"金额格式不对": "金額の形式が正しくありません",
|
||||
"收款链接过长": "受取リンクが長すぎます",
|
||||
"收款链接须为 https 链接": "受取リンクは https で始まる必要があります",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "受取リンクは Binance のドメイン(app.binance.com/… など)である必要があります",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "X プロフィールのリンクは https://x.com/あなたの名前 の形式で",
|
||||
"核对成功,已到账": "照合OK、入金済みです",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "送金は見つかりましたが金額が不足しています。実際の額で記録しました",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "送金が見つかりません。注文番号と送金先アカウントを確認し、Binance で着金してからもう一度",
|
||||
"这笔转账已经被别的订单用过了": "この送金はすでに別の注文で使われています",
|
||||
"币种不对": "通貨が違います",
|
||||
"这笔施舍当前状态不能回填": "この施しの状態では注文番号を送信できません",
|
||||
"这个网络今天丢得够多了": "このネットワークからは今日はもう十分投げました",
|
||||
"今天已经丢过了,明天再来": "今日はもう投げました。明日また",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "未払い",
|
||||
"待确认": "確認待ち",
|
||||
"已到账": "入金済み",
|
||||
"已过期": "期限切れ",
|
||||
"已关闭": "終了",
|
||||
"已拒绝": "拒否",
|
||||
"空碗未入帮": "空の椀・未入門",
|
||||
"一袋弟子": "一袋弟子",
|
||||
"二袋弟子": "二袋弟子",
|
||||
"三袋弟子": "三袋弟子",
|
||||
"四袋弟子": "四袋弟子",
|
||||
"五袋弟子": "五袋弟子",
|
||||
"六袋弟子": "六袋弟子",
|
||||
"七袋弟子": "七袋弟子",
|
||||
"八袋弟子": "八袋弟子",
|
||||
"九袋长老": "九袋長老",
|
||||
"帮主": "幫主",
|
||||
"副帮主": "副幫主",
|
||||
"传功长老": "伝功長老",
|
||||
"执法长老": "執法長老",
|
||||
"掌棒龙头": "掌棒竜頭",
|
||||
"掌钵龙头": "掌鉢竜頭",
|
||||
"长老": "長老",
|
||||
"舵主": "舵主",
|
||||
"弟子": "弟子",
|
||||
"总舵": "総舵",
|
||||
"投了个硬币": "コイン一枚",
|
||||
"善心人": "善き人",
|
||||
"大善人": "大旦那",
|
||||
"活菩萨": "生き仏",
|
||||
"财神爷": "福の神",
|
||||
"刚刚": "たった今",
|
||||
"%d 分钟前": "%d 分前",
|
||||
"%d 小时前": "%d 時間前",
|
||||
"%d 天前": "%d 日前",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 한국어. key 는 중국어 원문(템플릿/코드의 T "…"), %s/%d 순서는 중국어와 동일.
|
||||
func init() {
|
||||
translations["ko"] = map[string]string{
|
||||
// ---- 站名 / meta ----
|
||||
"赛博要饭": "사이버 거지",
|
||||
"赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "사이버 거지: 한 푼만 적선해 주세요. Binance Pay로 적선하고 공덕부에 한마디 남기기. 돈이 없으면 무료 동전이라도. X에 트윗 한 번이면 내 그릇도 열 수 있어요.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "한 푼만 적선해 주세요. 적선하면 공덕부에 이름이 오르고, 무료 동전도 사랑이에요.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · 사이버 거지, 한 푼만 적선해 주세요",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "한 푼만 적선해 주세요. Binance Pay로 적선하고 공덕부에 한마디 남기기.",
|
||||
"#赛博丐帮": "#사이버개방",
|
||||
"(已屏蔽:%s)": "(숨김: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "거리로 돌아가기",
|
||||
"回到刚才看的碗": "아까 보던 그릇으로",
|
||||
"声音开关": "소리 켜기/끄기",
|
||||
"声音": "소리",
|
||||
"排行榜": "랭킹",
|
||||
"我的后台": "내 관리실",
|
||||
"站长": "주인 ",
|
||||
"登录": "로그인",
|
||||
"我的站": "내 그릇",
|
||||
"开通要饭站": "동냥 시작하기",
|
||||
"🙏 行行好,赏口饭吃": "🙏 한 푼만 적선해 주세요",
|
||||
"🪙 一毛也是爱": "🪙 한 푼도 사랑이에요",
|
||||
"💸 投币就上榜": "💸 적선하면 랭킹 등록",
|
||||
"📜 留一句话刻功德簿": "📜 공덕부에 한마디 새기기",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 트윗 한 번이면 내 그릇이 생겨요",
|
||||
"👾 赛博丐帮,人人有碗": "👾 사이버 개방, 누구나 그릇 하나쯤은",
|
||||
"· 赛博丐帮,行行好": "· 사이버 개방 · 한 푼만 적선해 주세요",
|
||||
"作者": "만든 사람",
|
||||
"收款由": "결제는",
|
||||
"驱动 · 字体": "제공 · 폰트",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "소리: 꺼짐",
|
||||
"声音:开(点击静音)": "소리: 켜짐 (클릭하면 음소거)",
|
||||
"点一下开始播放": "탭해서 음악 켜기",
|
||||
"已复制": "복사됨",
|
||||
"功德 +": "공덕 +",
|
||||
"你的名号和留言已刻上功德簿": "당신의 이름과 한마디가 공덕부에 새겨졌어요",
|
||||
"看看功德簿": "공덕부 보기",
|
||||
"分享卡片": "공유 카드",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "제출했어요. 주인이 확인하면 랭킹에 올라갑니다. 이 페이지는 자동으로 갱신돼요.",
|
||||
"这笔施舍已": "이 적선은 ",
|
||||
"过期": "만료되었어요",
|
||||
"下单失败": "주문 생성에 실패했어요",
|
||||
"被站长拒绝": "주인에게 거절되었어요",
|
||||
"关闭": "닫혔어요",
|
||||
",请回到页面重新投币。": ". 페이지로 돌아가 다시 적선해 주세요.",
|
||||
"没成功,再试试": "실패했어요, 다시 해보세요",
|
||||
"网络开小差了": "네트워크가 잠깐 딴짓 중",
|
||||
"分页": "페이지 이동",
|
||||
"‹ 上一页": "‹ 이전",
|
||||
"下一页 ›": "다음 ›",
|
||||
"页": "페이지",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "주인 로그인 ·",
|
||||
"🔑 站长登录": "🔑 주인 로그인",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "「X 사용자명 + 그릇을 열 때 정한 비밀번호」로 관리실에 로그인하세요. 메인 사이트 주인은 사용자명을 비워 두세요.",
|
||||
"X 用户名": "X 사용자명",
|
||||
"例如 qianyuwing(主站留空)": "예: qianyuwing (메인 사이트는 비워 두기)",
|
||||
"口令": "비밀번호",
|
||||
"忘了口令?": "비밀번호를 잊으셨나요?",
|
||||
"用 X 发推找回": "X 트윗으로 찾기",
|
||||
"。还没有要饭站?": ". 아직 그릇이 없나요?",
|
||||
"用 X 开一个": "X로 하나 열기",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "관리실 ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 개업 축하! 당신의 그릇",
|
||||
"已上线": "이 열렸어요",
|
||||
"(待主站站长收录后进榜)": " (메인 사이트 주인이 등록하면 랭킹에 들어가요)",
|
||||
"下一步:": "다음 단계: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "아래 「수금 방법」에 Binance UID를 입력하세요 (10초면 끝). 안 하면 아무도 돈을 보낼 수 없어요.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "다음부터는 %s 로 들어오세요 (X 사용자명 %s + 비밀번호). 잊어버리면 트윗으로 다시 찾을 수 있어요.",
|
||||
"后台": "관리실",
|
||||
"· 碗里": "· 그릇 안",
|
||||
"位施主 ·": "명의 시주 ·",
|
||||
"次 · 钢镚": "회 · 동전",
|
||||
"待收录": "등록 대기",
|
||||
"🔑 改口令": "🔑 비밀번호",
|
||||
"退出": "로그아웃",
|
||||
"⏳ 待确认": "⏳ 확인 대기",
|
||||
"✏️ 资料": "✏️ 프로필",
|
||||
"💰 收款方式": "💰 수금 방법",
|
||||
"📜 施舍记录": "📜 적선 기록",
|
||||
"🏚 所有站点": "🏚 모든 그릇",
|
||||
"🧹 留言巡查": "🧹 한마디 순찰",
|
||||
"⏳ 待确认的施舍": "⏳ 확인 대기 중인 적선",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Binance 앱에서 입금(금액과 메모 코드)을 확인한 뒤 승인하면 랭킹에 올라가요.",
|
||||
"备注码": "메모 코드",
|
||||
"· 币安订单": "· Binance 주문",
|
||||
"✓ 确认到账": "✓ 입금 확인",
|
||||
"✗ 没收到": "✗ 못 받음",
|
||||
"站点标题": "그릇 이름",
|
||||
"(来自 X @": "(X @",
|
||||
",锁定)": " 에서 가져옴, 잠김)",
|
||||
"头像 emoji": "아바타 이모지",
|
||||
"一句话口号": "한 줄 슬로건",
|
||||
"绑定 X": "X 연결",
|
||||
"(主页链接或 @名字,留空不显示)": "(프로필 링크 또는 @이름, 비우면 표시 안 함)",
|
||||
"https://x.com/你的名字": "https://x.com/내이름",
|
||||
"保存资料": "프로필 저장",
|
||||
"config.env 配置": "config.env 에서 설정",
|
||||
"已绑币安 Key · 自动确认": "Binance Key 연결됨 · 자동 확인",
|
||||
"直接转账 · UID": "직접 송금 · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ 아직 그릇이 없어요, 눌러서 설정",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "메인 사이트의 수금 방법은 서버의 config.env 에서 설정해요. 현재: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "BinancePayTool 게이트웨이 자동 확인 (기본 계정)",
|
||||
"直接转账": "직접 송금",
|
||||
"校验网关默认账号": "게이트웨이 기본 계정 검증",
|
||||
"✅ 已绑定币安账号(UID": "✅ Binance 계정 연결됨 (UID",
|
||||
"),施主付款后": "). 시주가 결제하면 ",
|
||||
"自动确认上榜": "자동으로 확인되어 랭킹에 올라가요",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " 결제 화면에 당신의 수금 QR / 원터치 열기가 표시돼요.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " 수금 링크를 추가하면 시주가 QR 스캔 / 원터치로 보낼 수 있어요.",
|
||||
"重新校验 Key": "Key 다시 검증",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "연결을 해제하면 직접 송금 모드가 돼요 (입금을 직접 확인해야 함). 계속할까요?",
|
||||
"解绑": "연결 해제",
|
||||
"换一个 Key / 更新收款链接": "Key 변경 / 수금 링크 갱신",
|
||||
"当前是": "현재 ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": " 모드예요. 시주가 Binance 앱에서 당신의 UID로 송금하고 「적선했어요」를 누르면, 관리실에서 확인 후 랭킹에 올라가요.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ 아직 그릇이 없어요: Binance UID만 입력하면 돈을 받을 수 있어요. 10초면 끝.",
|
||||
"方式一:填币安 UID(最简单)": "방법 1: Binance UID 입력 (가장 간단)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Binance 앱 → 왼쪽 위 아바타 탭, 그 아래 숫자가 바로 당신의",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (Pay ID이기도 해요). 시주는 적선할 때 이걸 보고 Binance 앱 「페이 → 송금」에 입력하면 수수료 없이 보낼 수 있어요.",
|
||||
"币安 UID": "Binance UID",
|
||||
"例如 12345678": "예: 12345678",
|
||||
"收款链接": "수금 링크",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(선택. 있으면 시주가 QR 스캔 / 원터치로 Binance 앱을 열 수 있고, 없어도 UID로 송금할 수 있어요)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "얻는 법: Binance 앱 수금 화면에서 「이미지 저장」 후, 아무 QR 인식 앱(카메라, 사진 앱도 가능)으로 이미지 속 링크를 읽어 여기에 붙여 넣으세요.",
|
||||
"保存": "저장",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "방법 2: 읽기 전용 Binance API Key 연결 (입금 자동 확인)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "시주가 결제하면 자동으로 랭킹에 올라가고, 직접 확인할 필요가 없어요. Key는 「읽기 활성화」 권한만 있으면 되고 자금은 옮길 수 없어요. 이 사이트는 Key를 저장하지 않고 결제 게이트웨이가 암호화해 보관해요.",
|
||||
"共": "총",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "건 · 광고는 한마디 숨기기 또는 사용자 차단 (기록은 유지) · 답글 가능",
|
||||
"已屏蔽此人": "차단된 사용자",
|
||||
"(已屏蔽:": "(숨김: ",
|
||||
"🥣 站长:": "🥣 주인: ",
|
||||
"恢复留言": "한마디 다시 표시",
|
||||
"屏蔽留言": "한마디 숨기기",
|
||||
"恢复此人": "차단 해제",
|
||||
"屏蔽此人": "이 사람 차단",
|
||||
"回一句…": "답글 달기…",
|
||||
"回复": "답글",
|
||||
"还没有施舍记录": "아직 적선 기록이 없어요",
|
||||
"🔑 修改口令": "🔑 비밀번호 변경",
|
||||
"新口令(至少 6 位)": "새 비밀번호 (6자 이상)",
|
||||
"再输一遍": "한 번 더 입력",
|
||||
"改完后其它设备上的登录会失效。": "변경하면 다른 기기에서는 로그아웃돼요.",
|
||||
"确认修改": "변경하기",
|
||||
"🏚 所有要饭站": "🏚 모든 그릇",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "개 · 규칙 위반 시 제명 · 주인의 비밀번호 재설정 가능",
|
||||
"已除名": "제명됨",
|
||||
"未收录": "미등록",
|
||||
"已绑 Key 自动确认": "Key 연결, 자동 확인",
|
||||
"位施主 · 钢镚": "명의 시주 · 동전",
|
||||
"开张": " 개업",
|
||||
"取消收录": "등록 취소",
|
||||
"收录上榜": "등록하기",
|
||||
"除名": "제명",
|
||||
"恢复": "복구",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "/%s 의 비밀번호를 재설정할까요? 새 비밀번호는 한 번만 표시돼요.",
|
||||
"重置口令": "비밀번호 재설정",
|
||||
"还没有子站": "아직 그릇이 없어요",
|
||||
"🧹 全站最新留言": "🧹 전체 최신 한마디",
|
||||
"条 · 跨站点巡查广告": "건 · 모든 그릇의 광고 순찰",
|
||||
"暂无留言": "아직 한마디가 없어요",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Binance 앱 → 계정 → API 관리 → API 생성: ",
|
||||
"只勾「允许读取」": "「읽기 활성화」만 체크",
|
||||
",其它权限都不要,": ", 다른 권한은 주지 말고, ",
|
||||
"不用设 IP 白名单": "IP 화이트리스트도 필요 없어요",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (읽기 전용 Key로는 자금을 옮길 수 없어요). Key는 입금 내역을 읽는 데만 쓰이고, 서버에 암호화 저장되며 절대 표시되지 않아요.",
|
||||
"(App 头像页可见)": "(앱 프로필 화면에서 볼 수 있어요)",
|
||||
"(选填,填了施主能扫码)": "(선택, 있으면 시주가 QR을 스캔할 수 있어요)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "수금 링크 얻는 법: Binance 앱 수금 화면에서 「이미지 저장」 후, 아무 QR 인식 앱으로 이미지 속 링크를 읽으세요.",
|
||||
"绑定并校验": "연결하고 검증",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "X로 비밀번호 찾기",
|
||||
"🔑 用 X 找回口令": "🔑 X로 비밀번호 찾기",
|
||||
"🏚 开通我的要饭站": "🏚 내 그릇 열기",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "인증 코드가 담긴 트윗을 올려 본인임을 증명하면 비밀번호를 재설정할 수 있어요.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "먼저 적선할 필요 없어요. X 계정으로 트윗 한 번이면 열려요. 그릇 이름은 X 표시 이름, 아바타는 X 프로필 사진, X 계정 하나에 그릇 하나. 트윗이 곧 거리에 그릇을 내놓는 홍보가 돼요.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 지금 앱 내장 브라우저예요. 원터치 트윗이 X를 못 열거나, 돌아왔을 때 상태가 사라질 수 있어요.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "오른쪽 위 「⋯」에서 「브라우저에서 열기」를 선택",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (또는 링크를 복사해 Safari / Chrome에서 열기)한 뒤 진행하세요.",
|
||||
"复制本页链接": "이 페이지 링크 복사",
|
||||
"发一条推文,带上验证码": "인증 코드를 담아 트윗 올리기",
|
||||
"推文内容(可以随便改,只要保留验证码)": "트윗 내용 (자유롭게 수정 가능, 코드만 남겨 두세요)",
|
||||
"换一条": "다른 문구",
|
||||
"🐦 一键去 X 发推": "🐦 X에서 트윗하기",
|
||||
"复制文案": "문구 복사",
|
||||
"没拉起 X App?点这里用网页版发 →": "X 앱이 안 열리나요? 여기서 웹으로 올리기 →",
|
||||
"验证码": "인증 코드",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "는 대소문자 구분 없이 24시간 유효해요. 문구에 그릇 링크가 들어 있어서 트윗이 곧 홍보가 돼요.",
|
||||
"把推文链接贴回来": "트윗 링크를 여기에 붙여 넣기",
|
||||
"推文链接": "트윗 링크",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/내이름/status/1234567890",
|
||||
"验证": "인증",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "트윗을 올린 뒤 공유 버튼 → 「링크 복사」를 누르면 돼요.",
|
||||
"还没开过站?": "아직 그릇이 없나요? ",
|
||||
"去开一个": "하나 열기",
|
||||
"已经开过站?": "이미 그릇이 있나요? ",
|
||||
"站长登录": "주인 로그인",
|
||||
"🔑 设置新口令": "🔑 새 비밀번호 설정",
|
||||
"保存并登录": "저장하고 로그인",
|
||||
"✅ X 验证通过": "✅ X 인증 완료",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· 이름과 아바타는 X에서 가져와요 (아바타는 주기적으로 동기화)",
|
||||
"站点地址": "그릇 주소",
|
||||
"(就是你的 X 用户名,不用填)": "(X 사용자명 그대로예요, 입력 필요 없음)",
|
||||
"行行好,赏口饭吃 🙏": "한 푼만 적선해 주세요 🙏",
|
||||
"登录口令": "로그인 비밀번호",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "다음부터 「X 사용자명 + 비밀번호」로 관리실에 로그인해요. 잊으면 트윗으로 다시 찾을 수 있어요.",
|
||||
"口令(至少 6 位)": "비밀번호 (6자 이상)",
|
||||
"开张 🏚": "개업 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "개업 후 관리실에서 Binance Key를 연결하거나 UID를 입력하면 돈을 받을 수 있어요. 내용은 본인 책임이며, 광고 그릇은 개방에서 제명돼요.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "%s 에게 적선",
|
||||
"先回去看看": "일단 돌아가기",
|
||||
"给 %s 投币": "%s 에게 적선 중",
|
||||
"金额要": "금액은 ",
|
||||
"一分不差": "정확히",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": " 맞춰 주세요. 게이트웨이가 이 고유한 끝자리로 자동 대조해서 송금 후 몇 초 안에 확인돼요",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Binance Pay로 주인에게 직접 송금하고, 보낸 뒤 아래 「적선했어요」를 누르세요",
|
||||
"打开币安 App 转账": "Binance 앱에서 송금",
|
||||
"唤起后手动输入金额": "앱에서 금액 입력:",
|
||||
",备注填": ", 메모는",
|
||||
"用另一台手机扫码": "다른 폰으로 스캔",
|
||||
"收款二维码": "수금 QR 코드",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Binance 앱 → 「스캔」 → 금액 입력:",
|
||||
"或手动转账": "또는 직접 송금",
|
||||
"转账信息": "송금 정보",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Binance 앱 → 하단 「페이」 → 「송금」 → 받는 사람에 아래 UID 입력 → 금액은",
|
||||
"→ 备注填": "→ 메모는",
|
||||
"→ 转完回来点「我已施舍」": "→ 보낸 뒤 돌아와서 「적선했어요」 누르기",
|
||||
"收款方": "받는 사람",
|
||||
"复制": "복사",
|
||||
"金额": "금액",
|
||||
"备注": "메모",
|
||||
"等待到账…转完自动确认,本页会自动更新": "입금 대기 중… 보내면 자동 확인되고, 이 페이지는 자동으로 갱신돼요",
|
||||
"付了但一直没确认?": "보냈는데 확인이 안 되나요?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Binance 주문 번호 (18자리 숫자, 송금 상세에 있어요)",
|
||||
"我付过了,帮我核对": "보냈어요, 확인해 주세요",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Binance 주문 번호 (선택, 18자리 숫자. 입력하면 주인이 더 빨리 확인해요)",
|
||||
"我已施舍,等站长确认": "적선했어요, 주인 확인 대기",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "「적선했어요」는 적선을 시작한 기기에서 눌러 주세요.",
|
||||
"打不开?": "안 열리나요? ",
|
||||
"用网关收银页支付": "게이트웨이 결제 페이지로 결제",
|
||||
"施舍进行中": "적선 진행 중",
|
||||
"🙏 谢谢施主": "🙏 시주님, 고맙습니다",
|
||||
"你在 %s 的施主榜排第 %d 位": "당신은 %s 의 시주 랭킹 %d 위예요",
|
||||
"回到 %s 的碗": "%s 의 그릇으로 돌아가기",
|
||||
"复制链接分享": "링크 복사해서 공유",
|
||||
"🖼 分享卡片": "🖼 공유 카드",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "픽셀 공유 이미지를 만들어 X나 친구들에게 보내고, 거지 홍보도 한 번 해 주세요.",
|
||||
"生成分享卡": "공유 카드 만들기",
|
||||
"分享卡": "공유 카드",
|
||||
"长按图片保存,或": "이미지를 길게 눌러 저장하거나, ",
|
||||
"下载": "다운로드",
|
||||
"🏚 你也可以要饭": "🏚 당신도 동냥할 수 있어요",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "X 계정으로 트윗 한 번이면 내 그릇이 열리고, 받은 돈은 바로 당신의 Binance 계정으로 들어가요.",
|
||||
"站长没有确认这笔施舍": "주인이 이 적선을 확인하지 않았어요",
|
||||
"这笔施舍已过期": "이 적선은 만료되었어요",
|
||||
"如果你确实转了,请联系站长核对。": "정말 보냈다면 주인에게 연락해 확인해 주세요.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "결제하지 않았다면 돈이 빠지지 않아요. 적선하려면 다시 시작해 주세요.",
|
||||
"再来一次": "다시 하기",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "랭킹 ·",
|
||||
"🏆 施主榜": "🏆 시주",
|
||||
"🥣 乞丐榜": "🥣 거지",
|
||||
"🪙 人气榜": "🪙 인기",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · 모든 그릇 합산 · 총",
|
||||
"位施主": "명의 시주",
|
||||
"总榜": "전체",
|
||||
"本周": "이번 주",
|
||||
"要到最多的要饭站 · 共": "가장 많이 받은 그릇 · 총",
|
||||
"个": "개",
|
||||
"收到钢镚最多(免费投)· 共": "동전을 가장 많이 받은 그릇 (무료) · 총",
|
||||
"← 回到刚才看的碗": "← 아까 보던 그릇으로",
|
||||
"施主自己填的 X,未经验证": "시주가 직접 적은 X, 미인증",
|
||||
"次 · 施舍过": "회 · 적선한 거지",
|
||||
"个乞丐": "명",
|
||||
"榜上无人": "아직 아무도 없어요",
|
||||
"就是我": "나",
|
||||
"还没有人上榜": "아직 랭킹에 아무도 없어요",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "동냥 중 ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ 이 그릇은 아직 개방에 등록되지 않아 랭킹에 들어가지 않아요.",
|
||||
"主站站长审核后会收录。": "메인 사이트 주인이 심사 후 등록해요.",
|
||||
"· 榜 #": "· 순위 #",
|
||||
"升%s要 %s": "%s 승급까지 EXP %s",
|
||||
"满级": "만렙",
|
||||
"饱食度": "포만감",
|
||||
"今天还没吃饭": "오늘 아직 못 먹었어요",
|
||||
"今天有人投币了": "오늘 누가 적선했어요",
|
||||
"今天丢过了": "오늘은 이미 던졌어요",
|
||||
"丢个钢镚(免费)": "동전 던지기 (무료)",
|
||||
"💸 投币施舍": "💸 적선하기",
|
||||
"还没摆碗,暂不能投币": "아직 그릇이 없어서 적선할 수 없어요",
|
||||
"去配置": "설정하러 가기",
|
||||
"钢镚": "동전",
|
||||
"· 今日": "· 오늘",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 동전 1개 =",
|
||||
"碗里已有": "그릇 안",
|
||||
"施主": "시주",
|
||||
"人": "명",
|
||||
"今日": "오늘",
|
||||
"🕹️ 投币施舍": "🕹️ 동전 넣기",
|
||||
"玩家名(上榜用,可留空)": "플레이어 이름 (랭킹용, 비워도 됨)",
|
||||
"匿名施主": "익명의 시주",
|
||||
"你的 X(可选,显示头像)": "당신의 X (선택, 아바타 표시)",
|
||||
"投多少": "얼마나 넣을까",
|
||||
"✏️ 自定义": "✏️ 직접 입력",
|
||||
"输入金额,最多两位小数": "금액 입력, 소수점 둘째 자리까지",
|
||||
"对乞丐喊话": "거지에게 한마디",
|
||||
"例如:别买烟了,去吃饭": "예: 담배 사지 말고 밥 사 먹어",
|
||||
"投币 💸": "적선 💸",
|
||||
"投币": "적선",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Binance 앱으로 QR 스캔 / 원터치 결제. 입금되면 자동으로 공덕부에 새겨져요.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Binance Pay로 주인에게 직접 송금하고, 제출하면 주인이 확인 후 랭킹에 올려요.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "최소 %s, 최대 %s. 한마디에 링크나 연락처는 넣을 수 없어요.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "이 거지는 아직 그릇을 내놓지 않았어요 (수금 방법 미설정). 지금은 돈을 받을 수 없어요.",
|
||||
"去后台配置 →": "관리실에서 설정 →",
|
||||
"🏚 想自己要饭?": "🏚 나도 동냥하고 싶다면?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "X 계정으로 트윗 한 번이면 내 그릇이 열려요. 전용 주소, 내 그릇, 공덕부와 시주 랭킹까지. 돈은 바로 당신의 Binance 계정으로.",
|
||||
"用 X 开通我的要饭站 →": "X로 내 그릇 열기 →",
|
||||
"人气榜": "인기",
|
||||
"功德簿": "공덕부",
|
||||
"施主榜": "시주",
|
||||
"乞丐榜": "거지",
|
||||
"已屏蔽的施主": "차단된 시주",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "공덕부가 텅 비었어요. 첫 동전이 여기에 새겨져요",
|
||||
"HIGH SCORE · 给": "HIGH SCORE ·",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "에게 가장 많이 적선한 사람 · 🏁 첫 시주 💎 최고 금액 🔥 단골",
|
||||
"丐帮排名 · 要到最多的要饭站": "개방 랭킹 · 가장 많이 받은 그릇",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "인기 랭킹 · 동전을 가장 많이 받은 그릇 (동전은 무료)",
|
||||
"次": "회",
|
||||
"榜上无人,第一个投币的就是首席施主": "아직 아무도 없어요. 첫 번째로 적선하면 수석 시주가 돼요",
|
||||
"本站": "이 그릇",
|
||||
"叮!钢镚 +1": "땡! 동전 +1",
|
||||
"没丢进去": "그릇에 안 들어갔어요",
|
||||
"网络开小差了,再试一次": "네트워크가 잠깐 딴짓 중, 다시 해보세요",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "금액 형식이 잘못됐어요 (소수점 둘째 자리까지)",
|
||||
"最少施舍 %s %s": "최소 적선은 %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "최대 적선은 %s %s. 정말 그만큼 있다면 나눠서 보내 주세요",
|
||||
"支付网关开小差了:%s": "결제 게이트웨이가 잠깐 딴짓 중: %s",
|
||||
"手速太快了": "너무 빨라요",
|
||||
"这个乞丐不在": "이 거지는 여기 없어요",
|
||||
"请先打开要饭页再丢": "먼저 그릇 페이지를 열어 주세요",
|
||||
"服务器开小差了": "서버가 잠깐 딴짓 중",
|
||||
"手速太快了,歇一会儿": "너무 빨라요, 잠깐 쉬어요",
|
||||
"已提交,等站长确认": "제출했어요, 주인 확인 대기",
|
||||
"网关返回 %s": "게이트웨이 응답: %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "「%s」에서 동냥 중인 내 그릇 비밀번호를 잊어서, 본인 인증 트윗 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "「%s」에 그릇 하나 내놨어요 🥣 한 푼만 적선해 주세요~ %s #사이버개방 %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "사이버 개방에 입문, 오늘부터 정식 거지 🧎 한 푼도 사랑, 무료 동전도 환영 🪙 %s #사이버개방 %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "회사 관두고 동냥으로 전직. 그릇은 여기, 착한 분들 한 푼만 🥣 %s #사이버개방 %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "개방 신입 모집, 제가 먼저 동냥 시작 🥣 적선하면 공덕부에 이름 등록, 무료 동전도 인정 %s #사이버개방 %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "이 트윗에 인증 코드 %s 가 없어요. 제대로 올렸는지 확인해 주세요",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s 는 이미 그릇이 있어요: %s. 비밀번호를 잊었다면 로그인 페이지에서 X로 재설정하세요.",
|
||||
"@%s 已经开过站了": "@%s 는 이미 그릇이 있어요",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "주소 %s 는 이미 사용 중이에요 (@%s 가 이미 그릇을 열었을 수 있어요. 비밀번호를 잊었다면 로그인 페이지에서 X로 찾기)",
|
||||
"@%s 还没开过要饭站": "@%s 는 아직 그릇이 없어요",
|
||||
"解绑币安 Key 失败:%s": "Binance Key 연결 해제 실패: %s",
|
||||
"绑定失败:%s": "연결 실패: %s",
|
||||
"解绑失败:%s": "연결 해제 실패: %s",
|
||||
"校验失败:%s": "검증 실패: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "/%s 의 비밀번호를 %s 로 재설정했어요 (한 번만 표시돼요, 주인에게 전해 주세요)",
|
||||
"本站未配置支付网关": "결제 게이트웨이가 설정되지 않았어요",
|
||||
"网关连不上,请稍后再试": "게이트웨이에 연결할 수 없어요, 잠시 후 다시 시도하세요",
|
||||
"方法不允许": "허용되지 않는 메서드예요",
|
||||
"主站不存在": "메인 사이트가 없어요",
|
||||
"页面不存在": "페이지가 없어요",
|
||||
"赛博丐帮没有这条路。": "사이버 개방에 이런 길은 없어요.",
|
||||
"要么还没开张,要么已被丐帮除名。": "아직 개업하지 않았거나, 개방에서 제명됐어요.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "이 거지는 아직 그릇을 내놓지 않았어요 (수금 방법 미설정). 지금은 돈을 받을 수 없어요",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "X 사용자명은 영문, 숫자, 밑줄만 가능해요 (@ 는 빼도 돼요)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "이름과 한마디에 링크나 연락처는 넣지 마세요. 거지는 광고 안 받아요",
|
||||
"没有这笔施舍": "그런 적선이 없어요",
|
||||
"站点不存在": "그릇이 없어요",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "적선을 시작한 기기에서 「적선했어요」를 눌러 주세요",
|
||||
"币安订单编号是 18 位数字,不填也行": "Binance 주문 번호는 18자리 숫자예요 (선택)",
|
||||
"核对失败": "확인 실패",
|
||||
"这笔施舍不是网关模式": "이 적선은 게이트웨이 모드가 아니에요",
|
||||
"试得太频繁了,一分钟后再试": "너무 자주 시도했어요, 1분 뒤 다시 해보세요",
|
||||
"请在发起施舍的那台设备上回填": "적선을 시작한 기기에서 주문 번호를 입력해 주세요",
|
||||
"币安订单编号是 18 位数字": "Binance 주문 번호는 18자리 숫자예요",
|
||||
"本站未开放开站": "이 사이트는 그릇 개설을 받지 않아요",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "인증 코드가 만료됐어요 (또는 다른 브라우저에서 생성됨). 다시 생성해 주세요",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "트윗 링크가 잘못됐어요. https://x.com/내이름/status/1234567890 형식이어야 해요",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "이 트윗은 인증 코드보다 먼저 올라갔어요. 코드를 생성한 뒤 올린 트윗을 사용하세요",
|
||||
"验证已失效,请重新验证": "인증이 만료됐어요, 다시 인증해 주세요",
|
||||
"口号和介绍里别放链接、联系方式": "슬로건에 링크나 연락처는 넣지 마세요",
|
||||
"口令至少 6 位": "비밀번호는 6자 이상이어야 해요",
|
||||
"两次口令不一致": "비밀번호가 서로 달라요",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "메인 사이트 비밀번호는 서버의 config.env 에서 바꿔요. X 찾기는 사용할 수 없어요",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "이 X 계정은 오늘 재설정을 너무 많이 했어요, 내일 다시 오세요",
|
||||
"口令至少 6 位,且两次一致": "비밀번호는 6자 이상이고 두 번 똑같이 입력해야 해요",
|
||||
"口令已重置,其它设备上的登录已失效": "비밀번호를 재설정했어요. 다른 기기에서는 로그아웃됐어요",
|
||||
"X 用户名或口令不对": "X 사용자명 또는 비밀번호가 틀렸어요",
|
||||
"请先登录": "먼저 로그인해 주세요",
|
||||
"登录状态已失效,请重新登录。": "세션이 만료됐어요, 다시 로그인해 주세요.",
|
||||
"歇一会儿再来。": "잠깐 쉬었다가 다시 오세요.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "이 그릇에 비밀번호 오류가 너무 많아요. 잠깐 쉬어요.",
|
||||
"站点标题不能为空": "그릇 이름은 비울 수 없어요",
|
||||
"资料里别放链接、联系方式": "프로필에 링크나 연락처는 넣지 마세요",
|
||||
"资料已保存": "프로필을 저장했어요",
|
||||
"主站的收款方式在服务器 config.env 里改": "메인 사이트의 수금 방법은 서버의 config.env 에서 바꿔요",
|
||||
"填一下币安 UID,不然钱没处去": "Binance UID를 입력해 주세요. 없으면 돈이 갈 곳이 없어요",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "직접 송금으로 전환했어요. 시주가 송금 후 직접 알리면 여기서 확인해요",
|
||||
"本站不支持绑定": "이 사이트는 연결을 지원하지 않아요",
|
||||
"API Key 和 Secret 都要填": "API Key와 Secret 둘 다 입력해야 해요",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Binance UID는 숫자만이에요 (앱 프로필 화면에서 볼 수 있어요)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "연결 성공! Binance 검증을 통과했어요. 이제 적선은 자동으로 확인되어 랭킹에 올라가요",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "연결을 해제했어요. 지금은 직접 송금 모드예요. UID를 꼭 입력해 두세요",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "검증 통과: Binance Key가 유효해요. 입금은 자동으로 확인돼요",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "메인 사이트 비밀번호는 서버의 config.env (ADMIN_PASSWORD) 에서 바꿔요",
|
||||
"口令已修改,其它设备上的登录已失效": "비밀번호를 바꿨어요. 다른 기기에서는 로그아웃됐어요",
|
||||
"这笔施舍当前不能确认/拒绝": "이 적선은 지금 승인/거절할 수 없어요",
|
||||
"只能回复自己站的施舍": "내 그릇의 적선에만 답글을 달 수 있어요",
|
||||
"回复里别放链接、联系方式": "답글에 링크나 연락처는 넣지 마세요",
|
||||
"未知操作": "알 수 없는 작업이에요",
|
||||
"无权操作": "권한이 없어요",
|
||||
"没有这个站": "그런 그릇은 없어요",
|
||||
"未配置支付网关": "결제 게이트웨이가 설정되지 않았어요",
|
||||
"请求来源不对": "요청 출처가 잘못됐어요",
|
||||
"请从本站页面操作。": "이 사이트 페이지에서 진행해 주세요.",
|
||||
"页面渲染失败": "페이지 렌더링에 실패했어요",
|
||||
"稍后再试。": "잠시 후 다시 시도하세요.",
|
||||
"地址已被占用": "주소가 이미 사용 중이에요",
|
||||
"这个 X 账号已经开过站了": "이 X 계정은 이미 그릇이 있어요",
|
||||
"连不上 X 接口: %w": "X에 연결할 수 없어요: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "트윗을 찾을 수 없어요 (링크가 잘못됐거나 비공개)",
|
||||
"推文读不到(可能被删除或账号受保护)": "트윗을 읽을 수 없어요 (삭제됐거나 보호된 계정)",
|
||||
"头像地址不在允许的域名": "아바타 주소가 허용된 도메인이 아니에요",
|
||||
"头像下载失败": "아바타 다운로드에 실패했어요",
|
||||
"头像不是有效图片": "아바타가 유효한 이미지가 아니에요",
|
||||
"金额格式不对": "금액 형식이 잘못됐어요",
|
||||
"收款链接过长": "수금 링크가 너무 길어요",
|
||||
"收款链接须为 https 链接": "수금 링크는 https 링크여야 해요",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "수금 링크는 Binance 도메인이어야 해요 (app.binance.com/… 같은)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "X 프로필 링크는 https://x.com/내이름 형식이어야 해요",
|
||||
"核对成功,已到账": "확인 성공, 입금됐어요",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "송금은 찾았지만 금액이 부족해요. 실제 낸 금액으로 기록했어요",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "송금을 찾지 못했어요. 주문 번호와 받는 계정이 맞는지 확인하고, Binance에 입금된 뒤 다시 시도하세요",
|
||||
"这笔转账已经被别的订单用过了": "이 송금은 이미 다른 주문에 사용됐어요",
|
||||
"币种不对": "통화가 달라요",
|
||||
"这笔施舍当前状态不能回填": "이 적선의 현재 상태에서는 주문 번호를 입력할 수 없어요",
|
||||
"这个网络今天丢得够多了": "이 네트워크는 오늘 동전을 충분히 던졌어요",
|
||||
"今天已经丢过了,明天再来": "오늘은 이미 던졌어요, 내일 다시 오세요",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "미결제",
|
||||
"待确认": "확인 대기",
|
||||
"已到账": "입금됨",
|
||||
"已过期": "만료됨",
|
||||
"已关闭": "닫힘",
|
||||
"已拒绝": "거절됨",
|
||||
"空碗未入帮": "빈 그릇 (미입문)",
|
||||
"一袋弟子": "일결 제자",
|
||||
"二袋弟子": "이결 제자",
|
||||
"三袋弟子": "삼결 제자",
|
||||
"四袋弟子": "사결 제자",
|
||||
"五袋弟子": "오결 제자",
|
||||
"六袋弟子": "육결 제자",
|
||||
"七袋弟子": "칠결 제자",
|
||||
"八袋弟子": "팔결 제자",
|
||||
"九袋长老": "구결 장로",
|
||||
"帮主": "방주",
|
||||
"副帮主": "부방주",
|
||||
"传功长老": "전공장로",
|
||||
"执法长老": "집법장로",
|
||||
"掌棒龙头": "장봉용두",
|
||||
"掌钵龙头": "장발용두",
|
||||
"长老": "장로",
|
||||
"舵主": "타주",
|
||||
"弟子": "제자",
|
||||
"总舵": "총타",
|
||||
"投了个硬币": "동전 하나 던진 분",
|
||||
"善心人": "착한 분",
|
||||
"大善人": "큰 은인",
|
||||
"活菩萨": "살아있는 보살",
|
||||
"财神爷": "재물신",
|
||||
"刚刚": "방금",
|
||||
"%d 分钟前": "%d분 전",
|
||||
"%d 小时前": "%d시간 전",
|
||||
"%d 天前": "%d일 전",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 葡萄牙语(巴西)。key 是中文原文,占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["pt"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Uma moedinha, gente boa. Doe e entre no Livro de Méritos; uma moeda grátis também é amor.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Mendigo Cyber",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Uma moedinha, gente boa. Doe com Binance Pay e deixe uma frase no Livro de Méritos.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(oculto: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Voltar pra rua",
|
||||
"回到刚才看的碗": "Voltar pra tigela que você estava vendo",
|
||||
"声音开关": "Ligar/desligar som",
|
||||
"声音": "Som",
|
||||
"排行榜": "Ranking",
|
||||
"我的后台": "Meu painel",
|
||||
"站长": "Dono ",
|
||||
"登录": "Entrar",
|
||||
"我的站": "Minha tigela",
|
||||
"开通要饭站": "Começar a mendigar",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Uma moedinha, gente boa",
|
||||
"🪙 一毛也是爱": "🪙 Cada centavo conta",
|
||||
"💸 投币就上榜": "💸 Doe e entre no ranking",
|
||||
"📜 留一句话刻功德簿": "📜 Deixe uma frase no Livro de Méritos",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Um tweet e você tem sua própria tigela",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Guilda dos Mendigos Cyber: uma tigela pra cada um",
|
||||
"· 赛博丐帮,行行好": "· Guilda dos Mendigos Cyber · Uma moedinha",
|
||||
"作者": "Autor",
|
||||
"收款由": "Pagamentos por",
|
||||
"驱动 · 字体": "· Fonte",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Som: desligado",
|
||||
"声音:开(点击静音)": "Som: ligado (clique para silenciar)",
|
||||
"点一下开始播放": "Toque para começar a música",
|
||||
"已复制": "Copiado",
|
||||
"功德 +": "Mérito +",
|
||||
"你的名号和留言已刻上功德簿": "Seu nome e sua mensagem já estão no Livro de Méritos",
|
||||
"看看功德簿": "Ver o Livro de Méritos",
|
||||
"分享卡片": "Card para compartilhar",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Enviado. Você entra no ranking assim que o dono confirmar. Esta página atualiza sozinha.",
|
||||
"这笔施舍已": "Esta doação ",
|
||||
"过期": "expirou",
|
||||
"下单失败": "não pôde ser criada",
|
||||
"被站长拒绝": "foi recusada pelo dono",
|
||||
"关闭": "foi encerrada",
|
||||
",请回到页面重新投币。": ". Volte à página e doe de novo.",
|
||||
"没成功,再试试": "Não deu certo, tenta de novo",
|
||||
"网络开小差了": "A rede deu uma cochilada",
|
||||
"分页": "Paginação",
|
||||
"‹ 上一页": "‹ Anterior",
|
||||
"下一页 ›": "Próxima ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Login do dono ·",
|
||||
"🔑 站长登录": "🔑 Login do dono",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Entre com seu usuário do X e a senha que você definiu ao abrir a tigela. Dono do site principal: deixe o usuário em branco.",
|
||||
"X 用户名": "Usuário do X",
|
||||
"例如 qianyuwing(主站留空)": "ex.: qianyuwing (em branco para o site principal)",
|
||||
"口令": "Senha",
|
||||
"忘了口令?": "Esqueceu a senha?",
|
||||
"用 X 发推找回": "Recupere com um tweet",
|
||||
"。还没有要饭站?": ". Ainda não tem tigela?",
|
||||
"用 X 开一个": "Abra uma com o X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Painel ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 Negócio aberto! Sua tigela",
|
||||
"已上线": "está no ar",
|
||||
"(待主站站长收录后进榜)": " (entra nos rankings quando o dono do site principal aprovar)",
|
||||
"下一步:": "Próximo passo: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "preencha seu UID da Binance em \"Recebimento\" aqui embaixo (dez segundos); senão ninguém consegue te pagar.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Volte por %s (usuário do X %s + sua senha). Esqueceu? Recupere com outro tweet.",
|
||||
"后台": "painel",
|
||||
"· 碗里": "· Na tigela",
|
||||
"位施主 ·": "doadores ·",
|
||||
"次 · 钢镚": "doações · moedas",
|
||||
"待收录": "não aprovada",
|
||||
"🔑 改口令": "🔑 Senha",
|
||||
"退出": "Sair",
|
||||
"⏳ 待确认": "⏳ Pendentes",
|
||||
"✏️ 资料": "✏️ Perfil",
|
||||
"💰 收款方式": "💰 Recebimento",
|
||||
"📜 施舍记录": "📜 Doações",
|
||||
"🏚 所有站点": "🏚 Todas as tigelas",
|
||||
"🧹 留言巡查": "🧹 Mensagens",
|
||||
"⏳ 待确认的施舍": "⏳ Doações aguardando confirmação",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Confira a transferência no app da Binance (valor e código da observação) e confirme para colocá-los no ranking.",
|
||||
"备注码": "Observação",
|
||||
"· 币安订单": "· Pedido Binance",
|
||||
"✓ 确认到账": "✓ Recebido",
|
||||
"✗ 没收到": "✗ Não recebido",
|
||||
"站点标题": "Nome da tigela",
|
||||
"(来自 X @": "(do X @",
|
||||
",锁定)": ", fixo)",
|
||||
"头像 emoji": "Emoji do avatar",
|
||||
"一句话口号": "Slogan em uma linha",
|
||||
"绑定 X": "Vincular X",
|
||||
"(主页链接或 @名字,留空不显示)": "(link do perfil ou @nome; em branco para ocultar)",
|
||||
"https://x.com/你的名字": "https://x.com/seunome",
|
||||
"保存资料": "Salvar perfil",
|
||||
"config.env 配置": "definido em config.env",
|
||||
"已绑币安 Key · 自动确认": "Key da Binance vinculada · confirmação automática",
|
||||
"直接转账 · UID": "Transferência direta · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Ainda sem tigela — toque para configurar",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "O método de recebimento do site principal é definido em config.env no servidor. Atual: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "Confirmação automática pelo gateway BinancePayTool (conta padrão)",
|
||||
"直接转账": "transferência direta",
|
||||
"校验网关默认账号": "Verificar conta padrão do gateway",
|
||||
"✅ 已绑定币安账号(UID": "✅ Conta Binance vinculada (UID",
|
||||
"),施主付款后": "). As doações são ",
|
||||
"自动确认上榜": "confirmadas automaticamente",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " O painel de pagamento mostra seu QR code / abertura com um toque.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Adicione um link de recebimento para os doadores escanearem ou abrirem o app com um toque.",
|
||||
"重新校验 Key": "Verificar a Key de novo",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Ao desvincular você passa para transferência direta (confirma cada pagamento na mão). Continuar?",
|
||||
"解绑": "Desvincular",
|
||||
"换一个 Key / 更新收款链接": "Trocar Key / atualizar link de recebimento",
|
||||
"当前是": "Modo atual: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Os doadores transferem para seu UID no app da Binance, tocam em \"Já doei\" e você confirma aqui.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Ainda sem tigela: preencha seu UID da Binance e já pode receber. Dez segundos.",
|
||||
"方式一:填币安 UID(最简单)": "Opção 1: seu UID da Binance (mais fácil)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "App da Binance → toque no seu avatar no canto superior esquerdo; o número embaixo dele é seu",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (também é seu Pay ID). Os doadores veem ele ao doar e enviam pelo app da Binance em \"Pagar → Transferir\", sem taxas.",
|
||||
"币安 UID": "UID da Binance",
|
||||
"例如 12345678": "ex.: 12345678",
|
||||
"收款链接": "Link de recebimento",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(opcional. Com ele os doadores escaneiam ou abrem o app da Binance com um toque; sem ele transferem pelo UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Como pegar: na página de recebimento da Binance toque em \"Salvar imagem\", leia o QR com qualquer app de leitura e cole o link aqui.",
|
||||
"保存": "Salvar",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Opção 2: vincular uma API Key da Binance somente leitura (confirmação automática)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "As doações são confirmadas sozinhas, sem trabalho manual. A Key só precisa de \"Permitir leitura\" e não consegue mover fundos; este site nunca a guarda, o gateway de pagamento a armazena criptografada.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "no total · oculte mensagens de spam ou bloqueie o usuário (o registro fica) · responda",
|
||||
"已屏蔽此人": "Usuário bloqueado",
|
||||
"(已屏蔽:": "(oculto: ",
|
||||
"🥣 站长:": "🥣 Dono: ",
|
||||
"恢复留言": "Mostrar mensagem",
|
||||
"屏蔽留言": "Ocultar mensagem",
|
||||
"恢复此人": "Desbloquear usuário",
|
||||
"屏蔽此人": "Bloquear usuário",
|
||||
"回一句…": "Responder…",
|
||||
"回复": "Responder",
|
||||
"还没有施舍记录": "Ainda não há doações",
|
||||
"🔑 修改口令": "🔑 Trocar senha",
|
||||
"新口令(至少 6 位)": "Nova senha (mín. 6 caracteres)",
|
||||
"再输一遍": "Repita",
|
||||
"改完后其它设备上的登录会失效。": "Os outros dispositivos serão desconectados.",
|
||||
"确认修改": "Trocar senha",
|
||||
"🏚 所有要饭站": "🏚 Todas as tigelas",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "no total · expulse quem quebrar as regras · redefina a senha de um dono",
|
||||
"已除名": "expulsa",
|
||||
"未收录": "não aprovada",
|
||||
"已绑 Key 自动确认": "Key vinculada, confirmação automática",
|
||||
"位施主 · 钢镚": "doadores · moedas",
|
||||
"开张": "aberta",
|
||||
"取消收录": "Tirar do ranking",
|
||||
"收录上榜": "Aprovar",
|
||||
"除名": "Expulsar",
|
||||
"恢复": "Restaurar",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Redefinir a senha de /%s? A nova senha aparece só uma vez.",
|
||||
"重置口令": "Redefinir senha",
|
||||
"还没有子站": "Ainda não há tigelas",
|
||||
"🧹 全站最新留言": "🧹 Últimas mensagens do site inteiro",
|
||||
"条 · 跨站点巡查广告": "no total · patrulha de spam em todas as tigelas",
|
||||
"暂无留言": "Ainda não há mensagens",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "App da Binance → Conta → Gerenciamento de API → Criar API: ",
|
||||
"只勾「允许读取」": "marque só \"Permitir leitura\"",
|
||||
",其它权限都不要,": ", nada mais, ",
|
||||
"不用设 IP 白名单": "sem precisar de lista de IPs",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (uma Key somente leitura não move fundos). Ela só serve para ler seus recebimentos, fica criptografada e nunca é exibida.",
|
||||
"(App 头像页可见)": "(aparece na sua página de perfil no app)",
|
||||
"(选填,填了施主能扫码)": "(opcional; permite que os doadores escaneiem um QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Como pegar o link de recebimento: na página de recebimento da Binance toque em \"Salvar imagem\" e leia o QR com qualquer app de leitura.",
|
||||
"绑定并校验": "Vincular e verificar",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Recuperar senha com o X",
|
||||
"🔑 用 X 找回口令": "🔑 Recuperar senha com o X",
|
||||
"🏚 开通我的要饭站": "🏚 Abrir minha tigela",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Poste um tweet com o código de verificação para provar que é o dono e defina uma senha nova.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Não precisa doar antes. Um tweet da sua conta do X abre sua tigela: com o nome e o avatar do seu X, uma tigela por conta. O tweet ainda leva sua tigela pra rua.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Você está no navegador interno de um app. O X pode não abrir com um toque e você pode perder o progresso ao voltar.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Toque em \"⋯\" no canto superior direito e escolha \"Abrir no navegador\"",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (ou copie o link no Safari / Chrome) antes de continuar.",
|
||||
"复制本页链接": "Copiar o link desta página",
|
||||
"发一条推文,带上验证码": "Poste um tweet com o código",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Texto do tweet (edite à vontade, só mantenha o código)",
|
||||
"换一条": "Outro",
|
||||
"🐦 一键去 X 发推": "🐦 Postar no X",
|
||||
"复制文案": "Copiar texto",
|
||||
"没拉起 X App?点这里用网页版发 →": "O app do X não abriu? Poste pela web →",
|
||||
"验证码": "O código",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "não diferencia maiúsculas e vale por 24 horas. O texto traz o link da sua tigela, então o tweet também serve de divulgação.",
|
||||
"把推文链接贴回来": "Cole aqui o link do tweet",
|
||||
"推文链接": "Link do tweet",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/seunome/status/1234567890",
|
||||
"验证": "Verificar",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Depois de postar, toque no botão de compartilhar do tweet → Copiar link.",
|
||||
"还没开过站?": "Ainda não tem tigela? ",
|
||||
"去开一个": "Abra uma",
|
||||
"已经开过站?": "Já tem tigela? ",
|
||||
"站长登录": "Login do dono",
|
||||
"🔑 设置新口令": "🔑 Nova senha",
|
||||
"保存并登录": "Salvar e entrar",
|
||||
"✅ X 验证通过": "✅ X verificado",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· nome e avatar vêm do X (o avatar sincroniza periodicamente)",
|
||||
"站点地址": "Endereço da tigela",
|
||||
"(就是你的 X 用户名,不用填)": "(é seu usuário do X; não precisa preencher)",
|
||||
"行行好,赏口饭吃 🙏": "Uma moedinha, gente boa 🙏",
|
||||
"登录口令": "Senha de login",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Depois entre com usuário do X + senha; se esquecer, recupere com outro tweet.",
|
||||
"口令(至少 6 位)": "Senha (mín. 6 caracteres)",
|
||||
"开张 🏚": "Abrir o negócio 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Depois de abrir, vincule uma Key da Binance ou informe seu UID no painel para receber. Você responde pelo seu conteúdo; tigelas de spam são expulsas pela guilda.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Doar para %s",
|
||||
"先回去看看": "Voltar por enquanto",
|
||||
"给 %s 投币": "Doando para %s",
|
||||
"金额要": "O valor precisa ser ",
|
||||
"一分不差": "exato",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": o gateway reconhece por esse final único e confirma em segundos",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Transfira direto para o dono com Binance Pay e depois toque em \"Já doei\" abaixo",
|
||||
"打开币安 App 转账": "Abrir o app da Binance para pagar",
|
||||
"唤起后手动输入金额": "No app, digite o valor",
|
||||
",备注填": ", observação",
|
||||
"用另一台手机扫码": "Escaneie com outro celular",
|
||||
"收款二维码": "QR code de pagamento",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "App da Binance → Escanear → digite o valor",
|
||||
"或手动转账": "Ou transfira manualmente",
|
||||
"转账信息": "Dados da transferência",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "App da Binance → \"Pagar\" → \"Transferir\" → destinatário: o UID abaixo → valor",
|
||||
"→ 备注填": "→ observação",
|
||||
"→ 转完回来点「我已施舍」": "→ volte e toque em \"Já doei\"",
|
||||
"收款方": "Destinatário",
|
||||
"复制": "Copiar",
|
||||
"金额": "Valor",
|
||||
"备注": "Observação",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Aguardando o pagamento… confirma sozinho após o envio; esta página atualiza sozinha",
|
||||
"付了但一直没确认?": "Pagou e não confirmou?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "ID do pedido Binance (18 dígitos, nos detalhes da transferência)",
|
||||
"我付过了,帮我核对": "Já paguei, confere pra mim",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "ID do pedido Binance (opcional, 18 dígitos; acelera a confirmação)",
|
||||
"我已施舍,等站长确认": "Já doei, aguardando o dono",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Toque em \"Já doei\" no dispositivo em que você começou a doação.",
|
||||
"打不开?": "Não abre? ",
|
||||
"用网关收银页支付": "Pagar pela página de checkout do gateway",
|
||||
"施舍进行中": "Doação em andamento",
|
||||
"🙏 谢谢施主": "🙏 Obrigado, gente boa",
|
||||
"你在 %s 的施主榜排第 %d 位": "No ranking de doadores de %s você está em #%d",
|
||||
"回到 %s 的碗": "Voltar para a tigela de %s",
|
||||
"复制链接分享": "Copiar link para compartilhar",
|
||||
"🖼 分享卡片": "🖼 Card para compartilhar",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Gere um card pixelado para o X ou seus amigos e dê uma força pro mendigo.",
|
||||
"生成分享卡": "Gerar card",
|
||||
"分享卡": "Card",
|
||||
"长按图片保存,或": "Segure a imagem para salvar, ou ",
|
||||
"下载": "baixe",
|
||||
"🏚 你也可以要饭": "🏚 Você também pode mendigar",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Um tweet da sua conta do X abre sua própria tigela; o dinheiro vai direto para sua conta Binance.",
|
||||
"站长没有确认这笔施舍": "O dono não confirmou esta doação",
|
||||
"这笔施舍已过期": "Esta doação expirou",
|
||||
"如果你确实转了,请联系站长核对。": "Se você realmente transferiu, fale com o dono para conferir.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Nada foi cobrado; se quiser doar, comece de novo.",
|
||||
"再来一次": "Tentar de novo",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Ranking ·",
|
||||
"🏆 施主榜": "🏆 Doadores",
|
||||
"🥣 乞丐榜": "🥣 Mendigos",
|
||||
"🪙 人气榜": "🪙 Popularidade",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · todas as tigelas juntas ·",
|
||||
"位施主": "doadores",
|
||||
"总榜": "Geral",
|
||||
"本周": "Esta semana",
|
||||
"要到最多的要饭站 · 共": "Tigelas que mais arrecadaram ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Mais moedas recebidas (grátis) ·",
|
||||
"← 回到刚才看的碗": "← Voltar pra tigela que você estava vendo",
|
||||
"施主自己填的 X,未经验证": "X informado pelo doador, sem verificação",
|
||||
"次 · 施舍过": "doações · doou para",
|
||||
"个乞丐": "mendigos",
|
||||
"榜上无人": "Ninguém aqui ainda",
|
||||
"就是我": "eu",
|
||||
"还没有人上榜": "Ninguém no ranking ainda",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "está mendigando ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ A guilda ainda não aprovou esta tigela, então ela não aparece nos rankings.",
|
||||
"主站站长审核后会收录。": "O dono do site principal aprova depois de revisar.",
|
||||
"· 榜 #": "· Posição #",
|
||||
"升%s要 %s": "%s com %s EXP",
|
||||
"满级": "Nível máximo",
|
||||
"饱食度": "Saciedade",
|
||||
"今天还没吃饭": "Hoje ainda não comeu nada",
|
||||
"今天有人投币了": "Hoje alguém doou",
|
||||
"今天丢过了": "Você já jogou hoje",
|
||||
"丢个钢镚(免费)": "Jogue uma moeda (grátis)",
|
||||
"💸 投币施舍": "💸 Doar",
|
||||
"还没摆碗,暂不能投币": "Ainda sem tigela, não dá pra doar",
|
||||
"去配置": "Configurar",
|
||||
"钢镚": "Moedas",
|
||||
"· 今日": "· hoje",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 moeda =",
|
||||
"碗里已有": "Na tigela",
|
||||
"施主": "Doadores",
|
||||
"人": "",
|
||||
"今日": "Hoje",
|
||||
"🕹️ 投币施舍": "🕹️ Insira uma moeda",
|
||||
"玩家名(上榜用,可留空)": "Nome do jogador (para o ranking, opcional)",
|
||||
"匿名施主": "Anônimo",
|
||||
"你的 X(可选,显示头像)": "Seu X (opcional, mostra seu avatar)",
|
||||
"投多少": "Quanto em",
|
||||
"✏️ 自定义": "✏️ Outro valor",
|
||||
"输入金额,最多两位小数": "Valor, até 2 casas decimais",
|
||||
"对乞丐喊话": "Diga algo ao mendigo",
|
||||
"例如:别买烟了,去吃饭": "ex.: Larga o cigarro e compra comida",
|
||||
"投币 💸": "Doar 💸",
|
||||
"投币": "Doar",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Escaneie com o app da Binance ou abra com um toque; ao receber, entra no Livro de Méritos automaticamente.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Transfira direto para o dono via Binance Pay; o dono confirma e você entra no ranking.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Mín. %s, máx. %s. Sem links nem contatos na mensagem.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Este mendigo ainda não pôs a tigela (sem método de recebimento), então não consegue receber.",
|
||||
"去后台配置 →": "Configure no painel →",
|
||||
"🏚 想自己要饭?": "🏚 Quer mendigar também?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Um tweet da sua conta do X abre sua própria tigela: seu próprio endereço, seu Livro de Méritos e seu ranking de doadores, com o dinheiro indo direto pra sua conta Binance.",
|
||||
"用 X 开通我的要饭站 →": "Abrir minha tigela com o X →",
|
||||
"人气榜": "Popularidade",
|
||||
"功德簿": "Méritos",
|
||||
"施主榜": "Doadores",
|
||||
"乞丐榜": "Mendigos",
|
||||
"已屏蔽的施主": "Doador bloqueado",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "O Livro de Méritos está vazio. A primeira moeda fica gravada aqui.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · quem mais doou para",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 primeiro doador 💎 maior doação 🔥 frequente",
|
||||
"丐帮排名 · 要到最多的要饭站": "Ranking da guilda · tigelas que mais arrecadaram",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Popularidade · tigelas com mais moedas (as moedas são grátis)",
|
||||
"次": "doações",
|
||||
"榜上无人,第一个投币的就是首席施主": "Ninguém aqui ainda. O primeiro a doar vira o doador-chefe.",
|
||||
"本站": "esta tigela",
|
||||
"叮!钢镚 +1": "Plim! Moeda +1",
|
||||
"没丢进去": "Não caiu na tigela",
|
||||
"网络开小差了,再试一次": "A rede deu uma cochilada, tenta de novo",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Valor inválido (até 2 casas decimais)",
|
||||
"最少施舍 %s %s": "A doação mínima é %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "A doação máxima é %s %s. Se tem tudo isso mesmo, divida em várias",
|
||||
"支付网关开小差了:%s": "O gateway de pagamento deu uma cochilada: %s",
|
||||
"手速太快了": "Rápido demais",
|
||||
"这个乞丐不在": "Este mendigo não está aqui",
|
||||
"请先打开要饭页再丢": "Abra a página da tigela primeiro",
|
||||
"服务器开小差了": "O servidor deu uma cochilada",
|
||||
"手速太快了,歇一会儿": "Rápido demais, descansa um pouco",
|
||||
"已提交,等站长确认": "Enviado, aguardando a confirmação do dono",
|
||||
"网关返回 %s": "O gateway respondeu %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "Esqueci a senha da minha tigela em %s, postando pra provar que sou eu 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "Pus minha tigela em %s 🥣 Uma moedinha, gente boa~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Entrei pra Guilda dos Mendigos Cyber 🧎 Cada centavo conta, uma moeda grátis também vale 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Larguei o emprego, agora mendigo. A tigela tá aqui, sejam bonzinhos 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "A guilda dos mendigos tá recrutando e eu vou primeiro 🥣 Doe e entre no Livro de Méritos, ou jogue uma moeda grátis %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Esse tweet não contém o código %s. Confira se postou o certo",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s já tem uma tigela: %s. Esqueceu a senha? Redefina com o X na página de login.",
|
||||
"@%s 已经开过站了": "@%s já tem uma tigela",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "O endereço %s já está em uso (@%s talvez já tenha uma tigela; recupere a senha com o X na página de login)",
|
||||
"@%s 还没开过要饭站": "@%s ainda não tem tigela",
|
||||
"解绑币安 Key 失败:%s": "Não foi possível desvincular a Key da Binance: %s",
|
||||
"绑定失败:%s": "Falha ao vincular: %s",
|
||||
"解绑失败:%s": "Falha ao desvincular: %s",
|
||||
"校验失败:%s": "Falha na verificação: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Senha de /%s redefinida para %s (aparece só desta vez, repasse ao dono)",
|
||||
"本站未配置支付网关": "Nenhum gateway de pagamento configurado",
|
||||
"网关连不上,请稍后再试": "Não deu pra conectar ao gateway, tente mais tarde",
|
||||
"方法不允许": "Método não permitido",
|
||||
"主站不存在": "Site principal não encontrado",
|
||||
"页面不存在": "Página não encontrada",
|
||||
"赛博丐帮没有这条路。": "Esse caminho não existe na Guilda dos Mendigos Cyber.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Ou ainda não abriu, ou a guilda expulsou.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Este mendigo ainda não pôs a tigela (sem método de recebimento), não consegue receber por enquanto",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "O usuário do X só pode ter letras, números e sublinhado (com ou sem @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Sem links nem contatos no nome ou na mensagem. Mendigo não aceita propaganda",
|
||||
"没有这笔施舍": "Doação não encontrada",
|
||||
"站点不存在": "Tigela não encontrada",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Toque em \"Já doei\" no dispositivo em que você começou a doação",
|
||||
"币安订单编号是 18 位数字,不填也行": "O ID do pedido Binance tem 18 dígitos (opcional)",
|
||||
"核对失败": "Falha na conferência",
|
||||
"这笔施舍不是网关模式": "Esta doação não usa o gateway",
|
||||
"试得太频繁了,一分钟后再试": "Tentativas demais, tente de novo em um minuto",
|
||||
"请在发起施舍的那台设备上回填": "Envie o ID do pedido pelo dispositivo em que você começou a doação",
|
||||
"币安订单编号是 18 位数字": "O ID do pedido Binance tem 18 dígitos",
|
||||
"本站未开放开站": "Abrir tigelas está desativado neste site",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "O código expirou (ou foi gerado em outro navegador). Gere um novo",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Link do tweet inválido. Deve ser algo como https://x.com/seunome/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Esse tweet é anterior ao código. Use um tweet postado depois de gerar o código",
|
||||
"验证已失效,请重新验证": "A verificação expirou, verifique de novo",
|
||||
"口号和介绍里别放链接、联系方式": "Sem links nem contatos no slogan",
|
||||
"口令至少 6 位": "A senha precisa ter pelo menos 6 caracteres",
|
||||
"两次口令不一致": "As senhas não conferem",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "A senha do site principal é definida em config.env no servidor, não se recupera pelo X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Redefinições demais para esta conta do X hoje, volte amanhã",
|
||||
"口令至少 6 位,且两次一致": "A senha precisa ter pelo menos 6 caracteres e conferir",
|
||||
"口令已重置,其它设备上的登录已失效": "Senha redefinida. Os outros dispositivos foram desconectados",
|
||||
"X 用户名或口令不对": "Usuário do X ou senha incorretos",
|
||||
"请先登录": "Faça login primeiro",
|
||||
"登录状态已失效,请重新登录。": "Sua sessão expirou, faça login de novo.",
|
||||
"歇一会儿再来。": "Descansa um pouco e volta.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Senhas erradas demais para esta tigela. Descansa um pouco.",
|
||||
"站点标题不能为空": "O nome da tigela não pode ficar vazio",
|
||||
"资料里别放链接、联系方式": "Sem links nem contatos no perfil",
|
||||
"资料已保存": "Perfil salvo",
|
||||
"主站的收款方式在服务器 config.env 里改": "O método de recebimento do site principal é definido em config.env no servidor",
|
||||
"填一下币安 UID,不然钱没处去": "Preencha seu UID da Binance, senão o dinheiro não tem pra onde ir",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Mudou para transferência direta: os doadores avisam o pagamento e você confirma aqui",
|
||||
"本站不支持绑定": "Vinculação não disponível neste site",
|
||||
"API Key 和 Secret 都要填": "É preciso informar a API Key e o Secret",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "O UID da Binance é só números (aparece na sua página de perfil no app)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Vinculado! A Binance verificou a Key; a partir de agora as doações são confirmadas automaticamente",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Desvinculado. Agora você está no modo transferência direta, confira se seu UID está preenchido",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Verificado: a Key da Binance funciona, os pagamentos serão confirmados automaticamente",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "A senha do site principal é definida em config.env (ADMIN_PASSWORD) no servidor",
|
||||
"口令已修改,其它设备上的登录已失效": "Senha alterada. Os outros dispositivos foram desconectados",
|
||||
"这笔施舍当前不能确认/拒绝": "Esta doação não pode ser confirmada nem recusada agora",
|
||||
"只能回复自己站的施舍": "Você só pode responder a doações da sua própria tigela",
|
||||
"回复里别放链接、联系方式": "Sem links nem contatos nas respostas",
|
||||
"未知操作": "Ação desconhecida",
|
||||
"无权操作": "Não permitido",
|
||||
"没有这个站": "Essa tigela não existe",
|
||||
"未配置支付网关": "Nenhum gateway de pagamento configurado",
|
||||
"请求来源不对": "Origem da requisição incorreta",
|
||||
"请从本站页面操作。": "Use as páginas do próprio site.",
|
||||
"页面渲染失败": "Não foi possível exibir a página",
|
||||
"稍后再试。": "Tente mais tarde.",
|
||||
"地址已被占用": "Endereço já em uso",
|
||||
"这个 X 账号已经开过站了": "Esta conta do X já tem uma tigela",
|
||||
"连不上 X 接口: %w": "Não deu pra conectar ao X: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tweet não encontrado (link errado, ou o tweet não é público)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Não deu pra ler o tweet (apagado, ou a conta é protegida)",
|
||||
"头像地址不在允许的域名": "A URL do avatar não está em um domínio permitido",
|
||||
"头像下载失败": "Falha ao baixar o avatar",
|
||||
"头像不是有效图片": "O avatar não é uma imagem válida",
|
||||
"金额格式不对": "Valor inválido",
|
||||
"收款链接过长": "O link de recebimento é longo demais",
|
||||
"收款链接须为 https 链接": "O link de recebimento precisa ser https",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "O link de recebimento precisa ser um domínio da Binance (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "O link do perfil do X deve ser algo como https://x.com/seunome",
|
||||
"核对成功,已到账": "Conferido, pagamento recebido",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Transferência encontrada, mas o valor é menor; registrado o que foi pago",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Transferência não encontrada: confira o ID do pedido e a conta de destino, e tente de novo quando a Binance mostrar",
|
||||
"这笔转账已经被别的订单用过了": "Esta transferência já foi usada em outro pedido",
|
||||
"币种不对": "Moeda incorreta",
|
||||
"这笔施舍当前状态不能回填": "O status desta doação não permite enviar um ID de pedido",
|
||||
"这个网络今天丢得够多了": "Esta rede já jogou moedas demais hoje",
|
||||
"今天已经丢过了,明天再来": "Você já jogou hoje, volte amanhã",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "não pago",
|
||||
"待确认": "pendente",
|
||||
"已到账": "pago",
|
||||
"已过期": "expirado",
|
||||
"已关闭": "encerrado",
|
||||
"已拒绝": "recusado",
|
||||
"空碗未入帮": "Tigela vazia",
|
||||
"一袋弟子": "Discípulo de 1 Saco",
|
||||
"二袋弟子": "Discípulo de 2 Sacos",
|
||||
"三袋弟子": "Discípulo de 3 Sacos",
|
||||
"四袋弟子": "Discípulo de 4 Sacos",
|
||||
"五袋弟子": "Discípulo de 5 Sacos",
|
||||
"六袋弟子": "Discípulo de 6 Sacos",
|
||||
"七袋弟子": "Discípulo de 7 Sacos",
|
||||
"八袋弟子": "Discípulo de 8 Sacos",
|
||||
"九袋长老": "Ancião de 9 Sacos",
|
||||
"帮主": "Mestre da Guilda",
|
||||
"副帮主": "Vice-Mestre",
|
||||
"传功长老": "Ancião dos Ensinamentos",
|
||||
"执法长老": "Ancião da Lei",
|
||||
"掌棒龙头": "Chefe do Bastão",
|
||||
"掌钵龙头": "Chefe da Tigela",
|
||||
"长老": "Ancião",
|
||||
"舵主": "Chefe de Filial",
|
||||
"弟子": "Discípulo",
|
||||
"总舵": "Sede Central",
|
||||
"投了个硬币": "jogou uma moeda",
|
||||
"善心人": "alma bondosa",
|
||||
"大善人": "grande benfeitor",
|
||||
"活菩萨": "santo vivo",
|
||||
"财神爷": "deus da riqueza",
|
||||
"刚刚": "agora mesmo",
|
||||
"%d 分钟前": "há %d min",
|
||||
"%d 小时前": "há %d h",
|
||||
"%d 天前": "há %d d",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 俄语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["ru"] = map[string]string{
|
||||
// ---- 站名 / meta ----
|
||||
"赛博要饭": "Кибер-нищий",
|
||||
"赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。": "Кибер-нищий: подайте монетку. Подайте через Binance Pay и оставьте строчку в Книге добрых дел; нет денег — киньте бесплатную монетку; один твит в X открывает вашу собственную миску.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Подайте монетку. Подаяние попадает в Книгу добрых дел; бесплатная монетка — тоже любовь.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Кибер-нищий",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Подайте монетку. Подайте через Binance Pay и оставьте строчку в Книге добрых дел.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(скрыто: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Назад на улицу",
|
||||
"回到刚才看的碗": "Назад к миске, которую вы смотрели",
|
||||
"声音开关": "Переключатель звука",
|
||||
"声音": "Звук",
|
||||
"排行榜": "Рейтинг",
|
||||
"我的后台": "Панель",
|
||||
"站长": "Хозяин ",
|
||||
"登录": "Войти",
|
||||
"我的站": "Моя миска",
|
||||
"开通要饭站": "Открыть миску",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Подайте монетку, добрый человек",
|
||||
"🪙 一毛也是爱": "🪙 Каждая копейка — любовь",
|
||||
"💸 投币就上榜": "💸 Подай — и попади в рейтинг",
|
||||
"📜 留一句话刻功德簿": "📜 Оставь строчку в Книге добрых дел",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Один твит — и у тебя своя миска",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Кибер-гильдия нищих: миска каждому",
|
||||
"· 赛博丐帮,行行好": "· Кибер-гильдия нищих · Подайте монетку",
|
||||
"作者": "Автор",
|
||||
"收款由": "Платежи через",
|
||||
"驱动 · 字体": "· Шрифт",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Звук: выкл",
|
||||
"声音:开(点击静音)": "Звук: вкл (нажмите, чтобы выключить)",
|
||||
"点一下开始播放": "Нажмите, чтобы включить музыку",
|
||||
"已复制": "Скопировано",
|
||||
"功德 +": "Карма +",
|
||||
"你的名号和留言已刻上功德簿": "Ваше имя и послание вписаны в Книгу добрых дел",
|
||||
"看看功德簿": "Открыть Книгу добрых дел",
|
||||
"分享卡片": "Открытка",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Отправлено. Попадёте в рейтинг, как только хозяин подтвердит. Страница обновится сама.",
|
||||
"这笔施舍已": "Это подаяние ",
|
||||
"过期": "истекло",
|
||||
"下单失败": "не удалось создать",
|
||||
"被站长拒绝": "отклонено хозяином",
|
||||
"关闭": "закрыто",
|
||||
",请回到页面重新投币。": ". Вернитесь и подайте ещё раз.",
|
||||
"没成功,再试试": "Не вышло, попробуйте ещё",
|
||||
"网络开小差了": "Сеть заглючила",
|
||||
"分页": "Страницы",
|
||||
"‹ 上一页": "‹ Назад",
|
||||
"下一页 ›": "Вперёд ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Вход для хозяина ·",
|
||||
"🔑 站长登录": "🔑 Вход для хозяина",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Войдите в панель: имя пользователя X + пароль, заданный при открытии миски. Хозяин главного сайта: имя оставьте пустым.",
|
||||
"X 用户名": "Имя пользователя X",
|
||||
"例如 qianyuwing(主站留空)": "например qianyuwing (для главного сайта — пусто)",
|
||||
"口令": "Пароль",
|
||||
"忘了口令?": "Забыли пароль?",
|
||||
"用 X 发推找回": "Восстановить через твит",
|
||||
"。还没有要饭站?": ". Ещё нет миски?",
|
||||
"用 X 开一个": "Открыть через X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Панель ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 Поздравляем с открытием! Ваша миска",
|
||||
"已上线": "в сети",
|
||||
"(待主站站长收录后进榜)": " (попадёт в рейтинги после одобрения хозяином главного сайта)",
|
||||
"下一步:": "Дальше: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "укажите Binance UID в разделе «Оплата» ниже (десять секунд), иначе никто не сможет вам заплатить.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Возвращайтесь через %s (имя X %s + ваш пароль). Забыли? Восстановите новым твитом.",
|
||||
"后台": "панель",
|
||||
"· 碗里": "· В миске",
|
||||
"位施主 ·": "дарителей ·",
|
||||
"次 · 钢镚": "подаяний · монеток",
|
||||
"待收录": "не в списке",
|
||||
"🔑 改口令": "🔑 Пароль",
|
||||
"退出": "Выйти",
|
||||
"⏳ 待确认": "⏳ Ожидают",
|
||||
"✏️ 资料": "✏️ Профиль",
|
||||
"💰 收款方式": "💰 Оплата",
|
||||
"📜 施舍记录": "📜 Подаяния",
|
||||
"🏚 所有站点": "🏚 Все миски",
|
||||
"🧹 留言巡查": "🧹 Сообщения",
|
||||
"⏳ 待确认的施舍": "⏳ Подаяния, ожидающие подтверждения",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Проверьте перевод в приложении Binance (сумма и код в примечании), затем подтвердите — и даритель попадёт в рейтинг.",
|
||||
"备注码": "Код в примечании",
|
||||
"· 币安订单": "· Ордер Binance",
|
||||
"✓ 确认到账": "✓ Получено",
|
||||
"✗ 没收到": "✗ Не получено",
|
||||
"站点标题": "Название миски",
|
||||
"(来自 X @": "(из X @",
|
||||
",锁定)": ", закреплено)",
|
||||
"头像 emoji": "Эмодзи-аватар",
|
||||
"一句话口号": "Слоган в одну строку",
|
||||
"绑定 X": "Привязать X",
|
||||
"(主页链接或 @名字,留空不显示)": "(ссылка на профиль или @имя; пусто — не показывать)",
|
||||
"https://x.com/你的名字": "https://x.com/ваше_имя",
|
||||
"保存资料": "Сохранить профиль",
|
||||
"config.env 配置": "задано в config.env",
|
||||
"已绑币安 Key · 自动确认": "Binance Key привязан · автоподтверждение",
|
||||
"直接转账 · UID": "Прямой перевод · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Миска ещё не поставлена — нажмите, чтобы настроить",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "Способ оплаты главного сайта задаётся в config.env на сервере. Сейчас: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "автоподтверждение через шлюз BinancePayTool (аккаунт по умолчанию)",
|
||||
"直接转账": "прямой перевод",
|
||||
"校验网关默认账号": "Проверить аккаунт шлюза по умолчанию",
|
||||
"✅ 已绑定币安账号(UID": "✅ Аккаунт Binance привязан (UID",
|
||||
"),施主付款后": "). Подаяния ",
|
||||
"自动确认上榜": "подтверждаются автоматически",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " На странице оплаты будет ваш QR-код / открытие в одно касание.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Добавьте ссылку для получения, чтобы дарители могли отсканировать код или открыть приложение в одно касание.",
|
||||
"重新校验 Key": "Проверить Key заново",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "После отвязки — прямой перевод (каждый платёж подтверждаете вручную). Продолжить?",
|
||||
"解绑": "Отвязать",
|
||||
"换一个 Key / 更新收款链接": "Сменить Key / обновить ссылку",
|
||||
"当前是": "Текущий режим: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Дарители переводят на ваш UID в приложении Binance, нажимают «Я заплатил», а вы подтверждаете здесь.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Миска ещё не поставлена: укажите Binance UID — и можно принимать деньги. Десять секунд.",
|
||||
"方式一:填币安 UID(最简单)": "Способ 1: ваш Binance UID (проще всего)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Приложение Binance → аватар слева вверху; число под ним — это ваш",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (он же Pay ID). Дарители увидят его при подаянии и переведут через «Оплата → Перевод» в приложении Binance без комиссии.",
|
||||
"币安 UID": "Binance UID",
|
||||
"例如 12345678": "например 12345678",
|
||||
"收款链接": "Ссылка для получения",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(необязательно. С ней дарители смогут отсканировать код или открыть Binance в одно касание; без неё переводят по UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Где взять: на странице получения в Binance нажмите «Сохранить изображение», прочитайте QR любым сканером и вставьте ссылку сюда.",
|
||||
"保存": "Сохранить",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Способ 2: привязать Binance API Key только для чтения (автоподтверждение)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Подаяния подтверждаются автоматически. Ключу нужно только право «Enable Reading», вывести деньги им нельзя; сайт его не хранит — только платёжный шлюз, в зашифрованном виде.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "всего · спам можно скрыть или заблокировать автора (записи сохраняются) · можно ответить",
|
||||
"已屏蔽此人": "Пользователь заблокирован",
|
||||
"(已屏蔽:": "(скрыто: ",
|
||||
"🥣 站长:": "🥣 Хозяин: ",
|
||||
"恢复留言": "Показать сообщение",
|
||||
"屏蔽留言": "Скрыть сообщение",
|
||||
"恢复此人": "Разблокировать",
|
||||
"屏蔽此人": "Заблокировать",
|
||||
"回一句…": "Ответить…",
|
||||
"回复": "Ответить",
|
||||
"还没有施舍记录": "Подаяний пока нет",
|
||||
"🔑 修改口令": "🔑 Сменить пароль",
|
||||
"新口令(至少 6 位)": "Новый пароль (не менее 6 символов)",
|
||||
"再输一遍": "Ещё раз",
|
||||
"改完后其它设备上的登录会失效。": "Другие устройства будут разлогинены.",
|
||||
"确认修改": "Сменить пароль",
|
||||
"🏚 所有要饭站": "🏚 Все миски",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "всего · нарушителей можно изгнать · можно сбросить пароль хозяина",
|
||||
"已除名": "изгнан",
|
||||
"未收录": "не в списке",
|
||||
"已绑 Key 自动确认": "Key привязан, автоподтверждение",
|
||||
"位施主 · 钢镚": "дарителей · монеток",
|
||||
"开张": "открыт",
|
||||
"取消收录": "Убрать из списка",
|
||||
"收录上榜": "В список",
|
||||
"除名": "Изгнать",
|
||||
"恢复": "Вернуть",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Сбросить пароль для /%s? Новый пароль показывается один раз.",
|
||||
"重置口令": "Сбросить пароль",
|
||||
"还没有子站": "Мисок пока нет",
|
||||
"🧹 全站最新留言": "🧹 Последние сообщения со всего сайта",
|
||||
"条 · 跨站点巡查广告": "всего · патруль спама по всем мискам",
|
||||
"暂无留言": "Сообщений пока нет",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Приложение Binance → Аккаунт → Управление API → Создать API: ",
|
||||
"只勾「允许读取」": "отметьте только «Enable Reading»",
|
||||
",其它权限都不要,": ", больше ничего, ",
|
||||
"不用设 IP 白名单": "белый список IP не нужен",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (ключ только для чтения не может вывести деньги). Он используется лишь для чтения входящих переводов, хранится в зашифрованном виде и никогда не показывается.",
|
||||
"(App 头像页可见)": "(виден на странице профиля в приложении)",
|
||||
"(选填,填了施主能扫码)": "(необязательно; позволяет дарителям сканировать QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Где взять ссылку: на странице получения в Binance нажмите «Сохранить изображение» и прочитайте QR любым сканером.",
|
||||
"绑定并校验": "Привязать и проверить",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Восстановить пароль через X",
|
||||
"🔑 用 X 找回口令": "🔑 Восстановить пароль через X",
|
||||
"🏚 开通我的要饭站": "🏚 Открыть свою миску",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Опубликуйте твит с кодом, чтобы доказать, что вы хозяин, и задайте новый пароль.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Подаяние не требуется. Один твит с вашего аккаунта X открывает миску: название — ваше имя в X, аватар — из X, одна миска на аккаунт. Заодно твит выставит вашу миску на улицу.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Вы во встроенном браузере приложения. Твит в одно касание может не открыть X, а после возвращения прогресс может потеряться.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Нажмите «⋯» справа вверху и выберите «Открыть в браузере»",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (или скопируйте ссылку в Safari / Chrome), прежде чем продолжать.",
|
||||
"复制本页链接": "Скопировать ссылку на страницу",
|
||||
"发一条推文,带上验证码": "Опубликуйте твит с кодом",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Текст твита (меняйте как угодно, главное — оставьте код)",
|
||||
"换一条": "Другой вариант",
|
||||
"🐦 一键去 X 发推": "🐦 Написать в X",
|
||||
"复制文案": "Скопировать текст",
|
||||
"没拉起 X App?点这里用网页版发 →": "Приложение X не открылось? Опубликуйте через веб →",
|
||||
"验证码": "Код",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "не зависит от регистра и действует 24 часа. В тексте есть ссылка на вашу миску, так что твит заодно служит рекламой.",
|
||||
"把推文链接贴回来": "Вставьте ссылку на твит",
|
||||
"推文链接": "Ссылка на твит",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/ваше_имя/status/1234567890",
|
||||
"验证": "Проверить",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "После публикации нажмите на твите «Поделиться → Скопировать ссылку».",
|
||||
"还没开过站?": "Ещё нет миски? ",
|
||||
"去开一个": "Открыть",
|
||||
"已经开过站?": "Уже есть миска? ",
|
||||
"站长登录": "Вход для хозяина",
|
||||
"🔑 设置新口令": "🔑 Новый пароль",
|
||||
"保存并登录": "Сохранить и войти",
|
||||
"✅ X 验证通过": "✅ X подтверждён",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· название и аватар берутся из X (аватар обновляется периодически)",
|
||||
"站点地址": "Адрес миски",
|
||||
"(就是你的 X 用户名,不用填)": "(это ваше имя в X, заполнять не нужно)",
|
||||
"行行好,赏口饭吃 🙏": "Подайте монетку, добрый человек 🙏",
|
||||
"登录口令": "Пароль для входа",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Потом входите по имени X + паролю; забыли — восстановите новым твитом.",
|
||||
"口令(至少 6 位)": "Пароль (не менее 6 символов)",
|
||||
"开张 🏚": "Открыться 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "После открытия привяжите Binance Key или укажите UID в панели, чтобы принимать деньги. За содержимое отвечаете вы; спам-миски гильдия изгоняет.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Подаяние для %s",
|
||||
"先回去看看": "Пока вернуться",
|
||||
"给 %s 投币": "Кидаем монету для %s",
|
||||
"金额要": "Сумма должна быть ",
|
||||
"一分不差": "точной",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": шлюз узнаёт платёж по уникальному хвосту и подтверждает за секунды",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Переведите хозяину напрямую через Binance Pay, затем нажмите «Я заплатил» ниже",
|
||||
"打开币安 App 转账": "Открыть Binance для перевода",
|
||||
"唤起后手动输入金额": "В приложении введите сумму",
|
||||
",备注填": ", примечание",
|
||||
"用另一台手机扫码": "Сканируйте другим телефоном",
|
||||
"收款二维码": "QR-код для оплаты",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Приложение Binance → Сканировать → введите сумму",
|
||||
"或手动转账": "Или переведите вручную",
|
||||
"转账信息": "Данные перевода",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Приложение Binance → «Оплата» → «Перевод» → получатель: UID ниже → сумма",
|
||||
"→ 备注填": "→ примечание",
|
||||
"→ 转完回来点「我已施舍」": "→ вернитесь и нажмите «Я заплатил»",
|
||||
"收款方": "Получатель",
|
||||
"复制": "Копировать",
|
||||
"金额": "Сумма",
|
||||
"备注": "Примечание",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Ждём платёж… после перевода подтвердится само; страница обновится автоматически",
|
||||
"付了但一直没确认?": "Заплатили, а подтверждения нет?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Номер ордера Binance (18 цифр, в деталях перевода)",
|
||||
"我付过了,帮我核对": "Я заплатил, проверьте",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Номер ордера Binance (необязательно, 18 цифр; ускорит подтверждение)",
|
||||
"我已施舍,等站长确认": "Я заплатил, жду хозяина",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "«Я заплатил» нужно нажать на устройстве, с которого начато подаяние.",
|
||||
"打不开?": "Не открывается? ",
|
||||
"用网关收银页支付": "Оплатить через страницу шлюза",
|
||||
"施舍进行中": "Подаяние в процессе",
|
||||
"🙏 谢谢施主": "🙏 Спасибо, добрый даритель",
|
||||
"你在 %s 的施主榜排第 %d 位": "В рейтинге дарителей %s вы на %d-м месте",
|
||||
"回到 %s 的碗": "Назад к миске %s",
|
||||
"复制链接分享": "Скопировать ссылку",
|
||||
"🖼 分享卡片": "🖼 Открытка",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Сделайте пиксельную открытку для X или друзей — и заодно прорекламируйте нищего.",
|
||||
"生成分享卡": "Сделать открытку",
|
||||
"分享卡": "Открытка",
|
||||
"长按图片保存,或": "Удерживайте картинку, чтобы сохранить, или ",
|
||||
"下载": "скачайте",
|
||||
"🏚 你也可以要饭": "🏚 Вы тоже можете просить",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Один твит с вашего аккаунта X открывает вашу миску; деньги идут прямо на ваш аккаунт Binance.",
|
||||
"站长没有确认这笔施舍": "Хозяин не подтвердил это подаяние",
|
||||
"这笔施舍已过期": "Это подаяние истекло",
|
||||
"如果你确实转了,请联系站长核对。": "Если вы действительно перевели, свяжитесь с хозяином для проверки.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Деньги не списаны; чтобы подать, начните заново.",
|
||||
"再来一次": "Ещё раз",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Рейтинг ·",
|
||||
"🏆 施主榜": "🏆 Дарители",
|
||||
"🥣 乞丐榜": "🥣 Нищие",
|
||||
"🪙 人气榜": "🪙 Популярность",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · все миски вместе ·",
|
||||
"位施主": "дарителей",
|
||||
"总榜": "За всё время",
|
||||
"本周": "За неделю",
|
||||
"要到最多的要饭站 · 共": "Миски, собравшие больше всех ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Больше всего монеток (бесплатных) ·",
|
||||
"← 回到刚才看的碗": "← Назад к миске, которую вы смотрели",
|
||||
"施主自己填的 X,未经验证": "X указан самим дарителем, не проверен",
|
||||
"次 · 施舍过": "подаяний · подал",
|
||||
"个乞丐": "нищим",
|
||||
"榜上无人": "Пока никого",
|
||||
"就是我": "это я",
|
||||
"还没有人上榜": "В рейтинге пока никого",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "просит милостыню ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ Эта миска ещё не внесена гильдией в список, поэтому не участвует в рейтингах.",
|
||||
"主站站长审核后会收录。": "Хозяин главного сайта внесёт её после проверки.",
|
||||
"· 榜 #": "· Место #",
|
||||
"升%s要 %s": "%s — с %s EXP",
|
||||
"满级": "Максимум",
|
||||
"饱食度": "Сытость",
|
||||
"今天还没吃饭": "Сегодня ещё не ел",
|
||||
"今天有人投币了": "Сегодня кто-то подал",
|
||||
"今天丢过了": "Сегодня уже кидали",
|
||||
"丢个钢镚(免费)": "Кинуть монетку (бесплатно)",
|
||||
"💸 投币施舍": "💸 Подать",
|
||||
"还没摆碗,暂不能投币": "Миска не поставлена, подать нельзя",
|
||||
"去配置": "Настроить",
|
||||
"钢镚": "Монетки",
|
||||
"· 今日": "· сегодня",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 монетка =",
|
||||
"碗里已有": "В миске",
|
||||
"施主": "Дарителей",
|
||||
"人": "",
|
||||
"今日": "Сегодня",
|
||||
"🕹️ 投币施舍": "🕹️ Вставьте монету",
|
||||
"玩家名(上榜用,可留空)": "Имя игрока (для рейтинга, необязательно)",
|
||||
"匿名施主": "Аноним",
|
||||
"你的 X(可选,显示头像)": "Ваш X (необязательно, покажет аватар)",
|
||||
"投多少": "Сумма в",
|
||||
"✏️ 自定义": "✏️ Своя",
|
||||
"输入金额,最多两位小数": "Сумма, до 2 знаков после запятой",
|
||||
"对乞丐喊话": "Скажите что-нибудь нищему",
|
||||
"例如:别买烟了,去吃饭": "например: Хватит курить, купи поесть",
|
||||
"投币 💸": "Подать 💸",
|
||||
"投币": "Подать",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Отсканируйте в приложении Binance или откройте его в одно касание; после получения запись появится в Книге добрых дел автоматически.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Переведите хозяину напрямую через Binance Pay; хозяин подтвердит — и вы в рейтинге.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Мин. %s, макс. %s. Без ссылок и контактов в сообщении.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Этот нищий ещё не поставил миску (нет способа оплаты), деньги принимать не может.",
|
||||
"去后台配置 →": "Настроить в панели →",
|
||||
"🏚 想自己要饭?": "🏚 Тоже хотите просить?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Один твит с аккаунта X открывает вашу миску: свой адрес, своя Книга добрых дел и рейтинг дарителей, деньги прямо на ваш Binance.",
|
||||
"用 X 开通我的要饭站 →": "Открыть миску через X →",
|
||||
"人气榜": "Популярность",
|
||||
"功德簿": "Добрые дела",
|
||||
"施主榜": "Дарители",
|
||||
"乞丐榜": "Нищие",
|
||||
"已屏蔽的施主": "Заблокированный даритель",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "Книга добрых дел пуста. Первая монета будет вписана здесь.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · щедрейшие дарители для",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 первый даритель 💎 самый крупный 🔥 завсегдатай",
|
||||
"丐帮排名 · 要到最多的要饭站": "Рейтинг гильдии · миски, собравшие больше всех",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Популярность · миски с наибольшим числом монеток (монетки бесплатны)",
|
||||
"次": "подаяний",
|
||||
"榜上无人,第一个投币的就是首席施主": "Пока никого. Первый, кто подаст, станет главным дарителем.",
|
||||
"本站": "эта миска",
|
||||
"叮!钢镚 +1": "Дзынь! Монетка +1",
|
||||
"没丢进去": "Мимо миски",
|
||||
"网络开小差了,再试一次": "Сеть заглючила, попробуйте ещё раз",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Неверная сумма (до 2 знаков после запятой)",
|
||||
"最少施舍 %s %s": "Минимальное подаяние — %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "Максимальное подаяние — %s %s. Если у вас правда столько, разбейте на несколько",
|
||||
"支付网关开小差了:%s": "Платёжный шлюз заглючил: %s",
|
||||
"手速太快了": "Слишком быстро",
|
||||
"这个乞丐不在": "Этого нищего здесь нет",
|
||||
"请先打开要饭页再丢": "Сначала откройте страницу миски",
|
||||
"服务器开小差了": "Сервер заглючил",
|
||||
"手速太快了,歇一会儿": "Слишком быстро, передохните",
|
||||
"已提交,等站长确认": "Отправлено, ждём подтверждения хозяина",
|
||||
"网关返回 %s": "Шлюз ответил %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "Забыл пароль от своей миски на %s, пишу твит, чтобы доказать, что это я 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "Поставил миску на %s 🥣 Подайте монетку, добрые люди~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Вступил в Кибер-гильдию нищих 🧎 Каждая копейка — любовь, бесплатная монетка тоже сойдёт 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Бросил работу, теперь прошу милостыню. Миска здесь, добрые люди, не проходите мимо 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "Гильдия нищих набирает новичков, я первый 🥣 Подал — попал в Книгу добрых дел, нет денег — кинь бесплатную монетку %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "В этом твите нет кода %s. Проверьте, тот ли твит вы отправили",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "У @%s уже есть миска: %s. Забыли пароль? Сбросьте через X на странице входа.",
|
||||
"@%s 已经开过站了": "У @%s уже есть миска",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "Адрес %s занят (возможно, у @%s уже есть миска; пароль можно восстановить через X на странице входа)",
|
||||
"@%s 还没开过要饭站": "У @%s ещё нет миски",
|
||||
"解绑币安 Key 失败:%s": "Не удалось отвязать Binance Key: %s",
|
||||
"绑定失败:%s": "Ошибка привязки: %s",
|
||||
"解绑失败:%s": "Ошибка отвязки: %s",
|
||||
"校验失败:%s": "Ошибка проверки: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Пароль для /%s сброшен на %s (показывается один раз, передайте хозяину)",
|
||||
"本站未配置支付网关": "Платёжный шлюз не настроен",
|
||||
"网关连不上,请稍后再试": "Шлюз недоступен, попробуйте позже",
|
||||
"方法不允许": "Метод не разрешён",
|
||||
"主站不存在": "Главный сайт не найден",
|
||||
"页面不存在": "Страница не найдена",
|
||||
"赛博丐帮没有这条路。": "В Кибер-гильдии нищих нет такой дороги.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Либо ещё не открылась, либо изгнана гильдией.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Этот нищий ещё не поставил миску (нет способа оплаты), деньги принимать пока не может",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "Имя X может содержать только буквы, цифры и подчёркивания (можно без @)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Без ссылок и контактов в имени и сообщении. Нищие рекламу не берут",
|
||||
"没有这笔施舍": "Подаяние не найдено",
|
||||
"站点不存在": "Миска не найдена",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Нажмите «Я заплатил» на устройстве, с которого начато подаяние",
|
||||
"币安订单编号是 18 位数字,不填也行": "Номер ордера Binance — 18 цифр (необязательно)",
|
||||
"核对失败": "Проверка не удалась",
|
||||
"这笔施舍不是网关模式": "Это подаяние не через шлюз",
|
||||
"试得太频繁了,一分钟后再试": "Слишком много попыток, повторите через минуту",
|
||||
"请在发起施舍的那台设备上回填": "Введите номер ордера с устройства, с которого начато подаяние",
|
||||
"币安订单编号是 18 位数字": "Номер ордера Binance — 18 цифр",
|
||||
"本站未开放开站": "Открытие мисок на этом сайте отключено",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "Код истёк (или был создан в другом браузере). Сгенерируйте новый",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Неверная ссылка на твит. Она должна выглядеть как https://x.com/ваше_имя/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Этот твит старше кода. Используйте твит, опубликованный после создания кода",
|
||||
"验证已失效,请重新验证": "Проверка истекла, пройдите её заново",
|
||||
"口号和介绍里别放链接、联系方式": "Без ссылок и контактов в слогане",
|
||||
"口令至少 6 位": "Пароль не короче 6 символов",
|
||||
"两次口令不一致": "Пароли не совпадают",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "Пароль главного сайта задаётся в config.env на сервере, а не через X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Слишком много сбросов для этого аккаунта X сегодня, приходите завтра",
|
||||
"口令至少 6 位,且两次一致": "Пароль не короче 6 символов и должен совпадать",
|
||||
"口令已重置,其它设备上的登录已失效": "Пароль сброшен. Другие устройства разлогинены",
|
||||
"X 用户名或口令不对": "Неверное имя X или пароль",
|
||||
"请先登录": "Сначала войдите",
|
||||
"登录状态已失效,请重新登录。": "Сессия истекла, войдите снова.",
|
||||
"歇一会儿再来。": "Передохните и возвращайтесь.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Слишком много неверных паролей для этой миски. Передохните.",
|
||||
"站点标题不能为空": "Название миски не может быть пустым",
|
||||
"资料里别放链接、联系方式": "Без ссылок и контактов в профиле",
|
||||
"资料已保存": "Профиль сохранён",
|
||||
"主站的收款方式在服务器 config.env 里改": "Способ оплаты главного сайта задаётся в config.env на сервере",
|
||||
"填一下币安 UID,不然钱没处去": "Укажите Binance UID, иначе деньгам некуда идти",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Переключено на прямой перевод: дарители сообщают о платеже, вы подтверждаете здесь",
|
||||
"本站不支持绑定": "Привязка на этом сайте недоступна",
|
||||
"API Key 和 Secret 都要填": "Нужны и API Key, и Secret",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Binance UID состоит только из цифр (виден на странице профиля в приложении)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Привязано! Binance подтвердил Key; подаяния теперь подтверждаются автоматически",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Отвязано. Теперь режим прямого перевода, не забудьте указать UID",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Проверено: Binance Key работает, платежи будут подтверждаться автоматически",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "Пароль главного сайта задаётся в config.env (ADMIN_PASSWORD) на сервере",
|
||||
"口令已修改,其它设备上的登录已失效": "Пароль изменён. Другие устройства разлогинены",
|
||||
"这笔施舍当前不能确认/拒绝": "Это подаяние сейчас нельзя подтвердить или отклонить",
|
||||
"只能回复自己站的施舍": "Отвечать можно только на подаяния своей миски",
|
||||
"回复里别放链接、联系方式": "Без ссылок и контактов в ответах",
|
||||
"未知操作": "Неизвестное действие",
|
||||
"无权操作": "Нет доступа",
|
||||
"没有这个站": "Нет такой миски",
|
||||
"未配置支付网关": "Платёжный шлюз не настроен",
|
||||
"请求来源不对": "Неверный источник запроса",
|
||||
"请从本站页面操作。": "Пользуйтесь страницами самого сайта.",
|
||||
"页面渲染失败": "Не удалось отрисовать страницу",
|
||||
"稍后再试。": "Попробуйте позже.",
|
||||
"地址已被占用": "Адрес уже занят",
|
||||
"这个 X 账号已经开过站了": "У этого аккаунта X уже есть миска",
|
||||
"连不上 X 接口: %w": "Не удаётся связаться с X: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Твит не найден (неверная ссылка или твит не публичный)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Не удалось прочитать твит (удалён или аккаунт закрыт)",
|
||||
"头像地址不在允许的域名": "URL аватара не из разрешённого домена",
|
||||
"头像下载失败": "Не удалось скачать аватар",
|
||||
"头像不是有效图片": "Аватар — не корректное изображение",
|
||||
"金额格式不对": "Неверная сумма",
|
||||
"收款链接过长": "Ссылка для получения слишком длинная",
|
||||
"收款链接须为 https 链接": "Ссылка для получения должна быть https",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Ссылка для получения должна быть на домене Binance (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "Ссылка на профиль X должна выглядеть как https://x.com/ваше_имя",
|
||||
"核对成功,已到账": "Проверено, платёж получен",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Перевод найден, но сумма меньше; засчитано фактически оплаченное",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Перевод не найден: проверьте номер ордера и аккаунт получателя, затем повторите, когда Binance покажет его",
|
||||
"这笔转账已经被别的订单用过了": "Этот перевод уже использован другим ордером",
|
||||
"币种不对": "Неверная валюта",
|
||||
"这笔施舍当前状态不能回填": "В текущем статусе подаяния нельзя ввести номер ордера",
|
||||
"这个网络今天丢得够多了": "С этой сети сегодня уже накидали достаточно",
|
||||
"今天已经丢过了,明天再来": "Сегодня уже кидали, приходите завтра",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "не оплачено",
|
||||
"待确认": "ожидает",
|
||||
"已到账": "получено",
|
||||
"已过期": "истекло",
|
||||
"已关闭": "закрыто",
|
||||
"已拒绝": "отклонено",
|
||||
"空碗未入帮": "Пустая миска",
|
||||
"一袋弟子": "Ученик 1 мешка",
|
||||
"二袋弟子": "Ученик 2 мешков",
|
||||
"三袋弟子": "Ученик 3 мешков",
|
||||
"四袋弟子": "Ученик 4 мешков",
|
||||
"五袋弟子": "Ученик 5 мешков",
|
||||
"六袋弟子": "Ученик 6 мешков",
|
||||
"七袋弟子": "Ученик 7 мешков",
|
||||
"八袋弟子": "Ученик 8 мешков",
|
||||
"九袋长老": "Старейшина 9 мешков",
|
||||
"帮主": "Глава гильдии",
|
||||
"副帮主": "Заместитель главы",
|
||||
"传功长老": "Старейшина-наставник",
|
||||
"执法长老": "Старейшина закона",
|
||||
"掌棒龙头": "Хранитель посоха",
|
||||
"掌钵龙头": "Хранитель чаши",
|
||||
"长老": "Старейшина",
|
||||
"舵主": "Глава отделения",
|
||||
"弟子": "Ученик",
|
||||
"总舵": "Штаб",
|
||||
"投了个硬币": "кинул монетку",
|
||||
"善心人": "добрая душа",
|
||||
"大善人": "великий благодетель",
|
||||
"活菩萨": "живой святой",
|
||||
"财神爷": "бог богатства",
|
||||
"刚刚": "только что",
|
||||
"%d 分钟前": "%d мин назад",
|
||||
"%d 小时前": "%d ч назад",
|
||||
"%d 天前": "%d дн назад",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 土耳其语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["tr"] = map[string]string{
|
||||
// ---- 站名 / 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ç.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Bir sadaka ver. Bağış yap, Sevap Defteri'ne gir; ücretsiz bir jeton bile sevgidir.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Siber Dilenci",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "Bir sadaka ver. Binance Pay ile bağış yap ve Sevap Defteri'ne bir satır bırak.",
|
||||
"#赛博丐帮": "#CyberBeggars",
|
||||
"(已屏蔽:%s)": "(gizli: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Sokağa dön",
|
||||
"回到刚才看的碗": "Az önce baktığın kaseye dön",
|
||||
"声音开关": "Ses düğmesi",
|
||||
"声音": "Ses",
|
||||
"排行榜": "Sıralama",
|
||||
"我的后台": "Panelim",
|
||||
"站长": "Sahip ",
|
||||
"登录": "Giriş",
|
||||
"我的站": "Kasem",
|
||||
"开通要饭站": "Kase aç",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Bir sadaka ver, iyi insan",
|
||||
"🪙 一毛也是爱": "🪙 Bir kuruş bile sevgidir",
|
||||
"💸 投币就上榜": "💸 Bağış yap, listeye gir",
|
||||
"📜 留一句话刻功德簿": "📜 Sevap Defteri'ne bir satır bırak",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Tek tweetle kendi kaseni aç",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Siber Dilenciler Loncası: herkese bir kase",
|
||||
"· 赛博丐帮,行行好": "· Siber Dilenciler Loncası · Bir sadaka ver",
|
||||
"作者": "Yapımcı",
|
||||
"收款由": "Ödemeler:",
|
||||
"驱动 · 字体": "· Yazı tipi",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Ses: kapalı",
|
||||
"声音:开(点击静音)": "Ses: açık (susturmak için tıkla)",
|
||||
"点一下开始播放": "Müziği başlatmak için dokun",
|
||||
"已复制": "Kopyalandı",
|
||||
"功德 +": "Sevap +",
|
||||
"你的名号和留言已刻上功德簿": "Adın ve mesajın Sevap Defteri'ne yazıldı",
|
||||
"看看功德簿": "Sevap Defteri'ne bak",
|
||||
"分享卡片": "Paylaşım kartı",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Gönderildi. Sahip onaylayınca listeye gireceksin. Bu sayfa kendini yeniler.",
|
||||
"这笔施舍已": "Bu bağış: ",
|
||||
"过期": "süresi doldu",
|
||||
"下单失败": "oluşturulamadı",
|
||||
"被站长拒绝": "sahip tarafından reddedildi",
|
||||
"关闭": "kapatıldı",
|
||||
",请回到页面重新投币。": ". Lütfen geri dönüp tekrar bağış yap.",
|
||||
"没成功,再试试": "Olmadı, tekrar dene",
|
||||
"网络开小差了": "Ağ takıldı",
|
||||
"分页": "Sayfalama",
|
||||
"‹ 上一页": "‹ Önceki",
|
||||
"下一页 ›": "Sonraki ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Sahip girişi ·",
|
||||
"🔑 站长登录": "🔑 Sahip girişi",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "X kullanıcı adın ve kaseni açarken belirlediğin şifreyle panele gir. Ana site sahibi: kullanıcı adını boş bırak.",
|
||||
"X 用户名": "X kullanıcı adı",
|
||||
"例如 qianyuwing(主站留空)": "örn. qianyuwing (ana site için boş bırak)",
|
||||
"口令": "Şifre",
|
||||
"忘了口令?": "Şifreni mi unuttun?",
|
||||
"用 X 发推找回": "Tweetle kurtar",
|
||||
"。还没有要饭站?": ". Henüz kasen yok mu?",
|
||||
"用 X 开一个": "X ile aç",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Panel ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 Hayırlı olsun! Kasen",
|
||||
"已上线": "yayında",
|
||||
"(待主站站长收录后进榜)": " (ana site sahibi listeye alınca sıralamalara girer)",
|
||||
"下一步:": "Sıradaki adım: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "aşağıdaki \"Ödeme\" bölümüne Binance UID'ni yaz (on saniye), yoksa kimse sana ödeme yapamaz.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Sonra %s üzerinden gir (X kullanıcı adı %s + şifren). Unutursan yeni bir tweetle kurtarabilirsin.",
|
||||
"后台": "panel",
|
||||
"· 碗里": "· Kasede",
|
||||
"位施主 ·": "bağışçı ·",
|
||||
"次 · 钢镚": "bağış · jeton",
|
||||
"待收录": "listede değil",
|
||||
"🔑 改口令": "🔑 Şifre",
|
||||
"退出": "Çıkış",
|
||||
"⏳ 待确认": "⏳ Bekleyen",
|
||||
"✏️ 资料": "✏️ Profil",
|
||||
"💰 收款方式": "💰 Ödeme",
|
||||
"📜 施舍记录": "📜 Bağışlar",
|
||||
"🏚 所有站点": "🏚 Tüm kaseler",
|
||||
"🧹 留言巡查": "🧹 Mesajlar",
|
||||
"⏳ 待确认的施舍": "⏳ Onay bekleyen bağışlar",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Binance uygulamasından transferi kontrol et (tutar ve not kodu), sonra onayla; bağışçı listeye girsin.",
|
||||
"备注码": "Not kodu",
|
||||
"· 币安订单": "· Binance emri",
|
||||
"✓ 确认到账": "✓ Alındı",
|
||||
"✗ 没收到": "✗ Alınmadı",
|
||||
"站点标题": "Kase adı",
|
||||
"(来自 X @": "(X'ten @",
|
||||
",锁定)": ", kilitli)",
|
||||
"头像 emoji": "Avatar emojisi",
|
||||
"一句话口号": "Tek satırlık slogan",
|
||||
"绑定 X": "X bağla",
|
||||
"(主页链接或 @名字,留空不显示)": "(profil linki veya @ad; boşsa gösterilmez)",
|
||||
"https://x.com/你的名字": "https://x.com/kullaniciadin",
|
||||
"保存资料": "Profili kaydet",
|
||||
"config.env 配置": "config.env'de ayarlı",
|
||||
"已绑币安 Key · 自动确认": "Binance Key bağlı · otomatik onay",
|
||||
"直接转账 · UID": "Doğrudan transfer · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Kase henüz kurulmadı — ayarlamak için dokun",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "Ana sitenin ödeme yöntemi sunucudaki config.env'de ayarlanır. Şu an: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "BinancePayTool geçidi ile otomatik onay (varsayılan hesap)",
|
||||
"直接转账": "doğrudan transfer",
|
||||
"校验网关默认账号": "Geçidin varsayılan hesabını doğrula",
|
||||
"✅ 已绑定币安账号(UID": "✅ Binance hesabı bağlı (UID",
|
||||
"),施主付款后": "). Bağışlar ",
|
||||
"自动确认上榜": "otomatik onaylanır",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " Ödeme panelinde QR kodun / tek dokunuşla açma gösterilir.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Bağışçılar QR okutabilsin veya uygulamayı tek dokunuşla açabilsin diye bir alma linki ekle.",
|
||||
"重新校验 Key": "Key'i yeniden doğrula",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Bağlantıyı kaldırınca doğrudan transfere geçilir (her ödemeyi elle onaylarsın). Devam?",
|
||||
"解绑": "Bağlantıyı kaldır",
|
||||
"换一个 Key / 更新收款链接": "Key değiştir / alma linkini güncelle",
|
||||
"当前是": "Şu anki mod: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Bağışçılar Binance uygulamasında UID'ne transfer yapar, \"Ödedim\"e dokunur, sen burada onaylarsın.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Kase henüz kurulmadı: Binance UID'ni yaz, para almaya başla. On saniye sürer.",
|
||||
"方式一:填币安 UID(最简单)": "1. yol: Binance UID'n (en kolayı)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "Binance uygulaması → sol üstteki avatara dokun; altındaki sayı senin",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (aynı zamanda Pay ID). Bağışçılar bağış yaparken bunu görür ve Binance uygulamasında \"Öde → Transfer\" ile sıfır komisyonla gönderir.",
|
||||
"币安 UID": "Binance UID",
|
||||
"例如 12345678": "örn. 12345678",
|
||||
"收款链接": "Alma linki",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(isteğe bağlı. Varsa bağışçılar QR okutabilir veya Binance'i tek dokunuşla açabilir; yoksa UID ile transfer yaparlar)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Nasıl alınır: Binance alma sayfasında \"Görseli kaydet\"e dokun, QR'ı herhangi bir tarayıcı uygulamasıyla oku ve linki buraya yapıştır.",
|
||||
"保存": "Kaydet",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "2. yol: salt okunur Binance API Key bağla (otomatik onay)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Bağışlar otomatik onaylanır. Key'e yalnızca \"Enable Reading\" yetkisi yeter, para çekemez; bu site Key'i saklamaz, ödeme geçidi şifreli tutar.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "toplam · spam mesajları gizle veya kişiyi engelle (kayıtlar kalır) · yanıtla",
|
||||
"已屏蔽此人": "Kişi engellendi",
|
||||
"(已屏蔽:": "(gizli: ",
|
||||
"🥣 站长:": "🥣 Sahip: ",
|
||||
"恢复留言": "Mesajı göster",
|
||||
"屏蔽留言": "Mesajı gizle",
|
||||
"恢复此人": "Engeli kaldır",
|
||||
"屏蔽此人": "Kişiyi engelle",
|
||||
"回一句…": "Yanıtla…",
|
||||
"回复": "Yanıtla",
|
||||
"还没有施舍记录": "Henüz bağış yok",
|
||||
"🔑 修改口令": "🔑 Şifre değiştir",
|
||||
"新口令(至少 6 位)": "Yeni şifre (en az 6 karakter)",
|
||||
"再输一遍": "Tekrar yaz",
|
||||
"改完后其它设备上的登录会失效。": "Diğer cihazlardaki oturumlar kapanır.",
|
||||
"确认修改": "Şifreyi değiştir",
|
||||
"🏚 所有要饭站": "🏚 Tüm kaseler",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "toplam · kural bozanları kov · sahibin şifresini sıfırla",
|
||||
"已除名": "kovuldu",
|
||||
"未收录": "listede değil",
|
||||
"已绑 Key 自动确认": "Key bağlı, otomatik onay",
|
||||
"位施主 · 钢镚": "bağışçı · jeton",
|
||||
"开张": "açıldı",
|
||||
"取消收录": "Listeden çıkar",
|
||||
"收录上榜": "Listeye al",
|
||||
"除名": "Kov",
|
||||
"恢复": "Geri al",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "/%s için şifre sıfırlansın mı? Yeni şifre yalnızca bir kez gösterilir.",
|
||||
"重置口令": "Şifreyi sıfırla",
|
||||
"还没有子站": "Henüz kase yok",
|
||||
"🧹 全站最新留言": "🧹 Site genelinde son mesajlar",
|
||||
"条 · 跨站点巡查广告": "toplam · tüm kaselerde spam devriyesi",
|
||||
"暂无留言": "Henüz mesaj yok",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "Binance uygulaması → Hesap → API Yönetimi → API Oluştur: ",
|
||||
"只勾「允许读取」": "yalnızca \"Enable Reading\" seç",
|
||||
",其它权限都不要,": ", başka yetki verme, ",
|
||||
"不用设 IP 白名单": "IP beyaz listesi gerekmez",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (salt okunur Key para çekemez). Yalnızca gelen transferlerini okumak için kullanılır, şifreli saklanır, asla gösterilmez.",
|
||||
"(App 头像页可见)": "(uygulamadaki profil sayfanda görünür)",
|
||||
"(选填,填了施主能扫码)": "(isteğe bağlı; bağışçılar QR okutabilir)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Alma linki nasıl alınır: Binance alma sayfasında \"Görseli kaydet\"e dokun ve QR'ı herhangi bir tarayıcı uygulamasıyla oku.",
|
||||
"绑定并校验": "Bağla ve doğrula",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Şifreyi X ile kurtar",
|
||||
"🔑 用 X 找回口令": "🔑 Şifreyi X ile kurtar",
|
||||
"🏚 开通我的要饭站": "🏚 Kasemi aç",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Sahibi olduğunu kanıtlamak için kodlu bir tweet at, sonra yeni şifreni belirle.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Bağış şart değil. X hesabından tek bir tweet kaseni açar: adı X görünen adın, avatarı X avatarın, her hesaba bir kase. Tweet aynı zamanda kaseni sokağa çıkarır.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Uygulama içi tarayıcıdasın. Tek dokunuşla tweet X'i açmayabilir ve geri döndüğünde kaldığın yeri kaybedebilirsin.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Sağ üstteki \"⋯\"a dokunup \"Tarayıcıda aç\"ı seç",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (veya linki Safari / Chrome'a kopyala), sonra devam et.",
|
||||
"复制本页链接": "Bu sayfanın linkini kopyala",
|
||||
"发一条推文,带上验证码": "Kodu içeren bir tweet at",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Tweet metni (istediğin gibi değiştir, kodu koru yeter)",
|
||||
"换一条": "Başka bir tane",
|
||||
"🐦 一键去 X 发推": "🐦 X'te paylaş",
|
||||
"复制文案": "Metni kopyala",
|
||||
"没拉起 X App?点这里用网页版发 →": "X uygulaması açılmadı mı? Web'den paylaş →",
|
||||
"验证码": "Kod",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "büyük/küçük harf fark etmez, 24 saat geçerli. Metinde kasenin linki var, tweet aynı zamanda reklam olur.",
|
||||
"把推文链接贴回来": "Tweet linkini buraya yapıştır",
|
||||
"推文链接": "Tweet linki",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/kullaniciadin/status/1234567890",
|
||||
"验证": "Doğrula",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Tweeti attıktan sonra paylaş düğmesi → Linki kopyala.",
|
||||
"还没开过站?": "Henüz kasen yok mu? ",
|
||||
"去开一个": "Bir tane aç",
|
||||
"已经开过站?": "Zaten kasen var mı? ",
|
||||
"站长登录": "Sahip girişi",
|
||||
"🔑 设置新口令": "🔑 Yeni şifre belirle",
|
||||
"保存并登录": "Kaydet ve giriş yap",
|
||||
"✅ X 验证通过": "✅ X doğrulandı",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· ad ve avatar X'ten gelir (avatar düzenli olarak eşitlenir)",
|
||||
"站点地址": "Kase adresi",
|
||||
"(就是你的 X 用户名,不用填)": "(X kullanıcı adın; doldurmana gerek yok)",
|
||||
"行行好,赏口饭吃 🙏": "Bir sadaka ver, iyi insan 🙏",
|
||||
"登录口令": "Giriş şifresi",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Sonra X kullanıcı adı + şifreyle gir; unutursan yeni bir tweetle kurtar.",
|
||||
"口令(至少 6 位)": "Şifre (en az 6 karakter)",
|
||||
"开张 🏚": "Kaseyi aç 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Açtıktan sonra panelden Binance Key bağla veya UID'ni yaz, para almaya başla. İçerikten sen sorumlusun; spam kaseleri lonca kovar.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "%s için bağış",
|
||||
"先回去看看": "Şimdilik geri dön",
|
||||
"给 %s 投币": "Bağış alıcısı: %s",
|
||||
"金额要": "Tutar ",
|
||||
"一分不差": "kuruşu kuruşuna",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": " aynı olmalı: geçit bu benzersiz küsuratla ödemeyi tanır, transferden saniyeler sonra onaylar",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Binance Pay ile doğrudan sahibe gönder, sonra aşağıdaki \"Ödedim\"e dokun",
|
||||
"打开币安 App 转账": "Ödeme için Binance'i aç",
|
||||
"唤起后手动输入金额": "Uygulamada tutarı gir",
|
||||
",备注填": ", not",
|
||||
"用另一台手机扫码": "Başka bir telefonla okut",
|
||||
"收款二维码": "Ödeme QR kodu",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "Binance uygulaması → Tara → tutarı gir",
|
||||
"或手动转账": "Veya elle transfer et",
|
||||
"转账信息": "Transfer bilgileri",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "Binance uygulaması → \"Öde\" → \"Transfer\" → alıcı: aşağıdaki UID → tutar",
|
||||
"→ 备注填": "→ not",
|
||||
"→ 转完回来点「我已施舍」": "→ dönüp \"Ödedim\"e dokun",
|
||||
"收款方": "Alıcı",
|
||||
"复制": "Kopyala",
|
||||
"金额": "Tutar",
|
||||
"备注": "Not",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Ödeme bekleniyor… gönderince otomatik onaylanır; bu sayfa kendini yeniler",
|
||||
"付了但一直没确认?": "Ödedin ama onaylanmadı mı?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Binance emir numarası (18 hane, transfer detaylarında)",
|
||||
"我付过了,帮我核对": "Ödedim, kontrol edin",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Binance emir numarası (isteğe bağlı, 18 hane; onayı hızlandırır)",
|
||||
"我已施舍,等站长确认": "Ödedim, sahibin onayını bekliyorum",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "\"Ödedim\"e bağışı başlattığın cihazdan dokunmalısın.",
|
||||
"打不开?": "Açılmıyor mu? ",
|
||||
"用网关收银页支付": "Geçidin ödeme sayfasından öde",
|
||||
"施舍进行中": "Bağış devam ediyor",
|
||||
"🙏 谢谢施主": "🙏 Teşekkürler, iyi kalpli bağışçı",
|
||||
"你在 %s 的施主榜排第 %d 位": "%s bağışçı listesinde %d. sıradasın",
|
||||
"回到 %s 的碗": "%s kasesine dön",
|
||||
"复制链接分享": "Paylaşmak için linki kopyala",
|
||||
"🖼 分享卡片": "🖼 Paylaşım kartı",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "X'te veya arkadaşlarınla paylaşmak için piksel bir kart oluştur, dilenciye de reklam olsun.",
|
||||
"生成分享卡": "Kart oluştur",
|
||||
"分享卡": "Paylaşım kartı",
|
||||
"长按图片保存,或": "Kaydetmek için görsele uzun bas ya da ",
|
||||
"下载": "indir",
|
||||
"🏚 你也可以要饭": "🏚 Sen de dilenebilirsin",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "X hesabından tek tweetle kendi kaseni aç; para doğrudan Binance hesabına gider.",
|
||||
"站长没有确认这笔施舍": "Sahip bu bağışı onaylamadı",
|
||||
"这笔施舍已过期": "Bu bağışın süresi doldu",
|
||||
"如果你确实转了,请联系站长核对。": "Gerçekten gönderdiysen kontrol için sahiple iletişime geç.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Para çekilmedi; bağış yapmak istersen baştan başla.",
|
||||
"再来一次": "Tekrar dene",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Sıralama ·",
|
||||
"🏆 施主榜": "🏆 Bağışçılar",
|
||||
"🥣 乞丐榜": "🥣 Dilenciler",
|
||||
"🪙 人气榜": "🪙 Popülerlik",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · tüm kaseler toplam ·",
|
||||
"位施主": "bağışçı",
|
||||
"总榜": "Tüm zamanlar",
|
||||
"本周": "Bu hafta",
|
||||
"要到最多的要饭站 · 共": "En çok toplayan kaseler ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "En çok jeton alanlar (ücretsiz) ·",
|
||||
"← 回到刚才看的碗": "← Az önce baktığın kaseye dön",
|
||||
"施主自己填的 X,未经验证": "Bağışçının kendi girdiği X, doğrulanmadı",
|
||||
"次 · 施舍过": "bağış ·",
|
||||
"个乞丐": "dilenciye verdi",
|
||||
"榜上无人": "Henüz kimse yok",
|
||||
"就是我": "benim",
|
||||
"还没有人上榜": "Listede henüz kimse yok",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "dileniyor ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ Bu kase henüz lonca listesinde değil, o yüzden sıralamalarda yok.",
|
||||
"主站站长审核后会收录。": "Ana site sahibi inceledikten sonra listeye alacak.",
|
||||
"· 榜 #": "· Sıra #",
|
||||
"升%s要 %s": "%s için %s EXP",
|
||||
"满级": "Maks seviye",
|
||||
"饱食度": "Tokluk",
|
||||
"今天还没吃饭": "Bugün hiç yemedi",
|
||||
"今天有人投币了": "Bugün biri bağış yaptı",
|
||||
"今天丢过了": "Bugün zaten attın",
|
||||
"丢个钢镚(免费)": "Jeton at (ücretsiz)",
|
||||
"💸 投币施舍": "💸 Bağış yap",
|
||||
"还没摆碗,暂不能投币": "Kase kurulmadı, bağış yapılamaz",
|
||||
"去配置": "Ayarla",
|
||||
"钢镚": "Jeton",
|
||||
"· 今日": "· bugün",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 jeton =",
|
||||
"碗里已有": "Kasede",
|
||||
"施主": "Bağışçı",
|
||||
"人": "",
|
||||
"今日": "Bugün",
|
||||
"🕹️ 投币施舍": "🕹️ Bozuk para at",
|
||||
"玩家名(上榜用,可留空)": "Oyuncu adı (liste için, isteğe bağlı)",
|
||||
"匿名施主": "Anonim",
|
||||
"你的 X(可选,显示头像)": "X'in (isteğe bağlı, avatarını gösterir)",
|
||||
"投多少": "Tutar,",
|
||||
"✏️ 自定义": "✏️ Özel",
|
||||
"输入金额,最多两位小数": "Tutar, en fazla 2 ondalık",
|
||||
"对乞丐喊话": "Dilenciye bir şey söyle",
|
||||
"例如:别买烟了,去吃饭": "örn. Sigarayı bırak, yemek al",
|
||||
"投币 💸": "Bağış yap 💸",
|
||||
"投币": "Bağış yap",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Binance uygulamasıyla okut veya tek dokunuşla aç; ödeme gelince Sevap Defteri'ne otomatik yazılır.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Binance Pay ile doğrudan sahibe gönder; sahip onaylayınca listeye girersin.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "En az %s, en fazla %s. Mesajda link veya iletişim bilgisi olmasın.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Bu dilenci henüz kase kurmamış (ödeme yöntemi yok), para alamıyor.",
|
||||
"去后台配置 →": "Panelden ayarla →",
|
||||
"🏚 想自己要饭?": "🏚 Sen de dilenmek ister misin?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "X hesabından tek tweetle kendi kaseni aç: kendi adresin, kendi Sevap Defteri'n ve bağışçı listen, para doğrudan Binance hesabına.",
|
||||
"用 X 开通我的要饭站 →": "X ile kasemi aç →",
|
||||
"人气榜": "Popülerlik",
|
||||
"功德簿": "Sevap Defteri",
|
||||
"施主榜": "Bağışçılar",
|
||||
"乞丐榜": "Dilenciler",
|
||||
"已屏蔽的施主": "Engellenen bağışçı",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "Sevap Defteri bomboş. İlk para buraya yazılacak.",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · en cömert bağışçılar:",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 ilk bağışçı 💎 en büyük bağış 🔥 müdavim",
|
||||
"丐帮排名 · 要到最多的要饭站": "Lonca sıralaması · en çok toplayan kaseler",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Popülerlik · en çok jeton alan kaseler (jeton ücretsiz)",
|
||||
"次": "bağış",
|
||||
"榜上无人,第一个投币的就是首席施主": "Henüz kimse yok. İlk bağış yapan baş bağışçı olur.",
|
||||
"本站": "bu kase",
|
||||
"叮!钢镚 +1": "Çın! Jeton +1",
|
||||
"没丢进去": "Kaseyi ıskaladın",
|
||||
"网络开小差了,再试一次": "Ağ takıldı, tekrar dene",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Geçersiz tutar (en fazla 2 ondalık)",
|
||||
"最少施舍 %s %s": "En az bağış %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "En fazla bağış %s %s. Gerçekten o kadar varsa birkaç seferde gönder",
|
||||
"支付网关开小差了:%s": "Ödeme geçidi takıldı: %s",
|
||||
"手速太快了": "Çok hızlısın",
|
||||
"这个乞丐不在": "Bu dilenci burada değil",
|
||||
"请先打开要饭页再丢": "Önce kase sayfasını aç",
|
||||
"服务器开小差了": "Sunucu takıldı",
|
||||
"手速太快了,歇一会儿": "Çok hızlısın, biraz dinlen",
|
||||
"已提交,等站长确认": "Gönderildi, sahibin onayı bekleniyor",
|
||||
"网关返回 %s": "Geçit yanıtı: %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "%s üzerindeki kasemin şifresini unuttum, ben olduğumu kanıtlamak için tweet atıyorum 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "%s üzerinde bir kase kurdum 🥣 Bir sadaka verin, iyi insanlar~ %s #CyberBeggars %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Siber Dilenciler Loncası'na katıldım 🧎 Bir kuruş bile sevgidir, ücretsiz bir jeton da olur 🪙 %s #CyberBeggars %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "İşi bıraktım, artık dileniyorum. Kase burada, iyi insanlar el uzatın 🥣 %s #CyberBeggars %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "Dilenciler loncası üye alıyor, ilk ben başlıyorum 🥣 Bağış yapan Sevap Defteri'ne girer, yapmayan ücretsiz jeton atsın %s #CyberBeggars %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Bu tweette %s kodu yok. Doğru tweeti attığından emin ol",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s zaten bir kase açmış: %s. Şifreni unuttuysan giriş sayfasında X ile sıfırla.",
|
||||
"@%s 已经开过站了": "@%s zaten bir kase açmış",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "%s adresi dolu (@%s zaten bir kase açmış olabilir; şifreyi giriş sayfasında X ile kurtar)",
|
||||
"@%s 还没开过要饭站": "@%s henüz kase açmamış",
|
||||
"解绑币安 Key 失败:%s": "Binance Key bağlantısı kaldırılamadı: %s",
|
||||
"绑定失败:%s": "Bağlama başarısız: %s",
|
||||
"解绑失败:%s": "Bağlantı kaldırma başarısız: %s",
|
||||
"校验失败:%s": "Doğrulama başarısız: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "/%s şifresi %s olarak sıfırlandı (yalnızca bir kez gösterilir, sahibe ilet)",
|
||||
"本站未配置支付网关": "Ödeme geçidi ayarlanmamış",
|
||||
"网关连不上,请稍后再试": "Geçide ulaşılamıyor, sonra tekrar dene",
|
||||
"方法不允许": "Yönteme izin verilmiyor",
|
||||
"主站不存在": "Ana site bulunamadı",
|
||||
"页面不存在": "Sayfa bulunamadı",
|
||||
"赛博丐帮没有这条路。": "Siber Dilenciler Loncası'nda böyle bir yol yok.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Ya henüz açılmadı ya da lonca tarafından kovuldu.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Bu dilenci henüz kase kurmamış (ödeme yöntemi yok), şimdilik para alamıyor",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "X kullanıcı adı yalnızca harf, rakam ve alt çizgi içerebilir (@ olsa da olur olmasa da)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Ad ve mesajda link veya iletişim bilgisi olmasın. Dilenciler reklam almaz",
|
||||
"没有这笔施舍": "Bağış bulunamadı",
|
||||
"站点不存在": "Kase bulunamadı",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "\"Ödedim\"e bağışı başlattığın cihazdan dokun",
|
||||
"币安订单编号是 18 位数字,不填也行": "Binance emir numarası 18 hanedir (isteğe bağlı)",
|
||||
"核对失败": "Kontrol başarısız",
|
||||
"这笔施舍不是网关模式": "Bu bağış geçit üzerinden değil",
|
||||
"试得太频繁了,一分钟后再试": "Çok fazla deneme, bir dakika sonra tekrar dene",
|
||||
"请在发起施舍的那台设备上回填": "Emir numarasını bağışı başlattığın cihazdan gir",
|
||||
"币安订单编号是 18 位数字": "Binance emir numarası 18 hanedir",
|
||||
"本站未开放开站": "Bu sitede kase açma kapalı",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "Kodun süresi dolmuş (veya başka bir tarayıcıda oluşturulmuş). Yeni bir kod oluştur",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Geçersiz tweet linki. Şöyle görünmeli: https://x.com/kullaniciadin/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Bu tweet koddan daha eski. Kodu oluşturduktan sonra atılan bir tweet kullan",
|
||||
"验证已失效,请重新验证": "Doğrulama süresi doldu, tekrar doğrula",
|
||||
"口号和介绍里别放链接、联系方式": "Sloganda link veya iletişim bilgisi olmasın",
|
||||
"口令至少 6 位": "Şifre en az 6 karakter olmalı",
|
||||
"两次口令不一致": "Şifreler eşleşmiyor",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "Ana sitenin şifresi sunucudaki config.env'de değiştirilir, X ile değil",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Bu X hesabı bugün çok fazla sıfırlandı, yarın gel",
|
||||
"口令至少 6 位,且两次一致": "Şifre en az 6 karakter olmalı ve eşleşmeli",
|
||||
"口令已重置,其它设备上的登录已失效": "Şifre sıfırlandı. Diğer cihazlardaki oturumlar kapatıldı",
|
||||
"X 用户名或口令不对": "X kullanıcı adı veya şifre yanlış",
|
||||
"请先登录": "Önce giriş yap",
|
||||
"登录状态已失效,请重新登录。": "Oturumun süresi doldu, tekrar giriş yap.",
|
||||
"歇一会儿再来。": "Biraz dinlen, sonra gel.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Bu kase için çok fazla yanlış şifre girildi. Biraz dinlen.",
|
||||
"站点标题不能为空": "Kase adı boş olamaz",
|
||||
"资料里别放链接、联系方式": "Profilde link veya iletişim bilgisi olmasın",
|
||||
"资料已保存": "Profil kaydedildi",
|
||||
"主站的收款方式在服务器 config.env 里改": "Ana sitenin ödeme yöntemi sunucudaki config.env'de değiştirilir",
|
||||
"填一下币安 UID,不然钱没处去": "Binance UID'ni yaz, yoksa paranın gidecek yeri yok",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Doğrudan transfere geçildi: bağışçılar ödemeyi bildirir, sen burada onaylarsın",
|
||||
"本站不支持绑定": "Bu sitede bağlama yok",
|
||||
"API Key 和 Secret 都要填": "API Key ve Secret ikisi de gerekli",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Binance UID yalnızca rakamlardan oluşur (uygulamadaki profil sayfanda görünür)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Bağlandı! Binance Key'i doğruladı; bağışlar artık otomatik onaylanacak",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Bağlantı kaldırıldı. Artık doğrudan transfer modundasın, UID'nin dolu olduğundan emin ol",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Doğrulandı: Binance Key çalışıyor, ödemeler otomatik onaylanacak",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "Ana sitenin şifresi sunucudaki config.env'de (ADMIN_PASSWORD) değiştirilir",
|
||||
"口令已修改,其它设备上的登录已失效": "Şifre değiştirildi. Diğer cihazlardaki oturumlar kapatıldı",
|
||||
"这笔施舍当前不能确认/拒绝": "Bu bağış şu an onaylanamaz veya reddedilemez",
|
||||
"只能回复自己站的施舍": "Yalnızca kendi kasendeki bağışlara yanıt verebilirsin",
|
||||
"回复里别放链接、联系方式": "Yanıtta link veya iletişim bilgisi olmasın",
|
||||
"未知操作": "Bilinmeyen işlem",
|
||||
"无权操作": "Yetkin yok",
|
||||
"没有这个站": "Böyle bir kase yok",
|
||||
"未配置支付网关": "Ödeme geçidi ayarlanmamış",
|
||||
"请求来源不对": "Geçersiz istek kaynağı",
|
||||
"请从本站页面操作。": "Lütfen sitenin kendi sayfalarını kullan.",
|
||||
"页面渲染失败": "Sayfa oluşturulamadı",
|
||||
"稍后再试。": "Sonra tekrar dene.",
|
||||
"地址已被占用": "Adres zaten alınmış",
|
||||
"这个 X 账号已经开过站了": "Bu X hesabının zaten bir kasesi var",
|
||||
"连不上 X 接口: %w": "X'e ulaşılamıyor: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Tweet bulunamadı (link yanlış veya tweet herkese açık değil)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Tweet okunamıyor (silinmiş veya hesap korumalı)",
|
||||
"头像地址不在允许的域名": "Avatar URL'si izin verilen bir alan adında değil",
|
||||
"头像下载失败": "Avatar indirilemedi",
|
||||
"头像不是有效图片": "Avatar geçerli bir görsel değil",
|
||||
"金额格式不对": "Geçersiz tutar",
|
||||
"收款链接过长": "Alma linki çok uzun",
|
||||
"收款链接须为 https 链接": "Alma linki https olmalı",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Alma linki bir Binance alan adı olmalı (app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "X profil linki şöyle görünmeli: https://x.com/kullaniciadin",
|
||||
"核对成功,已到账": "Doğrulandı, ödeme alındı",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Transfer bulundu ama tutar eksik; ödenen tutar kaydedildi",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Transfer bulunamadı: emir numarasını ve alıcı hesabı kontrol et, Binance'te göründükten sonra tekrar dene",
|
||||
"这笔转账已经被别的订单用过了": "Bu transfer başka bir emirde zaten kullanılmış",
|
||||
"币种不对": "Yanlış para birimi",
|
||||
"这笔施舍当前状态不能回填": "Bu bağışın durumu emir numarası girmeye izin vermiyor",
|
||||
"这个网络今天丢得够多了": "Bu ağ bugün yeterince jeton attı",
|
||||
"今天已经丢过了,明天再来": "Bugün zaten attın, yarın gel",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "ödenmedi",
|
||||
"待确认": "bekliyor",
|
||||
"已到账": "alındı",
|
||||
"已过期": "süresi doldu",
|
||||
"已关闭": "kapatıldı",
|
||||
"已拒绝": "reddedildi",
|
||||
"空碗未入帮": "Boş kase",
|
||||
"一袋弟子": "1 Çuvallı Çırak",
|
||||
"二袋弟子": "2 Çuvallı Çırak",
|
||||
"三袋弟子": "3 Çuvallı Çırak",
|
||||
"四袋弟子": "4 Çuvallı Çırak",
|
||||
"五袋弟子": "5 Çuvallı Çırak",
|
||||
"六袋弟子": "6 Çuvallı Çırak",
|
||||
"七袋弟子": "7 Çuvallı Çırak",
|
||||
"八袋弟子": "8 Çuvallı Çırak",
|
||||
"九袋长老": "9 Çuvallı Pir",
|
||||
"帮主": "Lonca Reisi",
|
||||
"副帮主": "Reis Yardımcısı",
|
||||
"传功长老": "Öğreti Piri",
|
||||
"执法长老": "Yasa Piri",
|
||||
"掌棒龙头": "Asa Başı",
|
||||
"掌钵龙头": "Kase Başı",
|
||||
"长老": "Pir",
|
||||
"舵主": "Şube Reisi",
|
||||
"弟子": "Çırak",
|
||||
"总舵": "Merkez",
|
||||
"投了个硬币": "bir para attı",
|
||||
"善心人": "iyi yürekli",
|
||||
"大善人": "büyük hayırsever",
|
||||
"活菩萨": "yaşayan evliya",
|
||||
"财神爷": "bereket tanrısı",
|
||||
"刚刚": "az önce",
|
||||
"%d 分钟前": "%d dk önce",
|
||||
"%d 小时前": "%d sa önce",
|
||||
"%d 天前": "%d gün önce",
|
||||
}
|
||||
}
|
||||
+490
@@ -0,0 +1,490 @@
|
||||
package main
|
||||
|
||||
// 越南语。key 是中文原文,占位符 %s/%d 顺序须与中文一致。
|
||||
func init() {
|
||||
translations["vi"] = map[string]string{
|
||||
// ---- 站名 / 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.",
|
||||
"行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。": "Làm ơn làm phước, cho xin miếng cơm. Bố thí là vào Sổ Công Đức; ném xu miễn phí cũng là tình thương.",
|
||||
"%s:%s · 赛博要饭,行行好": "%s: %s · Ăn Xin Cyber",
|
||||
"行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。": "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.",
|
||||
"#赛博丐帮": "#CaiBangCyber",
|
||||
"(已屏蔽:%s)": "(đã ẩn: %s)",
|
||||
// ---- 导航 / 页脚 / 通用 ----
|
||||
"回到街头": "Về lại phố",
|
||||
"回到刚才看的碗": "Về lại cái bát vừa xem",
|
||||
"声音开关": "Bật/tắt âm thanh",
|
||||
"声音": "Âm thanh",
|
||||
"排行榜": "Bảng xếp hạng",
|
||||
"我的后台": "Trang quản lý",
|
||||
"站长": "Chủ bát ",
|
||||
"登录": "Đăng nhập",
|
||||
"我的站": "Bát của tôi",
|
||||
"开通要饭站": "Mở một cái bát",
|
||||
"🙏 行行好,赏口饭吃": "🙏 Làm ơn làm phước, cho xin miếng cơm",
|
||||
"🪙 一毛也是爱": "🪙 Một xu cũng là tình thương",
|
||||
"💸 投币就上榜": "💸 Bố thí là lên bảng",
|
||||
"📜 留一句话刻功德簿": "📜 Để lại một câu trong Sổ Công Đức",
|
||||
"🏚 发条推就能开自己的要饭站": "🏚 Một tweet là có bát ăn xin riêng",
|
||||
"👾 赛博丐帮,人人有碗": "👾 Cái Bang Cyber, ai cũng có bát",
|
||||
"· 赛博丐帮,行行好": "· Cái Bang Cyber · Làm ơn làm phước",
|
||||
"作者": "Tác giả",
|
||||
"收款由": "Thanh toán bởi",
|
||||
"驱动 · 字体": "· Phông chữ",
|
||||
"缝合怪像素字体": "Fusion Pixel Font",
|
||||
"声音:关": "Âm thanh: tắt",
|
||||
"声音:开(点击静音)": "Âm thanh: bật (bấm để tắt tiếng)",
|
||||
"点一下开始播放": "Chạm để phát nhạc",
|
||||
"已复制": "Đã sao chép",
|
||||
"功德 +": "Công đức +",
|
||||
"你的名号和留言已刻上功德簿": "Tên và lời nhắn của bạn đã được khắc vào Sổ Công Đức",
|
||||
"看看功德簿": "Xem Sổ Công Đức",
|
||||
"分享卡片": "Thẻ chia sẻ",
|
||||
"已提交,等站长确认后上榜。本页会自动更新。": "Đã gửi. Chủ bát xác nhận xong là bạn lên bảng. Trang này tự cập nhật.",
|
||||
"这笔施舍已": "Lượt bố thí này đã ",
|
||||
"过期": "hết hạn",
|
||||
"下单失败": "tạo đơn thất bại",
|
||||
"被站长拒绝": "bị chủ bát từ chối",
|
||||
"关闭": "bị đóng",
|
||||
",请回到页面重新投币。": ". Hãy quay lại trang và bố thí lại nhé.",
|
||||
"没成功,再试试": "Chưa được, thử lại nhé",
|
||||
"网络开小差了": "Mạng lag rồi",
|
||||
"分页": "Phân trang",
|
||||
"‹ 上一页": "‹ Trước",
|
||||
"下一页 ›": "Sau ›",
|
||||
"页": "",
|
||||
// ---- 登录 ----
|
||||
"站长登录 ·": "Chủ bát đăng nhập ·",
|
||||
"🔑 站长登录": "🔑 Chủ bát đăng nhập",
|
||||
"用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。": "Đăng nhập bằng tên người dùng X + mật khẩu bạn đặt lúc mở bát. Chủ trang chính: để trống tên người dùng.",
|
||||
"X 用户名": "Tên người dùng X",
|
||||
"例如 qianyuwing(主站留空)": "vd: qianyuwing (trang chính để trống)",
|
||||
"口令": "Mật khẩu",
|
||||
"忘了口令?": "Quên mật khẩu?",
|
||||
"用 X 发推找回": "Lấy lại bằng một tweet",
|
||||
"。还没有要饭站?": ". Chưa có bát?",
|
||||
"用 X 开一个": "Mở một cái bằng X",
|
||||
// ---- 后台 ----
|
||||
"后台 ·": "Quản lý ·",
|
||||
"🎉 开张大吉!你的要饭站": "🎉 Khai trương đại cát! Bát ăn xin của bạn",
|
||||
"已上线": "đã lên sóng",
|
||||
"(待主站站长收录后进榜)": " (sẽ vào bảng sau khi chủ trang chính duyệt)",
|
||||
"下一步:": "Bước tiếp: ",
|
||||
"到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。": "điền Binance UID ở mục \"Nhận tiền\" bên dưới (mười giây thôi), không thì chẳng ai gửi tiền cho bạn được.",
|
||||
"以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。": "Lần sau vào qua %s (tên người dùng X %s + mật khẩu của bạn). Quên mật khẩu? Tweet lại là lấy được.",
|
||||
"后台": "trang quản lý",
|
||||
"· 碗里": "· Trong bát",
|
||||
"位施主 ·": "thí chủ ·",
|
||||
"次 · 钢镚": "lượt · xu",
|
||||
"待收录": "chưa duyệt",
|
||||
"🔑 改口令": "🔑 Mật khẩu",
|
||||
"退出": "Đăng xuất",
|
||||
"⏳ 待确认": "⏳ Chờ xác nhận",
|
||||
"✏️ 资料": "✏️ Hồ sơ",
|
||||
"💰 收款方式": "💰 Nhận tiền",
|
||||
"📜 施舍记录": "📜 Bố thí",
|
||||
"🏚 所有站点": "🏚 Mọi bát",
|
||||
"🧹 留言巡查": "🧹 Lời nhắn",
|
||||
"⏳ 待确认的施舍": "⏳ Bố thí chờ xác nhận",
|
||||
"打开币安 App 核对到账(看金额和备注码),确认后上榜。": "Mở app Binance kiểm tra tiền về (xem số tiền và mã ghi chú), xác nhận xong là họ lên bảng.",
|
||||
"备注码": "Mã ghi chú",
|
||||
"· 币安订单": "· Đơn Binance",
|
||||
"✓ 确认到账": "✓ Đã nhận",
|
||||
"✗ 没收到": "✗ Chưa nhận",
|
||||
"站点标题": "Tên bát",
|
||||
"(来自 X @": "(từ X @",
|
||||
",锁定)": ", đã khóa)",
|
||||
"头像 emoji": "Emoji đại diện",
|
||||
"一句话口号": "Khẩu hiệu một câu",
|
||||
"绑定 X": "Liên kết X",
|
||||
"(主页链接或 @名字,留空不显示)": "(link trang cá nhân hoặc @tên; để trống thì không hiện)",
|
||||
"https://x.com/你的名字": "https://x.com/tencuaban",
|
||||
"保存资料": "Lưu hồ sơ",
|
||||
"config.env 配置": "cấu hình trong config.env",
|
||||
"已绑币安 Key · 自动确认": "Đã liên kết Binance Key · tự xác nhận",
|
||||
"直接转账 · UID": "Chuyển khoản trực tiếp · UID",
|
||||
"⚠️ 还没摆碗,点开设置": "⚠️ Chưa bày bát — bấm để cài đặt",
|
||||
"主站的收款方式在服务器 config.env 里配置。当前:": "Cách nhận tiền của trang chính được cấu hình trong config.env trên máy chủ. Hiện tại: ",
|
||||
"BinancePayTool 网关自动确认(默认账号)": "Cổng BinancePayTool tự xác nhận (tài khoản mặc định)",
|
||||
"直接转账": "chuyển khoản trực tiếp",
|
||||
"校验网关默认账号": "Kiểm tra tài khoản mặc định của cổng",
|
||||
"✅ 已绑定币安账号(UID": "✅ Đã liên kết tài khoản Binance (UID",
|
||||
"),施主付款后": "). Tiền bố thí sẽ được ",
|
||||
"自动确认上榜": "tự động xác nhận lên bảng",
|
||||
"收银页会展示你的收款码 / 一键唤起。": " Trang thanh toán sẽ hiện mã QR của bạn / mở app một chạm.",
|
||||
"建议补一个收款链接,让施主能扫码 / 一键唤起。": " Nên thêm link nhận tiền để thí chủ quét mã / mở app một chạm.",
|
||||
"重新校验 Key": "Kiểm tra lại Key",
|
||||
"解绑后改为直接转账(需你手动确认到账),确定?": "Hủy liên kết sẽ chuyển sang chuyển khoản trực tiếp (bạn phải tự xác nhận từng khoản). Tiếp tục?",
|
||||
"解绑": "Hủy liên kết",
|
||||
"换一个 Key / 更新收款链接": "Đổi Key / cập nhật link nhận tiền",
|
||||
"当前是": "Chế độ hiện tại: ",
|
||||
"模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。": ". Thí chủ chuyển tiền tới UID của bạn trong app Binance, bấm \"Tôi đã bố thí\", bạn xác nhận ở đây là họ lên bảng.",
|
||||
"⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。": "⚠️ Chưa bày bát: điền Binance UID là nhận được tiền, mười giây thôi.",
|
||||
"方式一:填币安 UID(最简单)": "Cách 1: điền Binance UID (dễ nhất)",
|
||||
"币安 App → 点左上角头像,头像下面那串数字就是": "App Binance → bấm ảnh đại diện góc trên trái, dãy số dưới ảnh chính là",
|
||||
"(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。": " (cũng là Pay ID). Thí chủ sẽ thấy nó khi bố thí, nhập vào \"Pay → Chuyển khoản\" trong app Binance là gửi được cho bạn, phí 0 đồng.",
|
||||
"币安 UID": "Binance UID",
|
||||
"例如 12345678": "vd: 12345678",
|
||||
"收款链接": "Link nhận tiền",
|
||||
"(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)": "(tùy chọn. Có link thì thí chủ quét mã / mở app Binance một chạm; không có vẫn chuyển được theo UID)",
|
||||
"怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。": "Cách lấy: ở trang nhận tiền của app Binance bấm \"Lưu ảnh\", dùng app quét QR bất kỳ đọc link trong ảnh rồi dán vào đây.",
|
||||
"保存": "Lưu",
|
||||
"方式二:绑定币安只读 API Key(到账自动确认上榜)": "Cách 2: liên kết API Key chỉ đọc của Binance (tiền về là tự xác nhận)",
|
||||
"施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。": "Thí chủ trả xong là tự lên bảng, bạn khỏi phải xác nhận tay. Key chỉ cần quyền \"Enable Reading\", không rút được tiền; trang này không lưu Key, chỉ giao cho cổng thanh toán lưu mã hóa.",
|
||||
"共": "",
|
||||
"条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复": "lượt · quảng cáo thì ẩn lời nhắn hoặc chặn người này (vẫn giữ bản ghi) · có thể trả lời",
|
||||
"已屏蔽此人": "Đã chặn người này",
|
||||
"(已屏蔽:": "(đã ẩn: ",
|
||||
"🥣 站长:": "🥣 Chủ bát: ",
|
||||
"恢复留言": "Hiện lại lời nhắn",
|
||||
"屏蔽留言": "Ẩn lời nhắn",
|
||||
"恢复此人": "Bỏ chặn",
|
||||
"屏蔽此人": "Chặn người này",
|
||||
"回一句…": "Trả lời…",
|
||||
"回复": "Trả lời",
|
||||
"还没有施舍记录": "Chưa có lượt bố thí nào",
|
||||
"🔑 修改口令": "🔑 Đổi mật khẩu",
|
||||
"新口令(至少 6 位)": "Mật khẩu mới (ít nhất 6 ký tự)",
|
||||
"再输一遍": "Nhập lại lần nữa",
|
||||
"改完后其它设备上的登录会失效。": "Các thiết bị khác sẽ bị đăng xuất.",
|
||||
"确认修改": "Đổi mật khẩu",
|
||||
"🏚 所有要饭站": "🏚 Mọi bát ăn xin",
|
||||
"个 · 违规可除名 · 可帮站长重置口令": "bát · vi phạm thì trục xuất · có thể đặt lại mật khẩu cho chủ bát",
|
||||
"已除名": "đã trục xuất",
|
||||
"未收录": "chưa duyệt",
|
||||
"已绑 Key 自动确认": "Đã liên kết Key, tự xác nhận",
|
||||
"位施主 · 钢镚": "thí chủ · xu",
|
||||
"开张": "mở",
|
||||
"取消收录": "Gỡ khỏi bảng",
|
||||
"收录上榜": "Đưa lên bảng",
|
||||
"除名": "Trục xuất",
|
||||
"恢复": "Khôi phục",
|
||||
"重置 /%s 的口令?新口令只显示一次。": "Đặt lại mật khẩu cho /%s? Mật khẩu mới chỉ hiện một lần.",
|
||||
"重置口令": "Đặt lại mật khẩu",
|
||||
"还没有子站": "Chưa có bát nào",
|
||||
"🧹 全站最新留言": "🧹 Lời nhắn mới nhất toàn trang",
|
||||
"条 · 跨站点巡查广告": "lượt · tuần tra quảng cáo ở mọi bát",
|
||||
"暂无留言": "Chưa có lời nhắn",
|
||||
"币安 App → 账户 → API 管理 → 创建 API:": "App Binance → Tài khoản → Quản lý API → Tạo API: ",
|
||||
"只勾「允许读取」": "chỉ tích \"Enable Reading\"",
|
||||
",其它权限都不要,": ", không tích gì khác, ",
|
||||
"不用设 IP 白名单": "không cần whitelist IP",
|
||||
"(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。": " (Key chỉ đọc không rút được tiền). Key chỉ dùng để đọc lịch sử nhận tiền của bạn, lưu mã hóa trên máy chủ, không bao giờ hiển thị.",
|
||||
"(App 头像页可见)": "(xem ở trang hồ sơ trong app)",
|
||||
"(选填,填了施主能扫码)": "(tùy chọn; có thì thí chủ quét được QR)",
|
||||
"收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。": "Cách lấy link nhận tiền: ở trang nhận tiền của app Binance bấm \"Lưu ảnh\" rồi dùng app quét QR bất kỳ đọc link trong ảnh.",
|
||||
"绑定并校验": "Liên kết và kiểm tra",
|
||||
// ---- 开站 / 找回 ----
|
||||
"用 X 找回口令": "Lấy lại mật khẩu bằng X",
|
||||
"🔑 用 X 找回口令": "🔑 Lấy lại mật khẩu bằng X",
|
||||
"🏚 开通我的要饭站": "🏚 Mở bát ăn xin của tôi",
|
||||
"发一条带验证码的推文证明你是站长本人,就能重设口令。": "Đăng một tweet có mã xác minh để chứng minh bạn là chủ bát, rồi đặt mật khẩu mới.",
|
||||
"不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。": "Không cần bố thí trước. Một tweet từ tài khoản X là mở được bát: tên bát lấy từ tên hiển thị X, ảnh đại diện lấy từ X, mỗi tài khoản X một bát. Tweet đó cũng tiện đem bát của bạn ra phố luôn.",
|
||||
"📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。": "📱 Bạn đang ở trình duyệt trong app. Đăng tweet một chạm có thể không mở được X, quay lại cũng có thể mất trạng thái.",
|
||||
"建议点右上角「⋯」选「在浏览器中打开」": "Bấm \"⋯\" góc trên phải, chọn \"Mở trong trình duyệt\"",
|
||||
"(或复制链接到 Safari / Chrome 打开)再操作。": " (hoặc sao chép link mở bằng Safari / Chrome) rồi làm tiếp.",
|
||||
"复制本页链接": "Sao chép link trang này",
|
||||
"发一条推文,带上验证码": "Đăng một tweet có chứa mã",
|
||||
"推文内容(可以随便改,只要保留验证码)": "Nội dung tweet (sửa thoải mái, chỉ cần giữ lại mã)",
|
||||
"换一条": "Đổi câu khác",
|
||||
"🐦 一键去 X 发推": "🐦 Đăng lên X",
|
||||
"复制文案": "Sao chép nội dung",
|
||||
"没拉起 X App?点这里用网页版发 →": "Không mở được app X? Đăng bằng bản web →",
|
||||
"验证码": "Mã",
|
||||
"大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。": "không phân biệt hoa thường, có hiệu lực 24 giờ. Nội dung có sẵn link bát của bạn, đăng lên là tiện rao luôn.",
|
||||
"把推文链接贴回来": "Dán link tweet vào đây",
|
||||
"推文链接": "Link tweet",
|
||||
"https://x.com/你的名字/status/1234567890": "https://x.com/tencuaban/status/1234567890",
|
||||
"验证": "Xác minh",
|
||||
"推文发出后,点推文右上角「分享 → 复制链接」即可。": "Đăng xong, bấm nút chia sẻ của tweet → Sao chép link là được.",
|
||||
"还没开过站?": "Chưa có bát? ",
|
||||
"去开一个": "Mở một cái",
|
||||
"已经开过站?": "Đã có bát rồi? ",
|
||||
"站长登录": "Chủ bát đăng nhập",
|
||||
"🔑 设置新口令": "🔑 Đặt mật khẩu mới",
|
||||
"保存并登录": "Lưu và đăng nhập",
|
||||
"✅ X 验证通过": "✅ X đã xác minh",
|
||||
"· 站名和头像来自 X(头像会定期同步)": "· tên và ảnh đại diện lấy từ X (ảnh sẽ đồng bộ định kỳ)",
|
||||
"站点地址": "Địa chỉ bát",
|
||||
"(就是你的 X 用户名,不用填)": "(chính là tên người dùng X của bạn, khỏi cần điền)",
|
||||
"行行好,赏口饭吃 🙏": "Làm ơn làm phước, cho xin miếng cơm 🙏",
|
||||
"登录口令": "Mật khẩu đăng nhập",
|
||||
"以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。": "Sau này đăng nhập bằng tên người dùng X + mật khẩu; quên thì tweet lại là lấy được.",
|
||||
"口令(至少 6 位)": "Mật khẩu (ít nhất 6 ký tự)",
|
||||
"开张 🏚": "Khai trương 🏚",
|
||||
"开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。": "Mở xong, vào trang quản lý liên kết Binance Key hoặc điền UID là nhận được tiền. Bạn tự chịu trách nhiệm về nội dung; bát quảng cáo sẽ bị Cái Bang trục xuất.",
|
||||
// ---- 付款面板 / 状态页 ----
|
||||
"给 %s 施舍": "Bố thí cho %s",
|
||||
"先回去看看": "Quay lại trước đã",
|
||||
"给 %s 投币": "Đang bố thí cho %s",
|
||||
"金额要": "Số tiền phải ",
|
||||
"一分不差": "chính xác từng xu",
|
||||
",网关靠这个唯一尾数自动认账,转完几秒内到账": ": cổng thanh toán nhận diện bằng phần lẻ duy nhất này, chuyển xong vài giây là xác nhận",
|
||||
"用币安 Pay 直接转给站长,转完点下面「我已施舍」": "Chuyển thẳng cho chủ bát bằng Binance Pay, xong bấm \"Tôi đã bố thí\" bên dưới",
|
||||
"打开币安 App 转账": "Mở app Binance để chuyển",
|
||||
"唤起后手动输入金额": "Trong app, tự nhập số tiền",
|
||||
",备注填": ", ghi chú",
|
||||
"用另一台手机扫码": "Quét mã bằng điện thoại khác",
|
||||
"收款二维码": "Mã QR nhận tiền",
|
||||
"币安 App → 首页「扫一扫」→ 输入金额": "App Binance → Quét mã → nhập số tiền",
|
||||
"或手动转账": "Hoặc chuyển tay",
|
||||
"转账信息": "Thông tin chuyển khoản",
|
||||
"币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填": "App Binance → \"Pay\" → \"Chuyển khoản\" → người nhận: UID bên dưới → số tiền",
|
||||
"→ 备注填": "→ ghi chú",
|
||||
"→ 转完回来点「我已施舍」": "→ chuyển xong quay lại bấm \"Tôi đã bố thí\"",
|
||||
"收款方": "Người nhận",
|
||||
"复制": "Sao chép",
|
||||
"金额": "Số tiền",
|
||||
"备注": "Ghi chú",
|
||||
"等待到账…转完自动确认,本页会自动更新": "Đang chờ tiền về… chuyển xong là tự xác nhận, trang này tự cập nhật",
|
||||
"付了但一直没确认?": "Đã trả mà mãi chưa xác nhận?",
|
||||
"币安订单编号(18 位数字,转账详情里有)": "Mã đơn Binance (18 chữ số, có trong chi tiết giao dịch)",
|
||||
"我付过了,帮我核对": "Tôi đã trả, kiểm tra giúp",
|
||||
"币安订单编号(可选,18 位数字,填了站长确认更快)": "Mã đơn Binance (tùy chọn, 18 chữ số; có thì chủ bát xác nhận nhanh hơn)",
|
||||
"我已施舍,等站长确认": "Tôi đã bố thí, chờ chủ bát xác nhận",
|
||||
"「我已施舍」要在发起施舍的那台设备上点。": "Bấm \"Tôi đã bố thí\" trên chính thiết bị đã bắt đầu lượt bố thí này.",
|
||||
"打不开?": "Không mở được? ",
|
||||
"用网关收银页支付": "Trả qua trang thanh toán của cổng",
|
||||
"施舍进行中": "Đang bố thí",
|
||||
"🙏 谢谢施主": "🙏 Cảm ơn thí chủ",
|
||||
"你在 %s 的施主榜排第 %d 位": "Trên bảng thí chủ của %s, bạn xếp hạng #%d",
|
||||
"回到 %s 的碗": "Về bát của %s",
|
||||
"复制链接分享": "Sao chép link để chia sẻ",
|
||||
"🖼 分享卡片": "🖼 Thẻ chia sẻ",
|
||||
"生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。": "Tạo một thẻ pixel để đăng lên X hoặc gửi bạn bè, tiện rao hộ ăn mày luôn.",
|
||||
"生成分享卡": "Tạo thẻ chia sẻ",
|
||||
"分享卡": "Thẻ chia sẻ",
|
||||
"长按图片保存,或": "Nhấn giữ ảnh để lưu, hoặc ",
|
||||
"下载": "tải về",
|
||||
"🏚 你也可以要饭": "🏚 Bạn cũng có thể đi xin",
|
||||
"用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。": "Một tweet từ tài khoản X là có bát riêng; tiền người ta cho vào thẳng tài khoản Binance của bạn.",
|
||||
"站长没有确认这笔施舍": "Chủ bát không xác nhận lượt bố thí này",
|
||||
"这笔施舍已过期": "Lượt bố thí này đã hết hạn",
|
||||
"如果你确实转了,请联系站长核对。": "Nếu bạn thật sự đã chuyển, hãy liên hệ chủ bát để kiểm tra.",
|
||||
"没付款不扣钱;想施舍请重新来一次。": "Chưa trả thì không mất tiền; muốn bố thí hãy làm lại từ đầu.",
|
||||
"再来一次": "Thử lại",
|
||||
// ---- 排行榜 ----
|
||||
"排行榜 ·": "Bảng xếp hạng ·",
|
||||
"🏆 施主榜": "🏆 Thí chủ",
|
||||
"🥣 乞丐榜": "🥣 Ăn mày",
|
||||
"🪙 人气榜": "🪙 Nhân khí",
|
||||
"HIGH SCORE · 所有要饭站加起来 · 共": "HIGH SCORE · gộp mọi bát ·",
|
||||
"位施主": "thí chủ",
|
||||
"总榜": "Mọi thời đại",
|
||||
"本周": "Tuần này",
|
||||
"要到最多的要饭站 · 共": "Những bát xin được nhiều nhất ·",
|
||||
"个": "",
|
||||
"收到钢镚最多(免费投)· 共": "Nhận nhiều xu nhất (ném miễn phí) ·",
|
||||
"← 回到刚才看的碗": "← Về lại cái bát vừa xem",
|
||||
"施主自己填的 X,未经验证": "X do thí chủ tự điền, chưa xác minh",
|
||||
"次 · 施舍过": "lượt · đã bố thí cho",
|
||||
"个乞丐": "ăn mày",
|
||||
"榜上无人": "Chưa có ai",
|
||||
"就是我": "là tôi",
|
||||
"还没有人上榜": "Chưa ai lên bảng",
|
||||
// ---- 站点页 ----
|
||||
"在要饭 ·": "đang ăn xin ·",
|
||||
"🕵️ 这个站还没被丐帮收录,暂不进榜。": "🕵️ Bát này chưa được Cái Bang duyệt nên chưa vào bảng.",
|
||||
"主站站长审核后会收录。": "Chủ trang chính duyệt xong sẽ đưa vào.",
|
||||
"· 榜 #": "· Hạng #",
|
||||
"升%s要 %s": "→ %s cần %s",
|
||||
"满级": "Cấp tối đa",
|
||||
"饱食度": "Độ no",
|
||||
"今天还没吃饭": "Hôm nay chưa có gì ăn",
|
||||
"今天有人投币了": "Hôm nay có người bố thí rồi",
|
||||
"今天丢过了": "Hôm nay ném rồi",
|
||||
"丢个钢镚(免费)": "Ném một xu (miễn phí)",
|
||||
"💸 投币施舍": "💸 Bố thí",
|
||||
"还没摆碗,暂不能投币": "Chưa bày bát, chưa bố thí được",
|
||||
"去配置": "Cài đặt ngay",
|
||||
"钢镚": "Xu",
|
||||
"· 今日": "· hôm nay",
|
||||
"· 每 0.1 U =": "· 0.1 U =",
|
||||
"EXP · 每个钢镚 =": "EXP · 1 xu =",
|
||||
"碗里已有": "Trong bát có",
|
||||
"施主": "Thí chủ",
|
||||
"人": "",
|
||||
"今日": "Hôm nay",
|
||||
"🕹️ 投币施舍": "🕹️ Nhét xu",
|
||||
"玩家名(上榜用,可留空)": "Tên người chơi (để lên bảng, có thể bỏ trống)",
|
||||
"匿名施主": "Thí chủ ẩn danh",
|
||||
"你的 X(可选,显示头像)": "X của bạn (tùy chọn, để hiện ảnh đại diện)",
|
||||
"投多少": "Bố thí bao nhiêu",
|
||||
"✏️ 自定义": "✏️ Tùy chọn",
|
||||
"输入金额,最多两位小数": "Nhập số tiền, tối đa 2 số lẻ",
|
||||
"对乞丐喊话": "Nhắn gì đó cho ăn mày",
|
||||
"例如:别买烟了,去吃饭": "vd: Đừng mua thuốc lá nữa, đi ăn cơm đi",
|
||||
"投币 💸": "Bố thí 💸",
|
||||
"投币": "Bố thí",
|
||||
"币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。": "Quét mã bằng app Binance hoặc mở app một chạm; tiền về là tự khắc vào Sổ Công Đức.",
|
||||
"通过币安 Pay 直接转给站长,提交后由站长确认上榜。": "Chuyển thẳng cho chủ bát qua Binance Pay; chủ bát xác nhận là bạn lên bảng.",
|
||||
"最少 %s,最多 %s。留言里不能放链接和联系方式。": "Ít nhất %s, nhiều nhất %s. Lời nhắn không được chứa link hay thông tin liên hệ.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。": "Ăn mày này chưa bày bát (chưa cài cách nhận tiền) nên tạm chưa nhận được tiền.",
|
||||
"去后台配置 →": "Vào trang quản lý để cài đặt →",
|
||||
"🏚 想自己要饭?": "🏚 Muốn tự đi xin?",
|
||||
"用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。": "Một tweet từ tài khoản X là có bát riêng: địa chỉ riêng, bát riêng, Sổ Công Đức và bảng thí chủ riêng, tiền vào thẳng tài khoản Binance của bạn.",
|
||||
"用 X 开通我的要饭站 →": "Mở bát của tôi bằng X →",
|
||||
"人气榜": "Nhân khí",
|
||||
"功德簿": "Công đức",
|
||||
"施主榜": "Thí chủ",
|
||||
"乞丐榜": "Ăn mày",
|
||||
"已屏蔽的施主": "Thí chủ đã bị chặn",
|
||||
"功德簿空空如也,第一枚硬币会刻在这里": "Sổ Công Đức còn trống, đồng xu đầu tiên sẽ được khắc ở đây",
|
||||
"HIGH SCORE · 给": "HIGH SCORE · người bố thí nhiều nhất cho",
|
||||
"投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客": "· 🏁 thí chủ đầu tiên 💎 khoản lớn nhất 🔥 khách quen",
|
||||
"丐帮排名 · 要到最多的要饭站": "Xếp hạng Cái Bang · bát xin được nhiều nhất",
|
||||
"人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)": "Nhân khí · bát nhận nhiều xu nhất (xu miễn phí, không tốn tiền)",
|
||||
"次": "lượt",
|
||||
"榜上无人,第一个投币的就是首席施主": "Chưa có ai. Người bố thí đầu tiên sẽ là thí chủ số một",
|
||||
"本站": "bát này",
|
||||
"叮!钢镚 +1": "Keng! Xu +1",
|
||||
"没丢进去": "Ném trượt rồi",
|
||||
"网络开小差了,再试一次": "Mạng lag rồi, thử lại nhé",
|
||||
// ---- 后端消息 ----
|
||||
"金额格式不对(最多两位小数)": "Số tiền không hợp lệ (tối đa 2 số lẻ)",
|
||||
"最少施舍 %s %s": "Bố thí ít nhất %s %s",
|
||||
"最多施舍 %s %s,真有这么多请分几次": "Bố thí nhiều nhất %s %s. Nếu có nhiều thật thì chia làm vài lần nhé",
|
||||
"支付网关开小差了:%s": "Cổng thanh toán lag rồi: %s",
|
||||
"手速太快了": "Nhanh tay quá",
|
||||
"这个乞丐不在": "Ăn mày này không có ở đây",
|
||||
"请先打开要饭页再丢": "Mở trang bát trước rồi hãy ném",
|
||||
"服务器开小差了": "Máy chủ lag rồi",
|
||||
"手速太快了,歇一会儿": "Nhanh tay quá, nghỉ chút đi",
|
||||
"已提交,等站长确认": "Đã gửi, chờ chủ bát xác nhận",
|
||||
"网关返回 %s": "Cổng trả về %s",
|
||||
"我在「%s」要饭的碗口令忘了,发推证明是我本人 🥣 %s %s": "Tôi quên mật khẩu bát ăn xin trên %s, đăng tweet chứng minh là chính tôi 🥣 %s %s",
|
||||
"我在「%s」摆了个碗 🥣 行行好,赏口饭吃~ %s #赛博丐帮 %s": "Tôi vừa bày bát trên %s 🥣 Làm ơn làm phước, cho xin miếng cơm~ %s #CaiBangCyber %s",
|
||||
"本人已加入赛博丐帮,正式开丐 🧎 一毛也是爱,投个钢镚也行 🪙 %s #赛博丐帮 %s": "Tôi đã gia nhập Cái Bang Cyber, chính thức đi xin 🧎 Một xu cũng là tình thương, ném xu miễn phí cũng được 🪙 %s #CaiBangCyber %s",
|
||||
"不上班了,改行要饭。碗在这,各位大善人行行好 🥣 %s #赛博丐帮 %s": "Nghỉ việc rồi, chuyển nghề ăn xin. Bát ở đây, các đại thiện nhân làm ơn làm phước 🥣 %s #CaiBangCyber %s",
|
||||
"丐帮招新,我先带头要饭 🥣 谁投币谁上功德簿,不投的丢个钢镚也算 %s #赛博丐帮 %s": "Cái Bang tuyển người, tôi xin đi đầu 🥣 Ai bố thí thì lên Sổ Công Đức, không thì ném xu miễn phí cũng tính %s #CaiBangCyber %s",
|
||||
"这条推文里没有验证码 %s,请检查是否发对了": "Tweet này không chứa mã %s. Kiểm tra xem đã đăng đúng chưa",
|
||||
"@%s 已经开过站了:%s。忘了口令可以在登录页用 X 重置。": "@%s đã có bát rồi: %s. Quên mật khẩu? Đặt lại bằng X ở trang đăng nhập.",
|
||||
"@%s 已经开过站了": "@%s đã có bát rồi",
|
||||
"路径 %s 已被占用(@%s 可能已经开过站,忘了口令可在登录页用 X 找回)": "Địa chỉ %s đã có người dùng (@%s có thể đã có bát; quên mật khẩu thì lấy lại bằng X ở trang đăng nhập)",
|
||||
"@%s 还没开过要饭站": "@%s chưa có bát",
|
||||
"解绑币安 Key 失败:%s": "Hủy liên kết Binance Key thất bại: %s",
|
||||
"绑定失败:%s": "Liên kết thất bại: %s",
|
||||
"解绑失败:%s": "Hủy liên kết thất bại: %s",
|
||||
"校验失败:%s": "Kiểm tra thất bại: %s",
|
||||
"已重置 /%s 的口令为 %s(只显示这一次,请转告站长)": "Đã đặt lại mật khẩu của /%s thành %s (chỉ hiện một lần, hãy báo cho chủ bát)",
|
||||
"本站未配置支付网关": "Trang này chưa cấu hình cổng thanh toán",
|
||||
"网关连不上,请稍后再试": "Không kết nối được cổng, thử lại sau nhé",
|
||||
"方法不允许": "Phương thức không được phép",
|
||||
"主站不存在": "Không tìm thấy trang chính",
|
||||
"页面不存在": "Không tìm thấy trang",
|
||||
"赛博丐帮没有这条路。": "Cái Bang Cyber không có con đường này.",
|
||||
"要么还没开张,要么已被丐帮除名。": "Hoặc chưa mở, hoặc đã bị Cái Bang trục xuất.",
|
||||
"这位乞丐还没摆碗(未配置收款方式),暂时收不了钱": "Ăn mày này chưa bày bát (chưa cài cách nhận tiền), tạm chưa nhận được tiền",
|
||||
"X 用户名只能是字母、数字、下划线(不带 @ 也行)": "Tên người dùng X chỉ gồm chữ, số và gạch dưới (có @ hay không đều được)",
|
||||
"名号和留言里别放链接、联系方式,乞丐不接广告": "Đừng để link hay thông tin liên hệ trong tên và lời nhắn. Ăn mày không nhận quảng cáo",
|
||||
"没有这笔施舍": "Không tìm thấy lượt bố thí này",
|
||||
"站点不存在": "Không tìm thấy bát",
|
||||
"请在发起施舍的那台设备上点「我已施舍」": "Hãy bấm \"Tôi đã bố thí\" trên thiết bị đã bắt đầu lượt bố thí này",
|
||||
"币安订单编号是 18 位数字,不填也行": "Mã đơn Binance gồm 18 chữ số (không bắt buộc)",
|
||||
"核对失败": "Kiểm tra thất bại",
|
||||
"这笔施舍不是网关模式": "Lượt bố thí này không đi qua cổng",
|
||||
"试得太频繁了,一分钟后再试": "Thử nhiều quá rồi, một phút nữa thử lại",
|
||||
"请在发起施舍的那台设备上回填": "Hãy nhập mã đơn trên thiết bị đã bắt đầu lượt bố thí này",
|
||||
"币安订单编号是 18 位数字": "Mã đơn Binance gồm 18 chữ số",
|
||||
"本站未开放开站": "Trang này chưa cho phép mở bát",
|
||||
"验证码已失效(或不是本浏览器生成的),请重新生成": "Mã đã hết hạn (hoặc được tạo ở trình duyệt khác). Hãy tạo mã mới",
|
||||
"推文链接不对,应形如 https://x.com/你的名字/status/1234567890": "Link tweet không đúng. Phải có dạng https://x.com/tencuaban/status/1234567890",
|
||||
"这条推文比验证码还早,请用生成验证码之后发的推文": "Tweet này cũ hơn mã. Hãy dùng tweet đăng sau khi tạo mã",
|
||||
"验证已失效,请重新验证": "Xác minh đã hết hạn, hãy xác minh lại",
|
||||
"口号和介绍里别放链接、联系方式": "Đừng để link hay thông tin liên hệ trong khẩu hiệu",
|
||||
"口令至少 6 位": "Mật khẩu phải có ít nhất 6 ký tự",
|
||||
"两次口令不一致": "Hai mật khẩu không khớp",
|
||||
"主站口令在服务器 config.env 里改,不走 X 找回": "Mật khẩu trang chính đổi trong config.env trên máy chủ, không lấy lại qua X",
|
||||
"这个 X 今天重置得太频繁了,明天再来": "Tài khoản X này hôm nay đặt lại nhiều quá rồi, mai quay lại nhé",
|
||||
"口令至少 6 位,且两次一致": "Mật khẩu phải có ít nhất 6 ký tự và hai lần nhập phải khớp",
|
||||
"口令已重置,其它设备上的登录已失效": "Đã đặt lại mật khẩu. Các thiết bị khác đã bị đăng xuất",
|
||||
"X 用户名或口令不对": "Sai tên người dùng X hoặc mật khẩu",
|
||||
"请先登录": "Vui lòng đăng nhập trước",
|
||||
"登录状态已失效,请重新登录。": "Phiên đăng nhập đã hết hạn, hãy đăng nhập lại.",
|
||||
"歇一会儿再来。": "Nghỉ chút rồi quay lại nhé.",
|
||||
"这个站点的错误口令太多,歇一会儿。": "Bát này nhập sai mật khẩu quá nhiều. Nghỉ chút đi.",
|
||||
"站点标题不能为空": "Tên bát không được để trống",
|
||||
"资料里别放链接、联系方式": "Đừng để link hay thông tin liên hệ trong hồ sơ",
|
||||
"资料已保存": "Đã lưu hồ sơ",
|
||||
"主站的收款方式在服务器 config.env 里改": "Cách nhận tiền của trang chính đổi trong config.env trên máy chủ",
|
||||
"填一下币安 UID,不然钱没处去": "Điền Binance UID đi, không thì tiền chẳng biết về đâu",
|
||||
"已切换为直接转账:施主转完自报,你在这里确认": "Đã chuyển sang chuyển khoản trực tiếp: thí chủ tự báo đã chuyển, bạn xác nhận ở đây",
|
||||
"本站不支持绑定": "Trang này không hỗ trợ liên kết",
|
||||
"API Key 和 Secret 都要填": "Phải điền cả API Key và Secret",
|
||||
"币安 UID 是纯数字(App 头像页可见)": "Binance UID chỉ gồm chữ số (xem ở trang hồ sơ trong app)",
|
||||
"绑定成功!币安校验通过,之后给你的施舍会自动确认上榜": "Liên kết thành công! Binance đã xác nhận Key, từ giờ bố thí sẽ tự động xác nhận lên bảng",
|
||||
"已解绑。现在是直接转账模式,记得填好收款链接或 Pay ID": "Đã hủy liên kết. Giờ là chế độ chuyển khoản trực tiếp, nhớ điền đủ UID nhé",
|
||||
"校验通过:币安 Key 可用,到账会自动确认": "Kiểm tra OK: Binance Key dùng được, tiền về sẽ tự xác nhận",
|
||||
"主站口令在服务器 config.env(ADMIN_PASSWORD)里改": "Mật khẩu trang chính đổi trong config.env (ADMIN_PASSWORD) trên máy chủ",
|
||||
"口令已修改,其它设备上的登录已失效": "Đã đổi mật khẩu. Các thiết bị khác đã bị đăng xuất",
|
||||
"这笔施舍当前不能确认/拒绝": "Lượt bố thí này hiện không thể xác nhận / từ chối",
|
||||
"只能回复自己站的施舍": "Chỉ trả lời được bố thí trên bát của mình",
|
||||
"回复里别放链接、联系方式": "Đừng để link hay thông tin liên hệ trong câu trả lời",
|
||||
"未知操作": "Thao tác không xác định",
|
||||
"无权操作": "Không có quyền",
|
||||
"没有这个站": "Không có bát này",
|
||||
"未配置支付网关": "Chưa cấu hình cổng thanh toán",
|
||||
"请求来源不对": "Nguồn yêu cầu không hợp lệ",
|
||||
"请从本站页面操作。": "Hãy thao tác từ chính trang của web này.",
|
||||
"页面渲染失败": "Không dựng được trang",
|
||||
"稍后再试。": "Thử lại sau nhé.",
|
||||
"地址已被占用": "Địa chỉ đã có người dùng",
|
||||
"这个 X 账号已经开过站了": "Tài khoản X này đã có bát rồi",
|
||||
"连不上 X 接口: %w": "Không kết nối được X: %w",
|
||||
"找不到这条推文(链接不对,或推文不公开)": "Không tìm thấy tweet (sai link, hoặc tweet không công khai)",
|
||||
"推文读不到(可能被删除或账号受保护)": "Không đọc được tweet (có thể đã bị xóa hoặc tài khoản ở chế độ bảo vệ)",
|
||||
"头像地址不在允许的域名": "URL ảnh đại diện không thuộc tên miền được phép",
|
||||
"头像下载失败": "Tải ảnh đại diện thất bại",
|
||||
"头像不是有效图片": "Ảnh đại diện không phải ảnh hợp lệ",
|
||||
"金额格式不对": "Số tiền không hợp lệ",
|
||||
"收款链接过长": "Link nhận tiền quá dài",
|
||||
"收款链接须为 https 链接": "Link nhận tiền phải là link https",
|
||||
"收款链接必须是币安域名(app.binance.com/… 之类)": "Link nhận tiền phải thuộc tên miền Binance (kiểu app.binance.com/…)",
|
||||
"X 主页链接应形如 https://x.com/你的名字": "Link trang X phải có dạng https://x.com/tencuaban",
|
||||
"核对成功,已到账": "Kiểm tra OK, tiền đã về",
|
||||
"查到了这笔转账但金额不足,已按实付记账": "Tìm thấy giao dịch nhưng số tiền thiếu; đã ghi theo số thực trả",
|
||||
"没查到这笔转账:确认订单编号是否正确、是否转给了正确的账号,币安到账后再试": "Không tìm thấy giao dịch: kiểm tra lại mã đơn và tài khoản nhận, đợi Binance báo tiền về rồi thử lại",
|
||||
"这笔转账已经被别的订单用过了": "Giao dịch này đã được dùng cho đơn khác rồi",
|
||||
"币种不对": "Sai loại tiền",
|
||||
"这笔施舍当前状态不能回填": "Trạng thái hiện tại của lượt bố thí này không cho nhập mã đơn",
|
||||
"这个网络今天丢得够多了": "Mạng này hôm nay ném xu đủ rồi",
|
||||
"今天已经丢过了,明天再来": "Hôm nay ném rồi, mai quay lại nhé",
|
||||
// ---- 状态 / 等级 / 职位 / 施主档 / 时间 ----
|
||||
"未付款": "chưa trả",
|
||||
"待确认": "chờ xác nhận",
|
||||
"已到账": "đã nhận",
|
||||
"已过期": "hết hạn",
|
||||
"已关闭": "đã đóng",
|
||||
"已拒绝": "đã từ chối",
|
||||
"空碗未入帮": "Bát rỗng chưa nhập bang",
|
||||
"一袋弟子": "Đệ tử 1 túi",
|
||||
"二袋弟子": "Đệ tử 2 túi",
|
||||
"三袋弟子": "Đệ tử 3 túi",
|
||||
"四袋弟子": "Đệ tử 4 túi",
|
||||
"五袋弟子": "Đệ tử 5 túi",
|
||||
"六袋弟子": "Đệ tử 6 túi",
|
||||
"七袋弟子": "Đệ tử 7 túi",
|
||||
"八袋弟子": "Đệ tử 8 túi",
|
||||
"九袋长老": "Trưởng lão 9 túi",
|
||||
"帮主": "Bang chủ",
|
||||
"副帮主": "Phó bang chủ",
|
||||
"传功长老": "Truyền Công Trưởng lão",
|
||||
"执法长老": "Chấp Pháp Trưởng lão",
|
||||
"掌棒龙头": "Chưởng Bổng Long Đầu",
|
||||
"掌钵龙头": "Chưởng Bát Long Đầu",
|
||||
"长老": "Trưởng lão",
|
||||
"舵主": "Đà chủ",
|
||||
"弟子": "Đệ tử",
|
||||
"总舵": "Tổng đà",
|
||||
"投了个硬币": "đã ném một xu",
|
||||
"善心人": "người tốt bụng",
|
||||
"大善人": "đại thiện nhân",
|
||||
"活菩萨": "Bồ Tát sống",
|
||||
"财神爷": "Thần Tài",
|
||||
"刚刚": "vừa xong",
|
||||
"%d 分钟前": "%d phút trước",
|
||||
"%d 小时前": "%d giờ trước",
|
||||
"%d 天前": "%d ngày trước",
|
||||
}
|
||||
}
|
||||
+6
-4
@@ -215,16 +215,18 @@ func (a *App) verifyAccount(site *Site) (*bpaygate.Account, error) {
|
||||
}
|
||||
|
||||
// gatewayErr 把网关错误变成能给站长看的话。
|
||||
func gatewayErr(err error) string {
|
||||
func gatewayErr(err error) string { return gatewayErrL("zh", err) }
|
||||
|
||||
func gatewayErrL(lang string, err error) string {
|
||||
var ae *bpaygate.APIError
|
||||
if errors.As(err, &ae) {
|
||||
if ae.Message != "" {
|
||||
return ae.Message
|
||||
}
|
||||
return "网关返回 " + ae.Code
|
||||
return tr(lang, "网关返回 %s", ae.Code)
|
||||
}
|
||||
if errors.Is(err, errNoGateway) {
|
||||
return "本站未配置支付网关"
|
||||
return tr(lang, "本站未配置支付网关")
|
||||
}
|
||||
return "网关连不上,请稍后再试"
|
||||
return tr(lang, "网关连不上,请稍后再试")
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
{{define "title"}}{{.Title}} · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{T .Title}} · {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div class="narrow">
|
||||
<section class="card px center">
|
||||
<div class="sprite-wrap" style="margin:0 auto 10px">{{template "sprite"}}</div>
|
||||
<div class="insert">GAME OVER?</div>
|
||||
<h1>{{.Title}}</h1>
|
||||
{{if .Msg}}<p class="hint" style="font-size:14px">{{.Msg}}</p>{{end}}
|
||||
<a class="btn sec" href="/">回到街头</a>
|
||||
<h1>{{T .Title}}</h1>
|
||||
{{if .Msg}}<p class="hint" style="font-size:14px">{{T .Msg}}</p>{{end}}
|
||||
<a class="btn sec" href="/">{{T "回到街头"}}</a>
|
||||
</section>
|
||||
</div>
|
||||
{{end}}
|
||||
+26
-24
@@ -1,13 +1,13 @@
|
||||
{{define "layout"}}<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<html lang="{{.Lang}}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||||
<meta name="theme-color" content="#f4eedd">
|
||||
<title>{{template "title" .}}</title>
|
||||
<meta name="description" content="{{if .Desc}}{{.Desc}}{{else}}赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。{{end}}">
|
||||
<meta name="description" content="{{if .Desc}}{{.Desc}}{{else}}{{T "赛博要饭:行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿;不花钱也能丢钢镚;用 X 发一条推就能开自己的要饭站。"}}{{end}}">
|
||||
<meta property="og:title" content="{{template "title" .}}">
|
||||
<meta property="og:description" content="{{if .Desc}}{{.Desc}}{{else}}行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。{{end}}">
|
||||
<meta property="og:description" content="{{if .Desc}}{{.Desc}}{{else}}{{T "行行好,赏口饭吃。投币上功德簿,丢钢镚也算爱。"}}{{end}}">
|
||||
<meta property="og:type" content="website">
|
||||
{{if .OGImage}}<meta property="og:image" content="{{.OGImage}}">{{end}}
|
||||
<meta name="twitter:card" content="summary">
|
||||
@@ -31,10 +31,11 @@ a{color:var(--blue)}
|
||||
@media(min-width:900px){.page{padding-bottom:40px}}
|
||||
.px{border:4px solid transparent;border-image:var(--frame) 2 / 4px stretch;image-rendering:pixelated;background-clip:padding-box}
|
||||
.nav{display:flex;align-items:center;gap:6px;height:64px}
|
||||
.langsel{display:inline-flex;align-items:center;gap:2px;font-size:16px;flex:none;position:relative}.langsel select{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:16px}
|
||||
.sfx{background:none;border:0;font-size:18px;line-height:1;padding:8px 6px;cursor:pointer;min-width:36px;min-height:36px;opacity:.85;flex:none}.sfx.off{opacity:.45}
|
||||
.sfx.idle{animation:sfxnudge 1.2s ease-in-out infinite}@keyframes sfxnudge{0%,100%{transform:scale(1)}50%{transform:scale(1.18)}}@media(prefers-reduced-motion:reduce){.sfx.idle{animation:none}}
|
||||
.nav>*{flex:none}
|
||||
@media(max-width:430px){.nav{gap:4px}.nav .brand{font-size:22px;margin-right:2px}.sfx{min-width:28px;padding:6px 2px;font-size:16px}.nav a.link{padding:8px 5px;font-size:15px}.nav a.pill{padding:6px 10px;font-size:15px}
|
||||
.nav>*{flex:none}.nav .brand{flex:0 1 auto;min-width:0}.nav .brand span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
@media(max-width:430px){.nav{gap:4px}.nav .brand{font-size:20px;margin-right:2px}.nav .brand .px-coin{display:none}.sfx{min-width:28px;padding:6px 2px;font-size:16px}.nav a.link{padding:8px 5px;font-size:15px}.nav a.pill{padding:6px 10px;font-size:15px}
|
||||
.nav a.navrank span{display:none}.nav a.navrank::before{content:"🏆";font-size:16px}}
|
||||
.brand{display:flex;align-items:center;gap:8px;font-size:24px;line-height:1;color:var(--ink);text-decoration:none;white-space:nowrap;margin-right:6px}
|
||||
.brand .px-coin{width:28px;height:28px;flex:none}
|
||||
@@ -78,7 +79,7 @@ h1{font-size:24px;margin:0 0 8px;line-height:1.3}
|
||||
.pname{font-size:24px;margin:0 0 8px;line-height:1.25;word-break:break-word}
|
||||
.barlabel{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;color:var(--muted);margin-top:8px;line-height:1.4}
|
||||
.barlabel b{color:var(--ink);font-weight:normal;margin-left:4px}
|
||||
.barlabel span{font-size:12px;color:var(--muted)}
|
||||
.barlabel span{font-size:12px;color:var(--muted);margin-left:8px;text-align:right}
|
||||
.bar{position:relative;height:14px;border:3px solid var(--ink);background:#fff;margin:2px 0 0;box-shadow:2px 2px 0 var(--ink)}
|
||||
.bar span{display:block;height:100%;background:var(--green);background-image:repeating-linear-gradient(90deg,transparent 0 6px,rgba(0,0,0,.14) 6px 8px);transition:width .6s steps(12)}
|
||||
.bar.hp span{background-color:var(--red)}
|
||||
@@ -249,19 +250,20 @@ footer a{color:var(--muted)}
|
||||
{{if .HasBGM}}<audio id="bgm" src="/static/bgm.m4a" loop preload="none" playsinline></audio>{{end}}
|
||||
<div class="page">
|
||||
<nav class="nav">
|
||||
<a class="brand" href="{{.HomePath}}"{{if ne .HomePath "/"}} title="回到刚才看的碗"{{end}}>{{template "coin"}}<span>{{.SiteTitle}}</span></a>
|
||||
<a class="brand" href="{{.HomePath}}"{{if ne .HomePath "/"}} title="{{T "回到刚才看的碗"}}"{{end}}>{{template "coin"}}<span>{{T .SiteTitle}}</span></a>
|
||||
<span class="sp"></span>
|
||||
<button class="sfx" id="sfxBtn" type="button" aria-label="声音开关" title="声音">🔊</button>
|
||||
<a class="link navrank" href="/rank" aria-label="排行榜" title="排行榜"><span>排行榜</span></a>
|
||||
{{if .Me}}<a class="link" href="/manage">我的后台</a>{{else}}<a class="link" href="/login"><span class="hide-sm">站长</span>登录</a>{{end}}
|
||||
{{if .Me}}<a class="pill px" href="/{{.Me.Slug}}">我的站</a>{{else if .SubsitesEnabled}}<a class="pill px" href="/new">开通要饭站</a>{{end}}
|
||||
<label class="langsel" title="Language"><span aria-hidden="true">🌐</span><select onchange="location.href='/lang?to='+encodeURIComponent(this.value)" aria-label="Language">{{range .Langs}}<option value="{{.Code}}"{{if eq .Code $.Lang}} selected{{end}}>{{.Name}}</option>{{end}}</select></label>
|
||||
<button class="sfx" id="sfxBtn" type="button" aria-label="{{T "声音开关"}}" title="{{T "声音"}}">🔊</button>
|
||||
<a class="link navrank" href="/rank" aria-label="{{T "排行榜"}}" title="{{T "排行榜"}}"><span>{{T "排行榜"}}</span></a>
|
||||
{{if .Me}}<a class="link" href="/manage">{{T "我的后台"}}</a>{{else}}<a class="link" href="/login"><span class="hide-sm">{{T "站长"}}</span>{{T "登录"}}</a>{{end}}
|
||||
{{if .Me}}<a class="pill px" href="/{{.Me.Slug}}">{{T "我的站"}}</a>{{else if .SubsitesEnabled}}<a class="pill px" href="/new">{{T "开通要饭站"}}</a>{{end}}
|
||||
</nav>
|
||||
<div class="ticker" aria-hidden="true"><div class="ticker-in"><span>🙏 行行好,赏口饭吃</span><span>🪙 一毛也是爱</span><span>💸 投币就上榜</span><span>📜 留一句话刻功德簿</span><span>🏚 发条推就能开自己的要饭站</span><span>👾 赛博丐帮,人人有碗</span><span>🙏 行行好,赏口饭吃</span><span>🪙 一毛也是爱</span><span>💸 投币就上榜</span><span>📜 留一句话刻功德簿</span><span>🏚 发条推就能开自己的要饭站</span><span>👾 赛博丐帮,人人有碗</span></div></div>
|
||||
<div class="ticker" aria-hidden="true"><div class="ticker-in"><span>{{T "🙏 行行好,赏口饭吃"}}</span><span>{{T "🪙 一毛也是爱"}}</span><span>{{T "💸 投币就上榜"}}</span><span>{{T "📜 留一句话刻功德簿"}}</span><span>{{T "🏚 发条推就能开自己的要饭站"}}</span><span>{{T "👾 赛博丐帮,人人有碗"}}</span><span>{{T "🙏 行行好,赏口饭吃"}}</span><span>{{T "🪙 一毛也是爱"}}</span><span>{{T "💸 投币就上榜"}}</span><span>{{T "📜 留一句话刻功德簿"}}</span><span>{{T "🏚 发条推就能开自己的要饭站"}}</span><span>{{T "👾 赛博丐帮,人人有碗"}}</span></div></div>
|
||||
{{template "content" .}}
|
||||
<footer>
|
||||
{{.SiteTitle}} · 赛博丐帮,行行好<br>
|
||||
{{if or .AuthorX .AuthorGitHub}}作者{{if .AuthorX}} <a href="{{.AuthorX}}" target="_blank" rel="noopener">𝕏 @{{lastSeg .AuthorX}}</a>{{end}}{{if .AuthorGitHub}} · <a href="{{.AuthorGitHub}}" target="_blank" rel="noopener">GitHub {{lastSeg .AuthorGitHub}}</a>{{end}}<br>{{end}}
|
||||
收款由 <a href="{{.RepoURL}}" target="_blank" rel="noopener">BinancePayTool</a> 驱动 · 字体 <a href="https://github.com/TakWolf/fusion-pixel-font" target="_blank" rel="noopener">缝合怪像素字体</a>
|
||||
{{T .SiteTitle}} {{T "· 赛博丐帮,行行好"}}<br>
|
||||
{{if or .AuthorX .AuthorGitHub}}{{T "作者"}}{{if .AuthorX}} <a href="{{.AuthorX}}" target="_blank" rel="noopener">𝕏 @{{lastSeg .AuthorX}}</a>{{end}}{{if .AuthorGitHub}} · <a href="{{.AuthorGitHub}}" target="_blank" rel="noopener">GitHub {{lastSeg .AuthorGitHub}}</a>{{end}}<br>{{end}}
|
||||
{{T "收款由"}} <a href="{{.RepoURL}}" target="_blank" rel="noopener">BinancePayTool</a> {{T "驱动 · 字体"}} <a href="https://github.com/TakWolf/fusion-pixel-font" target="_blank" rel="noopener">{{T "缝合怪像素字体"}}</a>
|
||||
</footer>
|
||||
</div>
|
||||
<script>
|
||||
@@ -311,25 +313,25 @@ window.sfx=(function(){var ctx,on=true,C=window.AudioContext||window.webkitAudio
|
||||
var b=document.getElementById('sfxBtn');if(!b)return;
|
||||
// 三态:🔊 在放 / 🔈 开着但还没放(浏览器拦了自动播放,点一下就放)/ 🔇 静音
|
||||
var hasBgm=!!document.getElementById('bgm'); // 没放音乐文件时只有音效,喇叭只有开/关两态
|
||||
paint=function(){var p=on&&(!hasBgm||playingNow());b.textContent=!on?'🔇':(p?'🔊':'🔈');b.classList.toggle('off',!on);b.classList.toggle('idle',on&&!p);b.title=!on?'声音:关':(p?'声音:开(点击静音)':'点一下开始播放')};paint();
|
||||
paint=function(){var p=on&&(!hasBgm||playingNow());b.textContent=!on?'🔇':(p?'🔊':'🔈');b.classList.toggle('off',!on);b.classList.toggle('idle',on&&!p);b.title=!on?{{T "声音:关"}}:(p?{{T "声音:开(点击静音)"}}:{{T "点一下开始播放"}})};paint();
|
||||
b.addEventListener('click',function(){if(on&&!playingNow()){loadBgm();startBgm();return}S.toggle()})});
|
||||
document.addEventListener('click',function(ev){var b=ev.target.closest('.btn,.tab,.amt-btn,.copy,.pill,.toggle button,.link');if(!b||b.disabled)return;ac();if(b.id!=='coinbtn')S.click()},true);
|
||||
return S})();
|
||||
(function(){
|
||||
// 复制按钮(全站委托)
|
||||
document.addEventListener('click',function(ev){var b=ev.target.closest('.copy');if(!b||b.id==='nextText')return;var src=b.dataset.copyFrom;var t=src?document.getElementById(src).value:b.dataset.copy;var o=b.textContent;
|
||||
function done(){b.textContent='已复制';setTimeout(function(){b.textContent=o},1500)}
|
||||
function done(){b.textContent={{T "已复制"}};setTimeout(function(){b.textContent=o},1500)}
|
||||
(navigator.clipboard?navigator.clipboard.writeText(t):Promise.reject()).then(done,function(){var i=document.createElement('input');i.value=t;document.body.appendChild(i);i.select();try{document.execCommand('copy')}catch(e){}i.remove();done()})});
|
||||
// 付款面板:轮询到账、回填/自报、成功态
|
||||
window.initPayPanel=function(pp,onDone){
|
||||
var code=pp.dataset.code,site=pp.dataset.site,amount=pp.dataset.amount,status=pp.dataset.status,stop=false,fails=0;
|
||||
function success(amt){stop=true;if(window.sfx)sfx.ok();var sp=document.querySelector('.sprite');pp.innerHTML='<div class="center"><div class="sprite-wrap jump" style="margin:0 auto 8px">'+(sp?sp.outerHTML:'🥣')+'</div><div class="insert">★ THANK YOU ★</div><h2 class="center" style="justify-content:center">🙏 功德 +'+(amt||amount)+'</h2><p class="hint">你的名号和留言已刻上功德簿</p><div class="btns"><a class="btn" href="'+site+'#feed" onclick="if(location.pathname===this.pathname){location.hash=\'feed\';location.reload();return false}">看看功德簿</a><a class="btn sec" href="/d/'+code+'">分享卡片</a></div></div>';if(onDone)onDone('paid')}
|
||||
function success(amt){stop=true;if(window.sfx)sfx.ok();var sp=document.querySelector('.sprite');pp.innerHTML='<div class="center"><div class="sprite-wrap jump" style="margin:0 auto 8px">'+(sp?sp.outerHTML:'🥣')+'</div><div class="insert">★ THANK YOU ★</div><h2 class="center" style="justify-content:center">🙏 '+{{T "功德 +"}}+(amt||amount)+'</h2><p class="hint">'+{{T "你的名号和留言已刻上功德簿"}}+'</p><div class="btns"><a class="btn" href="'+site+'#feed" onclick="if(location.pathname===this.pathname){location.hash=\'feed\';location.reload();return false}">'+{{T "看看功德簿"}}+'</a><a class="btn sec" href="/d/'+code+'">'+{{T "分享卡片"}}+'</a></div></div>';if(onDone)onDone('paid')}
|
||||
function setStatus(html){var st=pp.querySelector('#ppStatus');if(st)st.innerHTML=html}
|
||||
function apply(j){if(!j||!j.status)return;if(j.status==='paid'){success(j.amount)}else if(j.status==='claimed'&&status!=='claimed'){status='claimed';setStatus('<div class="notice" style="margin-top:12px"><span class="spin-inline"></span> 已提交,等站长确认后上榜。本页会自动更新。</div>')}else if(['expired','failed','rejected','closed'].indexOf(j.status)>=0){stop=true;setStatus('<div class="notice bad" style="margin-top:12px">这笔施舍已'+({expired:'过期',failed:'下单失败',rejected:'被站长拒绝',closed:'关闭'})[j.status]+',请回到页面重新投币。</div>')}}
|
||||
function apply(j){if(!j||!j.status)return;if(j.status==='paid'){success(j.amount)}else if(j.status==='claimed'&&status!=='claimed'){status='claimed';setStatus('<div class="notice" style="margin-top:12px"><span class="spin-inline"></span> '+{{T "已提交,等站长确认后上榜。本页会自动更新。"}}+'</div>')}else if(['expired','failed','rejected','closed'].indexOf(j.status)>=0){stop=true;setStatus('<div class="notice bad" style="margin-top:12px">'+{{T "这笔施舍已"}}+({expired:{{T "过期"}},failed:{{T "下单失败"}},rejected:{{T "被站长拒绝"}},closed:{{T "关闭"}}})[j.status]+{{T ",请回到页面重新投币。"}}+'</div>')}}
|
||||
function tick(){if(stop)return;fetch('/d/'+code+'/status',{cache:'no-store'}).then(function(r){return r.json()}).then(function(j){fails=0;apply(j)}).catch(function(){if(++fails>=20)stop=true})}
|
||||
var timer=setInterval(function(){if(stop){clearInterval(timer);return}tick()},3000);
|
||||
pp.addEventListener('submit',function(ev){var f=ev.target.closest('.claimf');if(!f)return;ev.preventDefault();var fd=new FormData(f);fd.append('ajax','1');var btn=f.querySelector('button');btn.disabled=true;var err=f.querySelector('.claim-err');err.textContent='';
|
||||
fetch(f.getAttribute('action'),{method:'POST',body:fd}).then(function(r){return r.json()}).then(function(j){btn.disabled=false;if(j.status==='paid'){success()}else if(j.ok&&j.status==='claimed'){apply({status:'claimed'})}else{if(window.sfx)sfx.fail();err.textContent=j.msg||'没成功,再试试'}}).catch(function(){btn.disabled=false;if(window.sfx)sfx.fail();err.textContent='网络开小差了'})});
|
||||
fetch(f.getAttribute('action'),{method:'POST',body:fd}).then(function(r){return r.json()}).then(function(j){btn.disabled=false;if(j.status==='paid'){success()}else if(j.ok&&j.status==='claimed'){apply({status:'claimed'})}else{if(window.sfx)sfx.fail();err.textContent=j.msg||{{T "没成功,再试试"}}}}).catch(function(){btn.disabled=false;if(window.sfx)sfx.fail();err.textContent={{T "网络开小差了"}}})});
|
||||
return function(){stop=true;clearInterval(timer)}
|
||||
};
|
||||
var pp=document.getElementById('paypanel');if(pp)window.initPayPanel(pp);
|
||||
@@ -338,9 +340,9 @@ window.sfx=(function(){var ctx,on=true,C=window.AudioContext||window.webkitAudio
|
||||
{{block "scripts" .}}{{end}}
|
||||
</body>
|
||||
</html>{{end}}
|
||||
{{define "pager"}}{{if gt .Pages 1}}<nav class="pager" aria-label="分页">
|
||||
{{if .HasPrev}}<a href="{{.URL .Prev}}">‹ 上一页</a>{{else}}<span class="dis">‹ 上一页</span>{{end}}
|
||||
{{define "pager"}}{{if gt .Pages 1}}<nav class="pager" aria-label="{{T "分页"}}">
|
||||
{{if .HasPrev}}<a href="{{.URL .Prev}}">{{T "‹ 上一页"}}</a>{{else}}<span class="dis">{{T "‹ 上一页"}}</span>{{end}}
|
||||
{{range .Nums}}{{if eq . $.Page}}<span class="cur">{{.}}</span>{{else}}<a href="{{$.URL .}}">{{.}}</a>{{end}}{{end}}
|
||||
{{if .HasNext}}<a href="{{.URL .Next}}">下一页 ›</a>{{else}}<span class="dis">下一页 ›</span>{{end}}
|
||||
<span class="hint" style="margin-left:auto">{{.Page}}/{{.Pages}} 页</span>
|
||||
{{if .HasNext}}<a href="{{.URL .Next}}">{{T "下一页 ›"}}</a>{{else}}<span class="dis">{{T "下一页 ›"}}</span>{{end}}
|
||||
<span class="hint" style="margin-left:auto">{{.Page}}/{{.Pages}} {{T "页"}}</span>
|
||||
</nav>{{end}}{{end}}
|
||||
@@ -1,18 +1,18 @@
|
||||
{{define "title"}}站长登录 · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{T "站长登录 ·"}} {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div class="narrow">
|
||||
<section class="card px">
|
||||
<h1>🔑 站长登录</h1>
|
||||
<p class="hint" style="font-size:14px;margin:0 0 6px">用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。</p>
|
||||
<h1>{{T "🔑 站长登录"}}</h1>
|
||||
<p class="hint" style="font-size:14px;margin:0 0 6px">{{T "用「X 用户名 + 开站时设的口令」登录后台。主站站长用户名留空。"}}</p>
|
||||
<form method="post" action="/login">
|
||||
<label for="slugIn">X 用户名</label>
|
||||
<input id="slugIn" name="slug" placeholder="例如 qianyuwing(主站留空)" value="{{.Slug}}" autocapitalize="off" autocomplete="username">
|
||||
<label for="pwIn">口令</label>
|
||||
<label for="slugIn">{{T "X 用户名"}}</label>
|
||||
<input id="slugIn" name="slug" placeholder="{{T "例如 qianyuwing(主站留空)"}}" value="{{.Slug}}" autocapitalize="off" autocomplete="username">
|
||||
<label for="pwIn">{{T "口令"}}</label>
|
||||
<input id="pwIn" name="password" type="password" required autocomplete="current-password">
|
||||
{{if .Err}}<div class="err">{{.Err}}</div>{{end}}
|
||||
<button class="btn" type="submit" style="margin-top:16px">登录</button>
|
||||
{{if .Err}}<div class="err">{{T .Err}}</div>{{end}}
|
||||
<button class="btn" type="submit" style="margin-top:16px">{{T "登录"}}</button>
|
||||
</form>
|
||||
<div class="hint" style="margin-top:12px">忘了口令?<a href="/reset">用 X 发推找回</a>。还没有要饭站?<a href="/new">用 X 开一个</a>。</div>
|
||||
<div class="hint" style="margin-top:12px">{{T "忘了口令?"}}<a href="/reset">{{T "用 X 发推找回"}}</a>{{T "。还没有要饭站?"}}<a href="/new">{{T "用 X 开一个"}}</a>。</div>
|
||||
</section>
|
||||
</div>
|
||||
{{end}}
|
||||
+70
-70
@@ -1,38 +1,38 @@
|
||||
{{define "title"}}后台 · {{.Site.Name}} · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{T "后台 ·"}} {{.Site.Name}} · {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div class="narrow" style="max-width:720px">
|
||||
{{if .Welcome}}<div class="notice ok" style="margin-bottom:12px">🎉 开张大吉!你的要饭站 <a href="{{.Site.Path}}">{{.BaseURL}}{{.Site.Path}}</a> 已上线{{if not .Site.Listed}}(待主站站长收录后进榜){{end}}。<b>下一步:</b>到下面「收款方式」把币安 App 收款页分享出来的链接贴进去(一分钟),不然施主没法给你钱。以后从 <a href="{{.LoginURL}}">站长登录</a> 进来(X 用户名 {{.Site.Slug}} + 你的口令),忘了口令可以再发推找回。</div>{{end}}
|
||||
{{if .Flash}}<div class="notice ok" style="margin-bottom:12px">{{.Flash}}</div><div class="toast" id="flashToast" aria-hidden="true">✅ {{.Flash}}</div>{{end}}
|
||||
{{if .Err}}<div class="notice bad" style="margin-bottom:12px">{{.Err}}</div>{{end}}
|
||||
{{if .Welcome}}<div class="notice ok" style="margin-bottom:12px">{{T "🎉 开张大吉!你的要饭站"}} <a href="{{.Site.Path}}">{{.BaseURL}}{{.Site.Path}}</a> {{T "已上线"}}{{if not .Site.Listed}}{{T "(待主站站长收录后进榜)"}}{{end}}。<b>{{T "下一步:"}}</b>{{T "到下面「收款方式」填上币安 UID(十秒钟),不然施主没法给你钱。"}} {{T "以后从 %s 进来(X 用户名 %s + 你的口令),忘了口令可以再发推找回。" (printf "<a href=\"%s\">%s</a>" .LoginURL (T "站长登录") | safeHTML) .Site.Slug | safeHTML}}</div>{{end}}
|
||||
{{if .Flash}}<div class="notice ok" style="margin-bottom:12px">{{T .Flash}}</div><div class="toast" id="flashToast" aria-hidden="true">✅ {{T .Flash}}</div>{{end}}
|
||||
{{if .Err}}<div class="notice bad" style="margin-bottom:12px">{{T .Err}}</div>{{end}}
|
||||
|
||||
<section class="card px" style="margin-bottom:12px">
|
||||
<div class="hdr">
|
||||
{{if .Site.AvatarURL}}<img class="av img" style="width:48px;height:48px" src="{{.Site.AvatarURL}}" alt="">{{else}}<div class="av sq" style="width:48px;height:48px;font-size:26px">{{.Site.Avatar}}</div>{{end}}
|
||||
<div class="body"><h1 style="font-size:20px;margin:0">{{.Site.Name}} <span class="hint" style="display:inline">后台</span></h1>
|
||||
<div class="hint"><a href="{{.Site.Path}}">{{.BaseURL}}{{.Site.Path}}</a> · 碗里 <b class="num accent">{{fmtAmt .Stats.TotalE8}}</b> {{.Site.Currency}} · {{.Stats.Donors}} 位施主 · {{.Stats.Count}} 次 · 钢镚 {{.Coins}}{{if not .Site.Listed}} · <span class="tag claimed">待收录</span>{{end}}</div></div>
|
||||
<div class="hdr-actions">{{if not .Site.IsMain}}<button class="btn sec sm" type="button" id="pwBtn">🔑 改口令</button>{{end}}<form method="post" action="/logout"><button class="btn ghost sm" type="submit">退出</button></form></div>
|
||||
<div class="body"><h1 style="font-size:20px;margin:0">{{.Site.Name}} <span class="hint" style="display:inline">{{T "后台"}}</span></h1>
|
||||
<div class="hint"><a href="{{.Site.Path}}">{{.BaseURL}}{{.Site.Path}}</a> {{T "· 碗里"}} <b class="num accent">{{fmtAmt .Stats.TotalE8}}</b> {{.Site.Currency}} · {{.Stats.Donors}} {{T "位施主 ·"}} {{.Stats.Count}} {{T "次 · 钢镚"}} {{.Coins}}{{if not .Site.Listed}} · <span class="tag claimed">{{T "待收录"}}</span>{{end}}</div></div>
|
||||
<div class="hdr-actions">{{if not .Site.IsMain}}<button class="btn sec sm" type="button" id="pwBtn">{{T "🔑 改口令"}}</button>{{end}}<form method="post" action="/logout"><button class="btn ghost sm" type="submit">{{T "退出"}}</button></form></div>
|
||||
</div>
|
||||
<div class="anchors" style="margin-top:14px">
|
||||
{{if .Claims}}<a href="#claims">⏳ 待确认 {{len .Claims}}</a>{{end}}
|
||||
<a href="#profile">✏️ 资料</a><a href="#payment">💰 收款方式</a><a href="#donations">📜 施舍记录</a>
|
||||
{{if .Claims}}<a href="#claims">{{T "⏳ 待确认"}} {{len .Claims}}</a>{{end}}
|
||||
<a href="#profile">{{T "✏️ 资料"}}</a><a href="#payment">{{T "💰 收款方式"}}</a><a href="#donations">{{T "📜 施舍记录"}}</a>
|
||||
|
||||
{{if .Site.IsMain}}<a href="#sites">🏚 所有站点</a><a href="#messages">🧹 留言巡查</a>{{end}}
|
||||
{{if .Site.IsMain}}<a href="#sites">{{T "🏚 所有站点"}}</a><a href="#messages">{{T "🧹 留言巡查"}}</a>{{end}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{if .Claims}}
|
||||
<section class="card px" id="claims" style="margin-bottom:12px">
|
||||
<h2>⏳ 待确认的施舍 <span class="tag claimed">{{len .Claims}}</span></h2>
|
||||
<div class="hint" style="margin:-6px 0 8px">打开币安 App 核对到账(看金额和备注码),确认后上榜。</div>
|
||||
<h2>{{T "⏳ 待确认的施舍"}} <span class="tag claimed">{{len .Claims}}</span></h2>
|
||||
<div class="hint" style="margin:-6px 0 8px">{{T "打开币安 App 核对到账(看金额和备注码),确认后上榜。"}}</div>
|
||||
<ul class="list feed">
|
||||
{{range .Claims}}<li class="item">
|
||||
<div class="av" style="--h:{{hue .NickKey}}">{{initial .Nickname}}</div>
|
||||
<div class="body"><div class="name"><span>{{.Nickname}}</span></div><div class="sub">备注码 <span class="code">{{.NoteCode}}</span>{{if .BinanceOrderID}} · 币安订单 <span class="code">{{.BinanceOrderID}}</span>{{end}} · {{ago .CreatedAt}}</div></div>
|
||||
<div class="body"><div class="name"><span>{{.Nickname}}</span></div><div class="sub">{{T "备注码"}} <span class="code">{{.NoteCode}}</span>{{if .BinanceOrderID}} {{T "· 币安订单"}} <span class="code">{{.BinanceOrderID}}</span>{{end}} · {{ago .CreatedAt}}</div></div>
|
||||
<div class="amtv num">{{.Amount}} {{.Currency}}</div>
|
||||
{{if .Message}}<div class="bubble">{{.Message}}</div>{{end}}
|
||||
<div class="actions">
|
||||
<form method="post" action="/manage/donation/{{.ID}}/confirm"><button class="btn sm">✓ 确认到账</button></form>
|
||||
<form method="post" action="/manage/donation/{{.ID}}/reject"><button class="btn sm danger">✗ 没收到</button></form>
|
||||
<form method="post" action="/manage/donation/{{.ID}}/confirm"><button class="btn sm">{{T "✓ 确认到账"}}</button></form>
|
||||
<form method="post" action="/manage/donation/{{.ID}}/reject"><button class="btn sm danger">{{T "✗ 没收到"}}</button></form>
|
||||
</div>
|
||||
</li>{{end}}
|
||||
</ul>
|
||||
@@ -40,49 +40,49 @@
|
||||
{{end}}
|
||||
|
||||
<section class="card px" id="profile" style="margin-bottom:12px">
|
||||
<h2>✏️ 资料</h2>
|
||||
<h2>{{T "✏️ 资料"}}</h2>
|
||||
<form method="post" action="/manage/profile">
|
||||
<div class="grid2">
|
||||
<div>{{$lock := and .Site.XHandle (not .Site.IsMain)}}<label for="nameIn">站点标题{{if $lock}} <span class="hint" style="display:inline">(来自 X @{{.Site.XHandle}},锁定)</span>{{end}}</label><input id="nameIn" name="name" maxlength="20" value="{{.Site.Name}}" {{if $lock}}readonly{{else}}required{{end}}></div>
|
||||
{{if not .Site.AvatarURL}}<div><label for="avatarIn">头像 emoji</label><input id="avatarIn" name="avatar" maxlength="12" value="{{.Site.Avatar}}"></div>{{end}}
|
||||
<div>{{$lock := and .Site.XHandle (not .Site.IsMain)}}<label for="nameIn">{{T "站点标题"}}{{if $lock}} <span class="hint" style="display:inline">{{T "(来自 X @"}}{{.Site.XHandle}}{{T ",锁定)"}}</span>{{end}}</label><input id="nameIn" name="name" maxlength="20" value="{{.Site.Name}}" {{if $lock}}readonly{{else}}required{{end}}></div>
|
||||
{{if not .Site.AvatarURL}}<div><label for="avatarIn">{{T "头像 emoji"}}</label><input id="avatarIn" name="avatar" maxlength="12" value="{{.Site.Avatar}}"></div>{{end}}
|
||||
</div>
|
||||
<label for="sloganIn">一句话口号</label><input id="sloganIn" name="slogan" maxlength="60" value="{{.Site.Slogan}}">
|
||||
{{if not .Site.XHandle}}<label>绑定 X <span class="hint" style="display:inline">(主页链接或 @名字,留空不显示)</span></label><input name="x_url" maxlength="100" value="{{.Site.XURL}}" placeholder="https://x.com/你的名字">{{end}}
|
||||
<button class="btn sec" type="submit" style="margin-top:14px">保存资料</button>
|
||||
<label for="sloganIn">{{T "一句话口号"}}</label><input id="sloganIn" name="slogan" maxlength="60" value="{{.Site.Slogan}}">
|
||||
{{if not .Site.XHandle}}<label>{{T "绑定 X"}} <span class="hint" style="display:inline">{{T "(主页链接或 @名字,留空不显示)"}}</span></label><input name="x_url" maxlength="100" value="{{.Site.XURL}}" placeholder="{{T "https://x.com/你的名字"}}">{{end}}
|
||||
<button class="btn sec" type="submit" style="margin-top:14px">{{T "保存资料"}}</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<details class="card px fold" id="payment" style="margin-bottom:12px"{{if or .Site.IsMain (not .Site.PaymentReady)}} open{{end}}>
|
||||
<summary><h2>💰 收款方式 <span class="sub">{{if .Site.IsMain}}config.env 配置{{else if eq .Site.PayMode "gateway"}}已绑币安 Key · 自动确认{{else if .Site.PaymentReady}}直接转账 · UID {{.Site.PayID}}{{else}}⚠️ 还没摆碗,点开设置{{end}}</span><span class="caret" aria-hidden="true">▸</span></h2></summary>
|
||||
<summary><h2>{{T "💰 收款方式"}} <span class="sub">{{if .Site.IsMain}}{{T "config.env 配置"}}{{else if eq .Site.PayMode "gateway"}}{{T "已绑币安 Key · 自动确认"}}{{else if .Site.PaymentReady}}{{T "直接转账 · UID"}} {{.Site.PayID}}{{else}}{{T "⚠️ 还没摆碗,点开设置"}}{{end}}</span><span class="caret" aria-hidden="true">▸</span></h2></summary>
|
||||
|
||||
{{if .Site.IsMain}}
|
||||
<div class="hint">主站的收款方式在服务器 config.env 里配置。当前:{{if eq .Site.PayMode "gateway"}}BinancePayTool 网关自动确认(默认账号){{else}}直接转账{{if .Site.PayID}},Pay ID {{.Site.PayID}}{{end}}{{end}}。</div>
|
||||
{{if eq .Site.PayMode "gateway"}}<form method="post" action="/manage/verify" style="margin-top:10px"><button class="btn sec sm" type="submit">校验网关默认账号</button></form>{{end}}
|
||||
<div class="hint">{{T "主站的收款方式在服务器 config.env 里配置。当前:"}}{{if eq .Site.PayMode "gateway"}}{{T "BinancePayTool 网关自动确认(默认账号)"}}{{else}}{{T "直接转账"}}{{if .Site.PayID}},Pay ID {{.Site.PayID}}{{end}}{{end}}。</div>
|
||||
{{if eq .Site.PayMode "gateway"}}<form method="post" action="/manage/verify" style="margin-top:10px"><button class="btn sec sm" type="submit">{{T "校验网关默认账号"}}</button></form>{{end}}
|
||||
{{else}}
|
||||
{{if eq .Site.PayMode "gateway"}}
|
||||
<div class="notice ok">✅ 已绑定币安账号(UID {{.Site.BinanceUID}}),施主付款后<b>自动确认上榜</b>。{{if .Site.ReceiveLink}}收银页会展示你的收款码 / 一键唤起。{{else}}建议补一个收款链接,让施主能扫码 / 一键唤起。{{end}}</div>
|
||||
<div class="notice ok">{{T "✅ 已绑定币安账号(UID"}} {{.Site.BinanceUID}}{{T "),施主付款后"}}<b>{{T "自动确认上榜"}}</b>。{{if .Site.ReceiveLink}}{{T "收银页会展示你的收款码 / 一键唤起。"}}{{else}}{{T "建议补一个收款链接,让施主能扫码 / 一键唤起。"}}{{end}}</div>
|
||||
<div class="btns">
|
||||
<form method="post" action="/manage/verify" style="flex:1"><button class="btn sec" type="submit">重新校验 Key</button></form>
|
||||
<form method="post" action="/manage/unbind" style="flex:1" onsubmit="return confirm('解绑后改为直接转账(需你手动确认到账),确定?')"><button class="btn danger" type="submit">解绑</button></form>
|
||||
<form method="post" action="/manage/verify" style="flex:1"><button class="btn sec" type="submit">{{T "重新校验 Key"}}</button></form>
|
||||
<form method="post" action="/manage/unbind" style="flex:1" onsubmit="return confirm({{T "解绑后改为直接转账(需你手动确认到账),确定?"}})"><button class="btn danger" type="submit">{{T "解绑"}}</button></form>
|
||||
</div>
|
||||
<details style="margin-top:12px"><summary class="hint" style="cursor:pointer">换一个 Key / 更新收款链接</summary>
|
||||
<details style="margin-top:12px"><summary class="hint" style="cursor:pointer">{{T "换一个 Key / 更新收款链接"}}</summary>
|
||||
{{template "bindform" .}}
|
||||
</details>
|
||||
{{else}}
|
||||
<div class="notice" style="margin-bottom:12px">{{if .Site.PaymentReady}}当前是<b>直接转账</b>模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。{{else}}⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。{{end}}</div>
|
||||
<h2 style="font-size:15px">方式一:填币安 UID(最简单)</h2>
|
||||
<div class="hint" style="margin:6px 0 10px">币安 App → 点左上角头像,头像下面那串数字就是 <b>UID</b>(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。</div>
|
||||
<div class="notice" style="margin-bottom:12px">{{if .Site.PaymentReady}}{{T "当前是"}}<b>{{T "直接转账"}}</b>{{T "模式:施主在币安 App 里按你的 UID 转账,转完点「我已施舍」,你在后台确认后上榜。"}}{{else}}{{T "⚠️ 还没摆碗:填一下币安 UID 就能收钱,十秒钟的事。"}}{{end}}</div>
|
||||
<h2 style="font-size:15px">{{T "方式一:填币安 UID(最简单)"}}</h2>
|
||||
<div class="hint" style="margin:6px 0 10px">{{T "币安 App → 点左上角头像,头像下面那串数字就是"}} <b>UID</b>{{T "(也是 Pay ID)。施主投币时会看到它,在币安 App「支付 → 转账」里输入就能转给你,零手续费。"}}</div>
|
||||
<form method="post" action="/manage/payment">
|
||||
<label for="payIdIn">币安 UID</label>
|
||||
<input id="payIdIn" name="pay_id" inputmode="numeric" maxlength="60" value="{{.Site.PayID}}" placeholder="例如 12345678" required>
|
||||
<label for="rlIn">收款链接 <span class="hint" style="display:inline">(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)</span></label>
|
||||
<label for="payIdIn">{{T "币安 UID"}}</label>
|
||||
<input id="payIdIn" name="pay_id" inputmode="numeric" maxlength="60" value="{{.Site.PayID}}" placeholder="{{T "例如 12345678"}}" required>
|
||||
<label for="rlIn">{{T "收款链接"}} <span class="hint" style="display:inline">{{T "(选填。填了施主就能扫码 / 一键唤起币安 App;不填也能按 UID 转账)"}}</span></label>
|
||||
<input id="rlIn" name="receive_link" maxlength="300" value="{{.Site.ReceiveLink}}" placeholder="https://app.binance.com/uni-qr/…">
|
||||
<div class="hint" style="margin-top:-4px">怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。</div>
|
||||
<button class="btn" type="submit" style="margin-top:14px">保存</button>
|
||||
<div class="hint" style="margin-top:-4px">{{T "怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具(微信扫一扫、相册识图都行)读出图片里的链接,贴到这里。"}}</div>
|
||||
<button class="btn" type="submit" style="margin-top:14px">{{T "保存"}}</button>
|
||||
</form>
|
||||
{{if .HasGateway}}
|
||||
<h2 style="font-size:15px;margin-top:22px">方式二:绑定币安只读 API Key(到账自动确认上榜)</h2>
|
||||
<div class="hint" style="margin:6px 0 4px">施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。</div>
|
||||
<h2 style="font-size:15px;margin-top:22px">{{T "方式二:绑定币安只读 API Key(到账自动确认上榜)"}}</h2>
|
||||
<div class="hint" style="margin:6px 0 4px">{{T "施主付完钱自动上榜,你不用手动确认。Key 只要「允许读取」权限,拿不走钱;本站不保存 Key,只交给收款网关加密存储。"}}</div>
|
||||
{{template "bindform" .}}
|
||||
{{end}}
|
||||
{{end}}
|
||||
@@ -91,84 +91,84 @@
|
||||
|
||||
|
||||
<section class="card px" id="donations" style="margin-bottom:12px">
|
||||
<h2>📜 施舍记录 <span class="sub">共 {{.DonPager.Total}} 条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复</span></h2>
|
||||
<h2>{{T "📜 施舍记录"}} <span class="sub">{{T "共"}} {{.DonPager.Total}} {{T "条 · 广告可屏蔽留言或屏蔽此人(记录保留)· 可回复"}}</span></h2>
|
||||
{{if .Donations}}<ul class="list feed">
|
||||
{{range .Donations}}<li class="item">
|
||||
<div class="av" style="--h:{{hue .NickKey}}">{{if .Blocked}}✕{{else}}{{initial .Nickname}}{{end}}</div>
|
||||
<div class="body"><div class="name"><span>{{.Nickname}}</span>{{if .XHandle}}<span class="xh">@{{.XHandle}}</span>{{end}}<span class="tag{{if eq .Status "paid"}} paid{{else if eq .Status "claimed"}} claimed{{else if ne .Status "pending"}} bad{{end}}">{{statusText .Status}}</span>{{if .Blocked}}<span class="tag bad">已屏蔽此人</span>{{end}}</div><div class="sub">{{ago .CreatedAt}}</div></div>
|
||||
<div class="body"><div class="name"><span>{{.Nickname}}</span>{{if .XHandle}}<span class="xh">@{{.XHandle}}</span>{{end}}<span class="tag{{if eq .Status "paid"}} paid{{else if eq .Status "claimed"}} claimed{{else if ne .Status "pending"}} bad{{end}}">{{statusText .Status}}</span>{{if .Blocked}}<span class="tag bad">{{T "已屏蔽此人"}}</span>{{end}}</div><div class="sub">{{ago .CreatedAt}}</div></div>
|
||||
<div class="amtv num{{if eq .Status "paid"}} accent{{end}}">{{if eq .Status "paid"}}{{fmtAmt .ActualE8}}{{else}}{{.Amount}}{{end}}</div>
|
||||
{{if .Message}}<div class="bubble{{if .MsgBlocked}} blocked{{end}}" style="letter-spacing:0">{{if .MsgBlocked}}*** <span class="hint" style="display:inline">(已屏蔽:{{.Message}})</span>{{else}}{{.Message}}{{end}}</div>{{end}}
|
||||
{{if .Reply}}<div class="bubble reply">🥣 站长:{{.Reply}}</div>{{end}}
|
||||
{{if .Message}}<div class="bubble{{if .MsgBlocked}} blocked{{end}}" style="letter-spacing:0">{{if .MsgBlocked}}*** <span class="hint" style="display:inline">{{T "(已屏蔽:%s)" .Message}}</span>{{else}}{{.Message}}{{end}}</div>{{end}}
|
||||
{{if .Reply}}<div class="bubble reply">{{T "🥣 站长:"}}{{.Reply}}</div>{{end}}
|
||||
<div class="actions">
|
||||
{{if .Message}}<form method="post" action="/manage/donation/{{.ID}}/{{if .MsgBlocked}}unblock{{else}}block{{end}}"><button class="btn sm{{if .MsgBlocked}} sec{{else}} danger{{end}}">{{if .MsgBlocked}}恢复留言{{else}}屏蔽留言{{end}}</button></form>{{end}}
|
||||
<form method="post" action="/manage/donation/{{.ID}}/{{if .Blocked}}unblockuser{{else}}blockuser{{end}}"><button class="btn sm{{if .Blocked}} sec{{else}} danger{{end}}">{{if .Blocked}}恢复此人{{else}}屏蔽此人{{end}}</button></form>
|
||||
{{if eq .Status "paid"}}<form method="post" action="/manage/donation/{{.ID}}/reply" class="replyf"><input name="reply" maxlength="80" placeholder="回一句…" value="{{.Reply}}"><button class="btn sm sec">回复</button></form>{{end}}
|
||||
{{if .Message}}<form method="post" action="/manage/donation/{{.ID}}/{{if .MsgBlocked}}unblock{{else}}block{{end}}"><button class="btn sm{{if .MsgBlocked}} sec{{else}} danger{{end}}">{{if .MsgBlocked}}{{T "恢复留言"}}{{else}}{{T "屏蔽留言"}}{{end}}</button></form>{{end}}
|
||||
<form method="post" action="/manage/donation/{{.ID}}/{{if .Blocked}}unblockuser{{else}}blockuser{{end}}"><button class="btn sm{{if .Blocked}} sec{{else}} danger{{end}}">{{if .Blocked}}{{T "恢复此人"}}{{else}}{{T "屏蔽此人"}}{{end}}</button></form>
|
||||
{{if eq .Status "paid"}}<form method="post" action="/manage/donation/{{.ID}}/reply" class="replyf"><input name="reply" maxlength="80" placeholder="{{T "回一句…"}}" value="{{.Reply}}"><button class="btn sm sec">{{T "回复"}}</button></form>{{end}}
|
||||
</div>
|
||||
</li>{{end}}
|
||||
</ul>{{template "pager" .DonPager}}{{else}}<div class="empty"><div class="ico">📜</div>还没有施舍记录</div>{{end}}
|
||||
</ul>{{template "pager" .DonPager}}{{else}}<div class="empty"><div class="ico">📜</div>{{T "还没有施舍记录"}}</div>{{end}}
|
||||
</section>
|
||||
|
||||
{{if not .Site.IsMain}}
|
||||
<div class="modal" id="pwModal" hidden role="dialog" aria-modal="true" aria-labelledby="pwTitle"><div class="modal-box">
|
||||
<button class="modal-x" type="button" id="pwX" aria-label="关闭">✕</button>
|
||||
<h2 id="pwTitle">🔑 修改口令</h2>
|
||||
{{if .PwErr}}<div class="notice bad" style="margin-bottom:10px">{{.Err}}</div>{{end}}
|
||||
<button class="modal-x" type="button" id="pwX" aria-label="{{T "关闭"}}">✕</button>
|
||||
<h2 id="pwTitle">{{T "🔑 修改口令"}}</h2>
|
||||
{{if .PwErr}}<div class="notice bad" style="margin-bottom:10px">{{T .Err}}</div>{{end}}
|
||||
<form method="post" action="/manage/password">
|
||||
<div class="grid2">
|
||||
<div><label for="pw1">新口令(至少 6 位)</label><input id="pw1" name="password" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw2">再输一遍</label><input id="pw2" name="password2" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw1">{{T "新口令(至少 6 位)"}}</label><input id="pw1" name="password" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw2">{{T "再输一遍"}}</label><input id="pw2" name="password2" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
</div>
|
||||
<div class="hint">改完后其它设备上的登录会失效。</div>
|
||||
<button class="btn" type="submit" style="margin-top:14px">确认修改</button>
|
||||
<div class="hint">{{T "改完后其它设备上的登录会失效。"}}</div>
|
||||
<button class="btn" type="submit" style="margin-top:14px">{{T "确认修改"}}</button>
|
||||
</form>
|
||||
</div></div>
|
||||
{{end}}
|
||||
|
||||
{{if .Site.IsMain}}
|
||||
<section class="card px" id="sites" style="margin-bottom:12px">
|
||||
<h2>🏚 所有要饭站 <span class="sub">{{.SitePager.Total}} 个 · 违规可除名 · 可帮站长重置口令</span></h2>
|
||||
<h2>{{T "🏚 所有要饭站"}} <span class="sub">{{.SitePager.Total}} {{T "个 · 违规可除名 · 可帮站长重置口令"}}</span></h2>
|
||||
{{if .Sites}}<ul class="list feed">
|
||||
{{range .Sites}}<li class="item">
|
||||
{{if .AvatarURL}}<img class="av img" src="{{.AvatarURL}}" alt="">{{else}}<div class="av sq">{{.Avatar}}</div>{{end}}
|
||||
<div class="body"><div class="name"><span><a href="{{.Path}}">{{.Name}}</a></span>{{if .XHandle}}<span class="xh">@{{.XHandle}}</span>{{end}}<span class="hint" style="display:inline">/{{.Slug}}</span>{{if ne .Status "active"}}<span class="tag bad">已除名</span>{{end}}{{if not .Listed}}<span class="tag claimed">未收录</span>{{end}}</div><div class="sub">{{if .Title}}{{.Title}} · {{end}}{{if eq .PayMode "gateway"}}已绑 Key 自动确认{{else}}直接转账{{end}} · {{.Donors}} 位施主 · 钢镚 {{.Coins}} · {{ago .CreatedAt}}开张</div></div>
|
||||
<div class="body"><div class="name"><span><a href="{{.Path}}">{{.Name}}</a></span>{{if .XHandle}}<span class="xh">@{{.XHandle}}</span>{{end}}<span class="hint" style="display:inline">/{{.Slug}}</span>{{if ne .Status "active"}}<span class="tag bad">{{T "已除名"}}</span>{{end}}{{if not .Listed}}<span class="tag claimed">{{T "未收录"}}</span>{{end}}</div><div class="sub">{{if .Title}}{{.Title}} · {{end}}{{if eq .PayMode "gateway"}}{{T "已绑 Key 自动确认"}}{{else}}{{T "直接转账"}}{{end}} · {{.Donors}} {{T "位施主 · 钢镚"}} {{.Coins}} · {{ago .CreatedAt}}{{T "开张"}}</div></div>
|
||||
<div class="amtv num">{{fmtAmt .TotalE8}}</div>
|
||||
<div class="actions">
|
||||
<form method="post" action="/manage/site/{{.ID}}/{{if .Listed}}unlist{{else}}list{{end}}"><button class="btn sm{{if .Listed}} ghost{{end}}">{{if .Listed}}取消收录{{else}}收录上榜{{end}}</button></form>
|
||||
<form method="post" action="/manage/site/{{.ID}}/{{if eq .Status "active"}}disable{{else}}enable{{end}}"><button class="btn sm{{if eq .Status "active"}} danger{{else}} sec{{end}}">{{if eq .Status "active"}}除名{{else}}恢复{{end}}</button></form>
|
||||
<form method="post" action="/manage/site/{{.ID}}/resetpw" onsubmit="return confirm('重置 /{{.Slug}} 的口令?新口令只显示一次。')"><button class="btn sm ghost">重置口令</button></form>
|
||||
<form method="post" action="/manage/site/{{.ID}}/{{if .Listed}}unlist{{else}}list{{end}}"><button class="btn sm{{if .Listed}} ghost{{end}}">{{if .Listed}}{{T "取消收录"}}{{else}}{{T "收录上榜"}}{{end}}</button></form>
|
||||
<form method="post" action="/manage/site/{{.ID}}/{{if eq .Status "active"}}disable{{else}}enable{{end}}"><button class="btn sm{{if eq .Status "active"}} danger{{else}} sec{{end}}">{{if eq .Status "active"}}{{T "除名"}}{{else}}{{T "恢复"}}{{end}}</button></form>
|
||||
<form method="post" action="/manage/site/{{.ID}}/resetpw" onsubmit="return confirm({{T "重置 /%s 的口令?新口令只显示一次。" .Slug}})"><button class="btn sm ghost">{{T "重置口令"}}</button></form>
|
||||
</div>
|
||||
</li>{{end}}
|
||||
</ul>{{template "pager" .SitePager}}{{else}}<div class="empty"><div class="ico">🏚</div>还没有子站</div>{{end}}
|
||||
</ul>{{template "pager" .SitePager}}{{else}}<div class="empty"><div class="ico">🏚</div>{{T "还没有子站"}}</div>{{end}}
|
||||
</section>
|
||||
<section class="card px" id="messages">
|
||||
<h2>🧹 全站最新留言 <span class="sub">共 {{.MsgPager.Total}} 条 · 跨站点巡查广告</span></h2>
|
||||
<h2>{{T "🧹 全站最新留言"}} <span class="sub">{{T "共"}} {{.MsgPager.Total}} {{T "条 · 跨站点巡查广告"}}</span></h2>
|
||||
{{if .Messages}}<ul class="list feed">
|
||||
{{range .Messages}}<li class="item">
|
||||
<div class="av" style="--h:{{hue .NickKey}}">{{if .Blocked}}✕{{else}}{{initial .Nickname}}{{end}}</div>
|
||||
<div class="body"><div class="name"><span>{{.Nickname}}</span>{{if .XHandle}}<span class="xh">@{{.XHandle}}</span>{{end}}<span class="hint" style="display:inline">→ {{.SiteName}}</span>{{if .Blocked}}<span class="tag bad">已屏蔽此人</span>{{end}}</div><div class="sub">{{ago .PaidAt}}</div></div>
|
||||
<div class="body"><div class="name"><span>{{.Nickname}}</span>{{if .XHandle}}<span class="xh">@{{.XHandle}}</span>{{end}}<span class="hint" style="display:inline">→ {{.SiteName}}</span>{{if .Blocked}}<span class="tag bad">{{T "已屏蔽此人"}}</span>{{end}}</div><div class="sub">{{ago .PaidAt}}</div></div>
|
||||
<div class="amtv num">{{fmtAmt .ActualE8}}</div>
|
||||
<div class="bubble{{if .MsgBlocked}} blocked{{end}}" style="letter-spacing:0">{{if .MsgBlocked}}*** <span class="hint" style="display:inline">(已屏蔽:{{.Message}})</span>{{else}}{{.Message}}{{end}}</div>
|
||||
<div class="actions"><form method="post" action="/manage/donation/{{.ID}}/{{if .MsgBlocked}}unblock{{else}}block{{end}}"><button class="btn sm{{if .MsgBlocked}} sec{{else}} danger{{end}}">{{if .MsgBlocked}}恢复留言{{else}}屏蔽留言{{end}}</button></form>
|
||||
<form method="post" action="/manage/donation/{{.ID}}/{{if .Blocked}}unblockuser{{else}}blockuser{{end}}"><button class="btn sm{{if .Blocked}} sec{{else}} danger{{end}}">{{if .Blocked}}恢复此人{{else}}屏蔽此人{{end}}</button></form></div>
|
||||
<div class="bubble{{if .MsgBlocked}} blocked{{end}}" style="letter-spacing:0">{{if .MsgBlocked}}*** <span class="hint" style="display:inline">{{T "(已屏蔽:%s)" .Message}}</span>{{else}}{{.Message}}{{end}}</div>
|
||||
<div class="actions"><form method="post" action="/manage/donation/{{.ID}}/{{if .MsgBlocked}}unblock{{else}}block{{end}}"><button class="btn sm{{if .MsgBlocked}} sec{{else}} danger{{end}}">{{if .MsgBlocked}}{{T "恢复留言"}}{{else}}{{T "屏蔽留言"}}{{end}}</button></form>
|
||||
<form method="post" action="/manage/donation/{{.ID}}/{{if .Blocked}}unblockuser{{else}}blockuser{{end}}"><button class="btn sm{{if .Blocked}} sec{{else}} danger{{end}}">{{if .Blocked}}{{T "恢复此人"}}{{else}}{{T "屏蔽此人"}}{{end}}</button></form></div>
|
||||
</li>{{end}}
|
||||
</ul>{{template "pager" .MsgPager}}{{else}}<div class="empty"><div class="ico">🧹</div>暂无留言</div>{{end}}
|
||||
</ul>{{template "pager" .MsgPager}}{{else}}<div class="empty"><div class="ico">🧹</div>{{T "暂无留言"}}</div>{{end}}
|
||||
</section>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
{{define "bindform"}}
|
||||
<form method="post" action="/manage/bind" autocomplete="off">
|
||||
<div class="hint" style="margin-bottom:8px">币安 App → 账户 → API 管理 → 创建 API:<b>只勾「允许读取」</b>,其它权限都不要,<b>不用设 IP 白名单</b>(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。</div>
|
||||
<div class="hint" style="margin-bottom:8px">{{T "币安 App → 账户 → API 管理 → 创建 API:"}}<b>{{T "只勾「允许读取」"}}</b>{{T ",其它权限都不要,"}}<b>{{T "不用设 IP 白名单"}}</b>{{T "(只读 Key 拿不走钱)。Key 只用来读取你的收款流水,服务端加密存储,永不展示。"}}</div>
|
||||
<div class="grid2">
|
||||
<div><label>API Key</label><input name="api_key" maxlength="128" required autocomplete="off"></div>
|
||||
<div><label>Secret Key</label><input name="api_secret" type="password" maxlength="128" required autocomplete="new-password"></div>
|
||||
</div>
|
||||
<div class="grid2">
|
||||
<div><label>币安 UID <span class="hint" style="display:inline">(App 头像页可见)</span></label><input name="uid" inputmode="numeric" maxlength="20" value="{{.Site.BinanceUID}}" required></div>
|
||||
<div><label>收款链接 <span class="hint" style="display:inline">(选填,填了施主能扫码)</span></label><input name="receive_link" maxlength="300" value="{{.Site.ReceiveLink}}" placeholder="https://app.binance.com/uni-qr/…"></div>
|
||||
<div><label>{{T "币安 UID"}} <span class="hint" style="display:inline">{{T "(App 头像页可见)"}}</span></label><input name="uid" inputmode="numeric" maxlength="20" value="{{.Site.BinanceUID}}" required></div>
|
||||
<div><label>{{T "收款链接"}} <span class="hint" style="display:inline">{{T "(选填,填了施主能扫码)"}}</span></label><input name="receive_link" maxlength="300" value="{{.Site.ReceiveLink}}" placeholder="https://app.binance.com/uni-qr/…"></div>
|
||||
</div>
|
||||
<div class="hint" style="margin-top:-4px">收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。</div>
|
||||
<button class="btn" type="submit" style="margin-top:14px">绑定并校验</button>
|
||||
<div class="hint" style="margin-top:-4px">{{T "收款链接怎么拿:币安 App 收款页「保存图片」,用任意二维码识别工具读出图片里的链接。"}}</div>
|
||||
<button class="btn" type="submit" style="margin-top:14px">{{T "绑定并校验"}}</button>
|
||||
</form>
|
||||
{{end}}
|
||||
{{define "scripts"}}<script>
|
||||
|
||||
+36
-36
@@ -1,72 +1,72 @@
|
||||
{{define "title"}}{{if eq .Purpose "reset"}}用 X 找回口令{{else}}开通要饭站{{end}} · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{if eq .Purpose "reset"}}{{T "用 X 找回口令"}}{{else}}{{T "开通要饭站"}}{{end}} · {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div class="narrow">
|
||||
{{if eq .Step 1}}
|
||||
<section class="card px">
|
||||
<h1>{{if eq .Purpose "reset"}}🔑 用 X 找回口令{{else}}🏚 开通我的要饭站{{end}}</h1>
|
||||
<p class="hint" style="font-size:14px;margin:0 0 12px">{{if eq .Purpose "reset"}}发一条带验证码的推文证明你是站长本人,就能重设口令。{{else}}不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。{{end}}</p>
|
||||
{{if .Err}}<div class="notice bad" style="margin-bottom:12px">{{.Err}}</div>{{end}}
|
||||
{{if .InApp}}<div class="notice" style="margin-bottom:12px">📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。<b>建议点右上角「⋯」选「在浏览器中打开」</b>(或复制链接到 Safari / Chrome 打开)再操作。
|
||||
<div class="btns" style="margin-top:8px"><button type="button" class="btn sec sm copy" data-copy="{{.BaseURL}}{{if eq .Purpose "reset"}}/reset{{else}}/new{{end}}">复制本页链接</button></div></div>{{end}}
|
||||
<h1>{{if eq .Purpose "reset"}}{{T "🔑 用 X 找回口令"}}{{else}}{{T "🏚 开通我的要饭站"}}{{end}}</h1>
|
||||
<p class="hint" style="font-size:14px;margin:0 0 12px">{{if eq .Purpose "reset"}}{{T "发一条带验证码的推文证明你是站长本人,就能重设口令。"}}{{else}}{{T "不用先施舍,用你的 X 账号发一条推就能开:站名用你的 X 昵称、头像用 X 头像,一个 X 账号一个站。发推顺便帮你把碗摆到街上。"}}{{end}}</p>
|
||||
{{if .Err}}<div class="notice bad" style="margin-bottom:12px">{{T .Err}}</div>{{end}}
|
||||
{{if .InApp}}<div class="notice" style="margin-bottom:12px">{{T "📱 你现在在 App 内置浏览器里,一键发推可能拉不起来、发完回来也可能丢状态。"}}<b>{{T "建议点右上角「⋯」选「在浏览器中打开」"}}</b>{{T "(或复制链接到 Safari / Chrome 打开)再操作。"}}
|
||||
<div class="btns" style="margin-top:8px"><button type="button" class="btn sec sm copy" data-copy="{{.BaseURL}}{{if eq .Purpose "reset"}}/reset{{else}}/new{{end}}">{{T "复制本页链接"}}</button></div></div>{{end}}
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<h2>发一条推文,带上验证码 <span class="code">{{.Code}}</span></h2>
|
||||
<label>推文内容(可以随便改,只要保留验证码)<span class="count"><button type="button" class="copy" id="nextText">换一条</button></span></label>
|
||||
<h2>{{T "发一条推文,带上验证码"}} <span class="code">{{.Code}}</span></h2>
|
||||
<label>{{T "推文内容(可以随便改,只要保留验证码)"}}<span class="count"><button type="button" class="copy" id="nextText">{{T "换一条"}}</button></span></label>
|
||||
<textarea id="tweetText" rows="4" maxlength="280">{{index .Texts 0}}</textarea>
|
||||
<div class="btns">
|
||||
<a class="btn" id="intent" href="{{.IntentURL}}" target="_blank" rel="noopener">🐦 一键去 X 发推</a>
|
||||
<button type="button" class="btn sec copy" data-copy-from="tweetText">复制文案</button>
|
||||
<a class="btn" id="intent" href="{{.IntentURL}}" target="_blank" rel="noopener">{{T "🐦 一键去 X 发推"}}</a>
|
||||
<button type="button" class="btn sec copy" data-copy-from="tweetText">{{T "复制文案"}}</button>
|
||||
</div>
|
||||
<a class="hint" id="intentAlt" href="{{.IntentURL}}" target="_blank" rel="noopener" hidden style="display:block;margin-top:6px;text-decoration:underline">没拉起 X App?点这里用网页版发 →</a>
|
||||
<div class="hint">验证码 <b>{{.Code}}</b> 大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。</div>
|
||||
<a class="hint" id="intentAlt" href="{{.IntentURL}}" target="_blank" rel="noopener" hidden style="display:block;margin-top:6px;text-decoration:underline">{{T "没拉起 X App?点这里用网页版发 →"}}</a>
|
||||
<div class="hint">{{T "验证码"}} <b>{{.Code}}</b> {{T "大小写不限,24 小时内有效。文案里带着你的碗的链接,发出去顺便吆喝。"}}</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h2>把推文链接贴回来</h2>
|
||||
<h2>{{T "把推文链接贴回来"}}</h2>
|
||||
<form method="post" action="{{if eq .Purpose "reset"}}/reset/verify{{else}}/new/verify{{end}}">
|
||||
<input type="hidden" name="code" value="{{.Code}}">
|
||||
<label for="tweetUrl">推文链接</label>
|
||||
<input id="tweetUrl" name="tweet_url" placeholder="https://x.com/你的名字/status/1234567890" value="{{.TweetURL}}" required autocapitalize="off">
|
||||
<button class="btn" type="submit" style="margin-top:14px">验证</button>
|
||||
<label for="tweetUrl">{{T "推文链接"}}</label>
|
||||
<input id="tweetUrl" name="tweet_url" placeholder="{{T "https://x.com/你的名字/status/1234567890"}}" value="{{.TweetURL}}" required autocapitalize="off">
|
||||
<button class="btn" type="submit" style="margin-top:14px">{{T "验证"}}</button>
|
||||
</form>
|
||||
<div class="hint">推文发出后,点推文右上角「分享 → 复制链接」即可。</div>
|
||||
<div class="hint">{{T "推文发出后,点推文右上角「分享 → 复制链接」即可。"}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hint" style="margin-top:14px">{{if eq .Purpose "reset"}}还没开过站?<a href="/new">去开一个</a>{{else}}已经开过站?<a href="/login">站长登录</a>{{end}}</div>
|
||||
<div class="hint" style="margin-top:14px">{{if eq .Purpose "reset"}}{{T "还没开过站?"}}<a href="/new">{{T "去开一个"}}</a>{{else}}{{T "已经开过站?"}}<a href="/login">{{T "站长登录"}}</a>{{end}}</div>
|
||||
</section>
|
||||
{{else if eq .Purpose "reset"}}
|
||||
<section class="card px">
|
||||
<h1>🔑 设置新口令</h1>
|
||||
<h1>{{T "🔑 设置新口令"}}</h1>
|
||||
<div class="profrow">{{if .AvatarURL}}<img class="xavatar" src="{{.AvatarURL}}" alt="">{{else}}<div class="av sq">🥣</div>{{end}}<div><b>{{.Site.Name}}</b><div class="hint" style="margin:0">@{{.Prof.Handle}} · {{.BaseURL}}{{.Site.Path}}</div></div></div>
|
||||
{{if .Err}}<div class="notice bad" style="margin:12px 0">{{.Err}}</div>{{end}}
|
||||
{{if .Err}}<div class="notice bad" style="margin:12px 0">{{T .Err}}</div>{{end}}
|
||||
<form method="post" action="/reset">
|
||||
<input type="hidden" name="code" value="{{.Code}}">
|
||||
<div class="grid2">
|
||||
<div><label for="pw1">新口令(至少 6 位)</label><input id="pw1" name="password" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw2">再输一遍</label><input id="pw2" name="password2" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw1">{{T "新口令(至少 6 位)"}}</label><input id="pw1" name="password" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw2">{{T "再输一遍"}}</label><input id="pw2" name="password2" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
</div>
|
||||
<button class="btn" type="submit" style="margin-top:16px">保存并登录</button>
|
||||
<button class="btn" type="submit" style="margin-top:16px">{{T "保存并登录"}}</button>
|
||||
</form>
|
||||
</section>
|
||||
{{else}}
|
||||
<section class="card px">
|
||||
<h1>🏚 开通我的要饭站</h1>
|
||||
<div class="notice ok">✅ X 验证通过</div>
|
||||
<div class="profrow">{{if .AvatarURL}}<img class="xavatar" src="{{.AvatarURL}}" alt="">{{else}}<div class="av sq">🥣</div>{{end}}<div><b>{{.Prof.Name}}</b><div class="hint" style="margin:0">@{{.Prof.Handle}} · 站名和头像来自 X(头像会定期同步)</div></div></div>
|
||||
<h1>{{T "🏚 开通我的要饭站"}}</h1>
|
||||
<div class="notice ok">{{T "✅ X 验证通过"}}</div>
|
||||
<div class="profrow">{{if .AvatarURL}}<img class="xavatar" src="{{.AvatarURL}}" alt="">{{else}}<div class="av sq">🥣</div>{{end}}<div><b>{{.Prof.Name}}</b><div class="hint" style="margin:0">@{{.Prof.Handle}} {{T "· 站名和头像来自 X(头像会定期同步)"}}</div></div></div>
|
||||
<form method="post" action="/new" id="nf">
|
||||
<input type="hidden" name="code" value="{{.Code}}">
|
||||
<label>站点地址 <span class="hint" style="display:inline">(就是你的 X 用户名,不用填)</span></label>
|
||||
<label>{{T "站点地址"}} <span class="hint" style="display:inline">{{T "(就是你的 X 用户名,不用填)"}}</span></label>
|
||||
<div class="code" style="display:inline-block;margin-bottom:10px">{{.BaseURL}}/{{.F.Slug}}</div>
|
||||
<label for="sloganIn">一句话口号</label>
|
||||
<input id="sloganIn" name="slogan" maxlength="60" placeholder="行行好,赏口饭吃 🙏" value="{{.F.Slogan}}">
|
||||
<div class="section-title">登录口令</div>
|
||||
<div class="hint" style="margin-bottom:6px">以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。</div>
|
||||
<label for="sloganIn">{{T "一句话口号"}}</label>
|
||||
<input id="sloganIn" name="slogan" maxlength="60" placeholder="{{T "行行好,赏口饭吃 🙏"}}" value="{{.F.Slogan}}">
|
||||
<div class="section-title">{{T "登录口令"}}</div>
|
||||
<div class="hint" style="margin-bottom:6px">{{T "以后用「X 用户名 + 口令」登录后台;忘了可以再发推找回。"}}</div>
|
||||
<div class="grid2">
|
||||
<div><label for="pw1">口令(至少 6 位)</label><input id="pw1" name="password" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw2">再输一遍</label><input id="pw2" name="password2" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw1">{{T "口令(至少 6 位)"}}</label><input id="pw1" name="password" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
<div><label for="pw2">{{T "再输一遍"}}</label><input id="pw2" name="password2" type="password" minlength="6" maxlength="72" required autocomplete="new-password"></div>
|
||||
</div>
|
||||
{{if .Err}}<div class="err">{{.Err}}</div>{{end}}
|
||||
<button class="btn" type="submit" style="margin-top:18px">开张 🏚</button>
|
||||
<div class="hint" style="margin-top:10px">开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。</div>
|
||||
{{if .Err}}<div class="err">{{T .Err}}</div>{{end}}
|
||||
<button class="btn" type="submit" style="margin-top:18px">{{T "开张 🏚"}}</button>
|
||||
<div class="hint" style="margin-top:10px">{{T "开通后在后台绑定币安 Key 或填收款码就能收钱。站点内容自负,广告站会被丐帮除名。"}}</div>
|
||||
</form>
|
||||
</section>
|
||||
{{end}}
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
{{define "title"}}给 {{.Site.Name}} 施舍 {{.D.Amount}} {{.D.Currency}} · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{T "给 %s 施舍" .Site.Name}} {{.D.Amount}} {{.D.Currency}} · {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div class="narrow">
|
||||
<section class="card px">
|
||||
{{if .Err}}<div class="notice bad" style="margin-bottom:12px">{{.Err}}</div>{{end}}
|
||||
{{if .Err}}<div class="notice bad" style="margin-bottom:12px">{{T .Err}}</div>{{end}}
|
||||
{{template "paypanel" .Panel}}
|
||||
<div class="hint center" style="margin-top:12px"><a href="{{.Site.Path}}">先回去看看</a></div>
|
||||
<div class="hint center" style="margin-top:12px"><a href="{{.Site.Path}}">{{T "先回去看看"}}</a></div>
|
||||
</section>
|
||||
</div>
|
||||
{{end}}
|
||||
+22
-22
@@ -1,48 +1,48 @@
|
||||
{{define "paypanel"}}<div class="paypanel" id="paypanel" data-code="{{.D.Code}}" data-status="{{.D.Status}}" data-mode="{{.Mode}}" data-site="{{.Site.Path}}" data-amount="{{.Amount}}">
|
||||
<div class="center">
|
||||
<div class="hint">给 {{.Site.Name}} 投币</div>
|
||||
<div class="hint">{{T "给 %s 投币" .Site.Name}}</div>
|
||||
<div class="big num accent">{{.Amount}}<small>{{.D.Currency}}</small></div>
|
||||
{{if eq .Mode "gateway"}}<div class="hint">金额要<b>一分不差</b>,网关靠这个唯一尾数自动认账,转完几秒内到账</div>{{else}}<div class="hint">用币安 Pay 直接转给站长,转完点下面「我已施舍」</div>{{end}}
|
||||
{{if eq .Mode "gateway"}}<div class="hint">{{T "金额要"}}<b>{{T "一分不差"}}</b>{{T ",网关靠这个唯一尾数自动认账,转完几秒内到账"}}</div>{{else}}<div class="hint">{{T "用币安 Pay 直接转给站长,转完点下面「我已施舍」"}}</div>{{end}}
|
||||
</div>
|
||||
{{if .QR}}
|
||||
{{if .IsMobile}}
|
||||
<a class="btn" href="{{.AppLink}}" style="margin-top:12px">打开币安 App 转账</a>
|
||||
<div class="hint center">唤起后手动输入金额 <b class="num">{{.Amount}}</b>{{if .NoteCode}},备注填 <b class="num">{{.NoteCode}}</b>{{end}}</div>
|
||||
<details style="margin-top:8px"><summary class="hint" style="cursor:pointer">用另一台手机扫码</summary><img class="qr" src="data:image/png;base64,{{.QR}}" alt="收款二维码"></details>
|
||||
<a class="btn" href="{{.AppLink}}" style="margin-top:12px">{{T "打开币安 App 转账"}}</a>
|
||||
<div class="hint center">{{T "唤起后手动输入金额"}} <b class="num">{{.Amount}}</b>{{if .NoteCode}}{{T ",备注填"}} <b class="num">{{.NoteCode}}</b>{{end}}</div>
|
||||
<details style="margin-top:8px"><summary class="hint" style="cursor:pointer">{{T "用另一台手机扫码"}}</summary><img class="qr" src="data:image/png;base64,{{.QR}}" alt="{{T "收款二维码"}}"></details>
|
||||
{{else}}
|
||||
<img class="qr" src="data:image/png;base64,{{.QR}}" alt="收款二维码">
|
||||
<div class="hint center">币安 App → 首页「扫一扫」→ 输入金额 <b class="num">{{.Amount}}</b>{{if .NoteCode}},备注填 <b class="num">{{.NoteCode}}</b>{{end}}</div>
|
||||
<img class="qr" src="data:image/png;base64,{{.QR}}" alt="{{T "收款二维码"}}">
|
||||
<div class="hint center">{{T "币安 App → 首页「扫一扫」→ 输入金额"}} <b class="num">{{.Amount}}</b>{{if .NoteCode}}{{T ",备注填"}} <b class="num">{{.NoteCode}}</b>{{end}}</div>
|
||||
{{end}}
|
||||
<div class="section-title">或手动转账</div>
|
||||
{{else}}<div class="section-title" style="margin-top:12px">转账信息</div>
|
||||
{{if .PayID}}<div class="hint">币安 App → 底部「<b>支付</b>」→「<b>转账</b>」→ 收款方输入下面的 UID → 金额填 <b class="num">{{.Amount}}</b>{{if .NoteCode}} → 备注填 <b class="num">{{.NoteCode}}</b>{{end}} → 转完回来点「我已施舍」</div>{{end}}{{end}}
|
||||
<div class="section-title">{{T "或手动转账"}}</div>
|
||||
{{else}}<div class="section-title" style="margin-top:12px">{{T "转账信息"}}</div>
|
||||
{{if .PayID}}<div class="hint">{{T "币安 App → 底部「支付」→「转账」→ 收款方输入下面的 UID → 金额填"}} <b class="num">{{.Amount}}</b>{{if .NoteCode}} {{T "→ 备注填"}} <b class="num">{{.NoteCode}}</b>{{end}} {{T "→ 转完回来点「我已施舍」"}}</div>{{end}}{{end}}
|
||||
<div class="kv">
|
||||
{{if .PayID}}<span class="k">收款方</span><span class="v"><span class="code">{{.PayID}}</span><button type="button" class="copy" data-copy="{{.PayID}}">复制</button></span>{{end}}
|
||||
<span class="k">金额</span><span class="v"><span class="code">{{.Amount}} {{.D.Currency}}</span><button type="button" class="copy" data-copy="{{.Amount}}">复制</button></span>
|
||||
{{if .NoteCode}}<span class="k">备注</span><span class="v"><span class="code">{{.NoteCode}}</span><button type="button" class="copy" data-copy="{{.NoteCode}}">复制</button></span>{{end}}
|
||||
{{if .PayID}}<span class="k">{{T "收款方"}}</span><span class="v"><span class="code">{{.PayID}}</span><button type="button" class="copy" data-copy="{{.PayID}}">{{T "复制"}}</button></span>{{end}}
|
||||
<span class="k">{{T "金额"}}</span><span class="v"><span class="code">{{.Amount}} {{.D.Currency}}</span><button type="button" class="copy" data-copy="{{.Amount}}">{{T "复制"}}</button></span>
|
||||
{{if .NoteCode}}<span class="k">{{T "备注"}}</span><span class="v"><span class="code">{{.NoteCode}}</span><button type="button" class="copy" data-copy="{{.NoteCode}}">{{T "复制"}}</button></span>{{end}}
|
||||
</div>
|
||||
<div class="pp-status" id="ppStatus">
|
||||
{{if eq .D.Status "claimed"}}
|
||||
<div class="notice" style="margin-top:12px"><span class="spin-inline"></span> 已提交,等站长确认后上榜。本页会自动更新。</div>
|
||||
<div class="notice" style="margin-top:12px"><span class="spin-inline"></span> {{T "已提交,等站长确认后上榜。本页会自动更新。"}}</div>
|
||||
{{else if eq .Mode "gateway"}}
|
||||
<div class="notice" style="margin-top:12px"><span class="spin-inline"></span> 等待到账…转完自动确认,本页会自动更新</div>
|
||||
{{if .Owned}}<details style="margin-top:10px"><summary class="hint" style="cursor:pointer">付了但一直没确认?</summary>
|
||||
<div class="notice" style="margin-top:12px"><span class="spin-inline"></span> {{T "等待到账…转完自动确认,本页会自动更新"}}</div>
|
||||
{{if .Owned}}<details style="margin-top:10px"><summary class="hint" style="cursor:pointer">{{T "付了但一直没确认?"}}</summary>
|
||||
<form class="claimf" method="post" action="/d/{{.D.Code}}/claim">
|
||||
<label>币安订单编号(18 位数字,转账详情里有)</label>
|
||||
<label>{{T "币安订单编号(18 位数字,转账详情里有)"}}</label>
|
||||
<input name="binance_order_id" inputmode="numeric" maxlength="18" placeholder="4520……" required>
|
||||
<button class="btn sec" type="submit" style="margin-top:10px">我付过了,帮我核对</button>
|
||||
<button class="btn sec" type="submit" style="margin-top:10px">{{T "我付过了,帮我核对"}}</button>
|
||||
<div class="err claim-err"></div>
|
||||
</form></details>{{end}}
|
||||
{{else if .Owned}}
|
||||
<form class="claimf" method="post" action="/pay/{{.D.Code}}/claim" style="margin-top:12px">
|
||||
<label>币安订单编号(可选,18 位数字,填了站长确认更快)</label>
|
||||
<label>{{T "币安订单编号(可选,18 位数字,填了站长确认更快)"}}</label>
|
||||
<input name="binance_order_id" inputmode="numeric" maxlength="18" placeholder="4520……">
|
||||
<button class="btn" type="submit" style="margin-top:10px">我已施舍,等站长确认</button>
|
||||
<button class="btn" type="submit" style="margin-top:10px">{{T "我已施舍,等站长确认"}}</button>
|
||||
<div class="err claim-err"></div>
|
||||
</form>
|
||||
{{else}}
|
||||
<div class="hint" style="margin-top:12px">「我已施舍」要在发起施舍的那台设备上点。</div>
|
||||
<div class="hint" style="margin-top:12px">{{T "「我已施舍」要在发起施舍的那台设备上点。"}}</div>
|
||||
{{end}}
|
||||
</div>
|
||||
{{if .Fallback}}<div class="hint center" style="margin-top:12px">打不开?<a href="{{.Fallback}}" target="_blank" rel="noopener">用网关收银页支付</a></div>{{end}}
|
||||
{{if .Fallback}}<div class="hint center" style="margin-top:12px">{{T "打不开?"}}<a href="{{.Fallback}}" target="_blank" rel="noopener">{{T "用网关收银页支付"}}</a></div>{{end}}
|
||||
</div>{{end}}
|
||||
+14
-14
@@ -1,48 +1,48 @@
|
||||
{{define "title"}}排行榜 · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{T "排行榜 ·"}} {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div style="max-width:760px;margin:0 auto">
|
||||
<section class="card px">
|
||||
<div class="tabs" role="tablist">
|
||||
<button class="tab on" type="button" role="tab" id="t-donors" aria-controls="p-donors" aria-selected="true" data-t="donors">🏆 施主榜</button>
|
||||
<button class="tab" type="button" role="tab" id="t-beggars" aria-controls="p-beggars" aria-selected="false" data-t="beggars">🥣 乞丐榜</button>
|
||||
<button class="tab" type="button" role="tab" id="t-popular" aria-controls="p-popular" aria-selected="false" data-t="popular">🪙 人气榜</button>
|
||||
<button class="tab on" type="button" role="tab" id="t-donors" aria-controls="p-donors" aria-selected="true" data-t="donors">{{T "🏆 施主榜"}}</button>
|
||||
<button class="tab" type="button" role="tab" id="t-beggars" aria-controls="p-beggars" aria-selected="false" data-t="beggars">{{T "🥣 乞丐榜"}}</button>
|
||||
<button class="tab" type="button" role="tab" id="t-popular" aria-controls="p-popular" aria-selected="false" data-t="popular">{{T "🪙 人气榜"}}</button>
|
||||
</div>
|
||||
<div class="panel on" id="p-donors" role="tabpanel" aria-labelledby="t-donors">
|
||||
<div class="hint" style="margin-bottom:8px">HIGH SCORE · 所有要饭站加起来 · 共 {{.PgDonors.Total}} 位施主</div>
|
||||
<div class="toggle" data-for="donors"><button type="button" class="on" data-w="all">总榜</button><button type="button" data-w="week">本周</button></div>
|
||||
<div class="hint" style="margin-bottom:8px">{{T "HIGH SCORE · 所有要饭站加起来 · 共"}} {{.PgDonors.Total}} {{T "位施主"}}</div>
|
||||
<div class="toggle" data-for="donors"><button type="button" class="on" data-w="all">{{T "总榜"}}</button><button type="button" data-w="week">{{T "本周"}}</button></div>
|
||||
<div class="wk donors-all">{{template "gdonorlist" (dict "Rows" .Donors "Start" .PgDonors.Offset)}}{{template "pager" .PgDonors}}</div>
|
||||
<div class="wk donors-week" hidden>{{template "gdonorlist" (dict "Rows" .DonorsWeek "Start" .PgDonorsWeek.Offset)}}{{template "pager" .PgDonorsWeek}}</div>
|
||||
</div>
|
||||
<div class="panel" id="p-beggars" role="tabpanel" aria-labelledby="t-beggars">
|
||||
<div class="hint" style="margin-bottom:8px">要到最多的要饭站 · 共 {{.PgSites.Total}} 个</div>
|
||||
<div class="toggle" data-for="beggars"><button type="button" class="on" data-w="all">总榜</button><button type="button" data-w="week">本周</button></div>
|
||||
<div class="hint" style="margin-bottom:8px">{{T "要到最多的要饭站 · 共"}} {{.PgSites.Total}} {{T "个"}}</div>
|
||||
<div class="toggle" data-for="beggars"><button type="button" class="on" data-w="all">{{T "总榜"}}</button><button type="button" data-w="week">{{T "本周"}}</button></div>
|
||||
<div class="wk beggars-all">{{template "gsitelist" (dict "Rows" .Sites "By" "amount" "Me" .MeID "Start" .PgSites.Offset)}}{{template "pager" .PgSites}}</div>
|
||||
<div class="wk beggars-week" hidden>{{template "gsitelist" (dict "Rows" .SitesWeek "By" "amount" "Me" .MeID "Start" .PgSitesWeek.Offset)}}{{template "pager" .PgSitesWeek}}</div>
|
||||
</div>
|
||||
<div class="panel" id="p-popular" role="tabpanel" aria-labelledby="t-popular">
|
||||
<div class="hint" style="margin-bottom:8px">收到钢镚最多(免费投)· 共 {{.PgPopular.Total}} 个</div>
|
||||
<div class="hint" style="margin-bottom:8px">{{T "收到钢镚最多(免费投)· 共"}} {{.PgPopular.Total}} {{T "个"}}</div>
|
||||
{{template "gsitelist" (dict "Rows" .Popular "By" "coins" "Me" .MeID "Start" .PgPopular.Offset)}}{{template "pager" .PgPopular}}
|
||||
</div>
|
||||
</section>
|
||||
{{if ne .HomePath "/"}}<div class="center" style="margin-top:14px"><a class="btn sec" href="{{.HomePath}}">← 回到刚才看的碗</a></div>{{end}}
|
||||
{{if ne .HomePath "/"}}<div class="center" style="margin-top:14px"><a class="btn sec" href="{{.HomePath}}">{{T "← 回到刚才看的碗"}}</a></div>{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
{{define "gdonorlist"}}{{if .Rows}}<ul class="list">
|
||||
{{range $i, $r := .Rows}}{{$n := add $i $.Start}}<li class="item">
|
||||
<div class="rank{{if lt $n 3}} m{{end}}">{{rankBadge $n}}</div>
|
||||
{{$h := handleOf $r.NickKey}}{{$f := xav $h}}{{if $f}}<img class="av img" src="/a/{{$f}}" alt="">{{else}}<div class="av" style="--h:{{hue $r.NickKey}}">{{initial $r.Nickname}}</div>{{end}}
|
||||
<div class="body"><div class="name"><span>{{$r.Nickname}}</span>{{if $h}}<span class="xh" title="施主自己填的 X,未经验证">@{{$h}}</span>{{end}}</div><div class="sub">{{donorTier $r.TotalE8}} · {{$r.Count}} 次 · 施舍过 {{$r.Sites}} 个乞丐</div></div>
|
||||
<div class="body"><div class="name"><span>{{$r.Nickname}}</span>{{if $h}}<span class="xh" title="{{T "施主自己填的 X,未经验证"}}">@{{$h}}</span>{{end}}</div><div class="sub">{{donorTier $r.TotalE8}} · {{$r.Count}} {{T "次 · 施舍过"}} {{$r.Sites}} {{T "个乞丐"}}</div></div>
|
||||
<div class="amtv num accent">{{fmtAmt $r.TotalE8}}</div>
|
||||
</li>{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">👑</div>榜上无人</div>{{end}}{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">👑</div>{{T "榜上无人"}}</div>{{end}}{{end}}
|
||||
{{define "gsitelist"}}{{if .Rows}}<ul class="list">
|
||||
{{range $i, $s := .Rows}}{{$n := add $i $.Start}}<li class="item">
|
||||
<div class="rank{{if lt $n 3}} m{{end}}">{{rankBadge $n}}</div>
|
||||
{{if $s.AvatarURL}}<img class="av img" src="{{$s.AvatarURL}}" alt="">{{else}}<div class="av sq">{{$s.Avatar}}</div>{{end}}
|
||||
<div class="body"><div class="name"><span><a href="{{$s.Path}}">{{$s.Name}}</a></span>{{if eq $s.ID $.Me}}<span class="me">就是我</span>{{end}}</div><div class="sub">{{if $s.Title}}{{$s.Title}} · {{end}}{{(level $s.Exp).Title}} · {{$s.Donors}} 位施主 · 钢镚 {{$s.Coins}}</div></div>
|
||||
<div class="body"><div class="name"><span><a href="{{$s.Path}}">{{$s.Name}}</a></span>{{if eq $s.ID $.Me}}<span class="me">{{T "就是我"}}</span>{{end}}</div><div class="sub">{{if $s.Title}}{{T $s.Title}} · {{end}}{{(level $s.Exp).Title}} · {{$s.Donors}} {{T "位施主 · 钢镚"}} {{$s.Coins}}</div></div>
|
||||
<div class="amtv num{{if ne $.By "coins"}} accent{{end}}">{{if eq $.By "coins"}}🪙 {{$s.Coins}}{{else}}{{fmtAmt $s.TotalE8}}{{end}}</div>
|
||||
</li>{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">🏚</div>还没有人上榜</div>{{end}}{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">🏚</div>{{T "还没有人上榜"}}</div>{{end}}{{end}}
|
||||
{{define "scripts"}}<script>
|
||||
(function(){
|
||||
var tabs=document.querySelectorAll('.tab'),panels=document.querySelectorAll('.panel');
|
||||
|
||||
+51
-51
@@ -1,66 +1,66 @@
|
||||
{{define "title"}}{{.Site.Name}} 在要饭 · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{.Site.Name}} {{T "在要饭 ·"}} {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
{{$lv := level .Exp}}
|
||||
<div class="layout">
|
||||
<aside class="col-l">
|
||||
{{if not .Site.Listed}}<div class="notice">🕵️ 这个站还没被丐帮收录,暂不进榜。{{if and .Me (eq .Me.ID .Site.ID)}}主站站长审核后会收录。{{end}}</div>{{end}}
|
||||
{{if not .Site.Listed}}<div class="notice">{{T "🕵️ 这个站还没被丐帮收录,暂不进榜。"}}{{if and .Me (eq .Me.ID .Site.ID)}}{{T "主站站长审核后会收录。"}}{{end}}</div>{{end}}
|
||||
<section class="card px" id="topcard">
|
||||
<div class="char-top">
|
||||
<div class="sprite-wrap">{{template "sprite"}}</div>
|
||||
<div class="char-info">
|
||||
<div class="lvrow"><span class="lv">Lv.{{$lv.Lv}}<b>{{$lv.Title}}</b></span>{{if .SectTitle}}<span class="lv gold">{{.SectTitle}}{{if .Position}} · 榜 #{{.Position}}{{end}}</span>{{end}}</div>
|
||||
<div class="lvrow"><span class="lv">Lv.{{$lv.Lv}}<b>{{$lv.Title}}</b></span>{{if .SectTitle}}<span class="lv gold">{{T .SectTitle}}{{if .Position}} {{T "· 榜 #"}}{{.Position}}{{end}}</span>{{end}}</div>
|
||||
<h1 class="pname">{{if .Site.AvatarURL}}<img class="xavatar" src="{{.Site.AvatarURL}}" alt="">{{else}}{{.Site.Avatar}} {{end}}{{.Site.Name}}</h1>
|
||||
<div class="barlabel">EXP <b>{{.Exp}}</b>{{if $lv.Next}}<span>升{{$lv.NextT}}要 {{$lv.Next}}</span>{{else}}<span>满级</span>{{end}}</div>
|
||||
<div class="barlabel">EXP <b>{{.Exp}}</b>{{if $lv.Next}}<span>{{T "升%s要 %s" (T $lv.NextT) $lv.Next}}</span>{{else}}<span>{{T "满级"}}</span>{{end}}</div>
|
||||
<div class="bar xp"><span style="width:{{$lv.Pct}}%"></span></div>
|
||||
<div class="barlabel">饱食度 <b>{{satiety .Stats.TodayE8}}%</b><span>{{if eq (satiety .Stats.TodayE8) 0}}今天还没吃饭{{else}}今天有人投币了{{end}}</span></div>
|
||||
<div class="barlabel">{{T "饱食度"}} <b>{{satiety .Stats.TodayE8}}%</b><span>{{if eq (satiety .Stats.TodayE8) 0}}{{T "今天还没吃饭"}}{{else}}{{T "今天有人投币了"}}{{end}}</span></div>
|
||||
<div class="bar hp"><span style="width:{{satiety .Stats.TodayE8}}%"></span></div>
|
||||
{{if .Site.XLabel}}<a class="xpill" href="https://x.com/{{.Site.XLabel}}" target="_blank" rel="noopener">𝕏 @{{.Site.XLabel}}</a>{{end}}
|
||||
</div>
|
||||
</div>
|
||||
{{if .Site.Slogan}}<div class="dialog"><span class="typer" data-text="{{.Site.Slogan}}">{{.Site.Slogan}}</span><span class="cursor">▼</span></div>{{end}}
|
||||
<div class="coinrow">
|
||||
<button type="button" class="btn sec sm coinbtn" id="coinbtn" data-site="{{.Site.Slug}}" {{if ge .MyCoins .CoinsPerDay}}disabled{{end}}>{{template "coin"}}<span id="coinTxt">{{if ge .MyCoins .CoinsPerDay}}今天丢过了{{else}}丢个钢镚(免费){{end}}</span></button>
|
||||
{{if .Ready}}<a class="btn sm" id="donateBtn" href="#donate">💸 投币施舍</a>{{else}}<span class="hint" style="margin:0">还没摆碗,暂不能投币{{if and .Me (eq .Me.ID .Site.ID)}},<a href="/manage#payment">去配置</a>{{end}}</span>{{end}}
|
||||
<button type="button" class="btn sec sm coinbtn" id="coinbtn" data-site="{{.Site.Slug}}" {{if ge .MyCoins .CoinsPerDay}}disabled{{end}}>{{template "coin"}}<span id="coinTxt">{{if ge .MyCoins .CoinsPerDay}}{{T "今天丢过了"}}{{else}}{{T "丢个钢镚(免费)"}}{{end}}</span></button>
|
||||
{{if .Ready}}<a class="btn sm" id="donateBtn" href="#donate">{{T "💸 投币施舍"}}</a>{{else}}<span class="hint" style="margin:0">{{T "还没摆碗,暂不能投币"}}{{if and .Me (eq .Me.ID .Site.ID)}},<a href="/manage#payment">{{T "去配置"}}</a>{{end}}</span>{{end}}
|
||||
</div>
|
||||
<div class="coins hint" style="margin-top:8px">钢镚 <b class="pf coinN">{{.Coins}}</b> · 今日 <b id="coinT" class="pf">{{.CoinsToday}}</b> · 每 0.1 U = {{.MoneyExp | div10}} EXP · 每个钢镚 = {{.CoinExp}} EXP</div>
|
||||
<div class="coins hint" style="margin-top:8px">{{T "钢镚"}} <b class="pf coinN">{{.Coins}}</b> {{T "· 今日"}} <b id="coinT" class="pf">{{.CoinsToday}}</b> {{T "· 每 0.1 U ="}} {{.MoneyExp | div10}} {{T "EXP · 每个钢镚 ="}} {{.CoinExp}} EXP</div>
|
||||
</section>
|
||||
|
||||
<section class="stats">
|
||||
<div class="stat main px">{{template "bowlicon"}}<div style="min-width:0;flex:1"><div class="k">碗里已有</div><div class="v num bowlv"><span>{{fmtAmt .Stats.TotalE8}}<small>{{.Site.Currency}}</small></span><span class="bowlcoins">{{template "coin"}}<b class="coinN">{{.Coins}}</b><small>钢镚</small></span></div></div>
|
||||
<div class="sub2"><span><i>施主</i><b class="num">{{.Stats.Donors}}</b><small>人</small></span><span><i>今日</i><b class="num">+{{fmtAmt .Stats.TodayE8}}</b></span></div></div>
|
||||
<div class="stat main px">{{template "bowlicon"}}<div style="min-width:0;flex:1"><div class="k">{{T "碗里已有"}}</div><div class="v num bowlv"><span>{{fmtAmt .Stats.TotalE8}}<small>{{.Site.Currency}}</small></span><span class="bowlcoins">{{template "coin"}}<b class="coinN">{{.Coins}}</b><small>{{T "钢镚"}}</small></span></div></div>
|
||||
<div class="sub2"><span><i>{{T "施主"}}</i><b class="num">{{.Stats.Donors}}</b><small>{{T "人"}}</small></span><span><i>{{T "今日"}}</i><b class="num">+{{fmtAmt .Stats.TodayE8}}</b></span></div></div>
|
||||
</section>
|
||||
|
||||
<section class="card px donate-card" id="donate">
|
||||
<h2>🕹️ 投币施舍</h2>
|
||||
<h2>{{T "🕹️ 投币施舍"}}</h2>
|
||||
{{if .Ready}}
|
||||
<div class="insert blink">▶ INSERT COIN ◀</div>
|
||||
<form method="post" action="/donate" id="f">
|
||||
<input type="hidden" name="site" value="{{.Site.Slug}}">
|
||||
<div class="grid2">
|
||||
<div><label for="nick">玩家名(上榜用,可留空)</label><input id="nick" name="nickname" maxlength="20" placeholder="匿名施主" value="{{.Nick}}" autocomplete="nickname"></div>
|
||||
<div><label for="xh">你的 X(可选,显示头像)</label><input id="xh" name="x_handle" maxlength="16" placeholder="@name" value="{{.XHandle}}" autocapitalize="off"></div>
|
||||
<div><label for="nick">{{T "玩家名(上榜用,可留空)"}}</label><input id="nick" name="nickname" maxlength="20" placeholder="{{T "匿名施主"}}" value="{{.Nick}}" autocomplete="nickname"></div>
|
||||
<div><label for="xh">{{T "你的 X(可选,显示头像)"}}</label><input id="xh" name="x_handle" maxlength="16" placeholder="@name" value="{{.XHandle}}" autocapitalize="off"></div>
|
||||
</div>
|
||||
<label>投多少 {{.Site.Currency}}</label>
|
||||
<label>{{T "投多少"}} {{.Site.Currency}}</label>
|
||||
<div class="amounts" id="amounts">
|
||||
{{range .Presets}}<button type="button" class="amt-btn" data-v="{{.}}">{{template "coin"}}{{.}}</button>{{end}}
|
||||
<button type="button" class="amt-btn" data-v="">✏️ 自定义</button>
|
||||
<button type="button" class="amt-btn" data-v="">{{T "✏️ 自定义"}}</button>
|
||||
</div>
|
||||
<input name="amount" id="amount" inputmode="decimal" autocomplete="off" placeholder="输入金额,最多两位小数" value="{{.Amount}}" required style="margin-top:10px">
|
||||
<label for="msg">对乞丐喊话 <span class="count" id="cnt">0/80</span></label>
|
||||
<textarea id="msg" name="message" maxlength="80" rows="2" placeholder="例如:别买烟了,去吃饭">{{.Message}}</textarea>
|
||||
{{if .Err}}<div class="err">{{.Err}}</div>{{end}}
|
||||
<button class="btn" type="submit" id="cta" style="margin-top:16px">投币 💸</button>
|
||||
<div class="hint" style="margin-top:10px">{{if eq .Site.PayMode "gateway"}}币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。{{else}}通过币安 Pay 直接转给站长,提交后由站长确认上榜。{{end}}最少 {{.MinAmount}},最多 {{.MaxAmount}}。留言里不能放链接和联系方式。</div>
|
||||
<input name="amount" id="amount" inputmode="decimal" autocomplete="off" placeholder="{{T "输入金额,最多两位小数"}}" value="{{.Amount}}" required style="margin-top:10px">
|
||||
<label for="msg">{{T "对乞丐喊话"}} <span class="count" id="cnt">0/80</span></label>
|
||||
<textarea id="msg" name="message" maxlength="80" rows="2" placeholder="{{T "例如:别买烟了,去吃饭"}}">{{.Message}}</textarea>
|
||||
{{if .Err}}<div class="err">{{T .Err}}</div>{{end}}
|
||||
<button class="btn" type="submit" id="cta" style="margin-top:16px">{{T "投币 💸"}}</button>
|
||||
<div class="hint" style="margin-top:10px">{{if eq .Site.PayMode "gateway"}}{{T "币安 App 扫码 / 一键唤起支付,到账后自动刻上功德簿。"}}{{else}}{{T "通过币安 Pay 直接转给站长,提交后由站长确认上榜。"}}{{end}}{{T "最少 %s,最多 %s。留言里不能放链接和联系方式。" .MinAmount .MaxAmount}}</div>
|
||||
</form>
|
||||
{{else}}
|
||||
<div class="notice">这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。{{if and .Me (eq .Me.ID .Site.ID)}}<a href="/manage#payment">去后台配置 →</a>{{end}}</div>
|
||||
<div class="notice">{{T "这位乞丐还没摆碗(未配置收款方式),暂时收不了钱。"}}{{if and .Me (eq .Me.ID .Site.ID)}}<a href="/manage#payment">{{T "去后台配置 →"}}</a>{{end}}</div>
|
||||
{{end}}
|
||||
</section>
|
||||
{{if and .SubsitesEnabled (not .Me)}}<div class="only-desktop">
|
||||
<section class="card px cta">
|
||||
<h2 style="justify-content:center">🏚 想自己要饭?</h2>
|
||||
<p>用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。</p>
|
||||
<a class="btn sec" href="/new">用 X 开通我的要饭站 →</a>
|
||||
<h2 style="justify-content:center">{{T "🏚 想自己要饭?"}}</h2>
|
||||
<p>{{T "用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。"}}</p>
|
||||
<a class="btn sec" href="/new">{{T "用 X 开通我的要饭站 →"}}</a>
|
||||
</section>
|
||||
</div>{{end}}
|
||||
</aside>
|
||||
@@ -68,69 +68,69 @@
|
||||
<main class="col-r">
|
||||
<section class="card px">
|
||||
<div class="tabs four" role="tablist">
|
||||
<button class="tab on" type="button" role="tab" id="t-popular" aria-controls="p-popular" aria-selected="true" data-t="popular">人气榜</button>
|
||||
<button class="tab" type="button" role="tab" id="t-feed" aria-controls="p-feed" aria-selected="false" data-t="feed">功德簿</button>
|
||||
<button class="tab" type="button" role="tab" id="t-donors" aria-controls="p-donors" aria-selected="false" data-t="donors">施主榜</button>
|
||||
<button class="tab" type="button" role="tab" id="t-beggars" aria-controls="p-beggars" aria-selected="false" data-t="beggars">乞丐榜</button>
|
||||
<button class="tab on" type="button" role="tab" id="t-popular" aria-controls="p-popular" aria-selected="true" data-t="popular">{{T "人气榜"}}</button>
|
||||
<button class="tab" type="button" role="tab" id="t-feed" aria-controls="p-feed" aria-selected="false" data-t="feed">{{T "功德簿"}}</button>
|
||||
<button class="tab" type="button" role="tab" id="t-donors" aria-controls="p-donors" aria-selected="false" data-t="donors">{{T "施主榜"}}</button>
|
||||
<button class="tab" type="button" role="tab" id="t-beggars" aria-controls="p-beggars" aria-selected="false" data-t="beggars">{{T "乞丐榜"}}</button>
|
||||
</div>
|
||||
<div class="panel" id="p-feed" role="tabpanel" aria-labelledby="t-feed">
|
||||
{{if .Feed}}<ul class="list feed">
|
||||
{{range .Feed}}<li class="item">
|
||||
{{template "avatar" .}}
|
||||
<div class="body"><div class="name"><span>{{if .Blocked}}已屏蔽的施主{{else}}{{.Nickname}}{{end}}</span>{{if and .XHandle (not .Blocked)}}<span class="xh" title="施主自己填的 X,未经验证">@{{.XHandle}}</span>{{end}}</div><div class="sub">{{ago .PaidAt}} 投币</div></div>
|
||||
<div class="body"><div class="name"><span>{{if .Blocked}}{{T "已屏蔽的施主"}}{{else}}{{.Nickname}}{{end}}</span>{{if and .XHandle (not .Blocked)}}<span class="xh" title="{{T "施主自己填的 X,未经验证"}}">@{{.XHandle}}</span>{{end}}</div><div class="sub">{{ago .PaidAt}} {{T "投币"}}</div></div>
|
||||
<div class="amtv num accent">+{{fmtAmt .ActualE8}}</div>
|
||||
{{if .Blocked}}{{else if .MsgBlocked}}<div class="bubble blocked">***</div>{{else if .Message}}<div class="bubble">{{.Message}}</div>{{end}}
|
||||
{{if and .Reply (not .Blocked)}}<div class="bubble reply">🥣 站长:{{.Reply}}</div>{{end}}
|
||||
{{if and .Reply (not .Blocked)}}<div class="bubble reply">{{T "🥣 站长:"}}{{.Reply}}</div>{{end}}
|
||||
</li>{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">📜</div>功德簿空空如也,第一枚硬币会刻在这里</div>{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">📜</div>{{T "功德簿空空如也,第一枚硬币会刻在这里"}}</div>{{end}}
|
||||
</div>
|
||||
<div class="panel" id="p-donors" role="tabpanel" aria-labelledby="t-donors">
|
||||
<div class="toggle" data-for="donors"><button type="button" class="on" data-w="all">总榜</button><button type="button" data-w="week">本周</button></div>
|
||||
<div class="hint" style="margin:-4px 0 8px">HIGH SCORE · 给 {{.Site.Name}} 投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客</div>
|
||||
<div class="toggle" data-for="donors"><button type="button" class="on" data-w="all">{{T "总榜"}}</button><button type="button" data-w="week">{{T "本周"}}</button></div>
|
||||
<div class="hint" style="margin:-4px 0 8px">{{T "HIGH SCORE · 给"}} {{.Site.Name}} {{T "投币最多的人 · 🏁 首位施主 💎 单笔最大 🔥 常客"}}</div>
|
||||
<div class="wk donors-all">{{template "donorlist" (dict "Rows" .Rank "Badges" .Badges)}}</div>
|
||||
<div class="wk donors-week" hidden>{{template "donorlist" (dict "Rows" .RankWeek "Badges" .Badges)}}</div>
|
||||
</div>
|
||||
<div class="panel" id="p-beggars" role="tabpanel" aria-labelledby="t-beggars">
|
||||
<div class="toggle" data-for="beggars"><button type="button" class="on" data-w="all">总榜</button><button type="button" data-w="week">本周</button></div>
|
||||
<div class="hint" style="margin:-4px 0 8px">丐帮排名 · 要到最多的要饭站</div>
|
||||
<div class="toggle" data-for="beggars"><button type="button" class="on" data-w="all">{{T "总榜"}}</button><button type="button" data-w="week">{{T "本周"}}</button></div>
|
||||
<div class="hint" style="margin:-4px 0 8px">{{T "丐帮排名 · 要到最多的要饭站"}}</div>
|
||||
<div class="wk beggars-all">{{template "sitelist" (dict "Rows" .Subsites "Me" .MeID "Here" .Site.ID "By" "amount")}}</div>
|
||||
<div class="wk beggars-week" hidden>{{template "sitelist" (dict "Rows" .SubsitesWeek "Me" .MeID "Here" .Site.ID "By" "amount")}}</div>
|
||||
</div>
|
||||
<div class="panel on" id="p-popular" role="tabpanel" aria-labelledby="t-popular">
|
||||
<div class="hint" style="margin:-4px 0 8px">人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)</div>
|
||||
<div class="hint" style="margin:-4px 0 8px">{{T "人气榜 · 收到钢镚最多的要饭站(钢镚免费,不用花钱)"}}</div>
|
||||
{{template "sitelist" (dict "Rows" .Popular "Me" .MeID "Here" .Site.ID "By" "coins")}}
|
||||
</div>
|
||||
</section>
|
||||
{{if and .SubsitesEnabled (not .Me)}}<div class="only-mobile">
|
||||
<section class="card px cta">
|
||||
<h2 style="justify-content:center">🏚 想自己要饭?</h2>
|
||||
<p>用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。</p>
|
||||
<a class="btn sec" href="/new">用 X 开通我的要饭站 →</a>
|
||||
<h2 style="justify-content:center">{{T "🏚 想自己要饭?"}}</h2>
|
||||
<p>{{T "用 X 账号发一条推就能开自己的要饭站:独立地址、自己的碗、功德簿和施主榜,钱直接进你的币安账户。"}}</p>
|
||||
<a class="btn sec" href="/new">{{T "用 X 开通我的要饭站 →"}}</a>
|
||||
</section>
|
||||
</div>{{end}}
|
||||
</main>
|
||||
</div>
|
||||
{{if .Ready}}<div class="fab" id="fab"><a class="btn" href="#donate" id="fabBtn">💸 投币施舍</a></div>{{end}}
|
||||
{{if .Ready}}<div class="fab" id="fab"><a class="btn" href="#donate" id="fabBtn">{{T "💸 投币施舍"}}</a></div>{{end}}
|
||||
<div id="toast" class="toast" hidden></div>
|
||||
<div class="modal" id="modal" hidden role="dialog" aria-modal="true"><div class="modal-box"><button class="modal-x" type="button" id="modalX" aria-label="关闭">✕</button><div id="modalForm" hidden></div><div id="modalBody" hidden></div></div></div>
|
||||
<div class="modal" id="modal" hidden role="dialog" aria-modal="true"><div class="modal-box"><button class="modal-x" type="button" id="modalX" aria-label="{{T "关闭"}}">✕</button><div id="modalForm" hidden></div><div id="modalBody" hidden></div></div></div>
|
||||
{{end}}
|
||||
{{define "avatar"}}{{$f := xav .XHandle}}{{if and $f (not .Blocked)}}<img class="av img" src="/a/{{$f}}" alt="">{{else}}<div class="av" style="--h:{{hue .NickKey}}">{{if .Blocked}}✕{{else}}{{initial .Nickname}}{{end}}</div>{{end}}{{end}}
|
||||
{{define "donorlist"}}{{if .Rows}}<ul class="list">
|
||||
{{range $i, $r := .Rows}}<li class="item">
|
||||
<div class="rank{{if lt $i 3}} m{{end}}">{{rankBadge $i}}</div>
|
||||
{{$h := handleOf $r.NickKey}}{{$f := xav $h}}{{if $f}}<img class="av img" src="/a/{{$f}}" alt="">{{else}}<div class="av" style="--h:{{hue $r.NickKey}}">{{initial $r.Nickname}}</div>{{end}}
|
||||
<div class="body"><div class="name"><span>{{$r.Nickname}}</span>{{if $h}}<span class="xh" title="施主自己填的 X,未经验证">@{{$h}}</span>{{end}}{{with index $.Badges $r.NickKey}}<span class="badge">{{.}}</span>{{end}}</div><div class="sub">{{donorTier $r.TotalE8}} · {{$r.Count}} 次</div></div>
|
||||
<div class="body"><div class="name"><span>{{$r.Nickname}}</span>{{if $h}}<span class="xh" title="{{T "施主自己填的 X,未经验证"}}">@{{$h}}</span>{{end}}{{with index $.Badges $r.NickKey}}<span class="badge">{{.}}</span>{{end}}</div><div class="sub">{{donorTier $r.TotalE8}} · {{$r.Count}} {{T "次"}}</div></div>
|
||||
<div class="amtv num accent">{{fmtAmt $r.TotalE8}}</div>
|
||||
</li>{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">👑</div>榜上无人,第一个投币的就是首席施主</div>{{end}}{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">👑</div>{{T "榜上无人,第一个投币的就是首席施主"}}</div>{{end}}{{end}}
|
||||
{{define "sitelist"}}{{if .Rows}}<ul class="list">
|
||||
{{range $i, $s := .Rows}}<li class="item">
|
||||
<div class="rank{{if lt $i 3}} m{{end}}">{{rankBadge $i}}</div>
|
||||
{{if $s.AvatarURL}}<img class="av img" src="{{$s.AvatarURL}}" alt="">{{else}}<div class="av sq">{{$s.Avatar}}</div>{{end}}
|
||||
<div class="body"><div class="name"><span><a href="{{$s.Path}}">{{$s.Name}}</a></span>{{if eq $s.ID $.Me}}<span class="me">就是我</span>{{else if eq $s.ID $.Here}}<span class="me here">本站</span>{{end}}</div><div class="sub">{{if $s.Title}}{{$s.Title}} · {{end}}{{(level $s.Exp).Title}} · {{$s.Donors}} 位施主 · 钢镚 {{$s.Coins}}</div></div>
|
||||
<div class="body"><div class="name"><span><a href="{{$s.Path}}">{{$s.Name}}</a></span>{{if eq $s.ID $.Me}}<span class="me">{{T "就是我"}}</span>{{else if eq $s.ID $.Here}}<span class="me here">{{T "本站"}}</span>{{end}}</div><div class="sub">{{if $s.Title}}{{T $s.Title}} · {{end}}{{(level $s.Exp).Title}} · {{$s.Donors}} {{T "位施主 · 钢镚"}} {{$s.Coins}}</div></div>
|
||||
<div class="amtv num{{if ne $.By "coins"}} accent{{end}}">{{if eq $.By "coins"}}🪙 {{$s.Coins}}{{else}}{{fmtAmt $s.TotalE8}}{{end}}</div>
|
||||
</li>{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">🏚</div>还没有人上榜</div>{{end}}{{end}}
|
||||
</ul>{{else}}<div class="empty"><div class="ico">🏚</div>{{T "还没有人上榜"}}</div>{{end}}{{end}}
|
||||
{{define "scripts"}}<script>
|
||||
(function(){
|
||||
var tabs=document.querySelectorAll('.tab'),panels=document.querySelectorAll('.panel');
|
||||
@@ -150,16 +150,16 @@
|
||||
if(j.ok&&j.added){document.querySelectorAll('.coinN').forEach(function(el){el.textContent=j.total});document.getElementById('coinT').textContent=j.today;
|
||||
var c=document.createElement('div');c.className='flycoin';c.textContent='🪙';var r=cb.getBoundingClientRect();c.style.left=(r.left+r.width/2)+'px';c.style.top=r.top+'px';document.body.appendChild(c);setTimeout(function(){c.remove()},900);
|
||||
var sw=document.querySelector('.char-top .sprite-wrap');if(sw){sw.classList.add('jump');setTimeout(function(){sw.classList.remove('jump')},900)}
|
||||
if(window.sfx)sfx.coin();say('叮!钢镚 +1');if(j.mine>=j.per_day){document.getElementById('coinTxt').textContent='今天丢过了'}else{cb.disabled=false}}
|
||||
else{if(window.sfx)sfx.fail();say(j.msg||'没丢进去');if(j.mine>=j.per_day){document.getElementById('coinTxt').textContent='今天丢过了'}else{cb.disabled=false}}
|
||||
}).catch(function(){if(window.sfx)sfx.fail();say('网络开小差了');cb.disabled=false})})}
|
||||
if(window.sfx)sfx.coin();say({{T "叮!钢镚 +1"}});if(j.mine>=j.per_day){document.getElementById('coinTxt').textContent={{T "今天丢过了"}}}else{cb.disabled=false}}
|
||||
else{if(window.sfx)sfx.fail();say(j.msg||{{T "没丢进去"}});if(j.mine>=j.per_day){document.getElementById('coinTxt').textContent={{T "今天丢过了"}}}else{cb.disabled=false}}
|
||||
}).catch(function(){if(window.sfx)sfx.fail();say({{T "网络开小差了"}});cb.disabled=false})})}
|
||||
|
||||
var f=document.getElementById('f');if(!f)return;
|
||||
var btns=f.querySelectorAll('.amt-btn'),amt=document.getElementById('amount'),cta=document.getElementById('cta'),msg=document.getElementById('msg'),cnt=document.getElementById('cnt');
|
||||
var cur={{.Site.Currency}};
|
||||
function sel(b){btns.forEach(function(x){x.classList.remove('on')});if(b)b.classList.add('on')}
|
||||
function custom(){return f.querySelector('.amt-btn[data-v=""]')}
|
||||
function label(){cta.textContent=amt.value?'投币 '+amt.value+' '+cur+' 💸':'投币 💸'}
|
||||
function label(){cta.textContent=amt.value?{{T "投币"}}+' '+amt.value+' '+cur+' 💸':{{T "投币 💸"}}}
|
||||
function sync(){var hit=null;btns.forEach(function(b){if(b.dataset.v&&b.dataset.v===amt.value)hit=b});sel(hit||(amt.value?custom():null));amt.style.display=(hit&&hit.dataset.v)?'none':'';label()}
|
||||
btns.forEach(function(b){b.addEventListener('click',function(){if(b.dataset.v){amt.value=b.dataset.v;sync()}else{amt.value='';sel(b);amt.style.display='';amt.focus();label()}})});
|
||||
amt.addEventListener('input',function(){var hit=null;btns.forEach(function(b){if(b.dataset.v&&b.dataset.v===amt.value)hit=b});sel(hit||custom());label()});
|
||||
@@ -180,7 +180,7 @@
|
||||
fetch('/donate',{method:'POST',body:fd}).then(function(r){return r.text().then(function(t){return {ok:r.ok,text:t}})}).then(function(res){cta.disabled=false;cta.textContent=old;
|
||||
if(!res.ok){errEl.textContent=res.text;return}
|
||||
mbody.innerHTML=res.text;mform.hidden=true;mbody.hidden=false;modal.hidden=false;modal.querySelector('.modal-box').scrollTop=0;var pp=mbody.querySelector('.paypanel');if(pp){stopPanel=window.initPayPanel(pp,function(){paidDone=true})}
|
||||
}).catch(function(){cta.disabled=false;cta.textContent=old;errEl.textContent='网络开小差了,再试一次'})});
|
||||
}).catch(function(){cta.disabled=false;cta.textContent=old;errEl.textContent={{T "网络开小差了,再试一次"}}})});
|
||||
|
||||
var fab=document.getElementById('fab'),top=document.getElementById('topcard');
|
||||
if(fab&&top&&'IntersectionObserver' in window){new IntersectionObserver(function(es){fab.classList.toggle('show',!es[0].isIntersecting&&es[0].boundingClientRect.top<0)},{threshold:0}).observe(top)}
|
||||
|
||||
+19
-19
@@ -1,50 +1,50 @@
|
||||
{{define "title"}}{{if eq .D.Status "paid"}}功德 +{{fmtAmt .D.ActualE8}}{{else}}施舍进行中{{end}} · {{.SiteTitle}}{{end}}
|
||||
{{define "title"}}{{if eq .D.Status "paid"}}{{T "功德 +"}}{{fmtAmt .D.ActualE8}}{{else}}{{T "施舍进行中"}}{{end}} · {{T .SiteTitle}}{{end}}
|
||||
{{define "content"}}
|
||||
<div class="narrow">
|
||||
{{if eq .D.Status "paid"}}
|
||||
<section class="card px center">
|
||||
<div class="sprite-wrap jump" style="margin:0 auto 10px">{{template "sprite"}}</div>
|
||||
<div class="insert">★ THANK YOU ★</div>
|
||||
<h1>🙏 谢谢施主 {{.D.Nickname}}</h1>
|
||||
<h1>{{T "🙏 谢谢施主"}} {{.D.Nickname}}</h1>
|
||||
<div class="big num accent">+{{fmtAmt .D.ActualE8}}<small>{{.D.Currency}}</small></div>
|
||||
{{if .D.MsgBlocked}}{{else if .D.Message}}<div class="bubble" style="margin:14px 0 0;text-align:left">{{.D.Message}}</div>{{end}}
|
||||
{{if and (gt .Position 0) (not .D.Blocked)}}<div class="notice ok" style="margin-top:14px">你在 {{.Site.Name}} 的施主榜排第 <b>{{.Position}}</b> 位 · {{donorTier .DonorTotal}}</div>{{end}}
|
||||
{{if and (gt .Position 0) (not .D.Blocked)}}<div class="notice ok" style="margin-top:14px">{{T "你在 %s 的施主榜排第 %d 位" .Site.Name .Position}} · {{T (donorTier .DonorTotal)}}</div>{{end}}
|
||||
<div class="btns">
|
||||
<a class="btn sec" href="{{.Site.Path}}#donors">回到 {{.Site.Name}} 的碗</a>
|
||||
<button class="btn ghost copy" type="button" data-copy="{{.ShareURL}}">复制链接分享</button>
|
||||
<a class="btn sec" href="{{.Site.Path}}#donors">{{T "回到 %s 的碗" .Site.Name}}</a>
|
||||
<button class="btn ghost copy" type="button" data-copy="{{.ShareURL}}">{{T "复制链接分享"}}</button>
|
||||
</div>
|
||||
</section>
|
||||
<section class="card px" style="margin-top:16px">
|
||||
<h2>🖼 分享卡片</h2>
|
||||
<p class="hint" style="margin:0 0 10px">生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。</p>
|
||||
<button class="btn sec" type="button" id="shareBtn">生成分享卡</button>
|
||||
<div class="sharebox" id="sharebox" hidden><img id="shareImg" alt="分享卡"><div class="hint">长按图片保存,或 <a id="shareDl" download="beggar-card.png">下载</a></div></div>
|
||||
<h2>{{T "🖼 分享卡片"}}</h2>
|
||||
<p class="hint" style="margin:0 0 10px">{{T "生成一张像素分享图,发到 X 或朋友圈,顺便帮乞丐吆喝。"}}</p>
|
||||
<button class="btn sec" type="button" id="shareBtn">{{T "生成分享卡"}}</button>
|
||||
<div class="sharebox" id="sharebox" hidden><img id="shareImg" alt="{{T "分享卡"}}"><div class="hint">{{T "长按图片保存,或"}} <a id="shareDl" download="beggar-card.png">{{T "下载"}}</a></div></div>
|
||||
</section>
|
||||
{{if .SubsitesEnabled}}
|
||||
<section class="card px center" style="margin-top:16px">
|
||||
<h2 style="justify-content:center">🏚 你也可以要饭</h2>
|
||||
<p class="hint" style="font-size:14px">用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。</p>
|
||||
<a class="btn" href="/new">用 X 开通我的要饭站 →</a>
|
||||
<h2 style="justify-content:center">{{T "🏚 你也可以要饭"}}</h2>
|
||||
<p class="hint" style="font-size:14px">{{T "用 X 账号发一条推就能开自己的要饭站,别人给你的钱直接进你的币安账户。"}}</p>
|
||||
<a class="btn" href="/new">{{T "用 X 开通我的要饭站 →"}}</a>
|
||||
</section>
|
||||
{{end}}
|
||||
{{else if or (eq .D.Status "claimed") (and (eq .D.Status "pending") (not .Stale))}}
|
||||
<section class="card px">
|
||||
{{template "paypanel" .Panel}}
|
||||
<div class="hint center" style="margin-top:12px"><a href="{{.Site.Path}}">回到 {{.Site.Name}} 的碗</a></div>
|
||||
<div class="hint center" style="margin-top:12px"><a href="{{.Site.Path}}">{{T "回到 %s 的碗" .Site.Name}}</a></div>
|
||||
</section>
|
||||
{{else}}
|
||||
<section class="card px center">
|
||||
<div class="sprite-wrap" style="margin:0 auto 10px">{{template "sprite"}}</div>
|
||||
<h1>{{if eq .D.Status "rejected"}}站长没有确认这笔施舍{{else if eq .D.Status "failed"}}下单失败{{else}}这笔施舍已过期{{end}}</h1>
|
||||
<p class="hint" style="font-size:14px">{{if eq .D.Status "rejected"}}如果你确实转了,请联系站长核对。{{else}}没付款不扣钱;想施舍请重新来一次。{{end}}</p>
|
||||
<a class="btn" href="{{.Site.Path}}#donate">再来一次</a>
|
||||
<h1>{{if eq .D.Status "rejected"}}{{T "站长没有确认这笔施舍"}}{{else if eq .D.Status "failed"}}{{T "下单失败"}}{{else}}{{T "这笔施舍已过期"}}{{end}}</h1>
|
||||
<p class="hint" style="font-size:14px">{{if eq .D.Status "rejected"}}{{T "如果你确实转了,请联系站长核对。"}}{{else}}{{T "没付款不扣钱;想施舍请重新来一次。"}}{{end}}</p>
|
||||
<a class="btn" href="{{.Site.Path}}#donate">{{T "再来一次"}}</a>
|
||||
</section>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
{{define "scripts"}}<script>
|
||||
(function(){var b=document.getElementById('shareBtn');if(!b)return;b.addEventListener('click',function(){b.disabled=true;b.textContent='生成中…';
|
||||
var data={site:{{.Site.Name}},nick:{{.D.Nickname}},amt:'+'+{{fmtAmt .D.ActualE8}}+' '+{{.D.Currency}},msg:{{if .D.MsgBlocked}}''{{else}}{{.D.Message}}{{end}},pos:{{.Position}},url:{{.ShareURL}},title:{{.SiteTitle}}};
|
||||
var data={site:{{.Site.Name}},nick:{{.D.Nickname}},amt:'+'+{{fmtAmt .D.ActualE8}}+' '+{{.D.Currency}},msg:{{if .D.MsgBlocked}}''{{else}}{{.D.Message}}{{end}},pos:{{.Position}},url:{{.ShareURL}},title:{{T .SiteTitle}}};
|
||||
var svg=document.querySelector('.sprite');var xml=new XMLSerializer().serializeToString(svg);var img=new Image();img.onload=function(){draw(img)};img.onerror=function(){draw(null)};img.src='data:image/svg+xml;charset=utf-8,'+encodeURIComponent(xml);
|
||||
function px(c,x,y,w,h,fill){c.fillStyle=fill;c.fillRect(x,y,w,h)}
|
||||
function frame(c,x,y,w,h){px(c,x,y,w,h,'#1e1e2e');px(c,x+4,y+4,w-8,h-8,'#fffbf0')}
|
||||
@@ -62,9 +62,9 @@
|
||||
if(data.pos>0){c.fillText(fit(c,'施主榜第 '+data.pos+' 位',360,18,'-apple-system, PingFang SC, sans-serif'),232,270)}
|
||||
if(data.msg){px(c,64,352,W-128,150,'#1e1e2e');px(c,68,356,W-136,142,'#ffffff');c.font='22px -apple-system, PingFang SC, sans-serif';c.fillStyle='#1e1e2e';wrap(c,'「'+data.msg+'」',88,378,W-176,36)}
|
||||
c.font='20px Pixel, sans-serif';c.fillStyle='#1e1e2e';c.fillText('★ THANK YOU ★',64,540);
|
||||
c.font='18px -apple-system, PingFang SC, sans-serif';c.fillStyle='#4a4954';c.fillText('行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。',64,586);
|
||||
c.font='18px -apple-system, PingFang SC, sans-serif';c.fillStyle='#4a4954';c.fillText({{T "行行好,赏口饭吃。用币安 Pay 投币施舍,留一句话上功德簿。"}},64,586);
|
||||
px(c,64,640,W-128,60,'#1e1e2e');px(c,68,644,W-136,52,'#ffcc00');c.fillStyle='#1e1e2e';c.textBaseline='middle';c.fillText(fit(c,data.url.replace(/^https?:\/\//,''),W-176,22,'Pixel, sans-serif'),84,670);
|
||||
c.textBaseline='top';c.font='16px Pixel, sans-serif';c.fillStyle='#4a4954';c.fillText('#赛博丐帮',64,740);
|
||||
c.textBaseline='top';c.font='16px Pixel, sans-serif';c.fillStyle='#4a4954';c.fillText({{T "#赛博丐帮"}},64,740);
|
||||
var u=cv.toDataURL('image/png');document.getElementById('shareImg').src=u;document.getElementById('shareDl').href=u;document.getElementById('sharebox').hidden=false;b.textContent='重新生成';b.disabled=false;
|
||||
})}
|
||||
})})();
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
"""把模板里的中文包成 {{T "…"}},并打印 key 清单。
|
||||
用法:python3 tools/i18n_wrap.py --dry templates/site.html (只列 key)
|
||||
python3 tools/i18n_wrap.py templates/*.html (原地改写)
|
||||
规则:只处理标签之间的文本节点和 placeholder/title/aria-label/alt/content 属性;
|
||||
文本里夹着 {{…}} 动作时按动作切开,每段中文各自包一层。
|
||||
"""
|
||||
import re, sys
|
||||
|
||||
CJK = re.compile(r'[一-鿿]')
|
||||
ACTION = re.compile(r'\{\{.*?\}\}', re.S)
|
||||
ATTR = re.compile(r'\b(placeholder|title|aria-label|alt|content|data-tip)="([^"{}]*[一-鿿][^"{}]*)"')
|
||||
keys = []
|
||||
|
||||
def esc(s):
|
||||
return s.replace('\\', '\\\\').replace('"', '\\"')
|
||||
|
||||
def wrap_segment(seg):
|
||||
"""seg 是不含 {{}} 与 <> 的纯文本;把其中的中文串(含中英混排的整句)包起来,保留首尾空白。"""
|
||||
if not CJK.search(seg):
|
||||
return seg
|
||||
lead = len(seg) - len(seg.lstrip())
|
||||
trail = len(seg) - len(seg.rstrip())
|
||||
core = seg.strip()
|
||||
if not core:
|
||||
return seg
|
||||
keys.append(core)
|
||||
return seg[:lead] + '{{T "' + esc(core) + '"}}' + seg[len(seg) - trail:] if trail else seg[:lead] + '{{T "' + esc(core) + '"}}'
|
||||
|
||||
def wrap_text(text):
|
||||
"""标签之间的文本,可能含 {{…}}。"""
|
||||
if not CJK.search(text):
|
||||
return text
|
||||
out, pos = [], 0
|
||||
for m in ACTION.finditer(text):
|
||||
out.append(wrap_segment(text[pos:m.start()]))
|
||||
out.append(m.group(0))
|
||||
pos = m.end()
|
||||
out.append(wrap_segment(text[pos:]))
|
||||
return ''.join(out)
|
||||
|
||||
def process(src):
|
||||
# 跳过 <script>…</script> 与 <style>…</style>(里面的中文单独手工处理)
|
||||
parts = re.split(r'(<script\b.*?</script>|<style\b.*?</style>)', src, flags=re.S)
|
||||
res = []
|
||||
for i, part in enumerate(parts):
|
||||
if i % 2 == 1:
|
||||
res.append(part)
|
||||
continue
|
||||
# 属性
|
||||
part = ATTR.sub(lambda m: (keys.append(m.group(2)) or f'{m.group(1)}="{{{{T "{esc(m.group(2))}"}}}}"'), part)
|
||||
# 文本节点:按标签切
|
||||
toks = re.split(r'(<[^>]+>)', part)
|
||||
for j, t in enumerate(toks):
|
||||
if j % 2 == 0:
|
||||
toks[j] = wrap_text(t)
|
||||
res.append(''.join(toks))
|
||||
return ''.join(res)
|
||||
|
||||
def main():
|
||||
dry = '--dry' in sys.argv
|
||||
files = [a for a in sys.argv[1:] if not a.startswith('--')]
|
||||
for f in files:
|
||||
src = open(f, encoding='utf-8').read()
|
||||
out = process(src)
|
||||
if not dry:
|
||||
open(f, 'w', encoding='utf-8').write(out)
|
||||
seen = set()
|
||||
for k in keys:
|
||||
if k not in seen:
|
||||
seen.add(k)
|
||||
print(k)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in new issue
Block a user