feat: add toast for no content

This commit is contained in:
liuyuanchuang
2026-02-05 18:22:30 +08:00
parent d562d67203
commit 2b1da79bbc
18 changed files with 832 additions and 390 deletions

View File

@@ -0,0 +1,140 @@
# 多语言功能实现总结
## 📋 实现内容
### 1. HTML 文档改进 (`index.html`)
- ✅ 添加 `hreflang` 标签支持多语言 SEO
- ✅ 添加双语 meta 标签description, keywords
- ✅ 添加 Open Graph 和 Twitter Cards 多语言支持
- ✅ 添加动态语言检测脚本
- ✅ 优化 `og:locale``og:locale:alternate` 标签
### 2. SEO 辅助工具 (`src/lib/seoHelper.ts`)
- ✅ 创建 `updatePageMeta()` 函数动态更新 meta 标签
- ✅ 创建 `getSEOContent()` 函数获取语言特定的 SEO 内容
- ✅ 支持更新标题、描述、关键词、OG 标签等
### 3. 语言上下文增强 (`src/contexts/LanguageContext.tsx`)
- ✅ 集成 `updatePageMeta()` 在语言切换时自动更新页面
- ✅ 在初始加载时根据用户偏好更新 meta 标签
- ✅ 在 IP 检测后更新 meta 标签
### 4. 文档和测试
- ✅ 创建详细的多语言支持文档 (`MULTILANG_README.md`)
- ✅ 创建浏览器测试脚本 (`test-multilang.js`)
- ✅ 包含最佳实践和使用示例
## 🎯 功能特性
### 自动语言检测优先级
1. 用户在 localStorage 中保存的选择(最高优先级)
2. IP 地理位置检测
3. 浏览器语言设置(回退)
### SEO 优化
- **搜索引擎**: 完整的 hreflang 支持
- **社交媒体**: Open Graph 和 Twitter Cards
- **元数据**: 动态更新标题、描述、关键词
### 用户体验
- 一键语言切换(在导航栏)
- 无刷新页面更新
- 保持用户选择跨会话
## 📝 使用示例
### 切换语言
```typescript
import { useLanguage } from './contexts/LanguageContext';
function Component() {
const { language, setLanguage, t } = useLanguage();
return (
<button onClick={() => setLanguage('en')}>
{t.common.switchLanguage}
</button>
);
}
```
### 添加新翻译
`src/lib/translations.ts` 中:
```typescript
export const translations = {
en: {
newFeature: {
title: 'New Feature',
}
},
zh: {
newFeature: {
title: '新功能',
}
}
};
```
### 更新 SEO 内容
`src/lib/seoHelper.ts` 中:
```typescript
const seoContent: Record<Language, SEOContent> = {
en: {
title: 'Your English Title',
description: 'Your English description',
keywords: 'english, keywords',
},
zh: {
title: '您的中文标题',
description: '您的中文描述',
keywords: '中文,关键词',
},
};
```
## 🧪 测试清单
- [ ] 页面首次加载时语言检测正确
- [ ] 切换语言时标题更新
- [ ] 切换语言时 meta 标签更新
- [ ] HTML lang 属性同步更新
- [ ] localStorage 正确保存用户选择
- [ ] 所有 UI 文本正确翻译
- [ ] Open Graph 预览正确显示(使用 [Facebook Sharing Debugger](https://developers.facebook.com/tools/debug/)
- [ ] Twitter Card 预览正确显示(使用 [Twitter Card Validator](https://cards-dev.twitter.com/validator)
## 🚀 部署注意事项
### 服务器配置
如果使用基于 URL 的语言路由(如 `/en`, `/zh`),需要配置服务器重写规则:
**Nginx 示例**:
```nginx
location ~ ^/(en|zh) {
try_files $uri $uri/ /index.html;
}
```
**Apache 示例**:
```apache
RewriteEngine On
RewriteRule ^(en|zh)/ /index.html [L]
```
### CDN 缓存
确保 CDN 不会缓存带有错误语言的页面:
- 使用 `Vary: Accept-Language`
- 或在 URL 中包含语言参数
## 🔗 相关资源
- [Google 国际化指南](https://developers.google.com/search/docs/specialty/international/localized-versions)
- [Open Graph Protocol](https://ogp.me/)
- [Twitter Cards 文档](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards)
- [hreflang 最佳实践](https://support.google.com/webmasters/answer/189077)
## 📞 支持
如有问题或建议,请联系:
- Email: yogecoder@gmail.com
- QQ 群: 1018282100

174
docs/MULTILANG_README.md Normal file
View File

@@ -0,0 +1,174 @@
# 多语言支持说明 / Multi-language Support
## 概述 / Overview
TexPixel 现在支持完整的中英文双语切换,包括:
- 动态页面标题和 meta 标签更新
- SEO 优化的多语言支持
- 智能语言检测(基于 IP 和浏览器偏好)
TexPixel now supports complete bilingual switching between Chinese and English, including:
- Dynamic page title and meta tag updates
- SEO-optimized multi-language support
- Intelligent language detection (based on IP and browser preferences)
---
## 功能特性 / Features
### 1. 自动语言检测 / Automatic Language Detection
应用会按以下优先级检测用户语言:
1. localStorage 中保存的用户选择
2. IP 地理位置检测
3. 浏览器语言设置
The app detects user language in the following order of priority:
1. User's saved preference in localStorage
2. IP geolocation detection
3. Browser language settings
### 2. SEO 优化 / SEO Optimization
- **hreflang 标签**:告知搜索引擎不同语言版本的页面
- **多语言 meta 标签**description、keywords、og:locale 等
- **动态标题更新**:切换语言时自动更新页面标题
Features include:
- **hreflang tags**: Inform search engines about different language versions
- **Multilingual meta tags**: description, keywords, og:locale, etc.
- **Dynamic title updates**: Automatically update page title when switching languages
### 3. Open Graph 和 Twitter Cards
支持社交媒体分享的多语言 meta 标签:
- Facebook (Open Graph)
- Twitter Cards
- 其他支持 OG 协议的平台
Multilingual meta tags for social media sharing:
- Facebook (Open Graph)
- Twitter Cards
- Other platforms supporting OG protocol
---
## 技术实现 / Technical Implementation
### 文件结构 / File Structure
```
src/
├── lib/
│ ├── seoHelper.ts # SEO 元数据管理 / SEO metadata management
│ ├── translations.ts # 翻译文本 / Translation texts
│ └── ipLocation.ts # IP 定位 / IP location detection
├── contexts/
│ └── LanguageContext.tsx # 语言上下文 / Language context
└── components/
└── Navbar.tsx # 语言切换器 / Language switcher
```
### 核心函数 / Core Functions
#### `updatePageMeta(language: Language)`
更新页面的所有 SEO 相关元数据,包括:
- document.title
- HTML lang 属性
- meta description
- meta keywords
- Open Graph 标签
- Twitter Card 标签
Updates all SEO-related metadata on the page, including:
- document.title
- HTML lang attribute
- meta description
- meta keywords
- Open Graph tags
- Twitter Card tags
#### `getSEOContent(language: Language)`
获取指定语言的 SEO 内容(标题、描述、关键词)
Get SEO content for a specific language (title, description, keywords)
---
## 使用方法 / Usage
### 在组件中使用语言功能 / Using Language Features in Components
```typescript
import { useLanguage } from '../contexts/LanguageContext';
function MyComponent() {
const { language, setLanguage, t } = useLanguage();
return (
<div>
<h1>{t.common.title}</h1>
<button onClick={() => setLanguage('en')}>English</button>
<button onClick={() => setLanguage('zh')}></button>
</div>
);
}
```
### 添加新的翻译文本 / Adding New Translation Texts
`src/lib/translations.ts` 中添加:
```typescript
export const translations = {
en: {
myFeature: {
title: 'My Feature',
description: 'Feature description',
}
},
zh: {
myFeature: {
title: '我的功能',
description: '功能描述',
}
}
};
```
---
## 最佳实践 / Best Practices
1. **始终提供双语内容** / Always provide bilingual content
- 确保所有用户可见的文本都有中英文翻译
- Ensure all user-visible text has Chinese and English translations
2. **保持 SEO 元数据最新** / Keep SEO metadata up-to-date
-`seoHelper.ts` 中维护准确的页面描述和关键词
- Maintain accurate page descriptions and keywords in `seoHelper.ts`
3. **测试语言切换** / Test language switching
- 确保切换语言时页面标题和 meta 标签正确更新
- Ensure page title and meta tags update correctly when switching languages
4. **考虑 RTL 语言** / Consider RTL languages
- 虽然目前只支持中英文,但代码架构支持未来添加其他语言
- While currently supporting only Chinese and English, the architecture supports adding other languages in the future
---
## 路线图 / Roadmap
- [ ] 添加更多语言支持(日语、韩语等)/ Add more language support (Japanese, Korean, etc.)
- [ ] 实现 URL 路由多语言 (/en, /zh) / Implement URL routing for languages
- [ ] 服务端渲染 (SSR) 支持 / Server-side rendering (SSR) support
- [ ] 语言特定的日期和数字格式化 / Language-specific date and number formatting
---
## 相关链接 / Related Links
- [hreflang 标签最佳实践](https://developers.google.com/search/docs/specialty/international/localized-versions)
- [Open Graph Protocol](https://ogp.me/)
- [Twitter Cards Documentation](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards)