diff --git a/app/models/enum/locale.go b/app/models/enum/locale.go
index 4bf9b7dd6..358fd021f 100644
--- a/app/models/enum/locale.go
+++ b/app/models/enum/locale.go
@@ -99,6 +99,16 @@ var (
IsRTL: false,
}
+ // LocaleKorean represents Korean
+ LocaleKorean = Locale{
+ Code: "ko",
+ Name: "Korean",
+ MessageFormatCode: "ko",
+ PostgresConfig: "simple",
+ LinguaLanguage: lingua.Korean,
+ IsRTL: false,
+ }
+
// LocaleDutch represents Dutch
LocaleDutch = Locale{
Code: "nl",
@@ -209,6 +219,7 @@ var (
LocaleSwedishSE,
LocaleItalian,
LocaleJapanese,
+ LocaleKorean,
LocaleDutch,
LocalePolish,
LocaleRussian,
diff --git a/locale/ko/client.json b/locale/ko/client.json
index d8d796e4f..c6ecaf74a 100644
--- a/locale/ko/client.json
+++ b/locale/ko/client.json
@@ -8,28 +8,28 @@
"action.edit": "편집",
"action.markallasread": "모두 읽은 상태로 표시",
"action.ok": "확인",
- "action.respond": "상태 업데이트",
+ "action.respond": "답변",
"action.save": "저장",
- "action.signin": "가입하기",
- "action.submit": "확인",
- "action.vote": "이 아이디어에 투표하세요",
- "action.voted": "투표했습니다!",
- "d41FkJ": "{count, plural, one {# tag} other {# tags}}",
+ "action.signin": "로그인",
+ "action.submit": "제출",
+ "action.vote": "이 제안에 공감",
+ "action.voted": "공감 완료",
+ "d41FkJ": "{count, plural, other {태그 #개}}",
"editor.markdownmode": "마크다운 편집기로 전환",
"editor.richtextmode": "서식 있는 텍스트 편집기로 전환",
"enum.poststatus.completed": "완료",
"enum.poststatus.declined": "거절됨",
"enum.poststatus.deleted": "삭제됨",
- "enum.poststatus.duplicate": "복제하다",
- "enum.poststatus.open": "열려 있는",
- "enum.poststatus.planned": "계획된",
- "enum.poststatus.started": "시작함",
+ "enum.poststatus.duplicate": "중복",
+ "enum.poststatus.open": "제안됨",
+ "enum.poststatus.planned": "계획됨",
+ "enum.poststatus.started": "진행 중",
"error.expired.text": "클릭하신 링크는 만료되었습니다.",
"error.expired.title": "만료됨",
"error.forbidden.text": "이 페이지를 볼 권한이 없습니다.",
- "error.forbidden.title": "금지됨",
+ "error.forbidden.title": "접근 권한 없음",
"error.internalerror.text": "오류가 발생하여 문제 해결을 위해 노력하고 있습니다! 곧 정상 작동될 예정입니다.",
- "error.internalerror.title": "이런! 으, 이건 예상치 못한 일이야…",
+ "error.internalerror.title": "이런! 예상치 못한 오류가 발생했습니다.",
"error.notinvited.text": "귀하의 이메일 주소로 계정을 찾을 수 없습니다.",
"error.notinvited.title": "초대받지 않음",
"error.pagenotfound.text": "클릭하신 링크가 끊어졌거나, 페이지가 삭제되었을 수 있습니다.",
@@ -40,35 +40,35 @@
"home.filter.search.label": "필터로 검색...",
"home.form.defaultinvitation": "여기에 제안을 입력하세요...",
"home.form.defaultwelcomemessage": "여러분의 의견을 듣고 싶습니다.\n\n무엇을 개선할 수 있을까요? 여기는 여러분이 투표하고, 토론하고, 아이디어를 공유하는 공간입니다.",
- "home.lonely.suggestion": "이 사이트를 공유하기 전에 여기에 <0>최소 3개0>개의 제안을 작성하는 것이 좋습니다. 잠재고객의 참여를 유도하려면 초기 콘텐츠가 중요합니다.",
+ "home.lonely.suggestion": "이 사이트를 공유하기 전에 <0>최소 3개0>의 제안을 먼저 작성하는 것을 권장합니다. 초기 콘텐츠는 방문자의 참여를 이끌어내는 데 중요합니다.",
"home.lonely.text": "아직 게시물이 생성되지 않았습니다.",
- "home.postfilter.label.view": "보다",
- "home.postfilter.option.mostdiscussed": "가장 많이 논의된",
- "home.postfilter.option.mostwanted": "가장 원하는",
- "home.postfilter.option.myvotes": "내 투표",
- "home.postfilter.option.recent": "최근의",
- "home.postfilter.option.trending": "트렌드",
+ "home.postfilter.label.view": "보기",
+ "home.postfilter.option.mostdiscussed": "가장 많은 토론",
+ "home.postfilter.option.mostwanted": "가장 많은 공감",
+ "home.postfilter.option.myvotes": "내 공감",
+ "home.postfilter.option.recent": "최신순",
+ "home.postfilter.option.trending": "인기 급상승",
"home.postinput.description.placeholder": "제안 내용을 설명해주세요(선택 사항)",
"home.postscontainer.label.noresults": "검색어와 일치하는 결과가 없습니다. 다른 것을 입력해 보세요.",
"home.postscontainer.label.viewmore": "더 많은 게시물 보기",
- "home.postscontainer.query.placeholder": "찾다",
- "home.postsort.label": "정렬 기준:",
- "home.similar.subtitle": "대신 기존 게시물에 투표하는 것을 고려해 보세요.",
+ "home.postscontainer.query.placeholder": "검색",
+ "home.postsort.label": "정렬:",
+ "home.similar.subtitle": "대신 기존 게시물에 공감해 보세요.",
"home.similar.title": "비슷한 게시물",
"home.tagsfilter.label.with": "~와 함께",
"home.tagsfilter.selected.none": "모든 태그",
- "label.actions": "행위",
- "label.avatar": "화신",
- "label.custom": "관습",
+ "label.actions": "작업",
+ "label.avatar": "아바타",
+ "label.custom": "사용자 지정",
"label.description": "설명",
- "label.discussion": "논의",
+ "label.discussion": "토론",
"label.edittags": "태그 편집",
"label.email": "이메일",
- "label.follow": "따르다",
- "label.following": "수행원",
+ "label.follow": "팔로우",
+ "label.following": "팔로우 중",
"label.gravatar": "그라바타",
- "label.letter": "편지",
- "label.moderation": "절도",
+ "label.letter": "이니셜",
+ "label.moderation": "검토",
"label.name": "이름",
"label.none": "없음",
"label.notagsavailable": "사용 가능한 태그가 없습니다",
@@ -76,12 +76,12 @@
"label.notifications": "알림",
"label.or": "또는",
"label.selecttags": "태그를 선택하세요...",
- "label.subscribe": "구독하다",
+ "label.subscribe": "구독",
"label.tags": "태그",
"label.unfollow": "팔로우 취소",
- "label.unread": "읽히지 않는",
+ "label.unread": "읽지 않음",
"label.unsubscribe": "구독 취소",
- "label.voters": "유권자들",
+ "label.voters": "공감한 사용자",
"labels.notagsavailable": "사용 가능한 태그가 없습니다",
"legal.agreement": "<0/> 및 <1/> 조항을 읽고 동의합니다.",
"legal.notice": "로그인하면 <0/><1/> 및 <2/>에 동의하는 것입니다.",
@@ -116,7 +116,7 @@
"mysettings.apikey.newkeynotice": "서버에 안전하게 저장하고 앱의 클라이언트 측에는 절대로 저장하지 마세요.",
"mysettings.apikey.notice": "API 키는 생성될 때마다 표시됩니다. 키를 분실했거나 손상된 경우 새 키를 생성하여 보관하세요.",
"mysettings.apikey.title": "API 키",
- "mysettings.dangerzone.delete": "내 계정 삭제",
+ "mysettings.dangerzone.delete": "계정 삭제",
"mysettings.dangerzone.notice": "이 과정은 되돌릴 수 없습니다. 주의해 주세요.",
"mysettings.dangerzone.text": "계정 삭제를 선택하시면 모든 개인 정보가 영구적으로 삭제됩니다. 게시하신 콘텐츠는 그대로 유지되지만 익명으로 처리됩니다.",
"mysettings.dangerzone.title": "계정 삭제",
@@ -126,8 +126,8 @@
"mysettings.message.noemail": "귀하의 계정에 이메일이 없습니다.",
"mysettings.message.privateemail": "귀하의 이메일은 비공개이며 절대로 공개되지 않습니다.",
"mysettings.notification.channelemail": "이메일",
- "mysettings.notification.channelweb": "편물",
- "mysettings.notification.event.discussion": "논의",
+ "mysettings.notification.channelweb": "웹",
+ "mysettings.notification.event.discussion": "토론",
"mysettings.notification.event.discussion.staff": "개별적으로 구독을 취소하지 않는 한 모든 게시물에 대한 댓글",
"mysettings.notification.event.discussion.visitors": "구독한 게시물에 대한 댓글",
"mysettings.notification.event.mention": "언급",
@@ -144,7 +144,7 @@
"mysettings.notification.title": "다음 패널을 사용하여 알림을 받고 싶은 이벤트를 선택하세요.",
"mysettings.page.subtitle": "프로필 설정 관리",
"mysettings.page.title": "설정",
- "page.backhome": "<0>{0}0> 홈페이지로 돌아가겠습니다.",
+ "page.backhome": "<0>{0}0> 홈으로 돌아가기",
"page.notinvited.text": "귀하의 이메일 주소로 계정을 찾을 수 없습니다.",
"page.notinvited.title": "초대받지 않음",
"page.pendingactivation.text": "귀하의 사이트를 활성화하기 위한 링크가 포함된 확인 이메일을 보냈습니다.",
@@ -160,17 +160,17 @@
"showpost.message.nodescription": "설명이 제공되지 않았습니다.",
"showpost.moderationpanel.text.help": "이 작업은 실행 취소할 수 <0>없습니다0>.",
"showpost.moderationpanel.text.placeholder": "이 게시물을 삭제하는 이유는 무엇입니까? (선택 사항)",
- "showpost.mostwanted.comments": "{count, plural, one {# comment} other {# comments}}",
- "showpost.mostwanted.votes": "{count, plural, one {# votes} other {# votes}}",
+ "showpost.mostwanted.comments": "{count, plural, other {댓글 #개}}",
+ "showpost.mostwanted.votes": "{count, plural, other {공감 #개}}",
"showpost.notificationspanel.message.subscribed": "이 게시물의 활동에 대한 알림을 받고 있습니다.",
"showpost.notificationspanel.message.unsubscribed": "이 게시물에 대한 어떠한 알림도 받지 않습니다.",
- "showpost.postsearch.numofvotes": "{0} 투표",
+ "showpost.postsearch.numofvotes": "공감 {0}개",
"showpost.postsearch.query.placeholder": "원본 게시물 검색...",
- "showpost.response.date": "상태가 {statusDate}에서 {status}로 변경되었습니다.",
- "showpost.responseform.message.mergedvotes": "이 게시물에 대한 투표는 원래 게시물에 병합됩니다.",
+ "showpost.response.date": "{statusDate}에 상태가 {status}(으)로 변경되었습니다.",
+ "showpost.responseform.message.mergedvotes": "이 게시물의 공감은 원본 게시물로 합산됩니다.",
"showpost.responseform.text.placeholder": "이 게시물은 무슨 일인가요? 사용자들에게 당신의 계획을 알려주세요...",
"showpost.votespanel.more": "+{extraVotesCount} 더",
- "showpost.votespanel.seedetails": "자세한 내용을 확인하세요",
+ "showpost.votespanel.seedetails": "자세히 보기",
"signin.email.placeholder": "이메일 주소",
"signin.message.email": "이메일로 계속하기",
"signin.message.emaildisabled": "관리자가 이메일 인증을 비활성화했습니다. 관리자 계정이 있고 이 제한을 우회하려면 <0>여기를 클릭0>하세요.",
@@ -191,14 +191,14 @@
"newpost.modal.addimage": "이미지 추가",
"newpost.modal.description.placeholder": "자세히 설명해 주세요. 숨기지 말고, 정보가 많을수록 좋습니다.",
"newpost.modal.title": "여러분의 아이디어를 공유해 보세요...",
- "newpost.modal.title.label": "당신의 아이디어에 제목을 붙이세요",
- "newpost.modal.title.placeholder": "짧고 간결하게 요약하자면 몇 마디로 요약할 수 있습니다.",
- "newpost.modal.submit": "아이디어를 제출하세요",
+ "newpost.modal.title.label": "아이디어 제목",
+ "newpost.modal.title.placeholder": "몇 마디로 짧게 요약해 주세요.",
+ "newpost.modal.submit": "아이디어 제출",
"validation.custom.maxattachments": "최대 {number}개의 첨부 파일이 허용됩니다.",
"validation.custom.maximagesize": "이미지 크기는 {kilobytes}KB보다 작아야 합니다.",
"modal.rss.description": "이 ATOM 피드를 구독하려면 이 URL을 복사하여 RSS/ATOM 리더에 붙여넣으세요.",
"modal.rss.title": "ATOM 피드 구독하기",
- "home.postfilter.label.myactivity": "소유하다",
+ "home.postfilter.label.myactivity": "내 활동",
"home.postfilter.label.status": "상태",
"home.postfilter.option.myposts": "내 게시물",
"home.postfilter.option.notags": "태그 없음",
@@ -212,29 +212,30 @@
"page.pendingactivation.didntreceive": "이메일을 받지 못하셨나요?",
"page.pendingactivation.resend": "인증 이메일 재전송",
"page.pendingactivation.resending": "다시 보내는 중...",
- "action.continue": "계속하다",
- "action.signup": "가입하기",
- "signin.code.edit": "편집하다",
+ "action.continue": "계속",
+ "action.signup": "회원가입",
+ "signin.code.edit": "수정",
"signin.code.expired": "이 코드는 만료되었거나 이미 사용되었습니다. 새 코드를 요청하세요.",
"signin.code.getnew": "새로운 코드를 받으세요",
"signin.code.instruction": "방금 <0>{email}0>으로 보낸 코드를 입력하세요.",
"signin.code.invalid": "입력하신 코드가 잘못되었습니다. 다시 시도해 주세요.",
"signin.code.placeholder": "여기에 코드를 입력하세요",
"signin.code.sent": "귀하의 이메일로 새로운 코드가 전송되었습니다.",
- "signin.code.submit": "제출하다",
+ "signin.code.submit": "제출",
"signin.name.placeholder": "당신의 이름",
"action.delete.block": "삭제 및 차단",
- "action.postcomment": "우편",
+ "action.postcomment": "댓글 작성",
"action.publish": "게시",
- "action.publish.verify": "출판 및 신뢰",
+ "action.publish.verify": "게시 및 승인",
"error.accessdenied.contact": "이것이 오류라고 생각되시면 관리자에게 문의하십시오.",
"error.accessdenied.text": "이 사이트에 접속하는 데 필요한 권한이 없습니다.",
"error.accessdenied.title": "접근 불가",
"header.nav.feedback": "모든 피드백",
"header.nav.roadmap": "로드맵",
- "home.postfilter.label.moderation": "절도",
- "label.vote": "투표",
- "label.votes": "투표",
+ "home.postfilter.label.moderation": "검토",
+ "label.vote": "공감",
+ "label.votes": "공감",
+ "listposts.label.showmore": "{0} 더 보기",
"moderation.comment.delete.block.error": "댓글 삭제 및 사용자 차단에 실패했습니다.",
"moderation.comment.delete.error": "댓글 삭제에 실패했습니다",
"moderation.comment.deleted": "댓글이 성공적으로 삭제되었습니다.",
@@ -253,14 +254,14 @@
"moderation.post.publish.verify.error": "게시물 발행 및 사용자 인증에 실패했습니다.",
"moderation.post.published": "게시물이 성공적으로 게시되었습니다.",
"moderation.post.published.verified": "게시됨 및 사용자 확인 완료",
- "moderation.subtitle": "이러한 아이디어와 의견은 신뢰하는 사용자 목록에 없는 사람들의 것이므로 게시 여부는 본인이 결정합니다.",
+ "moderation.subtitle": "이 제안과 의견은 신뢰 사용자 목록에 없는 분들이 남긴 것입니다. 게시 여부는 직접 결정하세요.",
"moderation.title": "검토 대기열",
"pagination.next": "다음",
- "pagination.prev": "이전의",
+ "pagination.prev": "이전",
"post.pending": "보류 중",
"postdetails.backtoall": "모든 제안 보기로 돌아가기",
"postdetails.backtoroadmap": "로드맵으로 돌아가기",
- "roadmap.blank.description": "게시글을 '계획 중' 또는 '진행 중'으로 표시하면 로드맵에 표시됩니다.",
+ "roadmap.blank.description": "게시물을 '계획됨' 또는 '진행 중'으로 표시하면 로드맵에 표시됩니다.",
"roadmap.blank.title": "로드맵이 첫 번째 업데이트를 기다리고 있습니다.",
"roadmap.column.showmore": "더보기",
"roadmap.upsell.billing": "PRO 버전으로 업그레이드하세요",
@@ -268,7 +269,7 @@
"roadmap.upsell.title": "로드맵 보기에서 진행 상황을 확인하세요.",
"showpost.loading": "로딩 중...",
"showpost.moderation.admin.description": "이 아이디어는 게시하기 전에 귀하의 승인이 필요합니다.",
- "showpost.moderation.admin.title": "절도",
+ "showpost.moderation.admin.title": "검토",
"showpost.moderation.approved": "게시물이 성공적으로 승인되었습니다",
"showpost.moderation.approveerror": "게시물 승인 실패",
"showpost.moderation.awaiting": "검토 대기 중입니다.",
@@ -277,7 +278,7 @@
"showpost.moderation.comment.approveerror": "댓글 승인에 실패했습니다",
"showpost.moderation.comment.awaiting": "검토 대기 중입니다.",
"showpost.moderation.comment.declined": "댓글이 거부되었습니다.",
- "showpost.moderation.comment.declineerror": "논평을 거부하지 못했습니다.",
+ "showpost.moderation.comment.declineerror": "댓글 거절에 실패했습니다.",
"showpost.moderation.commentsuccess": "댓글이 검토 대기 중입니다 📝",
"showpost.moderation.declined": "게시물이 성공적으로 거절되었습니다.",
"showpost.moderation.declineerror": "게시물 거절에 실패했습니다",
diff --git a/locale/ko/server.json b/locale/ko/server.json
index 3a3fb90f3..a295f96e2 100644
--- a/locale/ko/server.json
+++ b/locale/ko/server.json
@@ -74,5 +74,7 @@
"email.delete_account_requested.scheduled": "삭제 작업은 {scheduledAt}에 예약되어 있습니다. 일단 실행되면 되돌릴 수 없습니다.",
"email.delete_account_requested.cancel": "삭제를 요청하지 않았거나 마음이 바뀌셨나요? 아래 링크를 사용하여 삭제를 취소하세요.",
"email.delete_account_completed.subject": "귀하의 Fider 사이트 {tenantName}이 삭제되었습니다.",
- "email.delete_account_completed.text": "귀하의 Fider 사이트 {tenantName} ({subdomain}) 및 모든 데이터가 영구적으로 삭제되었습니다. 이 작업은 복구할 수 없습니다."
+ "email.delete_account_completed.text": "귀하의 Fider 사이트 {tenantName} ({subdomain}) 및 모든 데이터가 영구적으로 삭제되었습니다. 이 작업은 복구할 수 없습니다.",
+ "feed.global.title": "{count, plural, other {(투표 {count}) {title}}}",
+ "feed.post.title": "# {title}\n{votes, plural, other {투표 #}}, {comments, plural, other {댓글 #}}"
}
\ No newline at end of file
diff --git a/locale/locales.ts b/locale/locales.ts
index 74d1ace35..45931a738 100644
--- a/locale/locales.ts
+++ b/locale/locales.ts
@@ -30,6 +30,9 @@ const locales: { [key: string]: Locale } = {
ja: {
text: "Japanese",
},
+ ko: {
+ text: "Korean",
+ },
nl: {
text: "Dutch",
},