[260111] 프로젝트 이전 및 초기화

This commit is contained in:
2026-01-11 21:02:18 +09:00
commit 4564805a2b
8874 changed files with 95182 additions and 0 deletions

60
i18n/i18n.js Normal file
View File

@@ -0,0 +1,60 @@
// 계층구조 사용시
async function loadTranslations(lang) {
try {
const response = await fetch(`/i18n/translations.${lang}.json`);
if (!response.ok) {
throw new Error(`Failed to load translations for ${lang}`);
}
return await response.json();
} catch (error) {
console.error(error);
return {};
}
}
async function localizePage(lang) {
const translations = await loadTranslations(lang);
const elements = document.querySelectorAll('[data-i18n]');
elements.forEach(element => {
const key = element.dataset.i18n;
const localizedText = findNestedValue(translations, key);
if (localizedText) {
element.textContent = localizedText;
}
});
}
function findNestedValue(obj, key) {
if (obj.hasOwnProperty(key)) {
return obj[key];
}
for (const prop in obj) {
if (typeof obj[prop] === 'object' && obj[prop] !== null) {
const result = findNestedValue(obj[prop], key);
if (result) {
return result;
}
}
}
return null;
}
document.addEventListener('DOMContentLoaded', async () => {
const storedLang = localStorage.getItem('lang');
if (storedLang) {
await localizePage(storedLang);
return;
}
const urlParams = new URLSearchParams(window.location.search);
const queryLang = urlParams.get('lang');
const lang = queryLang || 'ko';
localStorage.setItem('lang', lang);
await localizePage(lang);
});
// 계층구조 미사용시 코드는 주석 처리된 상태로 유지

91
i18n/translations.en.json Normal file
View File

@@ -0,0 +1,91 @@
{
"all": "All",
"metaDeck": "Meta Deck",
"titlePrompt": "Please select a title",
"selectTitle": "Select Title",
"deckName": "Deck Name",
"deckNamePlaceHolder": "Please enter the name",
"myDeckHistory": "My Deck History",
"notHistory": "No saved history",
"preview": "Preview",
"back": "Back",
"close": "Close",
"reset": "Reset",
"dataBackup": "Data Backup",
"dataRecovery": "Data Recovery",
"saveAsImage": "Save as Image",
"selectDeckTemplate": "Select Deck Template",
"nowSaving": "Now Saving ...",
"search": "Search",
"searchPlaceHolder": "ex) 008 ...",
"noSearchResults": "No search results.",
"scrollingNotice": "This site is optimized for PC (Chrome browser).",
"cardTypeTitle": "Cards Type",
"includeParallel": "Show parallel cards",
"includeActionPoint": "Show AP Cards",
"onlyParallel": "Show only parallel cards",
"onlyActionPoint": "Show only AP Cards",
"triggerTypeTitle": "Trigger Type",
"includeAllTrigger": "ALL",
"includeColorTrigger": "COLOR",
"includeFinalTrigger": "FINAL",
"includeSpecialTrigger": "SPECIAL",
"resetCountConfirm": "Anything written to this set will be deleted. Do you still want to reset it?",
"SearchResults": "Search Results",
"SearchResultsCounter": "Cards",
"limitOverAlert": "There are cards exceeding the quantity limit. Should we proceed as is?",
"highQualityTitle": "Save in high definition",
"highQualityDesc": "※ Caution: Quality is doubled, file size is quadrupled!",
"previewMessage1": "Preview is not supported on mobile.",
"previewMessage2": "After saving the image, please check.",
"series": {
"ua01": "Code Geass: Lelouch of the Rebellion",
"ua02": "Jujutsu Kaisen",
"ua03": "HUNTER×HUNTER",
"ua04": "THE iDOLM@STER SHINY COLORS",
"ua05": "Demon Slayer: Kimetsu no Yaiba",
"ua06": "Tales of ARISE",
"ua07": "That Time I Got Reincarnated as a Slime",
"ua08": "Bleach: Thousand-Year Blood War",
"ua09": "Me & Roboco",
"ua10": "My Hero Academia",
"ua11": "Gintama",
"ua12": "Blue Lock",
"ua13": "TEKKEN 7",
"ua14": "Dr.STONE",
"ua15": "Sword Art Online",
"ua16": "SYNDUALITY Noir",
"ua17": "Toriko",
"ua18": "GODDESS OF VICTORYNIKKE",
"ua19": "Haikyu!!",
"ua20": "BLACK CLOVER",
"ua21": "Yu Yu Hakusho",
"ua22": "GAMERA -Rebirth-",
"ua23": "Attack on Titan",
"ua24": "SHY",
"ua25": "Undead Unluck",
"ua26": "The 100 Girlfriends Who Really, Really, Really, Really Love You",
"ua27": "Gakuen iDOLM@STER",
"ua28": "Kaiju No.8",
"ua29": "Kamen Rider",
"ua30": "Arknights",
"ua31": "Puella Magi Madoka Magica",
"ua32": "Shangri-La Frontier",
"ua33": "2.5 Dimensional Seduction",
"ua34": "CODE GEASS: Roze of the Recapture",
"ua35": "ONE-PUNCH MAN",
"ua36": "Macross",
"ua37": "Fullmetal Alchemist",
"ua38": "WIND BREAKER",
"ua39": "ULTIMATE MUSCLE",
"ua40": "Re:ZERO -Starting Life in Another World-",
"ua41": "Rurouni Kenshin: Meiji Kenkaku Romantan",
"ua42": "Monogatari Series",
"ua43": "SAKAMOTO DAYS",
"ua44": "Rebuild of Evangelion",
"ua45": "To Love Ru",
"ua46": "Kagurabachi",
"ua47": "Tokyo Ghoul"
},
"uapr": "UNION ARENA"
}

