diff --git a/README_ko.md b/README_ko.md
new file mode 120000
index 00000000..94efb11c
--- /dev/null
+++ b/README_ko.md
@@ -0,0 +1 @@
+packages/stac/README_ko.md
\ No newline at end of file
diff --git a/packages/stac/README_ko.md b/packages/stac/README_ko.md
new file mode 100644
index 00000000..7db1c04b
--- /dev/null
+++ b/packages/stac/README_ko.md
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 웹사이트 •
+ 콘솔 •
+ 빠른 시작 •
+ 문서 •
+ 커뮤니티 & 지원 •
+ GitHub
+
+
+# Stac
+
+**Stac**은 **Flutter를 위한 Server-Driven UI (SDUI) 프레임워크**로, 앱을 재배포하지 않고도 동적 사용자 인터페이스를 구축, 업데이트 및 제공할 수 있습니다.
+Flutter에서 모든 위젯을 하드코딩하는 대신, JSON에서 런타임에 렌더링되는 **Stac Widgets**으로 UI를 정의합니다.
+
+이 접근 방식은 앱의 프레젠테이션 레이어와 비즈니스 로직을 분리하여 팀이 다음을 수행할 수 있도록 합니다:
+
+- **즉시 업데이트 배포.** StacWidgets를 업데이트하고 Stac Cloud에 푸시하기만 하면 됩니다.
+- **기능 실험** (A/B 테스팅, 개인화 등)을 새로운 릴리스 없이 수행할 수 있습니다.
+- 통합 스키마를 사용하여 **플랫폼 간 일관성 유지**가 가능합니다.
+- 디자이너나 PM과 같은 **비개발자도 레이아웃과 콘텐츠를 관리**할 수 있습니다.
+
+## 주요 기능
+
+- 🚀 즉시 업데이트: 앱 스토어 릴리스 없이 UI 배포
+- 🧩 JSON 기반 UI: JSON으로 위젯을 정의하고 네이티브로 렌더링
+- 📦 Dart에서 JSON으로: Dart로 Stac 위젯을 작성하고 Stac Cloud에 배포
+- 🎛 액션 & 내비게이션: 백엔드에서 라우트와 API 호출 제어
+- 📝 폼 & 검증: 내장된 폼 상태 및 검증 규칙
+- 🎨 테마: Stac Theme을 통한 JSON 기반 브랜드 및 레이아웃
+- 🔌 확장 가능: 커스텀 위젯, 액션 및 네이티브 통합 추가 가능
+
+## 문서
+
+- 📚 **[전체 문서](https://docs.stac.dev/)** – 완전한 가이드 및 API 레퍼런스
+- 🚀 **[빠른 시작](https://docs.stac.dev/quickstart)** – 몇 분 안에 시작하기
+- 🛠️ **[Stac CLI](https://docs.stac.dev/cli)** – 개발을 위한 커맨드라인 도구
+- 🎛️ **[Stac Console](https://console.stac.dev/)** – 앱 관리를 위한 웹 인터페이스
+- 🤝 **[기여하기](https://github.com/StacDev/stac/blob/dev/CONTRIBUTING.md)** – Stac 구축에 참여하기
+
+## 라이선스
+
+이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 [LICENSE](/LICENSE) 파일을 참조하세요.
+
+## 커뮤니티 참여
+
+- 💬 **[Discord](https://discord.com/invite/vTGsVRK86V)** – 커뮤니티와 채팅하고 도움 받기
+- 🐙 **[GitHub](https://github.com/StacDev/stac)** – 이슈 보고 및 기여
+- 🐦 **[X](https://x.com/stac_dev)** – 업데이트 팔로우
+
+---
+
+Stac 팀과 멋진 커뮤니티가 💙로 개발했습니다
+
+
+
+
+
+
+
+[github_stars]: https://img.shields.io/github/stars/StacDev/stac
+[github_stars_link]: https://github.com/StacDev/stac/stargazers
+[license_badge]: https://img.shields.io/badge/license-MIT-blue.png
+[license_link]: https://opensource.org/licenses/MIT
+[stac_banner]: https://raw.githubusercontent.com/StacDev/stac/refs/heads/dev/assets/stac_banner.png
+[form_screen]: https://raw.githubusercontent.com/StacDev/stac/refs/heads/dev/assets/form_screen_image.png
+[divyanshu_github]: https://github.com/divyanshub024
+[rahul_linkedin]: https://www.linkedin.com/in/bybisht
+[stac_website]: https://stac.dev/
diff --git a/website/docs/actions/dialog..md b/website/docs/actions/dialog.md
similarity index 100%
rename from website/docs/actions/dialog..md
rename to website/docs/actions/dialog.md
diff --git a/website/docs/widgets/gesture_detector.md b/website/docs/widgets/gesture_detector.md
index 9322c1e6..45f81f02 100644
--- a/website/docs/widgets/gesture_detector.md
+++ b/website/docs/widgets/gesture_detector.md
@@ -205,4 +205,4 @@ To use a GestureDetector in your Stac JSON, specify the widget type as "gestureD
Each gesture callback in Stac GestureDetector accepts an action object that defines what should happen when the gesture is detected. This can be a navigation action, showing a dialog, executing a custom function, or any other action supported by your Stac application.
-For more information on actions, see the [Actions documentation](../actions/overview.md).
+For more information on actions, see the [Actions documentation](../actions/).
diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts
index 316a25c1..cbf64da7 100644
--- a/website/docusaurus.config.ts
+++ b/website/docusaurus.config.ts
@@ -28,7 +28,17 @@ const config: Config = {
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
- locales: ['en'],
+ locales: ['en', 'ko'],
+ localeConfigs: {
+ en: {
+ label: 'English',
+ direction: 'ltr',
+ },
+ ko: {
+ label: '한국어',
+ direction: 'ltr',
+ },
+ },
},
presets: [
@@ -84,6 +94,10 @@ const config: Config = {
label: 'GitHub',
position: 'right',
},
+ {
+ type: 'localeDropdown',
+ position: 'right',
+ },
],
},
footer: {
diff --git a/website/i18n/TRANSLATION_GUIDE.md b/website/i18n/TRANSLATION_GUIDE.md
new file mode 100644
index 00000000..eb3becab
--- /dev/null
+++ b/website/i18n/TRANSLATION_GUIDE.md
@@ -0,0 +1,132 @@
+# Stac Documentation Translation Guide (Korean)
+
+## Translation Principles
+
+1. **Technical Accuracy**: Maintain technical precision in all translations
+2. **Consistency**: Use the same Korean terms for the same English concepts
+3. **Natural Korean**: Write in natural, fluent Korean while preserving technical meaning
+4. **Code Preservation**: Keep all code examples, JSON, and syntax unchanged
+
+## Terminology Glossary
+
+### Core Concepts
+- **Widget** → **위젯** (keep as-is, commonly used in Korean dev community)
+- **Action** → **액션** (keep as-is)
+- **Parser** → **파서** (keep as-is)
+- **Server-Driven UI** → **서버 주도 UI** or **SDUI** (use SDUI for brevity)
+- **Framework** → **프레임워크**
+- **Package** → **패키지**
+- **Playground** → **플레이그라운드**
+
+### UI Components
+- **Button** → **버튼**
+- **Container** → **컨테이너**
+- **Text** → **텍스트**
+- **Image** → **이미지**
+- **Icon** → **아이콘**
+- **Dialog** → **다이얼로그**
+- **Modal** → **모달**
+- **Snackbar** → **스낵바**
+- **App Bar** → **앱 바**
+- **Navigation** → **내비게이션**
+- **Drawer** → **드로어**
+- **Scaffold** → **스캐폴드**
+- **Column** → **칼럼**
+- **Row** → **로우**
+- **Stack** → **스택**
+- **Grid** → **그리드**
+- **List** → **리스트**
+
+### Actions & Events
+- **Navigate** → **이동** or **내비게이트**
+- **Network Request** → **네트워크 요청**
+- **Form Validation** → **폼 검증**
+- **Delay** → **지연**
+- **Multi Action** → **멀티 액션**
+- **Tap** → **탭** or **터치**
+- **Click** → **클릭**
+- **Swipe** → **스와이프**
+
+### Styles & Properties
+- **Border** → **테두리**
+- **Radius** → **반경**
+- **Padding** → **패딩**
+- **Margin** → **마진**
+- **Alignment** → **정렬**
+- **Color** → **색상**
+- **Opacity** → **불투명도**
+- **Clip** → **클립**
+
+### Development Terms
+- **Property** → **속성**
+- **Parameter** → **매개변수** or **파라미터**
+- **Attribute** → **속성**
+- **Value** → **값**
+- **Type** → **타입** or **유형**
+- **String** → **문자열**
+- **Boolean** → **불린** or **불리언**
+- **Integer** → **정수**
+- **Double** → **실수**
+- **Object** → **객체**
+- **Array** → **배열**
+- **Null** → **null** (keep as-is)
+- **Optional** → **선택 사항** or **옵션**
+- **Required** → **필수**
+- **Default** → **기본값**
+
+### Actions
+- **Install** → **설치하다**
+- **Import** → **가져오다** or **임포트하다**
+- **Add** → **추가하다**
+- **Remove** → **제거하다**
+- **Update** → **업데이트하다**
+- **Build** → **빌드하다**
+- **Run** → **실행하다**
+- **Deploy** → **배포하다**
+
+### Common Phrases
+- **Get Started** → **시작하기**
+- **Learn more** → **자세히 알아보기**
+- **Note** → **참고**
+- **Warning** → **경고**
+- **Example** → **예제**
+- **Usage** → **사용법**
+- **Description** → **설명**
+- **See also** → **참고**
+
+## Style Guidelines
+
+### Tone
+- Use **반말 (informal)** style for consistency with most Korean tech documentation
+- Example: "이 위젯은..." not "이 위젯은...입니다"
+- Exception: Use formal tone for warnings, notes, and important notices
+
+### Sentence Structure
+- Prefer active voice
+- Keep sentences concise and clear
+- Break long sentences into shorter ones for readability
+
+### Code Comments
+- Translate comments in code examples to Korean
+- Keep variable names and function names in English
+- Translate string values when they represent user-facing text
+
+### Links and URLs
+- Keep all URLs unchanged
+- Translate link text to Korean
+
+### Markdown Formatting
+- Preserve all markdown formatting (headers, lists, code blocks, etc.)
+- Keep admonitions (:::note, :::warning, etc.) in English
+- Translate the content inside admonitions
+
+## Quality Checklist
+
+Before submitting translation:
+- [ ] All technical terms use consistent Korean translations
+- [ ] Code examples are unchanged
+- [ ] Links work correctly
+- [ ] Markdown formatting is preserved
+- [ ] No English sentences remain (except in code/URLs)
+- [ ] Natural Korean flow and readability
+- [ ] Technical accuracy verified
diff --git a/website/i18n/ko/code.json b/website/i18n/ko/code.json
new file mode 100644
index 00000000..e920645e
--- /dev/null
+++ b/website/i18n/ko/code.json
@@ -0,0 +1,313 @@
+{
+ "theme.ErrorPageContent.title": {
+ "message": "페이지에 오류가 발생하였습니다.",
+ "description": "The title of the fallback page when the page crashed"
+ },
+ "theme.BackToTopButton.buttonAriaLabel": {
+ "message": "맨 위로 스크롤하기",
+ "description": "The ARIA label for the back to top button"
+ },
+ "theme.blog.archive.title": {
+ "message": "게시물 목록",
+ "description": "The page & hero title of the blog archive page"
+ },
+ "theme.blog.archive.description": {
+ "message": "게시물 목록",
+ "description": "The page & hero description of the blog archive page"
+ },
+ "theme.blog.paginator.navAriaLabel": {
+ "message": "블로그 게시물 목록 탐색",
+ "description": "The ARIA label for the blog pagination"
+ },
+ "theme.blog.paginator.newerEntries": {
+ "message": "이전 페이지",
+ "description": "The label used to navigate to the newer blog posts page (previous page)"
+ },
+ "theme.blog.paginator.olderEntries": {
+ "message": "다음 페이지",
+ "description": "The label used to navigate to the older blog posts page (next page)"
+ },
+ "theme.blog.post.paginator.navAriaLabel": {
+ "message": "블로그 게시물 탐색",
+ "description": "The ARIA label for the blog posts pagination"
+ },
+ "theme.blog.post.paginator.newerPost": {
+ "message": "이전 게시물",
+ "description": "The blog post button label to navigate to the newer/previous post"
+ },
+ "theme.blog.post.paginator.olderPost": {
+ "message": "다음 게시물",
+ "description": "The blog post button label to navigate to the older/next post"
+ },
+ "theme.tags.tagsPageLink": {
+ "message": "모든 태그 보기",
+ "description": "The label of the link targeting the tag list page"
+ },
+ "theme.colorToggle.ariaLabel": {
+ "message": "어두운 모드와 밝은 모드 전환하기 (현재 {mode})",
+ "description": "The ARIA label for the navbar color mode toggle"
+ },
+ "theme.colorToggle.ariaLabel.mode.dark": {
+ "message": "어두운 모드",
+ "description": "The name for the dark color mode"
+ },
+ "theme.colorToggle.ariaLabel.mode.light": {
+ "message": "밝은 모드",
+ "description": "The name for the light color mode"
+ },
+ "theme.docs.breadcrumbs.navAriaLabel": {
+ "message": "Breadcrumbs",
+ "description": "The ARIA label for the breadcrumbs"
+ },
+ "theme.docs.DocCard.categoryDescription.plurals": {
+ "message": "{count} 항목",
+ "description": "The default description for a category card in the generated index about how many items this category includes"
+ },
+ "theme.docs.paginator.navAriaLabel": {
+ "message": "문서 페이지",
+ "description": "The ARIA label for the docs pagination"
+ },
+ "theme.docs.paginator.previous": {
+ "message": "이전",
+ "description": "The label used to navigate to the previous doc"
+ },
+ "theme.docs.paginator.next": {
+ "message": "다음",
+ "description": "The label used to navigate to the next doc"
+ },
+ "theme.docs.tagDocListPageTitle.nDocsTagged": {
+ "message": "{count}개 문서가",
+ "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.docs.tagDocListPageTitle": {
+ "message": "{nDocsTagged} \"{tagName}\" 태그에 분류되었습니다",
+ "description": "The title of the page for a docs tag"
+ },
+ "theme.docs.versions.unreleasedVersionLabel": {
+ "message": "{siteTitle} {versionLabel} 문서는 아직 정식 공개되지 않았습니다.",
+ "description": "The label used to tell the user that he's browsing an unreleased doc version"
+ },
+ "theme.docs.versions.unmaintainedVersionLabel": {
+ "message": "{siteTitle} {versionLabel} 문서는 더 이상 업데이트되지 않습니다.",
+ "description": "The label used to tell the user that he's browsing an unmaintained doc version"
+ },
+ "theme.docs.versions.latestVersionSuggestionLabel": {
+ "message": "최신 문서는 {latestVersionLink} ({versionLabel})을 확인하세요.",
+ "description": "The label used to tell the user to check the latest version"
+ },
+ "theme.docs.versions.latestVersionLinkLabel": {
+ "message": "최신 버전",
+ "description": "The label used for the latest version suggestion link label"
+ },
+ "theme.common.editThisPage": {
+ "message": "페이지 편집",
+ "description": "The link label to edit the current page"
+ },
+ "theme.docs.versionBadge.label": {
+ "message": "버전: {versionLabel}"
+ },
+ "theme.common.headingLinkTitle": {
+ "message": "{heading}에 대한 직접 링크",
+ "description": "Title for link to heading"
+ },
+ "theme.lastUpdated.atDate": {
+ "message": " {date}에",
+ "description": "The words used to describe on which date a page has been last updated"
+ },
+ "theme.lastUpdated.byUser": {
+ "message": " {user}가",
+ "description": "The words used to describe by who the page has been last updated"
+ },
+ "theme.lastUpdated.lastUpdatedAtBy": {
+ "message": "최종 수정: {atDate}{byUser}",
+ "description": "The sentence used to display when a page has been last updated, and by who"
+ },
+ "theme.navbar.mobileVersionsDropdown.label": {
+ "message": "버전",
+ "description": "The label for the navbar versions dropdown on mobile view"
+ },
+ "theme.NotFound.title": {
+ "message": "페이지를 찾을 수 없습니다.",
+ "description": "The title of the 404 page"
+ },
+ "theme.tags.tagsListLabel": {
+ "message": "태그:",
+ "description": "The label alongside a tag list"
+ },
+ "theme.admonition.caution": {
+ "message": "주의",
+ "description": "The default label used for the Caution admonition (:::caution)"
+ },
+ "theme.admonition.danger": {
+ "message": "위험",
+ "description": "The default label used for the Danger admonition (:::danger)"
+ },
+ "theme.admonition.info": {
+ "message": "정보",
+ "description": "The default label used for the Info admonition (:::info)"
+ },
+ "theme.admonition.note": {
+ "message": "노트",
+ "description": "The default label used for the Note admonition (:::note)"
+ },
+ "theme.admonition.tip": {
+ "message": "팁",
+ "description": "The default label used for the Tip admonition (:::tip)"
+ },
+ "theme.admonition.warning": {
+ "message": "경고",
+ "description": "The default label used for the Warning admonition (:::warning)"
+ },
+ "theme.AnnouncementBar.closeButtonAriaLabel": {
+ "message": "닫기",
+ "description": "The ARIA label for close button of announcement bar"
+ },
+ "theme.blog.sidebar.navAriaLabel": {
+ "message": "최근 블로그 문서 둘러보기",
+ "description": "The ARIA label for recent posts in the blog sidebar"
+ },
+ "theme.CodeBlock.wordWrapToggle": {
+ "message": "줄 바꿈 전환",
+ "description": "The title attribute for toggle word wrapping button of code block lines"
+ },
+ "theme.CodeBlock.copied": {
+ "message": "복사했습니다",
+ "description": "The copied button label on code blocks"
+ },
+ "theme.CodeBlock.copyButtonAriaLabel": {
+ "message": "클립보드에 코드 복사",
+ "description": "The ARIA label for copy code blocks button"
+ },
+ "theme.CodeBlock.copy": {
+ "message": "복사",
+ "description": "The copy button label on code blocks"
+ },
+ "theme.DocSidebarItem.expandCategoryAriaLabel": {
+ "message": "사이드바 분류 '{label}' 펼치기",
+ "description": "The ARIA label to expand the sidebar category"
+ },
+ "theme.DocSidebarItem.collapseCategoryAriaLabel": {
+ "message": "사이드바 분류 '{label}' 접기",
+ "description": "The ARIA label to collapse the sidebar category"
+ },
+ "theme.NavBar.navAriaLabel": {
+ "message": "메인",
+ "description": "The ARIA label for the main navigation"
+ },
+ "theme.navbar.mobileLanguageDropdown.label": {
+ "message": "언어",
+ "description": "The label for the mobile language switcher dropdown"
+ },
+ "theme.NotFound.p1": {
+ "message": "원하는 페이지를 찾을 수 없습니다.",
+ "description": "The first paragraph of the 404 page"
+ },
+ "theme.NotFound.p2": {
+ "message": "사이트 관리자에게 링크가 깨진 것을 알려주세요.",
+ "description": "The 2nd paragraph of the 404 page"
+ },
+ "theme.TOCCollapsible.toggleButtonLabel": {
+ "message": "이 페이지에서",
+ "description": "The label used by the button on the collapsible TOC component"
+ },
+ "theme.blog.post.readingTime.plurals": {
+ "message": "약 {readingTime}분",
+ "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.blog.post.readMore": {
+ "message": "자세히 보기",
+ "description": "The label used in blog post item excerpts to link to full blog posts"
+ },
+ "theme.blog.post.readMoreLabel": {
+ "message": "{title} 에 대해 더 읽어보기",
+ "description": "The ARIA label for the link to full blog posts from excerpts"
+ },
+ "theme.docs.sidebar.collapseButtonTitle": {
+ "message": "사이드바 숨기기",
+ "description": "The title attribute for collapse button of doc sidebar"
+ },
+ "theme.docs.sidebar.collapseButtonAriaLabel": {
+ "message": "사이드바 숨기기",
+ "description": "The title attribute for collapse button of doc sidebar"
+ },
+ "theme.docs.sidebar.navAriaLabel": {
+ "message": "문서 사이드바",
+ "description": "The ARIA label for the sidebar navigation"
+ },
+ "theme.docs.breadcrumbs.home": {
+ "message": "홈",
+ "description": "The ARIA label for the home page in the breadcrumbs"
+ },
+ "theme.docs.sidebar.closeSidebarButtonAriaLabel": {
+ "message": "사이드바 닫기",
+ "description": "The ARIA label for close button of mobile sidebar"
+ },
+ "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
+ "message": "← 메인 메뉴로 돌아가기",
+ "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
+ },
+ "theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
+ "message": "사이드바 펼치거나 접기",
+ "description": "The ARIA label for hamburger menu button of mobile navigation"
+ },
+ "theme.docs.sidebar.expandButtonTitle": {
+ "message": "사이드바 열기",
+ "description": "The ARIA label and title attribute for expand button of doc sidebar"
+ },
+ "theme.docs.sidebar.expandButtonAriaLabel": {
+ "message": "사이드바 열기",
+ "description": "The ARIA label and title attribute for expand button of doc sidebar"
+ },
+ "theme.blog.post.plurals": {
+ "message": "{count}개 게시물",
+ "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.blog.tagTitle": {
+ "message": "\"{tagName}\" 태그로 연결된 {nPosts}개의 게시물이 있습니다.",
+ "description": "The title of the page for a blog tag"
+ },
+ "theme.blog.author.pageTitle": {
+ "message": "{authorName} - {nPosts}",
+ "description": "The title of the page for a blog author"
+ },
+ "theme.blog.authorsList.pageTitle": {
+ "message": "저자",
+ "description": "The title of the authors page"
+ },
+ "theme.blog.authorsList.viewAll": {
+ "message": "모든 저자 보기",
+ "description": "The label of the link targeting the blog authors page"
+ },
+ "theme.blog.author.noPosts": {
+ "message": "이 저자는 아직 게시물을 작성하지 않았습니다.",
+ "description": "The text for authors with 0 blog post"
+ },
+ "theme.contentVisibility.unlistedBanner.title": {
+ "message": "색인되지 않은 문서",
+ "description": "The unlisted content banner title"
+ },
+ "theme.contentVisibility.unlistedBanner.message": {
+ "message": "이 문서는 색인되지 않습니다. 검색 엔진이 이 문서를 색인하지 않으며, 주소를 알고 있는 사용자만 접근할 수 있습니다.",
+ "description": "The unlisted content banner message"
+ },
+ "theme.contentVisibility.draftBanner.title": {
+ "message": "초안 페이지",
+ "description": "The draft content banner title"
+ },
+ "theme.contentVisibility.draftBanner.message": {
+ "message": "이 페이지는 초안입니다. 개발 중에만 표시되며 프로덕션 빌드에서는 제외됩니다.",
+ "description": "The draft content banner message"
+ },
+ "theme.ErrorPageContent.tryAgain": {
+ "message": "다시 시도해 보세요",
+ "description": "The label of the button to try again rendering when the React error boundary captures an error"
+ },
+ "theme.common.skipToMainContent": {
+ "message": "본문으로 건너뛰기",
+ "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
+ },
+ "theme.tags.tagsPageTitle": {
+ "message": "태그",
+ "description": "The title of the tag list page"
+ }
+}
diff --git a/website/i18n/ko/docusaurus-plugin-content-blog/options.json b/website/i18n/ko/docusaurus-plugin-content-blog/options.json
new file mode 100644
index 00000000..9239ff70
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-blog/options.json
@@ -0,0 +1,14 @@
+{
+ "title": {
+ "message": "Blog",
+ "description": "The title for the blog used in SEO"
+ },
+ "description": {
+ "message": "Blog",
+ "description": "The description for the blog used in SEO"
+ },
+ "sidebar.title": {
+ "message": "Recent posts",
+ "description": "The label for the left sidebar"
+ }
+}
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current.json b/website/i18n/ko/docusaurus-plugin-content-docs/current.json
new file mode 100644
index 00000000..c5afb4e2
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current.json
@@ -0,0 +1,38 @@
+{
+ "version.label": {
+ "message": "최신",
+ "description": "The label for version current"
+ },
+ "sidebar.tutorialSidebar.category.Concepts": {
+ "message": "핵심 개념",
+ "description": "The label for category Concepts in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Concepts.link.generated-index.description": {
+ "message": "Stac의 핵심 개념을 학습합니다.",
+ "description": "The generated-index page description for category Concepts in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Stac Widgets": {
+ "message": "Stac 위젯",
+ "description": "The label for category Stac Widgets in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Stac Widgets.link.generated-index.description": {
+ "message": "Stac이 제공하는 다양한 위젯을 학습합니다",
+ "description": "The generated-index page description for category Stac Widgets in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Stac Actions": {
+ "message": "Stac 액션",
+ "description": "The label for category Stac Actions in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Stac Actions.link.generated-index.description": {
+ "message": "Stac이 제공하는 다양한 액션을 학습합니다",
+ "description": "The generated-index page description for category Stac Actions in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Stac Styles": {
+ "message": "Stac 스타일",
+ "description": "The label for category Stac Styles in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Stac Styles.link.generated-index.description": {
+ "message": "Stac이 제공하는 다양한 스타일을 학습합니다",
+ "description": "The generated-index page description for category Stac Styles in sidebar tutorialSidebar"
+ }
+}
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/_category_.json b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/_category_.json
new file mode 100644
index 00000000..53cdc64b
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Stac 액션",
+ "position": 5,
+ "link": {
+ "type": "generated-index",
+ "description": "Stac이 제공하는 다양한 액션을 학습합니다"
+ }
+}
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/delay_action.md b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/delay_action.md
new file mode 100644
index 00000000..220937e0
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/delay_action.md
@@ -0,0 +1,18 @@
+# Delay Action
+
+`StacDelayAction`은 지정된 시간 동안 아무 작업도 수행하지 않고 대기할 수 있게 합니다.
+
+## Delay Action 속성
+
+| Property | Type | Description |
+| --- |-------------------|---------------------------------------------------|
+| milliseconds | `int` | 대기할 시간(밀리초 단위) |
+
+## Delay Action JSON
+
+```json
+{
+ "actionType": "delay",
+ "milliseconds": 1000
+}
+```
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/dialog.md b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/dialog.md
new file mode 100644
index 00000000..29200ab9
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/dialog.md
@@ -0,0 +1,51 @@
+# Dialog Action
+
+`StacDialogAction` 클래스는 Stac 애플리케이션에서 다이얼로그를 표시하는 데 사용됩니다.
+
+## 속성
+
+| Property | Type | Description |
+|------------------------|-------------------------------|-----------------------------------------------------------------------------|
+| widget | `Map?` | 다이얼로그 내부에 표시할 widget. |
+| request | `StacNetworkRequest?` | 다이얼로그를 표시하기 전에 수행할 네트워크 요청. |
+| assetPath | `String?` | 다이얼로그 내부에 표시할 widget의 asset 경로. |
+| barrierDismissible | `bool` | 다이얼로그 외부를 탭하여 닫을 수 있는지 여부. 기본값은 `true`. |
+| barrierColor | `String?` | 모달 배리어의 색상. |
+| barrierLabel | `String?` | 모달 배리어의 시맨틱 레이블. |
+| useSafeArea | `bool` | 안전 영역을 사용할지 여부. 기본값은 `true`. |
+| traversalEdgeBehavior | `TraversalEdgeBehavior?` | 다이얼로그의 traversal edge 동작. |
+
+## 예제 JSON
+
+### Widget JSON을 사용한 다이얼로그
+
+```json
+{
+ "actionType": "showDialog",
+ "widget": {
+ "type": "text",
+ "data": "Hello, World!"
+ }
+}
+```
+
+### Request JSON을 사용한 다이얼로그
+
+```json
+{
+ "actionType": "showDialog",
+ "request": {
+ "url": "https://example.com/api",
+ "method": "get"
+ }
+}
+```
+
+### Asset JSON을 사용한 다이얼로그
+
+```json
+{
+ "actionType": "showDialog",
+ "assetPath": "assets/dialog.json"
+}
+```
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/form_validate.md b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/form_validate.md
new file mode 100644
index 00000000..07a35887
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/form_validate.md
@@ -0,0 +1,34 @@
+# Form Validate Action
+
+`StacFormValidateAction` 클래스는 Stac 애플리케이션에서 폼의 유효성을 검사하는 데 사용됩니다.
+
+## 속성
+
+| Property | Type | Description |
+|-------------|-------------------------|-----------------------------------------------------------------------------|
+| isValid | `Map` | 폼이 유효한 경우 수행할 action. |
+| isNotValid | `Map` | 폼이 유효하지 않은 경우 수행할 action. |
+
+## 예제 JSON
+
+### Form Validate Action JSON
+
+```json
+{
+ "actionType": "validateForm",
+ "isValid": {
+ "actionType": "showDialog",
+ "widget": {
+ "type": "text",
+ "data": "Form is valid!"
+ }
+ },
+ "isNotValid": {
+ "actionType": "showDialog",
+ "widget": {
+ "type": "text",
+ "data": "Form is not valid!"
+ }
+ }
+}
+```
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/get_form_value.md b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/get_form_value.md
new file mode 100644
index 00000000..821ffc18
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/get_form_value.md
@@ -0,0 +1,20 @@
+# Get Form Value Action
+
+`StacGetFormValueAction` 클래스는 Stac 애플리케이션에서 폼 값을 가져오는 데 사용됩니다.
+
+## 속성
+
+| Property | Type | Description |
+|-----------|----------|------------------------------------|
+| id | `String` | 가져올 폼 필드의 ID. |
+
+## 예제 JSON
+
+### Get Form Value Action JSON
+
+```json
+{
+ "actionType": "getFormValue",
+ "id": "username"
+}
+```
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/modal_bottom_sheet.md b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/modal_bottom_sheet.md
new file mode 100644
index 00000000..32a76e46
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/modal_bottom_sheet.md
@@ -0,0 +1,83 @@
+# Modal Bottom Sheet Action
+
+`StacModalBottomSheetAction` 클래스는 Stac 애플리케이션에서 모달 바텀시트를 표시하는 데 사용됩니다.
+
+## 속성
+
+| Property | Type | Description |
+|---------------------|-------------------------------|-----------------------------------------------------------------------------|
+| widget | `Map?` | 모달 바텀시트 내부에 표시할 widget. |
+| request | `StacNetworkRequest?` | 모달 바텀시트를 표시하기 전에 수행할 네트워크 요청. |
+| assetPath | `String?` | 모달 바텀시트 내부에 표시할 widget의 asset 경로. |
+| backgroundColor | `String?` | 모달 바텀시트의 배경색. |
+| barrierLabel | `String?` | 모달 배리어의 시맨틱 레이블. |
+| elevation | `double?` | 모달 바텀시트의 높이. |
+| shape | `StacBorder?` | 모달 바텀시트의 모양. |
+| constraints | `StacBoxConstraints?` | 모달 바텀시트의 제약 조건. |
+| barrierColor | `String?` | 모달 배리어의 색상. |
+| isScrollControlled | `bool` | 모달 바텀시트가 스크롤 제어되는지 여부. 기본값은 `false`. |
+| useRootNavigator | `bool` | 루트 네비게이터를 사용할지 여부. 기본값은 `false`. |
+| isDismissible | `bool` | 모달 바텀시트를 닫을 수 있는지 여부. 기본값은 `true`. |
+| enableDrag | `bool` | 모달 바텀시트를 드래그할 수 있는지 여부. 기본값은 `true`. |
+| showDragHandle | `bool?` | 모달 바텀시트에 드래그 핸들을 표시할지 여부. |
+| useSafeArea | `bool` | 안전 영역을 사용할지 여부. 기본값은 `false`. |
+
+## 예제 JSON
+
+### Widget JSON을 사용한 모달 바텀시트
+
+```json
+{
+ "actionType": "showModalBottomSheet",
+ "widget": {
+ "type": "container",
+ "height": 200,
+ "color": "amber",
+ "child": {
+ "type": "center",
+ "child": {
+ "type": "column",
+ "mainAxisAlignment": "center",
+ "mainAxisSize": "min",
+ "children": [
+ {
+ "type": "text",
+ "data": "Modal BottomSheet"
+ },
+ {
+ "type": "elevatedButton",
+ "child": {
+ "type": "text",
+ "data": "Close BottomSheet"
+ },
+ "onPressed": {
+ "actionType": "pop"
+ }
+ }
+ ]
+ }
+ }
+ }
+}
+```
+
+### Asset Path를 사용한 모달 바텀시트
+
+```json
+{
+ "actionType": "showModalBottomSheet",
+ "assetPath": "assets/widgets/modal_bottom_sheet.json"
+}
+```
+
+### Network Request를 사용한 모달 바텀시트
+
+```json
+{
+ "actionType": "showModalBottomSheet",
+ "request": {
+ "url": "https://example.com/api",
+ "method": "get"
+ }
+}
+```
diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/multi_action.md b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/multi_action.md
new file mode 100644
index 00000000..0818d3a3
--- /dev/null
+++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/actions/multi_action.md
@@ -0,0 +1,78 @@
+# Multi Action
+
+`StacMultiAction`을 사용하면 여러 작업을 쉽게 실행할 수 있습니다.
+
+## Multi Action 속성
+
+| Property | Type | Description |
+| --- |-------------------|---------------------------------------------------|
+| actions | `List