From 74a79f75b561bc3e8572a372e282288a005713e2 Mon Sep 17 00:00:00 2001 From: moduvoice Date: Mon, 13 Jul 2026 14:00:06 +0700 Subject: [PATCH] feat(i18n): add Korean (ko) translation for the status page (#2278) Add a full Korean message catalog (apps/status-page/messages/ko.json, all 139 keys translated from en.json) and register the ko locale in @openstatus/locales (locales list, localeDetails, and date-fns locale). ICU placeholders preserved. --- apps/status-page/messages/ko.json | 141 ++++++++++++++++++++++++++++++ packages/locales/index.ts | 6 +- 2 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 apps/status-page/messages/ko.json diff --git a/apps/status-page/messages/ko.json b/apps/status-page/messages/ko.json new file mode 100644 index 00000000..741c937c --- /dev/null +++ b/apps/status-page/messages/ko.json @@ -0,0 +1,141 @@ +{ + "Y9HHck": "인증", + "1QcGkA": "상태 페이지에 접근하기 위한 매직 링크를 받으려면 이메일을 입력하세요. 참고: 승인된 도메인의 이메일만 허용됩니다.", + "txkW56": "제출 중...", + "wSZR47": "제출", + "OrFVks": "받은 편지함을 확인하세요!", + "n36zhX": "이메일의 링크를 클릭하여 상태 페이지에 접근하세요.", + "qIAQSi": "보호된 페이지", + "lbw10C": "상태 페이지에 접근하려면 비밀번호를 입력하세요.", + "t262xH": "이메일과 리디렉션 주소가 필요합니다", + "DwevKz": "로그인 중 예기치 않은 오류가 발생했습니다", + "xOqgA3": "접근 제한", + "U2RCyj": "이 상태 페이지는 특정 IPv4 네트워크에서만 접근할 수 있습니다. 네트워크 관리자에게 문의하여 접근 권한을 받으세요.", + "Ppx673": "리포트", + "JCMXwP": "점검", + "I7B7SH": "점검 없음", + "OSI607": "이 상태 페이지에 등록된 점검이 없습니다.", + "a9S/OH": "점검을 찾을 수 없음", + "HSv9BP": "찾으시는 점검이 존재하지 않습니다.", + "VL1Y/1": "리포트를 찾을 수 없음", + "Ew1f8q": "찾으시는 리포트가 존재하지 않습니다.", + "wkVkCX": "구독이 취소되었습니다", + "9qFG9F": "구독 취소에 실패했습니다", + "PV34S9": "유효하지 않은 구독 토큰", + "ar0fZ/": "이 구독 토큰은 더 이상 유효하지 않습니다. 이미 구독을 취소했거나 링크가 만료되었을 수 있습니다.", + "orvpWh": "뒤로 가기", + "K8kTfz": "상태 페이지 업데이트를 받으려면 구독을 관리하세요.", + "3JgeEq": "{date}에 구독 취소됨", + "RXTZq5": "구독 취소 중...", + "cctOA4": "구독 취소", + "jHSHdV": "이 상태 페이지의 구독을 취소하시겠습니까? 더 이상 업데이트를 받지 못합니다.", + "47FYwb": "취소", + "awr0AJ": "모니터를 찾을 수 없음", + "CVsoUM": "찾으시는 모니터가 존재하지 않습니다.", + "BRGcS0": "글로벌 지연 시간", + "9vqdq3": "지역별 지연 시간", + "fFOayY": "지역", + "u81G9+": "가동 시간", + "i2FBWn": "체크", + "G5Lt80": "다양한 분위수를 기준으로 모든 활성 지역에서 집계된 지연 시간입니다.", + "YV7rXP": "지역별 지연 시간", + "6zzIEm": "p75 분위수 기준 지역별 지연 시간으로, 가장 느린 지역부터 정렬됩니다. 최대 6개 지역을 비교할 수 있습니다.", + "6pCzRs": "전체 가동 시간", + "zL23+z": "가동 시간 및 가용성의 주요 값을 투명하게 제공합니다.", + "gjBiyj": "로딩 중...", + "/72cxa": "유효하지 않거나 만료된 링크", + "R10mIw": "이 구독 취소 링크는 더 이상 유효하지 않습니다. 이미 구독을 취소했을 수 있습니다.", + "yFi/8F": "구독이 성공적으로 취소되었습니다", + "CmelO7": "{pageName}에서 더 이상 이메일 알림을 받지 않습니다.", + "JqiqNj": "오류가 발생했습니다", + "TnvU0H": "다시 시도하거나, 문제가 지속되면 지원팀에 문의하세요.", + "uW0VWi": "알림 구독 취소", + "deCYKO": "{pageName} 상태 업데이트에서 {email}의 구독을 취소하려고 합니다.", + "5HvAzP": "{email}로 업데이트를 받을 준비가 완료되었습니다!", + "ywcUO4": "잠시만 기다려 주세요 - 구독을 확인하는 중입니다", + "0Azlrb": "관리", + "cyR7Kh": "뒤로", + "2yCGR2": "링크가 클립보드에 복사되었습니다", + "u5aHb4": "링크 복사", + "m5BctM": "차트 범례", + "csFahs": "상대 시간", + "oBoa2n": "프리셋", + "gdve5D": "사용자 지정 범위", + "mOFG3K": "시작", + "3JVa6k": "종료", + "79eRW1": "확인 중...", + "dX7+Rv": "확인됨", + "m0fapd": "확인에 실패했습니다", + "sy+pv5": "이메일", + "9Utk00": "구독 업데이트 중...", + "Eq5gCU": "구독이 업데이트되었습니다", + "qp+wDV": "구독 업데이트에 실패했습니다", + "d/jCcy": "특정 구성 요소 구독", + "FlVuUh": "구독할 구성 요소 없음", + "8aUjqQ": "이 상태 페이지에는 구독할 구성 요소가 없습니다.", + "5sg7KC": "비밀번호", + "IGY48m": "구독 중...", + "Pgb3Xj": "구독됨", + "WOH7Yj": "구독에 실패했습니다", + "L7z2/k": "이 페이지에는 구독할 구성 요소가 없습니다.", + "BQBZU+": "모든 시스템 정상 작동", + "Dnob31": "정상 작동", + "b9fOA1": "성능 저하", + "VQDmmK": "성능 저하", + "80EXUh": "다운타임 성능", + "JOZGPR": "다운타임", + "dudqv/": "점검", + "D3rOMr": "데이터 없음", + "W6nSYE": "해결됨", + "1P6GMj": "모니터링 중", + "7cv4Uf": "확인됨", + "/GKH/w": "조사 중", + "myq2ZL": "정상", + "KN7zKn": "오류", + "SsC4IV": "성능 저하", + "Fh9xh1": "부분 중단", + "sSIbEd": "전면 중단", + "kkpP2k": "오늘", + "2wsjxR": "진행 중", + "2syGZB": "리포트 해결됨", + "FDReLp": "최근 알림 없음", + "qDj0JR": "최근 7일 이내에 리포트가 없습니다.", + "u++vY3": "리포트를 찾을 수 없음", + "2HGztY": "이 상태 페이지에 리포트가 없습니다.", + "50SA6J": "공개 모니터 없음", + "FHrzf5": "이 페이지에 추가된 공개 모니터가 없습니다.", + "3cc4Ct": "라이트", + "tOdNiY": "다크", + "+CwN9C": "시스템", + "EQpyb8": "테마 전환", + "uPb/gh": "업데이트 받기", + "8OoV56": "RSS 피드 받기", + "Auj/Ki": "Atom 피드 받기", + "SyYroX": "JSON 업데이트 받기", + "rptmhC": "Slack에서 상태 업데이트를 받으려면 아래 텍스트를 채널에 붙여넣으세요.", + "PSqtlY": "SSH로 상태 받기", + "NOyDVq": "제공", + "krEziQ": "문의하기", + "3Vaz8F": "상태 추적기", + "apbxET": "{n}일차 상태", + "GbVCQb": "다시 클릭하여 고정 해제", + "Coy6SH": "캘린더", + "heezSZ": "({duration} 후)", + "lKJjwW": "({timeFromLast} 전)", + "VaZnIX": "({duration} 동안)", + "jC7BY1": "{duration} 동안", + "tzMNF3": "상태", + "ZvKSfJ": "이벤트", + "xJrRMG": "모니터", + "tKMlOc": "메뉴", + "8kyEWd": "분위수는 데이터셋의 특정 백분위수를 나타냅니다.", + "kd0Igx": "예를 들어, p50은 50번째 백분위수로, 데이터의 50%가 이 값 아래에 있습니다. 더 높은 백분위수는 더 많은 데이터를 포함하며 상위 범위를 강조합니다.", + "CYs0LF": "이벤트 기록 보기", + "sjzDbu": "Slack", + "q0qMyV": "RSS", + "9y9QQh": "JSON", + "waUHa4": "SSH", + "cVqFq/": "리포트가 생성되거나 해결될 때마다 이메일 알림을 받으세요", + "gczcC5": "구독", + "45YlLU": "이메일을 인증하면 업데이트를 받을 준비가 완료됩니다." +} diff --git a/packages/locales/index.ts b/packages/locales/index.ts index ab437478..c30b83b0 100644 --- a/packages/locales/index.ts +++ b/packages/locales/index.ts @@ -1,7 +1,7 @@ import type { Locale as DateFnsLocale } from "date-fns/locale"; -import { de, enUS, fr, hi, tr } from "date-fns/locale"; +import { de, enUS, fr, hi, ko, tr } from "date-fns/locale"; -export const locales = ["en", "fr", "de", "tr", "hi"] as const; +export const locales = ["en", "fr", "de", "tr", "hi", "ko"] as const; export type Locale = (typeof locales)[number]; @@ -13,6 +13,7 @@ export const localeDetails: Record = { de: { name: "Deutsch", flag: "🇩🇪" }, tr: { name: "Türkçe", flag: "🇹🇷" }, hi: { name: "हिंदी", flag: "🇮🇳" }, + ko: { name: "한국어", flag: "🇰🇷" }, }; export const dateFnsLocales: Record = { @@ -21,4 +22,5 @@ export const dateFnsLocales: Record = { de, tr, hi, + ko, }; -- 2.51.2