[260111] 프로젝트 이전 및 초기화
This commit is contained in:
60
i18n/i18n.js
Normal file
60
i18n/i18n.js
Normal 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
91
i18n/translations.en.json
Normal 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 VICTORY:NIKKE",
|
||||
"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
107
i18n/translations.ja.json
Normal 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
103
i18n/translations.ko.json
Normal 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": "이미지로 저장"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user