- src/shared/i18n.ts: 공용 i18n 로더 (dotted-key + {{placeholder}} 보간)
- locales/server/ko-kr.json: 사이트 + 라우터 + 데이터팩 출력 사전
- EJS 뷰는 res.locals.t 미들웨어로 일괄 적용
- listEditor.js 등 클라이언트 JS 는 사전을 inline <script> 로 주입받아 tt() 헬퍼 사용
37 lines
1.3 KiB
Plaintext
37 lines
1.3 KiB
Plaintext
<!doctype html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title><%= t('site.indexTitle') %></title>
|
|
<link rel="stylesheet" href="/static/styles.css" />
|
|
</head>
|
|
<body class="siteBody">
|
|
<main class="pageWrap">
|
|
<section class="hero">
|
|
<h1><%= t('site.heroTitle') %></h1>
|
|
<p><%= t('site.heroSubtitle') %></p>
|
|
</section>
|
|
|
|
<section class="cardRow horizontalScroll">
|
|
<% if (packs.length === 0) { %>
|
|
<p class="muted"><%= t('site.empty') %></p>
|
|
<% } %>
|
|
<% packs.forEach(function (entry) { %>
|
|
<article class="packCard">
|
|
<h2><%= entry.name %></h2>
|
|
<p class="muted"><%= t('site.fileLabel', { file: entry.file }) %></p>
|
|
<% if (entry.definition) { %>
|
|
<ul class="metaList">
|
|
<li><%= t('site.mcVersion') %> <strong><%= entry.definition.mcVersion %></strong></li>
|
|
<li><%= t('site.platform') %> <strong><%= entry.definition.platform.type %></strong></li>
|
|
<li><%= t('site.modsFolder') %> <%= entry.definition.modsFolder || t('site.noneFallback') %> / <%= t('site.resourcepack') %> <%= entry.definition.resourcepackPath || t('site.noneFallback') %></li>
|
|
</ul>
|
|
<% } %>
|
|
</article>
|
|
<% }) %>
|
|
</section>
|
|
</main>
|
|
</body>
|
|
</html>
|