mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
docs(site): 实现多语言支持并重构文档站点配置
- 添加简体中文本地化配置和导航链接 - 配置本地搜索功能并设置中文翻译 - 添加 Catch-all 404 重定向中间件 - 重构侧边栏和导航结构以支持国际化 - 移除旧的英文文档内容并更新配置 - 添加页脚导航和面包屑文字本地化
This commit is contained in:
parent
67df7337b9
commit
b835d3af67
12
docs/.vitepress/cache/deps/_metadata.json
vendored
12
docs/.vitepress/cache/deps/_metadata.json
vendored
@ -1,25 +1,25 @@
|
|||||||
{
|
{
|
||||||
"hash": "74ecdc37",
|
"hash": "f04df328",
|
||||||
"configHash": "1c302118",
|
"configHash": "15e8eca7",
|
||||||
"lockfileHash": "42b6a898",
|
"lockfileHash": "42b6a898",
|
||||||
"browserHash": "b3e735e5",
|
"browserHash": "342224e2",
|
||||||
"optimized": {
|
"optimized": {
|
||||||
"vue": {
|
"vue": {
|
||||||
"src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
|
"src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
|
||||||
"file": "vue.js",
|
"file": "vue.js",
|
||||||
"fileHash": "74f911f6",
|
"fileHash": "c87f1bc4",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"vitepress > @vue/devtools-api": {
|
"vitepress > @vue/devtools-api": {
|
||||||
"src": "../../../node_modules/@vue/devtools-api/dist/index.js",
|
"src": "../../../node_modules/@vue/devtools-api/dist/index.js",
|
||||||
"file": "vitepress___@vue_devtools-api.js",
|
"file": "vitepress___@vue_devtools-api.js",
|
||||||
"fileHash": "673694b5",
|
"fileHash": "4ddc9988",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"vitepress > @vueuse/core": {
|
"vitepress > @vueuse/core": {
|
||||||
"src": "../../../node_modules/@vueuse/core/dist/index.js",
|
"src": "../../../node_modules/@vueuse/core/dist/index.js",
|
||||||
"file": "vitepress___@vueuse_core.js",
|
"file": "vitepress___@vueuse_core.js",
|
||||||
"fileHash": "6334babc",
|
"fileHash": "3d4a475e",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,113 +1,240 @@
|
|||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
// https://vitepress.dev/reference/site-config
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
title: "GFramework",
|
title: "GFramework",
|
||||||
description: "面向游戏开发场景的模块化 C# 框架",
|
description: "面向游戏开发场景的模块化 C# 框架",
|
||||||
base: "/GFramework/",
|
base: "/GFramework/",
|
||||||
themeConfig: {
|
vite: {
|
||||||
logo: '/logo-icon.png',
|
plugins: [
|
||||||
// https://vitepress.dev/reference/default-theme-config
|
{
|
||||||
nav: [
|
name: 'catch-all-404',
|
||||||
{ text: '首页', link: '/' },
|
configureServer(server) {
|
||||||
{ text: '入门指南', link: '/getting-started/installation' },
|
return () => {
|
||||||
{ text: 'Core', link: '/core/overview' },
|
server.middlewares.use((req, res, next) => {
|
||||||
{ text: 'Game', link: '/game/overview' },
|
const url = req.url || ''
|
||||||
{ text: 'Godot', link: '/godot/overview' },
|
|
||||||
{ text: '源码生成器', link: '/source-generators/overview' },
|
|
||||||
{ text: '教程', link: '/tutorials/basic-tutorial' },
|
|
||||||
{ text: 'API参考', link: '/api-reference/core-api' }
|
|
||||||
],
|
|
||||||
|
|
||||||
sidebar: {
|
// 排除这些路径
|
||||||
'/getting-started/': [
|
const excludePaths = [
|
||||||
{
|
'/@vite',
|
||||||
text: '入门指南',
|
'/@fs',
|
||||||
items: [
|
'/node_modules',
|
||||||
{ text: '安装配置', link: '/getting-started/installation' },
|
'/__vite',
|
||||||
{ text: '快速开始', link: '/getting-started/quick-start' },
|
'/public'
|
||||||
{ text: '架构概览', link: '/getting-started/architecture-overview' }
|
]
|
||||||
]
|
|
||||||
|
// 如果是资源文件或特殊路径,跳过
|
||||||
|
if (excludePaths.some(path => url.startsWith(path)) ||
|
||||||
|
url.includes('.') ||
|
||||||
|
url.startsWith('/GFramework/')) {
|
||||||
|
return next()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他路径重定向到 404
|
||||||
|
res.writeHead(302, { Location: '/GFramework/404' })
|
||||||
|
res.end()
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
}
|
||||||
'/core/': [
|
],
|
||||||
{
|
server: {
|
||||||
text: 'Core 核心框架',
|
strictPort: false,
|
||||||
items: [
|
// 添加中间件处理不带斜杠的情况
|
||||||
{ text: '概览', link: '/core/overview' },
|
proxy: {}
|
||||||
{ text: '架构组件', link: '/core/architecture/architecture' },
|
}
|
||||||
{ text: '命令查询系统', link: '/core/command-query/commands' },
|
},
|
||||||
{ text: '事件系统', link: '/core/events/event-bus' },
|
locales: {
|
||||||
{ text: '属性系统', link: '/core/property/bindable-property' },
|
root: {
|
||||||
{ text: '工具类', link: '/core/utilities/ioc-container' }
|
label: '简体中文',
|
||||||
|
lang: 'zh-CN',
|
||||||
|
link: '/zh-CN/',
|
||||||
|
themeConfig: {
|
||||||
|
logo: '/logo-icon.png',
|
||||||
|
|
||||||
|
search: {
|
||||||
|
provider: 'local',
|
||||||
|
options: {
|
||||||
|
translations: {
|
||||||
|
button: {
|
||||||
|
buttonText: '搜索文档',
|
||||||
|
buttonAriaLabel: '搜索文档'
|
||||||
|
},
|
||||||
|
modal: {
|
||||||
|
noResultsText: '无法找到相关结果',
|
||||||
|
resetButtonTitle: '清除查询条件',
|
||||||
|
footer: {
|
||||||
|
selectText: '选择',
|
||||||
|
navigateText: '切换',
|
||||||
|
closeText: '关闭'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
nav: [
|
||||||
|
{ text: '首页', link: '/zh-CN/' },
|
||||||
|
{ text: '入门指南', link: '/zh-CN/getting-started/installation' },
|
||||||
|
{ text: 'Core', link: '/zh-CN/core/overview' },
|
||||||
|
{ text: 'Game', link: '/zh-CN/game/overview' },
|
||||||
|
{ text: 'Godot', link: '/zh-CN/godot/overview' },
|
||||||
|
{ text: '源码生成器', link: '/zh-CN/source-generators/overview' },
|
||||||
|
{ text: '教程', link: '/zh-CN/tutorials/basic-tutorial' },
|
||||||
|
{ text: 'API参考', link: '/zh-CN/api-reference/core-api' }
|
||||||
|
],
|
||||||
|
|
||||||
|
sidebar: {
|
||||||
|
'/zh-CN/getting-started/': [
|
||||||
|
{
|
||||||
|
text: '入门指南',
|
||||||
|
items: [
|
||||||
|
{ text: '安装配置', link: '/zh-CN/getting-started/installation' },
|
||||||
|
{ text: '快速开始', link: '/zh-CN/getting-started/quick-start' },
|
||||||
|
{ text: '架构概览', link: '/zh-CN/getting-started/architecture-overview' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'/zh-CN/core/': [
|
||||||
|
{
|
||||||
|
text: 'Core 核心框架',
|
||||||
|
items: [
|
||||||
|
{ text: '概览', link: '/zh-CN/core/overview' },
|
||||||
|
{ text: '架构组件', link: '/zh-CN/core/architecture/architecture' },
|
||||||
|
{ text: '命令查询系统', link: '/zh-CN/core/command-query/commands' },
|
||||||
|
{ text: '事件系统', link: '/zh-CN/core/events/event-bus' },
|
||||||
|
{ text: '属性系统', link: '/zh-CN/core/property/bindable-property' },
|
||||||
|
{ text: '工具类', link: '/zh-CN/core/utilities/ioc-container' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'/zh-CN/game/': [
|
||||||
|
{
|
||||||
|
text: 'Game 游戏模块',
|
||||||
|
items: [
|
||||||
|
{ text: '概览', link: '/zh-CN/game/overview' },
|
||||||
|
{ text: '模块系统', link: '/zh-CN/game/modules/architecture-modules' },
|
||||||
|
{ text: '存储系统', link: '/zh-CN/game/storage/scoped-storage' },
|
||||||
|
{ text: '资源管理', link: '/zh-CN/game/assets/asset-catalog' },
|
||||||
|
{ text: '序列化', link: '/zh-CN/game/serialization/json-serializer' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'/zh-CN/godot/': [
|
||||||
|
{
|
||||||
|
text: 'Godot 集成',
|
||||||
|
items: [
|
||||||
|
{ text: '概览', link: '/zh-CN/godot/overview' },
|
||||||
|
{ text: '集成指南', link: '/zh-CN/godot/integration/architecture-integration' },
|
||||||
|
{ text: '节点扩展', link: '/zh-CN/godot/node-extensions/node-extensions' },
|
||||||
|
{ text: '对象池', link: '/zh-CN/godot/pooling/node-pool' },
|
||||||
|
{ text: '日志系统', link: '/zh-CN/godot/logging/godot-logger' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'/zh-CN/source-generators/': [
|
||||||
|
{
|
||||||
|
text: '源码生成器',
|
||||||
|
items: [
|
||||||
|
{ text: '概览', link: '/zh-CN/source-generators/overview' },
|
||||||
|
{ text: '日志生成器', link: '/zh-CN/source-generators/logging-generator' },
|
||||||
|
{ text: '枚举扩展', link: '/zh-CN/source-generators/enum-extensions' },
|
||||||
|
{ text: '规则生成器', link: '/zh-CN/source-generators/rule-generator' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'/zh-CN/tutorials/': [
|
||||||
|
{
|
||||||
|
text: '教程',
|
||||||
|
items: [
|
||||||
|
{ text: '基础教程', link: '/zh-CN/tutorials/basic-tutorial' },
|
||||||
|
{ text: '高级模式', link: '/zh-CN/tutorials/advanced-patterns' },
|
||||||
|
{ text: '最佳实践', link: '/zh-CN/tutorials/best-practices' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'/zh-CN/api-reference/': [
|
||||||
|
{
|
||||||
|
text: 'API 参考',
|
||||||
|
items: [
|
||||||
|
{ text: 'Core API', link: '/zh-CN/api-reference/core-api' },
|
||||||
|
{ text: 'Game API', link: '/zh-CN/api-reference/game-api' },
|
||||||
|
{ text: 'Godot API', link: '/zh-CN/api-reference/godot-api' },
|
||||||
|
{ text: '生成器 API', link: '/zh-CN/api-reference/generators-api' }
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
socialLinks: [
|
||||||
|
{ icon: 'github', link: 'https://github.com/GeWuYou/GFramework' }
|
||||||
|
],
|
||||||
|
|
||||||
|
footer: {
|
||||||
|
message: '基于 Apache 2.0 许可证发布',
|
||||||
|
copyright: 'Copyright © 2026 GeWuYou'
|
||||||
|
},
|
||||||
|
|
||||||
|
outlineTitle: '页面导航',
|
||||||
|
lastUpdatedText: '最后更新于',
|
||||||
|
darkModeSwitchLabel: '主题',
|
||||||
|
sidebarMenuLabel: '菜单',
|
||||||
|
returnToTopLabel: '回到顶部',
|
||||||
|
|
||||||
|
docFooter: {
|
||||||
|
prev: '上一页',
|
||||||
|
next: '下一页'
|
||||||
}
|
}
|
||||||
],
|
}
|
||||||
'/game/': [
|
|
||||||
{
|
|
||||||
text: 'Game 游戏模块',
|
|
||||||
items: [
|
|
||||||
{ text: '概览', link: '/game/overview' },
|
|
||||||
{ text: '模块系统', link: '/game/modules/architecture-modules' },
|
|
||||||
{ text: '存储系统', link: '/game/storage/scoped-storage' },
|
|
||||||
{ text: '资源管理', link: '/game/assets/asset-catalog' },
|
|
||||||
{ text: '序列化', link: '/game/serialization/json-serializer' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'/godot/': [
|
|
||||||
{
|
|
||||||
text: 'Godot 集成',
|
|
||||||
items: [
|
|
||||||
{ text: '概览', link: '/godot/overview' },
|
|
||||||
{ text: '集成指南', link: '/godot/integration/architecture-integration' },
|
|
||||||
{ text: '节点扩展', link: '/godot/node-extensions/node-extensions' },
|
|
||||||
{ text: '对象池', link: '/godot/pooling/node-pool' },
|
|
||||||
{ text: '日志系统', link: '/godot/logging/godot-logger' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'/source-generators/': [
|
|
||||||
{
|
|
||||||
text: '源码生成器',
|
|
||||||
items: [
|
|
||||||
{ text: '概览', link: '/source-generators/overview' },
|
|
||||||
{ text: '日志生成器', link: '/source-generators/logging-generator' },
|
|
||||||
{ text: '枚举扩展', link: '/source-generators/enum-extensions' },
|
|
||||||
{ text: '规则生成器', link: '/source-generators/rule-generator' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'/tutorials/': [
|
|
||||||
{
|
|
||||||
text: '教程',
|
|
||||||
items: [
|
|
||||||
{ text: '基础教程', link: '/tutorials/basic-tutorial' },
|
|
||||||
{ text: '高级模式', link: '/tutorials/advanced-patterns' },
|
|
||||||
{ text: '最佳实践', link: '/tutorials/best-practices' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'/api-reference/': [
|
|
||||||
{
|
|
||||||
text: 'API 参考',
|
|
||||||
items: [
|
|
||||||
{ text: 'Core API', link: '/api-reference/core-api' },
|
|
||||||
{ text: 'Game API', link: '/api-reference/game-api' },
|
|
||||||
{ text: 'Godot API', link: '/api-reference/godot-api' },
|
|
||||||
{ text: '生成器 API', link: '/api-reference/generators-api' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
|
|
||||||
socialLinks: [
|
// 未来添加英文版本时取消注释
|
||||||
{ icon: 'github', link: 'https://github.com/GeWuYou/GFramework' }
|
/*
|
||||||
],
|
en: {
|
||||||
|
label: 'English',
|
||||||
footer: {
|
lang: 'en-US',
|
||||||
message: '基于 Apache 2.0 许可证发布',
|
link: '/en/',
|
||||||
copyright: 'Copyright © 2026 GeWuYou'
|
themeConfig: {
|
||||||
|
logo: '/logo-icon.png',
|
||||||
|
|
||||||
|
search: {
|
||||||
|
provider: 'local'
|
||||||
|
},
|
||||||
|
|
||||||
|
nav: [
|
||||||
|
{ text: 'Home', link: '/en/' },
|
||||||
|
{ text: 'Getting Started', link: '/en/getting-started/installation' },
|
||||||
|
{ text: 'Core', link: '/en/core/overview' },
|
||||||
|
{ text: 'Game', link: '/en/game/overview' },
|
||||||
|
{ text: 'Godot', link: '/en/godot/overview' },
|
||||||
|
{ text: 'Source Generators', link: '/en/source-generators/overview' },
|
||||||
|
{ text: 'Tutorials', link: '/en/tutorials/basic-tutorial' },
|
||||||
|
{ text: 'API Reference', link: '/en/api-reference/core-api' }
|
||||||
|
],
|
||||||
|
|
||||||
|
sidebar: {
|
||||||
|
'/en/getting-started/': [
|
||||||
|
{
|
||||||
|
text: 'Getting Started',
|
||||||
|
items: [
|
||||||
|
{ text: 'Installation', link: '/en/getting-started/installation' },
|
||||||
|
{ text: 'Quick Start', link: '/en/getting-started/quick-start' },
|
||||||
|
{ text: 'Architecture Overview', link: '/en/getting-started/architecture-overview' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// ... 其他英文侧边栏配置
|
||||||
|
},
|
||||||
|
|
||||||
|
socialLinks: [
|
||||||
|
{ icon: 'github', link: 'https://github.com/GeWuYou/GFramework' }
|
||||||
|
],
|
||||||
|
|
||||||
|
footer: {
|
||||||
|
message: 'Released under the Apache 2.0 License',
|
||||||
|
copyright: 'Copyright © 2026 GeWuYou'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
133
docs/404.md
Normal file
133
docs/404.md
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
---
|
||||||
|
layout: page
|
||||||
|
---
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, onUnmounted } from 'vue'
|
||||||
|
|
||||||
|
const countdown = ref(5)
|
||||||
|
let timer = null
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
timer = setInterval(() => {
|
||||||
|
countdown.value--
|
||||||
|
if (countdown.value <= 0) {
|
||||||
|
clearInterval(timer)
|
||||||
|
window.location.href = '/GFramework/zh-CN/'
|
||||||
|
}
|
||||||
|
}, 1000)
|
||||||
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
if (timer) {
|
||||||
|
clearInterval(timer)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const goHome = () => {
|
||||||
|
if (timer) {
|
||||||
|
clearInterval(timer)
|
||||||
|
}
|
||||||
|
window.location.href = '/GFramework/zh-CN/'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.not-found-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 60vh;
|
||||||
|
text-align: center;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-code {
|
||||||
|
font-size: 120px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: linear-gradient(120deg, #3451b2 0%, #6366f1 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-title {
|
||||||
|
font-size: 32px;
|
||||||
|
margin: 20px 0 10px;
|
||||||
|
color: var(--vp-c-text-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-message {
|
||||||
|
font-size: 18px;
|
||||||
|
color: var(--vp-c-text-2);
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.countdown-text {
|
||||||
|
font-size: 16px;
|
||||||
|
color: var(--vp-c-text-3);
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.countdown-number {
|
||||||
|
color: #3451b2;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 16px;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
padding: 12px 24px;
|
||||||
|
border-radius: 8px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.3s;
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
background: #3451b2;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary:hover {
|
||||||
|
background: #2841a0;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="not-found-container">
|
||||||
|
<h1 class="error-code">404</h1>
|
||||||
|
<h2 class="error-title">Page Not Found / 页面未找到</h2>
|
||||||
|
<p class="error-message">The page you are looking for does not exist.<br>您访问的页面不存在。</p>
|
||||||
|
|
||||||
|
<p class="countdown-text">
|
||||||
|
Auto redirecting in <span class="countdown-number">{{ countdown }}</span> seconds<br>
|
||||||
|
<span class="countdown-number">{{ countdown }}</span> 秒后自动跳转
|
||||||
|
</p>
|
||||||
|
<div class="suggestions">
|
||||||
|
<h3>📚 您可能想访问:</h3>
|
||||||
|
<ul>
|
||||||
|
<li>→ <a href="/GFramework/zh-CN/getting-started/installation">安装配置</a></li>
|
||||||
|
<li>→ <a href="/GFramework/zh-CN/getting-started/quick-start">快速开始</a></li>
|
||||||
|
<li>→ <a href="/GFramework/zh-CN/core/overview">Core 核心框架</a></li>
|
||||||
|
<li>→ <a href="/GFramework/zh-CN/tutorials/basic-tutorial">基础教程</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="action-buttons">
|
||||||
|
<button class="btn btn-primary" @click="goHome">
|
||||||
|
Go to Homepage / 返回首页
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
@ -1,38 +1,42 @@
|
|||||||
---
|
---
|
||||||
# https://vitepress.dev/reference/default-theme-home-page
|
layout: page
|
||||||
layout: home
|
|
||||||
|
|
||||||
hero:
|
|
||||||
name: "GFramework"
|
|
||||||
text: "面向游戏开发场景的模块化 C# 框架"
|
|
||||||
tagline: 基于清洁架构和CQRS模式的现代化游戏开发框架
|
|
||||||
image:
|
|
||||||
src: /logo.png
|
|
||||||
alt: GFramework Logo
|
|
||||||
actions:
|
|
||||||
- theme: brand
|
|
||||||
text: 快速开始
|
|
||||||
link: /getting-started/quick-start
|
|
||||||
- theme: alt
|
|
||||||
text: 架构概览
|
|
||||||
link: /getting-started/architecture-overview
|
|
||||||
- theme: alt
|
|
||||||
text: API 参考
|
|
||||||
link: /api-reference/core-api
|
|
||||||
|
|
||||||
features:
|
|
||||||
- title: 🏗️ 清洁架构
|
|
||||||
details: 基于Model-View-Controller-System-Utility五层架构,实现清晰的职责分离和高内聚低耦合
|
|
||||||
- title: 🔧 CQRS模式
|
|
||||||
details: 命令查询职责分离,提供类型安全的命令和查询系统,支持可撤销操作
|
|
||||||
- title: 📡 事件驱动
|
|
||||||
details: 强大的事件总线系统,支持类型安全的事件发布订阅,实现组件间松耦合通信
|
|
||||||
- title: 🎮 Godot集成
|
|
||||||
details: 深度集成Godot引擎,提供丰富的节点扩展方法和对象池化支持
|
|
||||||
- title: 🔄 响应式编程
|
|
||||||
details: 可绑定属性系统,自动化的数据绑定和UI更新机制
|
|
||||||
- title: ⚡ 源码生成器
|
|
||||||
details: 基于Roslyn的源码生成器,自动生成日志、枚举扩展等样板代码
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
// 检测浏览器语言
|
||||||
|
const browserLang = navigator.language.toLowerCase()
|
||||||
|
|
||||||
|
// 目前只有中文,未来可以根据语言跳转
|
||||||
|
if (browserLang.startsWith('zh-CN')) {
|
||||||
|
window.location.href = '/GFramework/zh-CN/'
|
||||||
|
} else if (browserLang.startsWith('en')) {
|
||||||
|
// 未来如果有英文版
|
||||||
|
// window.location.href = '/GFramework/en/'
|
||||||
|
window.location.href = '/GFramework/zh-CN/' // 暂时跳转到中文
|
||||||
|
} else {
|
||||||
|
// 默认跳转到中文
|
||||||
|
window.location.href = '/GFramework/zh-CN/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div style="text-align: center; padding: 100px 20px;">
|
||||||
|
<h1>🌐 Language Selection / 语言选择</h1>
|
||||||
|
<div style="margin-top: 40px; display: flex; gap: 20px; justify-content: center; flex-wrap: wrap;">
|
||||||
|
<a href="/GFramework/zh-CN/" style="padding: 12px 24px; background: #3451b2; color: white; border-radius: 8px; text-decoration: none; font-size: 16px;">
|
||||||
|
简体中文 🇨🇳
|
||||||
|
</a>
|
||||||
|
<!-- 未来添加英文版本时取消注释 -->
|
||||||
|
<!-- <a href="/GFramework/en/" style="padding: 12px 24px; background: #3451b2; color: white; border-radius: 8px; text-decoration: none; font-size: 16px;">
|
||||||
|
English 🇺🇸
|
||||||
|
</a> -->
|
||||||
|
</div>
|
||||||
|
<p style="margin-top: 40px; color: #666;">
|
||||||
|
Auto-redirecting... / 自动跳转中...
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
38
docs/zh-CN/index.md
Normal file
38
docs/zh-CN/index.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
# https://vitepress.dev/reference/default-theme-home-page
|
||||||
|
layout: home
|
||||||
|
|
||||||
|
hero:
|
||||||
|
name: "GFramework"
|
||||||
|
text: "面向游戏开发场景的模块化 C# 框架"
|
||||||
|
tagline: 基于清洁架构和CQRS模式的现代化游戏开发框架
|
||||||
|
image:
|
||||||
|
src: /logo.png
|
||||||
|
alt: GFramework Logo
|
||||||
|
actions:
|
||||||
|
- theme: brand
|
||||||
|
text: 快速开始
|
||||||
|
link: /getting-started/quick-start
|
||||||
|
- theme: alt
|
||||||
|
text: 架构概览
|
||||||
|
link: /getting-started/architecture-overview
|
||||||
|
- theme: alt
|
||||||
|
text: API 参考
|
||||||
|
link: /api-reference/core-api
|
||||||
|
|
||||||
|
features:
|
||||||
|
- title: 🏗️ 清洁架构
|
||||||
|
details: 基于Model-View-Controller-System-Utility五层架构,实现清晰的职责分离和高内聚低耦合
|
||||||
|
- title: 🔧 CQRS模式
|
||||||
|
details: 命令查询职责分离,提供类型安全的命令和查询系统,支持可撤销操作
|
||||||
|
- title: 📡 事件驱动
|
||||||
|
details: 强大的事件总线系统,支持类型安全的事件发布订阅,实现组件间松耦合通信
|
||||||
|
- title: 🎮 Godot集成
|
||||||
|
details: 深度集成Godot引擎,提供丰富的节点扩展方法和对象池化支持
|
||||||
|
- title: 🔄 响应式编程
|
||||||
|
details: 可绑定属性系统,自动化的数据绑定和UI更新机制
|
||||||
|
- title: ⚡ 源码生成器
|
||||||
|
details: 基于Roslyn的源码生成器,自动生成日志、枚举扩展等样板代码
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user