107
i18n/translations.ja.json Normal file
View File

@@ -0,0 +1,107 @@
{
"all": "全て",
"metaDeck": "メタデッキ",
"titlePrompt": "タイトルを選択してください",
"selectTitle": "タイトルを選択",
"deckName": "デッキ名",
"deckNamePlaceHolder": "名前を入力してください",
"myDeckHistory": "私のデッキ記録",
"notHistory": "保存された記録はありません",
"close": "CLOSE",
"reset": "リセット",
"dataBackup": "データバックアップ",
"dataRecovery": "データ復元",
"selectDeckTemplate": "Select Deck Template",
"nowSaving": "保存中...",
"search": "検索",
"searchPlaceHolder": "ex) 008 ...",
"noSearchResults": "検索結果がありません。",
"scrollingNotice": "このサイトはPCクロームブラウザに最適化されています。",
"cardTypeTitle": "カード種類",
"onlyParallel": "パラレルカードのみを表示",
"onlyActionPoint": "APカードのみを表示",
"triggerTypeTitle": "トリガー効果",
"includeAllTrigger": "ALL",
"includeColorTrigger": "COLOR",
"includeFinalTrigger": "FINAL",
"includeSpecialTrigger": "SPECIAL",
"resetCountConfirm": "このセットに記録されている内容はすべて削除されます。\nそれでもリセットしますか",
"limitOverAlert": "制限数を超えるカードがあります。このまま続行しますか?",
"highQualityTitle": "高画質で保存する",
"highQualityDesc": "※ 注意: 品質は2倍、容量は4倍です",
"previewMessage1": "モバイルでのプレビューはサポートされていません。",
"previewMessage2": "画像を保存した後、確認してください。",
"series": {
"ua01": "コードギアス 反逆のルルーシュ",
"ua02": "呪術廻戦",
"ua03": "HUNTER×HUNTER",
"ua04": "アイドルマスター シャイニーカラーズ",
"ua05": "鬼滅の刃",
"ua06": "Tales of ARISE",
"ua07": "転生したらスライムだった件",
"ua08": "BLEACH 千年血戦篇",
"ua09": "僕とロボコ",
"ua10": "僕のヒーローアカデミア",
"ua11": "銀魂",
"ua12": "ブルーロック",
"ua13": "鉄拳7",
"ua14": "Dr.STONE",
"ua15": "ソードアート・オンライン",
"ua16": "SYNDUALITY Noir",
"ua17": "トリコ",
"ua18": "勝利の女神NIKKE",
"ua19": "ハイキュー‼",
"ua20": "ブラッククローバー",
"ua21": "幽☆遊☆白書",
"ua22": "GAMERA -Rebirth-",
"ua23": "進撃の巨人",
"ua24": "SHY",
"ua25": "アンデッドアンラック",
"ua26": "君のことが大大大大大好きな100人の彼女",
"ua27": "学園アイドルマスター",
"ua28": "怪獣8号",
"ua29": "仮面ライダー",
"ua30": "アークナイツ",
"ua31": "魔法少女まどか☆マギカ",
"ua32": "シャングリラ・フロンティア",
"ua33": "2.5次元の誘惑",
"ua34": "コードギアス 奪還のロゼ",
"ua35": "ワンパンマン",
"ua36": "マクロス",
"ua37": "鋼の錬金術師",
"ua38": "WIND BREAKER",
"ua39": "キン肉マン",
"ua40": "Re:ゼロから始める異世界生活",
"ua41": "るろうに剣心 -明治剣客浪漫譚-",
"ua42": "〈物語〉シリーズ",
"ua43": "SAKAMOTO DAYS",
"ua44": "ヱヴァンゲリヲン新劇場版",
"ua45": "To LOVEる-とらぶる-",
"ua46": "カグラバチ",
"ua47": "東京喰種トーキョーグール"
},
"uapr": "UNION ARENA",
"CardList": {
"ResultsCounter": {
"SearchResults": "検索結果",
"SearchResultsCounter": "件"
},
"CardType": {
"includeBasic": "기본 카드",
"includeParallel": "パラレルカード",
"includeActionPoint": "APカード"
},
"TriggerType": {
"includeAllTrigger": "모든 트리거",
"includeColorTrigger": "COLOR",
"includeSpecialTrigger": "SPECIAL",
"includeFinalTrigger": "FINAL"
},
"makeDeckList": "덱 리스트 만들기"
},
"Result": {
"preview": "プレビュー",
"back": "戻る",
"saveAsImage": "画像として保存"
}
}

