Merge branch 'Hatser-main' into main

pull/1/head
Made Baruna 2021-04-28 05:04:42 +08:00
commit a84bf4861b
No known key found for this signature in database
GPG Key ID: 5AA5DA16AA5DCEAD
11 changed files with 655 additions and 84 deletions

View File

@ -80,50 +80,31 @@
<div class="text-white p-2 bg-background rounded-xl">
<p class="mb-2">{$t('wish.help.howto.subtitle')}</p>
<p class="mb-2">
{$t('wish.help.howto.press')}
<b class="rounded-lg px-2 py-1 border-white border inline-flex items-center">+1</b>
{$t('wish.help.howto.whenYouGet')}
<span class="inline-flex items-center"
>3
<Icon path={mdiStar} size={0.7} /></span
>
{@html $t('wish.help.howto.pressWhenYouGet', {
values: {
button: '<b class="rounded-lg px-2 py-1 border-white border inline-flex">+1</b>',
rarity: 3,
},
})}
</p>
<p class="mb-2">
{$t('wish.help.howto.press')}
<b class="rounded-lg px-2 py-1 border-white border inline-flex items-center"
>Get 4
<Icon path={mdiStar} size={0.7} /></b
>
{$t('wish.help.howto.whenYouGet')}
<span class="inline-flex items-center"
>4
<Icon path={mdiStar} size={0.7} /></span
>
{@html $t('wish.help.howto.pressWhenYouGet', {
values: {
button: `<b class="rounded-lg px-2 py-1 border-white border inline-flex">Get 4★</b>`,
rarity: 4,
},
})}
</p>
<p class="mb-2">
{$t('wish.help.howto.press')}
<b class="rounded-lg px-2 py-1 border-white border inline-flex items-center"
>Get 5
<Icon path={mdiStar} size={0.7} /></b
>
{$t('wish.help.howto.whenYouGet')}
<span class="inline-flex items-center"
>5
<Icon path={mdiStar} size={0.7} /></span
>
{@html $t('wish.help.howto.pressWhenYouGet', {
values: {
button: `<b class="rounded-lg px-2 py-1 border-white border inline-flex">Get 5★</b>`,
rarity: 5,
},
})}
</p>
<p class="text-gray-400">
{$t('wish.help.howto.p1')}
<span class="inline-flex items-center"
>5
<Icon path={mdiStar} size={0.7} /></span
>
{$t('wish.help.howto.and')}
<span class="inline-flex items-center"
>4
<Icon path={mdiStar} size={0.7} /></span
>
pity
</p>
<p class="text-gray-400">
{$t('wish.help.howto.p2.0')}

View File

@ -3,6 +3,7 @@ import { addMessages, init, getLocaleFromNavigator, locale as $locale } from 'sv
import en from './locales/en.json';
import id from './locales/id.json';
import ru from './locales/ru.json';
import ko from './locales/ko.json';
const INIT_OPTIONS = {
fallbackLocale: 'en',
@ -25,6 +26,7 @@ addMessages('en', en);
addMessages('en-US', en);
addMessages('id', id);
addMessages('ru', ru);
addMessages('ko', ko);
export function startClient() {
const savedLocale = localStorage.getItem('locale');

View File

@ -22,7 +22,7 @@
"Tartaglia"
],
"summoned": "Summoned",
"percentage": "from all",
"percentage": "from all {rarity}",
"avg": "Pity average",
"subtitle": "Calculated from data submitted by {user} paimon.moe users",
"detail": "Global Wish Tally"
@ -257,10 +257,8 @@
"howto": {
"title": "How to Use Manual Input",
"subtitle": "After a 1x Wish:",
"press": "Press",
"whenYouGet": "when you get",
"p1": "It will automatically add the lifetime pulls,",
"and": "and",
"pressWhenYouGet": "Press {button} when you get {rarity}★",
"p1": "It will automatically add the lifetime pulls, 5★, and 4★ pity",
"p2": [
"When the",
"pity reaches 10, it will automatically be reset to 0"
@ -329,7 +327,7 @@
"titleWeapon": "Weapon Calculator",
"titleCharacter": "Character Calculator",
"titleResin": "Resin Calculator",
"goto": "Go To",
"goto": "Go To {where}",
"howToUse": "How to Use",
"guide": {
"clickToMaximize": "Click the picture to maximize",
@ -577,4 +575,4 @@
"title": "Achievement",
"of": "of"
}
}
}

View File

@ -22,7 +22,7 @@
"Tartaglia"
],
"summoned": "Pulang",
"percentage": "dari semua",
"percentage": "dari semua {rarity}",
"avg": "Pity rata-rata",
"subtitle": "Dihitung dari data yang dikirim oleh {user} pengguna paimon.moe",
"detail": "Perhitungan Wish Pity Global"
@ -232,10 +232,8 @@
"howto": {
"title": "Cara Menggunakan Manual Input",
"subtitle": "Setelah kamu melakukan x1 pull wish:",
"press": "Tekan",
"whenYouGet": "ketika kamu mendapatkan",
"p1": "Itu akan otomatis menambahkan total pull",
"and": "dan",
"pressWhenYouGet": "Tekan {button} ketika kamu mendapatkan {rarity}★",
"p1": "Itu akan otomatis menambahkan total pull, 5★ dan, 4★ pity",
"p2": [
"Ketika",
"pity mencapai 10, angkanya akan otomatis reset menjadi 0"
@ -304,7 +302,7 @@
"titleWeapon": "Kalkulator Senjata",
"titleCharacter": "Kalkulator Karakter",
"titleResin": "Kalkulator Resin",
"goto": "Ke",
"goto": "Ke {where}",
"howToUse": "Cara Penggunaan",
"guide": {
"clickToMaximize": "Klik gambar untuk memperbesar",
@ -551,4 +549,4 @@
"title": "Achievement",
"of": "dari"
}
}
}

