F
fu.ling-lang.org
↓ 0 downloadsทะเบียนแพ็กเกจ fu.ling-lang.org — เขียนด้วยภาษา Ling (ไทย) ทั้งหมด
Keywords registry, packages, web, ling, thai
lingfu install fu.ling-lang.orgCode / Files (22)
controllers/home.ling
// controllers/home.ling — เลย์เอาต์ร่วม + i18n + หน้าแรก (crates.io, ธีมมืด/แดง)
// ── i18n: อ่านภาษาจากคุกกี้ (ค่าเริ่มต้น en) ──
ฟังก์ชัน ภาษาจาก(คำขอ) {
คืน cookie_get(คำขอ.cookie, "lang", "en")
}
// เลือกสตริงตามภาษา: ที(ภาษา, en, th, ko, ja, zh)
ฟังก์ชัน ที(ภาษา, en, th, ko, ja, zh) {
ถ้า ภาษา == "th" {
คืน th
}
ถ้า ภาษา == "ko" {
คืน ko
}
ถ้า ภาษา == "ja" {
คืน ja
}
ถ้า ภาษา == "zh" {
คืน zh
}
คืน en
}
// ── ตัวเลือกภาษา (มุมขวาบน) ──
ฟังก์ชัน ลิงก์ภาษา(รหัส, ป้าย, ภาษาปัจจุบัน, ถัดไป) {
ผูก ชั้น = "lang-opt"
ถ้า รหัส == ภาษาปัจจุบัน {
ผูก ชั้น = "lang-opt on"
}
คืน "<a class='" + ชั้น + "' href='/setlang?to=" + รหัส + "&next=" + ถัดไป + "'>" + ป้าย + "</a>"
}
ฟังก์ชัน ตัวเลือกภาษา(ภาษา, ถัดไป) {
คืน "<div class='langsel'>" +
ลิงก์ภาษา("en", "EN", ภาษา, ถัดไป) +
ลิงก์ภาษา("th", "ไทย", ภาษา, ถัดไป) +
ลิงก์ภาษา("ko", "한국어", ภาษา, ถัดไป) +
ลิงก์ภาษา("ja", "日本語", ภาษา, ถัดไป) +
ลิงก์ภาษา("zh", "中文", ภาษา, ถัดไป) +
"</div>"
}
// ── เปลี่ยนภาษา: GET /setlang?to=xx&next=/path ──
ฟังก์ชัน ตั้งภาษา(คำขอ) {
ผูก ไป = query_param(คำขอ.query, "to", "en")
ผูก ถัดไป = query_param(คำขอ.query, "next", "/")
ถ้า ถัดไป == "" {
ผูก ถัดไป = "/"
}
คืน ตอบคุกกี้(302, "", "text/html", "lang=" + ไป + "; Path=/; Max-Age=31536000; SameSite=Lax", ถัดไป)
}
// ── เปลือก — ทุกหน้า: โลโก้ + ค้นหา + เมนู + ตัวเลือกภาษา ──
ฟังก์ชัน เปลือก(คำขอ, ชื่อเรื่อง, เนื้อหา) {
ผูก ภาษา = ภาษาจาก(คำขอ)
ผูก ถัดไป = คำขอ.path
คืน "<!doctype html><html lang='" + ภาษา + "'><head><meta charset='utf-8'>" +
"<meta name='viewport' content='width=device-width, initial-scale=1'>" +
"<title>" + ชื่อเรื่อง + " · lingfu</title>" +
"<link rel='stylesheet' href='/static/style.css'>" +
"</head><body>" +
"<header><div class='header-inner'>" +
"<a class='brand' href='/'>灵符<span>lingfu</span></a>" +
"<form class='search' action='/search' method='get'>" +
"<input type='search' name='q' placeholder='" +
ที(ภาษา, "Search packages…", "ค้นหาแพ็กเกจ…", "패키지 검색…", "パッケージを検索…", "搜索软件包…") +
"' autocomplete='off'>" +
"</form>" +
"<nav>" +
"<a href='/'>" + ที(ภาษา, "Home", "หน้าแรก", "홈", "ホーム", "首页") + "</a>" +
"<a href='/packages'>" + ที(ภาษา, "Index", "ดัชนี", "색인", "索引", "索引") + "</a>" +
"<a href='/me/packages'>" + ที(ภาษา, "My Packages", "แพ็กเกจของฉัน", "내 패키지", "マイパッケージ", "我的软件包") + "</a>" +
"<a href='/organizations'>" + ที(ภาษา, "Organizations", "องค์กร", "조직", "組織", "组织") + "</a>" +
"</nav>" +
ตัวเลือกภาษา(ภาษา, ถัดไป) +
"</div></header>" +
"<main>" + เนื้อหา + "</main>" +
"<footer><div class='footer-inner'>" +
ที(ภาษา,
"fu.ling-lang.org — the Ling package registry · built entirely in Ling",
"fu.ling-lang.org — ทะเบียนแพ็กเกจของภาษา Ling · สร้างด้วยภาษา Ling ทั้งหมด",
"fu.ling-lang.org — Ling 패키지 레지스트리 · 전부 Ling으로 제작",
"fu.ling-lang.org — Ling パッケージレジストリ · すべて Ling で構築",
"fu.ling-lang.org — Ling 软件包注册表 · 完全用 Ling 构建") +
" · <a href='/api/packages'>API</a></div></footer>" +
"</body></html>"
}
// การ์ดแพ็กเกจหนึ่งใบ (ใช้ซ้ำทุกรายการ)
ฟังก์ชัน การ์ดแพ็กเกจ(พ) {
คืน "<li class='card'>" +
"<div class='card-top'><a class='pkg-name' href='/package?name=" + พ.name + "'>" + พ.name + "</a>" +
"<span class='dl'>↓ " + พ.downloads + "</span></div>" +
"<p class='pkg-desc'>" + พ.description + "</p>" +
"</li>"
}
ฟังก์ชัน รายการการ์ด(รายการ) {
ผูก ก = 0
ผูก ผล = ""
ขณะที่ ก < รายการ.len {
ผูก ผล = ผล + การ์ดแพ็กเกจ(รับรายการ(รายการ, ก))
ผูก ก = ก + 1
}
คืน ผล
}
ฟังก์ชัน หน้าแรก(คำขอ) {
ผูก ภาษา = ภาษาจาก(คำขอ)
ผูก จำนวนแพ็กเกจ = แพ็กเกจนับ()
ผูก จำนวนผู้ใช้ = ผู้ใช้นับ()
ผูก ใหม่ = แพ็กเกจล่าสุด(4)
ผูก นิยม = แพ็กเกจยอดนิยม(4)
คืน เปลือก(คำขอ,
ที(ภาษา, "Home", "หน้าแรก", "홈", "ホーム", "首页"),
"<section class='hero'>" +
"<h1>" + ที(ภาษา, "The Ling package registry", "ทะเบียนแพ็กเกจของภาษา Ling", "Ling 패키지 레지스트리", "Ling パッケージレジストリ", "Ling 软件包注册表") + "</h1>" +
"<p class='tag'>" + ที(ภาษา,
"Find, install, and publish packages — with one command",
"ค้นหา ติดตั้ง และเผยแพร่แพ็กเกจ — ด้วยคำสั่งเดียว",
"한 번의 명령으로 패키지 검색·설치·게시",
"ワンコマンドで検索・インストール・公開",
"一条命令即可查找、安装、发布软件包") + "</p>" +
"<div class='cmd'><code>lingfu install <package></code></div>" +
"<div class='stats'>" +
"<div class='stat'><b>" + จำนวนแพ็กเกจ + "</b><span>" + ที(ภาษา, "packages", "แพ็กเกจทั้งหมด", "패키지", "パッケージ", "软件包") + "</span></div>" +
"<div class='stat'><b>" + จำนวนผู้ใช้ + "</b><span>" + ที(ภาษา, "users", "ผู้ใช้", "사용자", "ユーザー", "用户") + "</span></div>" +
"</div>" +
"</section>" +
"<div class='cols'>" +
"<section class='col'><h2>" + ที(ภาษา, "New packages", "แพ็กเกจใหม่ล่าสุด", "새 패키지", "新着パッケージ", "最新软件包") + "</h2><ul class='cards'>" + รายการการ์ด(ใหม่) + "</ul></section>" +
"<section class='col'><h2>" + ที(ภาษา, "Most downloaded", "ดาวน์โหลดมากที่สุด", "다운로드 최다", "ダウンロード数上位", "下载最多") + "</h2><ul class='cards'>" + รายการการ์ด(นิยม) + "</ul></section>" +
"</div>")
}
ฟังก์ชัน สุขภาพ(คำขอ) {
คืน "ok"
}