103
i18n/translations.ko.json Normal file
View File

@@ -0,0 +1,103 @@
{
"all": "전체",
"metaDeck": "메타 덱",
"titlePrompt": "작품을 선택해주세요",
"selectTitle": "작품 선택",
"deckName": "덱 이름",
"deckNamePlaceHolder": "이름을 입력해주세요",
"myDeckHistory": "나의 덱 기록",
"notHistory": "저장된 기록이 없습니다",
"close": "닫기",
"reset": "초기화",
"dataBackup": "데이터 백업",
"dataRecovery": "데이터 복구",
"selectDeckTemplate": "덱 템플릿 선택",
"nowSaving": "이미지로 저장 중 ...",
"search": "검색",
"searchPlaceHolder": "예) 008 ...",
"noSearchResults": "검색 결과가 없습니다.",
"scrollingNotice": "본 사이트는 PC(크롬 브라우저)에 최적화 되어있습니다.",
"cardTypeTitle": "카드 종류",
"onlyParallel": "패러렐 카드만 표시",
"onlyActionPoint": "액션 포인트 카드만 표시",
"triggerTypeTitle": "트리거 효과",
"resetCountConfirm": "이 세트에 기록된 모든 내용은 삭제됩니다. 그래도 초기화하시겠습니까?",
"limitOverAlert": "제한 수량을 초과하는 카드가 있습니다. 이대로 계속 진행할까요?",
"highQualityTitle": "고화질로 저장하기",
"highQualityDesc": "※ 주의: 품질은 2배, 용량은 4배!",
"previewMessage1": "모바일에서는 미리보기를 지원하지 않습니다.",
"previewMessage2": "이미지를 저장한 후 확인해주세요.",
"series": {
"ua01": "코드 기어스: 반역의 를르슈",
"ua02": "주술회전",
"ua03": "HUNTER×HUNTER",
"ua04": "아이돌 마스터 샤이니 컬러즈",
"ua05": "귀멸의칼날",
"ua06": "Tales of ARISE",
"ua07": "전생했더니 슬라임이었던 건에 대하여",
"ua08": "BLEACH 천년혈전 편",
"ua09": "나와 로보코",
"ua10": "나의 히어로 아카데미아",
"ua11": "은혼",
"ua12": "블루 록",
"ua13": "철권7",
"ua14": "Dr.STONE",
"ua15": "소드 아트 온라인",
"ua16": "신듀얼리티 느와르",
"ua17": "토리코",
"ua18": "승리의여신NIKKE",
"ua19": "하이큐ー‼",
"ua20": "블랙 클로버",
"ua21": "유유백서",
"ua22": "가메라 -리버스-",
"ua23": "진격의 거인",
"ua24": "SHY",
"ua25": "언데드 언럭",
"ua26": "너를 너무너무너무너무 좋아하는 100명의 그녀",
"ua27": "학원 아이돌 마스터",
"ua28": "괴수 8호",
"ua29": "가면 라이더",
"ua30": "명일방주",
"ua31": "마법소녀 마도카☆마기카",
"ua32": "샹그릴라 프론티어",
"ua33": "2.5차원의 유혹",
"ua34": "코드기어스 탈환의로제",
"ua35": "원펀맨",
"ua36": "마크로스",
"ua37": "강철의 연금술사",
"ua38": "WIND BREAKER",
"ua39": "근육맨",
"ua40": "Re: 제로부터 시작하는 이세계 생활",
"ua41": "바람의 검심 -메이지 검객 낭만기-",
"ua42": "모노가타리 시리즈",
"ua43": "사카모토 데이즈",
"ua44": "에반게리온 신극장판",
"ua45": "To LOVE 트러블",
"ua46": "카구라바치",
"ua47": "도쿄 구울"
},
"uapr": "UNION ARENA",
"CardList": {
"ResultsCounter": {
"SearchResults": "검색결과",
"SearchResultsCounter": "건"
},
"CardType": {
"includeBasic": "기본 카드",
"includeParallel": "패러렐 카드",
"includeActionPoint": "액션 포인트(AP)"
},
"TriggerType": {
"includeAllTrigger": "모든 트리거",
"includeColorTrigger": "COLOR",
"includeSpecialTrigger": "SPECIAL",
"includeFinalTrigger": "FINAL"
},
"makeDeckList": "덱 리스트 만들기"
},
"Result": {
"preview": "미리보기",
"back": "돌아가기",
"saveAsImage": "이미지로 저장"
}
}