578
src/locales/ko.json Normal file
View File

@ -0,0 +1,578 @@
{
"sidebar": {
"home": "홈",
"character": "캐릭터",
"wishCounter": "기원 통계",
"calculator": "계산기",
"database": "데이터베이스",
"items": "아이템",
"achievement": "업적",
"reminder": "리마인더",
"todoList": "할 일 목록",
"timeline": "타임라인",
"settings": "설정",
"donate": "후원"
},
"home": {
"welcome": "Paimon.moe에 어서오세요! 👋",
"message": "최고의 원신 동반자! 돌파 계산기로 파밍 계획을 도와주고, 할 일 목록과 기원 통계를 통해 진척도를 확인해줍니다.",
"banner": {
"featured": [
"로자리아",
"타르탈리아"
],
"summoned": "획득",
"percentage": "(모든 {rarity} 중)",
"avg": "평균 천장",
"subtitle": "{user}명의 paimon.moe 사용자가 제공한 데이터로 계산되었습니다",
"detail": "전체 기원 총계"
},
"wish": {
"message": "기원 통계를 제출해 여러분의 기원 기록을 6개월 이상 보존하세요! 자동으로 천장을 계산하고 보기좋은 차트로 통계도 만들어 드립니다 📊",
"latest": "저번 뽑기 기록",
"banner": "픽업",
"time": "시간",
"name": "이름",
"pity": "천장",
"detail": "기원 통계"
},
"reminder": {
"message": "매개 변수 변환기나 Hoyolab 출석 체크 이벤트의 리마인더 알림을 설정할 수 있습니다! 🔔 아래의 리마인더 버튼을 클릭해주세요!",
"detail": "리마인더"
},
"event": {
"upcoming": "예정 중인 이벤트",
"current": "현재 이벤트",
"detail": "타임라인"
},
"discord": {
"online": "명 온라인",
"message": "우리 Discord 서버에 참여해 최신 업데이트 알림을 받으세요! 원신에 대해 토론하거나 paimon.moe에 대한 피드백도 할 수 있습니다.",
"join": "Discord 서버에 참가"
},
"items": {
"title": "오늘 파밍 가능한 아이템",
"detail": "아이템",
"sunday": "일요일에는 모든 아이템을 파밍할 수 있습니다. 😁"
},
"calculator": {
"title": "🧮 캐릭터와 무기의 돌파 필요 재료와 특성 책 재료를 계산해드립니다! 모든 계산된 내용은 할 일 목록에 추가할 수 있습니다, 추가하면 레진이 얼마나 필요한 지 알려줘요!",
"detail": "계산기"
},
"twitter": {
"title": "제 트위터에 팔로우하셔서, 제가 paimon.moe의 어떤 내용을 개발하고, 업데이트 했는지 가끔씩 확인해보세요!",
"detail": "Twitter 팔로우"
},
"achievement": {
"title": "🏆 업적 목록을 확인하고 추적하세요",
"detail": "업적"
}
},
"characters": {
"title": "캐릭터",
"subtitle": "스탯 수치는 80 레벨, 6 돌파를 기준으로 합니다. 표의 상단을 눌러 정렬할 수도 있습니다!",
"name": "이름",
"element": "원소",
"rarity": "희귀도",
"weapon": "무기",
"talents": "전투 특성",
"passiveTalents": "고유 특성",
"constellations": "운명의 자리",
"asc": "돌파",
"lvl": "레벨",
"hp": "HP",
"atk": "공격력",
"def": "방어력",
"hpPercent": "HP %",
"atkPercent": "공격력 %",
"defPercent": "방어력 %",
"critRate": "치명타 확률",
"critDamage": "치명타 피해",
"em": "원소 마스터리",
"er": "원소 충전 효율",
"healingBonus": "치유 보너스",
"pyroDamageBonus": "불 원소 피해 보너스",
"hydroDamageBonus": "물 원소 피해 보너스",
"dendroDamageBonus": "풀 원소 피해 보너스",
"electroDamageBonus": "번개 원소 피해 보너스",
"cryoDamageBonus": "얼음 원소 피해 보너스",
"anemoDamageBonus": "바람 원소 피해 보너스",
"physicalDamageBonus": "물리 피해 보너스",
"geoDamageBonus": "바위 원소 피해 보너스"
},
"wish": {
"title": "기원 통계",
"autoImport": "자동 제출",
"helpAndSetting": "도움말 & 설정",
"wishesWorth": "기원 가치",
"lifetimePulls": "총 뽑기 횟수",
"guarantee": "천장 지수 {pity}에 확정으로 획득",
"name": "이름",
"time": "시간",
"pity": "천장",
"welcome": "기원 통계에 어서오세요! 우선은 자동 제출기능을 통해 기원 기록을 제출하기를 권장드립니다.",
"welcomeStart1": "시작하려면, 상단의",
"welcomeStart2": "버튼을 누르세요",
"manual": "수동으로 데이터를 입력하려면, 여기를 활성화하세요:",
"manualButton": "수동 입력 활성화",
"errorBanner": "픽업 기간이 일치하지 않습니다! 설정 페이지에서 서버를 조정해주세요. 그래도 안된다고요? Discord에 메세지를 남겨 주세요 😅",
"globalWishTally": "전체 기원 총계",
"import": {
"title": "기원 기록 제출",
"faqsButton": "FAQ - 먼저 읽어보세요",
"nonew": "새로운 기록이 없습니다",
"importNotice1": "제출된 기록은 기존 데이터에 따라 덧붙여지거나 대체됩니다",
"importNotice2": "이전에 저장한 기록이 없다면, 천장 수치는 1부터 시작합니다",
"importNotice3": "다른 계정의 정보를 제출하려고 한다면, 설정 페이지에서 계정을 나누는 걸 잊지마세요, 그렇지 않으면 데이터가 섞여버릴 겁니다!",
"saveData": "기원 데이터를 저장할까요?",
"reCalculating": "천장 재계산 중...",
"processing": "처리중",
"banner": "픽업",
"page": "페이지",
"parsing": "파싱 중...",
"save": "저장",
"cancel": "취소",
"cancelling": "취소하는 중...",
"importNewWishOnly": "새로운 기록만 제출",
"importNewWishUncheck": "모든 기원 길고을 다시 제출해야 할 때만 체크 해제하세요",
"import": "제출",
"close": "닫기",
"invalidLink": "유효하지 않은 링크입니다, 다시 확인해보세요",
"errorApi": "MiHoYo API와 통신 중 오류가 발생했습니다, 나중에 다시 시도해보세요!",
"timeout": "연결 대기 시간이 초과됐습니다, 잠시 기다린 후 다시 시도해보세요",
"invalidData": "API로 부터 유효하지 않은 정보를 받았습니다, 나중에 다시 시도해보세요",
"success": "제출 성공 😀!",
"server": "서버를 선택해주세요:",
"wishTallyCheck": "전체 기원 총계를 위해 천장 정보 전송",
"wishTally": "우리는 전체 사용자들의 기원 총계를 만들고 있습니다! 여러분의 기원 정보를 보내어 참여할 수 있습니다. 모든 천장 정보는 paimon.moe 사용자들의 평균 천장을 확인하기 위해 집계됩니다.",
"wishTallyCollected": [
"수집되는 정보:",
"그리고",
"당신의 기원 통계에서 확인된 천장 정보"
],
"faqs": {
"title": "기원 기록 입력 FAQ",
"q1": "어떤 원리로 동작하나요?",
"a1": "원신의 기원 기록은 기본적으로 웹 페이지입니다. 따라서 여러분은 특정한 웹 페이지의 URL을 통해 접근할 수 있고, 여러분이 기원 페이지나 피드백 페이지를 열게 되면 이 정보들에 접근 가능한 임시 키가 주어지고, 이 사이트에서는 그 키를 이용해 MiHoYo API와 통신하여 여러분의 기원 기록을 가져옵니다.",
"q2": "안전한 건가요? 밴당하거나 하진 않을까요?",
"a2": "Paimon.moe는 원신이 자체적으로 여러분에게 기원 기록을 보여주는 것과 같은 방법을 사용합니다. 또한 Paimon.moe는 게임 파일이나 메모리를 변조할 어떠한 방법도 없으며, 이는 곧 안전하다고 말할 수 있습니다. 그러나 이 기능을 사용함에 있어서의 책임은 여러분에게 있습니다 (저는 제 주계정으로 사용하고 있습니다). 아니면 기원 데이터를 수동으로 입력할 수도 있어요 😀.",
"q3": "제 계정을 해킹할 수도 있는 거 아닌가요?",
"a3": [
"Paimon.moe는 UID나 닉네임같은 계정 정보를 절대 저장하지 않습니다, 그러니 그럴 가능성은 없습니다. 이 프로젝트는 오픈 소스이며",
"에서 확인하실 수 있습니다; 저는 타인의 계정을 해킹해서 제 명성을 깎아먹을 생각은 없어요."
],
"q4": "잠깐, 내가 요청 정보나 오가는 데이터를 확인해 봤는데, 왜 MiHoYo API랑 통신하는게 아니고 당신네 도메인에 요청하는 겁니까?",
"a4": [
"Paimon.moe는",
"때문에 MiHoYo API에 직접 요청할 수 없습니다, 그래서 요청 정보는 간단한 CORS 프록시 서버에 옮겨진 후 수행됩니다. 코드를 확인하시면 알 수 있어요.",
"here"
],
"q5": "그럼 제 임시키나 기원 기록들을 보관하고 있는건가요?",
"a5": [
"Paimon.moe는 절대 여러분이 임시로 받은 키를 보관하지 않을 것이고, URL은 CORS를 통해 데이터를 받아오기 위해 CORS 프록시 서버에 보내집니다. Paimon.moe는 여러분이 전체 기원 통계를 전송하는데 참여했을 때에만 4* 천장 정보와, 5* 기원 및 천장 정보를 보관합니다 (개인 정보는 보관하지 않아요! 자세한 정보는",
"개인정보처리방침",
"를 참조하세요). 기원 정보가 전송되는 걸 원치 않는다면 천장 정보 전송 체크박스를 해제할 수 있습니다. 체크를 해제하면 여러분의 모든 기원 정보는 여러분의 기기(또는 동기화를 활성화 했다면 Google Drive)에 저장됩니다.",
"만약 여러분의 임시 키가 포함된 URL이 이리 저리 전송되는걸 원치 않으신다면, PC 내부에 있는 임시 데이터를 이용해 추출하는 작은 스크립트를 사용하실 수도 있습니다. (PC Local 옵션) "
],
"q6": "하라는 대로 했는데, API 오류라는 데요?",
"a6": "모든 문자를 복사해서 붙여넣었는지 확인하세요(모바일 환경에서는 꾹 눌러서 [모두 선택]); 아마 자동 입력 기능이 필요로 하는 문자 몇 개를 빼먹으신 것 같아요.",
"q7": "제 기원 기록을 모두 읽는 게 아닌가요!? 빠진 게 있는데요",
"a7": "6개월이 지난 기원 기록들은 미호요 서버 자체에서 삭제됩니다, 그러니 어딘가에 데이터를 백업하신 게 아니라면... 슬프게 됐어요."
},
"guide": {
"video": "영상 도움말",
"pc": [
"[ESC] 페이몬 메뉴를 엽니다",
"피드백 버튼을 누릅니다",
"기다리면 브라우저 화면이 열립니다",
"아래 텍스트 박스에 브라우저의 주소를 복사 & 붙여넣기하세요",
"여기에 주소를 붙여넣기하세요... (https://webstatic...)"
],
"android": [
"페이몬 메뉴를 엽니다",
"피드백 버튼을 누릅니다",
"기다리면 브라우저 화면이 열립니다",
"Wi-Fi와 데이터 연결을 모두 끄세요",
"오른쪽 위의 새로고침 버튼을 누르세요",
"새로고침된 화면에 에러가 나타나고, 검은색으로 오류 내용이 나타납니다",
"텍스트를 길게 꾹 눌러 [모두 선택]을 누르고, [복사]를 선택하세요 (텍스트의 일부만 복사하면 안됩니다)",
"Wi-Fi와 데이터 연결을 다시 켜세요",
"아래 텍스트 박스에 복사한 문자를 붙넣기하세요",
"여기에 문자를 붙여넣기하세요... (웹페이지를 사용할 수 없습니다...)"
],
"ios": [
"페이몬 메뉴를 여세요",
"피드백 버튼을 누릅니다",
"기다리면 피드백 페이지가 열립니다",
"[게임 문제]를 누릅니다",
"[다인 모드]를 누릅니다",
"답변의 가장 아래에 링크가 있습니다, 그걸 누르세요",
"브라우저가 열릴겁니다. 아래 텍스트 박스에 브라우저의 주소를 복사 & 붙여넣기하세요",
"여기에 주소를 붙여넣기하세요... (https://genshin.mihoyo...)"
],
"ps": [
"웹 이벤트 페이지를 열기 위한 QR 코드가 포함된 게임 내 우편이 있는 경우에만 이 기능을 사용할 수 있습니다.",
"플레이 스테이션에서 원신을 실행하세요",
"QR 코드가 포함된 이벤트 우편을 엽니다",
"스마트폰으로 QR 코드를 스캔합니다",
"주소를 복사해, 아래에 붙여넣기하세요",
"여기에 주소를 붙여넣기하세요..."
],
"pclocal": [
"피드백 페이지 주소를 이용한 방법이 불편하다면, 이 방법을 이용해 PC에서 자체적으로 처리할 수 있습니다. 이 스크립트가 PC 내의 로그 파일을 읽어 기원 기록 주소를 가져옵니다.",
"시작 버튼을 누르고, Powershell을 검색합니다.",
"Windows Powershell을 실행하고, 아래 스크립트를 복사해 Powershell에 붙여넣기합니다.",
"iex ((New-Object System.Net.WebClient).DownloadString('https://gist.githubusercontent.com/MadeBaruna/9ff8b7a2af11f3002395af7963b5ed18/raw/cdfead30f830b897e8822a40f98fea5340dbd62e/importer.ps1'))",
"스크립트의 내용을 확인하려면",
"여기",
"https://gist.github.com/MadeBaruna/9ff8b7a2af11f3002395af7963b5ed18",
"Enter키를 눌러 스크립트를 실행하고, 나타난 설명을 따르세요",
"이후, 스크립트의 실행 결과를 아래에 붙여넣기하세요",
"여기에 결과를 붙여넣기하세요...",
"이 기능은 아직 베타 상태입니다, 시도하기 전에 도움말 & 설정 메뉴에서 엑셀로 추출을 눌러 기존 데이터를 백업하세요."
]
}
},
"help": {
"title": "기원 기록 도움말 & 설정",
"exportTitle": "기원 기록 추출하기",
"exportMessage": "엑셀 파일로 여러분의 기원 기록을 추출할 수 있습니다",
"export": "엑셀로 추출",
"exporting": "추출하는 중...",
"import": "제출",
"exportFinish": "추출 성공, 브라우저가 파일을 다운로드할 때 까지 기다려주세요!",
"wishTallyTitle": "기원 총계 전송",
"wishTally": "우리는 전체 사용자들의 기원 총계를 만들고 있습니다! 여러분의 기원 정보를 보내어 참여할 수 있습니다. 모든 천장 정보는 paimon.moe 사용자들의 평균 천장을 확인하기 위해 집계됩니다.",
"wishTallyCollected": [
"수집되는 정보:",
"그리고",
"당신의 기원 통계에서 확인된 천장 정보"
],
"wishTallySubmit": "기원 총계 전송",
"wishTallyThankyou": "참여해주셔서 감사합니다!",
"manualTitle": "수동 입력 설정",
"enableManual": "수동 입력 활성화",
"notice": "자동 제출 기능과 수동 입력 기능을 동시에 사용하는 건 아직 실험이 필요한 부분이니 권장드리지 않습니다!",
"consider": "먼저 자동 제출 기능을 사용하고, 이 도움말을 열기 위해 눌렀던 버튼의 옆 버튼을 눌러 시도해보세요.",
"howto": {
"title": "수동 입력 사용하는 법",
"subtitle": "1회 기원 후:",
"pressWhenYouGet": "{rarity}★을 획득했을 땐 {button} 버튼을 누르세요",
"p1": "수동 입력시 자동으로 총 뽑기 횟수, 5★과 4★의 천장 수치를 추가합니다.",
"p2": [
" ",
"천장 지수가 10에 도달했을 때, 자동으로 0으로 초기화됩니다."
],
"p3": [
" ",
"천장 지수가 90에 도달했을 때, 자동으로 0으로 초기화됩니다."
],
"p4": [
"10연 뽑기 이후에는",
"를 눌러주세요, 하지만 천장 지수는 계산되지 않는다는 걸 명심해주세요, 언제 실제로 천장이 초기화됐는지 알 수 없거든요 (10연차의 첫번째 뽑기에서 나왔을 수도, 마지막에 나왔을 수도 있습니다). 천장 계산이 정확하게 맞추기 위해선, 직접 기록을 확인하고 1개 씩 수동 추가를 해야 합니다."
],
"p5": [
"또는",
"버튼을 눌러 값들을 직접 고칠 수도 있습니다!"
],
"p6": [
"아래쪽에 있는 화살표를 눌러 상세 뽑기 결과를 볼 수 있습니다",
"또는",
"를 누르면 팝업이 나타나, 데이터를 수정할 수 있고 데이터를 수동으로 추가할 수도 있습니다."
]
}
},
"types": {
"beginners": "초보자 추천 기원",
"standard": "상시",
"character-event": "캐릭터 이벤트",
"weapon-event": "무기 이벤트"
},
"detail": {
"weapon": "무기",
"character": "캐릭터",
"time": "일시",
"pity": "천장",
"name": "이름",
"type": "종류",
"banner": "픽업",
"roll": "#뽑",
"totalThisBanner": "이 픽업에서 총 뽑은 횟수",
"worth": "가치",
"loading": "로딩 중... (화면이 멈췄다면, 설정 페이지에서 서버를 바꿔주세요)",
"guaranteed": "다음 5★ 은 확정 UP 캐릭터 또는 무기입니다"
},
"tally": {
"title": "기원 총계",
"subtitle": "paimon.moe 사용자들이 제출한 전체 천장 통계",
"update": "갱신됨",
"summoned": "획득",
"wonFiftyFifty": "50:50 확률로 획득",
"fromFiveStar": "(모든 5★ 중)",
"fromFourStar": "(모든 4★ 중)",
"show": "보기",
"name": "이름",
"total": "합계",
"wishTotal": "기원 합계",
"worth": "가치",
"weapon": "무기",
"character": "캐릭터",
"error": "데이터를 아직 사용할 수 없습니다 😞",
"pity": "천장",
"median": "5★ 평균",
"user": "전체 사용자"
}
},
"calculator": {
"titleWeapon": "무기 계산기",
"titleCharacter": "캐릭터 계산기",
"titleResin": "레진 계산기",
"goto": "{where}로 이동",
"howToUse": "사용법",
"guide": {
"clickToMaximize": "사진을 클릭해 최대화",
"howToWeapon": "무기 계산기 사용하는 법",
"howToCharacter": "캐릭터 계산기 사용하는 법"
},
"weapon": {
"calculateAscension": "돌파 재료도 계산할까요?",
"selectRarity": "무기 희귀도 선택",
"selectWeapon": "무기 선택",
"current": "현재 무기 레벨, 경험치, 돌파 레벨",
"inputCurrentLevel": "현재 무기 레벨을 입력해주세요...",
"inputCurrentExp": "현재 무기 경험치를 입력해주세요...",
"intended": "희망하는 무기 레벨과 돌파 레벨",
"inputIntendedLevel": "희망하는 무기 레벨을 입력해주세요...",
"resource": "사용할 자원 아이템",
"calculate": "계산",
"unknownInformation": "알 수 없는 정보가 있습니다",
"ascensionLevel": "돌파 레벨",
"mora": "모라 (근사치 ±40)",
"expWasted": "경험치 초과",
"addToTodo": "할 일 목록에 추가",
"addedToTodo": "할 일 목록에 추가됐습니다"
},
"character": {
"calculateAscension": "돌파 재료도 계산할까요?",
"selectCharacter": "캐릭터를 선택해주세요",
"current": "현재 캐릭터 레벨, 경험치, 돌파 레벨",
"inputCurrentLevel": "현재 캐릭터 레벨을 입력해주세요...",
"inputCurrentExp": "현재 캐릭터 경험치를 입력해주세요...",
"intended": "희망하는 캐릭터 레벨과 돌파 레벨",
"inputIntendedLevel": "희망하는 캐릭터 레벨을 입력해주세요...",
"resource": "사용할 자원 아이템",
"calculateTalent": "특성 재료도 계산할까요?",
"inputTalentLevel": "1번, 2번, 3번 특성의 현재 레벨을 입력해주세요",
"inputTalentNotice": "특성 레벨이 다른 색을 띤다면 3을 뺀 수치를 입력해주세요",
"inputTalent": [
"1번 특성 레벨",
"2번 특성 레벨",
"3번 특성 레벨"
],
"talentToLevel": "레벨 에서",
"calculate": "계산",
"unknownInformation": "알 수 없는 정보가 있습니다",
"ascensionLevel": "돌파 레벨",
"mora": "모라 (근사치 ±40)",
"expWasted": "경험치 초과",
"addToTodo": "할 일 목록에 추가",
"addedToTodo": "할 일 목록에 추가됐습니다"
},
"expTable": {
"level": "레벨",
"items": "아이템",
"wasted": "초과 경험치",
"mora": "필요 모라"
},
"resinTable": {
"quantity": "수량",
"time": "대기 시간"
},
"resin": {
"currentResin": "현재 레진",
"desiredResin": "희망 소모 레진",
"or": "또는",
"inputCurrentResin": "현재 레진을 입력해주세요...",
"inputDesireResin": "몇 레진이 될 때까지 기다릴 지 입력해주세요...",
"timeFormat": "ko",
"calculate": "계산",
"currentTime": "현재 시간",
"fullTime": "완충 시간",
"hours": "시간",
"minutes": "분",
"seconds": "초"
}
},
"items": {
"title": "아이템 목록",
"subtitle": "할 일 목록에 추가하려면 아이템 이미지를 클릭하세요",
"searchCharacter": "캐릭터 검색",
"searchWeapon": "무기 검색",
"day": "요일",
"material": "재료",
"characterWeapons": "캐릭터 & 무기",
"add": {
"rarity": "희귀도 선택",
"amount": "수량",
"inputAmount": "수량을 입력하세요...",
"cancel": "취소",
"add": "할 일에 추가"
}
},
"days": {
"Sunday": "일요일",
"Monday": "월요일",
"Tuesday": "화요일",
"Wednesday": "수요일",
"Thursday": "목요일",
"Friday": "금요일",
"Saturday": "토요일"
},
"todo": {
"title": "할 일 목록",
"summary": "요약",
"empty": [
"아직 할 게 아무것도 없네요 😀",
"아이템 페이지나 계산기에서 할 일을 추가해보세요!"
],
"farmableToday": "오늘 파밍 가능",
"resin": "레진 필요함",
"based": "모험 레벨:{ar}, 월드 레벨:{wl} 기준",
"change": "(설정에서 변경 가능)",
"approximation": "근사치는 다음으로 부터의 드랍률 통계를 기반으로 계산됐습니다: ",
"delete": {
"title": "이 할일을 삭제할까요?",
"cancel": "취소",
"delete": "삭제"
}
},
"timeline": {
"title": "타임라인",
"localTime": "기기 시간으로 보기",
"starting": "시작 까지",
"ending": "종료 까지",
"live": "진행 중!",
"finished": "종료됨"
},
"settings": {
"version": "데이터 버전:",
"multiple": "여러 계정을 보유하고 계신가요? 기원 기록과 할 일 목록을 나누려면 여기에서 계정을 선택하세요",
"selectAccount": "계정을 선택하세요",
"reset": "초기화",
"delete": "삭제",
"add": "추가",
"server": "서버를 선택하세요:",
"drive": [
"Paimon.moe는 여러분의 Google Drive에서 여러분의 기원 통계나 할 일 목록을 저장하고 동기화하기 위해 어플리케이션 데이터 디렉토리를 사용합니다.",
"Paimon.moe는 이 사이트에서 직접 생성한 파일만 읽거나 쓸 수 있습니다."
],
"driveError": "Google Drive API를 불러올 수 없습니다.",
"driveSignIn": "Google Drive에 로그인",
"driveSignOut": "Google Drive 로그아웃",
"synced": "동기화됨",
"waiting": "대기 중...",
"syncing": "동기화 중...",
"lastSync": "마지막 동기화:",
"feedback": "버그, 잘못된 데이터를 발견하거나 또는 피드백이 있을 경우 메세지를 남겨주세요:",
"or": "또는",
"thanks": "감사합니다 😁!",
"modal": {
"notice": "모든 할 일 목록과 기원 기록 정보가 삭제됩니다",
"backup": "기원 정보를 엑셀 파일로 추출해 백업해놓을 수 있습니다!",
"cancel": "취소",
"delete": "삭제",
"reset": "초기화"
}
},
"privacypolicy": {
"title": "개인정보처리방침",
"subtitle": "paimon.moe이 수집하는 정보와 사용되는 곳",
"collect": [
{
"title": "paimon.moe상에서 방문한 URL, 리퍼러(Referer), 브라우저, 운영 체제, 기기 타입, 접속자 국가",
"content": [
"Paimon.moe에서는",
"plausible.io",
"(개인 정보 친화적인 분석 도구) 를 사용해 얼마나 많은 사람들이 어떤 기능을 사용하는지 볼 수 있습니다, 이에 따라 구현하고 발전시킬 기능들의 우선순위를 정할 수 있습니다."
]
},
{
"title": "오류 메세지와 본 사이트의 예외 상황",
"content": [
"Paimon.moe는 본 사이트의 오류와 예외 정보를",
"sentry.io",
"에 전송하여, 문제를 추적하고 이에 따라 해결할 수 있습니다."
]
},
{
"title": "기원 천장",
"content": [
"자동 제출 기능이나 도움말 & 설정 메뉴의 수동 제출 기능에서 '기원 총계 전송'을 체크했다면 Paimon.moe 은 4* 천장 횟수, 5* 천장 횟수, 그리고 5* 기원 정보 (뽑은 시간, 이름, 기원 횟수)를 저장합니다. Paimon.moe은 수집된 데이터를 합하고 각각의 픽업에서 paimon.moe 사용자들의 평균 천장을 계산하는데 데이터를 활용합니다. 이곳에서 확인하실 수 있습니다.",
"기원 총계"
]
}
],
"subtitleNotCollect": "paimon.moe 이 수집하지 '않는' 정보",
"notCollect": [
"Paimon.moe 는 절대 비밀번호, UID, 닉네임, 이메일, 임시 키 또는 피드백 url을 저장하지 않습니다. 관심이 있다면, 이 프로젝트는 오픈 소스이므로 아래에서 소스코드를 확인할 수 있습니다.",
"paimon-moe-api Github",
"and",
"paimon-moe Github"
]
},
"sync": {
"message": "현재 브라우저에 저장된 데이터가 Google Drive에 저장된 데이터와 충돌합니다!",
"googleDriveData": "Google Drive 데이터",
"localData": "현재 브라우저에 저장된 데이터",
"older": "오래됨",
"newer": "최근",
"useGoogleDriveData": "Google Drive에 저장된 데이터 사용",
"useLocalData": "현재 브라우저에 저장된 데이터 사용",
"download": "둘 다 다운로드",
"lastModified": "마지막 변경",
"or": "또는"
},
"footer": {
"affliate": "Paimon.moe는 miHoYo와 연관되지 않았습니다.",
"copyright": "Genshin Impact, 게임의 콘텐츠와 소재의 트레이드마크와 저작권은 miHoyo에 있습니다.",
"discord": "Discord 참가",
"community": "커뮤니티 링크",
"official": "공식 링크"
},
"donate": {
"message": [
"감사합니다! 이 사이트가 유용하게 쓰였으면 좋겠네요.",
"저는 이 웹 사이트를 여유 시간이 남을 때 취미로 만들어 왔습니다. 매번 원신이 업데이트 될 때 마다 기능과 변경된 데이터를 반영하겠습니다, 제가 원신을 탐험하거나 효율적으로 플레이하는 걸 좋아하거든요.",
"제게 후원하시면, 여러분의 후원은 이 사이트를 발전시키고, 제게 이 사이트에 더 많은 기능을 추가할 동기를 부여할 겁니다! 정말 감사하고, 즐겨주세요. 마음에 드셨으면 좋겠습니다!",
"코딩을 좋아하신다면, 이 프로젝트에 기여할 수도 있습니다."
],
"kofi": "Ko-fi를 통해 후원하기",
"trakteer": "Trakteer를 통해 후원하기",
"crypto": "암호화폐를 통해 후원하기"
},
"reminder": {
"notSupported": "현재 브라우저가 푸쉬 알림을 지원하지 않습니다, 다른 브라우저에서 시도해주세요!",
"blocked": "알람이 차단되었습니다, 리마인더 알림이 작동하지 않을 겁니다! 현재 브라우저의 알림을 활성화해주세요.",
"desktop": "데스크탑 환경의 브라우저는 현재 브라우저가 실행중이 아니면 알림을 받을 수 없습니다!",
"early": "사이트에서 알림을 전송하는 방식에 따라, 알림은 약 1-10분 일찍 나타납니다.",
"allowNotification": "알림 표시 권한을 허용해주세요!",
"transformer": "매개 변수 변환기 리마인더",
"last": "언제 마지막으로 매개 변수 변환기를 사용했는지 입력해주세요",
"lastHoyolab": "출석 체크 알림을 받길 원하는 시각을 입력해주세요",
"every": "매일",
"countdown": "다음 매개 변수 변환기 사용 가능 시각까지 카운트 다운 할 시간을 입력해주세요 (정확한 시간을 기억하지 못하신다면, 추정해서 입력하셔야 합니다)",
"useLast": "마지막 사용 시각 입력하기",
"useCountdown": "카운트 다운 방식 사용하기",
"set": "리마인더 설정",
"checking": "저장된 리마인더 확인 중...",
"errorSelect": "남은 일수와 시간을 입력해주세요!",
"errorSaving": "리마인더를 저장하는 과정에서 문제가 발생했습니다 🙁",
"current": "현재 리마인더",
"hoyolab": "Hoyolab 출석 체크 리마인더",
"comingsoon": "잠시 후!"
},
"achievement": {
"title": "업적",
"of": "/"
}
}

