feat(i18n): add footer translations in multiple languages
This commit is contained in:
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "إضافة رمز العلامة...",
|
||||
"generateApiKey": "أنشئ مفتاح API لحفظ الأوامر عبر MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "المستندات",
|
||||
"api": "API",
|
||||
"privacy": "الخصوصية",
|
||||
"terms": "الشروط"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "مفتاح API لـ MCP",
|
||||
"description": "أنشئ مفتاح API لحفظ الأوامر عبر MCP والوصول إلى أوامرك الخاصة.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Tag-Slug hinzufügen...",
|
||||
"generateApiKey": "API-Schlüssel generieren, um Prompts über MCP zu speichern"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Dokumentation",
|
||||
"api": "API",
|
||||
"privacy": "Datenschutz",
|
||||
"terms": "Nutzungsbedingungen"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP API-Schlüssel",
|
||||
"description": "Generieren Sie einen API-Schlüssel, um Prompts über MCP zu speichern und auf Ihre privaten Prompts zuzugreifen.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Προσθέστε slug ετικέτας...",
|
||||
"generateApiKey": "Δημιουργήστε κλειδί API για αποθήκευση prompts μέσω MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Τεκμηρίωση",
|
||||
"api": "API",
|
||||
"privacy": "Απόρρητο",
|
||||
"terms": "Όροι"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "Κλειδί API MCP",
|
||||
"description": "Δημιουργήστε ένα κλειδί API για αποθήκευση prompts μέσω MCP και πρόσβαση στα ιδιωτικά σας prompts.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Add tag slug...",
|
||||
"generateApiKey": "Generate API key to save prompts via MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Docs",
|
||||
"api": "API",
|
||||
"privacy": "Privacy",
|
||||
"terms": "Terms"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP API Key",
|
||||
"description": "Generate an API key to save prompts via MCP and access your private prompts.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Añadir slug de etiqueta...",
|
||||
"generateApiKey": "Genera una clave API para guardar prompts vía MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Documentación",
|
||||
"api": "API",
|
||||
"privacy": "Privacidad",
|
||||
"terms": "Términos"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "Clave API MCP",
|
||||
"description": "Genera una clave API para guardar prompts vía MCP y acceder a tus prompts privados.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Ajouter un slug de tag...",
|
||||
"generateApiKey": "Générez une clé API pour enregistrer des prompts via MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Documentation",
|
||||
"api": "API",
|
||||
"privacy": "Confidentialité",
|
||||
"terms": "Conditions"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "Clé API MCP",
|
||||
"description": "Générez une clé API pour enregistrer des prompts via MCP et accéder à vos prompts privés.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "הוסף slug תגית...",
|
||||
"generateApiKey": "צור מפתח API לשמירת פרומפטים דרך MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "תיעוד",
|
||||
"api": "API",
|
||||
"privacy": "פרטיות",
|
||||
"terms": "תנאים"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "מפתח API ל-MCP",
|
||||
"description": "צור מפתח API לשמירת פרומפטים דרך MCP וגישה לפרומפטים הפרטיים שלך.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Aggiungi slug tag...",
|
||||
"generateApiKey": "Genera una chiave API per salvare prompt tramite MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Documentazione",
|
||||
"api": "API",
|
||||
"privacy": "Privacy",
|
||||
"terms": "Termini"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "Chiave API MCP",
|
||||
"description": "Genera una chiave API per salvare prompt tramite MCP e accedere ai tuoi prompt privati.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "タグスラッグを追加...",
|
||||
"generateApiKey": "MCP経由でプロンプトを保存するためのAPIキーを生成"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "ドキュメント",
|
||||
"api": "API",
|
||||
"privacy": "プライバシー",
|
||||
"terms": "利用規約"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP APIキー",
|
||||
"description": "MCP経由でプロンプトを保存し、プライベートプロンプトにアクセスするためのAPIキーを生成します。",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "태그 슬러그 추가...",
|
||||
"generateApiKey": "MCP를 통해 프롬프트를 저장하려면 API 키를 생성하세요"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "문서",
|
||||
"api": "API",
|
||||
"privacy": "개인정보",
|
||||
"terms": "이용약관"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP API 키",
|
||||
"description": "MCP를 통해 프롬프트를 저장하고 비공개 프롬프트에 접근하려면 API 키를 생성하세요.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Adicionar slug da tag...",
|
||||
"generateApiKey": "Gere uma chave API para salvar prompts via MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Documentação",
|
||||
"api": "API",
|
||||
"privacy": "Privacidade",
|
||||
"terms": "Termos"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "Chave API MCP",
|
||||
"description": "Gere uma chave API para salvar prompts via MCP e acessar seus prompts privados.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Добавить slug тега...",
|
||||
"generateApiKey": "Сгенерируйте API-ключ для сохранения промптов через MCP"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Документация",
|
||||
"api": "API",
|
||||
"privacy": "Конфиденциальность",
|
||||
"terms": "Условия"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP API-ключ",
|
||||
"description": "Сгенерируйте API-ключ для сохранения промптов через MCP и доступа к вашим приватным промптам.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "Etiket slug ekle...",
|
||||
"generateApiKey": "MCP ile prompt kaydetmek için API anahtarı oluşturun"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "Belgeler",
|
||||
"api": "API",
|
||||
"privacy": "Gizlilik",
|
||||
"terms": "Şartlar"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP API Anahtarı",
|
||||
"description": "MCP ile prompt kaydetmek ve özel promptlarınıza erişmek için bir API anahtarı oluşturun.",
|
||||
|
||||
@@ -797,6 +797,12 @@
|
||||
"tagPlaceholder": "添加标签标识...",
|
||||
"generateApiKey": "生成 API 密钥以通过 MCP 保存提示词"
|
||||
},
|
||||
"footer": {
|
||||
"docs": "文档",
|
||||
"api": "API",
|
||||
"privacy": "隐私",
|
||||
"terms": "条款"
|
||||
},
|
||||
"apiKey": {
|
||||
"title": "MCP API 密钥",
|
||||
"description": "生成 API 密钥以通过 MCP 保存提示词并访问您的私有提示词。",
|
||||
|
||||
@@ -197,7 +197,7 @@ export default async function PromptsPage({ searchParams }: PromptsPageProps) {
|
||||
|
||||
<FilterProvider>
|
||||
<div className="flex flex-col lg:flex-row gap-6">
|
||||
<aside className="w-full lg:w-56 shrink-0">
|
||||
<aside className="w-full lg:w-56 shrink-0 lg:sticky lg:top-16 lg:self-start lg:max-h-[calc(100vh-5rem)] lg:overflow-y-auto">
|
||||
<PromptFilters
|
||||
categories={categories}
|
||||
tags={tags}
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { useTranslations } from "next-intl";
|
||||
import DeepWikiIcon from "@/../public/deepwiki.svg";
|
||||
import { useBranding } from "@/components/providers/branding-provider";
|
||||
|
||||
export function Footer() {
|
||||
const branding = useBranding();
|
||||
const t = useTranslations("footer");
|
||||
|
||||
return (
|
||||
<footer className="border-t">
|
||||
@@ -23,10 +25,10 @@ export function Footer() {
|
||||
<Image src={DeepWikiIcon} alt="" width={14} height={14} />
|
||||
DeepWiki
|
||||
</Link>
|
||||
<Link href="/docs/self-hosting" className="hover:text-foreground">Docs</Link>
|
||||
<Link href="/docs/api" className="hover:text-foreground">API</Link>
|
||||
<Link href="/privacy" className="hover:text-foreground">Privacy</Link>
|
||||
<Link href="/terms" className="hover:text-foreground">Terms</Link>
|
||||
<Link href="/docs/self-hosting" className="hover:text-foreground">{t("docs")}</Link>
|
||||
<Link href="/docs/api" className="hover:text-foreground">{t("api")}</Link>
|
||||
<Link href="/privacy" className="hover:text-foreground">{t("privacy")}</Link>
|
||||
<Link href="/terms" className="hover:text-foreground">{t("terms")}</Link>
|
||||
</>
|
||||
)}
|
||||
<Link href="https://github.com/f/awesome-chatgpt-prompts" target="_blank" rel="noopener noreferrer" className="hover:text-foreground flex items-center gap-1">
|
||||
|
||||
@@ -15,7 +15,11 @@ import {
|
||||
} from "@/components/ui/select";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Switch } from "@/components/ui/switch";
|
||||
import { X, Sparkles, Search, SlidersHorizontal } from "lucide-react";
|
||||
import { X, Sparkles, Search, SlidersHorizontal, ExternalLink } from "lucide-react";
|
||||
import Link from "next/link";
|
||||
import Image from "next/image";
|
||||
import DeepWikiIcon from "@/../public/deepwiki.svg";
|
||||
import config from "@/../prompts.config";
|
||||
import { analyticsSearch } from "@/lib/analytics";
|
||||
|
||||
interface PromptFiltersProps {
|
||||
@@ -80,6 +84,7 @@ export function PromptFilters({ categories, tags, currentFilters, aiSearchEnable
|
||||
const activeFilterCount = [currentFilters.type, currentFilters.category, currentFilters.tag, currentFilters.sort && currentFilters.sort !== "newest"].filter(Boolean).length;
|
||||
|
||||
return (
|
||||
<div className="space-y-4">
|
||||
<div className="space-y-4 p-0 pt-4 border-t lg:pt-4 lg:p-4 lg:border lg:rounded-lg text-sm">
|
||||
{/* Mobile: Compact search with filter toggle */}
|
||||
<div className="lg:hidden space-y-3">
|
||||
@@ -338,5 +343,50 @@ export function PromptFilters({ categories, tags, currentFilters, aiSearchEnable
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Footer links - desktop only */}
|
||||
<div className="hidden lg:block pt-2 space-y-2">
|
||||
<nav className="flex flex-col gap-1.5 text-xs text-muted-foreground">
|
||||
{!config.homepage?.useCloneBranding && (
|
||||
<>
|
||||
<Link
|
||||
href="https://deepwiki.com/f/awesome-chatgpt-prompts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="hover:text-foreground flex items-center gap-1.5"
|
||||
>
|
||||
<Image src={DeepWikiIcon} alt="" width={12} height={12} />
|
||||
DeepWiki
|
||||
<ExternalLink className="h-2.5 w-2.5 ml-auto opacity-50" />
|
||||
</Link>
|
||||
<Link href="/docs/self-hosting" className="hover:text-foreground">
|
||||
{t("footer.docs")}
|
||||
</Link>
|
||||
<Link href="/docs/api" className="hover:text-foreground">
|
||||
{t("footer.api")}
|
||||
</Link>
|
||||
<Link href="/privacy" className="hover:text-foreground">
|
||||
{t("footer.privacy")}
|
||||
</Link>
|
||||
<Link href="/terms" className="hover:text-foreground">
|
||||
{t("footer.terms")}
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
<Link
|
||||
href="https://github.com/f/awesome-chatgpt-prompts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="hover:text-foreground flex items-center gap-1.5"
|
||||
>
|
||||
<svg className="h-3 w-3" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" />
|
||||
</svg>
|
||||
GitHub
|
||||
<ExternalLink className="h-2.5 w-2.5 ml-auto opacity-50" />
|
||||
</Link>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user