From 29b5c393d1ebf3bb1bbc2f50f3274954c36cb53d Mon Sep 17 00:00:00 2001 From: _Jellen Date: Mon, 20 Feb 2023 09:54:12 +0900 Subject: [PATCH] feat: add Korean translation (#1127) added Korean translation --- api/user_setting.go | 2 +- web/src/components/LocaleSelect.tsx | 1 + web/src/i18n.ts | 4 + web/src/locales/ko.json | 268 ++++++++++++++++++++++++++++ web/src/types/i18n.d.ts | 2 +- 5 files changed, 275 insertions(+), 2 deletions(-) create mode 100644 web/src/locales/ko.json diff --git a/api/user_setting.go b/api/user_setting.go index a3d0d76b..c6c8b477 100644 --- a/api/user_setting.go +++ b/api/user_setting.go @@ -36,7 +36,7 @@ func (key UserSettingKey) String() string { } var ( - UserSettingLocaleValue = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es", "uk", "ru", "it", "hant"} + UserSettingLocaleValue = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es", "uk", "ru", "it", "hant", "ko"} UserSettingAppearanceValue = []string{"system", "light", "dark"} UserSettingMemoVisibilityValue = []Visibility{Private, Protected, Public} UserSettingMemoDisplayTsOptionKeyValue = []string{"created_ts", "updated_ts"} diff --git a/web/src/components/LocaleSelect.tsx b/web/src/components/LocaleSelect.tsx index 3bf4b398..0fd4a4d5 100644 --- a/web/src/components/LocaleSelect.tsx +++ b/web/src/components/LocaleSelect.tsx @@ -34,6 +34,7 @@ const LocaleSelect: FC = (props: Props) => { + ); }; diff --git a/web/src/i18n.ts b/web/src/i18n.ts index 5430836a..162a4d3b 100644 --- a/web/src/i18n.ts +++ b/web/src/i18n.ts @@ -12,6 +12,7 @@ import ukLocale from "./locales/uk.json"; import ruLocale from "./locales/ru.json"; import itLocale from "./locales/it.json"; import hantLocale from "./locales/zh-Hant.json"; +import koLocale from "./locales/ko.json"; i18n.use(initReactI18next).init({ resources: { @@ -51,6 +52,9 @@ i18n.use(initReactI18next).init({ hant: { translation: hantLocale, }, + ko: { + translation: koLocale, + }, }, lng: "en", fallbackLng: "en", diff --git a/web/src/locales/ko.json b/web/src/locales/ko.json new file mode 100644 index 00000000..659d3877 --- /dev/null +++ b/web/src/locales/ko.json @@ -0,0 +1,268 @@ +{ + "common": { + "sign-out": "로그아웃", + "back-to-home": "홈으로 돌아가기", + "about": "정보", + "email": "이메일", + "password": "비밀번호", + "repeat-password-short": "반복", + "repeat-password": "비밀번호 재확인", + "new-password": "새 비밀번호", + "repeat-new-password": "새 비밀번호 재확인", + "avatar": "아바타", + "username": "유저네임", + "nickname": "닉네임", + "save": "저장", + "close": "닫기", + "cancel": "취소", + "create": "생성", + "change": "변경", + "confirm": "확인", + "reset": "재설정", + "language": "언어", + "version": "버전", + "pin": "고정", + "unpin": "고정 해제", + "edit": "편집", + "restore": "복원", + "delete": "삭제", + "null": "비어 있음", + "share": "공유", + "archive": "보관 처리", + "basic": "기본", + "admin": "관리", + "explore": "탐색", + "sign-in": "로그인", + "sign-up": "회원등록", + "type": "타입", + "shortcuts": "바로가기", + "title": "제목", + "filter": "필터", + "tags": "태그", + "yourself": "자기 자신", + "archived-at": "보관처리됨", + "changed": "변경됨", + "update-on": "변동됨", + "fold": "접기", + "expand": "펼치기", + "image": "이미지", + "link": "링크", + "vacuum": "최적화", + "select": "선택", + "database": "데이터베이스" + }, + "memo": { + "copy": "복사", + "view-detail": "자세히 보기", + "visibility": { + "private": "나만 볼 수 있음", + "protected": "멤버들만 볼 수 있음", + "public": "모두가 볼 수 있음", + "disabled": "공개 메모는 비활성화됨" + } + }, + "shortcut-list": { + "shortcut-title": "바로가기 이름", + "create-shortcut": "바로가기 생성", + "edit-shortcut": "바로가기 변경", + "eligible-memo": "해당하는 메모", + "fill-previous": "위의 필터 값을 채워주세요", + "title-required": "제목이 있어야 합니다", + "value-required": "필터 값이 있어야 합니다" + }, + "amount-text": { + "memo_other": "메모", + "tag_other": "태그", + "day_other": "일차" + }, + "slogan": "지식 정리와 소셜 네트워킹 기능을 갖춘 자체 호스팅의 오픈 소스 메모 허브입니다.", + "auth": { + "signup-as-host": "호스트로서 회원등록", + "host-tip": "사이트 주인으로서의 계정을 등록합니다.", + "not-host-tip": "계정이 없다면 사이트 주인에게 문의해 주세요." + }, + "sidebar": { + "daily-review": "날마다 돌아보기", + "resources": "리소스", + "setting": "설정", + "archived": "보관함" + }, + "daily-review": { + "oops-nothing": "앗, 아무것도 없네요." + }, + "resources": { + "description": "이미지 같은 정적인 리소스를 메모에 삽입해보세요.", + "no-resources": "리소스 없음.", + "fetching-data": "불러오는 중...", + "upload": "업로드", + "preview": "미리보기", + "copy-link": "링크 복사", + "delete-resource": "리소스 삭제", + "warning-text": "이 리소스를 정말로 삭제합니까? 이 행동은 되돌릴 수 없습니다❗", + "linked-amount": "연결된 메모 수", + "rename": "이름 바꾸기", + "clear": "정리", + "warning-text-unused": "사용된 적 없는 다음 리소스들을 정말로 삭제합니까? 이 행동은 되돌릴 수 없습니다❗", + "no-unused-resources": "사용되지 않는 리소스 없음", + "name": "이름" + }, + "archived": { + "archived-memos": "보관처리된 메모", + "no-archived-memos": "보관처리된 메모가 없습니다.", + "fetching-data": "불러오는 중..." + }, + "editor": { + "editing": "편집 중...", + "cancel-edit": "편집 취소", + "save": "저장", + "placeholder": "떠오르는 게 있나요...", + "only-image-supported": "이미지 파일만 지원합니다.", + "cant-empty": "내용이 비어있을 수 없음", + "local": "로컬", + "resources": "리소스" + }, + "memo-list": { + "fetching-data": "불러오는 중...", + "fetch-more": "여기를 눌러 더 불러오세요" + }, + "filter": { + "new-filter": "새 필터", + "type": { + "tag": "태그", + "type": "종류", + "text": "내용", + "display-time": "표시 시각", + "visibility": "공개 범위" + }, + "operator": { + "contains": "포함", + "not-contains": "비포함", + "is": "해당", + "is-not": "비해당", + "before": "이전", + "after": "이후" + }, + "value": { + "not-tagged": "태그 없음", + "linked": "링크 있음" + }, + "text-placeholder": "^으로 시작하면 정규식 취급" + }, + "tag-list": { + "tip-text": "`#태그명`을 입력하세요" + }, + "search": { + "quickly-filter": "빠른 필터" + }, + "setting": { + "my-account": "내 계정", + "preference": "개인 설정", + "member": "멤버", + "member-list": "멤버 목록", + "system": "시스템", + "storage": "저장소", + "sso": "SSO", + "account-section": { + "title": "계정 정보", + "update-information": "정보 변경", + "change-password": "비밀번호 변경" + }, + "preference-section": { + "theme": "테마", + "default-memo-visibility": "메모 공개 설정 기본값", + "enable-folding-memo": "메모 접기 활성화", + "enable-double-click": "더블클릭시 편집 모드 활성화", + "editor-font-style": "편집기 글꼴 스타일", + "mobile-editor-style": "모바일 편집기 스타일", + "default-memo-sort-option": "메모에 표시할 시각", + "created_ts": "생성된 시각", + "updated_ts": "변경된 시각" + }, + "storage-section": { + "storage-services-list": "저장소 서비스 목록", + "create-a-service": "서비스 생성", + "update-a-service": "서비스 편집", + "warning-text": "이 저장소 서비스를 정말로 삭제합니까? 이 행동은 되돌릴 수 없습니다❗", + "delete-storage": "저장소 삭제" + }, + "member-section": { + "create-a-member": "새 멤버 등록" + }, + "system-section": { + "server-name": "서버 이름", + "customize-server": { + "title": "서버 커스터마이징", + "default": "기본값은 memos", + "icon-url": "아이콘 URL" + }, + "database-file-size": "데이터베이스 파일 크기", + "allow-user-signup": "회원등록 허용", + "disable-public-memos": "공개된 메모 금지", + "additional-style": "추가적인 스타일", + "additional-script": "추가적인 스크립트", + "additional-style-placeholder": "추가적인 CSS 코드", + "additional-script-placeholder": "추가적인 JavaScript 코드" + }, + "apperance-option": { + "system": "시스템 설정을 따름", + "light": "항상 밝게", + "dark": "항상 어둡게" + } + }, + "message": { + "no-memos": "메모가 없습니다 🌃", + "memos-ready": "모든 메모가 준비되었습니다 🎉", + "restored-successfully": "성공적으로 복구했습니다", + "memo-updated-datetime": "메모 생성 시각이 변경되었습니다.", + "invalid-created-datetime": "생성 시각이 올바르지 않습니다.", + "change-memo-created-time": "메모 생성 시각 변경", + "memo-not-found": "메모를 찾을 수 없습니다.", + "fill-all": "모든 칸을 채워 주세요.", + "password-not-match": "비밀번호가 맞지 않습니다.", + "new-password-not-match": "새 비밀번호가 서로 맞지 않습니다.", + "image-load-failed": "이미지 불러오기 실패", + "fill-form": "이 칸들을 채워 주세요", + "login-failed": "로그인 실패", + "signup-failed": "회원등록 실패", + "user-not-found": "회원을 찾을 수 없음", + "password-changed": "비밀번호 변경됨", + "private-only": "이 메모는 비공개 전용입니다.", + "copied": "복사됨", + "succeed-copy-content": "내용을 클립보드에 복사했습니다.", + "succeed-copy-code": "코드를 클립보드에 복사했습니다.", + "succeed-copy-link": "링크를 클립보드에 복사했습니다.", + "change-resource-filename": "리소스 파일명 변경", + "resource-filename-updated": "리소스 파일명을 변경했습니다.", + "invalid-resource-filename": "올바르지 않은 파일명입니다.", + "click-to-save-the-image": "이미지를 저장하려면 클릭하세요", + "generating-the-screenshot": "스크린샷을 생성하는 중...", + "count-selected-resources": "선택된 항목", + "too-short": "너무 짧음", + "too-long": "너무 긺", + "not-allow-space": "공백 허용하지 않음", + "not-allow-chinese": "한자 허용하지 않음", + "succeed-vacuum-database": "데이터베이스 최적화 성공", + "succeed-update-additional-style": "추가적인 스타일 적용 성공", + "succeed-copy-resource-link": "리소스 링크 복사 성공", + "succeed-update-customized-profile": "프로필 정보 적용 성공", + "succeed-update-additional-script": "추가적인 스크립트 적용 성공", + "update-succeed": "업데이트 성공", + "page-not-found": "404 - 페이지를 찾을 수 없습니다 😥" + }, + "days": { + "monday": "월요일", + "mon": "월", + "tuesday": "화요일", + "tue": "화", + "wednesday": "수요일", + "wed": "수", + "thursday": "목요일", + "thu": "목", + "friday": "금요일", + "fri": "금", + "saturday": "토요일", + "sat": "토", + "sunday": "일요일", + "sun": "일" + } +} diff --git a/web/src/types/i18n.d.ts b/web/src/types/i18n.d.ts index 1f9aba4e..8b434788 100644 --- a/web/src/types/i18n.d.ts +++ b/web/src/types/i18n.d.ts @@ -1 +1 @@ -type Locale = "en" | "zh" | "vi" | "fr" | "nl" | "sv" | "de" | "es" | "uk" | "ru" | "it" | "hant"; +type Locale = "en" | "zh" | "vi" | "fr" | "nl" | "sv" | "de" | "es" | "uk" | "ru" | "it" | "hant" | "ko";