View File

@ -19,7 +19,7 @@
"Tartaglia"
],
"summoned": "Призывов",
"percentage": "из всех",
"percentage": "из всех {rarity}",
"avg": "Среднее число молитв",
"subtitle": "Рассчитано по информации от {user} пользователей paimon.moe",
"detail": "Глобальная статистика молитв"
@ -201,10 +201,8 @@
"howto": {
"title": "Как использовать ручной ввод",
"subtitle": "После 1 молитвы:",
"press": "Нажмите",
"whenYouGet": "когда вы получили",
"p1": "Это автоматически добавит его в счетчик молитв за все время,",
"и": "и",
"pressWhenYouGet": "Нажмите {button} когда вы получили {rarity}★",
"p1": "Это автоматически добавит его в счетчик молитв за все время, 5★, и 4★ Гарант",
"p2": [
"Когда",
"гарант достигнет 10, он автоматически сбросится до 0"
@ -269,7 +267,7 @@
"titleWeapon": "Оружейный калькулятор",
"titleCharacter": "Калькулятор персонажей",
"titleResin": "Калькулятор смолы",
"goto": "Перейти в",
"goto": "Перейти в {where}",
"howToUse": "Как использовать",
"guide": {
"clickToMaximize": "Нажмите на изображения для увеличения",

View File

@ -97,8 +97,7 @@
<div class="flex flex-wrap items-start pl-2">
<p class="text-white mr-4 leading-4">
<span class="font-semibold">{item.percentage}%</span>
{$t('home.banner.percentage')}
{item.rarity === 'legendary' ? '5' : '4'}
{$t('home.banner.percentage', { values: { rarity: item.rarity === 'legendary' ? '5★' : '4★' } })}
</p>
<p class="text-white leading-4">{$t('home.banner.avg')} <span class="font-semibold">{item.average}</span></p>
</div>

View File

@ -120,11 +120,7 @@
/>
<p class="text-white text-center">
{$t('calculator.resin.currentTime')}:
{#if $t('calculator.resin.timeFormat') === 'en'}
{currentTime.locale('en').format('dddd HH:mm:ss')}
{:else}
{currentTime.locale('id').format('dddd HH:mm:ss')}
{/if}
{currentTime.locale($t('calculator.resin.timeFormat')).format('dddd HH:mm:ss')}
</p>
</div>
<div class="md:col-span-1 xl:col-span-2">
@ -188,11 +184,7 @@
<tr>
<td class="text-red-400" colspan="2">
{$t('calculator.resin.fullTime')}:
{#if $t('calculator.resin.timeFormat') === 'en'}
{fullTime.locale('en').format('dddd HH:mm:ss')} ({fullTime.locale('en').fromNow()})
{:else}
{fullTime.locale('id').format('dddd HH:mm:ss')} ({fullTime.locale('id').fromNow()})
{/if}
{fullTime.locale($t('calculator.resin.timeFormat')).format('dddd HH:mm:ss')} ({fullTime.locale($t('calculator.resin.timeFormat')).fromNow()})
</td>
</tr>
</table>

View File

@ -46,15 +46,9 @@
<img src={originalResin.image} alt={originalResin.label} class="h-6 w-6 inline" /></td
>
<td class="pr-2 text-white text-center">
{#if $t('calculator.resin.timeFormat') === 'en'}
{dayjs(new Date(stepTime[i + 1]))
.locale('en')
.locale($t('calculator.resin.timeFormat'))
.fromNow()}
{:else}
{dayjs(new Date(stepTime[i + 1]))
.locale('id')
.fromNow()}
{/if}
</td>
</tr>
{/each}

View File

@ -69,8 +69,7 @@
>
<Button on:click={() => findPos('character')}>
<Icon size={0.8} path={mdiArrowDown} />
{$t('calculator.goto')}
{$t('calculator.titleCharacter')}
{$t('calculator.goto', { values: { where: $t('calculator.titleCharacter') } })}
</Button>
<h1
@ -86,13 +85,11 @@
>
<Button on:click={() => findPos('weapon')}>
<Icon size={0.8} path={mdiArrowUp} />
{$t('calculator.goto')}
{$t('calculator.titleWeapon')}
{$t('calculator.goto', { values: { where: $t('calculator.titleWeapon') } })}
</Button>
<Button className="md:mt-0 md:mr-4 mt-4" on:click={() => findPos('resin')}>
<Icon size={0.8} path={mdiArrowDown} />
{$t('calculator.goto')}
{$t('calculator.titleResin')}
{$t('calculator.goto', { values: { where: $t('calculator.titleResin') } })}
</Button>
<h1
class="font-display font-black text-center mt-2 md:mt-0 md:mr-2 xl:mr-8 text-3xl lg:text-left lg:text-5xl text-white"
@ -107,8 +104,7 @@
>
<Button on:click={() => findPos('character')}>
<Icon size={0.8} path={mdiArrowUp} />
{$t('calculator.goto')}
{$t('calculator.titleCharacter')}
{$t('calculator.goto', { values: { where: $t('calculator.titleCharacter') } })}
</Button>
<h1
class="font-display font-black text-center mt-2 md:mt-0 md:mr-2 xl:mr-8 text-3xl lg:text-left lg:text-5xl text-white"

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg82" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="512" width="512" version="1" y="0" x="0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata5213">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="flag">
<rect style="fill:#FFFFFF;" y="0" x="0" width="512.0" height="512.0"/>
<path style="fill:#D80027;" d="M350.445,256c0,23.611-42.285,82.639-94.445,82.639S161.555,279.611,161.555,256
c0-52.161,42.285-94.445,94.445-94.445S350.445,203.839,350.445,256z"/>
<path style="fill:#0052B4;" d="M350.445,256c0,52.161-42.285,94.445-94.445,94.445S161.555,308.161,161.555,256"/>
<rect x="359.346" y="323.512" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -126.6671 364.829)" width="35.417" height="23.607"/>
<rect x="317.608" y="365.247" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -168.4038 347.5395)" width="35.416" height="23.607"/>
<rect x="409.434" y="373.576" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -147.3977 414.9103)" width="35.417" height="23.607"/>
<rect x="367.696" y="415.334" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -189.1502 397.6272)" width="35.416" height="23.607"/>
<rect x="384.391" y="348.543" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -137.032 389.8698)" width="35.416" height="23.607"/>
<rect x="342.652" y="390.291" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -178.777 372.5833)" width="35.416" height="23.607"/>
<rect x="333.994" y="118.967" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 558.3055 492.7982)" width="94.441" height="23.607"/>
<rect x="317.609" y="123.137" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 477.0044 467.464)" width="35.417" height="23.607"/>
<rect x="359.337" y="164.879" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 518.7222 568.2271)" width="35.416" height="23.607"/>
<rect x="367.672" y="73.062" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 597.8773 417.3795)" width="35.417" height="23.607"/>
<rect x="409.423" y="114.792" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 639.6409 518.1393)" width="35.416" height="23.607"/>
<rect x="58.512" y="394.466" transform="matrix(0.7071 0.7071 -0.7071 0.7071 318.2447 44.2295)" width="94.441" height="23.607"/>
<rect x="133.929" y="390.285" transform="matrix(0.7071 0.7071 -0.7071 0.7071 328.7331 10.545)" width="35.417" height="23.607"/>
<rect x="92.197" y="348.548" transform="matrix(0.7071 0.7071 -0.7071 0.7071 286.9978 27.8293)" width="35.418" height="23.607"/>
<rect x="108.603" y="344.383" transform="matrix(0.7071 0.7071 -0.7071 0.7071 297.5015 -5.8596)" width="94.441" height="23.607"/>
<rect x="58.513" y="93.932" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 255.2646 105.7379)" width="94.441" height="23.607"/>
<rect x="83.553" y="118.979" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 315.7209 130.7894)" width="94.441" height="23.607"/>
<rect x="108.596" y="144.022" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 376.1802 155.8332)" width="94.441" height="23.607"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB