diff --git a/web/i18n/ko/a11y/dialog.json b/web/i18n/ko/a11y/dialog.json
new file mode 100644
index 00000000..fdd703ec
--- /dev/null
+++ b/web/i18n/ko/a11y/dialog.json
@@ -0,0 +1,5 @@
+{
+ "picker.item.photo": "사진 썸네일",
+ "picker.item.video": "동영상 썸네일",
+ "picker.item.gif": "GIF 썸네일"
+}
diff --git a/web/i18n/ko/a11y/donate.json b/web/i18n/ko/a11y/donate.json
new file mode 100644
index 00000000..4f4091f8
--- /dev/null
+++ b/web/i18n/ko/a11y/donate.json
@@ -0,0 +1,4 @@
+{
+ "share.qr.expand": "QR 코드. 눌러서 펼치세요.",
+ "share.qr.collapse": "펼친 QR 코드. 눌러서 접으세요."
+}
diff --git a/web/i18n/ko/a11y/general.json b/web/i18n/ko/a11y/general.json
new file mode 100644
index 00000000..0cb8e97c
--- /dev/null
+++ b/web/i18n/ko/a11y/general.json
@@ -0,0 +1,3 @@
+{
+ "back": "뒤로"
+}
diff --git a/web/i18n/ko/a11y/save.json b/web/i18n/ko/a11y/save.json
new file mode 100644
index 00000000..c8df937f
--- /dev/null
+++ b/web/i18n/ko/a11y/save.json
@@ -0,0 +1,13 @@
+{
+ "link_area": "링크 입력 영역.",
+ "link_area.turnstile": "링크 입력 영역. 로봇이 아닌지 확인 중입니다.",
+ "clear_input": "입력 지우기",
+ "download": "다운로드",
+ "download.think": "링크 다운로드 중...",
+ "download.check": "다운로드 확인 중...",
+ "download.done": "다운로드 완료",
+ "download.error": "다운로드 오류",
+
+ "tutorial.shortcut.photos": "사진에 추가 단축어",
+ "tutorial.shortcut.files": "파일에 추가 단축어"
+}
diff --git a/web/i18n/ko/a11y/tabs.json b/web/i18n/ko/a11y/tabs.json
new file mode 100644
index 00000000..4eb6159f
--- /dev/null
+++ b/web/i18n/ko/a11y/tabs.json
@@ -0,0 +1,3 @@
+{
+ "tab_panel": "탭 패널"
+}
diff --git a/web/i18n/ko/about.json b/web/i18n/ko/about.json
new file mode 100644
index 00000000..a52bb93f
--- /dev/null
+++ b/web/i18n/ko/about.json
@@ -0,0 +1,34 @@
+{
+ "page.general": "cobalt가 무엇인가요?",
+ "page.faq": "자주 묻는 질문",
+
+ "page.community": "커뮤니티 및 지원",
+
+ "page.privacy": "개인정보 처리 정책",
+ "page.terms": "정책과 윤리 규정",
+ "page.credits": "감사 인사 & 라이선스",
+
+ "heading.general": "기본 약관",
+ "heading.licenses": "라이선스",
+ "heading.summary": "좋아하는 것을 저장하는 가장 쉬운 방법",
+ "heading.privacy": "개인정보 보호",
+ "heading.community": "열린 커뮤니티",
+ "heading.local": "기기 내에서 처리",
+ "heading.saving": "저장",
+ "heading.encryption": "암호화",
+ "heading.plausible": "익명 트래픽 분석",
+ "heading.cloudflare": "개인 정보 및 보안",
+ "heading.responsibility": "사용자 책임",
+ "heading.abuse": "악용 사례 신고",
+ "heading.motivation": "동기",
+ "heading.testers": "베타 테스터",
+
+ "support.github": "cobalt의 소스 코드를 확인하거나, 기여하거나, 문제를 알려주세요",
+ "support.discord": "커뮤니티에서 대화를 나누거나 개발자에게 질문하세요",
+ "support.twitter": "cobalt의 개발과 새로운 기능을 트위터 타임라인에서 확인하세요",
+ "support.telegram": "텔레그램 채널에서 cobalt의 새로운 기능을 빠르게 확인하세요",
+
+ "support.description.issue": "버그나 기타 문제는 깃허브에서 보고할 수 있습니다",
+ "support.description.help": "기타 질문은 디스코드를 사용해주세요. #cobalt-support에서 문제를 명확히 설명해주세요.",
+ "support.description.best-effort": "모든 지원은 최선을 다해 제공되지만 보장되지 않으며, 답변에 시간이 걸릴 수 있습니다."
+}
diff --git a/web/i18n/ko/about/credits.md b/web/i18n/ko/about/credits.md
new file mode 100644
index 00000000..6a88b39e
--- /dev/null
+++ b/web/i18n/ko/about/credits.md
@@ -0,0 +1,60 @@
+
+
+
+
+
+cobalt는 [imput](https://imput.net/)의 연구 개발 팀이 사랑과 정성을 담아 만들었습니다.
+
+[기부](/donate) 페이지에서 지원하실 수 있습니다.
+
+
+
+
+
+공식 cobalt 인스턴스를 테스트하는 데 도움을 주신 테스터들에게 감사드립니다.
+
+
+모든 링크는 외부이며 개인 웹사이트 또는 소셜 미디어로 연결됩니다.
+
+
+
+
+
+meowbalt는 cobalt의 빠른 마스코트입니다. 그는 빠른 인터넷을 사랑하는 매우 표현력이 풍부한 고양이입니다.
+
+cobalt에서 볼 수 있는 모든 마스코트 그림은 [GlitchyPSI](https://glitchypsi.xyz/)가 디자인하고 제작하였습니다.
+
+그의 명시적 허가 없이는 meowbalt의 작품을 사용하거나 수정할 수 없습니다.
+
+meowbalt 캐릭터 디자인은 상업적 목적으로 사용하거나 판매할 수 없으며 팬아트 이외의 형태로도 사용할 수 없습니다.
+
+
+
+
+
+cobalt 처리 서버는 [AGPL-3.0]({docs.apiLicense}) 라이선스로 오픈 소스입니다.
+
+cobalt 프론트엔드는 [CC-BY-NC-SA 4.0]({docs.webLicense}) 라이선스로 [source first](https://sourcefirst.com/)입니다.
+이 라이선스는 거짓 클론을 만들어 사람들을 속이고 공공 이미지를 해치는 거짓말꾼들로부터 우리 작업을 보호하기 위해 사용되었습니다.
+
+저희는 여러 오픈 소스 라이브러리를 사용하며 자체적으로 만들고 배포합니다.
+[github]({contacts.github})에서 모든 의존성을 확인할 수 있습니다.
+
diff --git a/web/i18n/ko/about/general.md b/web/i18n/ko/about/general.md
new file mode 100644
index 00000000..82ededcc
--- /dev/null
+++ b/web/i18n/ko/about/general.md
@@ -0,0 +1,76 @@
+
+
+
+
+
+cobalt는 좋아하는 웹사이트에서 뭐든지 저장할 수 있도록 도와줍니다: 동영상, 오디오, 사진 또는 GIF. 링크를 복사하고 바로 시작하세요!
+
+광고, 추적기, 결제, 또는 기타 그러한 것이 없습니다. 그저 어디서나 작동하는 편리한 웹 앱입니다.
+
+
+
+
+
+cobalt는 모두의 이익을 위해 만들어졌으며, 기존 방법들이 제공하는 광고와 악성코드로부터 사람들을 보호하기 위해 탄생했습니다
+저희는 최고의 소프트웨어는 안전하고, 개방적이며, 접근성이 좋아야 한다고 믿습니다.
+
+[royalehosting.net]({partners.royalehosting})의 도움으로 메인 인스턴스를 계속 운영할 수 있습니다!
+
+
+
+
+
+모든 요청은 익명이며 터널에 대한 모든 정보는 암호화됩니다.
+저희는 엄격한 로그 정책을 가지고 있으며 사용자의 어느 것도 추적하지 않습니다.
+
+요청이 추가 처리를 필요로 할 때, cobalt은 즉시 파일을 처리합니다.
+이는 파일을 디스크에 저장하지 않고 클라이언트로 직접 처리된 부분을 터널링하는 방법을 사용합니다.
+예를 들어, 이 방법은 서비스가 비디오와 오디오 채널을 별도의 파일로 제공할 때 사용됩니다.
+
+또한, [강제 터널링](/settings/privacy#tunnel)을 통해 개인 정보를 보호할 수 있습니다.
+강제 터널링을 활성화하면 cobalt은 다운로드한 모든 파일을 터널링합니다.
+네트워크 제공자도 당신이 어디에서 다운로드를 받는지 알 수 없으며, cobalt 인스턴스를 사용하고 있다는 것뿐만 알 수 있습니다.
+
+
+
+
+
+
+
+최근 기능, 예를 들어 [remux](/remux)는 귀하의 기기에서 로컬로 작동합니다.
+기기에서 처리는 효율적이며 인터넷을 통해 아무것도 보내지 않습니다.
+이는 클라이언트로 가능한 많은 처리를 이동하는 미래 목표와 완벽하게 맞아떨어집니다.
+
diff --git a/web/i18n/ko/about/privacy.md b/web/i18n/ko/about/privacy.md
new file mode 100644
index 00000000..b393ad41
--- /dev/null
+++ b/web/i18n/ko/about/privacy.md
@@ -0,0 +1,76 @@
+
+
+
+
+
+cobalt의 개인정보 처리 정책은 간단합니다: 저희는 귀하의 어떤 것도 추적하거나 저장하지 않습니다.
+
+이하 약관은 공식 cobalt 인스턴스를 사용할 때만 적용됩니다. 이외에는 인스턴스 운영자에게 연락해 정확한 정보를 확인해주세요.
+
+
+
+
+
+기기 내 처리를 사용하는 도구는 오프라인으로 작동하며 어디로도 데이터를 보내지 않습니다. 이에 해당되는 경우 항상 표시됩니다.
+
+
+
+
+
+저장 기능을 사용할 때, 일부 경우 cobalt는 터널링에 필요한 정보를 암호화하고 임시로 저장합니다. 이는 처리 서버의 RAM에 90초 동안 저장되며 그 후 영구적으로 삭제됩니다. 공식 cobalt 이미지를 수정하지 않는 한 인스턴스 소유자도 접근할 수 없습니다.
+
+처리/터널링된 파일은 어디에도 캐시되지 않습니다. 모든 것은 실시간으로 터널링됩니다. cobalt의 저장 기능은 별도의 프록시 서비스입니다.
+
+
+
+
+
+임시 저장된 터널 데이터는 AES-256을 사용해 암호화됩니다. 복호화 키는 접근 링크에만 포함되며 어디에도 저장되지 않습니다. 최종 사용자만 링크 및 복호화 키에 접근할 수 있습니다. 각 요청에 대해 고유하게 생성됩니다.
+
+
+{#if env.PLAUSIBLE_ENABLED}
+
+
+
+개인정보 보호를 위해 [plausible의 익명 트래픽 분석](https://plausible.io/)을 사용해 활동 중인 cobalt 사용자 수를 분석합니다. 귀하 또는 귀하의 요청에 대한 식별 가능한 정보는 절대 저장되지 않습니다. 모든 데이터는 익명화되고 집계됩니다. 사용하는 plausible 인스턴스는 저희에 의해 호스팅 및 관리됩니다.
+
+plausible는 쿠키를 사용하지 않으며 GDPR, CCPA 및 PECR와 완전히 호환됩니다.
+
+[plausible의 개인정보 보호에 대해 더 알아보세요.](https://plausible.io/privacy-focused-web-analytics)
+
+익명 분석을 거부하고 싶다면 개인정보 설정에서 설정할 수 있습니다.
+
+{/if}
+
+
+
+
+DDoS 및 봇 보호를 위해 cloudflare 서비스를 사용합니다. 또한 정적 웹 앱을 배포 및 호스팅하기 위해 cloudflare pages를 사용합니다. 이들은 모두 모두 최고의 경험을 제공하기 위해 필요합니다. 이는 저희가 알고 있는 가장 개인정보 보호 및 신뢰할 수 있는 공급자입니다.
+
+cloudflare는 GDPR 및 HIPAA와 완전히 호환됩니다.
+
+[cloudflare의 개인정보 보호에 대해 더 알아보세요.](https://www.cloudflare.com/trust-hub/privacy-and-data-protection/)
+
diff --git a/web/i18n/ko/about/terms.md b/web/i18n/ko/about/terms.md
new file mode 100644
index 00000000..c9b9441e
--- /dev/null
+++ b/web/i18n/ko/about/terms.md
@@ -0,0 +1,56 @@
+
+
+
+
+
+이하 약관은 공식 cobalt 인스턴스를 사용할 때만 적용됩니다. 이외에는 인스턴스 운영자에게 연락해 정확한 정보를 확인해주세요.
+
+
+
+
+
+저장 기능은 인터넷에서 콘텐츠를 다운로드하는 과정을 단순화하며, 저장된 콘텐츠의 사용 목적에 대해서는 어떠한 책임도 지지 않습니다.
+처리 서버는 고급 프록시처럼 작동하며 디스크에 어떠한 콘텐츠도 기록하지 않습니다.
+모든 처리는 RAM에서 이루어지며 터널이 종료되면 영구적으로 삭제됩니다.
+다운로드 기록을 보관하지 않으며 사용자를 식별할 수 없습니다.
+
+[터널 작동 방식에 대해 더 알아보세요.](/about/privacy)
+
+
+
+
+
+귀하(최종 사용자)는 우리의 도구를 어떻게 사용하고, 결과물을 어떻게 사용하고 배포하는지에 대한 책임이 있습니다.
+다른 사람의 콘텐츠를 사용할 때는 신중을 기하고 원작자의 공로를 항상 인정해주세요.
+모든 약관과 라이선스를 위반하지 않도록 주의하세요.
+
+교육 목적으로 사용할 때는 항상 출처를 인용하고 원작자의 공로를 인정해주세요.
+
+공정한 사용과 저작권 표시는 모두에게 이롭습니다.
+
+
+
+
+
+cobalt는 100% 익명이기 때문에 악용 행위를 자동으로 감지할 방법이 없습니다.
+하지만 이러한 활동을 신고해주시면 수동으로 최선을 다해 대응하겠습니다: **safety@imput.net**
+
+**이 이메일은 사용자 지원을 위한 것이 아니며, 악용과 관련되지 않은 문의에는 답변하지 않습니다.**
+
+문제가 있으시다면 [지원 페이지](/about/community)에서 원하시는 방법으로 연락해주세요.
+
diff --git a/web/i18n/ko/button.json b/web/i18n/ko/button.json
new file mode 100644
index 00000000..6698d0c6
--- /dev/null
+++ b/web/i18n/ko/button.json
@@ -0,0 +1,20 @@
+{
+ "gotit": "확인",
+ "cancel": "취소",
+ "reset": "리셋",
+ "done": "완료",
+ "download.audio": "오디오 다운로드",
+ "download": "다운로드",
+ "share": "공유",
+ "copy": "복사",
+ "copy.section": "섹션 링크 복사하기",
+ "copied": "복사됨",
+ "import": "불러오기",
+ "continue": "계속",
+ "star": "스타",
+ "follow": "팔로우",
+ "save": "저장",
+ "export": "내보내기",
+ "yes": "예",
+ "no": "아니오"
+}
diff --git a/web/i18n/ko/dialog.json b/web/i18n/ko/dialog.json
new file mode 100644
index 00000000..af084e29
--- /dev/null
+++ b/web/i18n/ko/dialog.json
@@ -0,0 +1,25 @@
+{
+ "reset.title": "모든 데이터를 초기화할까요?",
+ "reset.body": "정말로 모든 데이터를 초기화할까요? 이 작업은 즉각적이며 되돌릴 수 없습니다.",
+
+ "picker.title": "저장할 항목을 선택하세요",
+ "picker.description.desktop": "항목을 눌러 저장하세요. 오른쪽 클릭 메뉴를 통해 이미지도 저장할 수 있습니다.",
+ "picker.description.phone": "항목을 눌러 저장하세요. 길게 눌러 이미지도 저장할 수 있습니다.",
+ "picker.description.ios": "항목을 눌러 단축어로 저장하세요. 길게 눌러 이미지도 저장할 수 있습니다.",
+
+ "saving.title": "저장할 방법을 선택하세요",
+ "saving.blocked": "새 탭에서 파일을 열려 했지만 브라우저가 차단했습니다. cobalt의 팝업을 허용해 방지할 수 있습니다.",
+ "saving.timeout": "파일을 자동으로 저장하려 했지만 브라우저가 차단했습니다. 선호하는 저장 방법을 수동으로 지정해 주세요.",
+
+ "safety.title": "중요한 보안 안내",
+
+ "import.body": "알 수 없거나 손상된 파일을 불러오면 cobalt의 기능이 예기치 않게 변경되거나 손상될 수 있습니다. 직접 내보내고 수정되지 않은 파일만 불러오세요. 다른 사람이 파일을 불러오라고 요청했다면 하지 마세요.\n\n알 수 없는 설정 파일을 불러오면서 발생하는 피해에 대해 책임지지 않습니다.",
+
+ "api.override.title": "처리 인스턴스 덮어쓰기",
+ "api.override.body": "{{ value }}이 처리 인스턴스로 사용됩니다. 신뢰하지 않는다면 \"취소\"를 눌러 취소하세요.\n\n나중에 처리 설정에서 변경할 수 있습니다.",
+
+ "safety.custom_instance.body": "사용자 지정 인스턴스는 개인정보 및 보안 문제를 야기할 수 있습니다.\n\n악성 인스턴스는:\n1. cobalt 밖으로 이동해 사기를 칠 수 있습니다.\n2. 모든 요청 정보를 기록하고 저장하여 사용자를 추적할 수 있습니다.\n3. 악성코드와 같은 유해한 파일을 제공할 수 있습니다.\n4. 광고를 보게 하거나 다운로드에 비용을 청구할 수 있습니다.\n\n이 시점부터는 저희가 보호해드릴 수 없습니다. 어떤 인스턴스를 사용할지 신중히 결정하세요. 무언가 수상하다면 이 페이지로 돌아와서 사용자 지정 인스턴스를 초기화하고 깃허브에 신고해 주세요.",
+
+ "processing.ongoing": "cobalt가 현재 이 탭에서 미디어를 처리 중입니다. 떠나면 취소됩니다. 그래도 계속하시겠습니까?",
+ "processing.title.ongoing": "처리가 취소됩니다"
+}
diff --git a/web/i18n/ko/donate.json b/web/i18n/ko/donate.json
new file mode 100644
index 00000000..33fa2f59
--- /dev/null
+++ b/web/i18n/ko/donate.json
@@ -0,0 +1,37 @@
+{
+ "banner.title": "안전하고 개방적인 인터넷을 지원하세요",
+ "banner.subtitle": "imput에 기부하거나 친구에게 cobalt를 알려주세요",
+
+ "body.motivation": "셀 수 없이 많은 아티스트, 교육자, 콘텐츠 크리에이터들이 cobalt을 사용합니다. cobalt의 목적은 금전적 이익이 아닙니다.",
+ "body.no_bullshit": "우리는 인터넷이 두렵지 않아도 된다고 믿습니다. 그래서 cobalt는 절대로 광고나 다른 종류의 악성 콘텐츠를 포함하지 않을 것입니다. 이것은 우리가 굳건히 지키는 약속입니다. 우리가 하는 모든 일은 개인정보 보호, 접근성, 사용 편의성을 고려하여 만들어져 모든 사람이 cobalt를 이용할 수 있게 합니다.",
+ "body.keep_going": "cobalt가 유용하다고 생각하신다면 저희 작업을 지원해주세요! 기부를 하거나 친구에게 cobalt를 공유하는 것으로 도움을 주실 수 있습니다. 모든 기부는 매우 감사하게 생각하며 cobalt와 다른 프로젝트를 계속 진행하는 데 도움이 됩니다.",
+
+ "card.once": "일회성 기부",
+ "card.recurring": "반복 기부",
+ "card.custom": "사용자 지정 금액 (최소 $2)",
+
+ "card.processor": "{{value}}로",
+
+ "card.option.5": "커피 한 잔",
+ "card.option.10": "피자 한 판",
+ "card.option.15": "점심 한 끼",
+ "card.option.30": "점심 2인분",
+ "card.option.50": "고양이 사료 10kg",
+ "card.option.100": "1년치 도메인 비용",
+ "card.option.200": "에어프라이기",
+ "card.option.500": "멋진 사무실 의자fancy office chair",
+ "card.option.1599": "기본 맥북 프로",
+ "card.option.4900": "사과 만 개",
+ "card.option.7398": "최고급 맥북 프로",
+ "card.option.8629": "작은 땅 한 평",
+ "card.option.9433": "럭셔리 온수탕",
+
+ "card.custom.submit": "사용자 지정 금액 기부",
+
+ "share.title": "친구에게 cobalt 공유하기",
+
+ "alternative.title": "기부 대안",
+
+ "alt.copy": "{{ value }}. 복사하기.",
+ "alt.open": "{{ value }}. 열기."
+}
diff --git a/web/i18n/ko/error.json b/web/i18n/ko/error.json
new file mode 100644
index 00000000..9bb31859
--- /dev/null
+++ b/web/i18n/ko/error.json
@@ -0,0 +1,55 @@
+{
+ "import.no_data": "파일에서 불러올 데이터가 없습니다. 올바른 파일인지 확인해주세요.",
+ "import.invalid": "파일에 가져올 수 있는 유효한 Cobalt 설정이 없습니다. 올바른 파일인지 확인해주세요.",
+ "import.unknown": "파일에서 데이터를 불러올 수 없습니다. 파일이 손상되었거나 잘못된 형식일 수 있습니다. 오류 내용:\n\n{{ value }}",
+
+ "remux.corrupted": "이 파일의 메타데이터를 읽을 수 없습니다. 파일이 손상되었을 수 있습니다.",
+ "remux.out_of_resources": "Cobalt가 리소스 부족으로 기기 내 처리를 계속할 수 없습니다. 이는 브라우저 측의 제한과 관련이 있습니다. 새로고침하거나 앱을 다시 열어 시도해보세요. 일부 기기는 아주 작은 파일만 처리할 수 있습니다.",
+
+ "tunnel.probe": "파일을 다운로드할 수 있는지 확인할 수 없습니다. 잠시 후 다시 시도해주세요!",
+
+ "captcha_ongoing": "봇이 아닌지 확인 중입니다. 스피너가 사라질 때까지 기다렸다가 다시 시도해주세요.\n\n너무 오래 걸리면 알려주세요! 봇 보호를 위해 Cloudflare Turnstile을 사용하는데, 가끔 정상적인 사용자를 차단하기도 합니다.",
+
+ "api.auth.jwt.missing": "처리 서버가 사용자 인증 토큰을 받지 못해 봇이 아닌지 확인할 수 없습니다. 잠시 후 다시 시도하거나 페이지를 새로고침해주세요!",
+ "api.auth.jwt.invalid": "사용자 인증 토큰이 만료되고 갱신되지 않아 봇이 아닌지 확인할 수 없습니다. 잠시 후 다시 시도하거나 페이지를 새로고침해주세요!",
+ "api.auth.turnstile.missing": "처리 서버가 사용자 인증 토큰을 받지 못해 봇이 아닌지 확인할 수 없습니다. 잠시 후 다시 시도하거나 페이지를 새로고침해주세요!",
+ "api.auth.turnstile.invalid": "사용자 인증 토큰이 만료되고 갱신되지 않아 봇이 아닌지 확인할 수 없습니다. 잠시 후 다시 시도하거나 페이지를 새로고침해주세요!",
+
+ "api.unreachable": "처리 서버에 연결할 수 없습니다. 인터넷 연결을 확인하고 다시 시도해주세요.",
+ "api.timed_out": "처리 서버의 응답 시간이 너무 깁니다. 현재 서버가 과부하 상태일 수 있으니 잠시 후 다시 시도해주세요!",
+ "api.rate_exceeded": "요청이 너무 많습니다. {{ limit }}초 후에 다시 시도해주세요!",
+ "api.capacity": "Cobalt가 현재 용량 한계에 도달하여 요청을 처리할 수 없습니다. 잠시 후 다시 시도해주세요. 계속 작동하지 않으면 알려주시면 도와드리도록 하겠습니다!",
+
+ "api.generic": "문제가 발생하여 요청을 처리할 수 없습니다. 잠시 후 다시 시도해주시고, 문제가 지속되면 알려주시면 도와드리도록 하겠습니다!",
+ "api.unknown_response": "서버의 응답을 해석할 수 없습니다. 버전 불일치로 인한 문제일 수 있습니다. Cobalt의 최신 버전을 사용하고 계신가요?",
+
+ "api.service.unsupported": "아직 지원되지 않는 서비스입니다. 올바른 링크를 붙여넣으셨나요?",
+ "api.service.disabled": "이 서비스는 Cobalt에서 지원하지만, 이 인스턴스에서는 비활성화되어 있습니다. 다른 서비스의 링크를 시도해보세요!",
+
+ "api.link.invalid": "링크가 유효하지 않거나 아직 지원되지 않는 서비스입니다. 올바른 링크를 붙여넣으셨나요?",
+ "api.link.unsupported": "{{ service }}는 지원되지만, 링크를 인식할 수 없습니다. 올바른 링크를 붙여넣으셨나요?",
+
+ "api.fetch.fail": "{{ service }}에서 정보를 가져오는 중 문제가 발생했습니다. 잠시 후 다시 시도해주세요. 문제가 계속되면 알려주시면 도와드리겠습니다!",
+ "api.fetch.critical": "{{ service }} 모듈이 인식할 수 없는 오류를 반환했습니다. 잠시 후 다시 시도해주시고, 문제가 지속되면 알려주세요!",
+ "api.fetch.empty": "다운로드할 수 있는 미디어를 찾을 수 없습니다. 올바른 링크를 붙여넣으셨나요?",
+ "api.fetch.rate": "Cobalt 처리 서버가 {{ service }} API에 의해 속도 제한되었습니다. 잠시 후 다시 시도해주세요!",
+ "api.fetch.short_link": "단축 링크에서 정보를 가져올 수 없습니다. 링크가 작동하는지 확인해주세요. 링크가 작동하는데도 이 오류가 발생하면 알려주시면 도와드리도록 하겠습니다!",
+
+ "api.content.too_long": "요청하신 미디어가 너무 깁니다. 현재 길이 제한은 {{ limit }}분입니다. 더 짧은 것을 시도해보세요!",
+
+ "api.content.video.unavailable": "이 동영상에 접근할 수 없습니다. {{ service }} 측에서 제한되었을 수 있습니다. 올바른 링크를 붙여넣으셨나요?",
+ "api.content.video.live": "이 동영상은 현재 라이브 중이라 다운로드할 수 없습니다. 라이브 스트리밍이 끝난 후 다시 시도해주세요!",
+ "api.content.video.private": "이 동영상은 비공개이므로 접근할 수 없습니다. 공개 설정을 변경하거나 다른 동영상을 시도해보세요!",
+ "api.content.video.age": "이 동영상은 연령 제한이 있어 익명으로 접근할 수 없습니다. 다른 동영상을 시도해보세요!",
+ "api.content.video.region": "이 동영상은 지역 제한이 있고 처리 서버가 다른 지역에 있습니다. 다른 동영상을 시도해보세요!",
+
+ "api.content.post.unavailable": "이 게시물에 대한 정보를 찾을 수 없습니다. 공개 범위가 제한되어 있거나 존재하지 않을 수 있습니다. 링크가 작동하는지 확인하고 잠시 후 다시 시도해주세요!",
+ "api.content.post.private": "이 게시물은 비공개 계정의 것이라 접근할 수 없습니다. 올바른 링크를 붙여넣으셨나요?",
+ "api.content.post.age": "이 게시물은 연령 제한이 있어 익명으로 접근할 수 없습니다. 올바른 링크를 붙여넣으셨나요?",
+
+ "api.youtube.codec": "유튜브가 선호하는 비디오 코덱으로 된 콘텐츠를 반환하지 않았습니다. 설정에서 다른 코덱을 시도해보세요!",
+ "api.youtube.decipher": "유튜브가 복호화 알고리즘을 업데이트하여 동영상 정보를 추출할 수 없습니다.\n\n잠시 후 다시 시도해보시고, 문제가 지속되면 지원을 요청해주세요.",
+ "api.youtube.login": "유튜브가 봇으로 인식하여 동영상을 가져올 수 없습니다. 처리 인스턴스에 활성 계정 토큰이 없어서 발생했을 수 있습니다. 잠시 후 다시 시도해보시고, 계속 작동하지 않으면 인스턴스 관리자에게 이 오류를 알려주세요!",
+ "api.youtube.token_expired": "유튜브 토큰이 만료되고 갱신할 수 없어서 동영상을 가져올 수 없습니다. 잠시 후 다시 시도해보시고, 계속 작동하지 않으면 인스턴스 관리자에게 이 오류를 알려주세요!",
+ "api.youtube.no_hls_streams": "일치하는 HLS 스트림을 찾을 수 없습니다. 다른 설정을 시도해보세요!"
+}
diff --git a/web/i18n/ko/general.json b/web/i18n/ko/general.json
new file mode 100644
index 00000000..4d29fc93
--- /dev/null
+++ b/web/i18n/ko/general.json
@@ -0,0 +1,7 @@
+{
+ "cobalt": "cobalt",
+ "meowbalt": "meowbalt",
+ "beta": "베타",
+
+ "embed.description": "좋아하는 것을 광고, 트래커, 결제 없이 저장하세요. cobalt는 imput의 사랑과 정성이 담긴 진정한 열린 웹 앱입니다."
+}
diff --git a/web/i18n/ko/notification.json b/web/i18n/ko/notification.json
new file mode 100644
index 00000000..cec8bc9a
--- /dev/null
+++ b/web/i18n/ko/notification.json
@@ -0,0 +1,4 @@
+{
+ "update.title": "업데이트가 있습니다!",
+ "update.subtext": "눌러서 새로고침"
+}
diff --git a/web/i18n/ko/receiver.json b/web/i18n/ko/receiver.json
new file mode 100644
index 00000000..abcf3bff
--- /dev/null
+++ b/web/i18n/ko/receiver.json
@@ -0,0 +1,5 @@
+{
+ "title": "파일을 드래그하거나 선택하세요",
+ "title.drop": "파일을 여기에 놓으세요!",
+ "accept": "지원 포맷: {{ formats }}."
+}
diff --git a/web/i18n/ko/remux.json b/web/i18n/ko/remux.json
new file mode 100644
index 00000000..16c6520c
--- /dev/null
+++ b/web/i18n/ko/remux.json
@@ -0,0 +1,3 @@
+{
+ "description": "remux는 보통 오래된 소프트웨어와의 호환성 문제를 해결합니다. 빠르고, 무손실이며 모든 것은 기기 내에서 처리됩니다. it's fast, lossless, and everything is processed on-device."
+}
diff --git a/web/i18n/ko/save.json b/web/i18n/ko/save.json
new file mode 100644
index 00000000..581c63a8
--- /dev/null
+++ b/web/i18n/ko/save.json
@@ -0,0 +1,23 @@
+{
+ "paste": "붙여넣기",
+ "paste.long": "붙여넣기 및 다운로드",
+ "auto": "자동",
+ "audio": "오디오",
+ "mute": "음소거",
+ "input.placeholder": "여기에 링크를 붙여넣으세요",
+ "terms.note.agreement": "계속하면 동의하는 것으로 간주합니다:",
+ "terms.note.link": "사용 약관 및 윤리",
+ "services.title": "지원 서비스",
+ "services.title_show": "지원 서비스 표시",
+ "services.title_hide": "지원 서비스 숨김",
+ "services.disclaimer": "cobalt는 위에 나열된 서비스와 아무런 관련이 없습니다.",
+
+ "tutorial.title": "iOS에서 어떻게 저장하나요?",
+ "tutorial.intro": "iOS에서 편리하게 저장하려면 공유 시트에서 시리 단축어를 사용해야 합니다.",
+ "tutorial.step.1": "시리 단축어 추가:",
+ "tutorial.step.2": "cobalt의 저장 대화 상자에서 \"공유\" 버튼을 누릅니다.",
+ "tutorial.step.3": "공유 시트에서 각각의 단축어를 선택합니다.",
+ "tutorial.outro": "이 단축어는 cobalt 앱에서만 작동하며, 다른 앱에서 링크를 공유해도 작동하지 않습니다.",
+ "tutorial.shortcut.photos": "사진에",
+ "tutorial.shortcut.files": "파일에"
+}
diff --git a/web/i18n/ko/settings.json b/web/i18n/ko/settings.json
new file mode 100644
index 00000000..f840dee0
--- /dev/null
+++ b/web/i18n/ko/settings.json
@@ -0,0 +1,126 @@
+{
+ "page.appearance": "모양",
+ "page.privacy": "개인 정보",
+ "page.video": "동영상",
+ "page.audio": "오디오",
+ "page.download": "다운로드",
+ "page.advanced": "고급",
+ "page.debug": "디버그 정보",
+ "page.instances": "인스턴스",
+
+ "section.general": "일반",
+ "section.save": "저장",
+
+ "theme": "테마",
+ "theme.auto": "자동",
+ "theme.light": "라이트 모드",
+ "theme.dark": "다크 모드",
+ "theme.description": "자동을 선택하면 기기의 테마를 따라갑니다.",
+
+ "video.quality": "동영상 화질",
+ "video.quality.max": "8k+",
+ "video.quality.2160": "4k",
+ "video.quality.1440": "1440p",
+ "video.quality.1080": "1080p",
+ "video.quality.720": "720p",
+ "video.quality.480": "480p",
+ "video.quality.360": "360p",
+ "video.quality.240": "240p",
+ "video.quality.144": "144p",
+ "video.quality.description": "선택한 동영상 화질이 없으면 다음으로 좋은 화질이 선택됩니다.",
+
+ "video.youtube.codec": "youtube 코덱 및 컨테이너",
+ "video.youtube.codec.description": "h264: 최고 호환성, 평균 품질. 최대 화질 1080p. \nav1: 최고 품질 및 효율성. 8k 및 HDR 지원. \nvp9: av1과 동일한 품질, 파일 크기는 약 2배. 4k 및 HDR 지원. \nav1 및 vp9는 h264보다 널리 지원되지 않습니다. av1 또는 vp9가 없으면 h264가 사용됩니다.",
+
+ "video.youtube.hls": "youtube hls 형식",
+ "video.youtube.hls.title": "동영상 및 오디오에 hls 형식 선호",
+ "video.youtube.hls.description": "파일 다운로드 속도가 더 빠르고 오류 또는 갑자기 중단될 가능성이 적습니다. 이 모드에서는 h264 및 vp9 코덱만 사용할 수 있습니다. 원본 오디오 코덱은 aac이며, 호환성을 위해 재인코딩되었습니다. 오디오 품질은 비-HLS 대응보다 약간 낮을 수 있습니다.\n\n이 옵션은 실험적이며, 나중에 사라지거나 변경될 수 있습니다.",
+
+ "video.twitter.gif": "twitter/x",
+ "video.twitter.gif.title": "반복 동영상을 gif로 변환",
+ "video.twitter.gif.description": "gif 변환은 비효율적입니다. 변환된 파일은 아주 크고 품질이 낮을 수 있습니다.",
+
+ "video.tiktok.h265": "tiktok",
+ "video.tiktok.h265.title": "hevc/h265 형식 선호",
+ "video.tiktok.h265.description": "호환성을 희생하고 1080p 동영상을 다운로드할 수 있습니다.",
+
+ "audio.format": "오디오 형식",
+ "audio.format.best": "최고",
+ "audio.format.mp3": "mp3",
+ "audio.format.ogg": "ogg",
+ "audio.format.wav": "wav",
+ "audio.format.opus": "opus",
+ "audio.format.description": "모든 형식(최고 제외)은 원본 형식에서 변환되므로 품질 손실이 있습니다. 원본 형식으로 저장하려면 최고를 선택하세요.",
+
+ "audio.bitrate": "오디오 비트레이트",
+ "audio.bitrate.kbps": "kb/s",
+ "audio.bitrate.description": "비트레이트는 손실 형식으로 오디오를 변환할 때만 적용됩니다. 코덱은 원본 오디오 품질을 향상시킬 수 없으므로 128kbps 이상의 비트레이트를 선택하면 파일 크기가 증가할 수 있습니다. 형식에 따라 품질 차이가 있을 수 있습니다.",
+
+ "audio.youtube.dub": "youtube 오디오 트랙",
+ "audio.youtube.dub.title": "선호하는 오디오 트랙",
+ "audio.youtube.dub.description": "선택한 언어의 더빙 오디오 트랙이 있다면 사용합니다.",
+ "youtube.dub.original": "원본",
+
+ "audio.tiktok.original": "tiktok",
+ "audio.tiktok.original.title": "원본 사운드 다운로드",
+ "audio.tiktok.original.description": "동영상 제작자의 변경 없이 원본 사운드를 다운로드합니다.",
+
+ "metadata.filename": "파일 이름 스타일",
+ "metadata.filename.classic": "클래식",
+ "metadata.filename.basic": "기본",
+ "metadata.filename.pretty": "간단",
+ "metadata.filename.nerdy": "개발자",
+ "metadata.filename.description": "파일 이름 스타일은 cobalt로 터널링된 파일에만 사용됩니다. 일부 서비스는 클래식 이외의 파일 이름 스타일을 지원하지 않습니다.",
+
+ "metadata.filename.preview.video": "동영상 제목",
+ "metadata.filename.preview.audio": "오디오 제목 - 오디오 제작자",
+
+ "metadata.file": "파일 메타데이터",
+ "metadata.disable.title": "파일 메타데이터 비활성화",
+ "metadata.disable.description": "제목, 아티스트 및 기타 정보는 파일에 추가되지 않습니다.",
+
+ "saving.title": "저장 방법",
+ "saving.ask": "매번 묻기",
+ "saving.download": "다운로드",
+ "saving.share": "공유",
+ "saving.copy": "복사",
+ "saving.description": "파일이나 링크를 저장하는 방법입니다. 방법이 사용 불가능하거나 문제가 발생하면 cobalt가 다음에 무엇을 해야 할지 물어봅니다.",
+
+ "accessibility": "접근성",
+ "accessibility.transparency.title": "투명도 줄이기",
+ "accessibility.transparency.description": "표면의 투명도를 줄이고 흐림 효과를 비활성화합니다. 저사양 기기에서 성능을 향상시킬 수 있습니다.",
+ "accessibility.motion.title": "움직임 줄이기",
+ "accessibility.motion.description": "애니메이션과 전환을 비활성화합니다.",
+
+ "language": "언어",
+ "language.auto.title": "자동",
+ "language.auto.description": "번역이 지원된다면 브라우저의 언어를 사용합니다. 번역이 지원되지 않으면 영어가 사용됩니다.",
+ "language.preferred.title": "선호하는 언어",
+ "language.preferred.description": "자동 선택이 비활성화되면 이 언어가 사용됩니다. 번역되지 않은 텍스트는 영어로 표시됩니다.\n\n일부 언어는 커뮤니티 번역을 사용하므로 부정확하거나 부족할 수 있습니다.",
+
+ "privacy.analytics": "익명 트래픽 분석",
+ "privacy.analytics.title": "익명 트래픽 분석 비활성화",
+ "privacy.analytics.description": "익명 트래픽 분석은 활동 중인 cobalt 사용자의 수를 얻는 데 사용됩니다. 식별 가능한 정보는 절대 저장되지 않습니다. 모든 처리된 데이터는 익명화되고 집계됩니다.\n\n저희는 쿠키를 사용하지 않고 GDPR, CCPA 및 PECR와 완전히 호환되는 자체 호스팅된 plausible 인스턴스를 사용합니다.",
+ "privacy.analytics.learnmore": "plausible의 개인 정보 보호에 대해 자세히 알아보기",
+
+ "privacy.tunnel": "터널링",
+ "privacy.tunnel.title": "항상 터널링 사용",
+ "privacy.tunnel.description": "cobalt는 사용자의 IP 주소, 브라우저 정보를 숨기고 로컬 네트워크 제한을 우회합니다. 활성화되면 파일에 읽기 가능한 파일 이름이 있어야 합니다.",
+
+ "advanced.debug": "디버그",
+ "advanced.debug.title": "디버그 기능 활성화",
+ "advanced.debug.description": "여러 정보에 접근할 수 있는 페이지를 제공합니다.",
+
+ "advanced.data": "데이터 관리",
+
+ "processing.override": "기본 인스턴스 덮어쓰기",
+ "processing.override.title": "인스턴스 제공 처리 서버 사용",
+ "processing.override.description": "웹 인스턴스가 기본 처리 서버를 제공하면 주 처리 서버 대신 사용할 수 있습니다. 신뢰할 수 있는 사람이 호스팅하는 서버인지 확인하세요.",
+
+ "processing.community": "커뮤니티 인스턴스",
+
+ "processing.enable_custom.title": "사용자 지정 처리 서버 사용",
+ "processing.enable_custom.description": "cobalt는 사용자가 선택하면 사용자 지정 처리 서버를 사용합니다. cobalt에는 일부 보안 조치가 있지만, 커뮤니티 인스턴스를 통해 발생하는 모든 손해에 대해 책임이 없습니다. 신뢰할 수 있는 인스턴스만 사용하세요.",
+
+ "processing.custom.placeholder": "사용자 지정 인스턴스 도메인"
+}
diff --git a/web/i18n/ko/tabs.json b/web/i18n/ko/tabs.json
new file mode 100644
index 00000000..850242fe
--- /dev/null
+++ b/web/i18n/ko/tabs.json
@@ -0,0 +1,8 @@
+{
+ "save": "저장",
+ "settings": "설정",
+ "updates": "업데이트",
+ "donate": "기부",
+ "about": "소개",
+ "remux": "remux"
+}
diff --git a/web/i18n/ko/updates.json b/web/i18n/ko/updates.json
new file mode 100644
index 00000000..eadd839e
--- /dev/null
+++ b/web/i18n/ko/updates.json
@@ -0,0 +1,4 @@
+{
+ "button.next": "이전 변경 사항 보기({{ value }})",
+ "button.previous": "새로운 변경 사항 보기({{ value }})"
+}
diff --git a/web/i18n/languages.json b/web/i18n/languages.json
index 0760fe1d..8c603876 100644
--- a/web/i18n/languages.json
+++ b/web/i18n/languages.json
@@ -1,4 +1,5 @@
{
"en": "english",
+ "ko": "한국어",
"ru": "русский"
}