import Link from 'next/link' import Image from 'next/image' import { getGitHubBadgesFromLinks } from '@/lib/github/badges' import { getLocalizedTagName } from '@/lib/i18n/tag-display' interface ProjectCardProps { project: { id: string name: string nameEn?: string | null slug: string description: string descriptionEn?: string | null tags: Array<{ id: string name: string nameEn?: string | null slug: string }> links?: Array<{ id: string type: string url: string title?: string | null }> } locale: string featured?: boolean // 新增:通过 props 接收翻译文本,支持客户端组件使用 translations?: { viewDetails: string } } // Icon mapping for projects based on tags function getProjectIcon(tags: Array<{ name: string | null }>): string { const tagNames = tags .map(t => t.name?.toLowerCase()) .filter((name): name is string => Boolean(name)) if (tagNames.some(t => t.includes('automation') || t.includes('workflow'))) return '⚙️' if (tagNames.some(t => t.includes('image') || t.includes('art'))) return '🎨' if (tagNames.some(t => t.includes('chat') || t.includes('assistant'))) return '💬' if (tagNames.some(t => t.includes('data') || t.includes('analysis'))) return '📊' if (tagNames.some(t => t.includes('llm') || t.includes('language'))) return '🧠' return '✨' } export function ProjectCard({ project, locale, featured = false, translations }: ProjectCardProps) { // 使用传入的翻译文本,如果没有提供则使用默认值 const viewDetailsText = translations?.viewDetails || (locale === 'zh' ? '查看详情' : 'View Details') const icon = getProjectIcon(project.tags) const displayName = locale === 'en' && project.nameEn ? project.nameEn : project.name const displayDescription = locale === 'en' && project.descriptionEn ? project.descriptionEn : project.description // Generate GitHub badge URLs const badges = project.links ? getGitHubBadgesFromLinks(project.links) : { stars: null } return (
{/* Card Header */}

{displayName}

{icon}
{/* Card Description */}

{displayDescription}

{/* Card Footer */}
{/* Tags */}
{project.tags.slice(0, 3).map((tag) => ( {getLocalizedTagName(tag, locale)} ))}
{/* Footer with View Details and Stars */}
{/* View Details Link */} {viewDetailsText}{' '} {/* GitHub Stars Badge */} {badges.stars && (
{locale
)}
) } // Special card for "Submit Your Project" CTA interface SubmitProjectCardProps { locale: string translations?: { submitProjectTitle: string submitProjectDescription: string submitNow: string } } export function SubmitProjectCard({ locale, translations }: SubmitProjectCardProps) { const submitProjectTitle = translations?.submitProjectTitle || (locale === 'zh' ? '提交你的项目' : 'Submit Your Project') const submitProjectDescription = translations?.submitProjectDescription || (locale === 'zh' ? '帮助我们一起完善 AI 生态' : 'Help us grow the AI ecosystem') const submitNow = translations?.submitNow || (locale === 'zh' ? '立即提交' : 'Submit Now') return (
+

{submitProjectTitle}

{submitProjectDescription}

{submitNow}
) }