feat(i18n): add footer translations in multiple languages

This commit is contained in:
Fatih Kadir Akın
2025-12-17 20:21:52 +03:00
parent 3e5e18ed98
commit 2e5f8fd887
17 changed files with 142 additions and 6 deletions
+6
View File
@@ -797,6 +797,12 @@
"tagPlaceholder": "إضافة رمز العلامة...",
"generateApiKey": "أنشئ مفتاح API لحفظ الأوامر عبر MCP"
},
"footer": {
"docs": "المستندات",
"api": "API",
"privacy": "الخصوصية",
"terms": "الشروط"
},
"apiKey": {
"title": "مفتاح API لـ MCP",
"description": "أنشئ مفتاح API لحفظ الأوامر عبر MCP والوصول إلى أوامرك الخاصة.",
+6
View File
@@ -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.",
+6
View File
@@ -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.",
+6
View File
@@ -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.",
+6
View File
@@ -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.",
+6
View File
@@ -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.",
+6
View File
@@ -797,6 +797,12 @@
"tagPlaceholder": "הוסף slug תגית...",
"generateApiKey": "צור מפתח API לשמירת פרומפטים דרך MCP"
},
"footer": {
"docs": "תיעוד",
"api": "API",
"privacy": "פרטיות",
"terms": "תנאים"
},
"apiKey": {
"title": "מפתח API ל-MCP",
"description": "צור מפתח API לשמירת פרומפטים דרך MCP וגישה לפרומפטים הפרטיים שלך.",
+6
View File
@@ -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.",
+6
View File
@@ -797,6 +797,12 @@
"tagPlaceholder": "タグスラッグを追加...",
"generateApiKey": "MCP経由でプロンプトを保存するためのAPIキーを生成"
},
"footer": {
"docs": "ドキュメント",
"api": "API",
"privacy": "プライバシー",
"terms": "利用規約"
},
"apiKey": {
"title": "MCP APIキー",
"description": "MCP経由でプロンプトを保存し、プライベートプロンプトにアクセスするためのAPIキーを生成します。",
+6
View File
@@ -797,6 +797,12 @@
"tagPlaceholder": "태그 슬러그 추가...",
"generateApiKey": "MCP를 통해 프롬프트를 저장하려면 API 키를 생성하세요"
},
"footer": {
"docs": "문서",
"api": "API",
"privacy": "개인정보",
"terms": "이용약관"
},
"apiKey": {
"title": "MCP API 키",
"description": "MCP를 통해 프롬프트를 저장하고 비공개 프롬프트에 접근하려면 API 키를 생성하세요.",
+6
View File
@@ -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.",
+6
View File
@@ -797,6 +797,12 @@
"tagPlaceholder": "Добавить slug тега...",
"generateApiKey": "Сгенерируйте API-ключ для сохранения промптов через MCP"
},
"footer": {
"docs": "Документация",
"api": "API",
"privacy": "Конфиденциальность",
"terms": "Условия"
},
"apiKey": {
"title": "MCP API-ключ",
"description": "Сгенерируйте API-ключ для сохранения промптов через MCP и доступа к вашим приватным промптам.",
+6
View File
@@ -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.",
+6
View File
@@ -797,6 +797,12 @@
"tagPlaceholder": "添加标签标识...",
"generateApiKey": "生成 API 密钥以通过 MCP 保存提示词"
},
"footer": {
"docs": "文档",
"api": "API",
"privacy": "隐私",
"terms": "条款"
},
"apiKey": {
"title": "MCP API 密钥",
"description": "生成 API 密钥以通过 MCP 保存提示词并访问您的私有提示词。",
+1 -1
View File
@@ -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}
+6 -4
View File
@@ -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">
+51 -1
View File
@@ -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>
);
}