diff --git a/README.md b/README.md index 3923ed27..005211d7 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ One-Click to deploy well-designed ChatGPT web UI on Vercel. - New in v2: create, share and debug your chat tools with prompt templates (mask) - Awesome prompts powered by [awesome-chatgpt-prompts-zh](https://github.com/PlexPt/awesome-chatgpt-prompts-zh) and [awesome-chatgpt-prompts](https://github.com/f/awesome-chatgpt-prompts) - Automatically compresses chat history to support long conversations while also saving your tokens -- I18n: English, 简体中文, 繁体中文, 日本語, Français, Español, Italiano, Türkçe, Deutsch, Tiếng Việt, Русский, Čeština +- I18n: English, 简体中文, 繁体中文, 日本語, Français, Español, Italiano, Türkçe, Deutsch, Tiếng Việt, Русский, Čeština, 한국어 ## Roadmap diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 032df3ab..9814c9f9 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -82,6 +82,7 @@ const cn = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "头像", diff --git a/app/locales/cs.ts b/app/locales/cs.ts index c0d3d284..6933535e 100644 --- a/app/locales/cs.ts +++ b/app/locales/cs.ts @@ -84,6 +84,7 @@ const cs: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Avatar", diff --git a/app/locales/de.ts b/app/locales/de.ts index fe19f0bc..b609a0bb 100644 --- a/app/locales/de.ts +++ b/app/locales/de.ts @@ -85,6 +85,7 @@ const de: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Avatar", diff --git a/app/locales/en.ts b/app/locales/en.ts index 71d1d11b..efafc3b0 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -84,6 +84,7 @@ const en: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Avatar", diff --git a/app/locales/es.ts b/app/locales/es.ts index cdc37130..6e88b460 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -84,6 +84,7 @@ const es: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어" }, }, Avatar: "Avatar", diff --git a/app/locales/fr.ts b/app/locales/fr.ts index b165b8f1..31433678 100644 --- a/app/locales/fr.ts +++ b/app/locales/fr.ts @@ -85,6 +85,7 @@ const fr: LocaleType = { vi: "Vietnamese", ru: "Русский", cs: "Čeština", + ko: "한국어" }, }, diff --git a/app/locales/index.ts b/app/locales/index.ts index ac90f770..b45ceebd 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -10,6 +10,7 @@ import DE from "./de"; import VI from "./vi"; import RU from "./ru"; import CS from "./cs"; +import KO from "./ko"; export type { LocaleType } from "./cn"; @@ -26,6 +27,7 @@ export const AllLangs = [ "vi", "ru", "cs", + "ko", ] as const; export type Lang = (typeof AllLangs)[number]; @@ -91,4 +93,5 @@ export default { vi: VI, ru: RU, cs: CS, + ko: KO, }[getLang()] as typeof CN; diff --git a/app/locales/it.ts b/app/locales/it.ts index f3791d91..655a6a89 100644 --- a/app/locales/it.ts +++ b/app/locales/it.ts @@ -84,6 +84,7 @@ const it: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Avatar", diff --git a/app/locales/jp.ts b/app/locales/jp.ts index 300a4140..5e386b28 100644 --- a/app/locales/jp.ts +++ b/app/locales/jp.ts @@ -84,6 +84,7 @@ const jp: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어" }, }, Avatar: "アバター", diff --git a/app/locales/ko.ts b/app/locales/ko.ts new file mode 100644 index 00000000..0ccb40e4 --- /dev/null +++ b/app/locales/ko.ts @@ -0,0 +1,247 @@ +import { SubmitKey } from "../store/config"; + +import type { LocaleType } from "./index"; + +const ko: LocaleType = { + WIP: "곧 출시 예정...", + Error: { + Unauthorized: "권한이 없습니다. 설정 페이지에서 액세스 코드를 입력하세요.", + }, + ChatItem: { + ChatItemCount: (count: number) => `${count}개의 메시지`, + }, + Chat: { + SubTitle: (count: number) => `ChatGPT와의 ${count}개의 메시지`, + Actions: { + ChatList: "채팅 목록으로 이동", + CompressedHistory: "압축된 기억력 메모리 프롬프트", + Export: "모든 메시지를 Markdown으로 내보내기", + Copy: "복사", + Stop: "중지", + Retry: "다시 시도", + Delete: "삭제", + }, + Rename: "채팅 이름 변경", + Typing: "입력 중...", + Input: (submitKey: string) => { + var inputHints = `${submitKey}를 눌러 보내기`; + if (submitKey === String(SubmitKey.Enter)) { + inputHints += ", Shift + Enter로 줄 바꿈"; + } + return inputHints + ", 프롬프트 검색을 위해 / 입력"; + }, + Send: "보내기", + Config: { + Reset: "기본값으로 재설정", + SaveAs: "마스크로 저장", + }, + }, + Export: { + Title: "모든 메시지", + Copy: "모두 복사", + Download: "다운로드", + MessageFromYou: "나의 메시지", + MessageFromChatGPT: "ChatGPT의 메시지", + }, + Memory: { + Title: "기억 프롬프트", + EmptyContent: "아직 내용이 없습니다.", + Send: "기억 보내기", + Copy: "기억 복사", + Reset: "세션 재설정", + ResetConfirm: + "재설정하면 현재 대화 기록과 기억력이 삭제됩니다. 정말 재설정하시겠습니까?", + }, + Home: { + NewChat: "새로운 채팅", + DeleteChat: "선택한 대화를 삭제하시겠습니까?", + DeleteToast: "채팅이 삭제되었습니다.", + Revert: "되돌리기", + }, + Settings: { + Title: "설정", + SubTitle: "모든 설정", + Actions: { + ClearAll: "모든 데이터 지우기", + ResetAll: "모든 설정 초기화", + Close: "닫기", + ConfirmResetAll: "모든 설정을 초기화하시겠습니까?", + ConfirmClearAll: "모든 데이터를 지우시겠습니까?", + }, + Lang: { + Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` + All: "All Languages", + Options: { + cn: "简体中文", + en: "English", + tw: "繁體中文", + fr: "Français", + es: "Español", + it: "Italiano", + tr: "Türkçe", + jp: "日本語", + de: "Deutsch", + vi: "Tiếng Việt", + ru: "Русский", + cs: "Čeština", + ko: "한국어", + }, + }, + Avatar: "아바타", + FontSize: { + Title: "글꼴 크기", + SubTitle: "채팅 내용의 글꼴 크기 조정", + }, + Update: { + Version: (x: string) => `버전: ${x}`, + IsLatest: "최신 버전", + CheckUpdate: "업데이트 확인", + IsChecking: "업데이트 확인 중...", + FoundUpdate: (x: string) => `새 버전 발견: ${x}`, + GoToUpdate: "업데이트", + }, + SendKey: "전송 키", + Theme: "테마", + TightBorder: "조밀한 테두리", + SendPreviewBubble: { + Title: "미리 보기 버블 전송", + SubTitle: "버블에서 마크다운 미리 보기", + }, + Mask: { + Title: "마스크 시작 화면", + SubTitle: "새로운 채팅 시작 전에 마스크 시작 화면 표시", + }, + Prompt: { + Disable: { + Title: "자동 완성 비활성화", + SubTitle: "자동 완성을 활성화하려면 /를 입력하세요.", + }, + List: "프롬프트 목록", + ListCount: (builtin: number, custom: number) => + `내장 ${builtin}개, 사용자 정의 ${custom}개`, + Edit: "편집", + Modal: { + Title: "프롬프트 목록", + Add: "추가", + Search: "프롬프트 검색", + }, + EditModal: { + Title: "프롬프트 편집", + }, + }, + HistoryCount: { + Title: "첨부된 메시지 수", + SubTitle: "요청당 첨부된 전송된 메시지 수", + }, + CompressThreshold: { + Title: "기록 압축 임계값", + SubTitle: + "미압축 메시지 길이가 임계값을 초과하면 압축됨", + }, + Token: { + Title: "API 키", + SubTitle: "액세스 코드 제한을 무시하기 위해 키 사용", + Placeholder: "OpenAI API 키", + }, + Usage: { + Title: "계정 잔액", + SubTitle(used: any, total: any) { + return `이번 달 사용액 ${used}, 구독액 ${total}`; + }, + IsChecking: "확인 중...", + Check: "확인", + NoAccess: "잔액 확인을 위해 API 키를 입력하세요.", + }, + AccessCode: { + Title: "액세스 코드", + SubTitle: "액세스 제어가 활성화됨", + Placeholder: "액세스 코드 입력", + }, + Model: "모델", + Temperature: { + Title: "온도 (temperature)", + SubTitle: "값이 클수록 더 무작위한 출력이 생성됩니다.", + }, + MaxTokens: { + Title: "최대 토큰 수 (max_tokens)", + SubTitle: "입력 토큰과 생성된 토큰의 최대 길이", + }, + PresencePenalty: { + Title: "존재 페널티 (presence_penalty)", + SubTitle: + "값이 클수록 새로운 주제에 대해 대화할 가능성이 높아집니다.", + }, + }, + Store: { + DefaultTopic: "새 대화", + BotHello: "안녕하세요! 오늘 도움이 필요하신가요?", + Error: "문제가 발생했습니다. 나중에 다시 시도해주세요.", + Prompt: { + History: (content: string) => + "이것은 AI와 사용자 간의 대화 기록을 요약한 내용입니다: " + + content, + Topic: + "다음과 같이 대화 내용을 요약하는 4~5단어 제목을 생성해주세요. 따옴표, 구두점, 인용부호, 기호 또는 추가 텍스트를 제거하십시오. 따옴표로 감싸진 부분을 제거하십시오.", + Summarize: + "200단어 이내로 저희 토론을 간략히 요약하여 앞으로의 맥락으로 사용할 수 있는 프롬프트로 만들어주세요.", + }, + }, + Copy: { + Success: "클립보드에 복사되었습니다.", + Failed: "복사 실패, 클립보드 접근 권한을 허용해주세요.", + }, + Context: { + Toast: (x: any) => `컨텍스트 프롬프트 ${x}개 사용`, + Edit: "컨텍스트 및 메모리 프롬프트", + Add: "프롬프트 추가", + }, + Plugin: { + Name: "플러그인", + }, + Mask: { + Name: "마스크", + Page: { + Title: "프롬프트 템플릿", + SubTitle: (count: number) => `${count}개의 프롬프트 템플릿`, + Search: "템플릿 검색", + Create: "생성", + }, + Item: { + Info: (count: number) => `${count}개의 프롬프롬프트`, + Chat: "채팅", + View: "보기", + Edit: "편집", + Delete: "삭제", + DeleteConfirm: "삭제하시겠습니까?", + }, + EditModal: { + Title: (readonly: boolean) => + `프롬프트 템플릿 편집 ${readonly ? "(읽기 전용)" : ""}`, + Download: "다운로드", + Clone: "복제", + }, + Config: { + Avatar: "봇 아바타", + Name: "봇 이름", + }, + }, + NewChat: { + Return: "돌아가기", + Skip: "건너뛰기", + Title: "마스크 선택", + SubTitle: "마스크 뒤의 영혼과 대화하세요", + More: "더 보기", + NotShow: "다시 표시하지 않음", + ConfirmNoShow: "비활성화하시겠습니까? 나중에 설정에서 다시 활성화할 수 있습니다.", + }, + + UI: { + Confirm: "확인", + Cancel: "취소", + Close: "닫기", + Create: "생성", + Edit: "편집", + }, + }; + +export default ko; diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 4bce2fbf..32930626 100644 --- a/app/locales/ru.ts +++ b/app/locales/ru.ts @@ -84,6 +84,7 @@ const ru: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Аватар", diff --git a/app/locales/tr.ts b/app/locales/tr.ts index 0c156265..86bcd95b 100644 --- a/app/locales/tr.ts +++ b/app/locales/tr.ts @@ -84,6 +84,7 @@ const tr: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Avatar", diff --git a/app/locales/tw.ts b/app/locales/tw.ts index f42431f2..5295f0e8 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -82,6 +82,7 @@ const tw: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "大頭貼", diff --git a/app/locales/vi.ts b/app/locales/vi.ts index 2f528a72..5f346b31 100644 --- a/app/locales/vi.ts +++ b/app/locales/vi.ts @@ -84,6 +84,7 @@ const vi: LocaleType = { vi: "Tiếng Việt", ru: "Русский", cs: "Čeština", + ko: "한국어", }, }, Avatar: "Ảnh đại diện",