The dictionaries here are the single source both clients read: the desktop
copies src/i18n/generated.js byte for byte, so a key added on either side is
available to the other.
* desktop.* — sentences only the desktop says. It has no QR display and no
browser to grant permissions, so its copy differs where the browser's would
mislead: "allow the microphone in system settings", not "for this site".
* msg.after5s and the rest of the disappearing-message timers, which this
client renders from hardcoded English today and can now translate too.
* secLevel.HIGH / MEDIUM / LOW, which the security panel needed and the
dictionary only had MAXIMUM for.
All of it translated into the full thirteen. Nothing here changes what this site
renders — the web client does not reference the new keys yet.
assets/screenshots/desktop-*.png are captures of the desktop client at 1.0.0,
for its Flathub listing. A reviewer opens each URL, so they have to be served
from this domain rather than from a code host.
887 lines
55 KiB
JSON
887 lines
55 KiB
JSON
{
|
|
"htmlLang": "ko",
|
|
"ogLocale": "ko_KR",
|
|
"dir": "ltr",
|
|
"nativeName": "한국어",
|
|
"abbr": "KO",
|
|
"meta": {
|
|
"title": "SecureBit.chat - 종단 간 암호화 비공개 메신저",
|
|
"description": "SecureBit.chat은 브라우저 안에서만 동작하는 무료 P2P 메신저로, 종단 간 암호화를 사용합니다. 계정도 없고 메시지를 보관하는 서버도 없습니다 - ECDH P-384, AES-256-GCM, 그리고 직접 만나서 하는 SAS 확인.",
|
|
"keywords": "암호화 메신저, 종단 간 암호화, P2P 채팅, P2P 메신저, ECDH, DTLS, SAS 확인, WebRTC, 비공개 채팅, 안전한 채팅, 서버 없음, 계정 없음, 중간자 공격 방어, 순방향 비밀성",
|
|
"ogTitle": "SecureBit.chat - 종단 간 암호화 P2P 채팅",
|
|
"ogDescription": "브라우저 안에서만 동작하는 안전한 메신저입니다. 계정도 없고 메시지를 보관하는 서버도 없습니다. 직접 운영하는 STUN/TURN 서버를 쓸 수 있습니다 - 무엇도 강요하지 않습니다.",
|
|
"ogImageAlt": "SecureBit.chat - 종단 간 암호화 P2P 채팅",
|
|
"twitterTitle": "SecureBit.chat - 종단 간 암호화 P2P 채팅",
|
|
"twitterDescription": "브라우저 안에서만 동작하는 안전한 메신저입니다. 계정도 없고 메시지를 보관하는 서버도 없습니다.",
|
|
"twitterImageAlt": "SecureBit.chat - 종단 간 암호화 P2P 채팅"
|
|
},
|
|
"schema": {
|
|
"siteDescription": "브라우저 안에서만 동작하는 종단 간 암호화 P2P 채팅입니다.",
|
|
"appDescription": "무료 종단 간 암호화 P2P 메신저입니다. 계정도 없고 메시지를 보관하는 서버도 없습니다 - ECDH P-384, AES-256-GCM, 직접 만나서 하는 SAS 확인.",
|
|
"operatingSystem": "제한 없음 (최신 웹 브라우저)",
|
|
"browserRequirements": "WebRTC와 Web Crypto API가 필요합니다",
|
|
"featureList": [
|
|
"종단 간 암호화 (ECDH P-384, AES-256-GCM)",
|
|
"메시지 서버 없이 WebRTC로 연결되는 P2P",
|
|
"중간자 공격을 막는 대면 SAS 확인",
|
|
"직접 운영하는 STUN/TURN 서버와 릴레이 전용 프라이버시 모드",
|
|
"암호화된 파일 전송",
|
|
"설치할 수 있는 프로그레시브 웹 앱, 오프라인 지원"
|
|
]
|
|
},
|
|
"ui": {
|
|
"language.label": "언어",
|
|
"language.suggest.text": "이 페이지는 한국어로도 볼 수 있습니다.",
|
|
"language.suggest.cta": "한국어로 보기",
|
|
"language.suggest.dismiss": "닫기",
|
|
"community.title": "프라이버시의 미래를 함께 만듭니다",
|
|
"community.description": "SecureBit은 커뮤니티 덕분에 자랍니다. 여러분의 아이디어와 의견이 안전한 소통의 미래를 만듭니다 - 모든 과정이 공개되어 있고, 전 구간에서 ASN.1 검증을 수행합니다.",
|
|
"community.github": "GitHub 저장소",
|
|
"community.feedback": "의견 보내기",
|
|
"unique.eyebrow": "무엇이 다른가",
|
|
"unique.heading": "SecureBit이 특별한 이유",
|
|
"unique.s1.titleTop": "계층으로 쌓은",
|
|
"unique.s1.titleBottom": "암호화 코어",
|
|
"unique.s1.collapsed": "암호화 코어",
|
|
"unique.s1.desc": "ECDH P-384 키 교환, AES-256-GCM 페이로드, ECDSA 서명, 그리고 완전한 ASN.1 검증을 하나의 견고한 파이프라인으로 묶었습니다.",
|
|
"unique.s1.tags": [
|
|
"ECDH P-384",
|
|
"AES-256-GCM",
|
|
"ECDSA",
|
|
"ASN.1"
|
|
],
|
|
"unique.s2.titleTop": "순수 P2P",
|
|
"unique.s2.titleBottom": "WebRTC 기반",
|
|
"unique.s2.collapsed": "WebRTC 기반 순수 P2P",
|
|
"unique.s2.desc": "메시지는 WebRTC를 통해 기기에서 기기로 곧장 오갑니다. 데이터를 붙들고 있는 릴레이는 없고, 서버는 두 사람이 서로를 찾도록 돕기만 합니다.",
|
|
"unique.s2.tags": [
|
|
"DTLS 1.3",
|
|
"릴레이 없음"
|
|
],
|
|
"unique.s3.titleTop": "완전한",
|
|
"unique.s3.titleBottom": "순방향 비밀성",
|
|
"unique.s3.collapsed": "순방향 비밀성",
|
|
"unique.s3.desc": "세션 키는 끊임없이 교체되고 사용 후 폐기됩니다. 그래서 키 하나가 유출되어도 지난 대화는 열리지 않습니다.",
|
|
"unique.s3.tags": [
|
|
"일회용 키",
|
|
"자동 교체"
|
|
],
|
|
"unique.s4.titleTop": "트래픽",
|
|
"unique.s4.titleBottom": "난독화",
|
|
"unique.s4.collapsed": "트래픽 난독화",
|
|
"unique.s4.desc": "패킷 크기와 전송 간격을 채우고 무작위로 흐트러뜨려, 회선을 들여다보는 쪽에서도 메타데이터의 규칙이 드러나지 않습니다.",
|
|
"unique.s4.tags": [
|
|
"패킷 패딩",
|
|
"시간 지터"
|
|
],
|
|
"unique.s5.titleTop": "데이터 수집",
|
|
"unique.s5.titleBottom": "전혀 없음",
|
|
"unique.s5.collapsed": "데이터 수집 없음",
|
|
"unique.s5.desc": "계정도, 로그도, 저장된 메시지도 없습니다. 서버에는 유출되거나 압수되거나 팔릴 것이 아무것도 없습니다.",
|
|
"unique.s5.tags": [
|
|
"계정 없음",
|
|
"로그 없음"
|
|
],
|
|
"partners.eyebrow": "파트너와 생태계",
|
|
"partners.heading": "파트너들이 신뢰합니다",
|
|
"partners.aegis.desc": "포트폴리오 전반의 기밀 금융 소통을 지키는 자본 파트너입니다.",
|
|
"partners.aegis.role": "전략적 투자자",
|
|
"partners.furilabs.desc": "프라이버시를 앞세운 리눅스 폰으로, SecureBit을 기본 보안 채널로 함께 제공합니다.",
|
|
"partners.furilabs.role": "기술 파트너",
|
|
"partners.inviteTitle": "파트너 되기",
|
|
"partners.inviteDesc": "프라이버시를 위한 하드웨어나 인프라를 만들고 계신가요? SecureBit을 함께 붙여봅시다.",
|
|
"partners.inviteCta": "이야기 시작하기",
|
|
"roadmap.eyebrow": "개발 로드맵",
|
|
"roadmap.heading": "SecureBit의 발자취",
|
|
"roadmap.subheading": "첫 프로토타입에서 양자 내성 분산 네트워크까지, 모든 계층에서 완전한 ASN.1 검증과 함께.",
|
|
"roadmap.progress": "{total}개 중 {shipped}개 완료",
|
|
"roadmap.upcoming": "{upcoming}개 남음",
|
|
"roadmap.keyFeatures": "주요 기능",
|
|
"roadmap.status.released": "출시됨",
|
|
"roadmap.status.current": "진행 중",
|
|
"roadmap.status.dev": "개발 중",
|
|
"roadmap.status.planned": "예정",
|
|
"roadmap.status.research": "연구",
|
|
"hero.headlineTop": "두 사람만 읽을 수 있는",
|
|
"hero.headlineBottom": "직통 회선.",
|
|
"hero.subheading": "키는 여러분의 기기에서 만들어지고 두 기기 사이에서 곧바로 교환됩니다. 계정도 없고 메시지를 보관하는 서버도 없습니다.",
|
|
"hero.diagramAlt": "한 상대와 이어진 직통 암호화 회선, 그리고 뒤이어 합류하는 두 사람",
|
|
"intro.createTitle": "새 채널 만들기",
|
|
"intro.createDesc": "여러분의 기기가 키와 일회용 초대장을 만듭니다. 그 어느 것도 서버를 거치지 않습니다.",
|
|
"intro.createCta": "키와 초대장 만들기",
|
|
"intro.joinTitle": "채널 참여하기",
|
|
"intro.scanTitle": "카메라로 QR 스캔",
|
|
"intro.scanSubtitle": "가장 빠릅니다 - 상대의 화면을 비추세요",
|
|
"intro.orPasteCode": "또는 코드 붙여넣기",
|
|
"intro.pastePlaceholder": "여기에 초대 코드를 붙여넣으세요…",
|
|
"intro.connect": "연결",
|
|
"intro.connecting": "처리 중…",
|
|
"roadmap.r1.title": "개발 시작",
|
|
"roadmap.r1.sub": "아이디어, 프로토타입, 인프라 구축",
|
|
"roadmap.r1.date": "2025년 초",
|
|
"roadmap.r1.features": [
|
|
"개념과 요구사항 정리",
|
|
"기술 스택 선정: WebRTC, P2P, 암호학",
|
|
"첫 메시징 프로토타입",
|
|
"저장소와 CI 구축",
|
|
"기본 암호화 구조",
|
|
"UX/UI 설계"
|
|
],
|
|
"roadmap.r2.title": "알파 공개",
|
|
"roadmap.r2.sub": "첫 공개 알파: 기본 채팅과 키 교환",
|
|
"roadmap.r2.date": "2025년 봄",
|
|
"roadmap.r2.features": [
|
|
"WebRTC 기반 기본 P2P 메시징",
|
|
"간단한 종단 간 암호화 (시연용 방식)",
|
|
"안정적인 시그널링과 재연결",
|
|
"테스트를 위한 최소 화면",
|
|
"초기 테스터 의견 수집"
|
|
],
|
|
"roadmap.r3.title": "보안 강화",
|
|
"roadmap.r3.sub": "보안을 다지고 안정 브랜치 공개",
|
|
"roadmap.r3.date": "2025년 여름",
|
|
"roadmap.r3.features": [
|
|
"ECDH/ECDSA 실사용 적용",
|
|
"순방향 비밀성과 키 교체",
|
|
"인증 검사 개선",
|
|
"파일 암호화와 대용량 전송",
|
|
"기본 암호 처리 감사"
|
|
],
|
|
"roadmap.r4.title": "확장과 안정성",
|
|
"roadmap.r4.sub": "네트워크 확장과 안정성 개선",
|
|
"roadmap.r4.date": "2025년 가을",
|
|
"roadmap.r4.features": [
|
|
"P2P 연결과 NAT 통과 최적화",
|
|
"재연결 구조와 메시지 대기열",
|
|
"모바일 배터리 소모 감소",
|
|
"여러 기기 간 동기화",
|
|
"개발자를 위한 모니터링과 로깅 도구"
|
|
],
|
|
"roadmap.r5.title": "프라이버시 우선",
|
|
"roadmap.r5.sub": "프라이버시에 집중: 메타데이터 최소화",
|
|
"roadmap.r5.date": "2025년 겨울",
|
|
"roadmap.r5.features": [
|
|
"메타데이터 보호와 지문 축소",
|
|
"어니언 라우팅과 DHT 실험",
|
|
"익명 연결 옵션",
|
|
"공개 코드 감사 준비",
|
|
"사용자 확인 절차 개선"
|
|
],
|
|
"roadmap.r6.title": "Enhanced Security Edition",
|
|
"roadmap.r6.sub": "완전한 ASN.1 검증을 갖춘 18겹 군용 수준 암호화",
|
|
"roadmap.r6.date": "2025년 말",
|
|
"roadmap.r6.features": [
|
|
"ECDH + DTLS + SAS 삼중 보안",
|
|
"ECDH P-384와 AES-GCM 256비트 암호화",
|
|
"DTLS 지문 확인",
|
|
"SAS(짧은 인증 문자열) 확인",
|
|
"키 교체를 동반한 순방향 비밀성",
|
|
"중간자 공격 방어 강화",
|
|
"완전한 ASN.1 DER 검증",
|
|
"OID와 EC 점 확인",
|
|
"SPKI 구조 검증",
|
|
"P2P WebRTC 구조",
|
|
"메타데이터 보호",
|
|
"100% 공개 소스"
|
|
],
|
|
"roadmap.r7.title": "Desktop Edition",
|
|
"roadmap.r7.sub": "Windows, macOS, Linux용 네이티브 데스크톱 앱",
|
|
"roadmap.r7.date": "2026년 초",
|
|
"roadmap.r7.features": [
|
|
"Windows 데스크톱 앱 (Tauri v2)",
|
|
"macOS 데스크톱 앱 (Tauri v2)",
|
|
"Linux AppImage (Tauri v2)",
|
|
"실시간 알림",
|
|
"자동 재연결",
|
|
"기기 간 동기화",
|
|
"개선된 화면",
|
|
"최대 100MB 파일 지원"
|
|
],
|
|
"roadmap.r8.title": "안전한 음성과 통화",
|
|
"roadmap.r8.sub": "암호화된 음성 메시지, 음성 통화, 영상 통화",
|
|
"roadmap.r8.date": "2026년 초",
|
|
"roadmap.r8.features": [
|
|
"종단 간 암호화된 음성 메시지",
|
|
"1:1 암호화 음성 통화 (WebRTC)",
|
|
"1:1 암호화 영상 통화 (WebRTC)",
|
|
"실시간 미디어의 순방향 비밀성",
|
|
"SRTP/DTLS로 보호되는 미디어 스트림",
|
|
"통화 중 SAS 확인",
|
|
"통화 알림과 자동 재연결",
|
|
"지연이 적은 P2P 미디어"
|
|
],
|
|
"roadmap.r9.title": "그룹 소통",
|
|
"roadmap.r9.sub": "프라이버시를 지키는 그룹 채팅",
|
|
"roadmap.r9.date": "지금",
|
|
"roadmap.r9.features": [
|
|
"최대 8명까지 P2P 그룹 채팅",
|
|
"메시 전달과 서명된 릴레이 대체 경로",
|
|
"모두가 함께 대조하는 하나의 그룹 안전 코드",
|
|
"코드 추측을 막는 커밋 후 공개 절차",
|
|
"설계상 일회용인 그룹 전용 신원 키",
|
|
"에포크 순서를 갖춘 서명된 구성원 명단",
|
|
"서명된 메시지 - 기록이 갈라지면 증명할 수 있습니다",
|
|
"서버 없음, 공유 그룹 키 없음, 기록 없음"
|
|
],
|
|
"roadmap.r10.title": "Mobile Edition",
|
|
"roadmap.r10.sub": "iOS와 Android용 네이티브 모바일 앱",
|
|
"roadmap.r10.date": "2027년 2분기",
|
|
"roadmap.r10.features": [
|
|
"iOS 네이티브 앱 (Swift/SwiftUI)",
|
|
"Android 네이티브 앱 (Kotlin/Jetpack Compose)",
|
|
"모바일 브라우저 PWA 지원",
|
|
"실시간 푸시 알림",
|
|
"배터리 최적화",
|
|
"모바일에 맞춘 화면",
|
|
"오프라인 메시지 대기열",
|
|
"생체 인증"
|
|
],
|
|
"roadmap.r11.title": "양자 내성 에디션",
|
|
"roadmap.r11.sub": "양자 컴퓨터에 대한 대비",
|
|
"roadmap.r11.date": "2027년 4분기",
|
|
"roadmap.r11.features": [
|
|
"포스트 양자 암호 CRYSTALS-Kyber",
|
|
"SPHINCS+ 전자 서명",
|
|
"고전과 포스트 양자를 함께 쓰는 혼합 방식",
|
|
"양자에 안전한 키 교환",
|
|
"갱신된 해시 알고리즘",
|
|
"기존 세션 이전",
|
|
"v5.x 호환",
|
|
"양자 내성 프로토콜"
|
|
],
|
|
"roadmap.r12.title": "분산 네트워크",
|
|
"roadmap.r12.sub": "완전히 분산된 네트워크",
|
|
"roadmap.r12.date": "2028년",
|
|
"roadmap.r12.features": [
|
|
"노드 메시 네트워크",
|
|
"피어 탐색을 위한 DHT",
|
|
"내장 어니언 라우팅",
|
|
"토크노믹스와 노드 보상",
|
|
"DAO를 통한 거버넌스",
|
|
"다른 네트워크와의 상호 운용",
|
|
"플랫폼 간 호환",
|
|
"스스로 복구하는 네트워크"
|
|
],
|
|
"roadmap.r13.title": "AI 프라이버시 도우미",
|
|
"roadmap.r13.sub": "프라이버시와 보안을 위한 인공지능",
|
|
"roadmap.r13.date": "2028년 이후",
|
|
"roadmap.r13.features": [
|
|
"기기 안에서 이루어지는 AI 위협 분석",
|
|
"중간자 공격 자동 감지",
|
|
"적응형 암호화",
|
|
"맞춤형 보안 권고",
|
|
"영지식 기계 학습",
|
|
"개인용 AI 도우미",
|
|
"예측 기반 보안",
|
|
"자율적인 공격 방어"
|
|
],
|
|
"handshake.step1": "ECDH P-384 키 쌍 생성 중",
|
|
"handshake.step2": "확인 코드 유도 중",
|
|
"handshake.step3": "순방향 비밀성 고정 중",
|
|
"handshake.securingTitle": "채널을 보호하는 중",
|
|
"handshake.answerTitle": "응답을 만드는 중",
|
|
"handshake.securingDesc": "변조를 견딜 만큼 단단한 키를 벼리는 중입니다.",
|
|
"handshake.shareTitle": "초대장 공유하기",
|
|
"handshake.sendAnswerTitle": "응답 돌려보내기",
|
|
"handshake.shareDesc": "QR을 보여주거나 코드를 상대에게 보내세요. 한 번만 쓸 수 있고 곧 만료됩니다.",
|
|
"handshake.sendAnswerDesc": "채널을 만든 사람에게 이 응답을 전해 악수를 마치도록 하세요.",
|
|
"handshake.establish": "연결 맺기",
|
|
"handshake.thenReceive": "그다음 상대가 보내는 응답을 받으세요",
|
|
"handshake.pasteAnswerPlaceholder": "상대의 응답 코드를 붙여넣으세요…",
|
|
"handshake.answerSentNote": "이 응답을 만든 사람에게 보내고 기다리세요 - 상대가 연결되면 대화가 열립니다.",
|
|
"handshake.qrHint": "상대가 코드를 다 읽을 때까지 이 화면을 열어 두세요.",
|
|
"handshake.qrHintFrames": "악수가 {frames}개 화면으로 나뉘어 있습니다 - 상대가 전부 읽을 때까지 열어 두세요.",
|
|
"verify.title": "보안 확인",
|
|
"verify.desc": "다른 경로(통화나 대면)로 상대와 이 안전 코드를 대조한 뒤, 입력해서 대화를 여세요.",
|
|
"verify.enterLabel": "대조한 코드를 입력하세요",
|
|
"verify.placeholder": "여기에 코드 입력",
|
|
"verify.confirm": "코드 확인",
|
|
"verify.confirmed": "확인됨",
|
|
"verify.mismatch": "일치하지 않음",
|
|
"verify.yours": "내 확인",
|
|
"verify.peer": "상대의 확인",
|
|
"verify.pending": "대기 중",
|
|
"verify.waiting": "코드 대기 중…",
|
|
"verify.verified": "채널 확인 완료",
|
|
"verify.bothConfirmed": "양쪽 모두 확인했습니다. 안전한 대화를 여는 중…",
|
|
"pwa.bannerTitle": "SecureBit.chat 설치",
|
|
"pwa.bannerDesc": "보안이 강화된 네이티브 앱 경험을 누리세요",
|
|
"pwa.install": "설치",
|
|
"pwa.dismiss": "닫기",
|
|
"pwa.close": "닫기",
|
|
"pwa.iosTitle": "iOS에 설치하기",
|
|
"pwa.iosStep1": "공유 버튼을 누르세요",
|
|
"pwa.iosStep1Hint": "보통 Safari 아래쪽에 있습니다",
|
|
"pwa.iosStep2": "'홈 화면에 추가'를 찾으세요",
|
|
"pwa.iosStep2Hint": "공유 메뉴를 아래로 내려보세요",
|
|
"pwa.iosStep3": "'추가'를 누르세요",
|
|
"pwa.iosStep3Hint": "확인하면 SecureBit.chat이 설치됩니다",
|
|
"pwa.genericTitle": "SecureBit 설치",
|
|
"pwa.genericDesc": "브라우저마다 설치 방법이 다릅니다. 쓰시는 브라우저에 맞는 순서를 고르세요.",
|
|
"pwa.gotIt": "알겠습니다",
|
|
"pwa.installedTitle": "앱이 설치되었습니다",
|
|
"pwa.installedIos": "iOS 앱이 설치되었습니다. 홈 화면에서 열어보세요.",
|
|
"pwa.installedGeneric": "이제 SecureBit.chat이 기기에 있습니다",
|
|
"pwa.anytimeTitle": "언제든 설치할 수 있습니다",
|
|
"pwa.anytimeDesc": "가장 좋은 경험을 위해, 브라우저 메뉴에서 언제든 SecureBit.chat을 설치할 수 있습니다.",
|
|
"pwa.ok": "확인",
|
|
"step.open": "1단계 · 채널 열기",
|
|
"step.exchange": "2단계 · 교환",
|
|
"step.verification": "3단계 · 확인",
|
|
"action.create": "만들기",
|
|
"action.join": "참여",
|
|
"action.back": "뒤로",
|
|
"action.copy": "복사",
|
|
"action.copied": "복사됨",
|
|
"action.scan": "스캔",
|
|
"action.downloadDesktop": "데스크톱 앱 내려받기",
|
|
"action.advancedSettings": "고급 설정",
|
|
"cred.offerTag": "초대 · 또는 텍스트 복사",
|
|
"cred.answerTag": "응답 · 또는 텍스트 복사",
|
|
"cred.reveal": "눌러서 보기 - 이 코드는 남에게 알리지 마세요",
|
|
"qr.title": "QR 코드 스캔",
|
|
"qr.subtitle": "상대의 QR에 카메라를 맞추세요",
|
|
"qr.scanning": "읽는 중…",
|
|
"qr.hint": "모든 조각을 읽을 때까지 흔들리지 않게 유지하세요. 카메라는 기기 안에서만 쓰이며 - 아무것도 전송되지 않습니다.",
|
|
"mesh.you": "나",
|
|
"mesh.peer": "상대 · 세션 1",
|
|
"mesh.joined2": "지민 합류 · +2",
|
|
"mesh.joined3": "민준 합류 · +3",
|
|
"ice.title": "네트워크 설정",
|
|
"ice.subtitle": "기기 안에서만 설정됩니다 - 상대에게 전달되지 않습니다",
|
|
"ice.intro": "SecureBit은 기본적으로 공개 STUN 서버로 P2P 연결을 맺습니다. 직접 운영하신다면 자신의 STUN/TURN을 지정하세요.",
|
|
"ice.publicTitle": "공개 서버 (기본값)",
|
|
"ice.publicDesc": "설정이 필요 없습니다. 대부분에게 충분합니다.",
|
|
"ice.customTitle": "내 STUN/TURN 서버",
|
|
"ice.customDesc": "최대 {max}개까지.",
|
|
"ice.turnNote": "TURN 릴레이는 양쪽의 IP와 트래픽 흐름은 볼 수 있지만, 종단 간 암호화된 메시지 내용은 결코 볼 수 없습니다. 되도록 ",
|
|
"ice.turnNoteTls": " (TLS)를 쓰세요.",
|
|
"ice.test": "서버 시험",
|
|
"ice.testing": "시험 중…",
|
|
"ice.relayTitle": "릴레이 전용 모드",
|
|
"ice.relayBadge": "최대 프라이버시",
|
|
"ice.relayDesc": "모든 트래픽을 TURN으로 보내 상대가 여러분의 IP를 결코 알 수 없게 합니다. TURN 서버가 필요합니다.",
|
|
"ice.relayWarning": "릴레이 전용 모드가 켜져 있지만 TURN 서버가 설정되지 않았습니다. 연결을 시작할 수 없습니다.",
|
|
"ice.persist": "이 기기에 저장",
|
|
"ice.persistDesc": "이 브라우저에 암호화되어 저장됩니다. 꺼두면 이번 세션에만 적용됩니다.",
|
|
"ice.forget": "저장된 설정 지우기",
|
|
"ice.cancel": "취소",
|
|
"ice.apply": "적용",
|
|
"ice.errUnavailable": "이 브라우저에서는 WebRTC를 쓸 수 없습니다",
|
|
"ice.errInvalid": "서버 설정이 올바르지 않습니다",
|
|
"update.title": "업데이트가 있습니다",
|
|
"update.desc": "SecureBit의 새 버전이 확인되었습니다.",
|
|
"update.currentVersion": "현재 버전",
|
|
"update.newVersion": "새 버전",
|
|
"update.now": "지금 업데이트",
|
|
"update.later": "나중에",
|
|
"update.unknown": "없음",
|
|
"update.stepSaving": "데이터를 저장하는 중…",
|
|
"update.stepSwCaches": "Service Worker 캐시를 비우는 중…",
|
|
"update.stepSwUnregister": "Service Worker 등록을 해제하는 중…",
|
|
"update.stepBrowserCache": "브라우저 캐시를 비우는 중…",
|
|
"update.stepVersion": "버전을 갱신하는 중…",
|
|
"update.stepReload": "앱을 다시 불러오는 중…",
|
|
"update.error": "업데이트 오류. 페이지를 직접 새로고침하세요 (Ctrl+F5 또는 Cmd+Shift+R)",
|
|
"update.confirmSkip": "새 버전이 있습니다. 보안과 안정성을 위해 업데이트를 권합니다. 업데이트 없이 계속할까요?",
|
|
"offline.backOnline": "다시 연결됨",
|
|
"offline.mode": "오프라인 모드",
|
|
"offline.dismiss": "닫기",
|
|
"offline.lostTitle": "연결이 끊어졌습니다",
|
|
"offline.lostDesc": "SecureBit이 오프라인 상태입니다. 일부 기능이 제한되지만 데이터는 안전합니다.",
|
|
"offline.point1": "세션과 키는 그대로 유지됩니다",
|
|
"offline.point2": "서버에는 아무 데이터도 저장되지 않습니다",
|
|
"offline.point3": "다시 연결되면 메시지와 파일이 동기화됩니다",
|
|
"offline.continue": "오프라인으로 계속",
|
|
"offline.restoredTitle": "다시 연결되면",
|
|
"offline.restoredDesc": "연결이 끊겨도 잃는 것은 없습니다. SecureBit은 모든 것을 기기 안에 대기시켜 두었다가, 다시 온라인이 되는 즉시 암호화된 세션을 이어갑니다.",
|
|
"offline.r1Title": "보낸 메시지는 전달됩니다",
|
|
"offline.r1Desc": "오프라인일 때 쓴 내용은 자동으로 상대에게 전송됩니다.",
|
|
"offline.r2Title": "파일 전송이 마무리됩니다",
|
|
"offline.r2Desc": "전송은 멈춘 지점부터 이어집니다 - 다시 보낼 필요가 없습니다.",
|
|
"offline.r3Title": "상대의 메시지와 파일이 도착합니다",
|
|
"offline.r3Desc": "끊긴 동안 상대가 보낸 것들이 순서대로 도착합니다.",
|
|
"offline.r4Title": "아무것도 사라지지 않습니다",
|
|
"offline.r4Desc": "다시 연결되어도 빈틈은 없습니다 - 대화는 멈춘 그 자리에서 이어집니다.",
|
|
"offline.gotIt": "알겠습니다",
|
|
"qr.showTitle": "QR 코드 보여주기",
|
|
"qr.showSubtitle": "전체 화면 · 상대가 스캔하도록",
|
|
"qr.showSubtitleFrames": "전체 화면 · 상대가 {frames}개 화면을 모두 스캔하도록",
|
|
"notify.enabledBody": "알림이 켜졌습니다. 새 메시지가 오면 알려드립니다.",
|
|
"notify.workingBody": "알림이 정상 작동합니다. 새 메시지가 오면 알려드립니다.",
|
|
"pw.label": "비밀번호 입력란",
|
|
"pw.placeholder": "비밀번호를 입력하세요…",
|
|
"pw.decrypt": "복호화",
|
|
"pw.cancel": "취소",
|
|
"file.title": "파일 전송",
|
|
"file.drop": "여기에 파일을 놓으세요",
|
|
"file.dropHint": "보내기 전에 종단 간 암호화 · 최대 100MB",
|
|
"file.browse": "기기에서 찾기",
|
|
"file.incoming": "파일 요청이 왔습니다",
|
|
"file.accept": "수락",
|
|
"file.reject": "거절",
|
|
"file.download": "내려받기",
|
|
"file.notReady": "연결이 아직 준비되지 않았습니다",
|
|
"file.tooLarge": "파일이 너무 큽니다",
|
|
"file.typeNotAllowed": "허용되지 않는 파일 형식",
|
|
"file.maxConcurrent": "동시 전송 한도에 도달했습니다",
|
|
"file.gone": "이 파일은 더 이상 내려받을 수 없습니다.",
|
|
"call.incoming": "걸려온 전화",
|
|
"call.incomingVideo": "걸려온 영상 통화",
|
|
"call.encrypted": "암호화된 통화",
|
|
"call.encryptedShort": "암호화됨",
|
|
"call.peer": "보안 상대",
|
|
"call.connecting": "연결 중…",
|
|
"call.ringing": "신호 가는 중…",
|
|
"call.accept": "받기",
|
|
"call.decline": "거절",
|
|
"call.end": "통화 종료",
|
|
"call.camera": "카메라",
|
|
"call.cameraOff": "카메라 꺼짐",
|
|
"call.peerCameraOff": "상대의 카메라가 꺼져 있습니다",
|
|
"call.flipCamera": "카메라 전환",
|
|
"call.addVideo": "영상 추가",
|
|
"call.video": "영상",
|
|
"call.muted": "음소거됨",
|
|
"call.expand": "크게",
|
|
"call.minimize": "작게",
|
|
"call.quality": "연결 품질",
|
|
"call.qualityExcellent": "아주 좋음",
|
|
"call.videoPrefix": "영상 · ",
|
|
"call.voicePrefix": "음성 · ",
|
|
"group.new": "새 그룹",
|
|
"group.create": "그룹 만들기",
|
|
"group.join": "그룹 참여",
|
|
"group.name": "그룹 이름",
|
|
"group.nameTooLong": "그룹 이름이 너무 깁니다.",
|
|
"group.capacity": "최대 {max}명까지, 기기와 기기가 직접 연결됩니다. 그룹이 열리기 전에 모두가 하나의 안전 코드를 대조합니다.",
|
|
"group.invite": "초대",
|
|
"group.inviteMore": "구성원 더 초대하기",
|
|
"group.invitePeople": "{count}명 초대",
|
|
"group.invitation": "그룹 초대",
|
|
"group.addMembers": "구성원 추가",
|
|
"group.roomFor": "{remaining}명 더 들어올 수 있습니다. 그들이 합류하면 모두가 새 그룹 코드를 대조합니다.",
|
|
"group.membersCount": "구성원 {count}명",
|
|
"group.member": "구성원",
|
|
"group.members": "구성원",
|
|
"group.remove": "{name} 내보내기",
|
|
"group.message": "'{name}'에 메시지 보내기",
|
|
"group.leave": "나가기",
|
|
"group.leaveThis": "이 그룹에서 나가기",
|
|
"group.cancel": "그룹 취소",
|
|
"group.close": "닫기",
|
|
"group.cancelBtn": "취소",
|
|
"group.decline": "거절",
|
|
"group.working": "처리 중…",
|
|
"group.sasTitle": "그룹 안전 코드",
|
|
"group.sasEveryone": "모두에게 같은 코드가 보입니다",
|
|
"group.sasCompare": "이 그룹을 열려면 모든 구성원과 그룹 코드를 대조하세요.",
|
|
"group.sasReadAloud": "이 숫자들을 소리 내어 읽어주세요 - ",
|
|
"group.sasWarning": "한 사람이라도 다른 코드를 읽는다면, 누군가 사이에 끼어 있는 것입니다. 그룹을 취소하세요 - 확인하지 마세요.",
|
|
"group.confirmFirst": "먼저 그룹 코드를 확인하세요",
|
|
"group.codeSuffix": " · 코드 {code}",
|
|
"group.exchangingNonces": "일회용 값을 주고받는 중…",
|
|
"group.waitingCommit": "모든 구성원의 확약을 기다리는 중…",
|
|
"group.waitingJoin": "다른 구성원의 합류를 기다리는 중…",
|
|
"group.emptyChat": "아직 아무것도 없습니다. 모든 메시지는 보낸 사람이 서명하며, 구성원 각자의 암호화된 회선을 통해 오갑니다.",
|
|
"group.noVerified": "아직 확인된 대화가 없습니다. 먼저 1:1 대화를 열어 안전 코드를 대조하세요 - 그룹은 이미 확인한 연결로 만들어집니다.",
|
|
"group.noMoreToAdd": "추가할 다른 확인된 대화가 없습니다. 1:1 대화를 열어 먼저 안전 코드를 대조하세요.",
|
|
"group.directLink": "기기 간 직접 연결",
|
|
"group.noDirectLink": "아직 직접 연결이 없습니다 - 연결이 만들어지는 동안 메시지는 다른 구성원을 거칩니다",
|
|
"group.relayNote": "일부 구성원과는 아직 직접 연결이 없습니다. 그들의 메시지는 다른 구성원을 거쳐 오가는데, 그 사람은 대화가 오간다는 사실은 알 수 있지만 서명 너머의 내용을 읽거나 바꿀 수는 없습니다. 그룹은 계속해서 직접 연결을 시도합니다.",
|
|
"group.relayOnlyOff": "릴레이 전용 모드가 꺼져 있어, 모든 구성원이 여러분에게 직접 연결되며 IP 주소를 알게 됩니다 - 다른 사람이 초대한 구성원도 마찬가지입니다. 그것이 중요하다면 네트워크 설정에서 켜세요.",
|
|
"group.memberOffline": "{name}님은 오프라인이라 메시지를 받지 못합니다. 여전히 구성원이며, 내보내면 그룹 키가 새로 만들어집니다.",
|
|
"group.joinNote": "다른 구성원들이 여러분이 이 그룹에 있다는 것을 알게 됩니다. 따라잡을 대화 기록은 없습니다 - 그룹은 비어 있는 상태로 시작합니다.",
|
|
"group.inviteSentNote": "상대가 수락할 때까지 그룹은 그대로 동작합니다. 그들이 따라잡을 기록은 없고, 지금부터 보내는 것만 보게 됩니다.",
|
|
"group.errNotCreated": "그룹이 만들어지지 않았습니다",
|
|
"group.errNobodyAccepted": "제때 초대를 수락한 사람이 없습니다.",
|
|
"group.errNothingSent": "아무것도 전송되거나 확인되지 않았습니다. 이 창을 닫고 모두가 연결된 뒤 다시 시도하세요.",
|
|
"group.errNotFormed": "이 그룹을 만들 수 없었습니다.",
|
|
"group.errFull": "이 그룹은 가득 찼습니다.",
|
|
"group.errInviteFailed": "초대를 보내지 못했습니다 - 그 대화는 연결되어 있지 않습니다.",
|
|
"group.errNoMemberList": "그룹을 만든 사람이 구성원 명단을 끝내 보내지 않았습니다.",
|
|
"group.errUnsignedList": "구성원 명단에 그룹을 만든 사람의 서명이 없습니다. 다시 시도하지 말고 - 그 사람에게 알리세요.",
|
|
"group.errNotOwner": "그룹 소유자가 아닌 누군가가 구성원을 바꾸려 했습니다.",
|
|
"hdr.tagline": "종단 간 암호화",
|
|
"hdr.netSettings": "고급 네트워크 설정",
|
|
"hdr.netSettingsTitle": "고급 네트워크 설정 (STUN/TURN)",
|
|
"hdr.disconnect": "연결 끊기",
|
|
"status.connected": "연결됨",
|
|
"status.connecting": "연결 중…",
|
|
"status.notConnected": "연결되지 않음",
|
|
"status.reconnecting": "다시 연결 중…",
|
|
"status.retrying": "다시 시도 중…",
|
|
"status.verifying": "확인 중…",
|
|
"status.peerDisconnected": "상대가 연결을 끊었습니다",
|
|
"sec.replayProtection": "재전송 공격 방어",
|
|
"sec.messageIntegrity": "메시지 무결성 (HMAC)",
|
|
"sec.forwardSecrecy": "완전 순방향 비밀성",
|
|
"sec.metadataProtection": "메타데이터 보호",
|
|
"sec.trafficObfuscation": "트래픽 난독화",
|
|
"sec.realTests": "실제 암호학 검사",
|
|
"sec.simulatedData": "모의 데이터",
|
|
"sec.testPassed": "검사 통과",
|
|
"sec.testFailed": "검사 실패 또는 사용 불가",
|
|
"sec.verificationDone": "실제 암호학 검증이 끝났습니다",
|
|
"sec.verificationInProgress": "보안 검증 진행 중…",
|
|
"sec.verificationWait": "보안 검증 진행 중…\n실시간 암호학 검증이 끝날 때까지 기다려 주세요.",
|
|
"sec.verificationUnavailable": "보안 검증을 쓸 수 없습니다",
|
|
"chat.placeholder": "암호화된 메시지를 쓰세요…",
|
|
"chat.send": "메시지 보내기",
|
|
"chat.sendFiles": "파일 보내기",
|
|
"chat.hideFiles": "파일 숨기기",
|
|
"chat.recordVoice": "음성 메시지 녹음",
|
|
"chat.sendVoice": "음성 메시지 보내기",
|
|
"chat.discard": "취소",
|
|
"chat.codeBlock": "코드 블록으로 보내기 (입력창이 넓어집니다)",
|
|
"chat.codeHint": "코드 조각 · 서식 유지 · ⌘↵ 로 전송",
|
|
"chat.viewOnce": "한 번만 보기",
|
|
"chat.viewOnceTitle": "한 번만 보기 - 상대가 읽으면 사라집니다",
|
|
"chat.viewOncePrefix": "한 번만 보기 · ",
|
|
"chat.viewOnceTap": "한 번만 보기 · 눌러서 확인",
|
|
"chat.viewedOnce": "이미 확인함",
|
|
"chat.disappearing": "사라지는 메시지 - 양쪽에서 삭제됩니다",
|
|
"chat.disappearAfter": "사라지기까지",
|
|
"chat.visibleFor": "표시 시간",
|
|
"chat.timerPrefix": "타이머 · ",
|
|
"chat.expired": "이 메시지는 만료되었습니다",
|
|
"chat.deleteForEveryone": "모두에게서 삭제",
|
|
"chat.sending": "보내는 중",
|
|
"chat.delivered": "전달됨",
|
|
"chat.notSent": "보내지 못함",
|
|
"chat.notSentReason": "보내지 못함 - 보안 채널이 아직 준비되지 않았습니다. 다시 연결한 뒤 계속하세요.",
|
|
"chat.encrypted": "암호화됨",
|
|
"chat.decrypted": "복호화됨",
|
|
"chat.encryptedOnDevice": "기기에서 암호화됨",
|
|
"chat.uploading": "올리는 중",
|
|
"chat.downloading": "내려받는 중",
|
|
"chat.transferring": "전송 중…",
|
|
"chat.copied": "복사했습니다",
|
|
"chat.collapse": "접기",
|
|
"chat.closeMenu": "메뉴 닫기",
|
|
"chat.newChat": "새 대화",
|
|
"chat.newGroup": "새 그룹",
|
|
"chat.createGroup": "그룹 만들기",
|
|
"chat.groupChats": "그룹 대화",
|
|
"chat.secureChat": "안전한 대화",
|
|
"chat.nameThis": "이 대화에 이름 붙이기",
|
|
"chat.rename": "대화 이름 바꾸기 (기기 안에서만)",
|
|
"chat.renameHint": "두 번 눌러 이름 바꾸기",
|
|
"chat.localLabel": "기기 안 이름 · 이 기기에만 저장됩니다",
|
|
"chat.setStatus": "상태 설정",
|
|
"chat.yourStatusPrefix": "내 상태 - ",
|
|
"chat.meshHint": "최대 8명 · P2P 메시",
|
|
"chat.offline": "오프라인",
|
|
"chat.noNetwork": "네트워크 없음 · 재연결 중",
|
|
"chat.startVoiceCall": "암호화 음성 통화 걸기",
|
|
"chat.startVideoCall": "암호화 영상 통화 걸기",
|
|
"chat.verifyForCalls": "통화를 쓰려면 먼저 세션을 확인하세요",
|
|
"chat.e2eeNote": "모든 메시지는 기기를 떠나기 전에 종단 간 암호화됩니다.",
|
|
"chat.peersOnly": "연결된 상대에게만 종단 간으로 전송되며 - 서버에 저장되지 않습니다.",
|
|
"flow.invitationCreated": "안전한 초대를 만들었습니다",
|
|
"flow.invitationCreatedBang": "안전한 초대를 만들고 암호화했습니다.",
|
|
"flow.responseCreated": "안전한 응답을 만들었습니다",
|
|
"flow.responseCreatedBang": "안전한 응답을 만들었습니다.",
|
|
"flow.sendInvitation": "안전한 경로(통화, 문자 등)로 초대 코드를 상대에게 보내세요.",
|
|
"flow.sendResponse": "안전한 경로로 응답 코드를 처음 연 사람에게 보내거나, 아래 QR을 스캔하게 하세요.",
|
|
"flow.sendEncryptedCode": "암호화된 코드 보내기",
|
|
"flow.sendTheResponse": "응답 보내기",
|
|
"flow.pasteOrWrite": "코드를 붙여넣거나 입력하세요…",
|
|
"flow.processingInvitation": "안전한 초대를 처리하는 중…",
|
|
"flow.processingResponse": "안전한 응답을 처리하는 중…",
|
|
"flow.finalizing": "안전한 연결을 마무리하는 중…",
|
|
"flow.channelEstablished": "안전한 채널이 만들어졌습니다",
|
|
"flow.channelReady": "안전한 채널이 준비되었습니다",
|
|
"flow.restoring": "연결을 되살리는 중…",
|
|
"flow.invitationCaptured": "초대를 읽었습니다.",
|
|
"err.needInvitation": "상대가 준 초대 코드를 붙여넣어야 합니다.",
|
|
"err.needResponse": "상대가 준 응답 코드를 붙여넣어야 합니다.",
|
|
"err.responseFormat": "응답 형식이 올바르지 않습니다 - 코드를 확인하세요",
|
|
"err.responseNoKey": "응답 코드가 올바르지 않습니다 - 암호 키가 없거나 손상되었습니다. 코드를 확인한 뒤 다시 시도하세요.",
|
|
"err.responseNoSignKey": "응답 코드가 올바르지 않습니다 - 서명 확인 키가 없습니다. 코드를 확인한 뒤 다시 시도하세요.",
|
|
"err.responseOutdated": "응답 데이터가 오래되었습니다 - 새 초대를 사용하세요",
|
|
"err.setupError": "연결을 맺는 중 오류가 났습니다",
|
|
"err.notReady": "연결이 아직 준비되지 않았습니다",
|
|
"err.securityBreach": "보안 침해가 감지되어 연결을 거부했습니다",
|
|
"err.securityValidation": "보안 검증에 실패했습니다 - 공격일 수 있습니다",
|
|
"err.retiredQr": "이 QR은 더 이상 쓰지 않는 형식이라 초대를 전달하지 못했습니다. 상대에게 새로 만들어 달라고 하거나 복사·붙여넣기를 쓰세요.",
|
|
"err.compressedQrNote": "압축된 QR은 간결함을 위해 SDP를 생략할 수 있습니다. 연결에 실패하면 복사·붙여넣기를 쓰세요.",
|
|
"err.inviteNotConnected": "초대를 보내지 못했습니다. 그 대화는 지금 연결되어 있지 않습니다.",
|
|
"err.inviteNotConnectedRetry": "초대를 보내지 못했습니다. 그 대화는 지금 연결되어 있지 않습니다 - 다시 열고 시도하세요.",
|
|
"err.nobodyAccepted": "아무도 초대를 수락하지 않았습니다. 그룹은 그대로입니다.",
|
|
"err.noAudio": "소리가 녹음되지 않았습니다 - 마이크 권한을 확인한 뒤 다시 시도하세요.",
|
|
"err.voiceNeedsConnection": "음성 메시지를 보내려면 활성화된 안전한 연결이 필요합니다. 다시 연결한 뒤 시도하세요.",
|
|
"err.voiceRestoring": "연결을 되살리는 중입니다 - 잠시 뒤에 음성 메시지를 다시 보내보세요.",
|
|
"err.fileTooLarge": "파일이 너무 큽니다",
|
|
"sas.safetyNumber": "안전 번호",
|
|
"sas.incorrect": "코드가 맞지 않습니다. 상대와 대조한 뒤 다시 시도하세요.",
|
|
"sas.noMatch": "코드가 일치하지 않습니다",
|
|
"sas.makeSure": "두 코드가 정확히 같은지 확인하세요.",
|
|
"sas.tooManyAttempts": "잘못된 시도가 너무 많습니다. 안전을 위해 세션을 초기화했습니다.",
|
|
"sas.verificationFailed": "확인 실패",
|
|
"sas.verified": "확인됨 · 완전 순방향 비밀성",
|
|
"sas.runVerification": "보안 검증 실행",
|
|
"sec.panelTitle": "네트워크와 암호학 상세",
|
|
"sec.security": "보안",
|
|
"sec.transport": "전송",
|
|
"sec.keyExchange": "키 교환",
|
|
"sec.allEnabled": "모든 보안 기능이 기본으로 켜져 있습니다",
|
|
"sec.realTimeNote": "실제 암호학 함수로 실시간 검증합니다 - 꾸며낸 데이터는 없습니다.",
|
|
"sec.simulatedWarning": "주의: 연결이 아직 완전히 맺어지지 않았을 수 있어 - 값이 모의일 수 있습니다.",
|
|
"dl.title": "SecureBit 내려받기",
|
|
"dl.free": "무료 · 공개 소스",
|
|
"dl.soon": "모바일 앱(iOS, Android)과 브라우저 확장(Chrome, Firefox, Opera)이 곧 나옵니다.",
|
|
"chatHdr.chat": "대화",
|
|
"chatHdr.chats": "대화",
|
|
"chatHdr.newChat": "+ 새로",
|
|
"chatHdr.secure": "보안",
|
|
"chatHdr.p2pSub": "P2P · 종단 간 암호화",
|
|
"chatHdr.save": "저장",
|
|
"chatHdr.close": "닫기",
|
|
"chatHdr.expand": "넓게 보기",
|
|
"chatHdr.you": "나",
|
|
"chatHdr.qrCode": "QR 코드",
|
|
"chat.disconnected": "연결 끊김",
|
|
"call.mute": "음소거",
|
|
"call.endShort": "종료",
|
|
"group.add": "추가",
|
|
"group.send": "보내기",
|
|
"sec.pfsShort": "완전 순방향 비밀성",
|
|
"sec.cipher": "암호",
|
|
"chat.close": "닫기",
|
|
"file.needConnection": "파일 전송에는 연결이 필요합니다",
|
|
"presence.available": "대화 가능",
|
|
"presence.away": "자리 비움",
|
|
"presence.busy": "바쁨",
|
|
"presence.offline": "오프라인",
|
|
"presence.invisible": "숨김",
|
|
"presence.availableDesc": "온라인이며 연락 가능",
|
|
"presence.awayDesc": "자리 비움 · 잠시 나감",
|
|
"presence.busyDesc": "방해 금지",
|
|
"presence.invisibleDesc": "다른 사람에게 오프라인으로 보이기",
|
|
"presence.online": "온라인",
|
|
"conn.p2p": "P2P · 연결됨",
|
|
"conn.verifying": "확인 중…",
|
|
"conn.connecting": "연결 중…",
|
|
"conn.reconnecting": "다시 연결 중…",
|
|
"conn.peerDisconnected": "상대가 연결을 끊었습니다",
|
|
"conn.disconnected": "연결 끊김",
|
|
"chat.defaultLabel": "대화",
|
|
"groupPhase.forming": "구성하는 중…",
|
|
"groupPhase.commitments": "확약을 주고받는 중…",
|
|
"groupPhase.revealing": "공개하는 중…",
|
|
"groupPhase.compare": "그룹 코드를 대조하세요",
|
|
"groupPhase.ready": "그룹 준비 완료",
|
|
"groupPhase.failed": "그룹이 만들어지지 않았습니다",
|
|
"call.qualityGood": "좋음",
|
|
"call.qualityFair": "보통",
|
|
"call.qualityWeak": "약함",
|
|
"msg.code": "코드",
|
|
"msg.timer": "타이머",
|
|
"msg.voice": "음성",
|
|
"msg.play": "재생",
|
|
"msg.sent": "보냄",
|
|
"msg.read": "읽음",
|
|
"report.title": "실시간 보안 검증",
|
|
"report.active": "동작 중",
|
|
"report.testsPassed": "통과한 검사",
|
|
"report.verifiedAt": "검증 시각",
|
|
"report.source": "출처",
|
|
"secTest.verifyECDHKeyExchange": "ECDH 키 교환",
|
|
"secTest.verifyECDSASignatures": "ECDSA 전자 서명",
|
|
"secTest.verifyEncryption": "AES-GCM 암호화",
|
|
"secTest.verifyMessageIntegrity": "메시지 무결성",
|
|
"secTest.verifyPerfectForwardSecrecy": "완전 순방향 비밀성",
|
|
"secTest.verifyPFS": "완전 순방향 비밀성",
|
|
"secTest.verifyReplayProtection": "재전송 공격 방어",
|
|
"secTest.verifyDTLSFingerprint": "DTLS 지문",
|
|
"secTest.verifySASVerification": "SAS 확인",
|
|
"secTest.verifyMetadataProtection": "메타데이터 보호",
|
|
"secTest.verifyTrafficObfuscation": "트래픽 난독화",
|
|
"secTest.verifyPacketPadding": "패킷 패딩",
|
|
"secTest.verifyNestedEncryption": "중첩 암호화",
|
|
"secTest.verifyNonExtractableKeys": "추출 불가 키",
|
|
"secTest.verifyRateLimiting": "속도 제한",
|
|
"secTest.verifyMutualAuth": "상호 인증",
|
|
"secTest.verifyAuthProof": "인증 증명",
|
|
"secTest.verifyEnhancedValidation": "강화된 검증",
|
|
"secTest.verifyAdvancedFeatures": "고급 기능",
|
|
"secTest.verifySignature": "서명 검사",
|
|
"secDetail.Security system initializing...": "보안 시스템을 시작하는 중…",
|
|
"secDetail.Nested encryption active": "중첩 암호화가 켜져 있습니다",
|
|
"secDetail.Nested encryption failed": "중첩 암호화 실패",
|
|
"secDetail.Packet padding active": "패킷 패딩이 켜져 있습니다",
|
|
"secDetail.Packet padding failed": "패킷 패딩 실패",
|
|
"secDetail.Advanced features active": "고급 기능이 켜져 있습니다",
|
|
"secDetail.Advanced features failed": "고급 기능 실패",
|
|
"secDetail.No encryption key available": "쓸 수 있는 암호화 키가 없습니다",
|
|
"secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM 암호화와 복호화가 정상 동작합니다",
|
|
"secDetail.No ECDH key pair available": "쓸 수 있는 ECDH 키 쌍이 없습니다",
|
|
"secDetail.Key derivation failed": "키 유도에 실패했습니다",
|
|
"secDetail.No ECDSA key pair available": "쓸 수 있는 ECDSA 키 쌍이 없습니다",
|
|
"secDetail.ECDSA digital signatures working correctly": "ECDSA 전자 서명이 정상 동작합니다",
|
|
"secDetail.MAC key not available or invalid": "MAC 키가 없거나 올바르지 않습니다",
|
|
"secDetail.Rate limiter did not block a message over the limit": "속도 제한기가 한도를 넘은 메시지를 막지 못했습니다",
|
|
"secDetail.Rate limiter is not available": "속도 제한기를 쓸 수 없습니다",
|
|
"secDetail.Replay protection is working correctly": "재전송 공격 방어가 정상 동작합니다",
|
|
"secDetail.Replay protection not enabled": "재전송 공격 방어가 꺼져 있습니다",
|
|
"secDetail.SAS code not available": "SAS 코드를 쓸 수 없습니다",
|
|
"secDetail.SAS verification code is valid and available": "SAS 확인 코드가 유효하며 사용할 수 있습니다",
|
|
"secDetail.Traffic obfuscation is working correctly": "트래픽 난독화가 정상 동작합니다",
|
|
"secDetail.Traffic obfuscation not enabled": "트래픽 난독화가 꺼져 있습니다",
|
|
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "이 세션에는 추출할 수 없는 일회용 ECDH 키 쌍이 없습니다",
|
|
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "세션 단위 순방향 비밀성만 적용됩니다. 키는 세션마다 일회용이지만 이 연결에서는 Double Ratchet이 동작하지 않아(상대가 이전 버전 사용), 세션 키가 유출되면 대화 전체가 드러납니다.",
|
|
"msg.pause": "일시정지",
|
|
"msg.failed": "실패",
|
|
"groupErr.timeout": "코드가 준비되기 전에 어떤 구성원이 응답을 멈췄습니다.",
|
|
"groupErr.keyMismatch": "어떤 구성원의 키가 밝힌 신원과 맞지 않았습니다.",
|
|
"groupErr.revealMismatch": "어떤 구성원이 공개한 값이 앞서 확약한 것과 맞지 않았습니다.",
|
|
"groupErr.commitChanged": "어떤 구성원이 도중에 확약을 바꿨습니다.",
|
|
"groupErr.missingKey": "명단에 있던 구성원의 키가 끝내 도착하지 않았습니다.",
|
|
"groupErr.outsider": "그룹 밖의 누군가에게서 프레임이 도착했습니다.",
|
|
"groupErr.limit": "그룹은 최대 여덟 명까지입니다.",
|
|
"groupErr.tooLarge": "메시지가 너무 커서 그룹에 보낼 수 없었습니다.",
|
|
"fileType.text": "일반 텍스트",
|
|
"fileType.images": "이미지",
|
|
"fileType.archives": "압축 파일",
|
|
"fileType.voice": "음성 메시지",
|
|
"fileType.unsupported": "지원하지 않음",
|
|
"qrScan.title": "QR 코드 스캔",
|
|
"qrScan.auto": "자동 모드",
|
|
"qrScan.reset": "초기화",
|
|
"qrScan.autoScroll": "자동 스크롤이 켜졌습니다",
|
|
"qrScan.starting": "카메라를 켜는 중…",
|
|
"qrScan.point": "상대의 QR에 카메라를 맞추세요",
|
|
"qrScan.tapFocus": "화면을 눌러 초점을 맞추세요",
|
|
"qrScan.focusing": "초점 맞추는 중…",
|
|
"iceErr.notArray": "서버 목록은 배열이어야 합니다",
|
|
"iceErr.invalidJson": "올바르지 않은 JSON",
|
|
"iceErr.tooMany": "서버가 너무 많습니다 (최대 {max}개)",
|
|
"iceErr.invalidEntry": "{label}: 올바르지 않은 항목",
|
|
"iceErr.urlCount": "{label}: URL이 1개에서 {max}개 사이여야 합니다",
|
|
"iceErr.turnCreds": "{label}: TURN 서버는 보통 사용자 이름과 자격 증명이 필요합니다",
|
|
"iceUrl.notString": "URL은 문자열이어야 합니다",
|
|
"iceUrl.empty": "URL이 비어 있습니다",
|
|
"iceUrl.tooLong": "URL이 너무 깁니다",
|
|
"iceUrl.badChars": "URL에 쓸 수 없는 문자가 있습니다",
|
|
"iceUrl.badScheme": "URL은 stun:, stuns:, turn: 또는 turns: 로 시작해야 합니다",
|
|
"iceUrl.badQuery": "URL의 질의가 올바르지 않습니다",
|
|
"iceUrl.noHost": "URL에 호스트가 없습니다",
|
|
"iceUrl.badHost": "URL의 호스트나 포트가 올바르지 않습니다",
|
|
"iceUrl.badTransport": "URL 질의는 transport=udp 또는 transport=tcp 여야 합니다",
|
|
"msg.off": "끔",
|
|
"file.consentUnavailable": "동의를 구할 수 없습니다",
|
|
"secLevel.MAXIMUM": "최고",
|
|
"secLevel.INITIALIZING": "시작 중",
|
|
"secLevel.ERROR": "오류",
|
|
"secLevel.UNKNOWN": "알 수 없음",
|
|
"status.error": "오류",
|
|
"offline.disconnect": "연결 끊기",
|
|
"offline.learnMore": "자세히 보기",
|
|
"pwa.installApp": "앱 설치",
|
|
"chat.onWeb": "웹 버전을 쓰고 있습니다",
|
|
"groupCall.startVoice": "그룹 음성 통화 시작",
|
|
"groupCall.startVideo": "그룹 영상 통화 시작",
|
|
"groupCall.join": "참여",
|
|
"groupCall.dismiss": "나중에",
|
|
"groupCall.leave": "통화 나가기",
|
|
"groupCall.you": "나",
|
|
"groupCall.connecting": "연결 중…",
|
|
"groupCall.waitingLink": "직접 연결을 기다리는 중…",
|
|
"groupCall.legFailed": "연결하지 못했습니다",
|
|
"groupCall.startedVoice": "{name} 님이 음성 통화를 시작했습니다",
|
|
"groupCall.startedVideo": "{name} 님이 영상 통화를 시작했습니다",
|
|
"groupCall.inCall": "통화 중 {count}명",
|
|
"groupCall.err.permission_denied": "통화를 시작할 수 없습니다 - 마이크와 카메라 접근이 차단되어 있습니다. 이 사이트에 허용한 뒤 다시 시도하세요.",
|
|
"groupCall.err.device_not_found": "통화를 시작할 수 없습니다 - 이 기기에서 마이크를 찾을 수 없습니다.",
|
|
"groupCall.err.device_busy": "통화를 시작할 수 없습니다 - 마이크를 다른 앱이 사용 중입니다. 종료한 뒤 다시 시도하세요.",
|
|
"groupCall.err.media_failed": "통화를 시작할 수 없습니다 - 마이크를 열지 못했습니다.",
|
|
"groupCall.err.call_in_progress": "이 그룹에서 이미 통화가 진행 중입니다. 새로 시작하지 말고 참여하세요.",
|
|
"groupCall.err.not_ready": "통화하기 전에 그룹 코드를 확인하세요.",
|
|
"groupCall.speaking": "{name} 님이 말하는 중",
|
|
"groupCall.pin": "{name} 크게 보기",
|
|
"groupCall.unpin": "전체 보기로 돌아가기",
|
|
"groupCall.showEveryone": "전체",
|
|
"msg.after5s": "읽은 뒤 5초",
|
|
"msg.after15s": "읽은 뒤 15초",
|
|
"msg.after30s": "읽은 뒤 30초",
|
|
"msg.after1m": "읽은 뒤 1분",
|
|
"msg.sec30": "30초",
|
|
"msg.min5": "5분",
|
|
"msg.hour1": "1시간",
|
|
"desktop.shareDesc": "상대에게 코드를 보내세요. 일회용이며 곧 만료됩니다.",
|
|
"desktop.invitationCreated": "보안 초대가 만들어졌습니다 - 상대에게 보내세요.",
|
|
"desktop.joinDesc": "상대의 초대 코드를 붙여넣어 보안 응답을 만드세요.",
|
|
"desktop.offerTag": "초대 · 텍스트 복사",
|
|
"desktop.answerTag": "응답 · 텍스트 복사",
|
|
"desktop.offerPlaceholder": "초대 코드가 여기에 표시됩니다…",
|
|
"desktop.answerPlaceholder": "응답 코드가 여기에 표시됩니다…",
|
|
"desktop.backToChats": "채팅으로 돌아가기",
|
|
"desktop.sendFeedback": "피드백 보내기",
|
|
"desktop.callsNeedVerified": "통화하려면 검증된 보안 채널이 필요합니다.",
|
|
"desktop.noOpenChannel": "열린 보안 채널이 없습니다.",
|
|
"desktop.chatCarriesCall": "이 채팅이 그룹 통화를 전달하고 있습니다. 1:1 통화를 걸기 전에 그룹 통화에서 나가세요.",
|
|
"desktop.err.permission_denied": "통화를 시작할 수 없습니다 - 마이크와 카메라 접근이 차단되어 있습니다. 시스템 설정에서 허용한 뒤 다시 시도하세요.",
|
|
"desktop.language": "언어",
|
|
"desktop.languageHint": "즉시 적용됩니다. 이미 보낸 메시지는 원래 언어 그대로 남습니다.",
|
|
"desktop.compareCode": "상대와 확인 코드를 비교하고 일치하면 확인하세요.",
|
|
"desktop.verifyBeforeFiles": "파일을 보내기 전에 검증을 마치세요.",
|
|
"desktop.verifyBeforeSending": "메시지를 보내기 전에 검증을 마치세요.",
|
|
"desktop.disconnectedByBackend": "연결이 안전하게 종료되었습니다.",
|
|
"desktop.restoreFailed": "연결을 복구하지 못했습니다. 이 채팅을 닫습니다.",
|
|
"desktop.channelNotReady": "데이터 채널이 아직 없습니다. 연결이 맺어질 때까지 기다리세요.",
|
|
"desktop.enterCode": "확인 코드를 입력하세요.",
|
|
"desktop.noOffer": "초대가 없습니다. 먼저 만드세요.",
|
|
"desktop.notInitiator": "이 연결을 만든 쪽이 아니므로 적용할 응답이 없습니다.",
|
|
"desktop.decryptFailed": "메시지를 복호화하지 못해 버렸습니다.",
|
|
"desktop.badMessageFormat": "형식이 잘못된 프레임이 도착해 버렸습니다.",
|
|
"desktop.notSentNotReady": "메시지를 보내지 못했습니다: 보안 채널이 준비되지 않았습니다. 검증이 끝나기를 기다리거나 다시 연결하세요.",
|
|
"desktop.micDenied": "마이크 접근이 거부되었습니다.",
|
|
"desktop.noChannelWait": "열린 보안 채널이 없습니다 - 연결이 맺어질 때까지 기다리세요.",
|
|
"desktop.sasFailed": "검증에 실패했습니다. 중간자가 있을 수 있어 연결을 중단했습니다.",
|
|
"desktop.sasOk": "검증에 성공했습니다. 이 채널은 종단 간 인증되었습니다.",
|
|
"desktop.iceForgotten": "저장된 서버를 지웠습니다. 공개 ICE 서버를 사용합니다.",
|
|
"desktop.icePublic": "공개 ICE 서버를 사용합니다.",
|
|
"desktop.verificationInProgress": "보안 검증이 아직 진행 중입니다. 끝날 때까지 기다리세요.",
|
|
"desktop.fileGone": "이 파일은 더 이상 내려받을 수 없습니다.",
|
|
"desktop.codeMismatch": "확인 코드가 일치하지 않습니다. 안전을 위해 연결을 끊습니다.",
|
|
"desktop.noLocalCode": "검증 실패: 비교할 로컬 파생 코드가 없습니다. 안전을 위해 연결을 끊습니다.",
|
|
"desktop.protocolViolation": "상대가 당신이 확인하기 전에 코드가 확인되었다고 주장했습니다. 안전을 위해 연결을 끊습니다.",
|
|
"desktop.verificationRejected": "검증이 거부되었습니다. 안전을 위해 연결을 중단했습니다.",
|
|
"secLevel.HIGH": "높음",
|
|
"secLevel.MEDIUM": "보통",
|
|
"secLevel.LOW": "낮음",
|
|
"desktop.rerun": "다시 검사",
|
|
"desktop.ice.customDesc": "최대 {max}개 서버, 한 줄에 URL 하나 또는 JSON.",
|
|
"desktop.ice.persistDesc": "이 기기에 로컬로 저장됩니다. 이번 세션에만 사용하려면 꺼 두세요.",
|
|
"desktop.group.leaveNote": "다른 구성원에게 당신이 나갔다고 알립니다. 이후 이 기기에는 이 그룹에 대한 것이 아무것도 남지 않습니다 - 다시 들어갈 사본을 가진 서버가 없으므로 새 초대가 필요합니다.",
|
|
"desktop.sec.ecdsaOk": "핸드셰이크 중 상대 키 패키지 서명을 검증했습니다 (ECDSA P-384 / SHA-384)",
|
|
"desktop.sec.ecdsaNone": "완료된 핸드셰이크가 없습니다",
|
|
"desktop.sec.ecdhOk": "임시 ECDH P-384 교환에서 HKDF-SHA-256으로 세션 키를 파생했습니다",
|
|
"desktop.sec.ecdhNone": "세션 키가 파생되지 않았습니다",
|
|
"desktop.sec.encryptionOk": "코어에서 AES-GCM 암·복호화를 검증했습니다",
|
|
"desktop.sec.encryptionNa": "AES-GCM 자체 검사를 실행할 수 없었습니다",
|
|
"desktop.sec.integrityOk": "메시지 무결성을 검증했습니다 (AES-GCM 인증)",
|
|
"desktop.sec.integrityNa": "무결성 자체 검사를 실행할 수 없었습니다",
|
|
"desktop.sec.pfsOk": "Double Ratchet 작동 중 - 메시지마다 고유한 키가 있습니다",
|
|
"desktop.sec.pfsNa": "측정되지 않음",
|
|
"desktop.sec.replayOk": "래칫 메시지 키는 사용 즉시 파기되어 가로챈 프레임을 재생할 수 없습니다",
|
|
"desktop.sec.replayNa": "측정되지 않음",
|
|
"desktop.sec.dtlsPinned": "상대 DTLS 지문 고정: {fp}",
|
|
"desktop.sec.dtlsNone": "원격 DTLS 지문이 없습니다",
|
|
"desktop.sec.sasBoth": "양쪽 모두 대역 외에서 안전 코드를 확인했습니다",
|
|
"desktop.sec.sasIncomplete": "안전 코드가 양쪽 모두에게 확인되지 않았습니다",
|
|
"desktop.sec.metadataOk": "전용 메타데이터 키를 파생했습니다 (HKDF metadata-protection-v4)",
|
|
"desktop.sec.metadataNone": "메타데이터 키 없음",
|
|
"desktop.sec.coverOn": "위장 트래픽 작동 중: 래칫 채널에 무작위 더미 프레임 (15-30초마다 32-128 B)",
|
|
"desktop.sec.coverOff": "위장 트래픽 생성기가 실행되고 있지 않습니다",
|
|
"desktop.sec.coverUnsupported": "위장 트래픽에는 Double Ratchet 세션이 필요합니다 (상대가 구버전입니다)",
|
|
"desktop.tagline": "종단 간 자유"
|
|
},
|
|
"manifest": {
|
|
"name": "SecureBit.chat - 종단 간 암호화 비공개 메신저",
|
|
"short_name": "SecureBit",
|
|
"description": "ECDH, DTLS, SAS로 보호되는 군용 수준 암호화 P2P 메신저"
|
|
}
|
|
}
|