Skip to content

Commit

Permalink
docs(ko): add Korean docs to the official site (#4052)
Browse files Browse the repository at this point in the history
  • Loading branch information
niceplugin authored Jul 17, 2024
1 parent 256d742 commit f7479ec
Show file tree
Hide file tree
Showing 44 changed files with 7,149 additions and 8 deletions.
3 changes: 2 additions & 1 deletion docs/.vitepress/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { zh } from './zh'
import { pt } from './pt'
import { ru } from './ru'
import { es } from './es'
import { ko } from './ko'

export default defineConfig({
...shared,
Expand All @@ -14,6 +15,6 @@ export default defineConfig({
pt: { label: 'Português', ...pt },
ru: { label: 'Русский', ...ru },
es: { label: 'Español', ...es },
ko: { label: '한국어', lang: 'ko-KR', link: 'https://vitepress.vuejs.kr/' }
ko: { label: '한국어', ...ko }
}
})
252 changes: 252 additions & 0 deletions docs/.vitepress/config/ko.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
import { createRequire } from 'module'
import { defineConfig, type DefaultTheme } from 'vitepress'

const require = createRequire(import.meta.url)
const pkg = require('vitepress/package.json')

export const ko = defineConfig({
lang: 'ko-KR',
description: 'Vite 및 Vue 기반 정적 사이트 생성기.',

themeConfig: {
nav: nav(),

sidebar: {
'/ko/guide/': { base: '/ko/guide/', items: sidebarGuide() },
'/ko/reference/': { base: '/ko/reference/', items: sidebarReference() }
},

editLink: {
pattern: 'https://github.com/vuejs/vitepress/edit/main/docs/:path',
text: 'GitHub에서 이 페이지를 편집하세요'
},

footer: {
message: 'Released under the MIT License.',
copyright: 'Copyright © 2019-present Evan You'
},

docFooter: {
prev: '이전',
next: '다음'
},

outline: {
label: '이 페이지에서'
},

lastUpdated: {
text: '업데이트 날짜'
},

langMenuLabel: '언어 변경',
returnToTopLabel: '맨 위로 돌아가기',
sidebarMenuLabel: '사이드바 메뉴',
darkModeSwitchLabel: '다크 모드',
lightModeSwitchTitle: '라이트 모드로 변경',
darkModeSwitchTitle: '다크 모드로 변경'
}
})

function nav(): DefaultTheme.NavItem[] {
return [
{
text: '가이드',
link: '/ko/guide/what-is-vitepress',
activeMatch: '/ko/guide/'
},
{
text: '레퍼런스',
link: '/ko/reference/site-config',
activeMatch: '/ko/reference/'
},
{
text: pkg.version,
items: [
{
text: '변경 로그',
link: 'https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md'
},
{
text: '기여',
link: 'https://github.com/vuejs/vitepress/blob/main/.github/contributing.md'
}
]
}
]
}

function sidebarGuide(): DefaultTheme.SidebarItem[] {
return [
{
text: '소개',
collapsed: false,
items: [
{
text: 'VitePress란 무엇인가?',
link: 'what-is-vitepress'
},
{
text: '시작하기',
link: 'getting-started'
},
{
text: '라우팅',
link: 'routing'
},
{
text: '배포하기',
link: 'deploy'
}
]
},
{
text: '글쓰기',
collapsed: false,
items: [
{
text: '마크다운 확장',
link: 'markdown'
},
{
text: '에셋 핸들링',
link: 'asset-handling'
},
{
text: '프론트마터',
link: 'frontmatter'
},
{
text: '마크다운에서 Vue 사용',
link: 'using-vue'
},
{
text: '국제화',
link: 'i18n'
}
]
},
{
text: '사용자 정의',
collapsed: false,
items: [
{
text: '맞춤 테마 사용',
link: 'custom-theme'
},
{
text: '기본 테마 확장',
link: 'extending-default-theme'
},
{
text: '빌드할 때 데이터 로딩',
link: 'data-loading'
},
{
text: 'SSR 호환성',
link: 'ssr-compat'
},
{
text: 'CMS 연결',
link: 'cms'
}
]
},
{
text: '실험적인',
collapsed: false,
items: [
{
text: 'MPA 모드',
link: 'mpa-mode'
},
{
text: '사이트맵 생성',
link: 'sitemap-generation'
}
]
},
{
text: '설정 & API 참조',
base: '/ko/reference/',
link: 'site-config'
}
]
}

function sidebarReference(): DefaultTheme.SidebarItem[] {
return [
{
text: '레퍼런스',
items: [
{ text: '사이트 구성', link: 'site-config' },
{ text: '머리말 구성', link: 'frontmatter-config' },
{ text: '런타임 API', link: 'runtime-api' },
{ text: 'CLI', link: 'cli' },
{
text: '기본 테마',
base: '/ko/reference/default-theme-',
items: [
{ text: '개요', link: 'config' },
{ text: '네비게이션', link: 'nav' },
{ text: '사이드바', link: 'sidebar' },
{ text: '홈 페이지', link: 'home-page' },
{ text: '푸터', link: 'footer' },
{ text: '레이아웃', link: 'layout' },
{ text: '배지', link: 'badge' },
{ text: '팀 페이지', link: 'team-page' },
{ text: '이전 / 다음 링크', link: 'prev-next-links' },
{ text: '편집 링크', link: 'edit-link' },
{ text: '마지막 업데이트 시간', link: 'last-updated' },
{ text: '검색', link: 'search' },
{ text: '카본 광고', link: 'carbon-ads' }
]
}
]
}
]
}

export const search: DefaultTheme.AlgoliaSearchOptions['locales'] = {
ko: {
placeholder: '문서 검색',
translations: {
button: {
buttonText: '검색',
buttonAriaLabel: '검색'
},
modal: {
searchBox: {
resetButtonTitle: '검색 지우기',
resetButtonAriaLabel: '검색 지우기',
cancelButtonText: '취소',
cancelButtonAriaLabel: '취소'
},
startScreen: {
recentSearchesTitle: '검색 기록',
noRecentSearchesText: '최근 검색 없음',
saveRecentSearchButtonTitle: '검색 기록에 저장',
removeRecentSearchButtonTitle: '검색 기록에서 삭제',
favoriteSearchesTitle: '즐겨찾기',
removeFavoriteSearchButtonTitle: '즐겨찾기에서 삭제'
},
errorScreen: {
titleText: '결과를 가져올 수 없습니다',
helpText: '네트워크 연결을 확인하세요'
},
footer: {
selectText: '선택',
navigateText: '탐색',
closeText: '닫기',
searchByText: '검색 기준'
},
noResultsScreen: {
noResultsText: '결과를 찾을 수 없습니다',
suggestedQueryText: '새로운 검색을 시도할 수 있습니다',
reportMissingResultsText: '해당 검색어에 대한 결과가 있어야 합니까?',
reportMissingResultsLinkText: '피드백 보내기 클릭'
}
}
}
}
}
9 changes: 8 additions & 1 deletion docs/.vitepress/config/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { search as zhSearch } from './zh'
import { search as ptSearch } from './pt'
import { search as ruSearch } from './ru'
import { search as esSearch } from './es'
import { search as koSearch } from './ko'

export const shared = defineConfig({
title: 'VitePress',
Expand Down Expand Up @@ -61,7 +62,13 @@ export const shared = defineConfig({
appId: '8J64VVRP8K',
apiKey: 'a18e2f4cc5665f6602c5631fd868adfd',
indexName: 'vitepress',
locales: { ...zhSearch, ...ptSearch, ...ruSearch, ...esSearch }
locales: {
...zhSearch,
...ptSearch,
...ruSearch,
...esSearch,
...koSearch
}
}
},

Expand Down
63 changes: 63 additions & 0 deletions docs/ko/guide/asset-handling.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# 자산 처리 {#asset-handling}

## 정적 자산 참조하기 {#referencing-static-assets}

모든 Markdown 파일은 Vue 컴포넌트로 컴파일되며 [Vite](https://vitejs.dev/ko/guide/assets.html)에 의해 처리됩니다. 상대 URL을 사용하여 어떠한 자산도 참조할 수 **있으며 해야 합니다**:

```md
![이미지](./image.png)
```

Markdown 파일, 테마의 `*.vue` 컴포넌트, 스타일 및 일반 `.css` 파일에서 정적 자산을 참조할 수 있으며, 절대 공개 경로(프로젝트 루트를 기준으로 함) 또는 상대 경로(파일 시스템을 기준으로 함)를 사용할 수 있습니다. 후자는 Vite, Vue CLI 또는 webpack의 `file-loader`를 사용해 본 적이 있다면 익숙한 동작 방식과 유사합니다.

일반적인 이미지, 미디어, 폰트 파일 유형은 자동으로 자산으로 감지되어 포함됩니다.

::: tip 링크된 파일은 자산으로 취급되지 않음
Markdown 파일 내의 링크로 참조된 PDF 또는 기타 문서는 자동으로 자산으로 취급되지 않습니다. 링크된 파일을 접근 가능하게 만들기 위해서는 수동으로 해당 파일을 프로젝트의 [`public`](#the-public-directory) 디렉토리에 배치해야 합니다.
:::

절대 경로를 포함한 모든 참조된 자산은 생산 빌드에서 해시된 파일 이름으로 출력 디렉토리에 복사됩니다. 참조되지 않은 자산은 복사되지 않습니다. 4kb보다 작은 이미지 자산은 base64 인라인으로 처리됩니다 - 이는 [`vite`](../reference/site-config#vite) 구성 옵션을 통해 설정할 수 있습니다.

모든 **정적** 경로 참조, 절대 경로를 포함하여, 작업 디렉토리 구조를 기반으로 해야 합니다.

## Public 디렉토리 {#the-public-directory}

Markdown이나 테마 컴포넌트에서 직접 참조되지 않은 정적 자산을 제공할 필요가 있거나, 특정 파일을 원본 파일명으로 제공하고 싶은 경우가 있을 수 있습니다. 이러한 파일의 예로는 `robots.txt`, 파비콘, PWA 아이콘이 있습니다.

이 파일들은 [소스 디렉토리](./routing#source-directory) 아래의 `public` 디렉토리에 배치할 수 있습니다. 예를 들어, 프로젝트 루트가 `./docs`이고 기본 소스 디렉토리 위치를 사용한다면, public 디렉토리는 `./docs/public`이 됩니다.

`public`에 배치된 자산은 그대로 출력 디렉토리의 루트로 복사됩니다.

`public`에 배치된 파일을 참조할 때는 루트 절대 경로를 사용해야 한다는 점에 유의하세요 - 예를 들어, `public/icon.png`는 소스 코드에서 항상 `/icon.png`로 참조되어야 합니다.

## 기본 URL {#base-url}

사이트가 루트 URL이 아닌 곳에 배포되는 경우, `.vitepress/config.js`에서 `base` 옵션을 설정해야 합니다. 예를 들어, 사이트를 `https://foo.github.io/bar/`에 배포할 계획이라면, `base``'/bar/'`(항상 슬래시로 시작하고 끝나야 함)로 설정해야 합니다.

모든 정적 자산 경로는 다양한 `base` 구성 값에 맞게 자동으로 처리됩니다. 예를 들어, 마크다운에서 `public` 아래에 있는 자산에 대한 절대 참조가 있는 경우:

```md
![이미지](/image-inside-public.png)
```

이 경우 `base` 구성 값을 변경하더라도 업데이트할 필요가 **없습니다**.

그러나 자산을 동적으로 연결하는 테마 컴포넌트를 작성하는 경우, 예를 들어 테마 구성 값에 기반한 이미지의 `src`가 있는 경우:

```vue
<img :src="theme.logoPath" />
```

이 경우 VitePress에 제공되는 [`withBase` 헬퍼](../reference/runtime-api#withbase)로 경로를 래핑하는 것이 권장됩니다:

```vue
<script setup>
import { withBase, useData } from 'vitepress'
const { theme } = useData()
</script>
<template>
<img :src="withBase(theme.logoPath)" />
</template>
```
Loading

0 comments on commit f7479ec

Please sign in to comment.