diff --git a/Makefile b/Makefile
index 280aa853b8..4d1bd96ea5 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,7 @@ XGO_VERSION := go-1.25.x
AIR_PACKAGE ?= github.com/air-verse/air@v1
EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@v3
GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.9.2
-GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.10.1
+GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.11.2
GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.15
MISSPELL_PACKAGE ?= github.com/golangci/misspell/cmd/misspell@v0.8.0
SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.33.1
@@ -155,6 +155,7 @@ GO_SOURCES := $(wildcard *.go)
GO_SOURCES += $(shell find $(GO_DIRS) -type f -name "*.go")
GO_SOURCES += $(GENERATED_GO_DEST)
+ESLINT_CONCURRENCY ?= 2
SWAGGER_SPEC := templates/swagger/v1_json.tmpl
SWAGGER_SPEC_INPUT := templates/swagger/v1_input.json
@@ -292,12 +293,12 @@ lint-backend-fix: lint-go-fix lint-go-gitea-vet lint-editorconfig ## lint backen
.PHONY: lint-js
lint-js: node_modules ## lint js and ts files
- $(NODE_VARS) pnpm exec eslint --color --max-warnings=0 $(ESLINT_FILES)
+ $(NODE_VARS) pnpm exec eslint --color --max-warnings=0 --concurrency $(ESLINT_CONCURRENCY) $(ESLINT_FILES)
$(NODE_VARS) pnpm exec vue-tsc
.PHONY: lint-js-fix
lint-js-fix: node_modules ## lint js and ts files and fix issues
- $(NODE_VARS) pnpm exec eslint --color --max-warnings=0 $(ESLINT_FILES) --fix
+ $(NODE_VARS) pnpm exec eslint --color --max-warnings=0 --concurrency $(ESLINT_CONCURRENCY) $(ESLINT_FILES) --fix
$(NODE_VARS) pnpm exec vue-tsc
.PHONY: lint-css
@@ -368,11 +369,11 @@ lint-yaml: .venv ## lint yaml files
.PHONY: lint-json
lint-json: node_modules ## lint json files
- $(NODE_VARS) pnpm exec eslint -c eslint.json.config.ts --color --max-warnings=0
+ $(NODE_VARS) pnpm exec eslint -c eslint.json.config.ts --color --max-warnings=0 --concurrency $(ESLINT_CONCURRENCY)
.PHONY: lint-json-fix
lint-json-fix: node_modules ## lint and fix json files
- $(NODE_VARS) pnpm exec eslint -c eslint.json.config.ts --color --max-warnings=0 --fix
+ $(NODE_VARS) pnpm exec eslint -c eslint.json.config.ts --color --max-warnings=0 --concurrency $(ESLINT_CONCURRENCY) --fix
.PHONY: watch
watch: ## watch everything and continuously rebuild
diff --git a/go.mod b/go.mod
index c85c4c0b39..f0bb361f2d 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
module code.gitea.io/gitea
-go 1.26.0
+go 1.26.1
// rfc5280 said: "The serial number is an integer assigned by the CA to each certificate."
// But some CAs use negative serial number, just relax the check. related:
diff --git a/modules/markup/html_internal_test.go b/modules/markup/html_internal_test.go
index ca2579c8ea..3a91797e25 100644
--- a/modules/markup/html_internal_test.go
+++ b/modules/markup/html_internal_test.go
@@ -23,12 +23,12 @@ const (
// externalIssueLink an HTML link to an alphanumeric-style issue
func externalIssueLink(baseURL, class, name string) string {
- return link(util.URLJoin(baseURL, name), class, name)
+ return link(strings.TrimSuffix(baseURL, "/")+"/"+name, class, name)
}
// numericLink an HTML to a numeric-style issue
func numericIssueLink(baseURL, class string, index int, marker string) string {
- return link(util.URLJoin(baseURL, strconv.Itoa(index)), class, fmt.Sprintf("%s%d", marker, index))
+ return link(strings.TrimSuffix(baseURL, "/")+"/"+strconv.Itoa(index), class, fmt.Sprintf("%s%d", marker, index))
}
// link an HTML link
@@ -116,7 +116,7 @@ func TestRender_IssueIndexPattern2(t *testing.T) {
links := make([]any, len(indices))
for i, index := range indices {
- links[i] = numericIssueLink(util.URLJoin("/test-owner/test-repo", path), "ref-issue", index, marker)
+ links[i] = numericIssueLink("/test-owner/test-repo/"+path, "ref-issue", index, marker)
}
expectedNil := fmt.Sprintf(expectedFmt, links...)
testRenderIssueIndexPattern(t, s, expectedNil, NewTestRenderContext(TestAppURL, localMetas))
@@ -210,7 +210,7 @@ func TestRender_IssueIndexPattern5(t *testing.T) {
metas["regexp"] = pattern
links := make([]any, len(ids))
for i, id := range ids {
- links[i] = link(util.URLJoin("https://someurl.com/someUser/someRepo/", id), "ref-issue ref-external-issue", names[i])
+ links[i] = link("https://someurl.com/someUser/someRepo/"+id, "ref-issue ref-external-issue", names[i])
}
expected := fmt.Sprintf(expectedFmt, links...)
@@ -288,11 +288,11 @@ func TestRender_AutoLink(t *testing.T) {
}
// render valid issue URLs
- test(util.URLJoin(TestRepoURL, "issues", "3333"),
- numericIssueLink(util.URLJoin(TestRepoURL, "issues"), "ref-issue", 3333, "#"))
+ test(TestRepoURL+"issues/3333",
+ numericIssueLink(TestRepoURL+"issues", "ref-issue", 3333, "#"))
// render valid commit URLs
- tmp := util.URLJoin(TestRepoURL, "commit", "d8a994ef243349f321568f9e36d5c3f444b99cae")
+ tmp := TestRepoURL + "commit/d8a994ef243349f321568f9e36d5c3f444b99cae"
test(tmp, "d8a994ef24")
tmp += "#diff-2"
test(tmp, "d8a994ef24 (diff-2)")
diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go
index 62c4ae3e0a..e62747c724 100644
--- a/modules/markup/html_test.go
+++ b/modules/markup/html_test.go
@@ -34,15 +34,15 @@ func TestRender_Commits(t *testing.T) {
sha := "65f1bf27bc3bf70f64657658635e66094edbcb4d"
repo := markup.TestAppURL + testRepoOwnerName + "/" + testRepoName + "/"
- commit := util.URLJoin(repo, "commit", sha)
+ commit := repo + "commit/" + sha
commitPath := "/user13/repo11/commit/" + sha
- tree := util.URLJoin(repo, "tree", sha, "src")
+ tree := repo + "tree/" + sha + "/src"
- file := util.URLJoin(repo, "commit", sha, "example.txt")
+ file := repo + "commit/" + sha + "/example.txt"
fileWithExtra := file + ":"
fileWithHash := file + "#L2"
fileWithHasExtra := file + "#L2:"
- commitCompare := util.URLJoin(repo, "compare", sha+"..."+sha)
+ commitCompare := repo + "compare/" + sha + "..." + sha
commitCompareWithHash := commitCompare + "#L2"
test(sha, `
/home/gitea/go-gitea/gitea#12345
`) test( - util.URLJoin(markup.TestAppURL, "gogitea", "gitea", "issues", "12345"), - ``) + markup.TestAppURL+"gogitea/gitea/issues/12345", + ``) test( - util.URLJoin(markup.TestAppURL, "go-gitea", "gitea", "issues", "12345"), - ``) + markup.TestAppURL+"go-gitea/gitea/issues/12345", + ``) test( - util.URLJoin(markup.TestAppURL, "gogitea", "some-repo-name", "issues", "12345"), - ``) + markup.TestAppURL+"gogitea/some-repo-name/issues/12345", + ``) inputURL := setting.AppURL + "a/b/commit/0123456789012345678901234567890123456789/foo.txt?a=b#L2-L3" test( @@ -375,7 +375,7 @@ func TestRender_emoji(t *testing.T) { func TestRender_ShortLinks(t *testing.T) { setting.AppURL = markup.TestAppURL - tree := util.URLJoin(markup.TestRepoURL, "src", "master") + tree := markup.TestRepoURL + "src/master" test := func(input, expected string) { buffer, err := markdown.RenderString(markup.NewTestRenderContext(tree), input) @@ -383,15 +383,15 @@ func TestRender_ShortLinks(t *testing.T) { assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(string(buffer))) } - url := util.URLJoin(tree, "Link") - otherURL := util.URLJoin(tree, "Other-Link") - encodedURL := util.URLJoin(tree, "Link%3F") - imgurl := util.URLJoin(tree, "Link.jpg") - otherImgurl := util.URLJoin(tree, "Link+Other.jpg") - encodedImgurl := util.URLJoin(tree, "Link+%23.jpg") - notencodedImgurl := util.URLJoin(tree, "some", "path", "Link%20#.jpg") - renderableFileURL := util.URLJoin(tree, "markdown_file.md") - unrenderableFileURL := util.URLJoin(tree, "file.zip") + url := tree + "/Link" + otherURL := tree + "/Other-Link" + encodedURL := tree + "/Link%3F" + imgurl := tree + "/Link.jpg" + otherImgurl := tree + "/Link+Other.jpg" + encodedImgurl := tree + "/Link+%23.jpg" + notencodedImgurl := tree + "/some/path/Link%20#.jpg" + renderableFileURL := tree + "/markdown_file.md" + unrenderableFileURL := tree + "/file.zip" favicon := "http://google.com/favicon.ico" test( diff --git a/modules/svg/svg.go b/modules/svg/svg.go index 333b5764c2..234b1f8c13 100644 --- a/modules/svg/svg.go +++ b/modules/svg/svg.go @@ -8,13 +8,32 @@ import ( "html/template" "path" "strings" + "sync" gitea_html "code.gitea.io/gitea/modules/htmlutil" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/public" ) -var svgIcons map[string]string +type svgIconItem struct { + html string + mocking bool +} + +type svgCacheKey struct { + icon string + size int + class string +} + +var ( + svgIcons map[string]svgIconItem + + svgCacheMu sync.Mutex + svgCache sync.Map + svgCacheCount int + svgCacheLimit = 10000 +) const defaultSize = 16 @@ -26,7 +45,7 @@ func Init() error { return err } - svgIcons = make(map[string]string, len(files)) + svgIcons = make(map[string]svgIconItem, len(files)) for _, file := range files { if path.Ext(file) != ".svg" { continue @@ -35,7 +54,7 @@ func Init() error { if err != nil { log.Error("Failed to read SVG file %s: %v", file, err) } else { - svgIcons[file[:len(file)-4]] = string(Normalize(bs, defaultSize)) + svgIcons[file[:len(file)-4]] = svgIconItem{html: string(Normalize(bs, defaultSize))} } } return nil @@ -43,10 +62,13 @@ func Init() error { func MockIcon(icon string) func() { if svgIcons == nil { - svgIcons = make(map[string]string) + svgIcons = make(map[string]svgIconItem) } orig, exist := svgIcons[icon] - svgIcons[icon] = fmt.Sprintf(``, icon, defaultSize, defaultSize) + svgIcons[icon] = svgIconItem{ + html: fmt.Sprintf(``, icon, defaultSize, defaultSize), + mocking: true, + } return func() { if exist { svgIcons[icon] = orig @@ -58,11 +80,28 @@ func MockIcon(icon string) func() { // RenderHTML renders icons - arguments icon name (string), size (int), class (string) func RenderHTML(icon string, others ...any) template.HTML { + result, _ := renderHTML(icon, others...) + return result +} + +func renderHTML(icon string, others ...any) (_ template.HTML, usingCache bool) { if icon == "" { - return "" + return "", false } size, class := gitea_html.ParseSizeAndClass(defaultSize, "", others...) - if svgStr, ok := svgIcons[icon]; ok { + if svgItem, ok := svgIcons[icon]; ok { + svgStr := svgItem.html + // fast path for default size and no classes + if size == defaultSize && class == "" { + return template.HTML(svgStr), false + } + + cacheKey := svgCacheKey{icon, size, class} + cachedHTML, cached := svgCache.Load(cacheKey) + if cached && !svgItem.mocking { + return cachedHTML.(template.HTML), true + } + // the code is somewhat hacky, but it just works, because the SVG contents are all normalized if size != defaultSize { svgStr = strings.Replace(svgStr, fmt.Sprintf(`width="%d"`, defaultSize), fmt.Sprintf(`width="%d"`, size), 1) @@ -71,8 +110,24 @@ func RenderHTML(icon string, others ...any) template.HTML { if class != "" { svgStr = strings.Replace(svgStr, `class="`, fmt.Sprintf(`class="%s `, class), 1) } - return template.HTML(svgStr) + result := template.HTML(svgStr) + + if !svgItem.mocking { + // no need to double-check, the rendering is fast enough and the cache is just an optimization + svgCacheMu.Lock() + if svgCacheCount >= svgCacheLimit { + svgCache.Clear() + svgCacheCount = 0 + } + svgCacheCount++ + svgCache.Store(cacheKey, result) + svgCacheMu.Unlock() + } + + return result, false } + // during test (or something wrong happens), there is no SVG loaded, so use a dummy span to tell that the icon is missing - return template.HTML(fmt.Sprintf("%s(%d/%s)", template.HTMLEscapeString(icon), size, template.HTMLEscapeString(class))) + dummy := template.HTML(fmt.Sprintf("%s(%d/%s)", template.HTMLEscapeString(icon), size, template.HTMLEscapeString(class))) + return dummy, false } diff --git a/modules/svg/svg_test.go b/modules/svg/svg_test.go new file mode 100644 index 0000000000..a42f57cec6 --- /dev/null +++ b/modules/svg/svg_test.go @@ -0,0 +1,54 @@ +// Copyright 2026 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package svg + +import ( + "testing" + + "code.gitea.io/gitea/modules/test" + + "github.com/stretchr/testify/assert" +) + +func TestRenderHTMLCache(t *testing.T) { + const svgRealContent = "RealContent" + svgIcons = map[string]svgIconItem{ + "test": {html: ``}, + } + + // default params: no cache entry + _, usingCache := renderHTML("test") + assert.False(t, usingCache) + _, usingCache = renderHTML("test") + assert.False(t, usingCache) + + // non-default params: cached + _, usingCache = renderHTML("test", 24) + assert.False(t, usingCache) + _, usingCache = renderHTML("test", 24) + assert.True(t, usingCache) + + // mocked svg shouldn't be cached + revertMock := MockIcon("test") + mockedHTML, usingCache := renderHTML("test", 24) + assert.False(t, usingCache) + assert.NotContains(t, mockedHTML, svgRealContent) + revertMock() + realHTML, usingCache := renderHTML("test", 24) + assert.True(t, usingCache) + assert.Contains(t, realHTML, svgRealContent) + + t.Run("CacheWithLimit", func(t *testing.T) { + assert.NotZero(t, svgCacheCount) + const testLimit = 3 + defer test.MockVariableValue(&svgCacheLimit, testLimit)() + for i := range 10 { + _, usingCache = renderHTML("test", 100+i) + assert.False(t, usingCache) + _, usingCache = renderHTML("test", 100+i) + assert.True(t, usingCache) + assert.LessOrEqual(t, svgCacheCount, testLimit) + } + }) +} diff --git a/modules/util/url.go b/modules/util/url.go index 6455b0b75c..dc31441ca8 100644 --- a/modules/util/url.go +++ b/modules/util/url.go @@ -5,7 +5,6 @@ package util import ( "net/url" - "path" "strings" ) @@ -19,29 +18,6 @@ func PathEscapeSegments(path string) string { return escapedPath } -// URLJoin joins url components, like path.Join, but preserving contents -// Deprecated: it has unclear behaviors, should not be used anymore. It is only used in some tests. -// Need to be removed in the future. -func URLJoin(base string, elems ...string) string { - if !strings.HasSuffix(base, "/") { - base += "/" - } - baseURL, err := url.Parse(base) - if err != nil { - return "" - } - joinedPath := path.Join(elems...) - argURL, err := url.Parse(joinedPath) - if err != nil { - return "" - } - joinedURL := baseURL.ResolveReference(argURL).String() - if !baseURL.IsAbs() && !strings.HasPrefix(base, "/") { - return joinedURL[1:] // Removing leading '/' if needed - } - return joinedURL -} - func SanitizeURL(s string) (string, error) { u, err := url.Parse(s) if err != nil { diff --git a/modules/util/util_test.go b/modules/util/util_test.go index fd677f5c11..4ec738e89e 100644 --- a/modules/util/util_test.go +++ b/modules/util/util_test.go @@ -11,39 +11,6 @@ import ( "github.com/stretchr/testify/assert" ) -func TestURLJoin(t *testing.T) { - type test struct { - Expected string - Base string - Elements []string - } - newTest := func(expected, base string, elements ...string) test { - return test{Expected: expected, Base: base, Elements: elements} - } - for _, test := range []test{ - newTest("https://try.gitea.io/a/b/c", - "https://try.gitea.io", "a/b", "c"), - newTest("https://try.gitea.io/a/b/c", - "https://try.gitea.io/", "/a/b/", "/c/"), - newTest("https://try.gitea.io/a/c", - "https://try.gitea.io/", "/a/./b/", "../c/"), - newTest("a/b/c", - "a", "b/c/"), - newTest("a/b/d", - "a/", "b/c/", "/../d/"), - newTest("https://try.gitea.io/a/b/c#d", - "https://try.gitea.io", "a/b", "c#d"), - newTest("/a/b/d", - "/a/", "b/c/", "/../d/"), - newTest("/a/b/c", - "/a", "b/c/"), - newTest("/a/b/c#hash", - "/a", "b/c#hash"), - } { - assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...)) - } -} - func TestIsEmptyString(t *testing.T) { cases := []struct { s string diff --git a/options/locale/locale_ko-KR.json b/options/locale/locale_ko-KR.json index ce420ea97c..9c0d495ebd 100644 --- a/options/locale/locale_ko-KR.json +++ b/options/locale/locale_ko-KR.json @@ -3,40 +3,65 @@ "dashboard": "대시보드", "explore_title": "탐색", "help": "도움말", + "logo": "로고", "sign_in": "로그인", - "sign_in_or": "혹은", + "sign_in_with_provider": "%s로 로그인", + "sign_in_or": "또는", "sign_out": "로그아웃", - "sign_up": "가입하기", + "sign_up": "회원가입", "link_account": "계정 연결", - "register": "가입하기", + "register": "가입", "version": "버전", "powered_by": "%s 제공", "page": "페이지", "template": "템플릿", "language": "언어", "notifications": "알림", + "active_stopwatch": "활성 시간 추적기", + "tracked_time_summary": "이슈 목록의 필터를 기반으로 추적한 시간 요약", "create_new": "생성하기", "user_profile_and_more": "프로파일 및 설정", "signed_in_as": "다음 사용자로 로그인됨", + "enable_javascript": "이 웹사이트는 JavaScript가 필요합니다.", + "toc": "목차", + "licenses": "라이선스", + "return_to_gitea": "Gitea로 돌아가기", + "more_items": "항목 더보기", "username": "사용자명", "email": "이메일 주소", "password": "비밀번호", + "access_token": "액세스 토큰", "re_type": "비밀번호 확인", "captcha": "보안 문자", "twofa": "2단계 인증", "twofa_scratch": "2단계 일회성 코드", "passcode": "인증코드", - "repository": "저장소", + "webauthn_insert_key": "보안 키를 입력해주세요", + "webauthn_sign_in": "보안 키에 있는 버튼을 눌러주십시오. 버튼이 없는 경우, 보안 키를 다시 입력해주십시오.", + "webauthn_press_button": "보안 키에 있는 버튼을 눌러주십시오…", + "webauthn_use_twofa": "모바일 기기에 표시된 2단계 인증 코드를 사용하십시오", + "webauthn_error": "보안 키를 읽을 수 없습니다.", + "webauthn_unsupported_browser": "브라우저가 아직 WebAuthn을 지원하지 않습니다.", + "webauthn_error_unknown": "알 수 없는 오류가 발생하였습니다. 다시 시도하십시오.", + "webauthn_error_insecure": "WebAuthn은 보안 연결만 지원합니다. http를 통해 테스트하려면 origin을 \"localhost\"나 \"127.0.0.1\"로 사용하십시오.", + "webauthn_error_unable_to_process": "서버에서 요청을 처리하지 못했습니다.", + "webauthn_error_duplicated": "허용되지 않은 보안 키입니다. 해당 키가 등록된 키인지 확인해주세요.", + "webauthn_error_empty": "키에 이름을 등록해야 합니다.", + "webauthn_error_timeout": "보안 키를 읽기 전에 시간이 만료되었습니다. 페이지를 다시 로드하거나 재시도해주세요.", + "webauthn_reload": "새로고침", + "repository": "리포지토리", "organization": "조직", "mirror": "미러", - "new_repo": "새 저장소", + "issue_milestone": "마일스톤", + "new_repo": "새 리포지토리", "new_migrate": "새 마이그레이션", "new_mirror": "새로운 미러", - "new_fork": "새 저장소 포크", + "new_fork": "새 리포지토리 포크", "new_org": "새로운 조직", "new_project": "새 프로젝트", + "new_project_column": "새 열", "manage_org": "조직 관리", - "admin_panel": "사이트 관리", + "admin_panel": "사이트 운영", "account_settings": "계정 설정", "settings_title": "설정", "your_profile": "프로필", @@ -51,31 +76,161 @@ "pull_requests": "풀 리퀘스트", "issues": "이슈들", "milestones": "마일스톤", + "ok": "OK", "cancel": "취소", + "retry": "재시도", + "rerun": "다시 실행", + "rerun_all": "모든 작업 다시 실행", "save": "저장", "add": "추가", "add_all": "모두 추가", + "dismiss": "해지", "remove": "삭제", "remove_all": "모두 삭제", - "edit": "수정하기", + "remove_label_str": "항목 \"%s\" 삭제", + "edit": "편집", + "view": "보기", + "test": "테스트", "enabled": "활성화됨", + "disabled": "비활성화됨", + "locked": "잠김", + "copy": "복사", + "copy_url": "URL 복사", + "copy_hash": "해쉬 복사", + "copy_content": "내용 복사", + "copy_branch": "브랜치명 복사", + "copy_path": "경로 복사", + "copy_success": "복사됨!", + "copy_error": "복사 실패", + "copy_type_unsupported": "이 파일 형식은 복사할 수 없습니다", + "copy_filename": "파일명 복사", "write": "쓰기", "preview": "미리보기", "loading": "불러오는 중...", - "concept_code_repository": "저장소", + "files": "파일", + "error_title": "오류", + "error404": "접근하려는 페이지가 존재하지 않거나, 열람 가능한 권한이 없습니다.", + "error503": "서버가 요청을 완료하지 못했습니다. 나중에 다시 시도해 주세요.", + "go_back": "뒤로 가기", + "invalid_data": "잘못된 데이터: %v", + "nothing_has_been_changed": "변경 사항이 없습니다.", + "never": "안함", + "unknown": "알수없음", + "rss_feed": "RSS 피드", + "pin": "고정", + "unpin": "고정 해제", + "artifacts": "아티팩트", + "expired": "만료됨", + "confirm_delete_artifact": "아티팩트 '%s'를 삭제하시겠습니까?", + "archived": "아카이빙됨", + "concept_system_global": "글로벌", + "concept_user_individual": "개인", + "concept_code_repository": "리포지토리", "concept_user_organization": "조직", + "show_timestamps": "타임스탬프 표시", + "show_log_seconds": "초를 표시", + "show_full_screen": "전체화면으로 표시", + "download_logs": "로그 다운로드", + "confirm_delete_selected": "선택된 항목을 모두 삭제하시겠습니까?", "name": "이름", + "value": "값", + "readme": "Readme", + "filter_title": "필터", + "filter.clear": "필터 지우기", + "filter.is_archived": "아카이빙됨", + "filter.not_archived": "아카이빙 되지 않음", + "filter.is_fork": "포크됨", + "filter.not_fork": "포크되지 않음", + "filter.is_mirror": "미러 됨", + "filter.not_mirror": "미러 되지 않음", "filter.is_template": "템플릿", + "filter.not_template": "템플릿 아님", + "filter.public": "공개", "filter.private": "비공개", + "no_results_found": "검색 결과가 없습니다.", + "internal_error_skipped": "내부 오류가 발생했지만 건너뛰었습니다: %s", + "characters_spaces": "스페이스", + "characters_tabs": "탭", + "text_indent_style": "들여쓰기 스타일", + "text_indent_size": "들여쓰기 크기", + "text_line_wrap": "줄 바꿈", + "text_line_nowrap": "줄바꿈 없음", + "text_line_wrap_mode": "줄 바꿈 모드", + "search.search": "검색…", + "search.type_tooltip": "검색 유형", + "search.fuzzy": "퍼지", + "search.fuzzy_tooltip": "검색어와 유사한 결과도 포함합니다", + "search.words": "단어", + "search.words_tooltip": "검색어와 일치하는 결과만 포함합니다", + "search.regexp": "정규 표현식", + "search.regexp_tooltip": "정규 표현식 검색어와 일치하는 결과만 포함합니다", + "search.exact": "정확히 일치", + "search.exact_tooltip": "검색어와 정확하게 일치하는 결과만 포함합니다", + "search.repo_kind": "리포지토리 검색…", + "search.user_kind": "사용자 검색…", + "search.org_kind": "조직 검색…", + "search.team_kind": "팀 검색…", + "search.code_kind": "코드 검색…", + "search.code_search_unavailable": "현재 코드 검색이 불가능합니다. 사이트 운영자에게 문의하세요.", + "search.code_search_by_git_grep": "현재 코드 검색 결과는 \"git grep\"을 통해 제공됩니다. 사이트 운영자가 리포지토리 인덱서를 활성화하면 더 나은 결과를 얻을 수 있습니다.", + "search.package_kind": "패키지 검색…", + "search.project_kind": "프로젝트 검색…", + "search.branch_kind": "브랜치 검색…", + "search.tag_kind": "태그 검색…", + "search.tag_tooltip": "일치하는 태그를 검색합니다. 숫자 시퀀스를 검색하려면 '%'를 사용하세요.", + "search.commit_kind": "커밋 검색…", + "search.runner_kind": "러너 검색…", + "search.no_results": "일치하는 결과를 찾을 수 없습니다.", + "search.issue_kind": "이슈 검색…", + "search.pull_kind": "풀 리퀘스트 검색…", + "search.keyword_search_unavailable": "현재 키워드 검색이 불가능합니다. 사이트 운영자에게 문의하세요.", + "aria.navbar": "내비게이션 바", + "aria.footer": "바닥글", + "aria.footer.software": "이 소프트웨어에 대하여", + "aria.footer.links": "링크", + "heatmap.number_of_contributions_in_the_last_12_months": "지난 12 개월간 %s개의 기여", + "heatmap.no_contributions": "기여가 없음", + "heatmap.less": "간단히", + "heatmap.more": "더 보기", + "editor.buttons.heading.tooltip": "제목 추가", + "editor.buttons.bold.tooltip": "굵은 텍스트 추가", + "editor.buttons.italic.tooltip": "이탤릭 텍스트 추가", + "editor.buttons.strikethrough.tooltip": "텍스트 취소선 추가", + "editor.buttons.quote.tooltip": "텍스트 인용", + "editor.buttons.code.tooltip": "코드 추가", + "editor.buttons.link.tooltip": "링크 추가", + "editor.buttons.list.unordered.tooltip": "기호 목록 추가", + "editor.buttons.list.ordered.tooltip": "번호 목록 추가", + "editor.buttons.list.task.tooltip": "작업 리스트 추가", + "editor.buttons.table.add.tooltip": "표 추가", "editor.buttons.table.add.insert": "추가", + "editor.buttons.table.rows": "행", + "editor.buttons.table.cols": "열", + "editor.buttons.mention.tooltip": "사용자 혹은 팀을 언급", + "editor.buttons.ref.tooltip": "이슈 또는 풀 리퀘스트 참조", + "editor.buttons.switch_to_legacy.tooltip": "기존 편집기를 대신 사용", + "editor.buttons.enable_monospace_font": "고정폭 글꼴 활성화", + "editor.buttons.disable_monospace_font": "고정폭 글꼴 비활성화", + "filter.string.asc": "A–Z", + "filter.string.desc": "Z–A", + "error.occurred": "오류가 발생했습니다", + "error.report_message": "Gitea의 버그라고 생각되면, GitHub에서 해당하는 이슈를 검색하거나 새 이슈를 등록해 주시길 바랍니다.", + "error.not_found": "대상을 찾을 수 없습니다.", + "error.network_error": "네트워크 오류", "startpage.app_desc": "편리한 설치형 Git 서비스", "startpage.install": "쉬운 설치", + "startpage.install_desc": "간단하게 당신의 플랫폼용 바이너리를 실행하거나 도커로 배포 또는 패키지를 설치하십시오.", "startpage.platform": "크로스 플랫폼", + "startpage.platform_desc": "Gitea는 Go를 컴파일할 수 있는 환경이라면 어디서든 실행됩니다: Windows, macOS, Linux, ARM 등. 원하는 환경을 선택하세요!", "startpage.lightweight": "가벼움", + "startpage.lightweight_desc": "Gitea는 최소 요구 사양이 낮아, Raspberry Pi 에서도 실행할 수 있습니다. 에너지를 절약하세요!", "startpage.license": "오픈 소스", + "startpage.license_desc": "%[2]s에 참여하여 이 프로젝트를 개선하는데기여하십시오! 기여자가 되는것을 주저하지 하지마십시오!", "install.install": "설치", + "install.installing_desc": "설치 중입니다, 잠시만 기다려 주세요…", "install.title": "초기 설정", "install.docker_helper": "Gitea를 Docker에서 실행하려면 설정 전에 이 문서를 읽어보세요.", + "install.require_db_desc": "Gitea는 MySQL, PostgreSQL, MSSQL, SQLite3 또는 TiDB (MySQL protocol) 을 필요로 합니다.", "install.db_title": "데이터베이스 설정", "install.db_type": "데이터베이스 유형", "install.host": "호스트", @@ -83,22 +238,37 @@ "install.password": "비밀번호", "install.db_name": "데이터베이스 이름", "install.db_schema": "스키마", + "install.db_schema_helper": "데이터베이스 기본값(\"public\") 으로 설정하려면 비워두세요.", + "install.ssl_mode": "SSL", "install.path": "경로", "install.sqlite_helper": "SQLite3 데이터베이스에 대한 파일 경로입니다.alt + 클릭/엔터를 사용하세요",
"repo.issues.filter_label_no_select": "모든 레이블",
+ "repo.issues.filter_label_select_no_label": "레이블 없음",
"repo.issues.filter_milestone": "마일스톤",
+ "repo.issues.filter_milestone_all": "모든 마일스톤",
+ "repo.issues.filter_milestone_none": "마일스톤 없음",
+ "repo.issues.filter_milestone_open": "열린 마일스톤",
+ "repo.issues.filter_milestone_closed": "닫힌 마일스톤",
+ "repo.issues.filter_project": "프로젝트",
+ "repo.issues.filter_project_all": "모든 프로젝트",
+ "repo.issues.filter_project_none": "프로젝트 없음",
"repo.issues.filter_assignee": "담당자",
+ "repo.issues.filter_assignee_no_assignee": "지정된 사람 없음",
+ "repo.issues.filter_assignee_any_assignee": "누군가에게 할당됨",
"repo.issues.filter_poster": "작성자",
+ "repo.issues.filter_user_placeholder": "사용자 검색",
+ "repo.issues.filter_user_no_select": "모든 사용자",
"repo.issues.filter_type": "유형",
"repo.issues.filter_type.all_issues": "모든 이슈",
+ "repo.issues.filter_type.all_pull_requests": "모든 풀 리퀘스트",
"repo.issues.filter_type.assigned_to_you": "나에게 할당됨",
"repo.issues.filter_type.created_by_you": "내가 생성함",
"repo.issues.filter_type.mentioning_you": "나를 언급함",
+ "repo.issues.filter_type.review_requested": "검토 요청됨",
+ "repo.issues.filter_type.reviewed_by_you": "내가 검토함",
"repo.issues.filter_sort": "정렬",
"repo.issues.filter_sort.latest": "최신",
"repo.issues.filter_sort.oldest": "오래된",
+ "repo.issues.filter_sort.recentupdate": "가장 최근에 업데이트됨",
"repo.issues.filter_sort.leastupdate": "가장 최근에 업데이트",
"repo.issues.filter_sort.mostcomment": "가장 많은 코멘트",
"repo.issues.filter_sort.leastcomment": "가장 적은 코멘트",
+ "repo.issues.filter_sort.nearduedate": "마감일에 가까운 순",
+ "repo.issues.filter_sort.farduedate": "마감일에 먼 순",
"repo.issues.filter_sort.moststars": "좋아요 많은 순",
"repo.issues.filter_sort.feweststars": "좋아요 적은 순",
"repo.issues.filter_sort.mostforks": "포크 많은 순",
"repo.issues.filter_sort.fewestforks": "포크 적은 순",
+ "repo.issues.quick_goto": "이슈로 이동",
"repo.issues.action_open": "열기",
"repo.issues.action_close": "닫기",
"repo.issues.action_label": "레이블",
@@ -600,23 +1501,66 @@
"repo.issues.action_milestone_no_select": "마일스톤 없음",
"repo.issues.action_assignee": "담당자",
"repo.issues.action_assignee_no_select": "담당자 없음",
+ "repo.issues.action_check": "체크/체크해제",
+ "repo.issues.action_check_all": "모든 항목 체크/체크해제",
"repo.issues.opened_by": " %[3]s가 %[1]s을 오픈",
+ "repo.pulls.merged_by": "%[3]s에 의해 %[1]s 머지됨",
+ "repo.pulls.merged_by_fake": "%[2]s 에 의해 %[1]s 머지됨",
+ "repo.issues.closed_by": "%[3]s에 의해 %[1]s 닫힘",
+ "repo.issues.opened_by_fake": "%[2]s에 의해 %[1]s 열림",
+ "repo.issues.closed_by_fake": "%[2]s에 의해 %[1]s 닫힘",
"repo.issues.previous": "이전",
"repo.issues.next": "다음",
"repo.issues.open_title": "오픈",
"repo.issues.closed_title": "닫힘",
"repo.issues.draft_title": "초안",
+ "repo.issues.num_comments_1": "%d개 댓글",
"repo.issues.num_comments": "%d개의 코멘트",
"repo.issues.commented_at": "코멘트됨, %s",
"repo.issues.delete_comment_confirm": "이 댓글을 정말 삭제하시겠습니까?",
+ "repo.issues.context.copy_link": "링크 복사",
+ "repo.issues.context.copy_source": "소스 복사",
+ "repo.issues.context.quote_reply": "댓글 인용",
+ "repo.issues.context.reference_issue": "새 이슈에서 참조",
"repo.issues.context.edit": "수정하기",
"repo.issues.context.delete": "삭제",
- "repo.issues.reopen_issue": "다시 열기",
+ "repo.issues.no_content": "제공된 설명 없음.",
+ "repo.issues.close": "이슈 닫기",
+ "repo.issues.comment_pull_merged_at": "커밋 %[1]s 을 %[2]s %[3]s에 머지됨",
+ "repo.issues.comment_manually_pull_merged_at": "커밋 %[1]s을 %[2] %[3]s에 수동 머지됨",
+ "repo.issues.close_comment_issue": "댓글을 달고 닫기",
+ "repo.issues.reopen_issue": "이슈 다시 열기",
+ "repo.issues.reopen_comment_issue": "댓글을 달고 다시 열기",
"repo.issues.create_comment": "코멘트",
+ "repo.issues.comment.blocked_user": "작성자 또는 리포지토리 소유자에게 차단되어 댓글을 생성하거나 편집할 수 없습니다.",
+ "repo.issues.closed_at": "이 이슈 %[2]s 닫침",
+ "repo.issues.reopened_at": "이 이슈 %[2]s 다시열림",
"repo.issues.commit_ref_at": " 커밋 %[2]s에서 이 이슈 언급",
+ "repo.issues.ref_issue_from": "이 이슈가 참조됨 %[4]s %[2]s",
+ "repo.issues.ref_pull_from": "이 풀 리퀘스트가 참조됨 %[4]s %[2]s",
+ "repo.issues.ref_closing_from": "가 %[4]s 풀 리퀘스트를 참조하여 이 이슈가 닫침 %[2]s",
+ "repo.issues.ref_reopening_from": "가 %[4]s 풀 리퀘스트를 참조하여 이 이슈가 다시열림 %[2]s",
+ "repo.issues.ref_closed_from": "이 이슈가 닫힘%[4]s %[2]s",
+ "repo.issues.ref_reopened_from": "이 이슈가 다시 열림 %[4]s %[2]s",
+ "repo.issues.ref_from": "%[1]s 부터",
"repo.issues.author": "작성자",
+ "repo.issues.author_helper": "이 사용자는 작성자입니다.",
"repo.issues.role.owner": "소유자",
+ "repo.issues.role.owner_helper": "이 사용자는 이 리포지토리의 소유자입니다.",
"repo.issues.role.member": "멤버",
+ "repo.issues.role.member_helper": "이 사용자는 이 리포지토리를 소유한 조직의 멤버입니다.",
+ "repo.issues.role.collaborator": "공동작업자",
+ "repo.issues.role.collaborator_helper": "이 사용자는 리포지토리 공동작업을 위해 초대되었습니다.",
+ "repo.issues.role.first_time_contributor": "첫 기여자",
+ "repo.issues.role.first_time_contributor_helper": "이 사용자의 이 리포지토리에 대한 첫 번째 기여입니다.",
+ "repo.issues.role.contributor": "기여자",
+ "repo.issues.role.contributor_helper": "이 사용자는 이전에 이 리포지토리에 커밋한 적이 있습니다.",
+ "repo.issues.re_request_review": "검토 재요청",
+ "repo.issues.is_stale": "이 검토 이후로 이 PR에 변경 사항이 있었습니다",
+ "repo.issues.remove_request_review": "검토 요청 제거",
+ "repo.issues.remove_request_review_block": "검토 요청을 제거할 수 없습니다",
+ "repo.issues.dismiss_review": "검토 해지",
+ "repo.issues.dismiss_review_warning": "이 검토를 해지하시겠습니까?",
"repo.issues.sign_in_require_desc": "로그인하여 이 대화에 참여",
"repo.issues.edit": "수정",
"repo.issues.cancel": "취소",
@@ -624,6 +1568,15 @@
"repo.issues.label_title": "레이블 이름",
"repo.issues.label_description": "레이블 설명",
"repo.issues.label_color": "레이블 색상",
+ "repo.issues.label_color_invalid": "유효하지 않은 색상",
+ "repo.issues.label_exclusive": "독점",
+ "repo.issues.label_archive": "레이블 아카이빙",
+ "repo.issues.label_archived_filter": "아카이빙된 레이블 표시",
+ "repo.issues.label_archive_tooltip": "아카아빙된 레이블은 레이블로 검색할 때 기본적으로 제안 목록에서 제외됩니다.",
+ "repo.issues.label_exclusive_desc": "레이블명을 스코프/항목으로 지정하여 다른 스코프/ 레이블과 상호 배타적으로 만드세요.",
+ "repo.issues.label_exclusive_warning": "이슈 또는 풀 리퀘스트의 레이블을 편집할 때 충돌하는 스코프 지정 레이블은 모두 제거됩니다.",
+ "repo.issues.label_exclusive_order": "정렬 순서",
+ "repo.issues.label_exclusive_order_tooltip": "같은 스코프 내의 독점 레이블은 이 숫자 순서에 따라 정렬됩니다.",
"repo.issues.label_count": "레이블 %d개",
"repo.issues.label_open_issues": "열린 이슈 %d개",
"repo.issues.label_edit": "수정",
@@ -634,13 +1587,61 @@
"repo.issues.label_deletion_success": "라벨이 삭제되었습니다.",
"repo.issues.label.filter_sort.alphabetically": "알파벳순",
"repo.issues.label.filter_sort.reverse_alphabetically": "이름 역순으로 정렬",
+ "repo.issues.label.filter_sort.by_size": "크기가 작은 순",
+ "repo.issues.label.filter_sort.reverse_by_size": "크기가 큰 순",
"repo.issues.num_participants": "참여자 %d명",
"repo.issues.attachment.open_tab": "클릭하여 \"%s\" 새탭으로 보기",
"repo.issues.attachment.download": " \"%s\"를 다운로드 하려면 클릭 하십시오 ",
"repo.issues.subscribe": "구독하기",
"repo.issues.unsubscribe": "구독 취소",
+ "repo.issues.unpin": "고정 해제",
+ "repo.issues.max_pinned": "더 이상 이슈를 고정할 수 없습니다",
+ "repo.issues.pin_comment": "이 %s를 고정함",
+ "repo.issues.unpin_comment": "이 %s를 고정 해제함",
+ "repo.issues.lock": "대화 잠금",
+ "repo.issues.unlock": "대화 잠금 해제",
+ "repo.issues.lock_duplicate": "이슈는 중복해서 잠글 수 없습니다.",
+ "repo.issues.unlock_error": "잠겨 있지 않은 이슈는 잠금 해제할 수 없습니다.",
+ "repo.issues.lock_with_reason": "%s 로 잠그고 대화를 공동작업자로 제한 %s",
+ "repo.issues.lock_no_reason": "잠김, 대화를 공동작업자로 제한됨 %s",
+ "repo.issues.unlock_comment": "이 대화를 잠금 해제 %s",
+ "repo.issues.lock_confirm": "잠금",
+ "repo.issues.unlock_confirm": "잠금 해제",
+ "repo.issues.lock.notice_1": "- 다른 사용자는 이 이슈에 새 댓글을 추가할 수 없습니다.",
+ "repo.issues.lock.notice_2": "- 당신과 이 리포지토리에 액세스 권한이 있는 다른 공동작업자는 여전히 다른 사람들이 볼 수 있는 댓글을 남길 수 있습니다.",
+ "repo.issues.lock.notice_3": "- 이 이슈는 나중에 언제든지 다시 잠금 해제할 수 있습니다.",
+ "repo.issues.unlock.notice_1": "- 모든 사람이 이 이슈에 다시 댓글을 달 수 있습니다.",
+ "repo.issues.unlock.notice_2": "- 이 이슈는 나중에 언제든지 다시 잠글 수 있습니다.",
+ "repo.issues.lock.reason": "잠금 이유",
+ "repo.issues.lock.title": "이 이슈의 대화 잠금.",
+ "repo.issues.unlock.title": "이 이슈의 대화 잠금 해제.",
+ "repo.issues.comment_on_locked": "잠긴 이슈에는 댓글을 달 수 없습니다.",
"repo.issues.delete": "삭제",
+ "repo.issues.delete.title": "이 이슈를 삭제하시겠습니까?",
+ "repo.issues.delete.text": "이 이슈를 정말로 삭제하시겠습니까? (이 작업은 모든 내용을 영구적으로 제거합니다. 아카아빙 상태로 유지하려면 닫는 것을 고려하십시오.)",
"repo.issues.tracker": "타임 트래커",
+ "repo.issues.timetracker_timer_start": "타이머 시작",
+ "repo.issues.timetracker_timer_stop": "타이머 정지",
+ "repo.issues.timetracker_timer_discard": "타이머 폐기",
+ "repo.issues.timetracker_timer_manually_add": "시간 추가",
+ "repo.issues.time_estimate_set": "예상 시간 설정",
+ "repo.issues.time_estimate_display": "예상: %s",
+ "repo.issues.change_time_estimate_at": "예상 시간을 변경 %[1]s %[2]s",
+ "repo.issues.remove_time_estimate_at": "%s 예상 시간을 삭제",
+ "repo.issues.time_estimate_invalid": "예상시간 형식이 유효하지 않습니다",
+ "repo.issues.start_tracking_history": "%s 작업 시작됨",
+ "repo.issues.tracker_auto_close": "이 이슈가 닫히면 타이머가 자동적으로 중지됩니다",
+ "repo.issues.stopwatch_already_stopped": "이 이슈에 대한 타이머가 이미 정지되어 있음",
+ "repo.issues.stopwatch_already_created": "이 이슈에 대한 타이머가 이미 존재",
+ "repo.issues.tracking_already_started": "다른 이슈에서 이미 시간 추적을 시작했습니다!",
+ "repo.issues.stop_tracking": "타이머 정지",
+ "repo.issues.stop_tracking_history": "다음에 대해 작업함 %[1]s %[2]s",
+ "repo.issues.cancel_tracking": "폐기",
+ "repo.issues.cancel_tracking_history": "취소된 타임 트랙킹 %s",
+ "repo.issues.del_time": "이 시간 로그 삭제",
+ "repo.issues.add_time_history": "소요 시간이 추가됨 %[1]s %[2]s",
+ "repo.issues.del_time_history": "소요 시간 삭제됨 %s",
+ "repo.issues.add_time_manually": "수동으로 시간 추가",
"repo.issues.add_time_hours": "시간",
"repo.issues.add_time_minutes": "분",
"repo.issues.add_time_sum_to_small": "시간이 입력되지 않았습니다.",
@@ -650,77 +1651,303 @@
"repo.issues.invalid_due_date_format": "마감일은 반드시 'yyyy-mm-dd' 형식이어야 합니다.",
"repo.issues.error_modifying_due_date": "마감일 수정을 실패하였습니다.",
"repo.issues.error_removing_due_date": "마감일 삭제를 실패하였습니다.",
+ "repo.issues.push_commit_1": "%d개 커밋 추가됨 %s",
+ "repo.issues.push_commits_n": "%d개 커밋 추가됨 %s",
+ "repo.issues.force_push_codes": "%[1]s 강제 푸시됨 from %[2]s to %[4]s %[6]s",
+ "repo.issues.force_push_compare": "비교",
+ "repo.issues.due_date_form": "yyyy-mm-dd",
"repo.issues.due_date_form_add": "마감일 추가",
"repo.issues.due_date_form_edit": "편집",
"repo.issues.due_date_form_remove": "삭제",
+ "repo.issues.due_date_not_writer": "이슈의 마감일을 갱신하려면 이 리포지토리에 대한 쓰기 권한이 있어야 합니다.",
"repo.issues.due_date_not_set": "마감일이 설정되지 않았습니다.",
"repo.issues.due_date_added": "마감일 %s 를 추가 %s",
+ "repo.issues.due_date_modified": "마감일을 변경됨 전 %[2]s 후 %[1]s %[3]s",
"repo.issues.due_date_remove": "%s %s 마감일이 삭제되었습니다.",
"repo.issues.due_date_overdue": "기한 초과",
"repo.issues.due_date_invalid": "기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.",
"repo.issues.dependency.title": "의존성",
+ "repo.issues.dependency.issue_no_dependencies": "설정된 의존성 없음.",
+ "repo.issues.dependency.pr_no_dependencies": "설정된 의존성 없음.",
+ "repo.issues.dependency.no_permission_1": "%d 의존성을 읽을 수 있는 권한이 없습니다",
+ "repo.issues.dependency.no_permission_n": "%d 의존성을 읽을 수 있는 권한이 없습니다",
+ "repo.issues.dependency.no_permission.can_remove": "이 의존성을 읽을 권한은 없지만, 이 의존성을 제거할 수는 있습니다",
"repo.issues.dependency.add": "의존성 추가...",
"repo.issues.dependency.cancel": "취소",
"repo.issues.dependency.remove": "제거",
"repo.issues.dependency.remove_info": "이 의존성 제거",
+ "repo.issues.dependency.added_dependency": "새 의존성이 추가됨 %s",
+ "repo.issues.dependency.removed_dependency": "의존성이 제거됨 %s",
+ "repo.issues.dependency.pr_closing_blockedby": "이 풀 리퀘스트를 닫기가 다음 이슈에 의해 차단되었습니다",
+ "repo.issues.dependency.issue_closing_blockedby": "이 이슈를 닫기가 다음 이슈에 의해 차단되었습니다",
+ "repo.issues.dependency.issue_close_blocks": "이 이슈로 인해 다음 이슈를 닫기가 차단됩니다",
+ "repo.issues.dependency.pr_close_blocks": "이 풀 리퀘스트로 인해 다음 이슈를 닫기가 차단됩니다",
+ "repo.issues.dependency.issue_close_blocked": "이 이슈를 닫으려면 이 이슈를 차단하는 모든 이슈를 닫아야 합니다.",
+ "repo.issues.dependency.issue_batch_close_blocked": "선택한 이슈를 일괄적으로 닫을 수 없습니다. 이슈 #%d에 아직 열려 있는 의존성이 있습니다",
+ "repo.issues.dependency.pr_close_blocked": "이 풀 리퀘스트를 머지하려면 이 풀 리퀘스트를 차단하고 있는 모든 이슈를 닫아야 합니다.",
"repo.issues.dependency.blocks_short": "차단",
"repo.issues.dependency.blocked_by_short": "의존성",
"repo.issues.dependency.remove_header": "의존성 제거",
"repo.issues.dependency.issue_remove_text": "이슈로부터 의존성을 제거하게 됩니다. 계속하시겠습니까?",
"repo.issues.dependency.pr_remove_text": "풀 리퀘스트로부터 의존성을 제거하게 됩니다. 계속하시겠습니까?",
+ "repo.issues.dependency.setting": "이슈와 풀 리퀘스트에 대한 의존성 활성화",
"repo.issues.dependency.add_error_same_issue": "자기자신에 종속되는 이슈는 만들 수 없습니다.",
"repo.issues.dependency.add_error_dep_issue_not_exist": "종속된 이슈가 없습니다.",
"repo.issues.dependency.add_error_dep_not_exist": "의존성이 존재하지 않습니다.",
"repo.issues.dependency.add_error_dep_exists": "의존성이 이미 존재합니다.",
- "repo.issues.dependency.add_error_dep_not_same_repo": "두 이슈는 같은 레포지토리 안에 있어야 합니다.",
+ "repo.issues.dependency.add_error_cannot_create_circular": "두 이슈가 서로를 차단하는 종속성을 생성할 수 없습니다.",
+ "repo.issues.dependency.add_error_dep_not_same_repo": "두 이슈는 같은 리포지토리 안에 있어야 합니다.",
"repo.issues.review.self.approval": "자신의 풀 리퀘스트를 승인할 수 없습니다.",
"repo.issues.review.self.rejection": "자신의 풀 리퀘스트에 대한 변경을 요청할 수 없습니다.",
"repo.issues.review.approve": "이 변경사항을 승인하였습니다. %s",
+ "repo.issues.review.comment": "검토됨 %s",
+ "repo.issues.review.dismissed": "%s의 검토 해지됨 %s",
+ "repo.issues.review.dismissed_label": "해지됨",
+ "repo.issues.review.left_comment": "댓글 남기기",
+ "repo.issues.review.content.empty": "요청된 변경 사항을 나타내는 댓글을 남겨야 합니다.",
+ "repo.issues.review.reject": "변경 요청됨 %s",
+ "repo.issues.review.wait": "검토 요청됨 %s",
+ "repo.issues.review.codeowners_rules": "CODEOWNERS 규칙",
+ "repo.issues.review.add_review_request": "%s %s로부터 검토 요청됨",
+ "repo.issues.review.remove_review_request": "%s %s에 대한 검토 요청 삭제됨",
+ "repo.issues.review.remove_review_request_self": "%s 리뷰를 거부함",
"repo.issues.review.pending": "보류",
+ "repo.issues.review.pending.tooltip": "이 댓글은 현재 다른 사용자에게 표시되지 않습니다. 대기 중인 댓글을 달려면 페이지 상단에서 \"%s\" -> \"%s/%s/%s\"를 선택하세요.",
"repo.issues.review.review": "검토",
"repo.issues.review.reviewers": "리뷰어",
- "repo.issues.review.show_outdated": "오래된 내역 보기",
- "repo.issues.review.hide_outdated": "오래된 내역 숨기기",
+ "repo.issues.review.outdated": "기한이 지남",
+ "repo.issues.review.outdated_description": "이 댓글이 작성된 이후 내용이 변경되었습니다",
+ "repo.issues.review.option.show_outdated_comments": "기한이 지난 댓글 표시",
+ "repo.issues.review.option.hide_outdated_comments": "기한이 지난 댓글 숨기기",
+ "repo.issues.review.show_outdated": "기한이 지난 내역 보기",
+ "repo.issues.review.hide_outdated": "기한이 지난 내역 숨기기",
+ "repo.issues.review.show_resolved": "해결됨 표시",
+ "repo.issues.review.hide_resolved": "해결됨 숨기기",
+ "repo.issues.review.resolve_conversation": "대화 해결",
+ "repo.issues.review.un_resolve_conversation": "대화 해결 취소",
+ "repo.issues.review.resolved_by": "이 대화를 해결됨으로 표시함",
"repo.issues.review.commented": "댓글",
+ "repo.issues.review.official": "승인됨",
+ "repo.issues.review.requested": "검토 대기 중",
+ "repo.issues.review.rejected": "변경 요청됨",
+ "repo.issues.review.stale": "승인 이후 업데이트됨",
+ "repo.issues.review.unofficial": "집계되지 않은 승인",
+ "repo.issues.assignee.error": "예상치 못한 오류로 인해 모든 담당자가 추가되지 않았습니다.",
+ "repo.issues.reference_issue.body": "본문",
+ "repo.issues.content_history.deleted": "삭제됨",
+ "repo.issues.content_history.edited": "편집됨",
+ "repo.issues.content_history.created": "생성됨",
+ "repo.issues.content_history.delete_from_history": "이력에서 삭제",
+ "repo.issues.content_history.delete_from_history_confirm": "이력에서 삭제하시겠습니까?",
+ "repo.issues.content_history.options": "옵션",
+ "repo.issues.reference_link": "참조: %s",
+ "repo.compare.compare_base": "베이스",
+ "repo.compare.compare_head": "비교",
+ "repo.compare.title": "변경 사항 비교",
+ "repo.compare.description": "두 개의 브랜치 또는 태그를 선택하여 변경된 내용을 확인하거나 새 풀 리퀘스트를 시작하세요.",
+ "repo.pulls.desc": "풀 리퀘스트와 코드 검토 활성화.",
"repo.pulls.new": "새 풀 리퀘스트",
+ "repo.pulls.new.description": "다른 사람들과 함께 이 비교에서의 변경 사항을 논의하고 검토하세요.",
+ "repo.pulls.new.blocked_user": "리포지토리 소유자에게 차단되어 풀 리퀘스트를 생성할 수 없습니다.",
+ "repo.pulls.new.must_collaborator": "풀 리퀘스트를 생성하려면 공동작업자여야 합니다.",
+ "repo.pulls.new.already_existed": "이 브랜치들 사이의 풀 리퀘스트가 이미 존재합니다",
+ "repo.pulls.edit.already_changed": "풀 리퀘스트에 대한 변경 사항을 저장할 수 없습니다. 내용이 다른 사용자에 의해 이미 변경된 것 같습니다. 페이지를 새로 고치고 다시 편집하여 변경 내용을 덮어쓰지 않도록 하세요.",
+ "repo.pulls.view": "풀 리퀘스트 보기",
"repo.pulls.compare_changes": "새 풀 리퀘스트",
+ "repo.pulls.allow_edits_from_maintainers": "유지관리자의 편집 허용",
+ "repo.pulls.allow_edits_from_maintainers_desc": "기준 브랜치에 쓰기 권한이 있는 사용자는 이 브랜치에 푸시할 수 있습니다",
+ "repo.pulls.allow_edits_from_maintainers_err": "업데이트 실패",
+ "repo.pulls.has_viewed_file": "조회됨",
+ "repo.pulls.has_changed_since_last_review": "마지막 검토 이후 변경됨",
+ "repo.pulls.viewed_files_label": "%[1]d / %[2]d 파일 조회됨",
+ "repo.pulls.expand_files": "모든 파일 펼침",
+ "repo.pulls.collapse_files": "모든 파일 접기",
"repo.pulls.compare_base": "병합하기",
"repo.pulls.compare_compare": "다음으로부터 풀",
+ "repo.pulls.switch_comparison_type": "비교 유형 전환",
+ "repo.pulls.switch_head_and_base": "헤드와 베이스 전환",
"repo.pulls.filter_branch": "Filter Branch",
+ "repo.pulls.show_all_commits": "모든 커밋 보기",
+ "repo.pulls.show_changes_since_your_last_review": "마지막 검토 이후 변경 사항 보기",
+ "repo.pulls.showing_only_single_commit": "커밋 %[1]s의 변경 사항만 표시",
+ "repo.pulls.showing_specified_commit_range": "%[1]s..%[2]s 사이의 변경 사항만 표시",
+ "repo.pulls.select_commit_hold_shift_for_range": "커밋 선택. Shift 키를 누른 상태에 클릭하여 범위를 선택합니다.",
+ "repo.pulls.review_only_possible_for_full_diff": "전체 diff를 볼 때만 검토가 가능합니다",
+ "repo.pulls.filter_changes_by_commit": "커밋으로 필터링",
+ "repo.pulls.nothing_to_compare": "이 브랜치들은 동일합니다. 풀 리퀘스트를 생성할 필요가 없습니다.",
+ "repo.pulls.nothing_to_compare_have_tag": "선택된 브랜치/태그는 동일합니다.",
+ "repo.pulls.nothing_to_compare_and_allow_empty_pr": "이 브랜치들은 동일합니다. 이 PR은 비어 있을 것입니다.",
+ "repo.pulls.has_pull_request": "이 브랜치들 사이의 풀 리퀘스트가 이미 존재합니다: %[2]s#%[3]d",
"repo.pulls.create": "풀 리퀘스트 생성",
"repo.pulls.title_desc": "%[2]s 에서 %[3]s 로 %[1]d commits 를 머지하려 합니다",
"repo.pulls.merged_title_desc": "%[2]s 에서 %[3]s 로 %[1]d commits 를 머지했습니다 %[4]s",
+ "repo.pulls.change_target_branch_at": "타겟 브랜치 변경 전 %s 후 %s %s",
+ "repo.pulls.marked_as_work_in_progress_at": "풀 리퀘스트를 작업 진도 %s로 마킹함",
+ "repo.pulls.marked_as_ready_for_review_at": "풀 리퀘스트를 %s 검토 준비로 마킹함",
"repo.pulls.tab_conversation": "대화",
"repo.pulls.tab_commits": "커밋",
"repo.pulls.tab_files": "파일 변경됨",
"repo.pulls.reopen_to_merge": "머지 작업을 수행하려면 이 풀 리퀘스트를 다시 열어주세요.",
+ "repo.pulls.cant_reopen_deleted_branch": "브랜치가 삭제되어 이 풀 리퀘스트를 다시 열 수 없습니다.",
"repo.pulls.merged": "병합",
+ "repo.pulls.merged_success": "풀 리퀘스트는 성공적으로 머지되고 닫힘",
+ "repo.pulls.closed": "풀 리퀘스트 닫힘",
+ "repo.pulls.manually_merged": "수동 머지됨",
+ "repo.pulls.merged_info_text": "브랜치 %s는 이제 삭제할 수 있습니다.",
+ "repo.pulls.is_closed": "풀 리퀘스트가 닫혔습니다.",
+ "repo.pulls.title_wip_desc": "제목을 %s 로 시작하여 실수로 머지되지 않도록 풀 리퀘스트를 차단합니다.",
+ "repo.pulls.cannot_merge_work_in_progress": "이 풀 리퀘스트는 작업 진행 중으로 마킹되어 있습니다.",
+ "repo.pulls.still_in_progress": "아직 진행 중입니까?",
+ "repo.pulls.add_prefix": "접두사 %s 추가",
+ "repo.pulls.remove_prefix": "접두사 %s 제거",
+ "repo.pulls.data_broken": "포크 정보 누락으로 인해 이 풀 리퀘스트가 손상되었습니다.",
+ "repo.pulls.files_conflicted": "이 풀 리퀘스트는 대상 브랜치와 충돌하는 변경 사항이 있습니다.",
+ "repo.pulls.files_conflicted_no_listed_files": "(충돌 파일이 목록에 없음)",
+ "repo.pulls.is_checking": "머지 충돌 확인 중…",
+ "repo.pulls.is_ancestor": "이 브랜치는 이미 대상 브랜치에 포함되어 있습니다. 머지할 내용이 없습니다.",
+ "repo.pulls.is_empty": "이 브랜치의 변경 사항은 이미 대상 브랜치에 있습니다. 이것은 빈 커밋이 될 것입니다.",
+ "repo.pulls.required_status_check_failed": "일부 필수 검사가 성공하지 못했습니다.",
+ "repo.pulls.required_status_check_missing": "일부 필수 검사가 누락되었습니다.",
+ "repo.pulls.required_status_check_administrator": "운영자로서 이 풀 리퀘스트를 여전히 머지할 수 있습니다.",
+ "repo.pulls.blocked_by_approvals": "이 풀 리퀘스트는 아직 요구되는 승인을 충분히 받지 못했습니다. %d개/%d 가 공식 승인되었습니다.",
+ "repo.pulls.blocked_by_approvals_whitelisted": "이 풀 리퀘스트는 아직 필요한 승인을 충분히 받지 못했습니다. 허용 목록에 있는 사용자 또는 팀으로부터 %d개 중 %d개의 승인되었습니다.",
+ "repo.pulls.blocked_by_rejection": "이 풀 리퀘스트는 공식 검토자에 의해 변경이 요청되었습니다.",
+ "repo.pulls.blocked_by_official_review_requests": "이 풀 리퀘스트에는 공식 검토 요청이 있습니다.",
+ "repo.pulls.blocked_by_outdated_branch": "이 풀 리퀘스트는 기한이 지나 차단되었습니다.",
+ "repo.pulls.blocked_by_changed_protected_files_1": "이 풀 리퀘스트는 보호된 파일을 변경하므로 차단되었습니다:",
+ "repo.pulls.blocked_by_changed_protected_files_n": "이 풀 리퀘스트는 보호된 파일을 변경하므로 차단되었습니다:",
"repo.pulls.can_auto_merge_desc": "이 풀리퀘스트는 자동적으로 머지될 수 있습니다.",
+ "repo.pulls.cannot_auto_merge_desc": "충돌로 인해 이 풀 리퀘스트를 자동으로 머지할 수 없습니다.",
"repo.pulls.cannot_auto_merge_helper": "충돌을 해결하려면 수동으로 머지하십시오.",
- "repo.pulls.no_merge_desc": "모든 저장소 머지 옵션이 비활성화 되어있기 때문에 이 풀 리퀘스트를 머지할 수 없습니다.",
+ "repo.pulls.num_conflicting_files_1": "%d개의 충돌 파일",
+ "repo.pulls.num_conflicting_files_n": "%d개의 충돌 파일",
+ "repo.pulls.approve_count_1": "%d개의 승인",
+ "repo.pulls.approve_count_n": "%d개의 승인",
+ "repo.pulls.reject_count_1": "%d개의 변경 요청",
+ "repo.pulls.reject_count_n": "%d개의 변경 요청",
+ "repo.pulls.waiting_count_1": "%d개의 검토 대기",
+ "repo.pulls.waiting_count_n": "%d개의 검토 대기",
+ "repo.pulls.wrong_commit_id": "커밋 ID는 대상 브랜치의 커밋 ID여야 합니다",
+ "repo.pulls.no_merge_desc": "모든 리포지토리 머지 옵션이 비활성화 되어있기 때문에 이 풀 리퀘스트를 머지할 수 없습니다.",
+ "repo.pulls.no_merge_helper": "저장소 설정에서 머지 옵션을 활성화하거나 풀 리퀘스트를 수동으로 머지하십시오.",
+ "repo.pulls.no_merge_wip": "이 풀 리퀘스트는 작업 진행 중으로 마킹되어 있어 머지할 수 없습니다.",
+ "repo.pulls.no_merge_not_ready": "이 풀 리퀘스트는 머지할 준비가 되지 않았습니다. 검토와 상태를 확인하십시오.",
+ "repo.pulls.no_merge_access": "이 풀 리퀘스트를 머지할 권한이 없습니다.",
+ "repo.pulls.merge_pull_request": "머지 커밋 생성",
+ "repo.pulls.rebase_merge_pull_request": "리베이스한 후 패스트-포워드",
+ "repo.pulls.rebase_merge_commit_pull_request": "리베이스하고 머지 커밋 생성",
+ "repo.pulls.squash_merge_pull_request": "스쿼시 커밋 생성",
+ "repo.pulls.fast_forward_only_merge_pull_request": "패스트-포워드만",
+ "repo.pulls.merge_manually": "수동 머지됨",
+ "repo.pulls.merge_commit_id": "머지 커밋 ID",
+ "repo.pulls.require_signed_wont_sign": "브랜치에는 서명된 커밋이 필요하지만 이 머지는 서명되지 않습니다",
"repo.pulls.invalid_merge_option": "이 풀 리퀘스트에서 설정한 머지 옵션을 사용하실 수 없습니다.",
+ "repo.pulls.merge_conflict": "머지 실패: 머지 중에 충돌이 발생했습니다. 힌트: 다른 전략을 시도하십시오.",
+ "repo.pulls.merge_conflict_summary": "오류 메시지",
+ "repo.pulls.rebase_conflict": "머지 실패: 커밋을 리베이스하는 동안 충돌이 발생했습니다:%[1]s. 힌트: 다른 전략을 시도하십시오.",
+ "repo.pulls.rebase_conflict_summary": "오류 메시지",
+ "repo.pulls.unrelated_histories": "머지 실패: 머지 헤드와 베이스가 공통 이력을 공유하지 않습니다. 힌트: 다른 전략을 시도하십시오.",
+ "repo.pulls.merge_out_of_date": "머지 실패: 머지 생성 중 베이스가 갱신되었습니다. 힌트: 다시 시도해 보세요.",
+ "repo.pulls.head_out_of_date": "머지 실패: 머지 생성 중 헤드가 갱신되었습니다. 힌트: 다시 시도해 보세요.",
+ "repo.pulls.has_merged": "실패: 풀 리퀘스트가 머지되었습니다. 다시 머지하거나 대상 브랜치를 변경할 수 없습니다.",
+ "repo.pulls.push_rejected": "푸시 실패: 푸시가 거부되었습니다. 이 저장소의 Git Hook을 검토하십시오.",
+ "repo.pulls.push_rejected_summary": "전체 거부 메시지",
+ "repo.pulls.push_rejected_no_message": "푸시 실패: 푸시가 거부되었지만 리모트 메시지가 없습니다. 이 저장소의 Git Hook을 검토하십시오.",
+ "repo.pulls.open_unmerged_pull_exists": "동일한 속성을 가진 대기 중인 풀 리퀘스트(#%d)가 있으므로 다시 열기 작업을 수행할 수 없습니다.",
+ "repo.pulls.status_checking": "일부 검사가 대기 중",
+ "repo.pulls.status_checks_success": "모든 검사 성공",
+ "repo.pulls.status_checks_warning": "일부 검사에서 경고를 보고함",
+ "repo.pulls.status_checks_failure_required": "일부 필수 검사가 실패함",
+ "repo.pulls.status_checks_failure_optional": "일부 옵션 검사가 실패함",
+ "repo.pulls.status_checks_error": "일부 검사에서 오류 보고함",
+ "repo.pulls.status_checks_requested": "필수 항목",
+ "repo.pulls.status_checks_details": "상세 정보",
+ "repo.pulls.status_checks_hide_all": "체크된 것 숨기기",
+ "repo.pulls.status_checks_show_all": "모든 체크 표시",
+ "repo.pulls.status_checks_approve_all": "모든 워크플로우 승인",
+ "repo.pulls.status_checks_need_approvals": "%d 워크플로우가 승인을 기다림",
+ "repo.pulls.status_checks_need_approvals_helper": "리포지토리 유지관리자의 승인이후에 워크플로우가 실행됩니다.",
+ "repo.pulls.update_branch": "머지로 브랜치 갱신",
+ "repo.pulls.update_branch_rebase": "리베이스로 브랜치 갱신",
+ "repo.pulls.update_branch_success": "브랜치 업데이트 성공",
+ "repo.pulls.update_not_allowed": "브랜치를 업데이트 할 권한이 없음",
+ "repo.pulls.outdated_with_base_branch": "이 브랜치는 베이스 브랜치 보다 오래됨",
+ "repo.pulls.close": "풀 리퀘스트 닫기",
+ "repo.pulls.reopen": "풀 리퀘스트 다시열기",
+ "repo.pulls.closed_at": "%[2]s 풀 리퀘스트 닫침",
+ "repo.pulls.reopened_at": "%[2]s 풀 리퀘스트 다시열림",
+ "repo.pulls.cmd_instruction_hint": "명령줄 지침 보기",
+ "repo.pulls.cmd_instruction_checkout_title": "체크아웃",
+ "repo.pulls.cmd_instruction_checkout_desc": "프로젝트 리포지토리에서 새 브랜치를 체크아웃하여 변경 사항을 테스트하십시오.",
+ "repo.pulls.cmd_instruction_merge_title": "머지",
+ "repo.pulls.cmd_instruction_merge_desc": "변경 사항을 머지하고 Gitea에 갱신하십시오.",
+ "repo.pulls.cmd_instruction_merge_warning": "경고: \"자동 감지 수동 머지\"가 활성화되지 않아 이 작업은 풀 리퀘스트를 머지할 수 없음.",
+ "repo.pulls.clear_merge_message": "머지 메시지 삭제",
+ "repo.pulls.clear_merge_message_hint": "머지 메시지를 지우면 커밋 메시지 내용만 제거되며, \"Co-Authored-By…\"와 같은 생성된 Git 트레일러는 유지됩니다.",
+ "repo.pulls.auto_merge_button_when_succeed": "(검사 성공 시)",
+ "repo.pulls.auto_merge_when_succeed": "모든 검사 성공 시 자동 머지",
+ "repo.pulls.auto_merge_newly_scheduled": "이 풀 리퀘스트는 모든 점검에 성공 시 머지되도록 예약되었습니다.",
+ "repo.pulls.auto_merge_has_pending_schedule": "%[1]s 이 모든 점검 성공 시 이 풀 리퀘스트를 자동 머지하도록 예약했습니다 %[2]s.",
+ "repo.pulls.auto_merge_cancel_schedule": "자동 머지 취소",
+ "repo.pulls.auto_merge_not_scheduled": "이 풀 리퀘스트는 자동 머지되도록 예약되지 않았습니다.",
+ "repo.pulls.auto_merge_canceled_schedule": "이 풀 리퀘스트의 자동 머지가 취소되었습니다.",
+ "repo.pulls.auto_merge_newly_scheduled_comment": "모든 검사가 성공하면 이 풀 리퀘스트를 자동으로 머지하도록 예약함 %[1]s",
+ "repo.pulls.auto_merge_canceled_schedule_comment": "모든 검사가 성공할 때 이 풀 리퀘스트의 자동 머지를 취소함 %[1]s",
+ "repo.pulls.delete.title": "이 풀 리퀘스트를 삭제하겠습니까?",
+ "repo.pulls.delete.text": "이 풀 리퀘스트를 정말로 제거하시겠습니까? (이 작업은 모든 내용을 영구적으로 제거합니다. 아카이빙을 유지하려면, 대신 닫는 것을 고려하십시오.)",
+ "repo.pulls.recently_pushed_new_branches": "%[1]s 브랜치에 푸시했습니다 %[2]s",
+ "repo.pulls.upstream_diverging_prompt_behind_1": "이 브랜치는 %[2]s보다 %[1]d개 커밋 뒤쳐져 있습니다",
+ "repo.pulls.upstream_diverging_prompt_behind_n": "이 브랜치는 %[2]s보다 %[1]d개 커밋 뒤쳐져 있습니다",
+ "repo.pulls.upstream_diverging_prompt_base_newer": "베이스 브랜치 %s에 새 변경 사항이 있습니다",
+ "repo.pulls.upstream_diverging_merge": "포크 동기화",
+ "repo.pulls.upstream_diverging_merge_confirm": "\"%[1]s\" 를 \"%[2]s\"로 머지하시겠습니까?",
+ "repo.pull.deleted_branch": "(삭제됨): %s",
+ "repo.pull.agit_documentation": "AGit에 대한 문서를 살펴보세요",
+ "repo.comments.edit.already_changed": "댓글에 대한 변경 사항을 저장할 수 없습니다. 내용이 다른 사용자에 의해 이미 변경된 것 같습니다. 페이지를 새로 고침하고 다시 편집하여 변경 내용을 덮어쓰지 않도록 하세요",
"repo.milestones.new": "새로운 마일스톤",
"repo.milestones.closed": "닫힘 %s",
+ "repo.milestones.update_ago": "%s 업데이트됨",
"repo.milestones.no_due_date": "기한 없음",
"repo.milestones.open": "열기",
"repo.milestones.close": "닫기",
+ "repo.milestones.new_subheader": "마일스톤은 이슈를 정리하고 진행 상황을 추적하는데 도움을 줄 수 있습니다.",
+ "repo.milestones.completeness": "%d%% 완료",
"repo.milestones.create": "마일스톤 생성",
"repo.milestones.title": "타이틀",
"repo.milestones.desc": "설명",
- "repo.milestones.due_date": "기한 (선택 사항)",
+ "repo.milestones.due_date": "마감 일 (선택 사항)",
"repo.milestones.clear": "지우기",
"repo.milestones.invalid_due_date_format": "마감일은 반드시 'yyyy-mm-dd' 형식이어야 합니다.",
+ "repo.milestones.create_success": "마일스톤 \"%s\"가 생성되었습니다.",
"repo.milestones.edit": "마일스톤 편집",
+ "repo.milestones.edit_subheader": "마일스톤은 이슈를 정리하고 진행 상황을 추적합니다.",
"repo.milestones.cancel": "취소",
- "repo.milestones.modify": "마일스톤 갱신",
+ "repo.milestones.modify": "마일스톤 업데이트",
+ "repo.milestones.edit_success": "\"%s\" 마일스톤이 업데이트되었습니다.",
"repo.milestones.deletion": "마일스톤 삭제",
"repo.milestones.deletion_desc": "마일스톤을 삭제하면 연관된 모든 이슈에서 삭제됩니다. 계속 하시겠습니까?",
"repo.milestones.deletion_success": "마일스톤이 삭제되었습니다.",
"repo.milestones.filter_sort.name": "이름",
+ "repo.milestones.filter_sort.earliest_due_data": "빠른 마감일 순",
+ "repo.milestones.filter_sort.latest_due_date": "늦은 마감일 순",
"repo.milestones.filter_sort.least_complete": "완료율이 낮은 순",
"repo.milestones.filter_sort.most_complete": "완료율이 높은 순",
"repo.milestones.filter_sort.most_issues": "이슈 많은 순",
"repo.milestones.filter_sort.least_issues": "이슈 적은 순",
+ "repo.signing.will_sign": "이 커밋은 \"%s\" 키로 서명됩니다.",
+ "repo.signing.wont_sign.error": "커밋 서명 가능 여부를 확인하는 동안에 오류가 발생했습니다.",
+ "repo.signing.wont_sign.nokey": "이 커밋에 서명할 수 있는 키가 없습니다.",
+ "repo.signing.wont_sign.never": "커밋은 전혀 서명되지 않습니다.",
+ "repo.signing.wont_sign.always": "커밋은 항상 서명됩니다.",
+ "repo.signing.wont_sign.pubkey": "계정에 연결된 공개 키가 없어서 커밋이 서명되지 않을 것입니다.",
+ "repo.signing.wont_sign.twofa": "커밋에 서명하려면 2단계 인증이 활성화되어 있어야 합니다.",
+ "repo.signing.wont_sign.parentsigned": "상위 커밋이 서명되지 않아 커밋이 서명되지 않을 것입니다.",
+ "repo.signing.wont_sign.basesigned": "기본 커밋이 서명되지 않아 머지가 서명되지 않을 것입니다.",
+ "repo.signing.wont_sign.headsigned": "헤드 커밋이 서명되지 않아 머지가 서명되지 않을 것입니다.",
+ "repo.signing.wont_sign.commitssigned": "연관된 모든 커밋이 서명되지 않아 머지가 서명되지 않을 것입니다.",
+ "repo.signing.wont_sign.approved": "PR이 승인되지 않아 머지가 서명되지 않을 것입니다.",
+ "repo.signing.wont_sign.not_signed_in": "로그인되어 있지 않습니다.",
+ "repo.ext_wiki": "외부 위키 액세스",
"repo.ext_wiki.desc": "외부 위키에 연결하기.",
"repo.wiki": "위키",
"repo.wiki.welcome": "위키에 오신것을 환영합니다!",
@@ -730,23 +1957,40 @@
"repo.wiki.page": "페이지",
"repo.wiki.filter_page": "페이지 필터링",
"repo.wiki.new_page": "페이지",
+ "repo.wiki.page_title": "페이지 제목",
+ "repo.wiki.page_content": "페이지 내용",
"repo.wiki.default_commit_message": "이 페이지에 대한 메모를 작성하세요.(선택사항)",
"repo.wiki.save_page": "페이지 저장하기",
"repo.wiki.last_commit_info": "%s이(가) %s에 이 페이지를 수정함",
"repo.wiki.edit_page_button": "수정하기",
"repo.wiki.new_page_button": "새로운 페이지",
+ "repo.wiki.file_revision": "페이지 리비전",
+ "repo.wiki.wiki_page_revisions": "위키 페이지 리비전",
+ "repo.wiki.back_to_wiki": "위키 페이지로 돌아가기",
"repo.wiki.delete_page_button": "페이지 삭제",
+ "repo.wiki.delete_page_notice_1": "\"%s\" 위키 페이지를 삭제하면 되돌릴 수 없습니다. 계속하시겠습니까?",
"repo.wiki.page_already_exists": "같은 이름의 위키 페이지가 이미 존재 합니다.",
+ "repo.wiki.reserved_page": "\"%s\" 위키 페이지 이름은 예약되어 있습니다.",
"repo.wiki.pages": "페이지",
"repo.wiki.last_updated": "마지막 업데이트: %s",
+ "repo.wiki.page_name_desc": "이 위키 페이지 이름을 입력하세요. 특별한 이름으로는 'Home', '_Sidebar', '_Footer'가 있습니다.",
+ "repo.wiki.original_git_entry_tooltip": "Friendly 링크를 사용하는 대신 원본 Git 파일 보기.",
"repo.activity": "활동",
+ "repo.activity.navbar.pulse": "펄스",
+ "repo.activity.navbar.code_frequency": "코드 빈도",
+ "repo.activity.navbar.contributors": "기여자",
+ "repo.activity.navbar.recent_commits": "최근 커밋",
"repo.activity.period.filter_label": "기간:",
"repo.activity.period.daily": "1일",
"repo.activity.period.halfweekly": "3일",
"repo.activity.period.weekly": "1주",
"repo.activity.period.monthly": "1개월",
+ "repo.activity.period.quarterly": "3개월",
+ "repo.activity.period.semiyearly": "6개월",
"repo.activity.period.yearly": "1 년",
"repo.activity.overview": "개요",
+ "repo.activity.active_prs_count_1": "%d개의 활성화된 풀 리퀘스트",
+ "repo.activity.active_prs_count_n": "%d개의 활성화된 풀 리퀘스트",
"repo.activity.merged_prs_count_1": "풀 리퀘스트 병합",
"repo.activity.merged_prs_count_n": "풀 리퀘스트 병합",
"repo.activity.opened_prs_count_1": "새 풀 리퀘스트",
@@ -765,6 +2009,7 @@
"repo.activity.closed_issues_count_n": "클로즈된 이슈",
"repo.activity.title.issues_1": "이슈 %d개",
"repo.activity.title.issues_n": "이슈 %d개",
+ "repo.activity.title.issues_closed_from": "%s이 %s으로부터 닫힘",
"repo.activity.title.issues_created_by": "%s 가 %s 에 의해 생성되었습니다.",
"repo.activity.closed_issue_label": "닫힘",
"repo.activity.new_issues_count_1": "새로운 이슈",
@@ -778,151 +2023,543 @@
"repo.activity.title.releases_n": "%d 개의 릴리즈",
"repo.activity.title.releases_published_by": "%s 가 %s 에 의하여 배포되었습니다.",
"repo.activity.published_release_label": "배포됨",
+ "repo.activity.no_git_activity": "이 기간 동안 커밋 활동이 없었습니다.",
+ "repo.activity.git_stats_exclude_merges": "머지는 제외,",
+ "repo.activity.git_stats_author_1": "%d명 작성자",
+ "repo.activity.git_stats_author_n": "%d명 작성자",
+ "repo.activity.git_stats_pushed_1": "푸시함",
+ "repo.activity.git_stats_pushed_n": "푸시함",
+ "repo.activity.git_stats_commit_1": "%d개 커밋",
+ "repo.activity.git_stats_commit_n": "%d개 커밋",
+ "repo.activity.git_stats_push_to_branch": "%s 로, 그리고",
+ "repo.activity.git_stats_push_to_all_branches": "모든 브랜치로.",
+ "repo.activity.git_stats_on_default_branch": "%s 상에서,",
+ "repo.activity.git_stats_file_1": "%d개 파일",
+ "repo.activity.git_stats_file_n": "%d개 파일",
+ "repo.activity.git_stats_files_changed_1": "변경됨",
+ "repo.activity.git_stats_files_changed_n": "변경됨",
+ "repo.activity.git_stats_additions": "그리고, 다음이 있음",
+ "repo.activity.git_stats_addition_1": "%d개 추가",
+ "repo.activity.git_stats_addition_n": "%d개 추가",
+ "repo.activity.git_stats_and_deletions": "그리고",
+ "repo.activity.git_stats_deletion_1": "%d개 삭제",
+ "repo.activity.git_stats_deletion_n": "%d개 삭제",
+ "repo.contributors.contribution_type.filter_label": "기여 유형:",
"repo.contributors.contribution_type.commits": "커밋",
+ "repo.contributors.contribution_type.additions": "추가",
+ "repo.contributors.contribution_type.deletions": "삭제",
"repo.settings": "설정",
- "repo.settings.options": "저장소",
+ "repo.settings.desc": "설정에서 리포지토리 설정을 관리할 수 있습니다.",
+ "repo.settings.options": "리포지토리",
+ "repo.settings.public_access": "공개 액세스",
+ "repo.settings.public_access_desc": "이 리포지토리의 기본값을 재정의하도록 공개 방문자의 액세스 권한을 구성합니다.",
+ "repo.settings.public_access.docs.not_set": "설정 안됨: 추가적인 공개 액세스 권한 없음. 방문자의 권한은 리포지토리의 공개범위와 멤버 권한을 따릅니다.",
+ "repo.settings.public_access.docs.anonymous_read": "익명 읽기: 로그인하지 않은 사용자는 읽기 권한으로 해당 단위에 액세스할 수 있습니다.",
+ "repo.settings.public_access.docs.everyone_read": "모든 사용자 읽기: 모든 로그인한 사용자는 읽기 권한으로 해당 단위에 액세스할 수 있습니다. 이슈/풀 리퀘스트 단위의 읽기 권한은 사용자가 새 이슈/풀 리퀘스트를 생성할 수 있음을 의미합니다.",
+ "repo.settings.public_access.docs.everyone_write": "모든 사용자 쓰기: 모든 로그인한 사용자는 해당 단위에 대한 쓰기 권한을 가집니다. 위키 유닛만 이 권한을 지원합니다.",
"repo.settings.collaboration": "공동작업자",
- "repo.settings.collaboration.admin": "관리자",
+ "repo.settings.collaboration.admin": "운영자",
"repo.settings.collaboration.write": "쓰기",
"repo.settings.collaboration.read": "읽기",
"repo.settings.collaboration.owner": "소유자",
"repo.settings.collaboration.undefined": "미정의",
+ "repo.settings.collaboration.per_unit": "유닛 권한",
"repo.settings.hooks": "웹훅",
"repo.settings.githooks": "Git 훅",
"repo.settings.basic_settings": "기본 설정",
"repo.settings.mirror_settings": "미러 설정",
+ "repo.settings.mirror_settings.docs": "커밋, 태그 및 브랜치를 다른 리포지토리와 자동으로 동기화하도록 리포지토리를 설정합니다.",
+ "repo.settings.mirror_settings.docs.disabled_pull_mirror.instructions": "프로젝트를 설정하여 커밋, 태그 및 브랜치를 다른 리포지토리로 자동으로 푸시하세요. 풀 미러는 사이트 운영자에 의해 비활성화되었습니다.",
+ "repo.settings.mirror_settings.docs.disabled_push_mirror.instructions": "커밋, 태그 및 브랜치를 다른 리포지토리에서 자동으로 가져오도록 프로젝트를 설정합니다.",
+ "repo.settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning": "현재 이 작업은 \"새 마이그레이션\" 메뉴에서만 가능합니다. 더 자세한 정보는 다음을 참조하십시오:",
+ "repo.settings.mirror_settings.docs.disabled_push_mirror.info": "푸시 미러는 사이트 관리자에 의해 비활성화되었습니다.",
+ "repo.settings.mirror_settings.docs.no_new_mirrors": "리포지토리가 다른 리포지토리로 또는 다른 리포지토리로부터 변경 사항을 미러링하고 있습니다. 새 미러를 생성할 수 없다는 점을 유의하십시오.",
+ "repo.settings.mirror_settings.docs.can_still_use": "기존 미러를 수정하거나 새 미러를 생성할 수는 없지만, 현재 사용 중인 미러는 계속 사용할 수 있습니다.",
+ "repo.settings.mirror_settings.docs.pull_mirror_instructions": "풀 미러를 설정하려면 다음을 참조:",
+ "repo.settings.mirror_settings.docs.more_information_if_disabled": "푸시 및 풀 미러에 대한 자세한 내용은 다음에서 확인할 수 있습니다:",
+ "repo.settings.mirror_settings.docs.doc_link_title": "리포지토리를 미러링 하는 방법은?",
+ "repo.settings.mirror_settings.docs.doc_link_pull_section": "문서의 \"원격 리포지토리에서 풀링\" 섹션.",
+ "repo.settings.mirror_settings.docs.pulling_remote_title": "원격 리포지토리에서 Pull 중",
+ "repo.settings.mirror_settings.mirrored_repository": "미러링된 리포지토리",
+ "repo.settings.mirror_settings.pushed_repository": "푸시된 리포지토리",
+ "repo.settings.mirror_settings.direction": "방향",
+ "repo.settings.mirror_settings.direction.pull": "Pull",
+ "repo.settings.mirror_settings.direction.push": "Push",
+ "repo.settings.mirror_settings.last_update": "마지막 업데이트",
+ "repo.settings.mirror_settings.push_mirror.none": "구성된 푸시 미러 없음",
+ "repo.settings.mirror_settings.push_mirror.remote_url": "Git 원격 리포지토리 URL",
+ "repo.settings.mirror_settings.push_mirror.add": "푸시 미러 추가",
+ "repo.settings.mirror_settings.push_mirror.edit_sync_time": "미러 동기화 간격 편집",
"repo.settings.sync_mirror": "지금 동기화",
+ "repo.settings.pull_mirror_sync_in_progress": "현재 리모트 %s에서 변경 사항을 Pull 중입니다.",
+ "repo.settings.push_mirror_sync_in_progress": "현재 리모트 %s로 변경 사항을 푸시하는 중입니다.",
"repo.settings.site": "웹 사이트",
"repo.settings.update_settings": "설정 저장",
+ "repo.settings.update_mirror_settings": "미러 설정 업데이트",
+ "repo.settings.branches.switch_default_branch": "기본 브랜치 전환",
+ "repo.settings.branches.update_default_branch": "기본 브랜치 업데이트",
+ "repo.settings.branches.add_new_rule": "새 규칙 추가",
"repo.settings.advanced_settings": "고급 설정",
- "repo.settings.wiki_desc": "저장소 위키 활성화",
+ "repo.settings.wiki_desc": "리포지토리 위키 활성화",
"repo.settings.use_internal_wiki": "빌트-인 위키 사용",
+ "repo.settings.default_wiki_branch_name": "기본 위키 브랜치명",
+ "repo.settings.failed_to_change_default_wiki_branch": "기본 위키 브랜치 변경에 실패했습니다.",
"repo.settings.use_external_wiki": "외부 위키 사용",
"repo.settings.external_wiki_url": "외부 위키 URL",
"repo.settings.external_wiki_url_error": "외부 위키 URL이 올바른 URL이 아닙니다.",
- "repo.settings.issues_desc": "저장소 이슈 트래커 활성화",
+ "repo.settings.external_wiki_url_desc": "위키 탭을 클릭하면 방문자는 외부 위키 URL로 리다이렉트됩니다.",
+ "repo.settings.issues_desc": "리포지토리 이슈 트래커 활성화",
"repo.settings.use_internal_issue_tracker": "빌트-인 트래커 사용",
"repo.settings.use_external_issue_tracker": "외부 이슈 트래커 사용",
"repo.settings.external_tracker_url": "외부 이슈 트래커 URL",
"repo.settings.external_tracker_url_error": "외부 이슈 트래커 URL이 올바른 URL이 아닙니다.",
+ "repo.settings.external_tracker_url_desc": "이슈 탭을 클릭하면 방문자는 외부 이슈 트래커 URL로 리디렉트됩니다.",
"repo.settings.tracker_url_format": "외부 이슈 트래커 URL 형식",
+ "repo.settings.tracker_url_format_error": "외부 이슈 트래커 URL 형식이 유효한 URL이 아닙니다.",
"repo.settings.tracker_issue_style": "외부 이슈 트래커 숫자 포맷",
"repo.settings.tracker_issue_style.numeric": "숫자",
"repo.settings.tracker_issue_style.alphanumeric": "문자 숫자",
+ "repo.settings.tracker_issue_style.regexp": "정규식",
+ "repo.settings.tracker_issue_style.regexp_pattern": "정규식 패턴",
+ "repo.settings.tracker_issue_style.regexp_pattern_desc": "처음 캡처된 그룹이 {index} 대신하여 사용됩니다.",
+ "repo.settings.tracker_url_format_desc": "사용자명, 리포지토리명 및 이슈 인덱스에 대해 {user}, {repo} 와 {index} 플레이스홀더를 사용하십시오.",
"repo.settings.enable_timetracker": "시간 추적 활성화",
"repo.settings.allow_only_contributors_to_track_time": "기여자 트랙 타임만",
- "repo.settings.pulls_desc": "저장소 풀 리퀘스트 활성화",
+ "repo.settings.pulls_desc": "리포지토리 풀 리퀘스트 활성화",
"repo.settings.pulls.ignore_whitespace": "공백은 충돌에서 무시하기",
- "repo.settings.admin_settings": "관리자 설정",
- "repo.settings.admin_enable_health_check": "저장소 헬스 체크 활성화 (git fsck)",
+ "repo.settings.pulls.enable_autodetect_manual_merge": "수동 머지 자동 감지 활성화 (참고: 일부 특별한 경우 오류가 발생할 수 있습니다.)",
+ "repo.settings.pulls.allow_rebase_update": "rebase로 풀 리퀘스트 브랜치 업데이트 활성화",
+ "repo.settings.pulls.default_target_branch": "새로운 풀 리퀘스트에 대한 기본 타겟 브랜치",
+ "repo.settings.pulls.default_target_branch_default": "기본 브랜치 (%s)",
+ "repo.settings.pulls.default_delete_branch_after_merge": "기본적으로 머지 후 풀 리퀘스트 브랜치 삭제",
+ "repo.settings.pulls.default_allow_edits_from_maintainers": "기본적으로 유지관리자의 편집 허용",
+ "repo.settings.releases_desc": "리포지토리 릴리스 활성화",
+ "repo.settings.packages_desc": "리포지토리 패키지 레지스트리 활성화",
+ "repo.settings.projects_desc": "프로젝트 활성화",
+ "repo.settings.projects_mode_desc": "프로젝트 모드 (어떤 종류의 프로젝트를 표시할지)",
+ "repo.settings.projects_mode_repo": "리포지토리 프로젝트만",
+ "repo.settings.projects_mode_owner": "사용자 또는 조직 프로젝트만",
+ "repo.settings.projects_mode_all": "모든 프로젝트",
+ "repo.settings.actions_desc": "리포지토리 동작 활성화",
+ "repo.settings.admin_settings": "운영자 설정",
+ "repo.settings.admin_enable_health_check": "리포지토리 헬스 체크 활성화 (git fsck)",
+ "repo.settings.admin_code_indexer": "코드 인덱서",
+ "repo.settings.admin_stats_indexer": "코드 통계 인덱서",
+ "repo.settings.admin_indexer_commit_sha": "마지막으로 인덱싱된 SHA",
+ "repo.settings.admin_indexer_unindexed": "인덱싱되지 않음",
+ "repo.settings.reindex_button": "재인덱싱 큐에 추가",
+ "repo.settings.reindex_requested": "재인덱싱 요청됨",
+ "repo.settings.admin_enable_close_issues_via_commit_in_any_branch": "기본 브랜치가 아닌 다른 브랜치에서 커밋을 통해 이슈 닫기",
"repo.settings.danger_zone": "위험 설정",
- "repo.settings.new_owner_has_same_repo": "새로운 소유자가 같은 이름의 저장소를 이미 가지고 있습니다. 다른 이름을 선택해주세요.",
- "repo.settings.convert": "일반 저장소로 변환",
- "repo.settings.convert_confirm": "저장소 변환",
- "repo.settings.convert_fork": "일반 저장소로 변환",
- "repo.settings.convert_fork_confirm": "저장소 변환",
+ "repo.settings.new_owner_has_same_repo": "새로운 소유자가 같은 이름의 리포지토리를 이미 가지고 있습니다. 다른 이름을 선택해주세요.",
+ "repo.settings.convert": "일반 리포지토리로 전환",
+ "repo.settings.convert_desc": "이 미러를 일반 저장소로 전환할 수 있습니다. 이 작업은 되돌릴 수 없습니다.",
+ "repo.settings.convert_notices_1": "이 작업은 미러를 일반 저장소로 전환하며, 이 작업은 되돌릴 수 없습니다.",
+ "repo.settings.convert_confirm": "리포지토리 전환",
+ "repo.settings.convert_succeed": "미러가 일반 저장소로 전환되었습니다.",
+ "repo.settings.convert_fork": "일반 리포지토리로 전환",
+ "repo.settings.convert_fork_desc": "이 포크를 일반 저장소로 전환할 수 있습니다. 이 작업은 되돌릴 수 없습니다.",
+ "repo.settings.convert_fork_notices_1": "이 작업은 포크를 일반 저장소로 전환하며 되돌릴 수 없습니다.",
+ "repo.settings.convert_fork_confirm": "리포지토리 전환",
+ "repo.settings.convert_fork_succeed": "포크가 일반 저장소로 전환되었습니다.",
"repo.settings.transfer": "소유권 이전",
+ "repo.settings.transfer.rejected": "리포지토리 이전이 거부되었습니다.",
+ "repo.settings.transfer.success": "리포지토리 이전에 성공했습니다.",
+ "repo.settings.transfer.blocked_user": "새 소유자에게 차단되어 리포지토리를 이전할 수 없습니다.",
+ "repo.settings.transfer_abort": "이전 취소",
+ "repo.settings.transfer_abort_invalid": "존재하지 않는 저장소 이전을 취소할 수 없습니다.",
+ "repo.settings.transfer_abort_success": "리포지토리를 %s로 이전이 성공적으로 취소되었습니다.",
+ "repo.settings.transfer_desc": "이 리포지토리를 사용자 또는 당신이 운영자 권한을 가지고 있는 조직으로 이전합니다.",
+ "repo.settings.transfer_form_title": "확인을 위해 저장소명을 입력:",
+ "repo.settings.transfer_in_progress": "현재 진행 중인 이전이 있습니다. 이 저장소를 다른 사용자에게 이전하려면 먼저 취소하십시오.",
+ "repo.settings.transfer_notices_1": "- 개별 사용자에게 리포지토리를 이전하면 리포지토리에 대한 액세스 권한을 잃게 됩니다.",
+ "repo.settings.transfer_notices_2": "- 당신이 (공동)소유하고 있는 조직으로 리포지토리를 이전하면 리포지토리에 대한 액세스 권한을 유지합니다.",
+ "repo.settings.transfer_notices_3": "- 리포지토리가 비공개이고 개별 사용자에게 이전되는 경우, 이 작업은 해당 사용자가 최소한 읽기 권한을 가지도록 보장합니다 (필요하다면 권한을 변경함).",
+ "repo.settings.transfer_notices_4": "- 리포지토리가 조직에 속하고 다른 조직 또는 개인에게 이전하는 경우, 저장소의 이슈와 조직의 프로젝트 보드 간의 연결이 끊어집니다.",
"repo.settings.transfer_owner": "새 소유자",
- "repo.settings.transfer_succeed": "저장소가 이전 되었습니다.",
+ "repo.settings.transfer_perform": "이전 수행",
+ "repo.settings.transfer_started": "이 리포지토리는 이전중으로 마킹되었으며 \"%s\"의 확인을 기다리는 중",
+ "repo.settings.transfer_succeed": "리포지토리가 이전 되었습니다.",
+ "repo.settings.signing_settings": "서명 검증 설정",
+ "repo.settings.trust_model": "서명 신뢰 모델",
+ "repo.settings.trust_model.default": "기본 신뢰 모델",
+ "repo.settings.trust_model.default.desc": "이 설치의 기본 리포지토리 신뢰 모델을 사용합니다.",
"repo.settings.trust_model.collaborator": "협업자",
+ "repo.settings.trust_model.collaborator.long": "공동작업자: 공동작업자의 서명을 신뢰",
+ "repo.settings.trust_model.collaborator.desc": "이 리포지토리 공동작업자에 의한 유효한 서명은 커미터와 일치하는지 여부에 관계없이 \"신뢰됨\"으로 표시됩니다. 그렇지 않으면 유효한 서명이 커미터와 일치하면 \"신뢰할 수 없음\"으로, 일치하지 않으면 \"불일치\"로 마킹됩니다.",
+ "repo.settings.trust_model.committer": "커미터",
+ "repo.settings.trust_model.committer.long": "커미터: 커미터와 일치하는 신뢰 서명을 허용합니다. 이는 GitHub의 동작과 일치하며, Gitea가 서명한 커밋은 Gitea를 커미터로 강제 지정합니다.",
+ "repo.settings.trust_model.committer.desc": "유효한 서명은 커미터와 일치하는 경우에만 \"신뢰됨\"으로 마킹되며, 그렇지 않으면 \"불일치\"로 마킹됩니다. 이는 실제 커미터가 커밋에서 Co-authored-by: 및 Co-committed-by: 트레일러로 표시된 서명된 커밋에 Gitea를 커미터로 강제합니다. 기본 Gitea 키는 데이터베이스의 사용자와 일치해야 합니다.",
+ "repo.settings.trust_model.collaboratorcommitter": "공동작업자+커미터",
+ "repo.settings.trust_model.collaboratorcommitter.long": "공동작업자+커미터: 커미터와 일치하는 공동작업자의 서명을 신뢰",
+ "repo.settings.trust_model.collaboratorcommitter.desc": "이 리포지토리 공동작업자의 유효한 서명은 커미터와 일치하는 경우 \"신뢰됨\"으로 마킹됩니다. 그렇지 않으면 유효한 서명이 커미터와 일치하면 \"신뢰할 수 없음\"으로, 그렇지 않으면 \"불일치\"로 마킹됩니다. 이렇게 하면 Gitea는 실제 커미터가 커밋에 Co-Authored-By: 및 Co-Committed-By: 트레일러로 표시된 서명된 커밋의 커미터로 강제됩니다. 기본 Gitea 키는 데이터베이스의 사용자와 일치해야 합니다.",
"repo.settings.wiki_delete": "위키 데이터 삭제",
+ "repo.settings.wiki_delete_desc": "리포지토리 위키 데이터를 삭제하는 것은 영구적이며 되돌릴 수 없습니다.",
+ "repo.settings.wiki_delete_notices_1": "- 이 작업은 %s의 리포지토리 위키를 영구적으로 삭제하고 비활성화합니다.",
"repo.settings.confirm_wiki_delete": "위키 데이터 삭제",
- "repo.settings.delete": "이 저장소 삭제",
+ "repo.settings.wiki_deletion_success": "리포지토리 위키 데이터가 삭제되었습니다.",
+ "repo.settings.delete": "이 리포지토리 삭제",
+ "repo.settings.delete_desc": "리포지토리 삭제는 영구적이며 되돌릴 수 없습니다.",
"repo.settings.delete_notices_1": "- 이 작업은 취소할 수 없습니다.",
- "repo.settings.deletion_success": "저장소가 삭제되었습니다.",
- "repo.settings.update_settings_success": "저장소 설정이 갱신되었습니다.",
- "repo.settings.confirm_delete": "저장소 삭제",
+ "repo.settings.delete_notices_2": "- 이 작업은 코드, 이슈, 댓글, 위키 데이터 및 공동작업자 설정을 포함하여 %s 리포지토리를 영구적으로 삭제합니다.",
+ "repo.settings.delete_notices_fork_1": "- 삭제 후, 이 리포지토리의 포크는 독립적인 리포지토리가 됩니다.",
+ "repo.settings.deletion_success": "리포지토리가 삭제되었습니다.",
+ "repo.settings.update_settings_success": "리포지토리 설정이 업데이트 되었습니다.",
+ "repo.settings.update_settings_no_unit": "리포지토리는 최소한 어떤 형태의 상호 작용을 허용해야 합니다.",
+ "repo.settings.confirm_delete": "리포지토리 삭제",
"repo.settings.add_collaborator": "새 공동작업자 추가",
"repo.settings.add_collaborator_success": "공동작업자가 추가 되었습니다.",
+ "repo.settings.add_collaborator_inactive_user": "비활성 사용자를 공동작업자로 추가할 수 없습니다.",
+ "repo.settings.add_collaborator_owner": "소유자를 공동작업자로 추가할 수 없습니다.",
+ "repo.settings.add_collaborator_duplicate": "해당 공동작업자는 이미 이 리포지토리에 추가되어 있습니다.",
+ "repo.settings.add_collaborator.blocked_user": "해당 공동작업자는 리포지토리 소유자에게 차단되었거나, 반대로 소유자가 공동작업자에 의해 차단되었습니다.",
"repo.settings.delete_collaborator": "제거",
"repo.settings.collaborator_deletion": "공동작업자 삭제",
+ "repo.settings.collaborator_deletion_desc": "공동작업자를 제거하면 이 리포지토리에 대한 액세스 권한이 해지됩니다. 계속하시겠습니까?",
+ "repo.settings.remove_collaborator_success": "공동작업자가 제거되었습니다.",
+ "repo.settings.org_not_allowed_to_be_collaborator": "조직은 공동작업자로 추가할 수 없습니다.",
+ "repo.settings.change_team_access_not_allowed": "리포지토리에 대한 팀 액세스 변경은 조직 소유자만 가능합니다",
+ "repo.settings.team_not_in_organization": "팀이 리포지토리와 동일한 조직에 있지 않음",
"repo.settings.teams": "팀",
+ "repo.settings.add_team": "팀 추가",
+ "repo.settings.add_team_duplicate": "팀이 이미 리포지토리를 가지고 있음",
+ "repo.settings.add_team_success": "팀이 이제 리포지토리에 액세스할 수 있습니다.",
+ "repo.settings.change_team_permission_tip": "팀의 권한은 팀 설정 페이지에서 설정되며 리포지토리별로 변경할 수 없음",
+ "repo.settings.delete_team_tip": "이 팀은 모든 리포지토리에 액세스할 수 있으며 제거할 수 없음",
+ "repo.settings.remove_team_success": "팀의 리포지토리 액세스 권한이 제거되었습니다.",
"repo.settings.add_webhook": "Webhook 추가",
+ "repo.settings.add_webhook.invalid_channel_name": "웹훅 채널명은 비어 있거나 # 문자만 사용할 수 없습니다.",
+ "repo.settings.hooks_desc": "웹훅은 특정 Gitea 이벤트가 트리거될 때 서버에 HTTP POST 요청을 자동으로 보냅니다. 웹훅 가이드에서 자세히 알아보세요.",
"repo.settings.webhook_deletion": "Webhook 삭제",
+ "repo.settings.webhook_deletion_desc": "웹훅을 제거하면 설정 및 전송 이력이 삭제됩니다. 계속하시겠습니까?",
"repo.settings.webhook_deletion_success": "Webhook을 삭제했습니다.",
+ "repo.settings.webhook.test_delivery": "푸시 이벤트 테스트",
+ "repo.settings.webhook.test_delivery_desc": "가짜 푸시 이벤트로 웹훅을 테스트합니다.",
+ "repo.settings.webhook.test_delivery_desc_disabled": "가짜 이벤트로 이 웹훅을 테스트하려면 활성화하십시오.",
"repo.settings.webhook.request": "요청",
"repo.settings.webhook.response": "응답",
"repo.settings.webhook.headers": "제목",
"repo.settings.webhook.payload": "내용",
"repo.settings.webhook.body": "본문",
+ "repo.settings.webhook.replay.description": "이 웹훅을 다시 실행합니다.",
+ "repo.settings.webhook.replay.description_disabled": "이 웹훅을 다시 실행하려면 활성화하십시오.",
+ "repo.settings.webhook.delivery.success": "이벤트가 배송 큐에 추가되었습니다. 배송 이력에 표시되기까지 몇 초가 걸릴 수 있습니다.",
+ "repo.settings.githooks_desc": "Git Hook은 Git 자체에 의해 동작합니다. 아래에서 hook 파일을 편집하여 커스텀 동작을 설정할 수 있습니다.",
"repo.settings.githook_edit_desc": "후크가 비활성인 경우 샘플 콘텐츠가 표시됩니다. 내용을 빈 값으로 두면 이 훅은 비활성화됩니다.",
"repo.settings.githook_name": "Hook 이름",
"repo.settings.githook_content": "Hook 내용",
- "repo.settings.update_githook": "Hook 갱신",
+ "repo.settings.update_githook": "Hook 업데이트",
+ "repo.settings.add_webhook_desc": "Gitea는 지정된 콘텐츠 유형과 함께 POST 요청을 대상 URL로 보냅니다. 자세한 내용은 웹훅 가이드에서 확인하세요.",
"repo.settings.payload_url": "대상 URL",
+ "repo.settings.http_method": "HTTP 메서드",
+ "repo.settings.content_type": "POST Content Type",
"repo.settings.secret": "비밀",
+ "repo.settings.webhook_secret_desc": "웹훅 서버가 비밀 사용을 지원하는 경우, 웹훅 매뉴얼에 따라 비밀을 여기에 채울 수 있습니다.",
"repo.settings.slack_username": "사용자 이름",
"repo.settings.slack_icon_url": "아이콘 URL",
+ "repo.settings.slack_color": "색",
"repo.settings.discord_username": "사용자명",
"repo.settings.discord_icon_url": "아이콘 URL",
"repo.settings.event_desc": "트리거:",
"repo.settings.event_push_only": "푸시 이벤트",
"repo.settings.event_send_everything": "모든 이벤트",
"repo.settings.event_choose": "사용자 정의 이벤트...",
+ "repo.settings.event_header_repository": "리포지토리 이벤트",
"repo.settings.event_create": "생성",
"repo.settings.event_create_desc": "브랜치 또는 태그가 생성되었습니다.",
"repo.settings.event_delete": "삭제",
+ "repo.settings.event_delete_desc": "브랜치 또는 태그 삭제됨.",
"repo.settings.event_fork": "포크",
+ "repo.settings.event_fork_desc": "리포지토리 포크됨.",
"repo.settings.event_wiki": "위키",
+ "repo.settings.event_wiki_desc": "위키 페이지가 생성, 이름 변경, 편집 또는 삭제됨.",
+ "repo.settings.event_statuses": "상태",
+ "repo.settings.event_statuses_desc": "API로부터 커밋 상태가 업데이트 되었습니다.",
"repo.settings.event_release": "릴리즈",
- "repo.settings.event_release_desc": "릴리즈가 저장소에서 배포, 갱신 또는 제거되었습니다.",
+ "repo.settings.event_release_desc": "릴리즈가 리포지토리에서 배포, 업데이트 또는 제거되었습니다.",
"repo.settings.event_push": "푸시",
- "repo.settings.event_push_desc": "저장소로 푸시",
- "repo.settings.event_repository": "저장소",
- "repo.settings.event_repository_desc": "저장소가 생성되거나 삭제됩니다.",
+ "repo.settings.event_force_push": "강제 푸시",
+ "repo.settings.event_push_desc": "리포지토리로 Git push.",
+ "repo.settings.event_repository": "리포지토리",
+ "repo.settings.event_repository_desc": "리포지토리가 생성되었거나 삭제되었습니다.",
+ "repo.settings.event_header_issue": "이슈 이벤트",
"repo.settings.event_issues": "이슈",
+ "repo.settings.event_issues_desc": "열림, 닫힘, 다시열림, 편집된 또는 삭제됨 상태의 이슈.",
+ "repo.settings.event_issue_assign": "이슈 할당됨",
+ "repo.settings.event_issue_assign_desc": "이슈가 할당되거나 할당 해제되었습니다.",
+ "repo.settings.event_issue_label": "이슈 레이블 지정됨",
+ "repo.settings.event_issue_label_desc": "이슈 레이블이 업데이트되었거나 지워짐.",
+ "repo.settings.event_issue_milestone": "이슈 마일스톤 설정됨",
+ "repo.settings.event_issue_milestone_desc": "이슈 마일스톤이 설정되거나 해제되었습니다.",
"repo.settings.event_issue_comment": "이슈 댓글",
"repo.settings.event_issue_comment_desc": "이슈 댓글이 작성, 편집 또는 삭제되었습니다.",
+ "repo.settings.event_header_pull_request": "풀 리퀘스트 이벤트",
"repo.settings.event_pull_request": "끌어오기 요청",
+ "repo.settings.event_pull_request_desc": "열림, 닫힘, 다시열림, 편집된 또는 삭제됨 상태의 풀 리퀘스트.",
+ "repo.settings.event_pull_request_assign": "풀 리퀘스트 할당됨",
+ "repo.settings.event_pull_request_assign_desc": "풀 리퀘스트가 할당되거나 할당 해제되었습니다.",
+ "repo.settings.event_pull_request_label": "풀 리퀘스트 레이블 지정됨",
+ "repo.settings.event_pull_request_label_desc": "풀 리퀘스트 레이블이 갱신되거나 지워짐.",
+ "repo.settings.event_pull_request_milestone": "풀 리퀘스트 마일스톤 지정됨",
+ "repo.settings.event_pull_request_milestone_desc": "풀 리퀘스트 마일스톤 설정 또는 해제되었습니다.",
+ "repo.settings.event_pull_request_comment": "풀 리퀘스트 댓글",
+ "repo.settings.event_pull_request_comment_desc": "풀 리퀘스트 댓글이 생성, 편집 또는 삭제되었습니다.",
+ "repo.settings.event_pull_request_review": "풀 리퀘스트 검토됨",
+ "repo.settings.event_pull_request_review_desc": "풀 리퀘스트가 승인, 거부 혹은 검토 댓들이 추가되었습니다.",
+ "repo.settings.event_pull_request_sync": "풀 리퀘스트 동기화됨",
+ "repo.settings.event_pull_request_sync_desc": "풀 리퀘스트 동기화됨.",
+ "repo.settings.event_pull_request_review_request": "풀 리퀘스트 검토 요청됨",
+ "repo.settings.event_pull_request_review_request_desc": "풀 리퀘스트 검토가 요청되거나 검토 요청이 제거됨.",
+ "repo.settings.event_pull_request_approvals": "풀 리퀘스트 승인",
+ "repo.settings.event_pull_request_merge": "풀 리퀘스트 머지",
+ "repo.settings.event_header_workflow": "워크플로 이벤트",
+ "repo.settings.event_workflow_run": "워크플로우 실행",
+ "repo.settings.event_workflow_run_desc": "Gitea Actions 워크플로 실행이 큐에 추가되거나, 대기 중이거나, 진행 중이거나, 완료되었습니다.",
+ "repo.settings.event_workflow_job": "워크플로 작업",
+ "repo.settings.event_workflow_job_desc": "Gitea Actions 워크플로 작업이 큐에 추가되거나, 대기 중이거나, 진행 중이거나, 완료되었습니다.",
+ "repo.settings.event_package": "패키지",
+ "repo.settings.event_package_desc": "리포지토리에서 패키지가 생성되거나 삭제되었습니다.",
+ "repo.settings.branch_filter": "브랜치 필터",
+ "repo.settings.branch_filter_desc_1": "푸시, 브랜치 생성 및 브랜치 삭제 이벤트에 대한 브랜치(및 참조 이름) 허용 목록은 와일드카드(glob) 패턴으로 지정됩니다. 비어 있거나 * 로 설정된 경우, 모든 브랜치 및 태그에 대한 이벤트가 보고됩니다.",
+ "repo.settings.branch_filter_desc_2": "refs/heads/ 또는 refs/tags/ 접두사를 사용하여 전체 참조 이름과 일치시킵니다.",
+ "repo.settings.branch_filter_desc_doc": "구문에 대한 문서를 확인하려면 %[2]s를 참조.",
+ "repo.settings.authorization_header": "인증 헤더",
+ "repo.settings.authorization_header_desc": "주어지는 경우, 요청에 대한 인증 헤더로 포함됩니다. 예시: %s.",
"repo.settings.active": "사용",
"repo.settings.active_helper": "이벤트에 대한 정보가 이 웹훅 URL로 전송될 것 입니다.",
"repo.settings.add_hook_success": "웹훅이 추가되었습니다.",
- "repo.settings.update_webhook": "Webhook 갱신",
- "repo.settings.update_hook_success": "웹훅이 갱신되었습니다.",
+ "repo.settings.update_webhook": "Webhook 업데이트",
+ "repo.settings.update_hook_success": "웹훅이 업데이트 되었습니다.",
"repo.settings.delete_webhook": "웹훅 삭제",
"repo.settings.recent_deliveries": "최근의 Deliveries",
"repo.settings.hook_type": "훅 타입",
"repo.settings.slack_token": "토큰",
"repo.settings.slack_domain": "도메인",
"repo.settings.slack_channel": "채널",
+ "repo.settings.add_web_hook_desc": "%s를 당신의 리포지토리와 통합.",
+ "repo.settings.web_hook_name_gitea": "Gitea",
+ "repo.settings.web_hook_name_gogs": "Gogs",
+ "repo.settings.web_hook_name_slack": "Slack",
+ "repo.settings.web_hook_name_discord": "Discord",
+ "repo.settings.web_hook_name_dingtalk": "DingTalk",
+ "repo.settings.web_hook_name_telegram": "텔레그램",
+ "repo.settings.web_hook_name_matrix": "Matrix",
+ "repo.settings.web_hook_name_msteams": "Microsoft Teams",
+ "repo.settings.web_hook_name_feishu_or_larksuite": "Feishu / Lark Suite",
+ "repo.settings.web_hook_name_feishu": "Feishu",
+ "repo.settings.web_hook_name_larksuite": "Lark Suite",
+ "repo.settings.web_hook_name_wechatwork": "WeCom (Wechat Work)",
+ "repo.settings.web_hook_name_packagist": "Packagist",
+ "repo.settings.packagist_username": "Packagist 사용자명",
+ "repo.settings.packagist_api_token": "API 토큰",
+ "repo.settings.packagist_package_url": "Packagist 패키지 URL",
"repo.settings.deploy_keys": "배포 키",
"repo.settings.add_deploy_key": "배포 키 추가",
- "repo.settings.deploy_key_desc": "배포키는 저장소에서 풀만 할 수 있는 읽기 전용입니다.",
+ "repo.settings.deploy_key_desc": "배포키는 리포지토리에서 풀만 할 수 있는 읽기 전용입니다.",
"repo.settings.is_writable": "쓰기 활성화",
- "repo.settings.is_writable_info": "이 배포키를 저장소로 푸시할 수 있도록 허용합니다.",
+ "repo.settings.is_writable_info": "이 배포키를 리포지토리로 푸시할 수 있도록 허용합니다.",
"repo.settings.no_deploy_keys": "배포키가 없습니다.",
"repo.settings.title": "제목",
"repo.settings.deploy_key_content": "내용",
"repo.settings.key_been_used": "동일한 내용의 배포키를 이미 사용중입니다.",
"repo.settings.key_name_used": "같은 이름의 배포키가 이미 있습니다.",
+ "repo.settings.add_key_success": "\"%s\" 배포 키가 추가되었습니다.",
"repo.settings.deploy_key_deletion": "배포키 삭제",
+ "repo.settings.deploy_key_deletion_desc": "배포 키를 제거하면 이 리포지토리에 대한 액세스 권한이 해지됩니다. 계속하시겠습니까?",
"repo.settings.deploy_key_deletion_success": "배포키가 삭제되었습니다.",
"repo.settings.branches": "브랜치",
+ "repo.settings.protected_branch": "브랜치 보호",
+ "repo.settings.protected_branch.save_rule": "규칙 저장",
+ "repo.settings.protected_branch.delete_rule": "규칙 삭제",
"repo.settings.protected_branch_can_push": "푸시를 허용하시겠습니까?",
"repo.settings.protected_branch_can_push_yes": "푸시할 수 있습니다.",
+ "repo.settings.protected_branch_can_push_no": "푸시할 수 없습니다",
+ "repo.settings.branch_protection": "브랜치 '%s' 보호 규칙",
"repo.settings.protect_this_branch": "브랜치 보호 활성화",
+ "repo.settings.protect_this_branch_desc": "삭제를 방지하고 Git 푸시 및 브랜치로의 머지을 제한합니다.",
"repo.settings.protect_disable_push": "푸시 끄기",
+ "repo.settings.protect_disable_push_desc": "이 브랜치에는 푸시가 허용되지 않습니다.",
+ "repo.settings.protect_disable_force_push": "강제 푸시 비활성화",
+ "repo.settings.protect_disable_force_push_desc": "이 브랜치에는 강제 푸시가 허용되지 않습니다.",
"repo.settings.protect_enable_push": "푸시 켜기",
+ "repo.settings.protect_enable_push_desc": "쓰기 액세스 권한이 있는 사람은 누구나 이 브랜치에 푸시할 수 있습니다 (강제 푸시는 허용되지 않음).",
+ "repo.settings.protect_enable_force_push_all": "강제 푸시 활성화",
+ "repo.settings.protect_enable_force_push_all_desc": "푸시 액세스 권한이 있는 사람은 누구나 이 브랜치에 강제 푸시할 수 있습니다.",
+ "repo.settings.protect_enable_force_push_allowlist": "제한적 강제 푸시 허용 목록",
+ "repo.settings.protect_enable_force_push_allowlist_desc": "푸시 액세스 권한이 있는 허용 목록에 있는 사용자 또는 팀만 이 브랜치에 강제 푸시할 수 있습니다.",
+ "repo.settings.protect_enable_merge": "머지 활성화",
+ "repo.settings.protect_enable_merge_desc": "쓰기 액세스 권한이 있는 사람은 누구나 이 브랜치에 풀 리퀘스트를 머지할 수 있습니다.",
+ "repo.settings.protect_whitelist_committers": "제한적 푸시 허용 목록",
+ "repo.settings.protect_whitelist_committers_desc": "허용 목록에 있는 사용자 또는 팀만 이 브랜치에 푸시할 수 있습니다 (강제 푸시는 허용되지 않음).",
+ "repo.settings.protect_whitelist_deploy_keys": "푸시 가능한 쓰기 권한을 갖는 배포키 허용 목록.",
+ "repo.settings.protect_whitelist_users": "푸시 가능 사용자 허용 목록:",
+ "repo.settings.protect_whitelist_teams": "푸시 가능 팀 허용 목록:",
+ "repo.settings.protect_force_push_allowlist_users": "강제 푸시 가능 사용자 허용 목록:",
+ "repo.settings.protect_force_push_allowlist_teams": "강제 푸시 가능 팀 허용 목록:",
+ "repo.settings.protect_force_push_allowlist_deploy_keys": "강제 푸시 액세스 권한이 있는 배포 키 허용 목록.",
+ "repo.settings.protect_merge_whitelist_committers": "머지 허용 목록 활성화",
+ "repo.settings.protect_merge_whitelist_committers_desc": "허용 목록에 있는 사용자 또는 팀만 이 브랜치에 풀 리퀘스트를 머지할 수 있도록 허용합니다.",
+ "repo.settings.protect_merge_whitelist_users": "머지 가능 사용자 허용 목록:",
+ "repo.settings.protect_merge_whitelist_teams": "머지 가능 팀 허용 목록:",
+ "repo.settings.protect_check_status_contexts": "상태 점검 활성화",
+ "repo.settings.protect_status_check_patterns": "상태 점검 패턴:",
+ "repo.settings.protect_status_check_patterns_desc": "이 규칙과 일치하는 브랜치로 머지하기 전에 통과해야 하는 상태 점검을 지정하는 패턴을 입력하세요. 각 줄은 하나의 패턴을 지정합니다. 패턴은 비워둘 수 없습니다.",
+ "repo.settings.protect_check_status_contexts_desc": "머지하기 전에 상태 점검을 통과해야 합니다. 활성화되면 커밋은 먼저 다른 브랜치로 푸시된 다음, 상태 점검을 통과한 후 이 규칙과 일치하는 브랜치로 직접 머지되거나 푸시되어야 합니다. 일치하는 컨텍스트가 없으면 컨텍스트에 관계없이 마지막 커밋이 성공해야 합니다.",
+ "repo.settings.protect_check_status_contexts_list": "지난주 이 리포지토리에서 발견된 상태 점검",
+ "repo.settings.protect_status_check_matched": "일치됨",
+ "repo.settings.protect_invalid_status_check_pattern": "유효하지 않은 상태 점검 패턴: \"%s\".",
+ "repo.settings.protect_no_valid_status_check_patterns": "유효한 상태 점검 패턴이 없습니다.",
"repo.settings.protect_required_approvals": "필요한 승인:",
+ "repo.settings.protect_required_approvals_desc": "충분한 필수 승인이 있는 풀 리퀘스트만 머지할 수 있도록 허용합니다. 필수 승인은 허용 목록에 있는 사용자나 팀 또는 쓰기 액세스 권한이 있는 사용자로부터의 승인입니다.",
+ "repo.settings.protect_approvals_whitelist_enabled": "승인을 허용 목록에 있는 사용자 또는 팀으로 제한",
+ "repo.settings.protect_approvals_whitelist_enabled_desc": "허용 목록에 있는 사용자 또는 팀의 검토만 필수 승인에 포함됩니다. 승인 허용 목록이 없으면 쓰기 액세스 권한이 있는 모든 사용자의 검토가 필수 승인에 포함됩니다.",
+ "repo.settings.protect_approvals_whitelist_users": "허용 목록에 있는 검토자:",
+ "repo.settings.protect_approvals_whitelist_teams": "검토 가능 팀 허용 목록:",
+ "repo.settings.dismiss_stale_approvals": "오래된 승인 해지",
+ "repo.settings.dismiss_stale_approvals_desc": "풀 리퀘스트 내용이 변경되는 새 커밋이 브랜치에 푸시되면 이전 승인은 해지됩니다.",
+ "repo.settings.ignore_stale_approvals": "오래된 승인 무시",
+ "repo.settings.ignore_stale_approvals_desc": "오래된 커밋(만료된 검토)에서 이루어진 승인은 PR의 승인 수에 포함하지 않습니다. 오래된 검토가 이미 해지된 경우에는 관련이 없습니다.",
+ "repo.settings.require_signed_commits": "커밋 서명 필수",
+ "repo.settings.require_signed_commits_desc": "서명되지 않거나 확인할 수 없는 경우 이 브랜치에 푸시를 거부합니다.",
+ "repo.settings.protect_branch_name_pattern": "보호된 브랜치명 패턴",
+ "repo.settings.protect_branch_name_pattern_desc": "보호된 브랜치명 패턴입니다. 패턴 문법은 문서를 참조하세요. 예시: main, release/**",
+ "repo.settings.protect_patterns": "패턴",
+ "repo.settings.protect_protected_file_patterns": "보호된 파일 패턴 (세미콜론 ';'으로 구분):",
+ "repo.settings.protect_protected_file_patterns_desc": "보호된 파일은 해당 브랜치에 사용자가 파일을 추가, 편집 또는 삭제할 권한이 있더라도 직접 변경할 수 없습니다. 여러 패턴은 세미콜론(';')으로 구분할 수 있습니다. 패턴 문법은 %[2]s문서를 참초하십시오. 예: .drone.yml, /docs/**/*.txt.",
+ "repo.settings.protect_unprotected_file_patterns": "보호하지 않을 파일 패턴 (세미콜론 ';'으로 구분):",
+ "repo.settings.protect_unprotected_file_patterns_desc": "사용자가 쓰기 액세스 권한을 가지고 있다면 푸시 제한을 우회하여 직접 변경할 수 있는 보호되지 않은 파일입니다. 여러 패턴은 세미콜론(';')으로 구분할 수 있습니다. 패턴 문법은 %[2]s문서를 참조하십시오. 예: .drone.yml, /docs/**/*.txt.",
+ "repo.settings.add_protected_branch": "보호 활성화",
+ "repo.settings.delete_protected_branch": "보호 비활성화",
+ "repo.settings.update_protect_branch_success": "\"%s\" 규칙에 대한 브랜치 보호가 업데이트 되었습니다.",
+ "repo.settings.remove_protected_branch_success": "\"%s\" 규칙에 대한 브랜치 보호가 제거되었습니다.",
+ "repo.settings.remove_protected_branch_failed": "브랜치 보호 규칙 \"%s\" 제거에 실패했습니다.",
+ "repo.settings.protected_branch_deletion": "브랜치 보호 삭제",
+ "repo.settings.protected_branch_deletion_desc": "브랜치 보호를 비활성화하면 쓰기 권한이 있는 사용자가 브랜치에 푸시할 수 있습니다. 계속하시겠습니까?",
+ "repo.settings.block_rejected_reviews": "거부된 검토에 대한 머지 차단",
+ "repo.settings.block_rejected_reviews_desc": "공식 검토자가 변경을 요청하면 승인 수가 만족했더라도 머지할 수 없습니다.",
+ "repo.settings.block_on_official_review_requests": "공식 검토 요청에 대한 머지 차단",
+ "repo.settings.block_on_official_review_requests_desc": "공식 검토 요청이 있으면 승인수가 충분하더라도 머지할 수 없습니다.",
+ "repo.settings.block_outdated_branch": "기한이 지난 풀 리퀘스트의 머지를 막음",
+ "repo.settings.block_outdated_branch_desc": "헤드 브랜치가 베이스 브랜치보다 오래된 경우 머지할 수 없습니다.",
+ "repo.settings.block_admin_merge_override": "운영자는 브랜치 보호 규칙을 따라야 함",
+ "repo.settings.block_admin_merge_override_desc": "운영자는 브랜치 보호 규칙을 따라야 하며 우회할 수 없습니다.",
+ "repo.settings.default_branch_desc": "코드 커밋을 위한 기본 브랜치를 선택하세요.",
+ "repo.settings.default_target_branch_desc": "풀 리퀘스트는 리포지토리 고급 설정의 풀 리퀘스트 섹션에서 기본 대상 브랜치를 설정한 경우 다른 기본 대상 브랜치를 사용할 수 있습니다.",
+ "repo.settings.merge_style_desc": "머지 스타일",
+ "repo.settings.default_merge_style_desc": "기본 머지 스타일",
"repo.settings.choose_branch": "브랜치 선택...",
"repo.settings.no_protected_branch": "보호된 브랜치가 없습니다.",
"repo.settings.edit_protected_branch": "편집",
+ "repo.settings.protected_branch_required_rule_name": "규칙명이 필요함",
+ "repo.settings.protected_branch_duplicate_rule_name": "규칙명이 중복",
+ "repo.settings.protected_branch_required_approvals_min": "필요한 승인은 음수일 수 없습니다.",
"repo.settings.tags": "태그",
- "repo.settings.archive.button": "아카이브 저장소",
- "repo.settings.archive.header": "이 저장소를 아카이브",
- "repo.settings.archive.success": "저장소가 성공적으로 아카이브 되었습니다.",
+ "repo.settings.tags.protection": "태그 보호",
+ "repo.settings.tags.protection.pattern": "태그 패턴",
+ "repo.settings.tags.protection.allowed": "허용됨",
+ "repo.settings.tags.protection.allowed.users": "허용된 사용자",
+ "repo.settings.tags.protection.allowed.teams": "허용된 팀",
+ "repo.settings.tags.protection.allowed.noone": "아무도 없음",
+ "repo.settings.tags.protection.create": "태그 보호",
+ "repo.settings.tags.protection.none": "보호된 태그가 없습니다.",
+ "repo.settings.tags.protection.pattern.description": "단일 이름, 와일드카드(glob) 패턴 또는 정규 표현식을 사용하여 여러 태그를 일치시킬 수 있습니다.보호된 태그 가이드에서 더 자세히 알아보세요.",
+ "repo.settings.bot_token": "봇 토큰",
+ "repo.settings.chat_id": "채팅 ID",
+ "repo.settings.thread_id": "쓰레드 ID",
+ "repo.settings.matrix.homeserver_url": "홈 서버 URL",
+ "repo.settings.matrix.room_id": "룸 ID",
+ "repo.settings.matrix.message_type": "메시지 유형",
+ "repo.settings.visibility.private.button": "비공개로 설정",
+ "repo.settings.visibility.private.text": "공개 수준을 비공개로 변경하면 허용된 멤버에게만 리포지토리가가 표시되며, 기존 포크, 구독자, 별점 관계가 삭제 될 수 있습니다.",
+ "repo.settings.visibility.private.bullet_title": "공개 수준을 비공개로 변경하면:",
+ "repo.settings.visibility.private.bullet_one": "허용된 멤버에게만 리포지토리가 표시됩니다.",
+ "repo.settings.visibility.private.bullet_two": "포크, 구독자, 별점와의 관계를 제거할 수 있습니다.",
+ "repo.settings.visibility.public.button": "공개로 설정",
+ "repo.settings.visibility.public.text": "공개 수준을 공개로 변경하면 리포지토리가 누구에게나 표시됩니다.",
+ "repo.settings.visibility.public.bullet_title": "공개범위를 공개로 변경하면:",
+ "repo.settings.visibility.public.bullet_one": "누구에게나 리포지토리가 표시됩니다.",
+ "repo.settings.visibility.success": "리포지토리 공개범위가 변경되었습니다.",
+ "repo.settings.visibility.error": "리포지토리 공개수준 변경 중 오류가 발생했습니다.",
+ "repo.settings.visibility.fork_error": "포크된 리포지토리의 공개범위를 변경할 수 없습니다.",
+ "repo.settings.archive.button": "리포지토리 아카이빙",
+ "repo.settings.archive.header": "이 리포지토리 아카이빙",
+ "repo.settings.archive.text": "리포지토리를 아카이빙하면 완전히 읽기 전용이 됩니다. 대시보드에서도 숨겨집니다. 누구도 (심지어 당신도!) 새 커밋을 만들거나 이슈 또는 풀 리퀘스트를 열 수 없게 됩니다.",
+ "repo.settings.archive.success": "리포지토리가 성공적으로 아카이빙 되었습니다.",
+ "repo.settings.archive.error": "리포지토리를 아카이빙하는 중에 오류가 발생했습니다. 자세한 내용은 로그를 확인하십시오.",
+ "repo.settings.archive.error_ismirror": "미러링된 리포지토리는 아카이빙 할 수 없습니다.",
+ "repo.settings.archive.branchsettings_unavailable": "리포지토리가 아카이빙된 경우 브랜치 설정을 할 수 없습니다.",
+ "repo.settings.archive.tagsettings_unavailable": "리포지토리가 아카이빙된 경우 태그 설정을 할 수 없습니다.",
+ "repo.settings.archive.mirrors_unavailable": "리포지토리가 아카이빙된 경우 미러는 사용할 수 없습니다.",
+ "repo.settings.unarchive.button": "리포지토리 아카이빙 해제",
+ "repo.settings.unarchive.header": "이 리포지토리 아카이빙 해제",
+ "repo.settings.unarchive.text": "리포지토리를 아카이빙 해제하면 커밋 및 푸시, 새 이슈 및 풀 리퀘스트를 받을 수 있는 기능이 복원됩니다.",
+ "repo.settings.unarchive.success": "리포지토리가 성공적으로 아카이빙 해제되었습니다.",
+ "repo.settings.unarchive.error": "리포지토리 아카이빙 해제 중 오류가 발생했습니다. 자세한 내용은 로그를 확인하십시오.",
+ "repo.settings.update_avatar_success": "리포지토리 아바타가 갱신되었습니다.",
+ "repo.settings.lfs": "LFS",
+ "repo.settings.lfs_filelist": "이 리포지토리에 저장된 LFS 파일",
+ "repo.settings.lfs_no_lfs_files": "이 리포지토리에 저장된 LFS 파일이 없음",
+ "repo.settings.lfs_findcommits": "커밋 찾기",
+ "repo.settings.lfs_lfs_file_no_commits": "이 LFS 파일에 대한 커밋을 찾을 수 없습니다",
+ "repo.settings.lfs_noattribute": "이 경로는 기본 브랜치에 잠금 가능 속성이 없음",
+ "repo.settings.lfs_delete": "OID %s를 가지는 LFS 파일 삭제",
+ "repo.settings.lfs_delete_warning": "LFS 파일을 삭제하면 체크아웃 시 '객체가 존재하지 않습니다' 오류가 발생할 수 있습니다. 계속하시겠습니까?",
+ "repo.settings.lfs_findpointerfiles": "포인터 파일 찾기",
+ "repo.settings.lfs_locks": "잠금",
+ "repo.settings.lfs_invalid_locking_path": "유효하지 않은 경로: %s",
+ "repo.settings.lfs_invalid_lock_directory": "디렉토리를 잠글 수 없음: %s",
+ "repo.settings.lfs_lock_already_exists": "이미 잠겨 있습니다: %s",
+ "repo.settings.lfs_lock": "잠금",
+ "repo.settings.lfs_lock_path": "잠글 파일 경로…",
+ "repo.settings.lfs_locks_no_locks": "잠금 없음",
+ "repo.settings.lfs_lock_file_no_exist": "잠긴 파일이 기본 브랜치에 존재하지 않습니다",
+ "repo.settings.lfs_force_unlock": "강제 잠금 해제",
+ "repo.settings.lfs_pointers.found": "%d개의 Blob 포인터를 찾았습니다 - %d개 연결됨, %d개 연결되지 않음 (리포지토리에서 %d개 누락)",
+ "repo.settings.lfs_pointers.sha": "Blob SHA",
+ "repo.settings.lfs_pointers.oid": "OID",
+ "repo.settings.lfs_pointers.inRepo": "리포지토리 내",
+ "repo.settings.lfs_pointers.exists": "스토어에 존재",
+ "repo.settings.lfs_pointers.accessible": "억세스 가능 사용자",
+ "repo.settings.lfs_pointers.associateAccessible": "액세스 가능한 %d개 OID 연결",
+ "repo.settings.rename_branch_failed_exist": "대상 브랜치 %s가 존재하기 때문에 브랜치명을 변경할 수 없습니다.",
+ "repo.settings.rename_branch_failed_not_exist": "브랜치 %s가 존재하지 않아 브랜치명을 변경할 수 없습니다.",
+ "repo.settings.rename_branch_success": "브랜치 %s가 성공적으로 %s 으로 브랜치명이 변경되었습니다.",
+ "repo.settings.rename_branch_from": "이전 브랜치 이름",
+ "repo.settings.rename_branch_to": "새 브랜치 이름",
+ "repo.settings.rename_branch": "브랜치명 변경",
"repo.diff.browse_source": "소스 검색",
"repo.diff.parent": "부모",
"repo.diff.commit": "커밋",
+ "repo.diff.git-notes": "노트",
"repo.diff.data_not_available": "변경 데이터를 사용할 수 없습니다.",
+ "repo.diff.options_button": "Diff 옵션",
+ "repo.diff.download_patch": "패치 파일 다운로드",
+ "repo.diff.download_diff": "Diff 파일 다운로드",
"repo.diff.show_split_view": "분할 보기",
"repo.diff.show_unified_view": "통합 보기",
"repo.diff.whitespace_button": "공백",
"repo.diff.whitespace_show_everything": "모든 변경사항 보기",
+ "repo.diff.whitespace_ignore_all_whitespace": "라인 비교 시 공백 무시",
+ "repo.diff.whitespace_ignore_amount_changes": "공백 개수 변경은 무시",
+ "repo.diff.whitespace_ignore_at_eol": "EOL의 공백 변경은 무시",
"repo.diff.stats_desc": "%d개의 변경된 파일과 %d개의 추가작업 그리고 %d개의 파일을 삭제",
+ "repo.diff.stats_desc_file": "%d개 변경: %d개 추가 및 %d개 삭제",
+ "repo.diff.bin": "BIN",
+ "repo.diff.bin_not_shown": "바이너리 파일은 표시되지 않음.",
"repo.diff.view_file": "파일 보기",
+ "repo.diff.file_before": "이전",
+ "repo.diff.file_after": "이후",
+ "repo.diff.file_image_width": "너비",
+ "repo.diff.file_image_height": "높이",
"repo.diff.file_byte_size": "크기",
"repo.diff.file_suppressed": "파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.",
+ "repo.diff.file_suppressed_line_too_long": "하나 이상의 라인이 너무 길어 파일 Diff가 표시되지 않음",
+ "repo.diff.too_many_files": "이 Diff에서 너무 많은 파일이 변경되어 일부 파일이 표시되지 않았습니다",
+ "repo.diff.show_more": "더 보기",
+ "repo.diff.load": "Diff 로드",
+ "repo.diff.generated": "생성됨",
+ "repo.diff.vendored": "벤더링 됨",
+ "repo.diff.comment.add_line_comment": "라인 댓글 추가",
"repo.diff.comment.placeholder": "댓글 남기기",
"repo.diff.comment.add_single_comment": "간단한 설명 추가",
"repo.diff.comment.add_review_comment": "댓글 추가",
@@ -933,63 +2570,206 @@
"repo.diff.review.placeholder": "댓글 검토",
"repo.diff.review.comment": "댓글",
"repo.diff.review.approve": "승인",
+ "repo.diff.review.self_reject": "풀 리퀘스트 작성자는 자신의 풀 리퀘스트에 변경을 요청할 수 없습니다",
+ "repo.diff.review.reject": "변경 요청",
+ "repo.diff.review.self_approve": "풀 리퀘스트 작성자는 자신의 풀 리퀘스트를 승인할 수 없습니다",
+ "repo.diff.committed_by": "커밋한 사람",
+ "repo.diff.protected": "보호됨",
+ "repo.diff.image.side_by_side": "나란히 보기",
+ "repo.diff.image.swipe": "스와이프",
+ "repo.diff.image.overlay": "오버레이",
+ "repo.diff.has_escaped": "이 라인에는 숨겨진 유니코드 문자가 있습니다",
+ "repo.diff.show_file_tree": "파일 트리 표시",
+ "repo.diff.hide_file_tree": "파일 트리 숨기기",
+ "repo.diff.submodule_added": "서브모듈 %[1]s이 %[2]s에 추가됨",
+ "repo.diff.submodule_deleted": "%[2]s에서 서브모듈 %[1]s가 삭제됨",
+ "repo.diff.submodule_updated": "서브모듈 %[1]s 업데이트됨: %[2]s",
+ "repo.releases.desc": "프로젝트 버전 및 다운로드를 추적.",
"repo.release.releases": "릴리즈",
+ "repo.release.detail": "릴리스 상세정보",
"repo.release.tags": "태그",
"repo.release.new_release": "새로운 릴리즈",
"repo.release.draft": "초안",
"repo.release.prerelease": "사전 릴리즈",
"repo.release.stable": "안정",
+ "repo.release.latest": "최신",
+ "repo.release.compare": "비교",
"repo.release.edit": "편집",
+ "repo.release.ahead.commits": "%d 커밋",
+ "repo.release.ahead.target": "이 릴리스 이후 %s까지",
+ "repo.tag.ahead.target": "이 태그 이후 %s까지",
"repo.release.source_code": "소스 코드",
+ "repo.release.new_subheader": "릴리스는 프로젝트 버전을 정리합니다.",
+ "repo.release.edit_subheader": "릴리스는 프로젝트 버전을 조직화합니다.",
"repo.release.tag_name": "태그 이름",
"repo.release.target": "대상",
- "repo.release.prerelease_desc": "프리-릴리즈로 표시",
+ "repo.release.tag_helper": "기존 태그를 선택하거나 새 태그를 생성합니다.",
+ "repo.release.tag_helper_new": "새 태그. 이 태그는 대상에서 생성됩니다.",
+ "repo.release.tag_helper_existing": "기존 태그.",
+ "repo.release.title": "릴리스 제목",
+ "repo.release.title_empty": "제목은 비워둘 수 없습니다.",
+ "repo.release.message": "이 릴리스에 대한 설명",
+ "repo.release.prerelease_desc": "프리-릴리즈로 마킹",
+ "repo.release.prerelease_helper": "이 릴리스를 프로덕션 사용에 부적합하다고 마킹합니다.",
"repo.release.cancel": "취소",
"repo.release.publish": "릴리즈 게시",
"repo.release.save_draft": "초안 저장",
- "repo.release.edit_release": "릴리즈 갱신",
+ "repo.release.edit_release": "릴리즈 업데이트",
"repo.release.delete_release": "릴리즈 삭제",
+ "repo.release.delete_tag": "태그 삭제",
"repo.release.deletion": "릴리즈 삭제",
+ "repo.release.deletion_desc": "릴리스를 삭제하면 Gitea에서만 제거됩니다. Git 태그, 리포지토리 콘텐츠 또는 이력에는 영향을 미치지 않습니다. 계속하시겠습니까?",
"repo.release.deletion_success": "릴리즈가 삭제되었습니다.",
+ "repo.release.deletion_tag_desc": "이 태그를 리포지토리에서 삭제합니다. 저장소 콘텐츠와 이력은 변경되지 않습니다. 계속하시겠습니까?",
+ "repo.release.deletion_tag_success": "태그가 삭제되었습니다.",
"repo.release.tag_name_already_exist": "이 태그명의 릴리즈가 이미 존재합니다.",
"repo.release.tag_name_invalid": "태그명이 올바르지 않습니다.",
+ "repo.release.tag_name_protected": "태그명이 보호되어 있습니다.",
+ "repo.release.tag_already_exist": "이 태그명은 이미 존재합니다.",
"repo.release.downloads": "다운로드",
+ "repo.release.download_count": "다운로드: %s",
+ "repo.release.add_tag_msg": "릴리스의 제목과 내용을 태그 메시지로 사용합니다.",
+ "repo.release.add_tag": "태그만 생성",
+ "repo.release.releases_for": "%s에 대한 릴리스",
+ "repo.release.tags_for": "%s에 대한 태그",
+ "repo.release.notes": "릴리스 노트",
+ "repo.release.generate_notes": "릴리즈노트 생성",
+ "repo.release.generate_notes_desc": "자동으로 머지된 풀 리퀘스트를 추가하고 이 릴리즈에 대한 changelog 링크를 추가.",
+ "repo.release.previous_tag": "이전 태그",
+ "repo.release.generate_notes_tag_not_found": "\"%s\" 태그가 이 리포지토리에 존재하지 않습니다.",
+ "repo.release.generate_notes_target_not_found": "릴리즈 대상 \"%s\"을 찾을 수 없습니다.",
+ "repo.release.generate_notes_missing_tag": "릴리즈 노트를 생성하기 위한 태그 이름을 입력하세요.",
"repo.branch.name": "브랜치명",
+ "repo.branch.already_exists": "브랜치 \"%s\" 이미 존재합니다.",
"repo.branch.delete_head": "삭제",
+ "repo.branch.delete": "브랜치 \"%s\" 삭제",
"repo.branch.delete_html": "브랜치 삭제",
+ "repo.branch.delete_desc": "브랜치 삭제는 영구적입니다. 삭제된 브랜치는 실제로 제거되기 전까지 짧은 시간 동안 계속 존재할 수 있지만, 대부분의 경우 되돌릴 수 없습니다. 계속하시겠습니까?",
+ "repo.branch.deletion_success": "브랜치 \"%s\" 삭제되었습니다.",
+ "repo.branch.deletion_failed": "브랜치 \"%s\" 삭제에 실패하였습니다.",
+ "repo.branch.delete_branch_has_new_commits": "브랜치 \"%s\" 머지 후 새 커밋이 추가되어 삭제할 수 없습니다.",
"repo.branch.create_branch": "%s 브랜치 생성",
+ "repo.branch.create_from": "\"%s\" 로부터",
+ "repo.branch.create_success": "\"%s\" 브랜치가 생성되었습니다.",
+ "repo.branch.branch_already_exists": "브랜치 \"%s\" 리포지토리에 이미 존재합니다.",
+ "repo.branch.branch_name_conflict": "브랜치명 \"%s\"이 이미 존재하는 브랜치 \"%s\"과 충돌합니다.",
+ "repo.branch.tag_collision": "동일한 이름의 태그가 리포지토리에 이미 존재하므로 브랜치 \"%s\"를 생성할 수 없습니다.",
"repo.branch.deleted_by": "%s 에 의해 삭제되었습니다.",
+ "repo.branch.restore_success": "브랜치 \"%s\" 복원되었습니다.",
+ "repo.branch.restore_failed": "브랜치 \"%s\" 복원에 실패했습니다.",
+ "repo.branch.protected_deletion_failed": "\"%s\" 브랜치는 보호되어 있습니다. 삭제할 수 없습니다.",
+ "repo.branch.default_deletion_failed": "브랜치 \"%s\" 기본 브랜치이거나 풀 리퀘스트 대상 브랜치 입니다. 삭제할 수 없습니다.",
+ "repo.branch.default_branch_not_exist": "기본 브랜치 \"%s\" 존재하지 않습니다.",
+ "repo.branch.restore": "브랜치 \"%s\" 복원",
+ "repo.branch.download": "브랜치 \"%s\" 다운로드",
+ "repo.branch.rename": "브랜치명 \"%s\" 변경",
+ "repo.branch.included_desc": "이 브랜치는 기본 브랜치의 일부 입니다",
+ "repo.branch.included": "포함됨",
+ "repo.branch.create_new_branch": "다음 브랜치로부터 생성:",
+ "repo.branch.confirm_create_branch": "브랜치 생성",
+ "repo.branch.warning_rename_default_branch": "기본 브랜치명을 변경하는 중입니다.",
+ "repo.branch.rename_branch_to": "\"%s\"를 다음으로 이름변경:",
+ "repo.branch.confirm_rename_branch": "브랜치명 변경",
+ "repo.branch.create_branch_operation": "브랜치 생성",
+ "repo.branch.new_branch": "새 브랜치 생성",
+ "repo.branch.new_branch_from": "새 브런치를 \"%s\"으로부터 생성",
+ "repo.branch.renamed": "브랜치 %s가 %s로 이름이 변경되었습니다.",
+ "repo.branch.rename_default_or_protected_branch_error": "운영자만 기본 또는 보호된 브랜치의 이름을 변경할 수 있습니다.",
+ "repo.branch.rename_protected_branch_failed": "브랜치 보호 규칙에 의해 브랜치 이름을 변경할 수 없습니다.",
+ "repo.branch.commits_divergence_from": "커밋 차이: %[1]d 뒤쳐져 있고, %[3]s에 대해 %[2]d 앞서 있음",
+ "repo.branch.commits_no_divergence": "브랜치 %[1]과 같습니다",
+ "repo.tag.create_tag": "태그 %s 생성",
+ "repo.tag.create_tag_operation": "태그 생성",
+ "repo.tag.confirm_create_tag": "태그 생성",
+ "repo.tag.create_tag_from": "새 태그를 \"%s\"으로부터 생성",
+ "repo.tag.create_success": "태그 \"%s\"가 생성되었습니다.",
"repo.topic.manage_topics": "토픽 관리",
"repo.topic.done": "완료",
+ "repo.topic.count_prompt": "25개 이상의 주제를 선택하실 수 없습니다",
+ "repo.topic.format_prompt": "주제명은 문자나 숫자로 시작해야 하며, 대시('-')와 점('.')을 포함할 수 있고, 최대 35자까지 가능합니다. 문자는 소문자여야 합니다.",
+ "repo.find_file.follow_symlink": "이 심볼릭 링크가 가리키는 위치로 이동합니다",
+ "repo.find_file.go_to_file": "파일로 이동",
+ "repo.find_file.no_matching": "일치하는 파일을 찾을 수 없음",
+ "repo.error.csv.too_large": "파일이 너무 커서 렌더링할 수 없습니다.",
+ "repo.error.csv.unexpected": "예기치 못한 문자가 줄 %d, 열 %d에 포함되어 있어 파일을 렌더링할 수 없습니다.",
+ "repo.error.csv.invalid_field_count": "%d 라인에 필드 개수가 잘못되어 파일을 렌더링할 수 없습니다.",
+ "repo.error.broken_git_hook": "이 리포지토리의 Git Hook이 손상된 것 같습니다. 문서를 따라 수정하고, 커밋을 푸시하여 상태를 새로 고치십시오.",
+ "graphs.component_loading": "%s 로드 중…",
+ "graphs.component_loading_failed": "%s 로드할 수 없습니다",
+ "graphs.component_loading_info": "시간이 좀 걸릴 수 있습니다…",
+ "graphs.component_failed_to_load": "예기치 못한 오류가 발생했습니다.",
+ "graphs.code_frequency.what": "코드 빈도",
+ "graphs.contributors.what": "기여",
+ "graphs.recent_commits.what": "최근 커밋",
"org.org_name_holder": "조직 이름",
"org.org_full_name_holder": "조직 전체 이름",
+ "org.org_name_helper": "조직명은 짧고 기억하기 쉬워야 합니다.",
"org.create_org": "새로운 조직",
"org.repo_updated": "업데이트됨",
"org.members": "멤버",
"org.teams": "팀",
"org.code": "코드",
"org.lower_members": "회원",
- "org.lower_repositories": "저장소",
+ "org.lower_repositories": "리포지토리",
"org.create_new_team": "새 팀",
"org.create_team": "팀 만들기",
"org.org_desc": "설명",
"org.team_name": "팀 이름",
"org.team_desc": "설명",
+ "org.team_name_helper": "팀명은 짧고 기억하기 쉬워야 합니다.",
+ "org.team_desc_helper": "팀의 목적이나 역할을 설명합니다.",
+ "org.team_access_desc": "리포지토리 액세스",
"org.team_permission_desc": "권한",
+ "org.team_unit_desc": "리포지토리 섹션에 액세스 허용",
+ "org.team_unit_disabled": "(비활성화됨)",
+ "org.form.name_been_taken": "조직 이름 \"%s\"는 이미 사용중 입니다.",
+ "org.form.name_reserved": "리포지토리 이름 \"%s\"은 예약되어 있습니다.",
+ "org.form.name_pattern_not_allowed": "패턴 \"%s\" 는 조직명으로 허용되지 않습니다.",
+ "org.form.create_org_not_allowed": "당신은 조직을 생성할 수 없습니다.",
"org.settings": "설정",
"org.settings.options": "조직",
"org.settings.full_name": "성명",
+ "org.settings.email": "연락 이메일 주소",
"org.settings.website": "웹 사이트",
"org.settings.location": "위치",
+ "org.settings.permission": "권한",
+ "org.settings.repoadminchangeteam": "리포지토리 운영자는 팀에 대한 액세스 권한을 추가 및 제거할 수 있습니다",
"org.settings.visibility": "가시성",
+ "org.settings.change_visibility": "공개범위 변경",
+ "org.settings.change_visibility_notices_1": "조직이 비공개로 전환되면, 리포지토리의 모든 별점은 제거되고 복구될 수 없습니다.",
+ "org.settings.change_visibility_notices_2": "공개 설정이 비공개로 변경되면 비회원은 조직의 리포지토리에 액세스할 수 없게 됩니다.",
+ "org.settings.change_visibility_success": "%s 조직의 공개범위가 성공적으로 변경되었습니다.",
+ "org.settings.visibility_desc": "조직과 해당 리포지토리를 볼 수 있는 사람을 변경합니다.",
+ "org.settings.visibility.public": "공개",
+ "org.settings.visibility.limited": "제한됨 (인증된 사용자에게만 표시)",
+ "org.settings.visibility.limited_shortname": "제한됨",
+ "org.settings.visibility.private": "비공개 (조직 멤버에게만 표시)",
"org.settings.visibility.private_shortname": "비공개",
"org.settings.update_settings": "설정 업데이트",
"org.settings.update_setting_success": "조직 설정이 변경되었습니다.",
- "org.settings.update_avatar_success": "조직의 아바타가 갱신되었습니다.",
+ "org.settings.rename": "조직 이름 변경",
+ "org.settings.rename_desc": "조직 이름을 변경하면 조직의 URL도 변경되며, 이전 이름은 다른 사람이 사용할 수 있게 됩니다.",
+ "org.settings.rename_success": "조직 %[1]이 %[2]로 이름이 변경되었습니다.",
+ "org.settings.rename_no_change": "조직 이름이 바뀌지 않았습니다.",
+ "org.settings.rename_new_org_name": "새로운 조직 이름",
+ "org.settings.rename_failed": "내부 오류로 인해 조직 이름 변경이 실패함",
+ "org.settings.rename_notices_1": "이 동작은 취소할 수 없습니다.",
+ "org.settings.rename_notices_2": "이전 이름은 사용요청 전까지 리디렉션 됩니다.",
+ "org.settings.update_avatar_success": "조직의 아바타가 업데이트 되었습니다.",
"org.settings.delete": "조직 삭제",
"org.settings.delete_account": "이 조직을 삭제합니다.",
+ "org.settings.delete_prompt": "조직이 영구적으로 제거됩니다. 이 작업은 되돌릴 수 없습니다!",
+ "org.settings.name_confirm": "확인을 위해 조직 이름을 입력:",
+ "org.settings.delete_notices_1": "이 동작은 취소할 수 없습니다.",
+ "org.settings.delete_notices_2": "이 작업은 코드, 이슈, 댓글, 위키 데이터 및 공동작업자 설정을 포함하여 %s의 모든 리포지토리를 영구적으로 삭제합니다.",
+ "org.settings.delete_notices_3": "이 작업은 %s의 모든 패키지를 영구적으로 삭제합니다.",
+ "org.settings.delete_notices_4": "이 작업은 %s의 모든 프로젝트를 영구적으로 삭제합니다.",
"org.settings.confirm_delete_account": "삭제 승인",
- "org.members.membership_visibility": "회원 표시:",
+ "org.settings.delete_failed": "내부 오류로 인해 조직 삭제를 실패함",
+ "org.settings.delete_successful": "조직 %s가 성공적으로 삭제되었습니다.",
+ "org.settings.hooks_desc": "이 조직의 모든 리포지토리에 대해 트리거될 웹훅을 추가합니다.",
+ "org.settings.labels_desc": "이 조직의 모든 리포지토리에 있는 이슈에 사용할 수 있는 레이블을 추가합니다.",
+ "org.members.membership_visibility": "멤버 공개범위:",
"org.members.public": "보임",
"org.members.public_helper": "숨기기",
"org.members.private": "숨김",
@@ -998,31 +2778,86 @@
"org.members.owner": "소유자",
"org.members.member": "멤버",
"org.members.remove": "제거",
+ "org.members.remove.detail": "%[2]s에서 %[1]s 를 제거하겠습니까?",
"org.members.leave": "나가기",
+ "org.members.leave.detail": "%s를 나가시겠습니까?",
"org.members.invite_desc": "새로운 맴버를 %s에 추가:",
"org.members.invite_now": "지금 초대하기",
"org.teams.join": "가입",
"org.teams.leave": "탈퇴",
+ "org.teams.leave.detail": "%s를 나가시겠습니까?",
+ "org.teams.can_create_org_repo": "리포지토리 생성",
+ "org.teams.can_create_org_repo_helper": "멤버는 조직에서 새 리포지토리를 만들 수 있습니다. 생성자는 새 리포지토리에 대한 운영자 액세스 권한을 얻습니다.",
+ "org.teams.none_access": "액세스 없음",
+ "org.teams.none_access_helper": "멤버는 이 단위에서 어떤 작업도 보거나 수행할 수 없습니다. 공개 리포지토리에는 영향을 미치지 않습니다.",
+ "org.teams.general_access": "일반 액세스",
+ "org.teams.general_access_helper": "멤버 권한은 아래 권한 테이블에 따라 결정됩니다.",
"org.teams.read_access": "읽음",
+ "org.teams.read_access_helper": "멤버는 팀 리포지토리를 보고 복제할 수 있습니다.",
"org.teams.write_access": "쓰기",
- "org.teams.admin_access": "관리자 액세스",
+ "org.teams.write_access_helper": "멤버는 팀 리포지토리를 읽고 푸시할 수 있습니다.",
+ "org.teams.admin_access": "운영자 액세스",
+ "org.teams.admin_access_helper": "멤버는 팀 리포지토리에 풀 및 푸시를 할 수 있으며, 공동작업자를 추가할 수 있습니다.",
"org.teams.no_desc": "이 팀은 설명이 없습니다.",
"org.teams.settings": "설정",
+ "org.teams.owners_permission_desc": "소유자는 모든 리포지토리에 대한 전체 액세스 권한을 가지며 조직에 대한 운영자 액세스 권한을 가집니다.",
"org.teams.members": "팀 구성원",
"org.teams.update_settings": "설정 업데이트",
"org.teams.delete_team": "팀 삭제",
"org.teams.add_team_member": "팀 구성원 추가",
+ "org.teams.invite_team_member": "%s로 초대",
+ "org.teams.invite_team_member.list": "대기 중인 초대",
"org.teams.delete_team_title": "팀 삭제",
+ "org.teams.delete_team_desc": "팀을 삭제하면 구성원의 저장소 액세스 권한이 해지됩니다. 계속하시겠습니까?",
"org.teams.delete_team_success": "팀이 삭제되었습니다.",
- "org.teams.repositories": "팀 저장소",
+ "org.teams.read_permission_desc": "이 팀에 읽기 액세스 권한을 부여합니다: 구성원은 팀 리포지토리를 보고 복제할 수 있습니다.",
+ "org.teams.write_permission_desc": "이 팀에 쓰기 액세스 권한을 부여합니다: 구성원은 팀 리포지토리에서 읽고 푸시할 수 있습니다.",
+ "org.teams.admin_permission_desc": "이 팀에 운영자 액세스 권한을 부여합니다: 구성원은 팀 리포지토리에서 읽고, 푸시 및 공동작업자를 추가할 수 있습니다.",
+ "org.teams.create_repo_permission_desc": "추가적으로, 이 팀에 리포지토리 생성 권한을 부여합니다: 멤버는 조직에서 새 리포지토리를 생성할 수 있습니다.",
+ "org.teams.repositories": "팀 리포지토리",
+ "org.teams.remove_all_repos_title": "모든 팀 리포지토리 제거",
+ "org.teams.remove_all_repos_desc": "팀에서 모든 리포지토리를 제거합니다.",
+ "org.teams.add_all_repos_title": "모든 리포지토리 추가",
+ "org.teams.add_all_repos_desc": "모든 조직의 리포지토리를 팀에 추가합니다.",
+ "org.teams.add_nonexistent_repo": "추가하려는 리포지토리가 존재하지 않습니다. 먼저 생성하십시오.",
"org.teams.add_duplicate_users": "사용자가 이미 팀 멤버입니다.",
+ "org.teams.repos.none": "이 팀은 어떤 리포지토리에도 액세스할 수 없습니다.",
"org.teams.members.none": "이 팀에 멤버가 없습니다.",
+ "org.teams.members.blocked_user": "조직에 의해 차단되었으므로 사용자를 추가할 수 없습니다.",
+ "org.teams.specific_repositories": "특정 리포지토리",
+ "org.teams.specific_repositories_helper": "멤버는 팀에 명시적으로 추가된 리포지토리에만 액세스할 수 있습니다. 이것을 선택해도 모든 리포지토리로 이미 추가된 리포지토리가 자동으로 제거되지 않습니다.",
+ "org.teams.all_repositories": "모든 리포지토리",
+ "org.teams.all_repositories_helper": "팀은 모든 리포지토리에 액세스할 수 있습니다. 이것을 선택하면 모든 기존 리포지토리가 팀에 추가됩니다.",
+ "org.teams.all_repositories_read_permission_desc": "이 팀은 모든 리포지토리에 대한 읽기 액세스 권한을 부여합니다: 멤버는 리포지토리를 보고 복제할 수 있습니다.",
+ "org.teams.all_repositories_write_permission_desc": "이 팀은 모든 리포지토리에 대한 쓰기 액세스 권한을 부여합니다: 멤버는 리포지토리에 읽고 푸시할 수 있습니다.",
+ "org.teams.all_repositories_admin_permission_desc": "이 팀은 모든 리포지토리에 대한 운영자 액세스 권한을 부여합니다: 멤버는 리포지토리에 읽기, 푸시, 공동작업자 추가를 할 수 있습니다.",
+ "org.teams.invite.title": "당신은 조직 %s의 팀 %s에 초대되었습니다.",
+ "org.teams.invite.by": "%s에 의해 초대됨",
+ "org.teams.invite.description": "팀에 참여하려면 아래 버튼을 클릭하십시오.",
+ "org.view_as_role": "다음으로 보기: %s",
+ "org.view_as_public_hint": "README를 공개 사용자로 보고 있습니다.",
+ "org.view_as_member_hint": "README를 이 조직의 멤버로 보고 있습니다.",
+ "org.worktime": "근무시간",
+ "org.worktime.date_range_start": "시작 날짜",
+ "org.worktime.date_range_end": "종료 날짜",
+ "org.worktime.query": "쿼리",
+ "org.worktime.time": "시간",
+ "org.worktime.by_repositories": "리포지토리 별",
+ "org.worktime.by_milestones": "마일스톤 별",
+ "org.worktime.by_members": "멤버 별",
+ "admin.maintenance": "유지 관리",
"admin.dashboard": "대시보드",
+ "admin.self_check": "자체 점검",
+ "admin.identity_access": "ID 및 액세스",
"admin.users": "사용자 계정",
"admin.organizations": "조직",
- "admin.repositories": "저장소",
+ "admin.assets": "코드 자산",
+ "admin.repositories": "리포지토리",
+ "admin.hooks": "Webhook",
+ "admin.integrations": "통합",
"admin.authentication": "인증 소스",
- "admin.config": "설정",
+ "admin.emails": "사용자 이메일 주소",
+ "admin.config": "구성",
"admin.config_summary": "요약",
"admin.config_settings": "설정",
"admin.notices": "시스템 공지",
@@ -1030,12 +2865,51 @@
"admin.first_page": "처음",
"admin.last_page": "마지막",
"admin.total": "총: %d",
+ "admin.settings": "운영자 설정",
+ "admin.dashboard.new_version_hint": "Gitea %s가 이제 사용 가능하며, 현재 %s를 실행 중입니다. 자세한 내용은 블로그를 확인하십시오.",
"admin.dashboard.statistic": "요약",
+ "admin.dashboard.maintenance_operations": "유지 관리 작업",
"admin.dashboard.system_status": "시스템 상태",
"admin.dashboard.operation_name": "작업 명",
"admin.dashboard.operation_switch": "스위치",
"admin.dashboard.operation_run": "실행",
+ "admin.dashboard.clean_unbind_oauth": "연결되지 않은 OAuth 연결 삭제",
+ "admin.dashboard.clean_unbind_oauth_success": "모든 연결되지 않은 OAuth 연결이 삭제되었습니다.",
+ "admin.dashboard.task.started": "작업 시작됨: %[1]s",
+ "admin.dashboard.task.process": "작업: %[1]s",
+ "admin.dashboard.task.cancelled": "작업: %[1]s 취소됨: %[3]s",
+ "admin.dashboard.task.error": "작업 오류: %[1]s: %[3]s",
+ "admin.dashboard.task.finished": "작업: %[2]s에 의해 시작된 %[1]s이 완료됨",
+ "admin.dashboard.task.unknown": "알 수 없는 작업: %[1]s",
+ "admin.dashboard.cron.started": "Cron 시작됨: %[1]s",
+ "admin.dashboard.cron.process": "Cron: %[1]s",
+ "admin.dashboard.cron.cancelled": "Cron: %[1]s 취소됨: %[3]s",
+ "admin.dashboard.cron.error": "Cron 오류: %s: %[3]s",
+ "admin.dashboard.cron.finished": "Cron: %[1]s 완료됨",
+ "admin.dashboard.delete_inactive_accounts": "모든 비활성화 계정 삭제",
+ "admin.dashboard.delete_inactive_accounts.started": "비활성 계정의 삭제 작업이 시작되었습니다",
+ "admin.dashboard.delete_repo_archives": "모든 리포지토리의 아카이빙 (ZIP, TAR.GZ 등) 삭제",
+ "admin.dashboard.delete_repo_archives.started": "모든 리포지토리 아카이브 삭제 작업이 시작되었습니다",
+ "admin.dashboard.delete_missing_repos": "Git 파일이 없는 모든 리포지토리 삭제",
+ "admin.dashboard.delete_missing_repos.started": "Git 파일이 없는 모든 리포지토리 삭제 작업이 시작되었습니다",
+ "admin.dashboard.delete_generated_repository_avatars": "생성된 리포지토리 아바타 삭제",
+ "admin.dashboard.sync_repo_branches": "Git 데이터에서 누락된 브랜치를 데이터베이스에 동기화",
+ "admin.dashboard.sync_repo_tags": "Git 데이터에서 데이터베이스로 태그 동기화",
+ "admin.dashboard.update_mirrors": "미러 업데이트",
+ "admin.dashboard.repo_health_check": "모든 리포지토리 헬스 체크",
+ "admin.dashboard.check_repo_stats": "모든 리포지토리 통계 확인",
+ "admin.dashboard.archive_cleanup": "오래된 리포지토리 아카이브 삭제",
+ "admin.dashboard.deleted_branches_cleanup": "삭제된 브랜치 정리",
+ "admin.dashboard.update_migration_poster_id": "마이그레이션 포스터 ID 갱신",
+ "admin.dashboard.git_gc_repos": "모든 리포지토리 가비지 콜렉션",
+ "admin.dashboard.resync_all_sshkeys": "Gitea SSH 키로 '.ssh/authorized_keys' 파일 갱신",
+ "admin.dashboard.resync_all_sshprincipals": "Gitea SSH 접속역할로 '.ssh/authorized_principals' 파일 업데이트",
+ "admin.dashboard.resync_all_hooks": "모든 리포지토리의 git hook을 다시 동기화 (pre-receive, update, post-receive, proc-receive, ...)",
+ "admin.dashboard.reinit_missing_repos": "레코드가 존재하는 누락된 모든 Git 리포지토리 다시 초기화",
"admin.dashboard.sync_external_users": "외부 사용자 데이터 동기화",
+ "admin.dashboard.cleanup_hook_task_table": "hook_task 테이블 정리",
+ "admin.dashboard.cleanup_packages": "만료된 패키지 정리",
+ "admin.dashboard.cleanup_actions": "만료된 작업 리소스 정리",
"admin.dashboard.server_uptime": "서버를 켠 시간",
"admin.dashboard.current_goroutine": "현재 Go루틴",
"admin.dashboard.current_memory_usage": "현재 메모리 사용율",
@@ -1065,57 +2939,127 @@
"admin.dashboard.total_gc_pause": "모든 가비지 콜렉션 중지",
"admin.dashboard.last_gc_pause": "마지막 가비지 콜렉션 중지",
"admin.dashboard.gc_times": "가비지 콜렉션 시간",
+ "admin.dashboard.delete_old_actions": "데이터베이스에서 모든 오래된 활동 삭제",
+ "admin.dashboard.delete_old_actions.started": "데이터베이스에서 모든 오래된 활동 삭제를 시작됨",
+ "admin.dashboard.update_checker": "업데이트 확인",
+ "admin.dashboard.delete_old_system_notices": "데이터베이스에서 모든 오래된 시스템 알림 삭제",
+ "admin.dashboard.gc_lfs": "LFS 메타 객체 가비지 컬렉션",
+ "admin.dashboard.stop_zombie_tasks": "좀비 작업 동작 중지",
+ "admin.dashboard.stop_endless_tasks": "끝나지 않는 작업 중지",
+ "admin.dashboard.cancel_abandoned_jobs": "포기한 작업 동작 취소",
+ "admin.dashboard.start_schedule_tasks": "예약된 작업 동작 시작",
+ "admin.dashboard.sync_branch.started": "브랜치 동기화 시작됨",
+ "admin.dashboard.sync_tag.started": "태그 동기화 시작됨",
+ "admin.dashboard.rebuild_issue_indexer": "이슈 인덱서 재구축",
+ "admin.dashboard.sync_repo_licenses": "리포지토리 라이선스 동기화",
"admin.users.user_manage_panel": "사용자 계정 관리",
"admin.users.new_account": "사용자 계정 생성",
"admin.users.name": "사용자명",
"admin.users.full_name": "성명",
"admin.users.activated": "활성화됨",
- "admin.users.admin": "관리자",
- "admin.users.repos": "저장소",
+ "admin.users.admin": "운영자",
+ "admin.users.restricted": "제한됨",
+ "admin.users.reserved": "예약됨",
+ "admin.users.bot": "봇",
+ "admin.users.remote": "리모트",
+ "admin.users.2fa": "2FA",
+ "admin.users.repos": "리포지토리",
"admin.users.created": "작성일",
"admin.users.last_login": "마지막 로그인",
+ "admin.users.never_login": "로그인 한 적 없음",
"admin.users.send_register_notify": "사용자 등록 알림 전송",
+ "admin.users.new_success": "사용자 계정 \"%s\"이 생성되었습니다.",
"admin.users.edit": "수정하기",
"admin.users.auth_source": "인증 소스",
"admin.users.local": "로컬",
"admin.users.auth_login_name": "인증 로그인 명",
"admin.users.password_helper": "비밀번호를 비워두시면 변경하지 않고 유지됩니다.",
- "admin.users.update_profile_success": "사용자 계정이 갱신되었습니다.",
+ "admin.users.update_profile_success": "사용자 계정이 업데이트 되었습니다.",
"admin.users.edit_account": "사용자 계정 편집",
+ "admin.users.max_repo_creation": "리포지토리 최대 개수",
"admin.users.max_repo_creation_desc": "(-1을 입력하면 전역 설정된 기본 제한을 따릅니다.)",
"admin.users.is_activated": "사용자 계정이 활성화 되었습니다.",
"admin.users.prohibit_login": "로그인 비활성화",
- "admin.users.is_admin": "관리자",
+ "admin.users.is_admin": "운영자 입니다",
+ "admin.users.is_restricted": "제한됨",
"admin.users.allow_git_hook": "Git 훅 생성 허용",
- "admin.users.allow_import_local": "로컬 저장소 가져오기 허용",
+ "admin.users.allow_git_hook_tooltip": "Git Hook은 Gitea를 실행하는 OS 사용자로 실행되며 동일한 수준의 호스트 액세스 권한을 갖습니다. 결과적으로 이 특별한 Git Hook 권한을 가진 사용자는 모든 Gitea 리포지토리뿐만 아니라 Gitea에서 사용하는 데이터베이스에도 액세스하고 수정할 수 있습니다. 따라서 Gitea 운영자 권한도 얻을 수 있습니다.",
+ "admin.users.allow_import_local": "로컬 리포지토리 가져오기 허용",
"admin.users.allow_create_organization": "조직 생성 허용",
- "admin.users.update_profile": "사용자 계정 갱신",
+ "admin.users.update_profile": "사용자 계정 업데이트",
"admin.users.delete_account": "사용자 계정 삭제",
+ "admin.users.cannot_delete_self": "자신을 삭제할 수 없습니다",
+ "admin.users.still_own_repo": "이 사용자는 하나 이상의 리포지토리를 소유하고 있습니다. 먼저 이 리포지토리들을 삭제하거나 이전하십시오.",
+ "admin.users.still_has_org": "이 사용자는 조직의 멤버입니다. 먼저 모든 조직에서 이 사용자를 제거하십시오.",
+ "admin.users.purge": "사용자 제거",
+ "admin.users.purge_help": "사용자 및 사용자가 소유한 모든 리포지토리, 조직, 패키지를 강제로 삭제합니다. 모든 댓글도 삭제됩니다.",
+ "admin.users.still_own_packages": "이 사용자는 하나 이상의 패키지를 소유하고 있습니다. 먼저 이 패키지들을 삭제하십시오.",
"admin.users.deletion_success": "사용자 계정이 삭제되었습니다.",
+ "admin.users.reset_2fa": "2단계 인증 초기화",
+ "admin.users.list_status_filter.menu_text": "필터",
+ "admin.users.list_status_filter.reset": "리셋",
"admin.users.list_status_filter.is_active": "사용",
- "admin.users.list_status_filter.is_admin": "관리자",
+ "admin.users.list_status_filter.not_active": "비활성",
+ "admin.users.list_status_filter.is_admin": "운영자",
+ "admin.users.list_status_filter.not_admin": "운영자 아님",
+ "admin.users.list_status_filter.is_restricted": "제한됨",
+ "admin.users.list_status_filter.not_restricted": "제한되지 않음",
+ "admin.users.list_status_filter.is_prohibit_login": "로그인 금지",
+ "admin.users.list_status_filter.not_prohibit_login": "로그인 허용",
+ "admin.users.list_status_filter.is_2fa_enabled": "2단계 인증 활성화",
+ "admin.users.list_status_filter.not_2fa_enabled": "2단계 인증 비활성화",
+ "admin.users.details": "사용자 상세 정보",
+ "admin.emails.email_manage_panel": "사용자 이메일 관리",
"admin.emails.primary": "기본",
"admin.emails.activated": "활성화됨",
"admin.emails.filter_sort.email": "이메일 주소",
+ "admin.emails.filter_sort.email_reverse": "이메일 주소 (역순)",
"admin.emails.filter_sort.name": "사용자명",
+ "admin.emails.filter_sort.name_reverse": "사용자명 (역순)",
+ "admin.emails.updated": "이메일 주소 업데이트됨",
+ "admin.emails.not_updated": "요청한 이메일 주소 업데이트에 실패했습니다: %v",
+ "admin.emails.duplicate_active": "이 이메일 주소는 다른 사용자가 이미 사용 중입니다.",
+ "admin.emails.change_email_header": "이메일 속성 업데이트",
+ "admin.emails.change_email_text": "이 이메일 주소를 업데이트하시겠습니까?",
+ "admin.emails.delete": "이메일 삭제",
+ "admin.emails.delete_desc": "이 이메일 주소를 삭제하시겠습니까?",
+ "admin.emails.deletion_success": "이메일 주소가 삭제되었습니다.",
+ "admin.emails.delete_primary_email_error": "기본 이메일을 삭제할 수 없습니다.",
"admin.orgs.org_manage_panel": "조직 관리",
"admin.orgs.name": "이름",
"admin.orgs.teams": "팀",
"admin.orgs.members": "멤버",
"admin.orgs.new_orga": "새 조직",
- "admin.repos.repo_manage_panel": "저장소 관리",
+ "admin.repos.repo_manage_panel": "리포지토리 관리",
+ "admin.repos.unadopted": "편입되지 않은 저장소",
+ "admin.repos.unadopted.no_more": "더 이상 채택되지 않은 리포지토리를 찾을 수 없음",
"admin.repos.owner": "소유자",
"admin.repos.name": "이름",
"admin.repos.private": "비공개",
"admin.repos.issues": "이슈",
"admin.repos.size": "크기",
+ "admin.repos.lfs_size": "LFS 크기",
+ "admin.packages.package_manage_panel": "패키지 관리",
+ "admin.packages.total_size": "전체 크기: %s",
+ "admin.packages.unreferenced_size": "참조되지 않은 크기: %s",
+ "admin.packages.cleanup": "만료된 데이터 정리",
+ "admin.packages.cleanup.success": "만료된 데이터가 성공적으로 정리됨",
"admin.packages.owner": "소유자",
+ "admin.packages.creator": "제작자",
"admin.packages.name": "이름",
"admin.packages.version": "버전",
"admin.packages.type": "유형",
- "admin.packages.repository": "저장소",
+ "admin.packages.repository": "리포지토리",
"admin.packages.size": "크기",
"admin.packages.published": "배포됨",
+ "admin.defaulthooks": "기본 웹훅",
+ "admin.defaulthooks.desc": "웹훅은 특정 Gitea 이벤트가 트리거될 때 서버에 HTTP POST 요청을 자동으로 보냅니다. 여기에 정의된 웹훅은 기본값이므로 모든 새 리포지토리로 복사됩니다. 자세한 내용은 웹훅 가이드를 참조하세요.",
+ "admin.defaulthooks.add_webhook": "기본 웹훅 추가",
+ "admin.defaulthooks.update_webhook": "기본 웹훅 업데이트",
+ "admin.systemhooks": "시스템 웹훅",
+ "admin.systemhooks.desc": "웹훅은 특정 Gitea 이벤트가 트리거될 때 서버에 HTTP POST 요청을 자동으로 보냅니다. 여기에 정의된 웹훅은 시스템의 모든 리포지토리에서 동작하므로, 이로 인해 발생할 수 있는 성능 영향을 고려하십시오. 자세한 내용은웹훅 가이드를 참조하세요.",
+ "admin.systemhooks.add_webhook": "시스템 웹훅 추가",
+ "admin.systemhooks.update_webhook": "시스템 웹훅 업데이트",
"admin.auths.auth_manage_panel": "인증 소스 관리",
"admin.auths.new": "인증 소스 추가",
"admin.auths.name": "이름",
@@ -1134,20 +3078,42 @@
"admin.auths.user_base": "사용자 검색 기준",
"admin.auths.user_dn": "사용자 DN",
"admin.auths.attribute_username": "사용자명 속성",
+ "admin.auths.attribute_username_placeholder": "Gitea에 입력된 사용자명을 사용하려면 비워두세요.",
"admin.auths.attribute_name": "이름 속성",
"admin.auths.attribute_surname": "성 속성",
"admin.auths.attribute_mail": "이메일 속성",
"admin.auths.attribute_ssh_public_key": "SSH 공개 키 속성",
+ "admin.auths.attribute_avatar": "아바타 속성",
+ "admin.auths.ssh_keys_are_verified": "LDAP 내의 SSH키는 인증된것으로 간주함",
+ "admin.auths.attributes_in_bind": "바인드 DN 컨텍스트에서 속성 가져오기",
+ "admin.auths.allow_deactivate_all": "빈 검색 결과가 모든 사용자를 비활성화하도록 허용",
"admin.auths.use_paged_search": "페이지 검색 사용",
"admin.auths.search_page_size": "페이지 크기",
"admin.auths.filter": "사용자 필터",
- "admin.auths.admin_filter": "관리자 필터",
+ "admin.auths.admin_filter": "운영자 필터",
+ "admin.auths.restricted_filter": "제한된 필터링",
+ "admin.auths.restricted_filter_helper": "제한된 사용자를 설정하지 않으려면 비워 두십시오. 운영자 필터와 일치하지 않는 모든 사용자를 제한된 사용자로 설정하려면 별표('*')를 사용하십시오.",
+ "admin.auths.verify_group_membership": "LDAP에서 그룹 멤버십 확인 (필터를 비워두면 건너뜀)",
+ "admin.auths.group_search_base": "그룹 검색 기준 DN",
+ "admin.auths.group_attribute_list_users": "사용자 목록을 포함하는 그룹 속성",
+ "admin.auths.user_attribute_in_group": "그룹에 나열된 사용자 속성",
+ "admin.auths.map_group_to_team": "LDAP 그룹을 조직 팀에 매핑 (필드를 비워두면 생략함)",
+ "admin.auths.map_group_to_team_removal": "사용자가 해당 LDAP 그룹에 속하지 않으면 동기화된 팀에서 사용자를 제거",
+ "admin.auths.enable_ldap_groups": "LDAP 그룹 활성화",
+ "admin.auths.ms_ad_sa": "MS AD 검색 속성",
"admin.auths.smtp_auth": "SMTP 인증 유형",
"admin.auths.smtphost": "SMTP 호스트",
"admin.auths.smtpport": "SMTP 포트",
"admin.auths.allowed_domains": "허용된 도메인",
+ "admin.auths.allowed_domains_helper": "모든 도메인을 허용하려면 비워 두십시오. 여러 도메인은 쉼표(',')로 구분합니다.",
"admin.auths.skip_tls_verify": "TLS 검증 건너뛰기",
+ "admin.auths.force_smtps": "SMTPS 강제",
+ "admin.auths.force_smtps_helper": "SMTPS는 항상 465번 포트에서 사용됩니다. 다른 포트에서 SMTPS를 강제하려면 이 설정을 하십시오. (그렇지 않으면 호스트에서 지원하는 경우 다른 포트에서 STARTTLS가 사용됩니다.)",
+ "admin.auths.helo_hostname": "HELO 호스트명",
+ "admin.auths.helo_hostname_helper": "HELO와 함께 전송되는 호스트명. 현재 호스트명으로 전송하려면 비워 두십시오.",
+ "admin.auths.disable_helo": "HELO 비활성화",
"admin.auths.pam_service_name": "PAM 서비스 명",
+ "admin.auths.pam_email_domain": "PAM Email 도메인 (선택 사항)",
"admin.auths.oauth2_provider": "OAuth2 프로바이더",
"admin.auths.oauth2_icon_url": "아이콘 URL",
"admin.auths.oauth2_clientID": "클라이언트 ID (키)",
@@ -1158,28 +3124,76 @@
"admin.auths.oauth2_authURL": "인가 URL",
"admin.auths.oauth2_profileURL": "프로필 URL",
"admin.auths.oauth2_emailURL": "이메일 URL",
+ "admin.auths.skip_local_two_fa": "로컬 2단계 인증 건너뛰기",
+ "admin.auths.skip_local_two_fa_helper": "설정하지 않으면 2단계 인증이 설정된 로컬 사용자는 로그인하기 위해서 여전히 2단계 인증을 통과해야 합니다",
+ "admin.auths.oauth2_tenant": "Tenant",
+ "admin.auths.oauth2_scopes": "추가 스코프",
+ "admin.auths.oauth2_required_claim_name": "클레임 이름이 요구됨",
+ "admin.auths.oauth2_required_claim_name_helper": "이 이름을 설정하여 이 소스에서의 로그인을 이 이름으로 된 클레임을 가진 사용자로 제한합니다",
+ "admin.auths.oauth2_required_claim_value": "Claim Value가 필수적으로 요구됨",
+ "admin.auths.oauth2_required_claim_value_helper": "이 값을 설정하여 이 소스에서의 로그인을 이 이름과 값을 가진 클레임을 가진 사용자로 제한합니다",
+ "admin.auths.oauth2_group_claim_name": "이 소스에 대한 그룹명을 제공하는 클레임명. (선택 사항)",
+ "admin.auths.oauth2_full_name_claim_name": "풀 네임 클레임 이름. (선택사항 — 설정하는 경우 사용자의 풀 네임이 이 클레임과 항상 동기화 됩니다)",
+ "admin.auths.oauth2_ssh_public_key_claim_name": "SSH 공개 키 클레임 이름",
+ "admin.auths.oauth2_admin_group": "운영자 사용자를 위한 그룹 클레임 값. (선택 사항 — 위에 클레임명 필요)",
+ "admin.auths.oauth2_restricted_group": "제한된 사용자를 위한 그룹 클레임 값. (선택 사항 — 위에 클레임명 필요)",
+ "admin.auths.oauth2_map_group_to_team": "클레임된 그룹을 조직 팀에 매핑. (선택 사항 — 위에 클레임명 필요)",
+ "admin.auths.oauth2_map_group_to_team_removal": "사용자가 해당 그룹에 속하지 않으면 동기화된 팀에서 사용자를 제거.",
"admin.auths.enable_auto_register": "자동 등록을 활성화",
+ "admin.auths.sspi_auto_create_users": "사용자 자동 생성",
+ "admin.auths.sspi_auto_create_users_helper": "SSPI 인증 방식이 처음 로그인하는 사용자를 위해 새 계정을 자동으로 생성하도록 허용",
+ "admin.auths.sspi_auto_activate_users": "사용자 자동 활성화",
+ "admin.auths.sspi_auto_activate_users_helper": "SSPI 인증 방법이 새 사용자를 자동으로 활성화하도록 허용합니다",
+ "admin.auths.sspi_strip_domain_names": "사용자명에서 도메인명을 제거합니다",
+ "admin.auths.sspi_strip_domain_names_helper": "선택하면 로그인명에서 도메인명이 제거됩니다(예: \"DOMAIN\\user\"와 \"user@example.org\" 모두 \"user\"가 됩니다).",
+ "admin.auths.sspi_separator_replacement": "\\, /, @ 대신 사용할 구분자",
+ "admin.auths.sspi_separator_replacement_helper": "하위 로그온명 (예: \"DOMAIN\\user\"의 \\) 및 사용자 접속역할 이름(예: \"user@example.org\" 내의 @)의 구분자를 대체하는 데 사용할 문자.",
+ "admin.auths.sspi_default_language": "기본 사용자 언어",
+ "admin.auths.sspi_default_language_helper": "SSPI 인증 방식에 의해 자동으로 생성된 사용자의 기본 언어입니다. 언어가 자동으로 감지되도록 하려면 비워 두십시오.",
"admin.auths.tips": "도움말",
"admin.auths.tips.oauth2.general": "OAuth2 인증",
+ "admin.auths.tips.oauth2.general.tip": "새 OAuth2 인증을 등록할 때 콜백/리다이렉트 URL은 다음과 같아야 합니다:",
"admin.auths.tip.oauth2_provider": "OAuth2 프로바이더",
+ "admin.auths.tip.bitbucket": "%s에 새 OAuth 컨슈머를 등록하고 '계정' - '읽기' 권한을 추가",
+ "admin.auths.tip.nextcloud": "다음 메뉴 \"설정 -> 보안 -> OAuth 2.0 클라이언트\"를 사용하여 인스턴스에 새 OAuth 컨슈머를 등록하십시오",
+ "admin.auths.tip.dropbox": "%s에서 새 애플리케이션을 생성",
+ "admin.auths.tip.facebook": "%s에서 새 애플리케이션을 등록하고 \"Facebook 로그인\" 제품을 추가",
+ "admin.auths.tip.github": "%s에 새 OAuth 애플리케이션을 등록",
+ "admin.auths.tip.gitlab_new": "%s에 새 애플리케이션을 등록",
+ "admin.auths.tip.google_plus": "%s의 Google API 콘솔에서 OAuth2 클라이언트 자격 증명을 획득",
+ "admin.auths.tip.openid_connect": "OpenID Connect Discovery URL \"https://{server}/.well-known/openid-configuration\"을 사용하여 엔드포인트를 지정",
+ "admin.auths.tip.twitter": "%s로 이동하여 애플리케이션을 생성하고 \"이 애플리케이션이 Twitter로 로그인하는 데 사용되도록 허용\" 옵션이 활성화되어 있는지 확인하십시오",
+ "admin.auths.tip.discord": "%s에 새 애플리케이션을 등록",
+ "admin.auths.tip.gitea": "새 OAuth2 애플리케이션을 등록. 가이드는 %s에서 찾을 수 있습니다",
+ "admin.auths.tip.yandex": "%s에서 새 애플리케이션을 생성합니다. \"Yandex.Passport API\" 섹션에서 다음 권한을 선택합니다: \"이메일 주소 액세스\", \"사용자 아바타 액세스\", \"사용자명, 이름 및 성, 성별 액세스\"",
+ "admin.auths.tip.mastodon": "인증할 마스토돈 인스턴스를 위한 커스텀 인스턴스 URL을 입력하십시오 (또는 기본 URL 사용)",
"admin.auths.edit": "인증 소스 편집",
"admin.auths.activated": "인증 소스가 활성화 되었습니다.",
- "admin.auths.update_success": "인증 소스가 갱신되었습니다.",
- "admin.auths.update": "인증 소스 갱신",
+ "admin.auths.new_success": "\"%s\" 인증이 추가되었습니다.",
+ "admin.auths.update_success": "인증 소스가 업데이트 되었습니다.",
+ "admin.auths.update": "인증 소스 업데이트",
"admin.auths.delete": "인증 소스 삭제",
"admin.auths.delete_auth_title": "인증 소스 삭제",
+ "admin.auths.delete_auth_desc": "인증 소스를 삭제하면 사용자가 해당 소스로 로그인할 수 없게 됩니다. 계속하시겠습니까?",
+ "admin.auths.still_in_used": "해당 인증 소스가 아직 사용 중입니다. 먼저 이 인증 소스를 사용하는 모든 사용자를 전환하거나 삭제하십시오.",
"admin.auths.deletion_success": "인증 소스가 삭제되었습니다.",
+ "admin.auths.login_source_exist": "\"%s\" 인증 소스가 이미 존재합니다.",
+ "admin.auths.login_source_of_type_exist": "이 유형의 인증 소스가 이미 존재합니다.",
+ "admin.auths.unable_to_initialize_openid": "OpenID Connect 공급자를 초기화할 수 없습니다: %s",
+ "admin.auths.invalid_openIdConnectAutoDiscoveryURL": "유효하지 않은 자동 검색 URL (반드시 http:// 또는 https://로 시작하는 올바른 URL이어야 합니다)",
"admin.config.server_config": "서버 설정",
"admin.config.app_name": "사이트 제목",
"admin.config.app_ver": "Gitea 버전",
"admin.config.app_url": "Gitea의 기본 URL",
"admin.config.custom_conf": "설정 파일 경로",
- "admin.config.offline_mode": "로컬 모드",
+ "admin.config.custom_file_root_path": "커스텀 파일 루트 경로",
+ "admin.config.domain": "서버 도메인",
"admin.config.disable_router_log": "라우터 로그 비활성화",
"admin.config.run_user": "실행 사용자명",
"admin.config.run_mode": "실행 모드",
"admin.config.git_version": "Git 버전",
- "admin.config.repo_root_path": "저장소 최상위 경로",
+ "admin.config.app_data_path": "앱 데이터 경로",
+ "admin.config.repo_root_path": "리포지토리 최상위 경로",
"admin.config.lfs_root_path": "LFS 루트 경로",
"admin.config.log_file_root_path": "로그 경로",
"admin.config.script_type": "스크립트 유형",
@@ -1187,22 +3201,28 @@
"admin.config.ssh_config": "SSH 설정",
"admin.config.ssh_enabled": "활성화됨",
"admin.config.ssh_start_builtin_server": "빌트-인 서버 사용",
+ "admin.config.ssh_domain": "SSH 서버 도메인",
"admin.config.ssh_port": "포트",
"admin.config.ssh_listen_port": "수신 대기 포트",
"admin.config.ssh_root_path": "최상위 경로",
"admin.config.ssh_minimum_key_size_check": "최소 키 사이즈 검사",
"admin.config.ssh_minimum_key_sizes": "최소 키 사이즈",
+ "admin.config.lfs_config": "LFS 구성",
"admin.config.lfs_enabled": "활성화됨",
+ "admin.config.lfs_content_path": "LFS 콘텐츠 경로",
+ "admin.config.lfs_http_auth_expiry": "LFS HTTP 인증 만료",
"admin.config.db_config": "데이터베이스 설정",
"admin.config.db_type": "유형",
"admin.config.db_host": "호스트",
"admin.config.db_name": "이름",
"admin.config.db_user": "사용자명",
"admin.config.db_schema": "스키마",
+ "admin.config.db_ssl_mode": "SSL",
"admin.config.db_path": "경로",
"admin.config.service_config": "서비스 설정",
"admin.config.register_email_confirm": "가입시 이메일 확인 필수",
"admin.config.disable_register": "자체등록 사용안함",
+ "admin.config.allow_only_internal_registration": "Gitea를 통해서만 등록 허용",
"admin.config.allow_only_external_registration": "외부 서비스를 통해서만 등록 허용",
"admin.config.enable_openid_signup": "OpenID 자체등록 활성화",
"admin.config.enable_openid_signin": "OpenID 로그인 활성화",
@@ -1211,31 +3231,55 @@
"admin.config.mail_notify": "이메일 알림 활성화",
"admin.config.enable_captcha": "CAPTCHA 활성화",
"admin.config.active_code_lives": "코드 만료 기한",
+ "admin.config.reset_password_code_lives": "계정 복구 링크의 유효 시간",
"admin.config.default_keep_email_private": "기본적으로 이메일 주소를 숨김",
"admin.config.default_allow_create_organization": "기본적으로 조직 생성을 허용",
"admin.config.enable_timetracking": "타임 트래킹 활성화",
"admin.config.default_enable_timetracking": "기본 타임 트래킹 활성화",
"admin.config.default_allow_only_contributors_to_track_time": "기여자 트랙 타임만",
"admin.config.no_reply_address": "답변 받지 않을 이메일 주소",
+ "admin.config.default_visibility_organization": "새 조직의 기본 공개범위",
"admin.config.default_enable_dependencies": "기본적으로 이슈 종속성을 활성화",
"admin.config.webhook_config": "웹훅 설정",
"admin.config.queue_length": "큐 길이",
"admin.config.deliver_timeout": "시간 제한 사용",
"admin.config.skip_tls_verify": "TLS 검증 건너뛰기",
+ "admin.config.mailer_config": "메일러 구성",
"admin.config.mailer_enabled": "활성화됨",
+ "admin.config.mailer_enable_helo": "HELO 활성화",
"admin.config.mailer_name": "이름",
+ "admin.config.mailer_protocol": "프로토콜",
+ "admin.config.mailer_smtp_addr": "SMTP 주소",
"admin.config.mailer_smtp_port": "SMTP 포트",
"admin.config.mailer_user": "사용자",
"admin.config.mailer_use_sendmail": "Sendmail 사용",
"admin.config.mailer_sendmail_path": "Sendmail 경로",
"admin.config.mailer_sendmail_args": "Sendmail 추가 인수",
+ "admin.config.mailer_sendmail_timeout": "Sendmail 타임아웃",
+ "admin.config.mailer_use_dummy": "더미",
+ "admin.config.test_email_placeholder": "이메일 주소(예: test@example.com)",
"admin.config.send_test_mail": "테스트 이메일 전송",
+ "admin.config.send_test_mail_submit": "보내기",
+ "admin.config.test_mail_failed": "%s\"으로 테스트 이메일 전송 실패: %v",
+ "admin.config.test_mail_sent": "\"%s\" 에게 테스트 이메일이 전송되었습니다.",
"admin.config.oauth_config": "OAuth 설정",
"admin.config.oauth_enabled": "활성화됨",
"admin.config.cache_config": "캐시 설정",
"admin.config.cache_adapter": "캐시 어댑터",
"admin.config.cache_interval": "캐시 간격",
"admin.config.cache_conn": "캐시 연결",
+ "admin.config.cache_item_ttl": "캐시 아이템 TTL",
+ "admin.config.cache_test": "캐시 테스트",
+ "admin.config.cache_test_failed": "캐시 검사에 실패했습니다: %v.",
+ "admin.config.cache_test_slow": "캐시 테스트는 성공했지만 응답이 느립니다: %s.",
+ "admin.config.cache_test_succeeded": "캐시 테스트 성공, %s안에 응답을 받았습니다.",
+ "admin.config.common.start_time": "시작 시간",
+ "admin.config.common.end_time": "종료 시간",
+ "admin.config.common.skip_time_check": "시간 점검을 생략하려면 시간을 비워 (필드를 지우기) 두십시오",
+ "admin.config.instance_maintenance": "인스턴스 관리",
+ "admin.config.instance_maintenance_mode.admin_web_access_only": "Web UI에 대한 억세스는 운영자에게만 허용됨",
+ "admin.config.instance_web_banner.enabled": "배너 표시",
+ "admin.config.instance_web_banner.message_placeholder": "배너 메시지 (마크다운 지원)",
"admin.config.session_config": "세션 설정",
"admin.config.session_provider": "세션 공급자",
"admin.config.provider_config": "공급자 설정",
@@ -1246,20 +3290,27 @@
"admin.config.cookie_life_time": "쿠키 수명",
"admin.config.picture_config": "사진과 아바타 설정",
"admin.config.picture_service": "이미지 서비스",
- "admin.config.disable_gravatar": "Gravatar 사용안함",
+ "admin.config.enable_gravatar": "Gravatar 활성화",
"admin.config.enable_federated_avatar": "연합 아바타 사용",
+ "admin.config.open_with_editor_app_help": "복제 메뉴의 \"연결 프로그램\" 편집기. 비워두면 기본값이 사용됩니다. 기본값을 보려면 펼침.",
+ "admin.config.git_guide_remote_name": "가이드의 git 명령들에 대한 원격 리포지토리 이름",
"admin.config.git_config": "깃 설정",
"admin.config.git_disable_diff_highlight": "변경 사항 구문 강조 비활성화",
"admin.config.git_max_diff_lines": "변경사항 최대 표시 줄 수 (단일 파일에 대해)",
- "admin.config.git_max_diff_line_characters": "변경사항 최대 표시 문자 수 (단일 행에 대해)",
+ "admin.config.git_max_diff_line_characters": "변경사항 최대 표시 문자 수 (단일 라인에 대해)",
"admin.config.git_max_diff_files": "변경사항 최대 파일 개 수 (표시 되는)",
"admin.config.git_gc_args": "가비지 콜렉션 인수",
"admin.config.git_migrate_timeout": "마이그레이션 제한 시간",
"admin.config.git_mirror_timeout": "미러 업데이트 시간 제한",
- "admin.config.git_clone_timeout": "복제 작업 시간 제한",
- "admin.config.git_pull_timeout": "끌어오기 작업 시간 제한",
"admin.config.git_gc_timeout": "가비지 콜렉션 작업 시간 제한",
"admin.config.log_config": "로그 설정",
+ "admin.config.logger_name_fmt": "로거: %s",
+ "admin.config.disabled_logger": "비활성화됨",
+ "admin.config.access_log_mode": "접근 로그 모드",
+ "admin.config.access_log_template": "액세스 로그 탬플릿",
+ "admin.config.xorm_log_sql": "SQL 로그",
+ "admin.config.set_setting_failed": "설정 %s 실패함",
+ "admin.monitor.stats": "통계",
"admin.monitor.cron": "Cron 작업",
"admin.monitor.name": "이름",
"admin.monitor.schedule": "스케줄",
@@ -1267,28 +3318,90 @@
"admin.monitor.previous": "이전 시간",
"admin.monitor.execute_times": "실행 수",
"admin.monitor.process": "실행중인 프로세스들",
+ "admin.monitor.stacktrace": "Stacktrace",
+ "admin.monitor.trace": "추적",
+ "admin.monitor.performance_logs": "성능 로그",
+ "admin.monitor.processes_count": "%d개 프로세스",
+ "admin.monitor.download_diagnosis_report": "진단 보고서 다운로드",
"admin.monitor.desc": "설명",
"admin.monitor.start": "시작 시간",
"admin.monitor.execute_time": "실행 시간",
+ "admin.monitor.last_execution_result": "결과",
+ "admin.monitor.process.cancel": "프로세스 취소",
+ "admin.monitor.process.cancel_desc": "프로세스를 취소하면 데이터 손실이 발생할 수 있습니다",
+ "admin.monitor.process.children": "자식 프로세스",
+ "admin.monitor.queues": "큐",
+ "admin.monitor.queue": "큐: %s",
"admin.monitor.queue.name": "이름",
"admin.monitor.queue.type": "유형",
+ "admin.monitor.queue.exemplar": "Exemplar 유형",
+ "admin.monitor.queue.numberworkers": "처리기 수",
+ "admin.monitor.queue.activeworkers": "활성 처리기",
+ "admin.monitor.queue.maxnumberworkers": "최대 처리기 수",
+ "admin.monitor.queue.numberinqueue": "큐 내의 항목 수",
+ "admin.monitor.queue.review_add": "처리기 검토/추가",
+ "admin.monitor.queue.settings.title": "풀 설정",
+ "admin.monitor.queue.settings.desc": "풀은 처리기 큐가 차단되면 동적으로 커집니다.",
+ "admin.monitor.queue.settings.maxnumberworkers": "최대 처리기 수",
+ "admin.monitor.queue.settings.maxnumberworkers.placeholder": "현재 %[1]d",
+ "admin.monitor.queue.settings.maxnumberworkers.error": "최대 처리기 수는 숫자여야 함",
"admin.monitor.queue.settings.submit": "설정 업데이트",
+ "admin.monitor.queue.settings.changed": "설정 업데이트됨",
+ "admin.monitor.queue.settings.remove_all_items": "모두 제거",
+ "admin.monitor.queue.settings.remove_all_items_done": "큐 내의 모든 항목이 제거되었습니다.",
"admin.notices.system_notice_list": "시스템 공지",
- "admin.notices.view_detail_header": "알림 세부정보 보기",
+ "admin.notices.view_detail_header": "알림 상세 정보 보기",
+ "admin.notices.operations": "작업",
"admin.notices.select_all": "모두 선택",
"admin.notices.deselect_all": "모두 선택 해제",
"admin.notices.inverse_selection": "선택 반전",
"admin.notices.delete_selected": "선택 삭제",
"admin.notices.delete_all": "모든 알림을 삭제",
"admin.notices.type": "유형",
- "admin.notices.type_1": "저장소",
+ "admin.notices.type_1": "리포지토리",
+ "admin.notices.type_2": "작업",
"admin.notices.desc": "설명",
"admin.notices.op": "일.",
"admin.notices.delete_success": "시스템 알림이 삭제되었습니다.",
- "action.create_repo": "저장소를 만들었습니다. %s",
- "action.rename_repo": "%[1]s에서에서 %[3]s으로 저장소 이름을 바꾸었습니다.",
- "action.transfer_repo": "%s에서 %s로 저장소가 전송되었습니다.",
+ "admin.self_check.no_problem_found": "아직 문제가 발견되지 않았습니다.",
+ "admin.self_check.startup_warnings": "시작 경고:",
+ "admin.self_check.database_collation_mismatch": "데이터베이스가 다음 정렬 방식을 사용할 것으로 예상함: %s",
+ "admin.self_check.database_collation_case_insensitive": "데이터베이스가 대소문자를 구분하지 않는 %s 정렬 방식을 사용하고 있습니다. Gitea는 이 정렬 방식으로 작동할 수 있지만, 정상적으로 작동하지 않는 경우가 드물게 있을 수 있습니다.",
+ "admin.self_check.database_inconsistent_collation_columns": "데이터베이스가 %s 정렬 방식을 사용하고 있지만, 이 열들은 다른 정렬 방식을 사용하고 있습니다. 이는 예상치 못한 문제를 야기할 수 있습니다.",
+ "admin.self_check.database_fix_mysql": "MySQL/MariaDB 사용자의 경우, \"gitea doctor convert\" 명령을 사용하여 정렬 방식 문제를 수정하거나 \"ALTER ... COLLATE ...\" SQL 쿼리를 수동으로 실행하여 문제를 수정할 수 있습니다.",
+ "admin.self_check.database_fix_mssql": "MSSQL 사용자의 경우, 현재로서는 \"ALTER ... COLLATE ...\" SQL 쿼리를 수동으로 실행하여 문제를 수정하는 방법밖에 없습니다.",
+ "admin.self_check.location_origin_mismatch": "현재 URL(%[1]s)이 Gitea가 인식하는 URL(%[2]s)과 일치하지 않습니다. 리버스 프록시를 사용하는 경우 \"Host\" 및 \"X-Forwarded-Proto\" 헤더가 올바르게 설정되었는지 확인하십시오.",
+ "action.create_repo": "리포지토리를 생성됨 %s",
+ "action.rename_repo": "리포지토리 이름 변경됨 - 전 %[1]s 후 %[3]s",
+ "action.commit_repo": "다음으로 푸시 %[3]s at %[4]s",
+ "action.create_issue": "열린 이슈 %[3]s#%[2]s",
+ "action.close_issue": "닫친 이슈 %[3]s#%[2]s",
+ "action.reopen_issue": "재오픈 이슈 %[3]s#%[2]s",
+ "action.create_pull_request": "생성된 풀 리퀘스트 %[3]s#%[2]s",
+ "action.close_pull_request": "닫친 풀 리퀘스트 %[3]s#%[2]s",
+ "action.reopen_pull_request": "재오픈된 풀 리퀘스트 %[3]s#%[2]s",
+ "action.comment_issue": "이슈의 댓글 %[3]s#%[2]s",
+ "action.comment_pull": "풀 리퀘스트의 댓글 %[3]s#%[2]s",
+ "action.merge_pull_request": "풀 리퀘스트%[3]s#%[2]s를 머지했습니다",
+ "action.auto_merge_pull_request": "자동 머지된 풀 리퀘스트%[3]s#%[2]s",
+ "action.transfer_repo": "%s에서 %s로 리포지토리가 이전되었습니다",
+ "action.push_tag": "태그 %[3]s를 %[4]s에 푸시함",
+ "action.delete_tag": "태그 %[2]s를 %[3]s에서 삭제함",
+ "action.delete_branch": "브랜치 %[2]s를 %[3]s에서 삭제함",
+ "action.compare_branch": "비교",
"action.compare_commits": "%d 커밋들 비교",
+ "action.compare_commits_general": "커밋 비교",
+ "action.mirror_sync_push": "미러로 부터 %[4]s에 있는 %[3]s에 커밋 동기화함",
+ "action.mirror_sync_create": "미러에서 새 참조 %[3]s가 %[4]s로 동기화됨",
+ "action.mirror_sync_delete": "미러로부터 %[2]s 참조가 미러의 %[3]s에서 동기화하고 삭제됨",
+ "action.approve_pull_request": "승인됨 %[3]s#%[2]s",
+ "action.reject_pull_request": "변경이 제안됨: %[3]s#%[2]s",
+ "action.publish_release": "릴리스됨: %[3]s의 %[4]s",
+ "action.review_dismissed": "`검토가 해지됨:%[3]s#%[2]s에 대한 %[4]s`",
+ "action.review_dismissed_reason": "이유:",
+ "action.create_branch": "생성된 브랜치 %[3]s in %[4]s",
+ "action.starred_repo": "별점 부여됨 %[2]s",
+ "action.watched_repo": "구독을 시작함 %[2]s",
"tool.now": "현재",
"tool.future": "미래",
"tool.1s": "1 초",
@@ -1307,6 +3420,8 @@
"tool.years": "%d 년",
"tool.raw_seconds": "초",
"tool.raw_minutes": "분",
+ "dropzone.default_message": "파일을 끌어다 놓거나, 여기를 클릭하여 업로드.",
+ "dropzone.invalid_input_type": "이 유형의 파일을 업로드할 수 없습니다.",
"dropzone.file_too_big": "파일 크기({{filesize}} MB) 가 최대 크기({{maxFilesize}} MB) 를 초과합니다.",
"dropzone.remove_file": "파일 제거",
"notification.notifications": "알림",
@@ -1315,36 +3430,324 @@
"notification.no_unread": "읽지 않은 알림이 없습니다.",
"notification.no_read": "알림이 없습니다.",
"notification.pin": "알림 고정",
- "notification.mark_as_read": "읽음으로 표시",
- "notification.mark_as_unread": "읽지 않음으로 표시",
- "notification.mark_all_as_read": "모두 읽음으로 표시",
+ "notification.mark_as_read": "읽음으로 마킹",
+ "notification.mark_as_unread": "읽지 않음으로 마킹",
+ "notification.mark_all_as_read": "모두 읽음으로 마킹",
+ "notification.subscriptions": "구독",
+ "notification.watching": "구독중",
+ "notification.no_subscriptions": "구독 없음",
+ "gpg.default_key": "기본 키로 서명됨",
"gpg.error.extract_sign": "서명 추출에 실패",
"gpg.error.generate_hash": "커밋의 해시 생성에 실패",
+ "gpg.error.no_committer_account": "커미터 이메일 주소에 연결된 계정 없음",
+ "gpg.error.no_gpg_keys_found": "데이터베이스에서 이 서명에 대한 알려진 키를 찾을 수 없음",
"gpg.error.not_signed_commit": "서명되지 않은 커밋입니다.",
- "units.error.no_unit_allowed_repo": "이 저장소의 어떤 섹션에도 접근할 수 없습니다.",
- "units.error.unit_not_allowed": "이 저장소 섹션에 접근할 수 없습니다.",
+ "gpg.error.failed_retrieval_gpg_keys": "커미터 계정에 연결된 키를 가져오지 못함",
+ "gpg.error.probable_bad_signature": "경고! 이 ID를 가진 키가 데이터베이스에 있지만 이 커밋을 검증하지 않습니다! 이 커밋은 의심스럽습니다.",
+ "gpg.error.probable_bad_default_signature": "경고! 기본 키는 이 ID를 가지지만 이 커밋을 검증하지 않습니다! 이 커밋은 의심스럽습니다.",
+ "units.unit": "단위",
+ "units.error.no_unit_allowed_repo": "이 리포지토리의 어떤 섹션에도 접근할 수 없습니다.",
+ "units.error.unit_not_allowed": "이 리포지토리 섹션에 접근할 수 없습니다.",
+ "packages.title": "패키지",
+ "packages.desc": "리포지토리 패키지를 관리.",
+ "packages.empty": "아직 패키지가 없습니다.",
+ "packages.no_metadata": "메타데이터 없음.",
+ "packages.empty.documentation": "패키지 레지스트리에 대한 자세한 내용은 문서를 참조하세요.",
+ "packages.empty.repo": "패키지를 업로드했는데 여기에 표시되지 않나요? 패키지 설정으로 이동하여 이 리포지토리로 연결하세요.",
+ "packages.registry.documentation": "%s 레지스트리에 대한 자세한 내용은 문서를 참조하세요.",
"packages.filter.type": "유형",
"packages.filter.type.all": "전체",
+ "packages.filter.no_result": "필터링 결과과 없습니다.",
+ "packages.filter.container.tagged": "태그 지정됨",
+ "packages.filter.container.untagged": "태그 지정해지",
+ "packages.published_by": "%[3]s에 의해 %[1]s 게시됨",
+ "packages.published_by_in": "발행됨 %[1]s by %[3]s in %[5]s",
"packages.installation": "설치",
+ "packages.about": "이 패키지에 대해서",
+ "packages.requirements": "요구사항",
"packages.dependencies": "의존성",
+ "packages.keywords": "키워드",
+ "packages.details": "상세 정보",
"packages.details.author": "작성자",
+ "packages.details.project_site": "프로젝트 사이트",
+ "packages.details.repository_site": "리포지토리 사이트",
+ "packages.details.documentation_site": "문서 사이트",
"packages.details.license": "라이센스",
+ "packages.assets": "에셋",
+ "packages.versions": "버전",
+ "packages.versions.view_all": "모두 보기",
+ "packages.dependency.id": "ID",
"packages.dependency.version": "버전",
+ "packages.search_in_external_registry": "%s에서 검색",
+ "packages.alpine.registry": "URL을 /etc/apk/repositories 파일에 추가하여 이 레지스트리를 설정:",
+ "packages.alpine.registry.key": "인덱스 서명을 검증하려면 레지스트리 공개 RSA 키를 /etc/apk/keys/ 폴더에 다운로드:",
+ "packages.alpine.registry.info": "아래 목록에서 $branch와 $repository를 선택하십시오.",
+ "packages.alpine.install": "패키지를 설치하려면 다음 명령을 실행:",
+ "packages.alpine.repository": "리포지토리 정보",
"packages.alpine.repository.branches": "브랜치",
- "packages.alpine.repository.repositories": "저장소",
- "packages.arch.repository.repositories": "저장소",
+ "packages.alpine.repository.repositories": "리포지토리",
+ "packages.alpine.repository.architectures": "아키텍처",
+ "packages.arch.registry": "/etc/pacman.conf에 관련 리포지토리 및 아키텍처와 함께 서버를 추가:",
+ "packages.arch.install": "pacman으로 패키지 동기화:",
+ "packages.arch.repository": "리포지토리 정보",
+ "packages.arch.repository.repositories": "리포지토리",
+ "packages.arch.repository.architectures": "아키텍처",
+ "packages.cargo.registry": "Cargo 구성 파일(예: ~/.cargo/config.toml)에 이 레지스트리를 설정:",
+ "packages.cargo.install": "Cargo를 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.chef.registry": "~/.chef/config.rb 파일에 이 레지스트리를 설정:",
+ "packages.chef.install": "패키지를 설치하려면 다음 명령을 실행:",
+ "packages.composer.registry": "~/.composer/config.json 파일에 이 레지스트리를 설정:",
+ "packages.composer.install": "Composer를 사용하여 패키지를 설치하려면 다음 명령을 실행:",
"packages.composer.dependencies": "의존성",
- "packages.conan.details.repository": "저장소",
+ "packages.composer.dependencies.development": "개발 의존성",
+ "packages.conan.details.repository": "리포지토리",
+ "packages.conan.registry": "명령줄로 이 레지스트리를 설정:",
+ "packages.conan.install": "Conan을 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.conda.registry": ".condarc 파일에 이 레지스트리를 Conda 리포지토리로 설정:",
+ "packages.conda.install": "Conda를 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.container.details.type": "이미지 유형",
+ "packages.container.details.platform": "플랫폼",
+ "packages.container.pull": "명령줄로 이미지 풀링:",
+ "packages.container.images": "이미지",
+ "packages.container.digest": "다이제스트",
+ "packages.container.multi_arch": "OS / 아키텍처",
+ "packages.container.layers": "이미지 레이어",
+ "packages.container.labels": "레이블",
+ "packages.container.labels.key": "키",
+ "packages.container.labels.value": "값",
+ "packages.cran.registry": "Rprofile.site 파일에 이 레지스트리를 설정:",
+ "packages.cran.install": "패키지를 설치하려면 다음 명령을 실행:",
+ "packages.debian.registry": "명령줄로 이 레지스트리를 설정:",
+ "packages.debian.registry.info": "아래 목록에서 $distribution과 $component를 선택하십시오.",
+ "packages.debian.install": "패키지를 설치하려면 다음 명령을 실행:",
+ "packages.debian.repository": "리포지토리 정보",
+ "packages.debian.repository.distributions": "배포",
+ "packages.debian.repository.components": "컴포넌트",
+ "packages.debian.repository.architectures": "아키텍처",
+ "packages.generic.download": "명령줄로 패키지 다운로드:",
+ "packages.go.install": "명령줄로 패키지 설치:",
+ "packages.helm.registry": "명령줄로 이 레지스트리를 설정:",
+ "packages.helm.install": "패키지를 설치하려면 다음 명령을 실행:",
+ "packages.maven.registry": "프로젝트의 pom.xml 파일에 이 레지스트리 설정:",
+ "packages.maven.install": "패키지를 사용하려면 pom.xml 파일의 dependencies 블록에 다음 내용을 포함:",
+ "packages.maven.install2": "명령줄로 실행:",
+ "packages.maven.download": "의존성을 다운로드하려면 명령줄에서 다음을 실행:",
+ "packages.nuget.registry": "명령줄에서 이 레지스트리를 설정:",
+ "packages.nuget.install": "NuGet을 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.nuget.dependency.framework": "타겟 프레임워크",
+ "packages.npm.registry": "프로젝트의 .npmrc 파일에 이 레지스트리 설정:",
+ "packages.npm.install": "'npm'을 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.npm.install2": "또는 package.json 파일에 추가:",
"packages.npm.dependencies": "의존성",
+ "packages.npm.dependencies.development": "개발 의존성",
+ "packages.npm.dependencies.bundle": "번들된 의존성",
+ "packages.npm.dependencies.peer": "피어 의존성",
+ "packages.npm.dependencies.optional": "선택적 의존성",
+ "packages.npm.details.tag": "태그",
+ "packages.pub.install": "Dart를 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.pypi.requires": "Python 필요",
+ "packages.pypi.install": "'pip'를 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.rpm.registry": "명령줄로 이 레지스트리를 설정:",
+ "packages.rpm.distros.redhat": "RedHat 기반 배포판의 경우",
+ "packages.rpm.distros.suse": "SUSE 기반 배포판의 경우",
+ "packages.rpm.install": "패키지를 설치하려면 다음 명령을 실행:",
+ "packages.rpm.repository": "리포지토리 정보",
+ "packages.rpm.repository.architectures": "아키텍처",
+ "packages.rpm.repository.multiple_groups": "이 패키지는 여러 그룹에서 사용할 수 있습니다.",
+ "packages.rubygems.install": "gem을 사용하여 패키지를 설치하려면 다음 명령을 실행:",
+ "packages.rubygems.install2": "또는 Gemfile에 추가:",
+ "packages.rubygems.dependencies.runtime": "런타임 의존성",
+ "packages.rubygems.dependencies.development": "개발 의존성",
+ "packages.rubygems.required.ruby": "필요한 Ruby 버전",
+ "packages.rubygems.required.rubygems": "필요한 RubyGem 버전",
+ "packages.swift.registry": "명령줄로 이 레지스트리를 설정:",
+ "packages.swift.install": "Package.swift 파일에 패키지를 추가:",
+ "packages.swift.install2": "그리고 다음 명령을 실행:",
+ "packages.vagrant.install": "Vagrant 박스를 추가하려면 다음 명령을 실행:",
+ "packages.settings.link": "이 패키지를 리포지토리에 연결",
+ "packages.settings.link.description": "패키지를 리포지토리에 연결하면 리포지토리의 패키지 목록에 표시됩니다.",
+ "packages.settings.link.select": "리포지토리 선택",
+ "packages.settings.link.button": "리포지토리 링크 업데이트",
+ "packages.settings.link.success": "리포지토리 링크가 성공적으로 업데이트 되었습니다.",
+ "packages.settings.link.error": "리포지토리 링크 업데이트를 실패했습니다.",
+ "packages.settings.link.repo_not_found": "리포지토리 %s를 찾을 수 없음.",
+ "packages.settings.unlink.error": "리포지토리 링크 삭제 실패.",
+ "packages.settings.unlink.success": "리포지토리 링크 삭제 성공.",
+ "packages.settings.delete": "패키지 삭제",
+ "packages.settings.delete.description": "패키지 삭제는 영구적이며 복구가 불가능합니다.",
+ "packages.settings.delete.notice": "%s (%s) 삭제 하려고 합니다. 이 작업은 되돌릴 수 없습니다. 정말로 삭제하시겠습니까?",
+ "packages.settings.delete.success": "패키지가 삭제되었습니다.",
+ "packages.settings.delete.error": "패키지 삭제에 실패함.",
+ "packages.owner.settings.cargo.title": "Cargo 레지스트리 인덱스",
+ "packages.owner.settings.cargo.initialize": "인덱스 초기화",
+ "packages.owner.settings.cargo.initialize.description": "Cargo 레지스트리를 사용하려면 특별한 인덱스 Git 리포지토리가 필요합니다. 이 옵션을 사용하면 리포지토리를 (재)생성하고 자동으로 구성합니다.",
+ "packages.owner.settings.cargo.initialize.error": "Cargo 인덱스 초기화에 실패: %v",
+ "packages.owner.settings.cargo.initialize.success": "Cargo 인덱스가 성공적으로 생성되었습니다.",
+ "packages.owner.settings.cargo.rebuild": "인덱스 재구축",
+ "packages.owner.settings.cargo.rebuild.description": "인덱스가 저장된 Cargo 패키지와 동기화되지 않은 경우 재구축이 유용할 수 있습니다.",
+ "packages.owner.settings.cargo.rebuild.error": "Cargo 인덱스 재구축에 실패: %v",
+ "packages.owner.settings.cargo.rebuild.success": "Cargo 인덱스가 성공적으로 재구축되었습니다.",
+ "packages.owner.settings.cleanuprules.title": "정리 규칙 관리",
+ "packages.owner.settings.cleanuprules.add": "정리 규칙 추가",
+ "packages.owner.settings.cleanuprules.edit": "정리 규칙 편집",
+ "packages.owner.settings.cleanuprules.none": "사용할 수 있는 정리 규칙이 없습니다. 문서를 참조하세요.",
+ "packages.owner.settings.cleanuprules.preview": "정리 규칙 미리보기",
+ "packages.owner.settings.cleanuprules.preview.overview": "%d개 패키지 제거가 예약되었습니다.",
+ "packages.owner.settings.cleanuprules.preview.none": "정리 규칙이 어떤 패키지와도 일치하지 않습니다.",
"packages.owner.settings.cleanuprules.enabled": "활성화됨",
+ "packages.owner.settings.cleanuprules.pattern_full_match": "전체 패키지명에 패턴을 적용",
+ "packages.owner.settings.cleanuprules.keep.title": "아래에 삭제 규칙이 일치하고 있더라도, 이 규칙에 일치하는 버전은 보존됩니다.",
+ "packages.owner.settings.cleanuprules.keep.count": "가장 최근 것을 보존",
+ "packages.owner.settings.cleanuprules.keep.count.1": "패키지 당 1개의 버전",
+ "packages.owner.settings.cleanuprules.keep.count.n": "패키지 당 %d개 버전",
+ "packages.owner.settings.cleanuprules.keep.pattern": "일치하는 버전 보존",
+ "packages.owner.settings.cleanuprules.keep.pattern.container": "컨테이너 패키지의 latest 버전은 항상 유지됩니다.",
+ "packages.owner.settings.cleanuprules.remove.title": "이 규칙과 일치하는 버전은 위에 있는 규칙에서 유지하도록 명시하지 않는 한 제거됩니다.",
+ "packages.owner.settings.cleanuprules.remove.days": "다음보다 오래된 버전 제거",
+ "packages.owner.settings.cleanuprules.remove.pattern": "일치하는 버전 제거",
+ "packages.owner.settings.cleanuprules.success.update": "정리 규칙이 업데이트 되었습니다.",
+ "packages.owner.settings.cleanuprules.success.delete": "정리 규칙이 삭제되었습니다.",
+ "packages.owner.settings.chef.title": "Chef 레지스트리",
+ "packages.owner.settings.chef.keypair": "키 쌍 생성",
+ "packages.owner.settings.chef.keypair.description": "Chef 레지스트리에 인증하려면 키 쌍이 필요합니다. 이전에 키 쌍을 생성한 경우, 새 키 쌍를 생성하면 이전 키 쌍은 폐기됩니다.",
+ "secrets.secrets": "비밀",
+ "secrets.description": "비밀 키는 특정 동작에 전달되며 다른 방법으로는 읽을 수 없습니다.",
+ "secrets.none": "아직 비밀이 없습니다.",
"secrets.creation.description": "설명",
+ "secrets.creation.name_placeholder": "대소문자를 구분하지 않으며, 영숫자 또는 밑줄 문자만, GITEA_ 또는 GITHUB_로 시작할 수 없음",
+ "secrets.creation.value_placeholder": "아무 내용이나 입력하세요. 시작과 끝의 공백은 생략됩니다.",
+ "secrets.creation.description_placeholder": "간단한 설명을 입력하세요 (선택 사항).",
+ "secrets.save_success": "비밀 \"%s\"이 저장되었습니다.",
+ "secrets.save_failed": "비밀 저장에 실패했습니다.",
+ "secrets.add_secret": "비밀 추가",
+ "secrets.edit_secret": "비밀 편집",
+ "secrets.deletion": "비밀 삭제",
+ "secrets.deletion.description": "비밀 삭제는 영구적이며 되돌릴 수 없습니다. 계속하시겠습니까?",
+ "secrets.deletion.success": "비밀이 삭제되었습니다.",
+ "secrets.deletion.failed": "비밀 제거에 실패했습니다.",
+ "secrets.management": "비밀 관리",
+ "actions.actions": "동작",
+ "actions.unit.desc": "동작 관리",
+ "actions.status.unknown": "알수없음",
+ "actions.status.waiting": "대기 중",
+ "actions.status.running": "실행중",
+ "actions.status.success": "성공",
+ "actions.status.failure": "실패",
+ "actions.status.cancelled": "취소됨",
+ "actions.status.skipped": "건너뜀",
+ "actions.status.blocked": "차단됨",
+ "actions.runners": "러너",
+ "actions.runners.runner_manage_panel": "러너 관리",
+ "actions.runners.new": "새 러너 생성",
+ "actions.runners.new_notice": "러너를 시작하는 방법",
+ "actions.runners.status": "상태",
+ "actions.runners.id": "ID",
"actions.runners.name": "이름",
"actions.runners.owner_type": "유형",
"actions.runners.description": "설명",
+ "actions.runners.labels": "레이블",
+ "actions.runners.last_online": "최근 접속 시간",
+ "actions.runners.runner_title": "러너",
+ "actions.runners.task_list": "이 러너의 최근 작업",
+ "actions.runners.task_list.no_tasks": "아직 작업이 없습니다.",
"actions.runners.task_list.run": "실행",
- "actions.runners.task_list.repository": "저장소",
+ "actions.runners.task_list.status": "상태",
+ "actions.runners.task_list.repository": "리포지토리",
"actions.runners.task_list.commit": "커밋",
+ "actions.runners.task_list.done_at": "완료 시각",
+ "actions.runners.edit_runner": "러너 편집",
+ "actions.runners.update_runner": "변경사항 업데이트",
+ "actions.runners.update_runner_success": "러너가 성공적으로 업데이트됨",
+ "actions.runners.update_runner_failed": "러너 업데이트 실패함",
+ "actions.runners.delete_runner": "이 러너를 삭제",
+ "actions.runners.delete_runner_success": "러너가 성공적으로 삭제됨",
+ "actions.runners.delete_runner_failed": "러너 삭제를 실패함",
+ "actions.runners.delete_runner_header": "이 러너를 삭제할지 확인",
+ "actions.runners.delete_runner_notice": "이 러너에서 작업이 실행 중인 경우, 해당 작업은 종료되고 실패로 마킹됩니다. 이로 인해 빌드 워크플로가 중단될 수 있습니다.",
+ "actions.runners.none": "사용 가능한 러너가 없음",
+ "actions.runners.status.unspecified": "알수없음",
+ "actions.runners.status.idle": "유휴 상태",
"actions.runners.status.active": "사용",
+ "actions.runners.status.offline": "오프라인",
"actions.runners.version": "버전",
- "actions.runs.commit": "커밋"
+ "actions.runners.reset_registration_token": "등록 토큰을 리셋",
+ "actions.runners.reset_registration_token_confirm": "현재 토큰을 무효화하고 새 토큰을 생성하시겠습니까?",
+ "actions.runners.reset_registration_token_success": "러너 등록 토큰 성공적으로 리셋",
+ "actions.runs.all_workflows": "모든 워크플로",
+ "actions.runs.workflow_run_count_1": "%d 개 워크플로우 실행",
+ "actions.runs.workflow_run_count_n": "%d 개 워크플로우 실행",
+ "actions.runs.commit": "커밋",
+ "actions.runs.scheduled": "예약됨",
+ "actions.runs.pushed_by": "다음이 푸시함",
+ "actions.runs.invalid_workflow_helper": "워크플로 구성 파일이 유효하지 않습니다. 구성 파일을 확인하세요: %s",
+ "actions.runs.no_matching_online_runner_helper": "레이블과 일치하는 온라인 러너가 없습니다: %s",
+ "actions.runs.no_job_without_needs": "워크플로는 종속성이 없는 작업을 최소한 하나 포함해야 합니다.",
+ "actions.runs.no_job": "워크플로는 최소한 하나의 작업을 포함해야 합니다",
+ "actions.runs.actor": "액터",
+ "actions.runs.status": "상태",
+ "actions.runs.actors_no_select": "모든 액터",
+ "actions.runs.status_no_select": "모든 상태",
+ "actions.runs.no_results": "일치하는 결과가 없습니다.",
+ "actions.runs.no_workflows": "아직 워크플로가 없습니다.",
+ "actions.runs.no_workflows.quick_start": "Gitea Actions를 시작하는 방법을 모르시겠어요? 빠른 시작 가이드를 참조하세요.",
+ "actions.runs.no_workflows.documentation": "Gitea Actions에 대한 자세한 내용은 문서를 참조하세요.",
+ "actions.runs.no_runs": "워크플로는 아직 실행되지 않았습니다.",
+ "actions.runs.empty_commit_message": "(빈 커밋 메시지)",
+ "actions.runs.expire_log_message": "로그가 너무 오래되어 제거되었습니다.",
+ "actions.runs.delete": "워크플로우 실행 삭제",
+ "actions.runs.cancel": "워크플로우 실행 취소",
+ "actions.runs.delete.description": "이 워크플로우 실행을 영구적으로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
+ "actions.runs.not_done": "이 워크플로우 실행은 완료되지 않았습니다.",
+ "actions.runs.view_workflow_file": "워크플로우 파일 표시",
+ "actions.runs.workflow_graph": "워크플로우 그래프",
+ "actions.workflow.disable": "워크플로 비활성화",
+ "actions.workflow.disable_success": "워크플로 '%s'가 성공적으로 비활성화되었습니다.",
+ "actions.workflow.enable": "워크플로 활성화",
+ "actions.workflow.enable_success": "워크플로 '%s'가 성공적으로 활성화되었습니다.",
+ "actions.workflow.disabled": "워크플로가 비활성화되었습니다.",
+ "actions.workflow.run": "워크플로 실행",
+ "actions.workflow.not_found": "워크플로 '%s'를 찾을 수 없습니다.",
+ "actions.workflow.run_success": "워크플로 '%s'가 성공적으로 실행되었습니다.",
+ "actions.workflow.from_ref": "다음에서 워크플로 사용",
+ "actions.workflow.has_workflow_dispatch": "이 워크플로에는 workflow_dispatch 이벤트 트리거가 있습니다.",
+ "actions.workflow.has_no_workflow_dispatch": "워크플로 '%s'에는 workflow_dispatch 이벤트 트리거가 없습니다.",
+ "actions.need_approval_desc": "포크 풀 리퀘스트에 대한 워크플로를 실행하려면 승인이 필요합니다.",
+ "actions.approve_all_success": "모든 워크플로우 실행이 성공적으로 승인되었습니다.",
+ "actions.variables": "변수",
+ "actions.variables.management": "변수 관리",
+ "actions.variables.creation": "변수 추가",
+ "actions.variables.none": "아직 변수가 없습니다.",
+ "actions.variables.deletion": "변수 제거",
+ "actions.variables.deletion.description": "변수 제거는 영구적이며 되돌릴 수 없습니다. 계속하시겠습니까?",
+ "actions.variables.description": "변수는 특정 동작에 전달되며 다른 방법으로는 읽을 수 없습니다.",
+ "actions.variables.id_not_exist": "ID %d인 변수가 존재하지 않습니다.",
+ "actions.variables.edit": "변수 수정",
+ "actions.variables.deletion.failed": "변수 제거에 실패했습니다.",
+ "actions.variables.deletion.success": "변수가 제거되었습니다.",
+ "actions.variables.creation.failed": "변수 추가에 실패했습니다.",
+ "actions.variables.creation.success": "변수 \"%s\"가 추가되었습니다.",
+ "actions.variables.update.failed": "변수 수정에 실패했습니다.",
+ "actions.variables.update.success": "변수가 수정 되었습니다.",
+ "actions.logs.always_auto_scroll": "로그 자동 스크롤 항상 켜기",
+ "actions.logs.always_expand_running": "실행 중인 로그 항상 펼침",
+ "actions.general": "일반",
+ "actions.general.enable_actions": "동작 활성화",
+ "actions.general.collaborative_owners_management": "보조 소유자 관리",
+ "actions.general.collaborative_owners_management_help": "보조 소유자는 이 리포지토리의 액션 및 워크플로에 접근할 수 있는 개인 리포지토리를 가진 사용자 또는 조직입니다.",
+ "actions.general.add_collaborative_owner": "보조 소유자 추가",
+ "actions.general.collaborative_owner_not_exist": "보조 소유자가 존재하지 않습니다.",
+ "actions.general.remove_collaborative_owner": "보조 소유자 삭제",
+ "actions.general.remove_collaborative_owner_desc": "보조 소유자를 제거하면 해당 소유자의 리포지토리가 이 리포지토리의 액션에 접근하지 못하게 됩니다. 계속하시겠습니까?",
+ "projects.deleted.display_name": "삭제된 프로젝트",
+ "projects.type-1.display_name": "개인 프로젝트",
+ "projects.type-2.display_name": "리포지토리 프로젝트",
+ "projects.type-3.display_name": "조직 프로젝트",
+ "projects.enter_fullscreen": "전체 화면",
+ "projects.exit_fullscreen": "전체 화면 종료",
+ "git.filemode.changed_filemode": "%[1]s → %[2]s",
+ "git.filemode.directory": "디렉토리",
+ "git.filemode.normal_file": "일반",
+ "git.filemode.executable_file": "실행파일",
+ "git.filemode.symbolic_link": "Symlink",
+ "git.filemode.submodule": "서브모듈"
}
diff --git a/services/convert/git_commit_test.go b/services/convert/git_commit_test.go
index ad1cc0eca3..66a427fadf 100644
--- a/services/convert/git_commit_test.go
+++ b/services/convert/git_commit_test.go
@@ -11,7 +11,6 @@ import (
"code.gitea.io/gitea/models/unittest"
"code.gitea.io/gitea/modules/git"
api "code.gitea.io/gitea/modules/structs"
- "code.gitea.io/gitea/modules/util"
"github.com/stretchr/testify/assert"
)
@@ -35,7 +34,7 @@ func TestToCommitMeta(t *testing.T) {
assert.NotNil(t, commitMeta)
assert.Equal(t, &api.CommitMeta{
SHA: sha1.EmptyObjectID().String(),
- URL: util.URLJoin(headRepo.APIURL(), "git/commits", sha1.EmptyObjectID().String()),
+ URL: headRepo.APIURL() + "/git/commits/" + sha1.EmptyObjectID().String(),
Created: time.Unix(0, 0),
}, commitMeta)
}
diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go
index b23e5b1b1c..6bc339bc61 100644
--- a/services/gitdiff/gitdiff.go
+++ b/services/gitdiff/gitdiff.go
@@ -1477,38 +1477,40 @@ func SyncUserSpecificDiff(ctx context.Context, userID int64, pull *issues_model.
if errIgnored != nil {
log.Error("Could not get changed files between %s and %s for pull request %d in repo with path %s. Assuming no changes. Error: %w", review.CommitSHA, latestCommit, pull.Index, gitRepo.Path, err)
}
+ changedFilesSet := make(map[string]struct{}, len(changedFiles))
+ for _, changedFile := range changedFiles {
+ changedFilesSet[changedFile] = struct{}{}
+ }
filesChangedSinceLastDiff := make(map[string]pull_model.ViewedState)
-outer:
for _, diffFile := range diff.Files {
- fileViewedState := review.UpdatedFiles[diffFile.GetDiffFileName()]
-
- // Check whether it was previously detected that the file has changed since the last review
- if fileViewedState == pull_model.HasChanged {
- diffFile.HasChangedSinceLastReview = true
- continue
- }
-
filename := diffFile.GetDiffFileName()
+ fileViewedState := review.UpdatedFiles[filename]
- // Check explicitly whether the file has changed since the last review
- for _, changedFile := range changedFiles {
- diffFile.HasChangedSinceLastReview = filename == changedFile
- if diffFile.HasChangedSinceLastReview {
- filesChangedSinceLastDiff[filename] = pull_model.HasChanged
- continue outer // We don't want to check if the file is viewed here as that would fold the file, which is in this case unwanted
- }
- }
- // Check whether the file has already been viewed
- if fileViewedState == pull_model.Viewed {
+ if fileViewedState == pull_model.HasChanged { // Check whether it was previously detected that the file has changed since the last review
+ diffFile.HasChangedSinceLastReview = true
+ delete(changedFilesSet, filename)
+ } else if _, ok := changedFilesSet[filename]; ok { // Check explicitly whether the file has changed since the last review
+ diffFile.HasChangedSinceLastReview = true
+ filesChangedSinceLastDiff[filename] = pull_model.HasChanged
+ delete(changedFilesSet, filename)
+ } else if fileViewedState == pull_model.Viewed { // Check whether the file has already been viewed
diffFile.IsViewed = true
}
}
+ // All changed files still present at this point aren't part of the diff anymore, this occurs
+ // when a file was modified in a previous commit of the diff and the modification got reverted afterwards.
+ // Marking the files as unviewed to prevent errors where a non-existing file has a view state
+ for changedFile := range changedFilesSet {
+ if _, ok := review.UpdatedFiles[changedFile]; ok {
+ filesChangedSinceLastDiff[changedFile] = pull_model.Unviewed
+ }
+ }
+
if len(filesChangedSinceLastDiff) > 0 {
// Explicitly store files that have changed in the database, if any is present at all.
// This has the benefit that the "Has Changed" attribute will be present as long as the user does not explicitly mark this file as viewed, so it will even survive a page reload after marking another file as viewed.
- // On the other hand, this means that even if a commit reverting an unseen change is committed, the file will still be seen as changed.
updatedReview, err := pull_model.UpdateReviewState(ctx, review.UserID, review.PullID, review.CommitSHA, filesChangedSinceLastDiff)
if err != nil {
log.Warn("Could not update review for user %d, pull %d, commit %s and the changed files %v: %v", review.UserID, review.PullID, review.CommitSHA, filesChangedSinceLastDiff, err)
diff --git a/services/gitdiff/gitdiff_test.go b/services/gitdiff/gitdiff_test.go
index 62b17c223c..cfd99544cc 100644
--- a/services/gitdiff/gitdiff_test.go
+++ b/services/gitdiff/gitdiff_test.go
@@ -11,6 +11,7 @@ import (
"testing"
issues_model "code.gitea.io/gitea/models/issues"
+ pull_model "code.gitea.io/gitea/models/pull"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/git"
@@ -1143,3 +1144,96 @@ func TestHighlightCodeLines(t *testing.T) {
}, ret)
})
}
+
+func TestSyncUserSpecificDiff_UpdatedFiles(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
+ pull := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 7})
+ assert.NoError(t, pull.LoadBaseRepo(t.Context()))
+
+ stdin := `blob
+mark :1
+data 7
+change
+
+commit refs/heads/branch1
+mark :2
+committer test