Translate admin panel to all 6 languages

This commit is contained in:
openhands committed 2026-07-04 21:21:15 +02:00
1 parent f381aa987f
commit befa4ec282
63 files changed
+9353 -1443

No files matched your search

+10 -8
View File
@@ -3,6 +3,7 @@ import { ClipboardList } from "lucide-react";
import { dismissApplication } from "@/actions/admin-applications";
import { StatusCard } from "@/components/admin/dashboard";
import { prisma } from "@/lib/prisma";
import { getTranslations } from "next-intl/server";
export const dynamic = "force-dynamic";
@@ -19,6 +20,7 @@ function formatDate(d: Date | null): string {
}
export default async function AdminApplications() {
const t = await getTranslations("pages.admin.applications");
let applications: ApplicationRow[] = [];
try {
applications = await prisma.websiteStaffApplications.findMany({
@@ -51,14 +53,14 @@ export default async function AdminApplications() {
<ClipboardList size={20} className="text-[var(--color-primary)]" />
</div>
<div>
<h1 className="m-0 text-xl font-extrabold text-[var(--color-text)]">Staff Applications</h1>
<p className="m-0 text-xs text-[var(--color-text-muted)] mt-0.5">Pending applications from players requesting a staff rank.</p>
<h1 className="m-0 text-xl font-extrabold text-[var(--color-text)]">{t("title")}</h1>
<p className="m-0 text-xs text-[var(--color-text-muted)] mt-0.5">{t("subtitle")}</p>
</div>
</div>
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5 mb-6">
<StatusCard
label="Pending applications"
label={t("pending")}
value={applications.length}
state={applications.length > 0 ? "warn" : "ok"}
icon="📨"
@@ -66,9 +68,9 @@ export default async function AdminApplications() {
</div>
<section className="mt-6">
<h2 className="admin-section-title">Applications ({applications.length})</h2>
<h2 className="admin-section-title">{t("applicationsTitle", { count: applications.length })}</h2>
{applications.length === 0 ? (
<div className="admin-empty">No pending applications.</div>
<div className="admin-empty">{t("noApplications")}</div>
) : (
<div className="grid cols-2">
{applications.map((a) => {
@@ -80,10 +82,10 @@ export default async function AdminApplications() {
{username ? (
<Link href={`/admin/users/${a.userId}`}>{username}</Link>
) : (
<>User #{a.userId}</>
<>{t("userNumber", { id: a.userId })}</>
)}
</h3>
<span className="inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-[var(--color-primary)]/18 text-[var(--color-text)]">Rank {a.rankId}</span>
<span className="inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-[var(--color-primary)]/18 text-[var(--color-text)]">{t("rankLabel", { rank: a.rankId })}</span>
</div>
<p className="text-xs text-gray-500 dark:text-gray-400 m-0 mb-2">
{formatDate(a.createdAt)}
@@ -92,7 +94,7 @@ export default async function AdminApplications() {
<form action={dismissApplication}>
<input type="hidden" name="id" value={String(a.id)} />
<button type="submit" className="btn btn-danger">
Dismiss
{t("dismiss")}
</button>
</form>
</article>