diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 6d29b66..2225cc4 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -7,6 +7,7 @@ import { NextIntlClientProvider, useLocale } from "next-intl"; import { getLocale, getTranslations } from "next-intl/server"; import { localeDirection } from "../i18n/locales"; import { baseOpenGraph } from "@/lib/locale-path"; +import { docsUI } from "../i18n/fumadocs-ui"; const geistSans = Geist({ variable: "--font-geist-sans", @@ -68,7 +69,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) - + {children} diff --git a/src/i18n/fumadocs-ui.ts b/src/i18n/fumadocs-ui.ts new file mode 100644 index 0000000..b2cc863 --- /dev/null +++ b/src/i18n/fumadocs-ui.ts @@ -0,0 +1,175 @@ +// Fumadocs' own UI text (search, table of contents, sidebar, code blocks…) in +// each site language. Keys are Fumadocs' (fumadocs-ui/dist/.translations); +// English is Fumadocs' default. The search dialog also sends the locale to +// /api/search, so results come from the page's language. +import { defineI18nUI } from "fumadocs-ui/i18n"; +import { locales, sourceLocale } from "./locales"; + +const es = { + displayName: "Español", + "Ask AI(AI chat button)": "Preguntar a la IA", + "Back to Home(404 page)": "Volver al inicio", + "Choose a language(language switcher)": "Elige un idioma", + "Choose a language(language switcher)(aria-label)": "Elige un idioma", + "Close Banner(banner)(aria-label)": "Cerrar banner", + "Close Search(search dialog)(aria-label)": "Cerrar búsqueda", + "Close Sidebar(aria-label)": "Cerrar barra lateral", + "Close Sidebar(sidebar)(aria-label)": "Cerrar barra lateral", + "Collapse Sidebar(sidebar)(aria-label)": "Contraer barra lateral", + "Copied Text(code block)(aria-label)": "Texto copiado", + "Copy Anchor Link(heading anchor)(aria-label)": "Copiar enlace a la sección", + "Copy Link(accordion)(aria-label)": "Copiar enlace", + "Copy Markdown(page actions)": "Copiar Markdown", + "Copy Text(code block)(aria-label)": "Copiar texto", + "Dark(theme switcher)(aria-label)": "Oscuro", + "Default(type table)": "Predeterminado", + "Edit on GitHub(edit page)": "Editar en GitHub", + "Hide Sidebar(sidebar)": "Ocultar barra lateral", + "Last updated on(page footer)": "Última actualización:", + "Layout Tab(layout tab trigger)": "Pestaña de diseño", + "Light(theme switcher)(aria-label)": "Claro", + "Next Page(pagination)": "Página siguiente", + "No Headings(table of contents)": "Sin encabezados", + "No results found(search dialog)": "No se encontraron resultados", + "On this page(table of contents)": "En esta página", + "Open Search(search trigger)(aria-label)": "Abrir búsqueda", + "Open Sidebar(sidebar)(aria-label)": "Abrir barra lateral", + "Open in ChatGPT(page actions)": "Abrir en ChatGPT", + "Open in Claude(page actions)": "Abrir en Claude", + "Open in Cursor(page actions)": "Abrir en Cursor", + "Open in GitHub(page actions)": "Abrir en GitHub", + "Open in Scira AI(page actions)": "Abrir en Scira AI", + "Open(page actions)": "Abrir", + "Page Not Found(404 page)": "Página no encontrada", + "Parameters(type table)": "Parámetros", + "Previous Page(pagination)": "Página anterior", + "Prop(type table)": "Prop", + "Read {url}, I want to ask questions about it.(page actions)": + "Lee {url}, quiero hacer preguntas sobre ella.", + "Returns(type table)": "Devuelve", + "Search(search dialog)": "Buscar", + "Search(search trigger)": "Buscar", + "Show Sidebar(sidebar)": "Mostrar barra lateral", + "System(theme switcher)(aria-label)": "Sistema", + "Table of Contents(inline table of contents)": "Índice", + "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.(404 page)": + "Es posible que la página que buscas se haya eliminado, haya cambiado de nombre o no esté disponible temporalmente.", + "Toggle Menu(mobile menu)(aria-label)": "Abrir o cerrar el menú", + "Toggle Theme(theme switcher)(aria-label)": "Cambiar tema", + "Type(type table)": "Tipo", + "View as Markdown(page actions)": "Ver como Markdown", +}; + +const ja = { + displayName: "日本語", + "Ask AI(AI chat button)": "AI に質問", + "Back to Home(404 page)": "ホームに戻る", + "Choose a language(language switcher)": "言語を選択", + "Choose a language(language switcher)(aria-label)": "言語を選択", + "Close Banner(banner)(aria-label)": "バナーを閉じる", + "Close Search(search dialog)(aria-label)": "検索を閉じる", + "Close Sidebar(aria-label)": "サイドバーを閉じる", + "Close Sidebar(sidebar)(aria-label)": "サイドバーを閉じる", + "Collapse Sidebar(sidebar)(aria-label)": "サイドバーを折りたたむ", + "Copied Text(code block)(aria-label)": "コピーしました", + "Copy Anchor Link(heading anchor)(aria-label)": "見出しへのリンクをコピー", + "Copy Link(accordion)(aria-label)": "リンクをコピー", + "Copy Markdown(page actions)": "Markdown をコピー", + "Copy Text(code block)(aria-label)": "テキストをコピー", + "Dark(theme switcher)(aria-label)": "ダーク", + "Default(type table)": "デフォルト", + "Edit on GitHub(edit page)": "GitHub で編集", + "Hide Sidebar(sidebar)": "サイドバーを隠す", + "Last updated on(page footer)": "最終更新日:", + "Layout Tab(layout tab trigger)": "レイアウトタブ", + "Light(theme switcher)(aria-label)": "ライト", + "Next Page(pagination)": "次のページ", + "No Headings(table of contents)": "見出しはありません", + "No results found(search dialog)": "結果が見つかりませんでした", + "On this page(table of contents)": "このページの内容", + "Open Search(search trigger)(aria-label)": "検索を開く", + "Open Sidebar(sidebar)(aria-label)": "サイドバーを開く", + "Open in ChatGPT(page actions)": "ChatGPT で開く", + "Open in Claude(page actions)": "Claude で開く", + "Open in Cursor(page actions)": "Cursor で開く", + "Open in GitHub(page actions)": "GitHub で開く", + "Open in Scira AI(page actions)": "Scira AI で開く", + "Open(page actions)": "開く", + "Page Not Found(404 page)": "ページが見つかりません", + "Parameters(type table)": "パラメーター", + "Previous Page(pagination)": "前のページ", + "Prop(type table)": "Prop", + "Read {url}, I want to ask questions about it.(page actions)": + "{url} を読んでください。この内容について質問したいです。", + "Returns(type table)": "戻り値", + "Search(search dialog)": "検索", + "Search(search trigger)": "検索", + "Show Sidebar(sidebar)": "サイドバーを表示", + "System(theme switcher)(aria-label)": "システム", + "Table of Contents(inline table of contents)": "目次", + "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.(404 page)": + "お探しのページは削除されたか、名前が変更されたか、一時的に利用できない可能性があります。", + "Toggle Menu(mobile menu)(aria-label)": "メニューを開閉", + "Toggle Theme(theme switcher)(aria-label)": "テーマを切り替え", + "Type(type table)": "型", + "View as Markdown(page actions)": "Markdown で表示", +}; + +const ar = { + displayName: "العربية", + "Ask AI(AI chat button)": "اسأل الذكاء الاصطناعي", + "Back to Home(404 page)": "العودة إلى الرئيسية", + "Choose a language(language switcher)": "اختر لغة", + "Choose a language(language switcher)(aria-label)": "اختر لغة", + "Close Banner(banner)(aria-label)": "إغلاق الشريط", + "Close Search(search dialog)(aria-label)": "إغلاق البحث", + "Close Sidebar(aria-label)": "إغلاق الشريط الجانبي", + "Close Sidebar(sidebar)(aria-label)": "إغلاق الشريط الجانبي", + "Collapse Sidebar(sidebar)(aria-label)": "طي الشريط الجانبي", + "Copied Text(code block)(aria-label)": "تم النسخ", + "Copy Anchor Link(heading anchor)(aria-label)": "نسخ رابط القسم", + "Copy Link(accordion)(aria-label)": "نسخ الرابط", + "Copy Markdown(page actions)": "نسخ Markdown", + "Copy Text(code block)(aria-label)": "نسخ النص", + "Dark(theme switcher)(aria-label)": "داكن", + "Default(type table)": "الافتراضي", + "Edit on GitHub(edit page)": "التعديل على GitHub", + "Hide Sidebar(sidebar)": "إخفاء الشريط الجانبي", + "Last updated on(page footer)": "آخر تحديث:", + "Layout Tab(layout tab trigger)": "علامة تبويب التخطيط", + "Light(theme switcher)(aria-label)": "فاتح", + "Next Page(pagination)": "الصفحة التالية", + "No Headings(table of contents)": "لا توجد عناوين", + "No results found(search dialog)": "لم يتم العثور على نتائج", + "On this page(table of contents)": "في هذه الصفحة", + "Open Search(search trigger)(aria-label)": "فتح البحث", + "Open Sidebar(sidebar)(aria-label)": "فتح الشريط الجانبي", + "Open in ChatGPT(page actions)": "فتح في ChatGPT", + "Open in Claude(page actions)": "فتح في Claude", + "Open in Cursor(page actions)": "فتح في Cursor", + "Open in GitHub(page actions)": "فتح في GitHub", + "Open in Scira AI(page actions)": "فتح في Scira AI", + "Open(page actions)": "فتح", + "Page Not Found(404 page)": "الصفحة غير موجودة", + "Parameters(type table)": "المعاملات", + "Previous Page(pagination)": "الصفحة السابقة", + "Prop(type table)": "الخاصية", + "Read {url}, I want to ask questions about it.(page actions)": "اقرأ {url}، أريد طرح أسئلة حوله.", + "Returns(type table)": "القيمة المُعادة", + "Search(search dialog)": "بحث", + "Search(search trigger)": "بحث", + "Show Sidebar(sidebar)": "إظهار الشريط الجانبي", + "System(theme switcher)(aria-label)": "النظام", + "Table of Contents(inline table of contents)": "جدول المحتويات", + "The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.(404 page)": + "ربما تمت إزالة الصفحة التي تبحث عنها أو تغيير اسمها أو أنها غير متاحة مؤقتًا.", + "Toggle Menu(mobile menu)(aria-label)": "تبديل القائمة", + "Toggle Theme(theme switcher)(aria-label)": "تبديل السمة", + "Type(type table)": "النوع", + "View as Markdown(page actions)": "عرض بصيغة Markdown", +}; + +export const docsUI = defineI18nUI( + { defaultLanguage: sourceLocale, languages: locales }, + { en: { displayName: "English" }, es, ja, ar }, +);