灵符lingfu
F

fu.ling-lang.org

↓ 0 downloads

ทะเบียนแพ็กเกจ fu.ling-lang.org — เขียนด้วยภาษา Ling (ไทย) ทั้งหมด

Keywords registry, packages, web, ling, thai
lingfu install fu.ling-lang.org
LicenseApache-2.0 OR MIT
Authorsลิงลิน
READMECode / FilesVersionsDependency GraphDependentsSecurityBuildsSettings

Code / 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'>&#8595; " + พ.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 &lt;package&gt;</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"
}

← Back to index