diff --git a/src/components/Nav.tsx b/src/components/Nav.tsx index 8e2a2ae..130ec88 100644 --- a/src/components/Nav.tsx +++ b/src/components/Nav.tsx @@ -19,7 +19,7 @@ function Nav({ currentPage }: NavProps) {
{t('nav.home')} {t('nav.servers')} - {t('nav.blog')} + {t('nav.blog')} {t('nav.git')} {t('nav.forum')} {t('nav.friends')} diff --git a/src/locales/en.json b/src/locales/en.json index 2a16eac..eea5b2b 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -73,6 +73,20 @@ "english": "English", "chinese": "中文" }, + "blog": { + "title": "Community Blog", + "subtitle": "Stay updated with the latest news, tutorials, and insights from the Counter-Strike community", + "featuredPost": "Featured Article", + "recentPosts": "Recent Posts", + "readMore": "Read More", + "by": "by", + "categories": "Categories", + "loadMore": "Load More Articles", + "subscribe": "Subscribe to Newsletter", + "subscribeDesc": "Get the latest articles and updates delivered to your inbox", + "emailPlaceholder": "Enter your email address", + "subscribeBtn": "Subscribe" + }, "friends": { "title": "Friend Links", "subtitle": "Discover amazing communities and resources from our partner websites", diff --git a/src/locales/zh.json b/src/locales/zh.json index 332ef91..24e7894 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -73,6 +73,20 @@ "english": "English", "chinese": "中文" }, + "blog": { + "title": "社区博客", + "subtitle": "及时了解反恐精英社区的最新新闻、教程和见解", + "featuredPost": "精选文章", + "recentPosts": "最新文章", + "readMore": "阅读更多", + "by": "作者", + "categories": "分类", + "loadMore": "加载更多文章", + "subscribe": "订阅新闻通讯", + "subscribeDesc": "将最新文章和更新发送到您的收件箱", + "emailPlaceholder": "输入您的电子邮件地址", + "subscribeBtn": "订阅" + }, "friends": { "title": "友情链接", "subtitle": "发现来自我们合作伙伴网站的精彩社区和资源", diff --git a/src/main.tsx b/src/main.tsx index f62c9dc..d263d06 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -6,6 +6,7 @@ import './i18n' import { ThemeProvider } from './contexts/ThemeContext' import App from './App.tsx' import Friends from './pages/Friends.tsx' +import Blog from './pages/Blog.tsx' createRoot(document.getElementById('root')!).render( @@ -14,6 +15,7 @@ createRoot(document.getElementById('root')!).render( } /> } /> + } /> diff --git a/src/pages/Blog.tsx b/src/pages/Blog.tsx new file mode 100644 index 0000000..3d1a39e --- /dev/null +++ b/src/pages/Blog.tsx @@ -0,0 +1,474 @@ +import { useTranslation } from 'react-i18next' +import { Link } from 'react-router-dom' +import Layout from '../components/Layout' +import '../App.css' + +interface BlogPost { + id: number + title: string + excerpt: string + content: string + author: string + date: string + readTime: string + category: string + tags: string[] + image?: string +} + +function Blog() { + const { t } = useTranslation() + + // Mock blog posts data + const blogPosts: BlogPost[] = [ + { + id: 1, + title: "Mastering Counter-Strike: Advanced Tactics and Strategies", + excerpt: "Learn the advanced tactics that separate professional players from casual gamers. From positioning to communication, discover the secrets of competitive CS.", + content: "Full article content here...", + author: "ProGamer99", + date: "2025-10-01", + readTime: "8 min read", + category: "Strategy", + tags: ["Counter-Strike", "Tactics", "Professional"], + image: "🎯" + }, + { + id: 2, + title: "The Evolution of Esports: From LAN Parties to Global Tournaments", + excerpt: "Explore how esports has grown from small local tournaments to billion-dollar industry with global audiences and professional athletes.", + content: "Full article content here...", + author: "EsportsAnalyst", + date: "2025-09-28", + readTime: "6 min read", + category: "Esports", + tags: ["Esports", "History", "Tournaments"], + image: "🏆" + }, + { + id: 3, + title: "Building the Perfect Gaming Setup: Hardware Guide 2025", + excerpt: "A comprehensive guide to building the ultimate gaming setup for Counter-Strike and other competitive games. From monitors to peripherals.", + content: "Full article content here...", + author: "TechReviewer", + date: "2025-09-25", + readTime: "12 min read", + category: "Hardware", + tags: ["Gaming Setup", "Hardware", "PC Building"], + image: "🖥️" + }, + { + id: 4, + title: "Community Spotlight: Rising Stars in CS Competitive Scene", + excerpt: "Meet the up-and-coming players who are making waves in the Counter-Strike competitive scene. Their stories, strategies, and paths to success.", + content: "Full article content here...", + author: "CommunityManager", + date: "2025-09-22", + readTime: "10 min read", + category: "Community", + tags: ["Players", "Community", "Rising Stars"], + image: "⭐" + }, + { + id: 5, + title: "Mental Health in Competitive Gaming: Staying Sharp", + excerpt: "The importance of mental health in competitive gaming. Tips and strategies for maintaining focus, managing stress, and performing at your best.", + content: "Full article content here...", + author: "SportsPsychologist", + date: "2025-09-20", + readTime: "7 min read", + category: "Wellness", + tags: ["Mental Health", "Gaming", "Performance"], + image: "🧠" + }, + { + id: 6, + title: "Server Administration: Running Your Own CS Game Server", + excerpt: "A complete guide to setting up and managing your own Counter-Strike game server. From basic setup to advanced configuration and maintenance.", + content: "Full article content here...", + author: "ServerAdmin", + date: "2025-09-18", + readTime: "15 min read", + category: "Technical", + tags: ["Server", "Administration", "Technical"], + image: "🖧" + } + ] + + const categories = [...new Set(blogPosts.map(post => post.category))] + const featuredPost = blogPosts[0] + const recentPosts = blogPosts.slice(1, 4) + + return ( + + {/* Blog Page Header */} +
+
+

+ {t('blog.title')} +

+

+ {t('blog.subtitle')} +

+
+
+ + {/* Featured Post */} +
+
+

+ {t('blog.featuredPost')} +

+
+
+
+ {featuredPost.category} +
+

+ {featuredPost.title} +

+

+ {featuredPost.excerpt} +

+
+ + {t('blog.by')} {featuredPost.author} + + + {featuredPost.date} + + + {featuredPost.readTime} + +
+ { + e.currentTarget.style.transform = 'translateY(-2px)' + }} + onMouseLeave={(e) => { + e.currentTarget.style.transform = 'translateY(0)' + }} + > + {t('blog.readMore')} + +
+
+ {featuredPost.image} +
+
+
+
+ + {/* Blog Content */} +
+
+ + {/* Main Content */} +
+

+ {t('blog.recentPosts')} +

+ +
+ {recentPosts.map(post => ( +
{ + e.currentTarget.style.transform = 'translateY(-5px)' + e.currentTarget.style.boxShadow = '0 10px 30px var(--accent-shadow)' + }} + onMouseLeave={(e) => { + e.currentTarget.style.transform = 'translateY(0)' + e.currentTarget.style.boxShadow = 'none' + }} + > +
+
+ {post.image} +
+
+
+ {post.category} +
+

+ {post.title} +

+

+ {post.excerpt} +

+
+ + {t('blog.by')} {post.author} + + + {post.date} + + + {post.readTime} + +
+
+ {post.tags.map(tag => ( + + #{tag} + + ))} +
+
+
+
+ ))} +
+ + {/* Load More Button */} +
+ +
+
+ + {/* Sidebar */} + +
+
+
+ ) +} + +export default Blog \ No newline at end of file