): string
+```
+
+### Parameters
+
+| Parameter | Type | Beschrijving |
+|-----------|------|--------------|
+| `key` | `string` | Vertalingssleutel (ondersteunt puntnotatie) |
+| `variables` | `object` | Variabelen om te interpoleren |
+
+### Variabele Interpolatie
+
+```json
+{
+ "greeting": "Hallo, {name}!",
+ "items": "Je hebt {count} items"
+}
+```
+
+```tsx
+t("greeting", { name: "Alice" }); // "Hallo, Alice!"
+t("items", { count: 5 }); // "Je hebt 5 items"
+```
+
+### Geneste Sleutels
+
+```json
+{
+ "user": {
+ "profile": {
+ "title": "Profiel"
+ }
+ }
+}
+```
+
+```tsx
+t("user.profile.title"); // "Profiel"
+```
+
+## Type Definities
+
+### TranslationNamespaces
+
+Verleng deze interface voor type-veilige vertalingen:
+
+```tsx
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("./locales/nl/common.json");
+ auth: typeof import("./locales/nl/auth.json");
+ }
+}
+```
+
+
+ Met de juiste type definities krijg je autocomplete voor vertalingssleutels en compileertijdfouten voor ongeldige sleutels.
+
diff --git a/apps/web/src/content/nl/docs/translations/getting-started.mdx b/apps/web/src/content/nl/docs/translations/getting-started.mdx
new file mode 100644
index 000000000..fb8e0525f
--- /dev/null
+++ b/apps/web/src/content/nl/docs/translations/getting-started.mdx
@@ -0,0 +1,92 @@
+---
+title: Aan de slag
+description: 'Een lichte, type-veilige internationalisatiebibliotheek voor React en Next.js'
+---
+## Wat is @onruntime/translations?
+
+`@onruntime/translations` is een lichte, typeveilige internationalisatie (i18n) bibliotheek ontworpen voor React en Next.js applicaties. Het biedt een eenvoudige API voor het beheren van vertalingen met volledige TypeScript ondersteuning.
+
+
+ - Typeveilige vertalingen met TypeScript
+ - Ondersteuning voor React en Next.js (App Router)
+ - Namespace-gebaseerde organisatie
+ - Variabele interpolatie
+ - Lichtgewicht en performant
+
+
+## Waarom Het Gebruiken?
+
+### Type Veiligheid
+
+Krijg compileertijdfouten bij het gebruik van ongeldige vertaalkeys:
+
+```typescript
+const { t } = useTranslation("common");
+
+t("greeting"); // ✅ Geldige key
+t("invalid_key"); // ❌ TypeScript fout
+```
+
+### Eenvoudige API
+
+Slechts twee hooks voor al je vertaalbehoeften:
+
+```typescript
+// Client Componenten
+const { t } = useTranslation("namespace");
+
+// Server Componenten (Next.js)
+const { t } = await getTranslation("namespace");
+```
+
+### Georganiseerde Vertalingen
+
+Houd je vertalingen georganiseerd met namespaces:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Snelle Voorbeeld
+
+```tsx
+// locales/en/common.json
+{
+ "greeting": "Hallo, {name}!"
+}
+
+// Component
+import { useTranslation } from "@onruntime/translations/react";
+
+function Welcome({ name }) {
+ const { t } = useTranslation("common");
+
+ return {t("greeting", { name })} ;
+}
+```
+
+## Volgende Stappen
+
+
+
+
+
diff --git a/apps/web/src/content/nl/docs/translations/installation.mdx b/apps/web/src/content/nl/docs/translations/installation.mdx
new file mode 100644
index 000000000..46bcb98c8
--- /dev/null
+++ b/apps/web/src/content/nl/docs/translations/installation.mdx
@@ -0,0 +1,127 @@
+---
+title: Installatie
+description: Installeer en configureer @onruntime/translations
+---
+## Installatie
+
+Installeer het pakket met je favoriete pakketbeheerder:
+
+```bash
+# npm
+npm install @onruntime/translations
+
+# yarn
+yarn add @onruntime/translations
+
+# pnpm
+pnpm add @onruntime/translations
+```
+
+## Project Setup
+
+### 1. Maak Vertalingsbestanden Aan
+
+Maak een `locales` map in je project met vertalingsbestanden voor elke taal:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Voorbeeld `locales/en/common.json`:
+
+```json
+{
+ "title": "Welkom",
+ "greeting": "Hallo, {name}!",
+ "items": {
+ "one": "{count} item",
+ "other": "{count} items"
+ }
+}
+```
+
+### 2. Configureer TypeScript (Optioneel)
+
+Voor type-veilige vertalingen, maak een typedefinitiebestand aan:
+
+```typescript
+// types/translations.d.ts
+import "onruntime/translations";
+
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("../locales/en/common.json");
+ auth: typeof import("../locales/en/auth.json");
+ }
+}
+```
+
+### 3. Zet Provider Op
+
+Omring je app met de `TranslationsProvider`:
+
+```tsx
+// Voor React
+import { TranslationsProvider } from "@onruntime/translations/react";
+import en from "./locales/en";
+import fr from "./locales/fr";
+
+const locales = { en, fr };
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
+ Voor Next.js met App Router, bekijk de [Next.js Usage](/docs/translations/nextjs) gids voor de aanbevolen setup.
+
+
+## Installatie Verifiëren
+
+Test je setup met een eenvoudig component:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function TestComponent() {
+ const { t } = useTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("greeting", { name: "Wereld" })}
+
+ );
+}
+```
+
+Als je je vertalingen ziet weergegeven, ben je klaar om te gaan!
+
+## Volgende Stappen
+
+
+
+
+
diff --git a/apps/web/src/content/nl/docs/translations/nextjs.mdx b/apps/web/src/content/nl/docs/translations/nextjs.mdx
new file mode 100644
index 000000000..5a5393f36
--- /dev/null
+++ b/apps/web/src/content/nl/docs/translations/nextjs.mdx
@@ -0,0 +1,191 @@
+---
+title: Next.js gebruik
+description: Eenvoudig @onruntime/translations gebruiken met de Next.js App Router
+---
+## Opzet voor App Router
+
+### 1. Configureer de Provider
+
+Maak een providers-bestand aan om vertalingen in te stellen:
+
+```tsx
+// app/providers.tsx
+"use client";
+
+import { TranslationsProvider } from "@onruntime/translations/react";
+import { ReactNode } from "react";
+
+import en from "@/locales/en";
+import fr from "@/locales/fr";
+
+const locales = { en, fr };
+
+interface ProvidersProps {
+ children: ReactNode;
+ locale: string;
+}
+
+export function Providers({ children, locale }: ProvidersProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+### 2. Stel de Hoofdlayout In
+
+Gebruik de provider in je hoofdlayout:
+
+```tsx
+// app/[locale]/layout.tsx
+import { Providers } from "../providers";
+
+export default function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { locale: string };
+}) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+## Servercomponenten
+
+Gebruik `getTranslation` voor Servercomponenten:
+
+```tsx
+// app/[locale]/page.tsx
+import { getTranslation } from "@/lib/translations.server";
+
+export default async function HomePage() {
+ const { t } = await getTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("description")}
+
+ );
+}
+```
+
+
+ Gebruik `getTranslation` in Servercomponenten en `useTranslation` in Clientcomponenten.
+
+
+## Clientcomponenten
+
+Gebruik `useTranslation` voor Clientcomponenten:
+
+```tsx
+"use client";
+
+import { useTranslation } from "@onruntime/translations/react";
+
+export function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ Engels
+ Français
+
+ );
+}
+```
+
+## Lokalisatie-gebaseerde Routering
+
+### Middleware Instelling
+
+Stel middleware in om lokalisatie-detectie te verwerken:
+
+```tsx
+// middleware.ts
+import { NextRequest, NextResponse } from "next/server";
+
+const locales = ["en", "fr"];
+const defaultLocale = "en";
+
+export function middleware(request: NextRequest) {
+ const pathname = request.nextUrl.pathname;
+
+ // Controleer of de pathname een lokalisatie heeft
+ const pathnameHasLocale = locales.some(
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
+ );
+
+ if (pathnameHasLocale) return;
+
+ // Redirect naar de standaard lokalisatie
+ return NextResponse.redirect(
+ new URL(`/${defaultLocale}${pathname}`, request.url)
+ );
+}
+
+export const config = {
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
+};
+```
+
+## Statische Generatie
+
+Genereer statische pagina's voor alle lokalisaties:
+
+```tsx
+// app/[locale]/page.tsx
+export async function generateStaticParams() {
+ return [{ locale: "en" }, { locale: "fr" }];
+}
+```
+
+## Link Component
+
+Gebruik de vertaalde Link component voor navigatie:
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+function Navigation() {
+ return (
+
+ Home
+ Over
+
+ );
+}
+```
+
+De `Link` component verwerkt automatisch lokalisatie-voorvoegsels.
+
+## Voorbeeld Projectstructuur
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/content/nl/docs/translations/react.mdx b/apps/web/src/content/nl/docs/translations/react.mdx
new file mode 100644
index 000000000..643d55beb
--- /dev/null
+++ b/apps/web/src/content/nl/docs/translations/react.mdx
@@ -0,0 +1,157 @@
+---
+title: Gebruik van React
+description: Gebruik van @onruntime/translations in React-applicaties
+---
+## Basisgebruik
+
+### De useTranslation Hook
+
+De `useTranslation` hook is je belangrijkste manier om vertalingen in React-componenten te verkrijgen:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function MyComponent() {
+ const { t, locale } = useTranslation("common");
+
+ return (
+
+
Huidige taalinstelling: {locale}
+
{t("title")}
+
+ );
+}
+```
+
+### Variabele Interpolatie
+
+Stuur variabelen mee naar je vertalingen:
+
+```json
+// locales/en/common.json
+{
+ "greeting": "Hallo, {name}!",
+ "items_count": "Je hebt {count} items"
+}
+```
+
+```tsx
+function Greeting({ name, itemCount }) {
+ const { t } = useTranslation("common");
+
+ return (
+ <>
+ {t("greeting", { name })}
+ {t("items_count", { count: itemCount })}
+ >
+ );
+}
+```
+
+## Meerdere Namespaces
+
+Je kunt meerdere namespaces in dezelfde component gebruiken:
+
+```tsx
+function Dashboard() {
+ const { t: tCommon } = useTranslation("common");
+ const { t: tDashboard } = useTranslation("dashboard");
+
+ return (
+
+
{tDashboard("title")}
+ {tCommon("buttons.save")}
+
+ );
+}
+```
+
+## Taalinstelling Wijzigen
+
+Gebruik de `setLocale` functie om de huidige taalinstelling te wijzigen:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ Engels
+ Français
+ Deutsch
+
+ );
+}
+```
+
+## Geneste Sleutels
+
+Toegang tot geneste vertaal-sleutels met behulp van puntnotatie:
+
+```json
+// locales/en/common.json
+{
+ "nav": {
+ "home": "Home",
+ "about": "Over",
+ "contact": "Contact"
+ }
+}
+```
+
+```tsx
+function Navigation() {
+ const { t } = useTranslation("common");
+
+ return (
+
+ {t("nav.home")}
+ {t("nav.about")}
+ {t("nav.contact")}
+
+ );
+}
+```
+
+## Beste Praktijken
+
+
+ Organiseer vertalingen op functie of pagina in plaats van alles in één bestand te zetten.
+
+
+### Aanbevolen Structuur
+
+
+
+
+
+
+
+
+
+
+
+
+### Houd Sleutels Consistent
+
+Gebruik consistente naamgevingsconventies in alle locales:
+
+```json
+// ✅ Goed - consistente structuur
+{
+ "page_title": "Dashboard",
+ "actions": {
+ "save": "Opslaan",
+ "cancel": "Annuleren"
+ }
+}
+
+// ❌ Vermijd - inconsistent
+{
+ "pageTitle": "Dashboard",
+ "save_button": "Opslaan",
+ "cancelBtn": "Annuleren"
+}
+```
diff --git a/apps/web/src/content/pl/docs/gitmoji/emojis.mdx b/apps/web/src/content/pl/docs/gitmoji/emojis.mdx
new file mode 100644
index 000000000..3695f0a7c
--- /dev/null
+++ b/apps/web/src/content/pl/docs/gitmoji/emojis.mdx
@@ -0,0 +1,11 @@
+---
+title: Referencja Emoji
+description: Pełna lista gitmojis
+---
+Używamy [gitmoji](https://gitmoji.dev), żeby kategoryzować nasze commity. Oto pełna lista emotikonów, ich kodów i opisów:
+
+
+
+
+ Użyj [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) lub [rozszerzenia VS Code](https://marketplace.visualstudio.com/items?itemName=seatonjiang.gitmoji-vscode), żeby mieć interaktywne doświadczenie z commitami.
+
diff --git a/apps/web/src/content/pl/docs/gitmoji/getting-started.mdx b/apps/web/src/content/pl/docs/gitmoji/getting-started.mdx
new file mode 100644
index 000000000..c9a81ae84
--- /dev/null
+++ b/apps/web/src/content/pl/docs/gitmoji/getting-started.mdx
@@ -0,0 +1,91 @@
+---
+title: Zaczynamy
+description: Poznaj naszą konwencję commitów
+---
+Lubimy mieć czystą historię projektu. Nasza konwencja commitów jest inspirowana [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0), ale dostosowana z użyciem [gitmoji](https://gitmoji.dev), żeby było to bardziej wizualne i zabawne.
+
+## Struktura
+
+Wiadomość commit powinna być zbudowana w następujący sposób i **ma być napisana małymi literami**:
+
+```
+ [(#)]
+
+[nieobowiązkowe ciało]
+
+[nieobowiązkowe stopki]
+```
+
+### Przykład
+
+```bash
+📝 update documentation contributors
+
+- Dodaj @jerembdn jako współautora
+- Dodaj @younesbessa jako współautora
+
+Co-authored-by: Younes Bessa
+```
+
+Z reguły wystarczy prosty jednowierszowy wpis:
+
+```bash
+📝 update documentation contributors
+```
+
+## Typy
+
+Używamy następujących typów commitów:
+
+| Typ | Opis |
+| --- | --- |
+| `add` | Dodaj nową funkcjonalność |
+| `fix` | Napraw błąd |
+| `improve` | Popraw coś |
+| `update` | Zaktualizuj coś |
+| `remove` | Usuń coś |
+| `refactor` | Przeorganizuj coś |
+| `rename` | Zmień nazwę czegoś |
+| `move` | Przenieś plik lub folder |
+| `upgrade` | Zaktualizuj zależności |
+| `downgrade` | Obniż zależności |
+
+## Opis
+
+Pisanie opisów w **trybie rozkazującym** i **małymi literami**:
+
+```bash
+# Dobrze
+📝 update documentation contributors
+
+# Źle
+📝 updated documentation contributors
+
+# Źle
+📝 Update documentation contributors
+```
+
+## Numer issue
+
+Połącz commity z issue, dodając numer issue:
+
+```bash
+📝 update documentation contributors (#123)
+```
+
+## Ciało
+
+Użyj ciała do kontekstu i motywacji:
+
+```bash
+📝 update documentation contributors
+
+- Dodaj @jerembdn jako współautora
+- Dodaj @younesbessa jako współautora
+
+Co-authored-by: Younes Bessa
+```
+
+
+ Każdy commit powinien reprezentować jedną logiczną zmianę. Nie mieszaj niepowiązanych zmian.
+
diff --git a/apps/web/src/content/pl/docs/gitmoji/with-ai.mdx b/apps/web/src/content/pl/docs/gitmoji/with-ai.mdx
new file mode 100644
index 000000000..964438933
--- /dev/null
+++ b/apps/web/src/content/pl/docs/gitmoji/with-ai.mdx
@@ -0,0 +1,63 @@
+---
+title: Z AI
+description: Używaj gitmoji z Claude Code
+---
+Zainstaluj naszą wtyczkę gitmoji do [Claude Code](https://claude.ai/code), aby generować commity zgodnie z konwencją.
+
+## Instalacja wtyczki
+
+Dodaj rynek onRuntime i zainstaluj wtyczkę:
+
+```bash
+# Dodaj rynek onRuntime
+/plugin marketplace add https://onruntime.com/plugins
+
+# Zainstaluj wtyczkę gitmoji
+/plugin install gitmoji@onruntime
+```
+
+Lub zainstaluj bezpośrednio z menu:
+
+1. Uruchom `/plugin` w Claude Code
+2. Przejdź do zakładki **Discover**
+3. Dodaj rynek: `https://onruntime.com/plugins`
+4. Wyszukaj "gitmoji" i zainstaluj
+
+## Użycie
+
+Uruchom komendę `/commit`, aby utworzyć commit:
+
+```
+/commit
+```
+
+```
+/commit napraw bug logowania
+```
+
+Claude Code przeanalizuje twoje zmiany i stworzy commit zgodny z konwencją gitmoji.
+
+
+ Komenda `/commit` automatycznie pobiera status git i różnice, aby wygenerować odpowiednią wiadomość commit.
+
+
+## Alternatywa: CLAUDE.md
+
+Jeśli wolisz nie instalować wtyczki, dodaj to do pliku `CLAUDE.md` w swoim projekcie:
+
+```markdown
+## Konwencja Commitów
+
+Użyj konwencjonalnych commitów gitmoji:
+
+\`\`\`
+
+\`\`\`
+
+Typy: add, fix, improve, update, remove, refactor, rename, move, upgrade, downgrade
+
+Zasady:
+- Pisz małymi literami
+- Używaj trybu rozkazującego ("add" a nie "added")
+- Jedna logiczna zmiana na commit
+```
diff --git a/apps/web/src/content/pl/docs/next-sitemap/api.mdx b/apps/web/src/content/pl/docs/next-sitemap/api.mdx
new file mode 100644
index 000000000..7148f7cc5
--- /dev/null
+++ b/apps/web/src/content/pl/docs/next-sitemap/api.mdx
@@ -0,0 +1,169 @@
+---
+title: Dokumentacja API
+description: Pełna dokumentacja API dla @onruntime/next-sitemap
+---
+## generateSitemap
+
+Generuje mapę strony dla twojej aplikacji Next.js.
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const sitemap = await generateSitemap(options);
+```
+
+### Opcje
+
+| Opcja | Typ | Wymagane | Opis |
+|-------|-----|----------|------|
+| `baseUrl` | `string` | Tak | Podstawowy adres URL twojej strony |
+| `additionalPaths` | `SitemapEntry[]` | Nie | Dodatkowe adresy URL do uwzględnienia |
+| `exclude` | `string[]` | Nie | Wzorce glob do wykluczenia |
+| `defaults` | `SitemapDefaults` | Nie | Domyślne wartości dla wszystkich wpisów |
+| `locales` | `string[]` | Nie | Wspierane locale |
+| `defaultLocale` | `string` | Nie | Domyślne locale |
+
+### SitemapEntry
+
+| Właściwość | Typ | Opis |
+|------------|-----|------|
+| `url` | `string` | Adres URL strony (względny lub absolutny) |
+| `lastModified` | `Date \| string` | Data ostatniej modyfikacji |
+| `changeFrequency` | `ChangeFrequency` | Jak często strona się zmienia |
+| `priority` | `number` | Priorytet (0.0 - 1.0) |
+
+### ChangeFrequency
+
+```tsx
+type ChangeFrequency =
+ | "always"
+ | "hourly"
+ | "daily"
+ | "weekly"
+ | "monthly"
+ | "yearly"
+ | "never";
+```
+
+### Przykład
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ const blogPosts = await fetchPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ additionalPaths: blogPosts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ priority: 0.8,
+ })),
+ exclude: ["/admin/*", "/api/*"],
+ });
+}
+```
+
+## generateRobots
+
+Generuje plik robots.txt.
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+const robots = generateRobots(options);
+```
+
+### Opcje
+
+| Opcja | Typ | Wymagane | Opis |
+|-------|-----|----------|------|
+| `baseUrl` | `string` | Tak | Podstawowy adres URL twojej strony |
+| `rules` | `RobotsRule[]` | Nie | Niestandardowe zasady dla robotów |
+| `sitemap` | `string \| boolean` | Nie | Adres URL mapy strony lub `false` do wykluczenia |
+
+### RobotsRule
+
+| Właściwość | Typ | Opis |
+|------------|-----|------|
+| `userAgent` | `string` | Docelowy agent użytkownika |
+| `allow` | `string \| string[]` | Dozwolone ścieżki |
+| `disallow` | `string \| string[]` | Niedozwolone ścieżki |
+| `crawlDelay` | `number` | Opóźnienie skanowania w sekundach |
+
+### Przykład
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ crawlDelay: 1,
+ },
+ ],
+ });
+}
+```
+
+## generateSitemapIndex
+
+Generuje indeks mapy strony dla dużych stron.
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+const index = await generateSitemapIndex(options);
+```
+
+### Opcje
+
+| Opcja | Typ | Wymagane | Opis |
+|-------|-----|----------|------|
+| `baseUrl` | `string` | Tak | Podstawowy adres URL twojej strony |
+| `sitemapsPerFile` | `number` | Nie | Adresy URL na mapę strony (domyślnie: 5000) |
+
+### Przykład
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 10000,
+ });
+}
+```
+
+## Eksporty Typów
+
+Pakiet eksportuje typy TypeScript dla wygody:
+
+```tsx
+import type {
+ SitemapEntry,
+ SitemapOptions,
+ RobotsOptions,
+ RobotsRule,
+ ChangeFrequency,
+} from "@onruntime/next-sitemap";
+```
+
+
+ Wszystkie funkcje i opcje są w pełni typowane. Twoje IDE będzie oferować autouzupełnianie i sprawdzanie typów.
+
diff --git a/apps/web/src/content/pl/docs/next-sitemap/configuration.mdx b/apps/web/src/content/pl/docs/next-sitemap/configuration.mdx
new file mode 100644
index 000000000..d7828c4a2
--- /dev/null
+++ b/apps/web/src/content/pl/docs/next-sitemap/configuration.mdx
@@ -0,0 +1,176 @@
+---
+title: Konfiguracja
+description: Skonfiguruj @onruntime/next-sitemap według swoich potrzeb
+---
+## Podstawowa konfiguracja
+
+Najprostsza konfiguracja wymaga tylko Twojego podstawowego URL-a:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+## Zaawansowana konfiguracja
+
+### Niestandardowe trasy
+
+Dodaj niestandardowe trasy lub dynamiczne treści:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ // Pobierz dynamiczne treści
+ const posts = await fetchBlogPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ additionalPaths: posts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ changeFrequency: "weekly",
+ priority: 0.7,
+ })),
+ });
+}
+```
+
+### Wykluczanie tras
+
+Wyklucz konkretne trasy z mapy witryny:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ exclude: [
+ "/admin/*",
+ "/api/*",
+ "/private/*",
+ ],
+ });
+}
+```
+
+### Priorytet i częstotliwość zmian
+
+Ustaw domyślne wartości dla wszystkich stron:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ });
+}
+```
+
+## Konfiguracja robots.txt
+
+### Podstawowy robots.txt
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+### Niestandardowe zasady
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ },
+ ],
+ });
+}
+```
+
+## Internacjonalizacja
+
+### Mapa witryn w wielu językach
+
+Obsługuj wiele języków z alternatywami:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const locales = ["en", "fr", "de"];
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ locales,
+ defaultLocale: "en",
+ });
+}
+```
+
+To generuje adresy URL z alternatywami `hreflang`:
+
+```xml
+
+ https://example.com/en/about
+
+
+
+
+```
+
+## Podzielone mapy witryn
+
+Dla dużych witryn podziel swoją mapę witryn na wiele plików:
+
+```tsx
+// app/sitemap/[id]/route.ts
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export async function GET(
+ request: Request,
+ { params }: { params: { id: string } }
+) {
+ const sitemaps = await generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 5000,
+ });
+
+ return new Response(sitemaps[parseInt(params.id)], {
+ headers: { "Content-Type": "application/xml" },
+ });
+}
+```
+
+
+ Google zaleca utrzymywanie map witryn poniżej 50 MB i 50 000 adresów URL. Używaj podzielonych map witryn dla większych witryn.
+
diff --git a/apps/web/src/content/pl/docs/next-sitemap/getting-started.mdx b/apps/web/src/content/pl/docs/next-sitemap/getting-started.mdx
new file mode 100644
index 000000000..8490852b0
--- /dev/null
+++ b/apps/web/src/content/pl/docs/next-sitemap/getting-started.mdx
@@ -0,0 +1,86 @@
+---
+title: Jak zacząć
+description: Generator mapy witryny dla aplikacji Next.js
+---
+## Co to jest @onruntime/next-sitemap?
+
+`@onruntime/next-sitemap` to potężny generator mapy witryny zaprojektowany specjalnie dla aplikacji Next.js. Automatycznie generuje pliki `sitemap.xml` i `robots.txt` dla Twojej witryny Next.js.
+
+
+ - Automatyczne generowanie mapy witryny dla App Router
+ - Wsparcie dla dynamicznych tras
+ - Konfigurowalny priorytet i changefreq
+ - Generowanie robots.txt
+ - Wsparcie dla wielojęzycznych map witryn
+
+
+## Dlaczego warto to używać?
+
+### Optymalizacja SEO
+
+Mapy witryn pomagają wyszukiwarkom odkrywać i indeksować Twoje strony bardziej efektywnie:
+
+- **Szybsze indeksowanie** - Wyszukiwarki mogą znaleźć wszystkie Twoje strony
+- **Lepsze przeszukiwanie** - Informuj roboty o aktualizacjach stron
+- **Wskazówki dotyczące priorytetów** - Kieruj roboty do ważnych stron
+
+### Integracja z Next.js
+
+Zbudowany specjalnie dla Next.js, rozumie:
+
+- Strukturę App Router
+- Dynamiczne trasy
+- Generowanie statyczne
+- Międzynarodowe trasowanie
+
+## Szybki przykład
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+To generuje kompletną mapę witryny zawierającą wszystkie Twoje statyczne i dynamiczne strony.
+
+## Wygenerowane wyjście
+
+Pakiet generuje standardowe XML mapy witryn:
+
+```xml
+
+
+
+ https://example.com/
+ 2024-01-15
+ daily
+ 1.0
+
+
+ https://example.com/about
+ 2024-01-10
+ monthly
+ 0.8
+
+
+```
+
+## Następne kroki
+
+
+
+
+
diff --git a/apps/web/src/content/pl/docs/next-sitemap/installation.mdx b/apps/web/src/content/pl/docs/next-sitemap/installation.mdx
new file mode 100644
index 000000000..aec2520fd
--- /dev/null
+++ b/apps/web/src/content/pl/docs/next-sitemap/installation.mdx
@@ -0,0 +1,121 @@
+---
+title: Instalacja
+description: Zainstaluj i skonfiguruj @onruntime/next-sitemap
+---
+## Instalacja
+
+Zainstaluj pakiet przy użyciu preferowanego menedżera pakietów:
+
+```bash
+# npm
+npm install @onruntime/next-sitemap
+
+# yarn
+yarn add @onruntime/next-sitemap
+
+# pnpm
+pnpm add @onruntime/next-sitemap
+```
+
+## Podstawowa konfiguracja
+
+### App Router (Next.js 13+)
+
+Utwórz plik `sitemap.ts` w swoim katalogu `app`:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+### robots.txt
+
+Utwórz plik `robots.ts` do generacji robots.txt:
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+## Struktura projektu
+
+Po konfiguracji, twój projekt powinien wyglądać tak:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Weryfikacja instalacji
+
+Uruchom swój serwer deweloperski i odwiedź:
+
+- `http://localhost:3000/sitemap.xml` - Twój sitemap
+- `http://localhost:3000/robots.txt` - Twój robots.txt
+
+Powinieneś zobaczyć wygenerowany XML dla swojego sitemapu i tekst dla robots.txt.
+
+
+ Sitemap będzie zawierał wszystkie trasy odkryte w czasie budowy. W trybie deweloperskim odzwierciedla aktualną strukturę tras.
+
+
+## Zmienne środowiskowe
+
+Dla produkcji ustaw swój podstawowy URL:
+
+```env
+# .env.production
+NEXT_PUBLIC_SITE_URL=https://your-domain.com
+```
+
+Następnie użyj go w swojej konfiguracji:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: process.env.NEXT_PUBLIC_SITE_URL || "https://your-domain.com",
+ });
+}
+```
+
+## Następne kroki
+
+
+
+
+
diff --git a/apps/web/src/content/pl/docs/translations/api.mdx b/apps/web/src/content/pl/docs/translations/api.mdx
new file mode 100644
index 000000000..63631a8c6
--- /dev/null
+++ b/apps/web/src/content/pl/docs/translations/api.mdx
@@ -0,0 +1,194 @@
+---
+title: Dokumentacja API
+description: Pełna dokumentacja API dla @onruntime/translations
+---
+## TranslationsProvider
+
+Komponent dostarczający, który owija twoją aplikację.
+
+```tsx
+import { TranslationsProvider } from "@onruntime/translations/react";
+
+
+ {children}
+
+```
+
+### Props
+
+| Prop | Typ | Wymagane | Opis |
+|------|-----|----------|------|
+| `locale` | `string` | Tak | Aktualny aktywny język |
+| `locales` | `Record` | Tak | Obiekt zawierający wszystkie tłumaczenia językowe |
+| `fallbackLocale` | `string` | Nie | Język zapasowy, gdy klucz jest niedostępny |
+| `children` | `ReactNode` | Tak | Komponenty potomne |
+
+## useTranslation
+
+Hook do uzyskiwania tłumaczeń w komponentach klienckich.
+
+```tsx
+const { t, locale, setLocale } = useTranslation("namespace");
+```
+
+### Parametry
+
+| Parametr | Typ | Wymagane | Opis |
+|----------|-----|----------|------|
+| `namespace` | `string` | Tak | Przestrzeń nazw tłumaczeń do użycia |
+
+### Zwraca
+
+| Właściwość | Typ | Opis |
+|------------|-----|------|
+| `t` | `(key: string, vars?: object) => string` | Funkcja tłumacząca |
+| `locale` | `string` | Aktualny język |
+| `setLocale` | `(locale: string) => void` | Funkcja do zmiany języka |
+
+### Przykład
+
+```tsx
+const { t, locale, setLocale } = useTranslation("common");
+
+// Podstawowe użycie
+t("greeting"); // "Cześć"
+
+// Z zmiennymi
+t("greeting_name", { name: "Jan" }); // "Cześć, Janie!"
+
+// Zagnieżdżone klucze
+t("nav.home"); // "Strona główna"
+
+// Zmień język
+setLocale("fr");
+```
+
+## getTranslation
+
+Asynchroniczna funkcja do uzyskiwania tłumaczeń w komponentach serwerowych (Next.js).
+
+```tsx
+const { t } = await getTranslation("namespace");
+```
+
+### Parametry
+
+| Parametr | Typ | Wymagane | Opis |
+|----------|-----|----------|------|
+| `namespace` | `string` | Tak | Przestrzeń nazw tłumaczeń do użycia |
+
+### Zwraca
+
+| Właściwość | Typ | Opis |
+|------------|-----|------|
+| `t` | `(key: string, vars?: object) => string` | Funkcja tłumacząca |
+| `locale` | `string` | Aktualny język |
+
+### Przykład
+
+```tsx
+// Komponent Serwerowy
+export default async function Page() {
+ const { t } = await getTranslation("common");
+
+ return {t("title")} ;
+}
+```
+
+## Link Component
+
+Komponent Link rozumiejący język dla Next.js.
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+ O nas
+```
+
+### Props
+
+Wszystkie propsy z komponentu `Link` Next.js, plus:
+
+| Prop | Typ | Domyślnie | Opis |
+|------|-----|-----------|------|
+| `locale` | `string` | Aktualny język | Nadpisuje język linku |
+
+### Przykład
+
+```tsx
+// Używa aktualnego języka
+ O nas
+
+// Wymusza konkretny język
+ À propos
+```
+
+## Funkcja Tłumaczenia (t)
+
+Funkcja `t` jest używana do pobierania przetłumaczonych ciągów.
+
+### Sygnatura
+
+```tsx
+t(key: string, variables?: Record): string
+```
+
+### Parametry
+
+| Parametr | Typ | Opis |
+|----------|-----|------|
+| `key` | `string` | Klucz tłumaczenia (obsługuje notację kropkową) |
+| `variables` | `object` | Zmienne do interpolacji |
+
+### Interpolacja Zmiennych
+
+```json
+{
+ "greeting": "Cześć, {name}!",
+ "items": "Masz {count} przedmiotów"
+}
+```
+
+```tsx
+t("greeting", { name: "Alicja" }); // "Cześć, Alicjo!"
+t("items", { count: 5 }); // "Masz 5 przedmiotów"
+```
+
+### Zagnieżdżone Klucze
+
+```json
+{
+ "user": {
+ "profile": {
+ "title": "Profil"
+ }
+ }
+}
+```
+
+```tsx
+t("user.profile.title"); // "Profil"
+```
+
+## Definicje Typów
+
+### TranslationNamespaces
+
+Rozszerz ten interfejs dla typowanej translacji:
+
+```tsx
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("./locales/pl/common.json");
+ auth: typeof import("./locales/pl/auth.json");
+ }
+}
+```
+
+
+ Dzięki odpowiednim definicjom typów uzyskasz autouzupełnianie dla kluczy tłumaczeń i błędy kompilacji dla nieprawidłowych kluczy.
+
diff --git a/apps/web/src/content/pl/docs/translations/getting-started.mdx b/apps/web/src/content/pl/docs/translations/getting-started.mdx
new file mode 100644
index 000000000..18acbfbf0
--- /dev/null
+++ b/apps/web/src/content/pl/docs/translations/getting-started.mdx
@@ -0,0 +1,94 @@
+---
+title: Zaczynamy
+description: >-
+ Lekka, bezpieczna pod względem typów biblioteka do internacjonalizacji dla
+ React i Next.js
+---
+## Co to jest @onruntime/translations?
+
+`@onruntime/translations` to lekka biblioteka do internacjonalizacji (i18n) zapewniająca typowanie, zaprojektowana dla aplikacji React i Next.js. Oferuje prosty interfejs API do zarządzania tłumaczeniami z pełnym wsparciem dla TypeScript.
+
+
+ - Tłumaczenia z typowaniem w TypeScript
+ - Wsparcie dla React i Next.js (App Router)
+ - Organizacja oparta na przestrzeniach nazw
+ - Interpolacja zmiennych
+ - Lekka i wydajna
+
+
+## Dlaczego warto to używać?
+
+### Bezpieczeństwo typów
+
+Uzyskaj błędy kompilacji, gdy używasz nieprawidłowych kluczy tłumaczeń:
+
+```typescript
+const { t } = useTranslation("common");
+
+t("greeting"); // ✅ Prawidłowy klucz
+t("invalid_key"); // ❌ Błąd TypeScript
+```
+
+### Prosty interfejs API
+
+Tylko dwa hooki dla wszystkich Twoich potrzeb związanych z tłumaczeniem:
+
+```typescript
+// Komponenty klienckie
+const { t } = useTranslation("namespace");
+
+// Komponenty serwerowe (Next.js)
+const { t } = await getTranslation("namespace");
+```
+
+### Zorganizowane tłumaczenia
+
+Utrzymuj swoje tłumaczenia w porządku z przestrzeniami nazw:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Szybki przykład
+
+```tsx
+// locales/en/common.json
+{
+ "greeting": "Cześć, {name}!"
+}
+
+// Komponent
+import { useTranslation } from "@onruntime/translations/react";
+
+function Welcome({ name }) {
+ const { t } = useTranslation("common");
+
+ return {t("greeting", { name })} ;
+}
+```
+
+## Następne kroki
+
+
+
+
+
diff --git a/apps/web/src/content/pl/docs/translations/installation.mdx b/apps/web/src/content/pl/docs/translations/installation.mdx
new file mode 100644
index 000000000..f4c140bb5
--- /dev/null
+++ b/apps/web/src/content/pl/docs/translations/installation.mdx
@@ -0,0 +1,127 @@
+---
+title: Instalacja
+description: Zainstaluj i skonfiguruj @onruntime/translations
+---
+## Instalacja
+
+Zainstaluj pakiet za pomocą swojego ulubionego menedżera pakietów:
+
+```bash
+# npm
+npm install @onruntime/translations
+
+# yarn
+yarn add @onruntime/translations
+
+# pnpm
+pnpm add @onruntime/translations
+```
+
+## Ustawienie Projektu
+
+### 1. Utwórz Pliki Tłumaczeń
+
+Utwórz katalog `locales` w swoim projekcie z plikami tłumaczeń dla każdego języka:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Przykładowy plik `locales/en/common.json`:
+
+```json
+{
+ "title": "Witaj",
+ "greeting": "Cześć, {name}!",
+ "items": {
+ "one": "{count} item",
+ "other": "{count} items"
+ }
+}
+```
+
+### 2. Skonfiguruj TypeScript (Opcjonalnie)
+
+Aby uzyskać typu bezpieczne tłumaczenia, utwórz plik definicji typu:
+
+```typescript
+// types/translations.d.ts
+import "onruntime/translations";
+
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("../locales/en/common.json");
+ auth: typeof import("../locales/en/auth.json");
+ }
+}
+```
+
+### 3. Skonfiguruj Provider
+
+Owiń swoją aplikację w `TranslationsProvider`:
+
+```tsx
+// Dla React
+import { TranslationsProvider } from "@onruntime/translations/react";
+import en from "./locales/en";
+import fr from "./locales/fr";
+
+const locales = { en, fr };
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
+ Dla Next.js z App Router zajrzyj do przewodnika [Next.js Usage](/docs/translations/nextjs) w celu zalecanej konfiguracji.
+
+
+## Weryfikacja Instalacji
+
+Przetestuj swoją konfigurację za pomocą prostego komponentu:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function TestComponent() {
+ const { t } = useTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("greeting", { name: "World" })}
+
+ );
+}
+```
+
+Jeśli zobaczysz swoje tłumaczenia, jesteś gotowy do działania!
+
+## Kolejne Kroki
+
+
+
+
+
diff --git a/apps/web/src/content/pl/docs/translations/nextjs.mdx b/apps/web/src/content/pl/docs/translations/nextjs.mdx
new file mode 100644
index 000000000..a881a5dd0
--- /dev/null
+++ b/apps/web/src/content/pl/docs/translations/nextjs.mdx
@@ -0,0 +1,191 @@
+---
+title: Użycie Next.js
+description: Korzystanie z @onruntime/translations z Next.js App Router
+---
+## Konfiguracja Routera Aplikacji
+
+### 1. Skonfiguruj Dostawcę
+
+Utwórz plik dostawcy, aby ustawić tłumaczenia:
+
+```tsx
+// app/providers.tsx
+"use client";
+
+import { TranslationsProvider } from "@onruntime/translations/react";
+import { ReactNode } from "react";
+
+import en from "@/locales/en";
+import fr from "@/locales/fr";
+
+const locales = { en, fr };
+
+interface ProvidersProps {
+ children: ReactNode;
+ locale: string;
+}
+
+export function Providers({ children, locale }: ProvidersProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+### 2. Skonfiguruj Główny Układ
+
+Użyj dostawcy w swoim głównym układzie:
+
+```tsx
+// app/[locale]/layout.tsx
+import { Providers } from "../providers";
+
+export default function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { locale: string };
+}) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+## Komponenty Serwera
+
+Użyj `getTranslation` dla Komponentów Serwera:
+
+```tsx
+// app/[locale]/page.tsx
+import { getTranslation } from "@/lib/translations.server";
+
+export default async function HomePage() {
+ const { t } = await getTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("description")}
+
+ );
+}
+```
+
+
+ Użyj `getTranslation` w Komponentach Serwera i `useTranslation` w Komponentach Klienta.
+
+
+## Komponenty Klienta
+
+Użyj `useTranslation` dla Komponentów Klienta:
+
+```tsx
+"use client";
+
+import { useTranslation } from "@onruntime/translations/react";
+
+export function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ English
+ Français
+
+ );
+}
+```
+
+## Routing oparty na Lokacji
+
+### Konfiguracja Middleware
+
+Skonfiguruj middleware do wykrywania lokacji:
+
+```tsx
+// middleware.ts
+import { NextRequest, NextResponse } from "next/server";
+
+const locales = ["en", "fr"];
+const defaultLocale = "en";
+
+export function middleware(request: NextRequest) {
+ const pathname = request.nextUrl.pathname;
+
+ // Sprawdź, czy ścieżka zawiera lokalizację
+ const pathnameHasLocale = locales.some(
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
+ );
+
+ if (pathnameHasLocale) return;
+
+ // Przekieruj do domyślnej lokalizacji
+ return NextResponse.redirect(
+ new URL(`/${defaultLocale}${pathname}`, request.url)
+ );
+}
+
+export const config = {
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
+};
+```
+
+## Generacja Statyczna
+
+Generuj statyczne strony dla wszystkich lokalizacji:
+
+```tsx
+// app/[locale]/page.tsx
+export async function generateStaticParams() {
+ return [{ locale: "en" }, { locale: "fr" }];
+}
+```
+
+## Komponent Link
+
+Użyj przetłumaczonego komponentu Link do nawigacji:
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+function Navigation() {
+ return (
+
+ Home
+ About
+
+ );
+}
+```
+
+Komponent `Link` automatycznie obsługuje prefiks lokalizacji.
+
+## Przykładowa Struktura Projektu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/content/pl/docs/translations/react.mdx b/apps/web/src/content/pl/docs/translations/react.mdx
new file mode 100644
index 000000000..cdf2d807a
--- /dev/null
+++ b/apps/web/src/content/pl/docs/translations/react.mdx
@@ -0,0 +1,157 @@
+---
+title: Wykorzystanie React
+description: Używanie @onruntime/translations w aplikacjach React
+---
+## Podstawowe użycie
+
+### Hook useTranslation
+
+Hook `useTranslation` to Twój główny sposób na dostęp do tłumaczeń w komponentach React:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function MyComponent() {
+ const { t, locale } = useTranslation("common");
+
+ return (
+
+
Aktualny język: {locale}
+
{t("title")}
+
+ );
+}
+```
+
+### Interpolacja Zmiennych
+
+Przekaż zmienne do swoich tłumaczeń:
+
+```json
+// locales/en/common.json
+{
+ "greeting": "Cześć, {name}!",
+ "items_count": "Masz {count} przedmiotów"
+}
+```
+
+```tsx
+function Greeting({ name, itemCount }) {
+ const { t } = useTranslation("common");
+
+ return (
+ <>
+ {t("greeting", { name })}
+ {t("items_count", { count: itemCount })}
+ >
+ );
+}
+```
+
+## Wiele przestrzeni nazw
+
+Możesz używać wielu przestrzeni nazw w tym samym komponencie:
+
+```tsx
+function Dashboard() {
+ const { t: tCommon } = useTranslation("common");
+ const { t: tDashboard } = useTranslation("dashboard");
+
+ return (
+
+
{tDashboard("title")}
+ {tCommon("buttons.save")}
+
+ );
+}
+```
+
+## Zmiana języka
+
+Użyj funkcji `setLocale`, aby zmienić aktualny język:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ Angielski
+ Français
+ Deutsch
+
+ );
+}
+```
+
+## Zagnieżdżone klucze
+
+Uzyskaj dostęp do zagnieżdżonych kluczy tłumaczeń, używając notacji kropkowej:
+
+```json
+// locales/en/common.json
+{
+ "nav": {
+ "home": "Strona główna",
+ "about": "O nas",
+ "contact": "Kontakt"
+ }
+}
+```
+
+```tsx
+function Navigation() {
+ const { t } = useTranslation("common");
+
+ return (
+
+ {t("nav.home")}
+ {t("nav.about")}
+ {t("nav.contact")}
+
+ );
+}
+```
+
+## Najlepsze praktyki
+
+
+ Organizuj tłumaczenia według funkcji lub strony zamiast wszystkiego wkładać do jednego pliku.
+
+
+### Zalecana struktura
+
+
+
+
+
+
+
+
+
+
+
+
+### Utrzymuj spójność kluczy
+
+Używaj spójnych konwencji nazewnictwa we wszystkich lokalizacjach:
+
+```json
+// ✅ Dobry - spójna struktura
+{
+ "page_title": "Dashboard",
+ "actions": {
+ "save": "Zapisz",
+ "cancel": "Anuluj"
+ }
+}
+
+// ❌ Unikaj - niespójność
+{
+ "pageTitle": "Dashboard",
+ "save_button": "Zapisz",
+ "cancelBtn": "Anuluj"
+}
+```
diff --git a/apps/web/src/content/pt/docs/gitmoji/emojis.mdx b/apps/web/src/content/pt/docs/gitmoji/emojis.mdx
new file mode 100644
index 000000000..b2dcc0cf3
--- /dev/null
+++ b/apps/web/src/content/pt/docs/gitmoji/emojis.mdx
@@ -0,0 +1,11 @@
+---
+title: Referência de Emojis
+description: Lista completa de gitmojis
+---
+Usamos [gitmoji](https://gitmoji.dev) para categorizar nossos commits. Aqui está a lista completa de emojis, seus códigos e descrições:
+
+
+
+
+ Use o [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) ou a [extensão do VS Code](https://marketplace.visualstudio.com/items?itemName=seatonjiang.gitmoji-vscode) para uma experiência interativa de commit.
+
diff --git a/apps/web/src/content/pt/docs/gitmoji/getting-started.mdx b/apps/web/src/content/pt/docs/gitmoji/getting-started.mdx
new file mode 100644
index 000000000..8e41ab749
--- /dev/null
+++ b/apps/web/src/content/pt/docs/gitmoji/getting-started.mdx
@@ -0,0 +1,91 @@
+---
+title: Começando
+description: Aprenda nossa convenção de commits
+---
+Nós gostamos de ter um histórico de projeto limpo. Nossa convenção de commits é inspirada pelo [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0) mas personalizada com [gitmoji](https://gitmoji.dev) para tornar tudo mais visual e divertido.
+
+## Estrutura
+
+A mensagem de commit deve ser estruturada da seguinte forma e **em minúsculas**:
+
+```
+ [(#)]
+
+[corpo opcional]
+
+[rodapé(s) opcional(is)]
+```
+
+### Exemplo
+
+```bash
+📝 atualizar colaboradores da documentação
+
+- Adicionar @jerembdn como colaborador
+- Adicionar @younesbessa como colaborador
+
+Co-authored-by: Younes Bessa
+```
+
+Na maioria das vezes, uma linha simples é o suficiente:
+
+```bash
+📝 atualizar colaboradores da documentação
+```
+
+## Tipos
+
+Usamos os seguintes tipos de commit:
+
+| Tipo | Descrição |
+| --- | --- |
+| `add` | Adicionar uma nova funcionalidade |
+| `fix` | Corrigir um bug |
+| `improve` | Melhorar algo |
+| `update` | Atualizar algo |
+| `remove` | Remover algo |
+| `refactor` | Refatorar algo |
+| `rename` | Renomear algo |
+| `move` | Mover um arquivo ou pasta |
+| `upgrade` | Atualizar dependências |
+| `downgrade` | Rebaixar dependências |
+
+## Descrição
+
+Escreva descrições em **modo imperativo** e **minúsculas**:
+
+```bash
+# Bom
+📝 atualizar colaboradores da documentação
+
+# Ruim
+📝 atualizado colaboradores da documentação
+
+# Ruim
+📝 Atualizar colaboradores da documentação
+```
+
+## Número do Issue
+
+Vincule commits a issues adicionando o número do issue:
+
+```bash
+📝 atualizar colaboradores da documentação (#123)
+```
+
+## Corpo
+
+Use o corpo para contexto e motivação:
+
+```bash
+📝 atualizar colaboradores da documentação
+
+- Adicionar @jerembdn como colaborador
+- Adicionar @younesbessa como colaborador
+
+Co-authored-by: Younes Bessa
+```
+
+
+ Cada commit deve representar uma única mudança lógica. Não misture mudanças não relacionadas.
+
diff --git a/apps/web/src/content/pt/docs/gitmoji/with-ai.mdx b/apps/web/src/content/pt/docs/gitmoji/with-ai.mdx
new file mode 100644
index 000000000..b02d1eeb2
--- /dev/null
+++ b/apps/web/src/content/pt/docs/gitmoji/with-ai.mdx
@@ -0,0 +1,63 @@
+---
+title: Com IA
+description: Use gitmoji com Claude Code
+---
+Instale nosso plugin gitmoji para [Claude Code](https://claude.ai/code) para gerar commits seguindo a convenção.
+
+## Instalar o Plugin
+
+Adicione o marketplace do onRuntime e instale o plugin:
+
+```bash
+# Adicione o marketplace do onRuntime
+/plugin marketplace add https://onruntime.com/plugins
+
+# Instale o plugin gitmoji
+/plugin install gitmoji@onruntime
+```
+
+Ou instale diretamente pelo menu:
+
+1. Execute `/plugin` no Claude Code
+2. Vá para a aba **Descobrir**
+3. Adicione o marketplace: `https://onruntime.com/plugins`
+4. Procure por "gitmoji" e instale
+
+## Uso
+
+Execute o comando `/commit` para criar um commit:
+
+```
+/commit
+```
+
+```
+/commit corrigir o bug de login
+```
+
+O Claude Code analisará suas alterações e criará um commit seguindo a convenção gitmoji.
+
+
+ O comando `/commit` captura automaticamente seu status git e diff para gerar a mensagem de commit apropriada.
+
+
+## Alternativa: CLAUDE.md
+
+Se você preferir não instalar o plugin, adicione isso ao `CLAUDE.md` do seu projeto:
+
+```markdown
+## Convenção de Commits
+
+Use commits convencionais gitmoji:
+
+\`\`\`
+
+\`\`\`
+
+Tipos: adicionar, corrigir, melhorar, atualizar, remover, refatorar, renomear, mover, atualizar, reverter
+
+Regras:
+- Escreva em letras minúsculas
+- Use modo imperativo ("adicionar" não "adicionado")
+- Uma mudança lógica por commit
+```
diff --git a/apps/web/src/content/pt/docs/next-sitemap/api.mdx b/apps/web/src/content/pt/docs/next-sitemap/api.mdx
new file mode 100644
index 000000000..98b6cb15e
--- /dev/null
+++ b/apps/web/src/content/pt/docs/next-sitemap/api.mdx
@@ -0,0 +1,169 @@
+---
+title: Referência da API
+description: Documentação completa da API para @onruntime/next-sitemap
+---
+## generateSitemap
+
+Gera um sitemap para sua aplicação Next.js.
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const sitemap = await generateSitemap(options);
+```
+
+### Opções
+
+| Opção | Tipo | Necessário | Descrição |
+|-------|------|------------|-----------|
+| `baseUrl` | `string` | Sim | A URL base do seu site |
+| `additionalPaths` | `SitemapEntry[]` | Não | URLs adicionais para incluir |
+| `exclude` | `string[]` | Não | Padrões globais para excluir |
+| `defaults` | `SitemapDefaults` | Não | Valores padrão para todas as entradas |
+| `locales` | `string[]` | Não | Locales suportadas |
+| `defaultLocale` | `string` | Não | Locale padrão |
+
+### SitemapEntry
+
+| Propriedade | Tipo | Descrição |
+|-------------|------|-----------|
+| `url` | `string` | URL da página (relativa ou absoluta) |
+| `lastModified` | `Date \| string` | Data da última modificação |
+| `changeFrequency` | `ChangeFrequency` | Com que frequência a página muda |
+| `priority` | `number` | Prioridade (0.0 - 1.0) |
+
+### ChangeFrequency
+
+```tsx
+type ChangeFrequency =
+ | "always"
+ | "hourly"
+ | "daily"
+ | "weekly"
+ | "monthly"
+ | "yearly"
+ | "never";
+```
+
+### Exemplo
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ const blogPosts = await fetchPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ additionalPaths: blogPosts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ priority: 0.8,
+ })),
+ exclude: ["/admin/*", "/api/*"],
+ });
+}
+```
+
+## generateRobots
+
+Gera um arquivo robots.txt.
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+const robots = generateRobots(options);
+```
+
+### Opções
+
+| Opção | Tipo | Necessário | Descrição |
+|-------|------|------------|-----------|
+| `baseUrl` | `string` | Sim | A URL base do seu site |
+| `rules` | `RobotsRule[]` | Não | Regras de robots personalizadas |
+| `sitemap` | `string \| boolean` | Não | URL do sitemap ou `false` para excluir |
+
+### RobotsRule
+
+| Propriedade | Tipo | Descrição |
+|-------------|------|-----------|
+| `userAgent` | `string` | Agente de usuário alvo |
+| `allow` | `string \| string[]` | Caminhos permitidos |
+| `disallow` | `string \| string[]` | Caminhos não permitidos |
+| `crawlDelay` | `number` | Atraso de rastreamento em segundos |
+
+### Exemplo
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ crawlDelay: 1,
+ },
+ ],
+ });
+}
+```
+
+## generateSitemapIndex
+
+Gera um índice de sitemap para sites grandes.
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+const index = await generateSitemapIndex(options);
+```
+
+### Opções
+
+| Opção | Tipo | Necessário | Descrição |
+|-------|------|------------|-----------|
+| `baseUrl` | `string` | Sim | A URL base do seu site |
+| `sitemapsPerFile` | `number` | Não | URLs por sitemap (padrão: 5000) |
+
+### Exemplo
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 10000,
+ });
+}
+```
+
+## Type Exports
+
+O pacote exporta tipos TypeScript para conveniência:
+
+```tsx
+import type {
+ SitemapEntry,
+ SitemapOptions,
+ RobotsOptions,
+ RobotsRule,
+ ChangeFrequency,
+} from "@onruntime/next-sitemap";
+```
+
+
+ Todas as funções e opções estão totalmente tipadas. Seu IDE vai fornecer autocompletar e verificação de tipos.
+
diff --git a/apps/web/src/content/pt/docs/next-sitemap/configuration.mdx b/apps/web/src/content/pt/docs/next-sitemap/configuration.mdx
new file mode 100644
index 000000000..37249b185
--- /dev/null
+++ b/apps/web/src/content/pt/docs/next-sitemap/configuration.mdx
@@ -0,0 +1,176 @@
+---
+title: Configuração
+description: Configure @onruntime/next-sitemap de acordo com suas necessidades
+---
+## Configuração Básica
+
+A configuração mais simples só requer sua URL base:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+## Configuração Avançada
+
+### Rotas Personalizadas
+
+Adicione rotas personalizadas ou conteúdo dinâmico:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ // Busque conteúdo dinâmico
+ const posts = await fetchBlogPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ additionalPaths: posts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ changeFrequency: "weekly",
+ priority: 0.7,
+ })),
+ });
+}
+```
+
+### Excluindo Rotas
+
+Exclua rotas específicas do sitemap:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ exclude: [
+ "/admin/*",
+ "/api/*",
+ "/private/*",
+ ],
+ });
+}
+```
+
+### Prioridade e Frequência de Mudança
+
+Defina valores padrão para todas as páginas:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ });
+}
+```
+
+## Configuração do robots.txt
+
+### robots.txt Básico
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+### Regras Personalizadas
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ },
+ ],
+ });
+}
+```
+
+## Internacionalização
+
+### Sitemaps Multilíngues
+
+Suporte a vários idiomas com alternativos:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const locales = ["en", "fr", "de"];
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ locales,
+ defaultLocale: "en",
+ });
+}
+```
+
+Isso gera URLs com alternativos `hreflang`:
+
+```xml
+
+ https://example.com/en/about
+
+
+
+
+```
+
+## Sitemaps Divididos
+
+Para sites grandes, divida seu sitemap em vários arquivos:
+
+```tsx
+// app/sitemap/[id]/route.ts
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export async function GET(
+ request: Request,
+ { params }: { params: { id: string } }
+) {
+ const sitemaps = await generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 5000,
+ });
+
+ return new Response(sitemaps[parseInt(params.id)], {
+ headers: { "Content-Type": "application/xml" },
+ });
+}
+```
+
+
+ O Google recomenda manter sitemaps abaixo de 50MB e 50.000 URLs. Use sitemaps divididos para sites maiores.
+
diff --git a/apps/web/src/content/pt/docs/next-sitemap/getting-started.mdx b/apps/web/src/content/pt/docs/next-sitemap/getting-started.mdx
new file mode 100644
index 000000000..2b69738e4
--- /dev/null
+++ b/apps/web/src/content/pt/docs/next-sitemap/getting-started.mdx
@@ -0,0 +1,86 @@
+---
+title: Começando
+description: Um gerador de sitemap para aplicações Next.js
+---
+## O que é @onruntime/next-sitemap?
+
+`@onruntime/next-sitemap` é um gerador de sitemap poderoso projetado especificamente para aplicações Next.js. Ele gera automaticamente os arquivos `sitemap.xml` e `robots.txt` para o seu site Next.js.
+
+
+ - Geração automática de sitemap para App Router
+ - Suporte para rotas dinâmicas
+ - Prioridade e mudança de frequência configuráveis
+ - Geração de robots.txt
+ - Suporte para sitemap multilíngue
+
+
+## Por que Usar?
+
+### Otimização de SEO
+
+Sitemaps ajudam os motores de busca a descobrir e indexar suas páginas de forma mais eficiente:
+
+- **Indexação mais rápida** - Motores de busca conseguem encontrar todas as suas páginas
+- **Melhor rastreamento** - Informe os crawlers sobre atualizações nas páginas
+- **Dicas de prioridade** - Guie os crawlers para páginas importantes
+
+### Integração com Next.js
+
+Construído especificamente para Next.js, ele entende:
+
+- Estrutura do App Router
+- Rotas dinâmicas
+- Geração estática
+- Roteamento internacionalizado
+
+## Exemplo Rápido
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+Isso gera um sitemap completo, incluindo todas as suas páginas estáticas e dinâmicas.
+
+## Saída Gerada
+
+O pacote gera sitemaps XML padrão:
+
+```xml
+
+
+
+ https://example.com/
+ 2024-01-15
+ daily
+ 1.0
+
+
+ https://example.com/about
+ 2024-01-10
+ monthly
+ 0.8
+
+
+```
+
+## Próximos Passos
+
+
+
+
+
diff --git a/apps/web/src/content/pt/docs/next-sitemap/installation.mdx b/apps/web/src/content/pt/docs/next-sitemap/installation.mdx
new file mode 100644
index 000000000..dd7a5f476
--- /dev/null
+++ b/apps/web/src/content/pt/docs/next-sitemap/installation.mdx
@@ -0,0 +1,121 @@
+---
+title: Instalação
+description: Instale e configure @onruntime/next-sitemap
+---
+## Instalação
+
+Instale o pacote usando seu gerenciador de pacotes preferido:
+
+```bash
+# npm
+npm install @onruntime/next-sitemap
+
+# yarn
+yarn add @onruntime/next-sitemap
+
+# pnpm
+pnpm add @onruntime/next-sitemap
+```
+
+## Configuração Básica
+
+### App Router (Next.js 13+)
+
+Crie um arquivo `sitemap.ts` no seu diretório `app`:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://seu-domínio.com",
+ });
+}
+```
+
+### robots.txt
+
+Crie um arquivo `robots.ts` para a geração de robots.txt:
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://seu-domínio.com",
+ });
+}
+```
+
+## Estrutura do Projeto
+
+Depois da configuração, seu projeto deve parecer com isso:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Verificar Instalação
+
+Inicie seu servidor de desenvolvimento e visite:
+
+- `http://localhost:3000/sitemap.xml` - Seu sitemap
+- `http://localhost:3000/robots.txt` - Seu robots.txt
+
+Você deve ver o XML gerado para o seu sitemap e o conteúdo de texto para o robots.txt.
+
+
+ O sitemap incluirá todas as rotas descobertas no momento da construção. Em desenvolvimento, ele reflete a estrutura de rotas atual.
+
+
+## Variáveis de Ambiente
+
+Para produção, defina sua URL base:
+
+```env
+# .env.production
+NEXT_PUBLIC_SITE_URL=https://seu-domínio.com
+```
+
+Então use isso na sua configuração:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: process.env.NEXT_PUBLIC_SITE_URL || "https://seu-domínio.com",
+ });
+}
+```
+
+## Próximos Passos
+
+
+
+
+
diff --git a/apps/web/src/content/pt/docs/translations/api.mdx b/apps/web/src/content/pt/docs/translations/api.mdx
new file mode 100644
index 000000000..46cea3abb
--- /dev/null
+++ b/apps/web/src/content/pt/docs/translations/api.mdx
@@ -0,0 +1,194 @@
+---
+title: Referência da API
+description: Documentação completa da API para @onruntime/translations
+---
+## TranslationsProvider
+
+O componente provider que envolve sua aplicação.
+
+```tsx
+import { TranslationsProvider } from "@onruntime/translations/react";
+
+
+ {children}
+
+```
+
+### Props
+
+| Prop | Tipo | Obrigatório | Descrição |
+|------|------|-------------|-----------|
+| `locale` | `string` | Sim | Locale ativo atual |
+| `locales` | `Record` | Sim | Objeto contendo todas as traduções de locale |
+| `fallbackLocale` | `string` | Não | Locale de fallback quando a chave está ausente |
+| `children` | `ReactNode` | Sim | Componentes filhos |
+
+## useTranslation
+
+Hook para acessar traduções em componentes cliente.
+
+```tsx
+const { t, locale, setLocale } = useTranslation("namespace");
+```
+
+### Parâmetros
+
+| Parâmetro | Tipo | Obrigatório | Descrição |
+|-----------|------|-------------|-----------|
+| `namespace` | `string` | Sim | Namespace de tradução a ser usado |
+
+### Retorna
+
+| Propriedade | Tipo | Descrição |
+|-------------|------|-----------|
+| `t` | `(key: string, vars?: object) => string` | Função de tradução |
+| `locale` | `string` | Locale atual |
+| `setLocale` | `(locale: string) => void` | Função para mudar o locale |
+
+### Exemplo
+
+```tsx
+const { t, locale, setLocale } = useTranslation("common");
+
+// Uso básico
+t("greeting"); // "Hello"
+
+// Com variáveis
+t("greeting_name", { name: "John" }); // "Hello, John!"
+
+// Chaves aninhadas
+t("nav.home"); // "Home"
+
+// Mudar locale
+setLocale("fr");
+```
+
+## getTranslation
+
+Função assíncrona para acessar traduções em componentes servidor (Next.js).
+
+```tsx
+const { t } = await getTranslation("namespace");
+```
+
+### Parâmetros
+
+| Parâmetro | Tipo | Obrigatório | Descrição |
+|-----------|------|-------------|-----------|
+| `namespace` | `string` | Sim | Namespace de tradução a ser usado |
+
+### Retorna
+
+| Propriedade | Tipo | Descrição |
+|-------------|------|-----------|
+| `t` | `(key: string, vars?: object) => string` | Função de tradução |
+| `locale` | `string` | Locale atual |
+
+### Exemplo
+
+```tsx
+// Componente Servidor
+export default async function Page() {
+ const { t } = await getTranslation("common");
+
+ return {t("title")} ;
+}
+```
+
+## Link Component
+
+Componente Link consciente do Locale para Next.js.
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+ About
+```
+
+### Props
+
+Todas as props do componente `Link` do Next.js, mais:
+
+| Prop | Tipo | Padrão | Descrição |
+|------|------|--------|-----------|
+| `locale` | `string` | Locale atual | Sobrescreve o locale do link |
+
+### Exemplo
+
+```tsx
+// Usa o locale atual
+ About
+
+// Força um locale específico
+ À propos
+```
+
+## Função de Tradução (t)
+
+A função `t` é usada para recuperar strings traduzidas.
+
+### Assinatura
+
+```tsx
+t(key: string, variables?: Record): string
+```
+
+### Parâmetros
+
+| Parâmetro | Tipo | Descrição |
+|-----------|------|-----------|
+| `key` | `string` | Chave de tradução (suporta notação de ponto) |
+| `variables` | `object` | Variáveis para interpolação |
+
+### Interpolação de Variáveis
+
+```json
+{
+ "greeting": "Hello, {name}!",
+ "items": "You have {count} items"
+}
+```
+
+```tsx
+t("greeting", { name: "Alice" }); // "Hello, Alice!"
+t("items", { count: 5 }); // "You have 5 items"
+```
+
+### Chaves Aninhadas
+
+```json
+{
+ "user": {
+ "profile": {
+ "title": "Profile"
+ }
+ }
+}
+```
+
+```tsx
+t("user.profile.title"); // "Profile"
+```
+
+## Definições de Tipos
+
+### TranslationNamespaces
+
+Estenda esta interface para traduções seguras em termos de tipo:
+
+```tsx
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("./locales/en/common.json");
+ auth: typeof import("./locales/en/auth.json");
+ }
+}
+```
+
+
+ Com definições de tipo adequadas, você terá autocomplete para chaves de tradução e erros em tempo de compilação para chaves inválidas.
+
diff --git a/apps/web/src/content/pt/docs/translations/getting-started.mdx b/apps/web/src/content/pt/docs/translations/getting-started.mdx
new file mode 100644
index 000000000..5b2be1481
--- /dev/null
+++ b/apps/web/src/content/pt/docs/translations/getting-started.mdx
@@ -0,0 +1,94 @@
+---
+title: Começando
+description: >-
+ Uma biblioteca de internacionalização leve e segura para tipos, para React e
+ Next.js
+---
+## O que é @onruntime/translations?
+
+`@onruntime/translations` é uma biblioteca leve e com segurança de tipo para internacionalização (i18n), projetada para aplicações React e Next.js. Ela fornece uma API simples para gerenciar traduções com suporte completo a TypeScript.
+
+
+ - Traduções seguras com TypeScript
+ - Suporte para React e Next.js (App Router)
+ - Organização baseada em namespaces
+ - Interpolação de variáveis
+ - Leve e performática
+
+
+## Por Que Usar?
+
+### Segurança de Tipo
+
+Obtenha erros em tempo de compilação ao usar chaves de tradução inválidas:
+
+```typescript
+const { t } = useTranslation("common");
+
+t("greeting"); // ✅ Chave válida
+t("invalid_key"); // ❌ Erro de TypeScript
+```
+
+### API Simples
+
+Apenas dois hooks para todas as suas necessidades de tradução:
+
+```typescript
+// Componentes do Cliente
+const { t } = useTranslation("namespace");
+
+// Componentes do Servidor (Next.js)
+const { t } = await getTranslation("namespace");
+```
+
+### Traduções Organizadas
+
+Mantenha suas traduções organizadas com namespaces:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Exemplo Rápido
+
+```tsx
+// locales/en/common.json
+{
+ "greeting": "Hello, {name}!"
+}
+
+// Componente
+import { useTranslation } from "@onruntime/translations/react";
+
+function Welcome({ name }) {
+ const { t } = useTranslation("common");
+
+ return {t("greeting", { name })} ;
+}
+```
+
+## Próximos Passos
+
+
+
+
+
diff --git a/apps/web/src/content/pt/docs/translations/installation.mdx b/apps/web/src/content/pt/docs/translations/installation.mdx
new file mode 100644
index 000000000..8cc743cab
--- /dev/null
+++ b/apps/web/src/content/pt/docs/translations/installation.mdx
@@ -0,0 +1,127 @@
+---
+title: Instalação
+description: Instale e configure @onruntime/translations
+---
+## Instalação
+
+Instale o pacote usando seu gerenciador de pacotes preferido:
+
+```bash
+# npm
+npm install @onruntime/translations
+
+# yarn
+yarn add @onruntime/translations
+
+# pnpm
+pnpm add @onruntime/translations
+```
+
+## Configuração do Projeto
+
+### 1. Criar Arquivos de Tradução
+
+Crie um diretório `locales` no seu projeto com arquivos de tradução para cada idioma:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Exemplo do `locales/en/common.json`:
+
+```json
+{
+ "title": "Bem-vindo",
+ "greeting": "Olá, {name}!",
+ "items": {
+ "one": "{count} item",
+ "other": "{count} itens"
+ }
+}
+```
+
+### 2. Configurar TypeScript (Opcional)
+
+Para traduções com segurança de tipo, crie um arquivo de definição de tipo:
+
+```typescript
+// types/translations.d.ts
+import "onruntime/translations";
+
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("../locales/en/common.json");
+ auth: typeof import("../locales/en/auth.json");
+ }
+}
+```
+
+### 3. Configurar Provider
+
+Envolva seu app com o `TranslationsProvider`:
+
+```tsx
+// Para React
+import { TranslationsProvider } from "@onruntime/translations/react";
+import en from "./locales/en";
+import fr from "./locales/fr";
+
+const locales = { en, fr };
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
+ Para Next.js com App Router, confira o guia de [Uso do Next.js](/docs/translations/nextjs) para a configuração recomendada.
+
+
+## Verificando a Instalação
+
+Teste sua configuração com um componente simples:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function TestComponent() {
+ const { t } = useTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("greeting", { name: "World" })}
+
+ );
+}
+```
+
+Se você ver suas traduções sendo exibidas, está tudo certo!
+
+## Próximos Passos
+
+
+
+
+
diff --git a/apps/web/src/content/pt/docs/translations/nextjs.mdx b/apps/web/src/content/pt/docs/translations/nextjs.mdx
new file mode 100644
index 000000000..bfdc22fb4
--- /dev/null
+++ b/apps/web/src/content/pt/docs/translations/nextjs.mdx
@@ -0,0 +1,191 @@
+---
+title: Uso do Next.js
+description: Usando @onruntime/translations com o Next.js App Router
+---
+## Configuração para App Router
+
+### 1. Configure o Provider
+
+Crie um arquivo de providers para configurar traduções:
+
+```tsx
+// app/providers.tsx
+"use client";
+
+import { TranslationsProvider } from "@onruntime/translations/react";
+import { ReactNode } from "react";
+
+import en from "@/locales/en";
+import fr from "@/locales/fr";
+
+const locales = { en, fr };
+
+interface ProvidersProps {
+ children: ReactNode;
+ locale: string;
+}
+
+export function Providers({ children, locale }: ProvidersProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+### 2. Configure o Layout Raiz
+
+Use o provider no seu layout raiz:
+
+```tsx
+// app/[locale]/layout.tsx
+import { Providers } from "../providers";
+
+export default function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { locale: string };
+}) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+## Componentes do Servidor
+
+Use `getTranslation` para Componentes do Servidor:
+
+```tsx
+// app/[locale]/page.tsx
+import { getTranslation } from "@/lib/translations.server";
+
+export default async function HomePage() {
+ const { t } = await getTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("description")}
+
+ );
+}
+```
+
+
+ Use `getTranslation` em Componentes do Servidor e `useTranslation` em Componentes do Cliente.
+
+
+## Componentes do Cliente
+
+Use `useTranslation` para Componentes do Cliente:
+
+```tsx
+"use client";
+
+import { useTranslation } from "@onruntime/translations/react";
+
+export function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ English
+ Français
+
+ );
+}
+```
+
+## Roteamento Baseado em Locale
+
+### Configuração do Middleware
+
+Configure o middleware para lidar com a detecção de locale:
+
+```tsx
+// middleware.ts
+import { NextRequest, NextResponse } from "next/server";
+
+const locales = ["en", "fr"];
+const defaultLocale = "en";
+
+export function middleware(request: NextRequest) {
+ const pathname = request.nextUrl.pathname;
+
+ // Verifique se o pathname tem um locale
+ const pathnameHasLocale = locales.some(
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
+ );
+
+ if (pathnameHasLocale) return;
+
+ // Redirecionar para o locale padrão
+ return NextResponse.redirect(
+ new URL(`/${defaultLocale}${pathname}`, request.url)
+ );
+}
+
+export const config = {
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
+};
+```
+
+## Geração Estática
+
+Gere páginas estáticas para todos os locales:
+
+```tsx
+// app/[locale]/page.tsx
+export async function generateStaticParams() {
+ return [{ locale: "en" }, { locale: "fr" }];
+}
+```
+
+## Componente Link
+
+Use o componente Link traduzido para navegação:
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+function Navigation() {
+ return (
+
+ Home
+ About
+
+ );
+}
+```
+
+O componente `Link` cuida automaticamente do prefixo do locale.
+
+## Estrutura do Projeto de Exemplo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/content/pt/docs/translations/react.mdx b/apps/web/src/content/pt/docs/translations/react.mdx
new file mode 100644
index 000000000..210aa715c
--- /dev/null
+++ b/apps/web/src/content/pt/docs/translations/react.mdx
@@ -0,0 +1,157 @@
+---
+title: Uso do React
+description: Usando @onruntime/translations em aplicações React
+---
+## Uso Básico
+
+### O Hook useTranslation
+
+O hook `useTranslation` é sua principal forma de acessar traduções em componentes React:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function MyComponent() {
+ const { t, locale } = useTranslation("common");
+
+ return (
+
+
Localização atual: {locale}
+
{t("title")}
+
+ );
+}
+```
+
+### Interpolação de Variáveis
+
+Passe variáveis para suas traduções:
+
+```json
+// locales/en/common.json
+{
+ "greeting": "Olá, {name}!",
+ "items_count": "Você tem {count} itens"
+}
+```
+
+```tsx
+function Greeting({ name, itemCount }) {
+ const { t } = useTranslation("common");
+
+ return (
+ <>
+ {t("greeting", { name })}
+ {t("items_count", { count: itemCount })}
+ >
+ );
+}
+```
+
+## Múltiplos Namespaces
+
+Você pode usar múltiplos namespaces no mesmo componente:
+
+```tsx
+function Dashboard() {
+ const { t: tCommon } = useTranslation("common");
+ const { t: tDashboard } = useTranslation("dashboard");
+
+ return (
+
+
{tDashboard("title")}
+ {tCommon("buttons.save")}
+
+ );
+}
+```
+
+## Mudando a Localização
+
+Use a função `setLocale` para mudar a localização atual:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ Inglês
+ Français
+ Deutsch
+
+ );
+}
+```
+
+## Chaves Aninhadas
+
+Acesse chaves de tradução aninhadas usando a notação de ponto:
+
+```json
+// locales/en/common.json
+{
+ "nav": {
+ "home": "Início",
+ "about": "Sobre",
+ "contact": "Contato"
+ }
+}
+```
+
+```tsx
+function Navigation() {
+ const { t } = useTranslation("common");
+
+ return (
+
+ {t("nav.home")}
+ {t("nav.about")}
+ {t("nav.contact")}
+
+ );
+}
+```
+
+## Melhores Práticas
+
+
+ Organize as traduções por funcionalidade ou página em vez de colocar tudo em um único arquivo.
+
+
+### Estrutura Recomendada
+
+
+
+
+
+
+
+
+
+
+
+
+### Mantenha as Chaves Consistentes
+
+Use convenções de nomenclatura consistentes em todas as localizações:
+
+```json
+// ✅ Bom - estrutura consistente
+{
+ "page_title": "Painel",
+ "actions": {
+ "save": "Salvar",
+ "cancel": "Cancelar"
+ }
+}
+
+// ❌ Evite - inconsistente
+{
+ "pageTitle": "Painel",
+ "save_button": "Salvar",
+ "cancelBtn": "Cancelar"
+}
+```
diff --git a/apps/web/src/content/sv/docs/gitmoji/emojis.mdx b/apps/web/src/content/sv/docs/gitmoji/emojis.mdx
new file mode 100644
index 000000000..8cfbd04fe
--- /dev/null
+++ b/apps/web/src/content/sv/docs/gitmoji/emojis.mdx
@@ -0,0 +1,11 @@
+---
+title: Emoji referens
+description: Fullständig lista över gitmojis
+---
+Vi använder [gitmoji](https://gitmoji.dev) för att kategorisera våra commits. Här är hela listan över emojis, deras kod och beskrivning:
+
+
+
+
+ Använd [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) eller [VS Code-tillägget](https://marketplace.visualstudio.com/items?itemName=seatonjiang.gitmoji-vscode) för en interaktiv commit-upplevelse.
+
diff --git a/apps/web/src/content/sv/docs/gitmoji/getting-started.mdx b/apps/web/src/content/sv/docs/gitmoji/getting-started.mdx
new file mode 100644
index 000000000..10e9e9c17
--- /dev/null
+++ b/apps/web/src/content/sv/docs/gitmoji/getting-started.mdx
@@ -0,0 +1,91 @@
+---
+title: Kom igång
+description: Lär dig vår commits konvention
+---
+Vi gillar att ha en ren projekthistorik. Vår commitkonvention är inspirerad av [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0) men anpassad med [gitmoji](https://gitmoji.dev) för att göra det mer visuellt och roligt.
+
+## Struktur
+
+Commitmeddelandet ska struktureras som följer och **i gemener**:
+
+```
+ [(#)]
+
+[optional body]
+
+[optional footer(s)]
+```
+
+### Exempel
+
+```bash
+📝 uppdatera dokumentation bidragsgivare
+
+- Lägg till @jerembdn som en bidragsgivare
+- Lägg till @younesbessa som en bidragsgivare
+
+Co-authored-by: Younes Bessa
+```
+
+För det mesta räcker det med en enkel rad:
+
+```bash
+📝 uppdatera dokumentation bidragsgivare
+```
+
+## Typer
+
+Vi använder följande committyper:
+
+| Typ | Beskrivning |
+| --- | --- |
+| `add` | Lägg till en ny funktion |
+| `fix` | Fix en bugg |
+| `improve` | Förbättra något |
+| `update` | Uppdatera något |
+| `remove` | Ta bort något |
+| `refactor` | Refaktorisera något |
+| `rename` | Byt namn på något |
+| `move` | Flytta en fil eller mapp |
+| `upgrade` | Uppgradera beroenden |
+| `downgrade` | Nedgradera beroenden |
+
+## Beskrivning
+
+Skriv beskrivningar i **imperativform** och **gemener**:
+
+```bash
+# Bra
+📝 uppdatera dokumentation bidragsgivare
+
+# Dåligt
+📝 uppdaterad dokumentation bidragsgivare
+
+# Dåligt
+📝 Uppdatera dokumentation bidragsgivare
+```
+
+## Ärendenummer
+
+Länka commits till ärenden genom att lägga till ärendenumret:
+
+```bash
+📝 uppdatera dokumentation bidragsgivare (#123)
+```
+
+## Kropp
+
+Använd kroppen för kontext och motivation:
+
+```bash
+📝 uppdatera dokumentation bidragsgivare
+
+- Lägg till @jerembdn som en bidragsgivare
+- Lägg till @younesbessa som en bidragsgivare
+
+Co-authored-by: Younes Bessa
+```
+
+
+ Varje commit bör representera en enda logisk förändring. Blanda inte orelaterade förändringar.
+
diff --git a/apps/web/src/content/sv/docs/gitmoji/with-ai.mdx b/apps/web/src/content/sv/docs/gitmoji/with-ai.mdx
new file mode 100644
index 000000000..386ce5828
--- /dev/null
+++ b/apps/web/src/content/sv/docs/gitmoji/with-ai.mdx
@@ -0,0 +1,63 @@
+---
+title: Med AI
+description: Använd gitmoji med Claude Code
+---
+Installera vår gitmoji-plugin för [Claude Code](https://claude.ai/code) för att generera commits enligt konventionen.
+
+## Installera Plugin
+
+Lägg till onRuntime-marknadsplatsen och installera plugin:
+
+```bash
+# Lägg till onRuntime-marknadsplatsen
+/plugin marketplace add https://onruntime.com/plugins
+
+# Installera gitmoji-plugin
+/plugin install gitmoji@onruntime
+```
+
+Eller installera direkt från menyn:
+
+1. Kör `/plugin` i Claude Code
+2. Gå till **Discover** fliken
+3. Lägg till marknadsplats: `https://onruntime.com/plugins`
+4. Sök efter "gitmoji" och installera
+
+## Användning
+
+Kör kommandot `/commit` för att skapa en commit:
+
+```
+/commit
+```
+
+```
+/commit fix the login bug
+```
+
+Claude Code kommer att analysera dina ändringar och skapa en commit enligt gitmoji-konventionen.
+
+
+ Kommandot `/commit` hämtar automatiskt ditt git-status och diff för att generera rätt commit-meddelande.
+
+
+## Alternativ: CLAUDE.md
+
+Om du föredrar att inte installera plugin, lägg till detta i ditt projekts `CLAUDE.md`:
+
+```markdown
+## Commit Konvention
+
+Använd gitmoji konventionella commits:
+
+\`\`\`
+
+\`\`\`
+
+Typer: add, fix, improve, update, remove, refactor, rename, move, upgrade, downgrade
+
+Regler:
+- Skriv med små bokstäver
+- Använd imperativ form ("add" inte "added")
+- En logisk ändring per commit
+```
diff --git a/apps/web/src/content/sv/docs/next-sitemap/api.mdx b/apps/web/src/content/sv/docs/next-sitemap/api.mdx
new file mode 100644
index 000000000..f3fdf7cef
--- /dev/null
+++ b/apps/web/src/content/sv/docs/next-sitemap/api.mdx
@@ -0,0 +1,169 @@
+---
+title: API-referens
+description: Komplett API-dokumentation för @onruntime/next-sitemap
+---
+## generateSitemap
+
+Genererar en sitemap för din Next.js-applikation.
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const sitemap = await generateSitemap(options);
+```
+
+### Options
+
+| Option | Typ | Obligatorisk | Beskrivning |
+|--------|------|--------------|-------------|
+| `baseUrl` | `string` | Ja | Din sidas bas-URL |
+| `additionalPaths` | `SitemapEntry[]` | Nej | Ytterligare URL:er att inkludera |
+| `exclude` | `string[]` | Nej | Glob-mönster att utesluta |
+| `defaults` | `SitemapDefaults` | Nej | Standardvärden för alla poster |
+| `locales` | `string[]` | Nej | Stödda språkversioner |
+| `defaultLocale` | `string` | Nej | Standard språkversion |
+
+### SitemapEntry
+
+| Egenskap | Typ | Beskrivning |
+|----------|------|-------------|
+| `url` | `string` | Sidans URL (relativ eller absolut) |
+| `lastModified` | `Date \| string` | Senaste ändringsdatum |
+| `changeFrequency` | `ChangeFrequency` | Hur ofta sidan ändras |
+| `priority` | `number` | Prioritet (0.0 - 1.0) |
+
+### ChangeFrequency
+
+```tsx
+type ChangeFrequency =
+ | "always"
+ | "hourly"
+ | "daily"
+ | "weekly"
+ | "monthly"
+ | "yearly"
+ | "never";
+```
+
+### Exempel
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ const blogPosts = await fetchPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ additionalPaths: blogPosts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ priority: 0.8,
+ })),
+ exclude: ["/admin/*", "/api/*"],
+ });
+}
+```
+
+## generateRobots
+
+Genererar en robots.txt-fil.
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+const robots = generateRobots(options);
+```
+
+### Options
+
+| Option | Typ | Obligatorisk | Beskrivning |
+|--------|------|--------------|-------------|
+| `baseUrl` | `string` | Ja | Din sidas bas-URL |
+| `rules` | `RobotsRule[]` | Nej | Anpassade robots-regler |
+| `sitemap` | `string \| boolean` | Nej | Sitemap-URL eller `false` för att utesluta |
+
+### RobotsRule
+
+| Egenskap | Typ | Beskrivning |
+|----------|------|-------------|
+| `userAgent` | `string` | Målanvändaragent |
+| `allow` | `string \| string[]` | Tillåtna vägar |
+| `disallow` | `string \| string[]` | Ej tillåtna vägar |
+| `crawlDelay` | `number` | Crawl-fördröjning i sekunder |
+
+### Exempel
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ crawlDelay: 1,
+ },
+ ],
+ });
+}
+```
+
+## generateSitemapIndex
+
+Genererar en sitemap-index för stora sidor.
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+const index = await generateSitemapIndex(options);
+```
+
+### Options
+
+| Option | Typ | Obligatorisk | Beskrivning |
+|--------|------|--------------|-------------|
+| `baseUrl` | `string` | Ja | Din sidas bas-URL |
+| `sitemapsPerFile` | `number` | Nej | URL:er per sitemap (standard: 5000) |
+
+### Exempel
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 10000,
+ });
+}
+```
+
+## Type Exports
+
+Paketet exporterar TypeScript-typer för bekvämlighet:
+
+```tsx
+import type {
+ SitemapEntry,
+ SitemapOptions,
+ RobotsOptions,
+ RobotsRule,
+ ChangeFrequency,
+} from "@onruntime/next-sitemap";
+```
+
+
+ Alla funktioner och alternativ är helt typade. Din IDE kommer att ge autokomplettering och typkontroll.
+
diff --git a/apps/web/src/content/sv/docs/next-sitemap/configuration.mdx b/apps/web/src/content/sv/docs/next-sitemap/configuration.mdx
new file mode 100644
index 000000000..bb8796e3e
--- /dev/null
+++ b/apps/web/src/content/sv/docs/next-sitemap/configuration.mdx
@@ -0,0 +1,176 @@
+---
+title: Konfiguration
+description: Konfigurera @onruntime/next-sitemap för dina behov
+---
+## Grundkonfiguration
+
+Den enklaste konfigurationen kräver bara din bas-URL:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+## Avancerad konfiguration
+
+### Anpassade rutter
+
+Lägg till anpassade rutter eller dynamiskt innehåll:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ // Hämta dynamiskt innehåll
+ const posts = await fetchBlogPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ additionalPaths: posts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ changeFrequency: "weekly",
+ priority: 0.7,
+ })),
+ });
+}
+```
+
+### Utesluta rutter
+
+Uteslut specifika rutter från sitemapen:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ exclude: [
+ "/admin/*",
+ "/api/*",
+ "/private/*",
+ ],
+ });
+}
+```
+
+### Prioritet och ändringsfrekvens
+
+Ställ in standardvärden för alla sidor:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ });
+}
+```
+
+## robots.txt-konfiguration
+
+### Grundläggande robots.txt
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+### Anpassade regler
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ },
+ ],
+ });
+}
+```
+
+## Internationell anpassning
+
+### Flera språk-sitemaps
+
+Stöd för flera språk med alternat:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const locales = ["en", "fr", "de"];
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ locales,
+ defaultLocale: "en",
+ });
+}
+```
+
+Detta genererar URL:er med `hreflang` alternativ:
+
+```xml
+
+ https://example.com/en/about
+
+
+
+
+```
+
+## Delade sitemaps
+
+För stora webbplatser, dela din sitemap i flera filer:
+
+```tsx
+// app/sitemap/[id]/route.ts
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export async function GET(
+ request: Request,
+ { params }: { params: { id: string } }
+) {
+ const sitemaps = await generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 5000,
+ });
+
+ return new Response(sitemaps[parseInt(params.id)], {
+ headers: { "Content-Type": "application/xml" },
+ });
+}
+```
+
+
+ Google rekommenderar att hålla sitemaps under 50MB och 50,000 URL:er. Använd delade sitemaps för större webbplatser.
+
diff --git a/apps/web/src/content/sv/docs/next-sitemap/getting-started.mdx b/apps/web/src/content/sv/docs/next-sitemap/getting-started.mdx
new file mode 100644
index 000000000..8d1adf4aa
--- /dev/null
+++ b/apps/web/src/content/sv/docs/next-sitemap/getting-started.mdx
@@ -0,0 +1,86 @@
+---
+title: Komma igång
+description: En webbplatskarta generator för Next.js-applikationer
+---
+## Vad är @onruntime/next-sitemap?
+
+`@onruntime/next-sitemap` är en kraftfull sitemap-generator som är designad specifikt för Next.js-applikationer. Den genererar automatiskt `sitemap.xml` och `robots.txt` filer för din Next.js-sajt.
+
+
+ - Automatisk sitemap-generering för App Router
+ - Stöd för dynamiska rutter
+ - Konfigurerbar prioritet och changefreq
+ - robots.txt-generering
+ - Stöd för flerspråkiga sitemaps
+
+
+## Varför använda det?
+
+### SEO-optimering
+
+Sitemaps hjälper sökmotorer att upptäcka och indexera dina sidor mer effektivt:
+
+- **Snabbare indexering** - Sökmotorer kan hitta alla dina sidor
+- **Bättre crawlning** - Informera crawlers om siduppdateringar
+- **Prioritetsledtrådar** - Vägleder crawlers till viktiga sidor
+
+### Next.js-integration
+
+Byggd specifikt för Next.js, förstår den:
+
+- App Router-struktur
+- Dynamiska rutter
+- Statisk generering
+- Internationaliserad routing
+
+## Snabbt exempel
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+Detta genererar en komplett sitemap som inkluderar alla dina statiska och dynamiska sidor.
+
+## Genererad utdata
+
+Paketet genererar standard XML sitemaps:
+
+```xml
+
+
+
+ https://example.com/
+ 2024-01-15
+ daily
+ 1.0
+
+
+ https://example.com/about
+ 2024-01-10
+ monthly
+ 0.8
+
+
+```
+
+## Nästa steg
+
+
+
+
+
diff --git a/apps/web/src/content/sv/docs/next-sitemap/installation.mdx b/apps/web/src/content/sv/docs/next-sitemap/installation.mdx
new file mode 100644
index 000000000..7a58c301d
--- /dev/null
+++ b/apps/web/src/content/sv/docs/next-sitemap/installation.mdx
@@ -0,0 +1,121 @@
+---
+title: Installation
+description: Installera och ställ in @onruntime/next-sitemap
+---
+## Installation
+
+Installera paketet med hjälp av din föredragna paketchefs:
+
+```bash
+# npm
+npm install @onruntime/next-sitemap
+
+# yarn
+yarn add @onruntime/next-sitemap
+
+# pnpm
+pnpm add @onruntime/next-sitemap
+```
+
+## Grundläggande Installation
+
+### App Router (Next.js 13+)
+
+Skapa en `sitemap.ts` fil i din `app`-katalog:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+### robots.txt
+
+Skapa en `robots.ts` fil för generering av robots.txt:
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+## Projektstruktur
+
+Efter installationen ska ditt projekt se ut så här:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Verifiera Installation
+
+Starta din utvecklingsserver och besök:
+
+- `http://localhost:3000/sitemap.xml` - Din sitemap
+- `http://localhost:3000/robots.txt` - Din robots.txt
+
+Du ska se genererad XML för din sitemap och textinnehåll för robots.txt.
+
+
+ Sitemapen kommer att inkludera alla rutter som upptäckts vid bygget. I utveckling återspeglar den din nuvarande ruttstruktur.
+
+
+## Miljövariabler
+
+För produktion, ställ in din bas-URL:
+
+```env
+# .env.production
+NEXT_PUBLIC_SITE_URL=https://your-domain.com
+```
+
+Använd den sedan i din konfiguration:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: process.env.NEXT_PUBLIC_SITE_URL || "https://your-domain.com",
+ });
+}
+```
+
+## Nästa Steg
+
+
+
+
+
diff --git a/apps/web/src/content/sv/docs/translations/api.mdx b/apps/web/src/content/sv/docs/translations/api.mdx
new file mode 100644
index 000000000..35eb4919f
--- /dev/null
+++ b/apps/web/src/content/sv/docs/translations/api.mdx
@@ -0,0 +1,194 @@
+---
+title: API-referens
+description: Komplett API-dokumentation för @onruntime/översättningar
+---
+## TranslationsProvider
+
+Provider-komponenten som omsluter din applikation.
+
+```tsx
+import { TranslationsProvider } from "@onruntime/translations/react";
+
+
+ {children}
+
+```
+
+### Props
+
+| Prop | Typ | Obligatorisk | Beskrivning |
+|------|-----|--------------|-------------|
+| `locale` | `string` | Ja | Nuvarande aktiva språk |
+| `locales` | `Record` | Ja | Objekt som innehåller alla översättningar för språk |
+| `fallbackLocale` | `string` | Nej | Reservspråk när nyckeln saknas |
+| `children` | `ReactNode` | Ja | Barnkomponenter |
+
+## useTranslation
+
+Hook för att få åtkomst till översättningar i client-komponenter.
+
+```tsx
+const { t, locale, setLocale } = useTranslation("namespace");
+```
+
+### Parametrar
+
+| Parameter | Typ | Obligatorisk | Beskrivning |
+|-----------|-----|--------------|-------------|
+| `namespace` | `string` | Ja | Översättningsnamnrymd att använda |
+
+### Returer
+
+| Egenskap | Typ | Beskrivning |
+|----------|-----|-------------|
+| `t` | `(key: string, vars?: object) => string` | Översättningsfunktion |
+| `locale` | `string` | Nuvarande språk |
+| `setLocale` | `(locale: string) => void` | Funktion för att ändra språk |
+
+### Exempel
+
+```tsx
+const { t, locale, setLocale } = useTranslation("common");
+
+// Grundläggande användning
+t("greeting"); // "Hello"
+
+// Med variabler
+t("greeting_name", { name: "John" }); // "Hello, John!"
+
+// Nästlade nycklar
+t("nav.home"); // "Home"
+
+// Byt språk
+setLocale("fr");
+```
+
+## getTranslation
+
+Asynkron funktion för att få åtkomst till översättningar i serverkomponenter (Next.js).
+
+```tsx
+const { t } = await getTranslation("namespace");
+```
+
+### Parametrar
+
+| Parameter | Typ | Obligatorisk | Beskrivning |
+|-----------|-----|--------------|-------------|
+| `namespace` | `string` | Ja | Översättningsnamnrymd att använda |
+
+### Returer
+
+| Egenskap | Typ | Beskrivning |
+|----------|-----|-------------|
+| `t` | `(key: string, vars?: object) => string` | Översättningsfunktion |
+| `locale` | `string` | Nuvarande språk |
+
+### Exempel
+
+```tsx
+// Serverkomponent
+export default async function Page() {
+ const { t } = await getTranslation("common");
+
+ return {t("title")} ;
+}
+```
+
+## Link Component
+
+Språkmedveten länkkomponent för Next.js.
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+ About
+```
+
+### Props
+
+Alla props från Next.js `Link`-komponenten, plus:
+
+| Prop | Typ | Standard | Beskrivning |
+|------|-----|----------|-------------|
+| `locale` | `string` | Nuvarande språk | Åsidosätt språk för länken |
+
+### Exempel
+
+```tsx
+// Använder nuvarande språk
+ About
+
+// Tvinga till specifikt språk
+ À propos
+```
+
+## Translation Function (t)
+
+`t`-funktionen används för att hämta översatta strängar.
+
+### Signatur
+
+```tsx
+t(key: string, variables?: Record): string
+```
+
+### Parametrar
+
+| Parameter | Typ | Beskrivning |
+|-----------|-----|-------------|
+| `key` | `string` | Översättningsnyckel (stödjer punktnotation) |
+| `variables` | `object` | Variabler att interpolera |
+
+### Variabelinterpolation
+
+```json
+{
+ "greeting": "Hello, {name}!",
+ "items": "You have {count} items"
+}
+```
+
+```tsx
+t("greeting", { name: "Alice" }); // "Hello, Alice!"
+t("items", { count: 5 }); // "You have 5 items"
+```
+
+### Nästlade nycklar
+
+```json
+{
+ "user": {
+ "profile": {
+ "title": "Profile"
+ }
+ }
+}
+```
+
+```tsx
+t("user.profile.title"); // "Profile"
+```
+
+## Typdefinitioner
+
+### TranslationNamespaces
+
+Utöka detta gränssnitt för typ-säkra översättningar:
+
+```tsx
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("./locales/en/common.json");
+ auth: typeof import("./locales/en/auth.json");
+ }
+}
+```
+
+
+ Med rätt typdefinitioner får du autocompletion för översättningsnycklar och kompileringstid fel för ogiltiga nycklar.
+
diff --git a/apps/web/src/content/sv/docs/translations/getting-started.mdx b/apps/web/src/content/sv/docs/translations/getting-started.mdx
new file mode 100644
index 000000000..57f6eea0a
--- /dev/null
+++ b/apps/web/src/content/sv/docs/translations/getting-started.mdx
@@ -0,0 +1,92 @@
+---
+title: Komma igång
+description: 'Ett lättviktigt, typ-säkert internationellt bibliotek för React och Next.js'
+---
+## Vad är @onruntime/translations?
+
+`@onruntime/translations` är ett lättviktigt, typ-säkert internationaliserings (i18n) bibliotek designat för React och Next.js applikationer. Det erbjuder ett enkelt API för att hantera översättningar med fullt TypeScript-stöd.
+
+
+ - Typ-säkra översättningar med TypeScript
+ - Stöd för React och Next.js (App Router)
+ - Namnrymds-baserad organisation
+ - Variabelinterpolation
+ - Lättviktigt och prestandaeffektivt
+
+
+## Varför Använda Det?
+
+### Typ Säkerhet
+
+Få kompileringsfel när du använder ogiltiga översättningsnycklar:
+
+```typescript
+const { t } = useTranslation("common");
+
+t("greeting"); // ✅ Giltig nyckel
+t("invalid_key"); // ❌ TypeScript fel
+```
+
+### Enkelt API
+
+Bara två hooks för alla dina översättningsbehov:
+
+```typescript
+// Klientkomponenter
+const { t } = useTranslation("namespace");
+
+// Serverkomponenter (Next.js)
+const { t } = await getTranslation("namespace");
+```
+
+### Organiserade Översättningar
+
+Håll dina översättningar organiserade med namnrymder:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Snabbt Exempel
+
+```tsx
+// locales/en/common.json
+{
+ "greeting": "Hej, {name}!"
+}
+
+// Komponent
+import { useTranslation } from "@onruntime/translations/react";
+
+function Welcome({ name }) {
+ const { t } = useTranslation("common");
+
+ return {t("greeting", { name })} ;
+}
+```
+
+## Nästa Steg
+
+
+
+
+
diff --git a/apps/web/src/content/sv/docs/translations/installation.mdx b/apps/web/src/content/sv/docs/translations/installation.mdx
new file mode 100644
index 000000000..db52c4837
--- /dev/null
+++ b/apps/web/src/content/sv/docs/translations/installation.mdx
@@ -0,0 +1,127 @@
+---
+title: Installation
+description: Installera och konfigurera @onruntime/translations
+---
+## Installation
+
+Installera paketet med din föredragna paketmanager:
+
+```bash
+# npm
+npm install @onruntime/translations
+
+# yarn
+yarn add @onruntime/translations
+
+# pnpm
+pnpm add @onruntime/translations
+```
+
+## Projektsetup
+
+### 1. Skapa Översättningsfiler
+
+Skapa en `locales`-katalog i ditt projekt med översättningsfiler för varje språk:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Exempel på `locales/en/common.json`:
+
+```json
+{
+ "title": "Välkommen",
+ "greeting": "Hej, {name}!",
+ "items": {
+ "one": "{count} artikel",
+ "other": "{count} artiklar"
+ }
+}
+```
+
+### 2. Konfigurera TypeScript (Valfritt)
+
+För typ-säker översättning, skapa en typdefinitionsfil:
+
+```typescript
+// types/translations.d.ts
+import "onruntime/translations";
+
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("../locales/en/common.json");
+ auth: typeof import("../locales/en/auth.json");
+ }
+}
+```
+
+### 3. Ställ in Provider
+
+Ombryta din app med `TranslationsProvider`:
+
+```tsx
+// För React
+import { TranslationsProvider } from "@onruntime/translations/react";
+import en from "./locales/en";
+import fr from "./locales/fr";
+
+const locales = { en, fr };
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
+ För Next.js med App Router, kolla in guiden [Next.js Usage](/docs/translations/nextjs) för rekommenderad setup.
+
+
+## Verifiera Installation
+
+Testa din setup med en enkel komponent:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function TestComponent() {
+ const { t } = useTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("greeting", { name: "Världen" })}
+
+ );
+}
+```
+
+Om du ser dina översättningar renderade så är du redo!
+
+## Nästa Steg
+
+
+
+
+
diff --git a/apps/web/src/content/sv/docs/translations/nextjs.mdx b/apps/web/src/content/sv/docs/translations/nextjs.mdx
new file mode 100644
index 000000000..61555f5c8
--- /dev/null
+++ b/apps/web/src/content/sv/docs/translations/nextjs.mdx
@@ -0,0 +1,191 @@
+---
+title: Next.js användning
+description: Använda @onruntime/translations med Next.js App Router
+---
+## Setup för App Router
+
+### 1. Konfigurera Leverantören
+
+Skapa en providers-fil för att ställa in översättningar:
+
+```tsx
+// app/providers.tsx
+"use client";
+
+import { TranslationsProvider } from "@onruntime/translations/react";
+import { ReactNode } from "react";
+
+import en from "@/locales/en";
+import fr from "@/locales/fr";
+
+const locales = { en, fr };
+
+interface ProvidersProps {
+ children: ReactNode;
+ locale: string;
+}
+
+export function Providers({ children, locale }: ProvidersProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+### 2. Ställ In Rotlayouten
+
+Använd leverantören i din rotlayout:
+
+```tsx
+// app/[locale]/layout.tsx
+import { Providers } from "../providers";
+
+export default function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { locale: string };
+}) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+## Serverkomponenter
+
+Använd `getTranslation` för Serverkomponenter:
+
+```tsx
+// app/[locale]/page.tsx
+import { getTranslation } from "@/lib/translations.server";
+
+export default async function HomePage() {
+ const { t } = await getTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("description")}
+
+ );
+}
+```
+
+
+ Använd `getTranslation` i Serverkomponenter och `useTranslation` i Klientkomponenter.
+
+
+## Klientkomponenter
+
+Använd `useTranslation` för Klientkomponenter:
+
+```tsx
+"use client";
+
+import { useTranslation } from "@onruntime/translations/react";
+
+export function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ English
+ Français
+
+ );
+}
+```
+
+## Lokalbaserad Routing
+
+### Middleware Setup
+
+Ställ in middleware för att hantera lokalavkänning:
+
+```tsx
+// middleware.ts
+import { NextRequest, NextResponse } from "next/server";
+
+const locales = ["en", "fr"];
+const defaultLocale = "en";
+
+export function middleware(request: NextRequest) {
+ const pathname = request.nextUrl.pathname;
+
+ // Kolla om pathname har en lokal
+ const pathnameHasLocale = locales.some(
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
+ );
+
+ if (pathnameHasLocale) return;
+
+ // Omdirigera till standardlokalen
+ return NextResponse.redirect(
+ new URL(`/${defaultLocale}${pathname}`, request.url)
+ );
+}
+
+export const config = {
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
+};
+```
+
+## Statisk Generering
+
+Generera statiska sidor för alla lokaler:
+
+```tsx
+// app/[locale]/page.tsx
+export async function generateStaticParams() {
+ return [{ locale: "en" }, { locale: "fr" }];
+}
+```
+
+## Länkkomponent
+
+Använd den översatta Länkkomponenten för navigering:
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+function Navigation() {
+ return (
+
+ Home
+ About
+
+ );
+}
+```
+
+Den `Link`-komponenten hanterar automatiskt lokalprefixering.
+
+## Exempel på Projektstruktur
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/content/sv/docs/translations/react.mdx b/apps/web/src/content/sv/docs/translations/react.mdx
new file mode 100644
index 000000000..9a5caf49e
--- /dev/null
+++ b/apps/web/src/content/sv/docs/translations/react.mdx
@@ -0,0 +1,157 @@
+---
+title: React-användning
+description: Använda @onruntime/translations i React-applikationer
+---
+## Grundläggande Användning
+
+### useTranslation Hooken
+
+`useTranslation` hooken är ditt huvudsakliga sätt att få tillgång till översättningar i React-komponenter:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function MyComponent() {
+ const { t, locale } = useTranslation("common");
+
+ return (
+
+
Nuvarande språk: {locale}
+
{t("title")}
+
+ );
+}
+```
+
+### Variabelinterpolation
+
+Skicka variabler till dina översättningar:
+
+```json
+// locales/sv/common.json
+{
+ "greeting": "Hej, {name}!",
+ "items_count": "Du har {count} objekt"
+}
+```
+
+```tsx
+function Greeting({ name, itemCount }) {
+ const { t } = useTranslation("common");
+
+ return (
+ <>
+ {t("greeting", { name })}
+ {t("items_count", { count: itemCount })}
+ >
+ );
+}
+```
+
+## Flera Namnområden
+
+Du kan använda flera namnområden i samma komponent:
+
+```tsx
+function Dashboard() {
+ const { t: tCommon } = useTranslation("common");
+ const { t: tDashboard } = useTranslation("dashboard");
+
+ return (
+
+
{tDashboard("title")}
+ {tCommon("buttons.save")}
+
+ );
+}
+```
+
+## Ändra Språk
+
+Använd `setLocale` funktionen för att ändra det aktuella språket:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ Engelska
+ Français
+ Deutsch
+
+ );
+}
+```
+
+## Nästlade Nycklar
+
+Åtkomst till nästlade översättningsnycklar med hjälp av punktnotation:
+
+```json
+// locales/sv/common.json
+{
+ "nav": {
+ "home": "Hem",
+ "about": "Om",
+ "contact": "Kontakt"
+ }
+}
+```
+
+```tsx
+function Navigation() {
+ const { t } = useTranslation("common");
+
+ return (
+
+ {t("nav.home")}
+ {t("nav.about")}
+ {t("nav.contact")}
+
+ );
+}
+```
+
+## Bästa Praxis
+
+
+ Organisera översättningar efter funktion eller sida istället för att lägga allt i en fil.
+
+
+### Rekommenderad Struktur
+
+
+
+
+
+
+
+
+
+
+
+
+### Håll Nycklar Konsekventa
+
+Använd konsekventa namngivningskonventioner över alla språk:
+
+```json
+// ✅ Bra - konsekvent struktur
+{
+ "page_title": "Dashboard",
+ "actions": {
+ "save": "Spara",
+ "cancel": "Avbryt"
+ }
+}
+
+// ❌ Undvik - inkonsekvent
+{
+ "pageTitle": "Dashboard",
+ "save_button": "Spara",
+ "cancelBtn": "Avbryt"
+}
+```
diff --git a/apps/web/src/content/tr/docs/gitmoji/emojis.mdx b/apps/web/src/content/tr/docs/gitmoji/emojis.mdx
new file mode 100644
index 000000000..71630cfcd
--- /dev/null
+++ b/apps/web/src/content/tr/docs/gitmoji/emojis.mdx
@@ -0,0 +1,11 @@
+---
+title: Emoji Referansı
+description: Tam gitmoji listesi
+---
+Biz [gitmoji](https://gitmoji.dev) kullanarak commitlerimizi kategorilere ayırıyoruz. İşte emoji listesinin tamamı, kodları ve açıklamaları:
+
+
+
+
+ Etkileşimli bir commit deneyimi için [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) veya [VS Code uzantısını](https://marketplace.visualstudio.com/items?itemName=seatonjiang.gitmoji-vscode) kullan.
+
diff --git a/apps/web/src/content/tr/docs/gitmoji/getting-started.mdx b/apps/web/src/content/tr/docs/gitmoji/getting-started.mdx
new file mode 100644
index 000000000..90405ba04
--- /dev/null
+++ b/apps/web/src/content/tr/docs/gitmoji/getting-started.mdx
@@ -0,0 +1,91 @@
+---
+title: Başlarken
+description: Commit kuralımızı öğren
+---
+Biz temiz bir proje geçmişine sahip olmayı seviyoruz. Commit konvansiyonumuz [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0) ilham alınarak oluşturuldu ama daha görsel ve eğlenceli hale getirilmesi için [gitmoji](https://gitmoji.dev) ile özelleştirildi.
+
+## Yapı
+
+Commit mesajı aşağıdaki gibi yapılandırılmalı ve **küçük harf** ile yazılmalıdır:
+
+```
+ [(#)]
+
+[isteğe bağlı gövde]
+
+[isteğe bağlı footer(lar)]
+```
+
+### Örnek
+
+```bash
+📝 update documentation contributors
+
+- @jerembdn'yi katkıcı olarak ekle
+- @younesbessa'yı katkıcı olarak ekle
+
+Co-authored-by: Younes Bessa
+```
+
+Çoğu zaman basit bir satır yeterlidir:
+
+```bash
+📝 update documentation contributors
+```
+
+## Türler
+
+Aşağıdaki commit türlerini kullanıyoruz:
+
+| Tür | Açıklama |
+| --- | --- |
+| `add` | Yeni bir özellik ekle |
+| `fix` | Bir hatayı düzelt |
+| `improve` | Bir şeyi geliştir |
+| `update` | Bir şeyi güncelle |
+| `remove` | Bir şeyi kaldır |
+| `refactor` | Bir şeyi yeniden düzenle |
+| `rename` | Bir şeyi yeniden adlandır |
+| `move` | Bir dosya veya klasörü taşı |
+| `upgrade` | Bağlantıları güncelle |
+| `downgrade` | Bağlantıları düşür |
+
+## Açıklama
+
+Açıklamaları **emir kipi** ve **küçük harfle** yaz:
+
+```bash
+# İyi
+📝 update documentation contributors
+
+# Kötü
+📝 updated documentation contributors
+
+# Kötü
+📝 Update documentation contributors
+```
+
+## Sorun Numarası
+
+Commit’leri sorun numarasına bağlamak için sorun numarasını ekle:
+
+```bash
+📝 update documentation contributors (#123)
+```
+
+## Gövde
+
+Gövdeyi bağlam ve motivasyon için kullan:
+
+```bash
+📝 update documentation contributors
+
+- @jerembdn'yi katkıcı olarak ekle
+- @younesbessa'yı katkıcı olarak ekle
+
+Co-authored-by: Younes Bessa
+```
+
+
+ Her commit tek bir mantıksal değişikliği temsil etmelidir. Alakasız değişiklikleri karıştırmayın.
+
diff --git a/apps/web/src/content/tr/docs/gitmoji/with-ai.mdx b/apps/web/src/content/tr/docs/gitmoji/with-ai.mdx
new file mode 100644
index 000000000..6a1a70cf8
--- /dev/null
+++ b/apps/web/src/content/tr/docs/gitmoji/with-ai.mdx
@@ -0,0 +1,63 @@
+---
+title: Yapay zeka ile
+description: Claude Code ile gitmoji kullanın
+---
+Install our gitmoji plugin for [Claude Code](https://claude.ai/code) to generate commits following the convention.
+
+## Eklentiyi Kur
+
+onRuntime pazarını ekleyin ve eklentiyi kurun:
+
+```bash
+# onRuntime pazarını ekle
+/plugin marketplace add https://onruntime.com/plugins
+
+# gitmoji eklentisini kur
+/plugin install gitmoji@onruntime
+```
+
+Ya da menüden doğrudan kurun:
+
+1. Claude Code'da `/plugin` komutunu çalıştırın
+2. **Keşfet** sekmesine gidin
+3. Pazar ekleyin: `https://onruntime.com/plugins`
+4. "gitmoji" için arama yapın ve kurun
+
+## Kullanım
+
+Bir commit oluşturmak için `/commit` komutunu çalıştırın:
+
+```
+/commit
+```
+
+```
+/commit login hatasını düzelt
+```
+
+Claude Code, değişikliklerinizi analiz edecek ve gitmoji kuralına uygun bir commit oluşturacaktır.
+
+
+ `/commit` komutu, uygun commit mesajını oluşturmak için otomatik olarak git durumunu ve farklılıkları alır.
+
+
+## Alternatif: CLAUDE.md
+
+Eklentiyi kurmak istemiyorsanız, projenizin `CLAUDE.md` dosyasına şunu ekleyin:
+
+```markdown
+## Commit Konvansiyonu
+
+gitmoji geleneksel commitlerini kullanın:
+
+\`\`\`
+
+\`\`\`
+
+Türler: add, fix, improve, update, remove, refactor, rename, move, upgrade, downgrade
+
+Kurallar:
+- Küçük harfle yazın
+- Emir kipi kullanın ("add" değil "added")
+- Her commit için bir mantıksal değişiklik
+```
diff --git a/apps/web/src/content/tr/docs/next-sitemap/api.mdx b/apps/web/src/content/tr/docs/next-sitemap/api.mdx
new file mode 100644
index 000000000..14fe2c621
--- /dev/null
+++ b/apps/web/src/content/tr/docs/next-sitemap/api.mdx
@@ -0,0 +1,169 @@
+---
+title: API Referansı
+description: '@onruntime/next-sitemap için eksiksiz API belgelendirmesi'
+---
+## generateSitemap
+
+Next.js uygulamanız için bir site haritası oluşturur.
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const sitemap = await generateSitemap(options);
+```
+
+### Options
+
+| Seçenek | Tür | Zorunlu | Açıklama |
+|---------|-----|---------|----------|
+| `baseUrl` | `string` | Evet | Sitenizin ana URL'si |
+| `additionalPaths` | `SitemapEntry[]` | Hayır | Dahil edilecek ek URL'ler |
+| `exclude` | `string[]` | Hayır | Hariç tutulacak glob kalıpları |
+| `defaults` | `SitemapDefaults` | Hayır | Tüm girdiler için varsayılan değerler |
+| `locales` | `string[]` | Hayır | Desteklenen diller |
+| `defaultLocale` | `string` | Hayır | Varsayılan dil |
+
+### SitemapEntry
+
+| Özellik | Tür | Açıklama |
+|---------|-----|----------|
+| `url` | `string` | Sayfa URL'si (göreceli veya mutlak) |
+| `lastModified` | `Date \| string` | Son değişiklik tarihi |
+| `changeFrequency` | `ChangeFrequency` | Sayfanın ne sıklıkla değiştiği |
+| `priority` | `number` | Öncelik (0.0 - 1.0) |
+
+### ChangeFrequency
+
+```tsx
+type ChangeFrequency =
+ | "always"
+ | "hourly"
+ | "daily"
+ | "weekly"
+ | "monthly"
+ | "yearly"
+ | "never";
+```
+
+### Örnek
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ const blogPosts = await fetchPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ additionalPaths: blogPosts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ priority: 0.8,
+ })),
+ exclude: ["/admin/*", "/api/*"],
+ });
+}
+```
+
+## generateRobots
+
+Bir robots.txt dosyası oluşturur.
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+const robots = generateRobots(options);
+```
+
+### Options
+
+| Seçenek | Tür | Zorunlu | Açıklama |
+|---------|-----|---------|----------|
+| `baseUrl` | `string` | Evet | Sitenizin ana URL'si |
+| `rules` | `RobotsRule[]` | Hayır | Özel robots kuralları |
+| `sitemap` | `string \| boolean` | Hayır | Site haritası URL'si veya hariç tutmak için `false` |
+
+### RobotsRule
+
+| Özellik | Tür | Açıklama |
+|---------|-----|----------|
+| `userAgent` | `string` | Hedef kullanıcı aracısı |
+| `allow` | `string \| string[]` | İzin verilen yollar |
+| `disallow` | `string \| string[]` | İzin verilmeyen yollar |
+| `crawlDelay` | `number` | Saniyeler cinsinden tarama gecikmesi |
+
+### Örnek
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ crawlDelay: 1,
+ },
+ ],
+ });
+}
+```
+
+## generateSitemapIndex
+
+Büyük siteler için bir site haritası indeksi oluşturur.
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+const index = await generateSitemapIndex(options);
+```
+
+### Options
+
+| Seçenek | Tür | Zorunlu | Açıklama |
+|---------|-----|---------|----------|
+| `baseUrl` | `string` | Evet | Sitenizin ana URL'si |
+| `sitemapsPerFile` | `number` | Hayır | Her site haritası için URL sayısı (varsayılan: 5000) |
+
+### Örnek
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 10000,
+ });
+}
+```
+
+## Type Exports
+
+Paket, kullanım kolaylığı için TypeScript türlerini dışa aktarır:
+
+```tsx
+import type {
+ SitemapEntry,
+ SitemapOptions,
+ RobotsOptions,
+ RobotsRule,
+ ChangeFrequency,
+} from "@onruntime/next-sitemap";
+```
+
+
+ Tüm fonksiyonlar ve seçenekler tamamen tiplenmiştir. IDE'niz otomatik tamamlama ve tip kontrolü sağlayacak.
+
diff --git a/apps/web/src/content/tr/docs/next-sitemap/configuration.mdx b/apps/web/src/content/tr/docs/next-sitemap/configuration.mdx
new file mode 100644
index 000000000..af59f5c1c
--- /dev/null
+++ b/apps/web/src/content/tr/docs/next-sitemap/configuration.mdx
@@ -0,0 +1,176 @@
+---
+title: Yapılandırma
+description: İhtiyaçlarına göre @onruntime/next-sitemap'i yapılandır
+---
+## Temel Yapılandırma
+
+En basit yapılandırma yalnızca temel URL'nizi gerektirir:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+## Gelişmiş Yapılandırma
+
+### Özel Yollar
+
+Özel yollar veya dinamik içerik ekleyin:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ // Dinamik içeriği al
+ const posts = await fetchBlogPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ additionalPaths: posts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ changeFrequency: "haftalık",
+ priority: 0.7,
+ })),
+ });
+}
+```
+
+### Yolları Hariç Tutma
+
+Belirli yolları sitemap'ten çıkarın:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ exclude: [
+ "/admin/*",
+ "/api/*",
+ "/private/*",
+ ],
+ });
+}
+```
+
+### Öncelik ve Değiştirme Sıklığı
+
+Tüm sayfalar için varsayılan değerleri ayarlayın:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "haftalık",
+ priority: 0.7,
+ },
+ });
+}
+```
+
+## robots.txt Yapılandırması
+
+### Temel robots.txt
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+### Özel Kurallar
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ },
+ ],
+ });
+}
+```
+
+## Uluslararasılaşma
+
+### Çok Dilli Sitemaps
+
+Alternatiflerle birden fazla dili destekleyin:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const locales = ["en", "fr", "de"];
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ locales,
+ defaultLocale: "en",
+ });
+}
+```
+
+Bu, `hreflang` alternatifleri ile URL'ler oluşturur:
+
+```xml
+
+ https://example.com/en/about
+
+
+
+
+```
+
+## Bölünmüş Sitemaps
+
+Büyük siteler için sitemap'inizi birden fazla dosyaya ayırın:
+
+```tsx
+// app/sitemap/[id]/route.ts
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export async function GET(
+ request: Request,
+ { params }: { params: { id: string } }
+) {
+ const sitemaps = await generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 5000,
+ });
+
+ return new Response(sitemaps[parseInt(params.id)], {
+ headers: { "Content-Type": "application/xml" },
+ });
+}
+```
+
+
+ Google, sitemaps'in 50MB'ın altında ve 50,000 URL'den az tutulmasını önerir. Daha büyük siteler için bölünmüş sitemaps kullanın.
+
diff --git a/apps/web/src/content/tr/docs/next-sitemap/getting-started.mdx b/apps/web/src/content/tr/docs/next-sitemap/getting-started.mdx
new file mode 100644
index 000000000..596804d8e
--- /dev/null
+++ b/apps/web/src/content/tr/docs/next-sitemap/getting-started.mdx
@@ -0,0 +1,86 @@
+---
+title: Başlarken
+description: Next.js uygulamaları için bir site haritası oluşturucu
+---
+## @onruntime/next-sitemap Nedir?
+
+`@onruntime/next-sitemap`, özel olarak Next.js uygulamaları için tasarlanmış güçlü bir sitemap oluşturucusudur. Next.js siteniz için otomatik olarak `sitemap.xml` ve `robots.txt` dosyaları oluşturur.
+
+
+ - App Router için otomatik sitemap oluşturma
+ - Dinamik yolları destekleme
+ - Yapılandırılabilir öncelik ve changefreq
+ - robots.txt oluşturma
+ - Çok dilli sitemap desteği
+
+
+## Neden Kullanmalısınız?
+
+### SEO Optimizasyonu
+
+Sitemap'ler arama motorlarının sayfalarınızı daha verimli bir şekilde keşfetmesine ve dizine eklemesine yardımcı olur:
+
+- **Daha hızlı dizinleme** - Arama motorları tüm sayfalarınızı bulabilir
+- **Daha iyi tarama** - Tarayıcılara sayfa güncellemeleri hakkında bilgi verir
+- **Öncelik ipuçları** - Tarayıcıları önemli sayfalara yönlendirir
+
+### Next.js Entegrasyonu
+
+Özellikle Next.js için oluşturulmuş olup, şunları anlar:
+
+- App Router yapısı
+- Dinamik yollar
+- Statik oluşturma
+- Uluslararasılaştırılmış yönlendirme
+
+## Hızlı Örnek
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+Bu, tüm statik ve dinamik sayfalarınızı içeren tam bir sitemap oluşturur.
+
+## Oluşturulan Çıktı
+
+Paket, standart XML sitemap'leri oluşturur:
+
+```xml
+
+
+
+ https://example.com/
+ 2024-01-15
+ daily
+ 1.0
+
+
+ https://example.com/about
+ 2024-01-10
+ monthly
+ 0.8
+
+
+```
+
+## Sonraki Adımlar
+
+
+
+
+
diff --git a/apps/web/src/content/tr/docs/next-sitemap/installation.mdx b/apps/web/src/content/tr/docs/next-sitemap/installation.mdx
new file mode 100644
index 000000000..bdc176daa
--- /dev/null
+++ b/apps/web/src/content/tr/docs/next-sitemap/installation.mdx
@@ -0,0 +1,121 @@
+---
+title: Kurulum
+description: '@onruntime/next-sitemap''ı kur ve ayarla'
+---
+## Kurulum
+
+Paketinizi tercih ettiğiniz paket yöneticisi ile yükleyin:
+
+```bash
+# npm
+npm install @onruntime/next-sitemap
+
+# yarn
+yarn add @onruntime/next-sitemap
+
+# pnpm
+pnpm add @onruntime/next-sitemap
+```
+
+## Temel Kurulum
+
+### App Router (Next.js 13+)
+
+`app` dizininizde bir `sitemap.ts` dosyası oluşturun:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+### robots.txt
+
+robots.txt oluşturma için bir `robots.ts` dosyası oluşturun:
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+## Proje Yapısı
+
+Kurulumdan sonra, projeniz şu şekilde görünmelidir:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Kurulumu Doğrula
+
+Geliştirme sunucunuzu başlatın ve ziyaret edin:
+
+- `http://localhost:3000/sitemap.xml` - Sitemap'iniz
+- `http://localhost:3000/robots.txt` - Robots.txt'iniz
+
+Sitemap'iniz için oluşturulmuş XML ve robots.txt için metin içeriğini görmelisiniz.
+
+
+ Sitemap, derleme zamanı sırasında keşfedilen tüm yolları içerecek. Geliştirmede, mevcut yol yapınızı yansıtır.
+
+
+## Ortam Değişkenleri
+
+Üretim için, temel URL'nizi ayarlayın:
+
+```env
+# .env.production
+NEXT_PUBLIC_SITE_URL=https://your-domain.com
+```
+
+Sonra bunu yapılandırmanızda kullanın:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: process.env.NEXT_PUBLIC_SITE_URL || "https://your-domain.com",
+ });
+}
+```
+
+## Sonraki Adımlar
+
+
+
+
+
diff --git a/apps/web/src/content/tr/docs/translations/api.mdx b/apps/web/src/content/tr/docs/translations/api.mdx
new file mode 100644
index 000000000..1c1d864c7
--- /dev/null
+++ b/apps/web/src/content/tr/docs/translations/api.mdx
@@ -0,0 +1,194 @@
+---
+title: API Referansı
+description: '@onruntime/çevirmeler için tam API dokümanları'
+---
+## TranslationsProvider
+
+Uygulamanızı saran sağlayıcı bileşeni.
+
+```tsx
+import { TranslationsProvider } from "@onruntime/translations/react";
+
+
+ {children}
+
+```
+
+### Props
+
+| Prop | Type | Gerekli | Açıklama |
+|------|------|---------|----------|
+| `locale` | `string` | Evet | Geçerli aktif dil |
+| `locales` | `Record` | Evet | Tüm dil çevirilerini içeren nesne |
+| `fallbackLocale` | `string` | Hayır | Anahtar eksik olduğunda yedek dil |
+| `children` | `ReactNode` | Evet | Alt bileşenler |
+
+## useTranslation
+
+İstemci bileşenlerinde çevirilere erişmek için kanca.
+
+```tsx
+const { t, locale, setLocale } = useTranslation("namespace");
+```
+
+### Parametreler
+
+| Parametre | Type | Gerekli | Açıklama |
+|-----------|------|---------|----------|
+| `namespace` | `string` | Evet | Kullanılacak çeviri alanı |
+
+### Dönüş
+
+| Özellik | Type | Açıklama |
+|---------|------|----------|
+| `t` | `(key: string, vars?: object) => string` | Çeviri işlevi |
+| `locale` | `string` | Geçerli dil |
+| `setLocale` | `(locale: string) => void` | Dili değiştirmek için işlev |
+
+### Örnek
+
+```tsx
+const { t, locale, setLocale } = useTranslation("common");
+
+// Temel kullanım
+t("greeting"); // "Merhaba"
+
+// Değişkenlerle
+t("greeting_name", { name: "John" }); // "Merhaba, John!"
+
+// İç içe anahtarlar
+t("nav.home"); // "Ana Sayfa"
+
+// Dili değiştir
+setLocale("fr");
+```
+
+## getTranslation
+
+Sunucu bileşenlerinde çevirilere erişmek için asenkron işlev (Next.js).
+
+```tsx
+const { t } = await getTranslation("namespace");
+```
+
+### Parametreler
+
+| Parametre | Type | Gerekli | Açıklama |
+|-----------|------|---------|----------|
+| `namespace` | `string` | Evet | Kullanılacak çeviri alanı |
+
+### Dönüş
+
+| Özellik | Type | Açıklama |
+|---------|------|----------|
+| `t` | `(key: string, vars?: object) => string` | Çeviri işlevi |
+| `locale` | `string` | Geçerli dil |
+
+### Örnek
+
+```tsx
+// Sunucu Bileşeni
+export default async function Page() {
+ const { t } = await getTranslation("common");
+
+ return {t("title")} ;
+}
+```
+
+## Link Bileşeni
+
+Next.js için dil bilgisi olan Link bileşeni.
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+ Hakkında
+```
+
+### Props
+
+Next.js `Link` bileşeninden tüm özellikler, artı:
+
+| Prop | Type | Varsayılan | Açıklama |
+|------|------|------------|----------|
+| `locale` | `string` | Geçerli dil | Bağlantı dilini geçersiz kılar |
+
+### Örnek
+
+```tsx
+// Geçerli dili kullanır
+ Hakkında
+
+// Belirli bir dili zorla
+ À propos
+```
+
+## Çeviri İşlevi (t)
+
+`t` işlevi, çevrilmiş dizeleri almak için kullanılır.
+
+### İmza
+
+```tsx
+t(key: string, variables?: Record): string
+```
+
+### Parametreler
+
+| Parametre | Type | Açıklama |
+|-----------|------|----------|
+| `key` | `string` | Çeviri anahtarı (nokta notasyonunu destekler) |
+| `variables` | `object` | Yerine geçecek değişkenler |
+
+### Değişken Yerleştirme
+
+```json
+{
+ "greeting": "Merhaba, {name}!",
+ "items": "Toplam {count} öğeniz var"
+}
+```
+
+```tsx
+t("greeting", { name: "Alice" }); // "Merhaba, Alice!"
+t("items", { count: 5 }); // "Toplam 5 öğeniz var"
+```
+
+### İç içe Anahtarlar
+
+```json
+{
+ "user": {
+ "profile": {
+ "title": "Profil"
+ }
+ }
+}
+```
+
+```tsx
+t("user.profile.title"); // "Profil"
+```
+
+## Tip Tanımları
+
+### TranslationNamespaces
+
+Tip güvenli çeviriler için bu arayüzü genişletin:
+
+```tsx
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("./locales/tr/common.json");
+ auth: typeof import("./locales/tr/auth.json");
+ }
+}
+```
+
+
+ Doğru tip tanımları ile çeviri anahtarları için otomatik tamamlama ve geçersiz anahtarlar için derleme zamanı hataları alırsınız.
+
diff --git a/apps/web/src/content/tr/docs/translations/getting-started.mdx b/apps/web/src/content/tr/docs/translations/getting-started.mdx
new file mode 100644
index 000000000..688b5fe28
--- /dev/null
+++ b/apps/web/src/content/tr/docs/translations/getting-started.mdx
@@ -0,0 +1,92 @@
+---
+title: Başlarken
+description: 'React ve Next.js için hafif, tip güvenli bir uluslararasılaştırma kütüphanesi'
+---
+## @onruntime/translations Nedir?
+
+`@onruntime/translations`, React ve Next.js uygulamaları için tasarlanmış hafif, tip güvenli bir uluslararasılaştırma (i18n) kütüphanesidir. Tam TypeScript desteği ile çevirileri yönetmek için basit bir API sunar.
+
+
+ - TypeScript ile tip güvenli çeviriler
+ - React ve Next.js (App Router) desteği
+ - Ad alanına dayalı organizasyon
+ - Değişken yerleştirme
+ - Hafif ve performanslı
+
+
+## Neden Kullanmalısınız?
+
+### Tip Güvenliği
+
+Geçersiz çeviri anahtarlarını kullanırken derleme zamanı hataları alın:
+
+```typescript
+const { t } = useTranslation("common");
+
+t("greeting"); // ✅ Geçerli anahtar
+t("invalid_key"); // ❌ TypeScript hatası
+```
+
+### Basit API
+
+Tüm çeviri ihtiyaçlarınız için sadece iki kanca:
+
+```typescript
+// İstemci Bileşenleri
+const { t } = useTranslation("namespace");
+
+// Sunucu Bileşenleri (Next.js)
+const { t } = await getTranslation("namespace");
+```
+
+### Düzenli Çeviriler
+
+Çevirilerinizi ad alanlarıyla düzenli tutun:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Hızlı Örnek
+
+```tsx
+// locales/en/common.json
+{
+ "greeting": "Merhaba, {name}!"
+}
+
+// Bileşen
+import { useTranslation } from "@onruntime/translations/react";
+
+function Welcome({ name }) {
+ const { t } = useTranslation("common");
+
+ return {t("greeting", { name })} ;
+}
+```
+
+## Sonraki Adımlar
+
+
+
+
+
diff --git a/apps/web/src/content/tr/docs/translations/installation.mdx b/apps/web/src/content/tr/docs/translations/installation.mdx
new file mode 100644
index 000000000..c0fee839a
--- /dev/null
+++ b/apps/web/src/content/tr/docs/translations/installation.mdx
@@ -0,0 +1,127 @@
+---
+title: Kurulum
+description: '@onruntime/translations''ı kur ve yapılandır'
+---
+## Kurulum
+
+Paketinizi tercih ettiğiniz paket yöneticisiyle kurun:
+
+```bash
+# npm
+npm install @onruntime/translations
+
+# yarn
+yarn add @onruntime/translations
+
+# pnpm
+pnpm add @onruntime/translations
+```
+
+## Proje Ayarları
+
+### 1. Çeviri Dosyaları Oluşturun
+
+Projenizde her dil için çeviri dosyalarıyla bir `locales` dizini oluşturun:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Örnek `locales/en/common.json`:
+
+```json
+{
+ "title": "Hoş Geldin",
+ "greeting": "Merhaba, {name}!",
+ "items": {
+ "one": "{count} öğe",
+ "other": "{count} öğe"
+ }
+}
+```
+
+### 2. TypeScript'i Yapılandırın (İsteğe Bağlı)
+
+Tip güvenli çeviriler için bir tip tanım dosyası oluşturun:
+
+```typescript
+// types/translations.d.ts
+import "onruntime/translations";
+
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("../locales/en/common.json");
+ auth: typeof import("../locales/en/auth.json");
+ }
+}
+```
+
+### 3. Sağlayıcıyı Ayarlayın
+
+Uygulamanızı `TranslationsProvider` ile sarmalayın:
+
+```tsx
+// React için
+import { TranslationsProvider } from "@onruntime/translations/react";
+import en from "./locales/en";
+import fr from "./locales/fr";
+
+const locales = { en, fr };
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
+ Next.js ile App Yönlendiricisi için önerilen kurulum için [Next.js Kullanımı](/docs/translations/nextjs) kılavuzuna göz atın.
+
+
+## Kurulumu Doğrulama
+
+Kurulumuza basit bir bileşenle test edin:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function TestComponent() {
+ const { t } = useTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("greeting", { name: "Dünya" })}
+
+ );
+}
+```
+
+Eğer çevirilerinizin görüntülendiğini görüyorsanız, her şey yolunda!
+
+## Sonraki Adımlar
+
+
+
+
+
diff --git a/apps/web/src/content/tr/docs/translations/nextjs.mdx b/apps/web/src/content/tr/docs/translations/nextjs.mdx
new file mode 100644
index 000000000..25e3a9965
--- /dev/null
+++ b/apps/web/src/content/tr/docs/translations/nextjs.mdx
@@ -0,0 +1,191 @@
+---
+title: Next.js kullanımı
+description: Next.js App Router ile @onruntime/translations kullanımı
+---
+## Uygulama Yönlendiricisi için Kurulum
+
+### 1. Sağlayıcıyı Yapılandır
+
+Çevirileri ayarlamak için bir sağlayıcı dosyası oluştur:
+
+```tsx
+// app/providers.tsx
+"use client";
+
+import { TranslationsProvider } from "@onruntime/translations/react";
+import { ReactNode } from "react";
+
+import en from "@/locales/en";
+import fr from "@/locales/fr";
+
+const locales = { en, fr };
+
+interface ProvidersProps {
+ children: ReactNode;
+ locale: string;
+}
+
+export function Providers({ children, locale }: ProvidersProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+### 2. Kök Düzeni Ayarlayın
+
+Kök düzeninizde sağlayıcıyı kullanın:
+
+```tsx
+// app/[locale]/layout.tsx
+import { Providers } from "../providers";
+
+export default function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { locale: string };
+}) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+## Sunucu Bileşenleri
+
+Sunucu Bileşenleri için `getTranslation` kullanın:
+
+```tsx
+// app/[locale]/page.tsx
+import { getTranslation } from "@/lib/translations.server";
+
+export default async function HomePage() {
+ const { t } = await getTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("description")}
+
+ );
+}
+```
+
+
+ Sunucu Bileşenlerinde `getTranslation` ve İstemci Bileşenlerinde `useTranslation` kullanın.
+
+
+## İstemci Bileşenleri
+
+İstemci Bileşenleri için `useTranslation` kullanın:
+
+```tsx
+"use client";
+
+import { useTranslation } from "@onruntime/translations/react";
+
+export function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ İngilizce
+ Fransızca
+
+ );
+}
+```
+
+## Yerel Tabanlı Yönlendirme
+
+### Ara Katman Kurulumu
+
+Yerel belirleme için ara katmanı ayarlayın:
+
+```tsx
+// middleware.ts
+import { NextRequest, NextResponse } from "next/server";
+
+const locales = ["en", "fr"];
+const defaultLocale = "en";
+
+export function middleware(request: NextRequest) {
+ const pathname = request.nextUrl.pathname;
+
+ // Yolun bir yerel içerip içermediğini kontrol et
+ const pathnameHasLocale = locales.some(
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
+ );
+
+ if (pathnameHasLocale) return;
+
+ // Varsayılan yerelere yönlendir
+ return NextResponse.redirect(
+ new URL(`/${defaultLocale}${pathname}`, request.url)
+ );
+}
+
+export const config = {
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
+};
+```
+
+## Statik Üretim
+
+Tüm yereller için statik sayfalar oluşturun:
+
+```tsx
+// app/[locale]/page.tsx
+export async function generateStaticParams() {
+ return [{ locale: "en" }, { locale: "fr" }];
+}
+```
+
+## Bağlantı Bileşeni
+
+Gezinme için çevrilen Bağlantı bileşenini kullanın:
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+function Navigation() {
+ return (
+
+ Ana Sayfa
+ Hakkında
+
+ );
+}
+```
+
+`Link` bileşeni yerel öneklemeyi otomatik olarak yönetir.
+
+## Örnek Proje Yapısı
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/content/tr/docs/translations/react.mdx b/apps/web/src/content/tr/docs/translations/react.mdx
new file mode 100644
index 000000000..b988e206d
--- /dev/null
+++ b/apps/web/src/content/tr/docs/translations/react.mdx
@@ -0,0 +1,157 @@
+---
+title: React kullanımı
+description: React uygulamalarında @onruntime/translations kullanma
+---
+## Temel Kullanım
+
+### useTranslation Kancası
+
+`useTranslation` kancası, React bileşenlerinde çevirilere erişmenin temel yoludur:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function MyComponent() {
+ const { t, locale } = useTranslation("common");
+
+ return (
+
+
Mevcut yerel: {locale}
+
{t("title")}
+
+ );
+}
+```
+
+### Değişken Yerleştirme
+
+Çevirilerinize değişkenler gönderin:
+
+```json
+// locales/en/common.json
+{
+ "greeting": "Merhaba, {name}!",
+ "items_count": "Elinizde {count} madde var"
+}
+```
+
+```tsx
+function Greeting({ name, itemCount }) {
+ const { t } = useTranslation("common");
+
+ return (
+ <>
+ {t("greeting", { name })}
+ {t("items_count", { count: itemCount })}
+ >
+ );
+}
+```
+
+## Birden Fazla İsim Alanı
+
+Aynı bileşende birden fazla isim alanı kullanabilirsiniz:
+
+```tsx
+function Dashboard() {
+ const { t: tCommon } = useTranslation("common");
+ const { t: tDashboard } = useTranslation("dashboard");
+
+ return (
+
+
{tDashboard("title")}
+ {tCommon("buttons.save")}
+
+ );
+}
+```
+
+## Yerel Değiştirme
+
+Mevcut yereli değiştirmek için `setLocale` fonksiyonunu kullanın:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ English
+ Français
+ Deutsch
+
+ );
+}
+```
+
+## İç İçe Anahtarlar
+
+Nokta notasyonu kullanarak iç içe çeviri anahtarlarına erişin:
+
+```json
+// locales/en/common.json
+{
+ "nav": {
+ "home": "Ana Sayfa",
+ "about": "Hakkında",
+ "contact": "İletişim"
+ }
+}
+```
+
+```tsx
+function Navigation() {
+ const { t } = useTranslation("common");
+
+ return (
+
+ {t("nav.home")}
+ {t("nav.about")}
+ {t("nav.contact")}
+
+ );
+}
+```
+
+## En İyi Uygulamalar
+
+
+ Her şeyi tek bir dosyada toplamak yerine çevirileri özellik veya sayfaya göre düzenleyin.
+
+
+### Önerilen Yapı
+
+
+
+
+
+
+
+
+
+
+
+
+### Anahtarları Tutarlı Tutun
+
+Tüm yerellerde tutarlı isimlendirme kuralları kullanın:
+
+```json
+// ✅ İyi - tutarlı yapı
+{
+ "page_title": "Dashboard",
+ "actions": {
+ "save": "Kaydet",
+ "cancel": "İptal"
+ }
+}
+
+// ❌ Kaçının - tutarsız
+{
+ "pageTitle": "Dashboard",
+ "save_button": "Kaydet",
+ "cancelBtn": "İptal"
+}
+```
diff --git a/apps/web/src/content/zh/docs/gitmoji/emojis.mdx b/apps/web/src/content/zh/docs/gitmoji/emojis.mdx
new file mode 100644
index 000000000..e73cd4aa4
--- /dev/null
+++ b/apps/web/src/content/zh/docs/gitmoji/emojis.mdx
@@ -0,0 +1,11 @@
+---
+title: 表情符号参考
+description: 完整的 gitmojis 列表
+---
+我们使用 [gitmoji](https://gitmoji.dev) 来分类我们的提交。这是完整的表情符号、代码和描述:
+
+
+
+
+ 使用 [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) 或 [VS Code 扩展](https://marketplace.visualstudio.com/items?itemName=seatonjiang.gitmoji-vscode) 获取交互式提交体验。
+
diff --git a/apps/web/src/content/zh/docs/gitmoji/getting-started.mdx b/apps/web/src/content/zh/docs/gitmoji/getting-started.mdx
new file mode 100644
index 000000000..f5cbee48d
--- /dev/null
+++ b/apps/web/src/content/zh/docs/gitmoji/getting-started.mdx
@@ -0,0 +1,91 @@
+---
+title: 开始使用
+description: 了解我们的提交规范
+---
+我们喜欢保持项目历史的清晰。我们的提交规范灵感来自于 [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0),但使用 [gitmoji](https://gitmoji.dev) 进行了自定义,让它更具视觉效果和趣味。
+
+## 结构
+
+提交信息应该按以下结构编写,并且**全小写**:
+
+```
+ [(#)]
+
+[可选的主体]
+
+[可选的脚注]
+```
+
+### 示例
+
+```bash
+📝 update documentation contributors
+
+- Add @jerembdn as a contributor
+- Add @younesbessa as a contributor
+
+Co-authored-by: Younes Bessa
+```
+
+大多数时候,一行简单的信息就足够了:
+
+```bash
+📝 update documentation contributors
+```
+
+## 类型
+
+我们使用以下提交类型:
+
+| 类型 | 描述 |
+| --- | --- |
+| `add` | 添加新功能 |
+| `fix` | 修复一个bug |
+| `improve` | 改进某些内容 |
+| `update` | 更新某些内容 |
+| `remove` | 删除某些内容 |
+| `refactor` | 重构某些内容 |
+| `rename` | 重命名某些内容 |
+| `move` | 移动一个文件或文件夹 |
+| `upgrade` | 升级依赖 |
+| `downgrade` | 降级依赖 |
+
+## 描述
+
+描述应该用**命令式语气**和**小写**编写:
+
+```bash
+# 好
+📝 update documentation contributors
+
+# 坏
+📝 updated documentation contributors
+
+# 坏
+📝 Update documentation contributors
+```
+
+## 问题编号
+
+通过添加问题编号来链接提交和问题:
+
+```bash
+📝 update documentation contributors (#123)
+```
+
+## 主体
+
+使用主体提供背景和动机:
+
+```bash
+📝 update documentation contributors
+
+- Add @jerembdn as a contributor
+- Add @younesbessa as a contributor
+
+Co-authored-by: Younes Bessa
+```
+
+
+ 每次提交应该代表一个逻辑变更。不要混合不相关的变更。
+
diff --git a/apps/web/src/content/zh/docs/gitmoji/with-ai.mdx b/apps/web/src/content/zh/docs/gitmoji/with-ai.mdx
new file mode 100644
index 000000000..a0e36fc15
--- /dev/null
+++ b/apps/web/src/content/zh/docs/gitmoji/with-ai.mdx
@@ -0,0 +1,63 @@
+---
+title: 使用AI
+description: 用gitmoji和Claude Code
+---
+安装我们的 gitmoji 插件用于 [Claude Code](https://claude.ai/code),以生成符合约定的提交。
+
+## 安装插件
+
+添加 onRuntime 市场并安装插件:
+
+```bash
+# 添加 onRuntime 市场
+/plugin marketplace add https://onruntime.com/plugins
+
+# 安装 gitmoji 插件
+/plugin install gitmoji@onruntime
+```
+
+或者直接从菜单安装:
+
+1. 在 Claude Code 中运行 `/plugin`
+2. 前往 **Discover** 标签
+3. 添加市场: `https://onruntime.com/plugins`
+4. 搜索 “gitmoji” 并安装
+
+## 使用方法
+
+运行 `/commit` 命令来创建提交:
+
+```
+/commit
+```
+
+```
+/commit fix the login bug
+```
+
+Claude Code 将会分析你的更改,并生成符合 gitmoji 约定的提交。
+
+
+ `/commit` 命令会自动获取你的 git 状态和差异,以生成合适的提交信息。
+
+
+## 替代方案:CLAUDE.md
+
+如果你不想安装插件,可以将以下内容添加到你项目的 `CLAUDE.md`:
+
+```markdown
+## 提交约定
+
+使用 gitmoji 传统提交:
+
+\`\`\`
+
+\`\`\`
+
+类型:add, fix, improve, update, remove, refactor, rename, move, upgrade, downgrade
+
+规则:
+- 使用小写字母
+- 使用命令式语气(“add”而不是“added”)
+- 每次提交一个逻辑更改
+```
diff --git a/apps/web/src/content/zh/docs/next-sitemap/api.mdx b/apps/web/src/content/zh/docs/next-sitemap/api.mdx
new file mode 100644
index 000000000..d5722b057
--- /dev/null
+++ b/apps/web/src/content/zh/docs/next-sitemap/api.mdx
@@ -0,0 +1,169 @@
+---
+title: API 参考
+description: '@onruntime/next-sitemap 的完整 API 文档'
+---
+## generateSitemap
+
+为你的 Next.js 应用生成一个站点地图。
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const sitemap = await generateSitemap(options);
+```
+
+### Options
+
+| 选项 | 类型 | 是否必需 | 描述 |
+|------|------|----------|------|
+| `baseUrl` | `string` | 是 | 你网站的基础 URL |
+| `additionalPaths` | `SitemapEntry[]` | 否 | 额外要包含的 URL |
+| `exclude` | `string[]` | 否 | 要排除的全局模式 |
+| `defaults` | `SitemapDefaults` | 否 | 所有条目的默认值 |
+| `locales` | `string[]` | 否 | 支持的语言环境 |
+| `defaultLocale` | `string` | 否 | 默认语言环境 |
+
+### SitemapEntry
+
+| 属性 | 类型 | 描述 |
+|------|------|------|
+| `url` | `string` | 页面 URL(相对或绝对) |
+| `lastModified` | `Date \| string` | 最后修改日期 |
+| `changeFrequency` | `ChangeFrequency` | 页面更改的频率 |
+| `priority` | `number` | 优先级(0.0 - 1.0) |
+
+### ChangeFrequency
+
+```tsx
+type ChangeFrequency =
+ | "always"
+ | "hourly"
+ | "daily"
+ | "weekly"
+ | "monthly"
+ | "yearly"
+ | "never";
+```
+
+### 示例
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ const blogPosts = await fetchPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ additionalPaths: blogPosts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ priority: 0.8,
+ })),
+ exclude: ["/admin/*", "/api/*"],
+ });
+}
+```
+
+## generateRobots
+
+生成一个 robots.txt 文件。
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+const robots = generateRobots(options);
+```
+
+### Options
+
+| 选项 | 类型 | 是否必需 | 描述 |
+|------|------|----------|------|
+| `baseUrl` | `string` | 是 | 你网站的基础 URL |
+| `rules` | `RobotsRule[]` | 否 | 自定义 robots 规则 |
+| `sitemap` | `string \| boolean` | 否 | 站点地图 URL 或 `false` 表示排除 |
+
+### RobotsRule
+
+| 属性 | 类型 | 描述 |
+|------|------|------|
+| `userAgent` | `string` | 目标用户代理 |
+| `allow` | `string \| string[]` | 允许的路径 |
+| `disallow` | `string \| string[]` | 不允许的路径 |
+| `crawlDelay` | `number` | 爬取延迟(秒) |
+
+### 示例
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ crawlDelay: 1,
+ },
+ ],
+ });
+}
+```
+
+## generateSitemapIndex
+
+为大型网站生成一个站点地图索引。
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+const index = await generateSitemapIndex(options);
+```
+
+### Options
+
+| 选项 | 类型 | 是否必需 | 描述 |
+|------|------|----------|------|
+| `baseUrl` | `string` | 是 | 你网站的基础 URL |
+| `sitemapsPerFile` | `number` | 否 | 每个站点地图的 URL 数量(默认:5000) |
+
+### 示例
+
+```tsx
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 10000,
+ });
+}
+```
+
+## Type Exports
+
+这个包为了方便导出了 TypeScript 类型:
+
+```tsx
+import type {
+ SitemapEntry,
+ SitemapOptions,
+ RobotsOptions,
+ RobotsRule,
+ ChangeFrequency,
+} from "@onruntime/next-sitemap";
+```
+
+
+ 所有函数和选项都有完整的类型定义。你的 IDE 会提供自动补全和类型检查。
+
diff --git a/apps/web/src/content/zh/docs/next-sitemap/configuration.mdx b/apps/web/src/content/zh/docs/next-sitemap/configuration.mdx
new file mode 100644
index 000000000..9517c49e3
--- /dev/null
+++ b/apps/web/src/content/zh/docs/next-sitemap/configuration.mdx
@@ -0,0 +1,176 @@
+---
+title: 配置
+description: 根据你的需求配置 @onruntime/next-sitemap
+---
+## 基本配置
+
+最简单的配置只需你的基础 URL:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+## 高级配置
+
+### 自定义路由
+
+添加自定义路由或动态内容:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ // 获取动态内容
+ const posts = await fetchBlogPosts();
+
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ additionalPaths: posts.map((post) => ({
+ url: `/blog/${post.slug}`,
+ lastModified: post.updatedAt,
+ changeFrequency: "weekly",
+ priority: 0.7,
+ })),
+ });
+}
+```
+
+### 排除路由
+
+从站点地图中排除特定路由:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ exclude: [
+ "/admin/*",
+ "/api/*",
+ "/private/*",
+ ],
+ });
+}
+```
+
+### 优先级和更改频率
+
+为所有页面设置默认值:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ defaults: {
+ changeFrequency: "weekly",
+ priority: 0.7,
+ },
+ });
+}
+```
+
+## robots.txt 配置
+
+### 基本 robots.txt
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+### 自定义规则
+
+```tsx
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://example.com",
+ rules: [
+ {
+ userAgent: "*",
+ allow: "/",
+ disallow: ["/admin/", "/private/"],
+ },
+ {
+ userAgent: "Googlebot",
+ allow: "/",
+ },
+ ],
+ });
+}
+```
+
+## 国际化
+
+### 多语言站点地图
+
+支持多种语言的替代方案:
+
+```tsx
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+const locales = ["en", "fr", "de"];
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ locales,
+ defaultLocale: "en",
+ });
+}
+```
+
+这会生成带有 `hreflang` 替代的 URL:
+
+```xml
+
+ https://example.com/en/about
+
+
+
+
+```
+
+## 拆分站点地图
+
+对于大型网站,将站点地图拆分为多个文件:
+
+```tsx
+// app/sitemap/[id]/route.ts
+import { generateSitemapIndex } from "@onruntime/next-sitemap/app";
+
+export async function GET(
+ request: Request,
+ { params }: { params: { id: string } }
+) {
+ const sitemaps = await generateSitemapIndex({
+ baseUrl: "https://example.com",
+ sitemapsPerFile: 5000,
+ });
+
+ return new Response(sitemaps[parseInt(params.id)], {
+ headers: { "Content-Type": "application/xml" },
+ });
+}
+```
+
+
+ Google 建议将站点地图保持在 50MB 和 50,000 个 URL 以下。对于较大的网站,请使用拆分站点地图。
+
diff --git a/apps/web/src/content/zh/docs/next-sitemap/getting-started.mdx b/apps/web/src/content/zh/docs/next-sitemap/getting-started.mdx
new file mode 100644
index 000000000..e986e5f72
--- /dev/null
+++ b/apps/web/src/content/zh/docs/next-sitemap/getting-started.mdx
@@ -0,0 +1,86 @@
+---
+title: 开始使用
+description: 为 Next.js 应用程序生成网站地图的工具
+---
+## 什么是 @onruntime/next-sitemap?
+
+`@onruntime/next-sitemap` 是一个强大的站点地图生成器,专为 Next.js 应用程序设计。它会自动为你的 Next.js 网站生成 `sitemap.xml` 和 `robots.txt` 文件。
+
+
+ - 为应用路由自动生成站点地图
+ - 支持动态路由
+ - 可配置优先级和更改频率
+ - 生成 robots.txt
+ - 支持多语言站点地图
+
+
+## 为什么使用它?
+
+### SEO 优化
+
+站点地图帮助搜索引擎更高效地发现和索引你的页面:
+
+- **更快的索引** - 搜索引擎可以找到你所有的页面
+- **更好的抓取** - 通知爬虫页面更新
+- **优先级提示** - 指导爬虫访问重要页面
+
+### Next.js 集成
+
+它专为 Next.js 构建,理解:
+
+- 应用路由结构
+- 动态路由
+- 静态生成
+- 国际化路由
+
+## 快速示例
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://example.com",
+ });
+}
+```
+
+这会生成一个完整的站点地图,包括你所有的静态和动态页面。
+
+## 生成的输出
+
+该包生成标准 XML 站点地图:
+
+```xml
+
+
+
+ https://example.com/
+ 2024-01-15
+ daily
+ 1.0
+
+
+ https://example.com/about
+ 2024-01-10
+ monthly
+ 0.8
+
+
+```
+
+## 后续步骤
+
+
+
+
+
diff --git a/apps/web/src/content/zh/docs/next-sitemap/installation.mdx b/apps/web/src/content/zh/docs/next-sitemap/installation.mdx
new file mode 100644
index 000000000..15178eb22
--- /dev/null
+++ b/apps/web/src/content/zh/docs/next-sitemap/installation.mdx
@@ -0,0 +1,121 @@
+---
+title: 安装
+description: 安装并设置 @onruntime/next-sitemap
+---
+## 安装
+
+使用你喜欢的包管理器安装该包:
+
+```bash
+# npm
+npm install @onruntime/next-sitemap
+
+# yarn
+yarn add @onruntime/next-sitemap
+
+# pnpm
+pnpm add @onruntime/next-sitemap
+```
+
+## 基本设置
+
+### App Router (Next.js 13+)
+
+在你的 `app` 目录下创建一个 `sitemap.ts` 文件:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+### robots.txt
+
+创建一个 `robots.ts` 文件用于生成 robots.txt:
+
+```tsx
+// app/robots.ts
+import { generateRobots } from "@onruntime/next-sitemap/app";
+
+export default function robots() {
+ return generateRobots({
+ baseUrl: "https://your-domain.com",
+ });
+}
+```
+
+## 项目结构
+
+设置完成后,你的项目应该看起来像这样:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 验证安装
+
+启动你的开发服务器并访问:
+
+- `http://localhost:3000/sitemap.xml` - 你的站点地图
+- `http://localhost:3000/robots.txt` - 你的 robots.txt
+
+你应该能看到生成的 XML 文件作为你的站点地图和 robots.txt 的文本内容。
+
+
+ 站点地图将包括在构建时发现的所有路由。在开发中,它反映了你当前的路由结构。
+
+
+## 环境变量
+
+在生产环境中,设置你的基础 URL:
+
+```env
+# .env.production
+NEXT_PUBLIC_SITE_URL=https://your-domain.com
+```
+
+然后在你的配置中使用它:
+
+```tsx
+// app/sitemap.ts
+import { generateSitemap } from "@onruntime/next-sitemap/app";
+
+export default async function sitemap() {
+ return generateSitemap({
+ baseUrl: process.env.NEXT_PUBLIC_SITE_URL || "https://your-domain.com",
+ });
+}
+```
+
+## 下一步
+
+
+
+
+
diff --git a/apps/web/src/content/zh/docs/translations/api.mdx b/apps/web/src/content/zh/docs/translations/api.mdx
new file mode 100644
index 000000000..f96330cbd
--- /dev/null
+++ b/apps/web/src/content/zh/docs/translations/api.mdx
@@ -0,0 +1,194 @@
+---
+title: API 参考
+description: '@onruntime/translations 的完整 API 文档'
+---
+## TranslationsProvider
+
+包装你应用的提供者组件。
+
+```tsx
+import { TranslationsProvider } from "@onruntime/translations/react";
+
+
+ {children}
+
+```
+
+### Props
+
+| Prop | Type | Required | Description |
+|------|------|----------|-------------|
+| `locale` | `string` | Yes | 当前活动语言环境 |
+| `locales` | `Record` | Yes | 包含所有语言环境翻译的对象 |
+| `fallbackLocale` | `string` | No | 当键缺失时的备用语言环境 |
+| `children` | `ReactNode` | Yes | 子组件 |
+
+## useTranslation
+
+用于在客户端组件中访问翻译的 Hook。
+
+```tsx
+const { t, locale, setLocale } = useTranslation("namespace");
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `namespace` | `string` | Yes | 要使用的翻译命名空间 |
+
+### Returns
+
+| Property | Type | Description |
+|----------|------|-------------|
+| `t` | `(key: string, vars?: object) => string` | 翻译函数 |
+| `locale` | `string` | 当前语言环境 |
+| `setLocale` | `(locale: string) => void` | 改变语言环境的函数 |
+
+### Example
+
+```tsx
+const { t, locale, setLocale } = useTranslation("common");
+
+// 基本用法
+t("greeting"); // "Hello"
+
+// 带变量
+t("greeting_name", { name: "John" }); // "Hello, John!"
+
+// 嵌套键
+t("nav.home"); // "Home"
+
+// 更改语言环境
+setLocale("fr");
+```
+
+## getTranslation
+
+用于在服务器组件(Next.js)中访问翻译的异步函数。
+
+```tsx
+const { t } = await getTranslation("namespace");
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `namespace` | `string` | Yes | 要使用的翻译命名空间 |
+
+### Returns
+
+| Property | Type | Description |
+|----------|------|-------------|
+| `t` | `(key: string, vars?: object) => string` | 翻译函数 |
+| `locale` | `string` | 当前语言环境 |
+
+### Example
+
+```tsx
+// 服务器组件
+export default async function Page() {
+ const { t } = await getTranslation("common");
+
+ return {t("title")} ;
+}
+```
+
+## Link Component
+
+支持地点的链接组件,适用于 Next.js。
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+ About
+```
+
+### Props
+
+来自 Next.js `Link` 组件的所有 props,以及:
+
+| Prop | Type | Default | Description |
+|------|------|---------|-------------|
+| `locale` | `string` | 当前语言环境 | 重写链接语言环境 |
+
+### Example
+
+```tsx
+// 使用当前语言环境
+ About
+
+// 强制指定语言环境
+ À propos
+```
+
+## Translation Function (t)
+
+`t` 函数用于获取翻译的字符串。
+
+### Signature
+
+```tsx
+t(key: string, variables?: Record): string
+```
+
+### Parameters
+
+| Parameter | Type | Description |
+|-----------|------|-------------|
+| `key` | `string` | 翻译键(支持点表示法) |
+| `variables` | `object` | 要插入的变量 |
+
+### Variable Interpolation
+
+```json
+{
+ "greeting": "Hello, {name}!",
+ "items": "You have {count} items"
+}
+```
+
+```tsx
+t("greeting", { name: "Alice" }); // "Hello, Alice!"
+t("items", { count: 5 }); // "You have 5 items"
+```
+
+### Nested Keys
+
+```json
+{
+ "user": {
+ "profile": {
+ "title": "Profile"
+ }
+ }
+}
+```
+
+```tsx
+t("user.profile.title"); // "Profile"
+```
+
+## Type Definitions
+
+### TranslationNamespaces
+
+扩展这个接口以实现类型安全的翻译:
+
+```tsx
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("./locales/en/common.json");
+ auth: typeof import("./locales/en/auth.json");
+ }
+}
+```
+
+
+ 有了正确的类型定义,你将获得翻译键的自动补全以及无效键的编译时错误。
+
diff --git a/apps/web/src/content/zh/docs/translations/getting-started.mdx b/apps/web/src/content/zh/docs/translations/getting-started.mdx
new file mode 100644
index 000000000..ca1d6217d
--- /dev/null
+++ b/apps/web/src/content/zh/docs/translations/getting-started.mdx
@@ -0,0 +1,92 @@
+---
+title: 入门指南
+description: 一个轻量级、类型安全的国际化库,用于 React 和 Next.js
+---
+## 什么是 @onruntime/translations?
+
+`@onruntime/translations` 是一个轻量级、类型安全的国际化(i18n)库,专为 React 和 Next.js 应用程序设计。它提供了一个简单的 API 来管理翻译,并完全支持 TypeScript。
+
+
+ - 使用 TypeScript 进行类型安全的翻译
+ - 支持 React 和 Next.js(App Router)
+ - 基于命名空间的组织
+ - 变量插值
+ - 轻量且高效
+
+
+## 为什么要使用它?
+
+### 类型安全
+
+使用无效翻译键时会得到编译错误:
+
+```typescript
+const { t } = useTranslation("common");
+
+t("greeting"); // ✅ 有效的键
+t("invalid_key"); // ❌ TypeScript 错误
+```
+
+### 简单的 API
+
+只有两个 hooks 满足你所有的翻译需求:
+
+```typescript
+// 客户端组件
+const { t } = useTranslation("namespace");
+
+// 服务器组件(Next.js)
+const { t } = await getTranslation("namespace");
+```
+
+### 有序的翻译
+
+使用命名空间保持你的翻译有序:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 快速示例
+
+```tsx
+// locales/en/common.json
+{
+ "greeting": "Hello, {name}!"
+}
+
+// 组件
+import { useTranslation } from "@onruntime/translations/react";
+
+function Welcome({ name }) {
+ const { t } = useTranslation("common");
+
+ return {t("greeting", { name })} ;
+}
+```
+
+## 下一步
+
+
+
+
+
diff --git a/apps/web/src/content/zh/docs/translations/installation.mdx b/apps/web/src/content/zh/docs/translations/installation.mdx
new file mode 100644
index 000000000..66db0f52a
--- /dev/null
+++ b/apps/web/src/content/zh/docs/translations/installation.mdx
@@ -0,0 +1,127 @@
+---
+title: 安装
+description: 安装和配置 @onruntime/translations
+---
+## 安装
+
+使用你喜欢的包管理器安装这个包:
+
+```bash
+# npm
+npm install @onruntime/translations
+
+# yarn
+yarn add @onruntime/translations
+
+# pnpm
+pnpm add @onruntime/translations
+```
+
+## 项目设置
+
+### 1. 创建翻译文件
+
+在项目中创建一个 `locales` 目录,并为每种语言添加翻译文件:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+示例 `locales/en/common.json`:
+
+```json
+{
+ "title": "欢迎",
+ "greeting": "你好, {name}!",
+ "items": {
+ "one": "{count} 项",
+ "other": "{count} 项"
+ }
+}
+```
+
+### 2. 配置 TypeScript(可选)
+
+为了实现类型安全的翻译,创建一个类型定义文件:
+
+```typescript
+// types/translations.d.ts
+import "onruntime/translations";
+
+declare module "@onruntime/translations" {
+ interface TranslationNamespaces {
+ common: typeof import("../locales/en/common.json");
+ auth: typeof import("../locales/en/auth.json");
+ }
+}
+```
+
+### 3. 设置提供者
+
+用 `TranslationsProvider` 包裹你的应用:
+
+```tsx
+// 对于 React
+import { TranslationsProvider } from "@onruntime/translations/react";
+import en from "./locales/en";
+import fr from "./locales/fr";
+
+const locales = { en, fr };
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+
+ 对于使用 App Router 的 Next.js,请查看 [Next.js 使用](/docs/translations/nextjs) 指南以获取推荐设置。
+
+
+## 验证安装
+
+用一个简单的组件测试你的设置:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function TestComponent() {
+ const { t } = useTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("greeting", { name: "World" })}
+
+ );
+}
+```
+
+如果你看到你的翻译被渲染出来,那就没问题了!
+
+## 接下来的步骤
+
+
+
+
+
diff --git a/apps/web/src/content/zh/docs/translations/nextjs.mdx b/apps/web/src/content/zh/docs/translations/nextjs.mdx
new file mode 100644
index 000000000..423cd056c
--- /dev/null
+++ b/apps/web/src/content/zh/docs/translations/nextjs.mdx
@@ -0,0 +1,191 @@
+---
+title: Next.js 使用方法
+description: 在 Next.js App Router 中使用 @onruntime/translations
+---
+## App Router 的设置
+
+### 1. 配置 Provider
+
+创建一个 providers 文件来设置翻译:
+
+```tsx
+// app/providers.tsx
+"use client";
+
+import { TranslationsProvider } from "@onruntime/translations/react";
+import { ReactNode } from "react";
+
+import en from "@/locales/en";
+import fr from "@/locales/fr";
+
+const locales = { en, fr };
+
+interface ProvidersProps {
+ children: ReactNode;
+ locale: string;
+}
+
+export function Providers({ children, locale }: ProvidersProps) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+### 2. 设置根布局
+
+在你的根布局中使用 provider:
+
+```tsx
+// app/[locale]/layout.tsx
+import { Providers } from "../providers";
+
+export default function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode;
+ params: { locale: string };
+}) {
+ return (
+
+ {children}
+
+ );
+}
+```
+
+## 服务器组件
+
+在服务器组件中使用 `getTranslation`:
+
+```tsx
+// app/[locale]/page.tsx
+import { getTranslation } from "@/lib/translations.server";
+
+export default async function HomePage() {
+ const { t } = await getTranslation("common");
+
+ return (
+
+
{t("title")}
+
{t("description")}
+
+ );
+}
+```
+
+
+ 在服务器组件中使用 `getTranslation`,在客户端组件中使用 `useTranslation`。
+
+
+## 客户端组件
+
+在客户端组件中使用 `useTranslation`:
+
+```tsx
+"use client";
+
+import { useTranslation } from "@onruntime/translations/react";
+
+export function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ 英语
+ 法语
+
+ );
+}
+```
+
+## 基于地区的路由
+
+### 中间件设置
+
+设置中间件来处理地区检测:
+
+```tsx
+// middleware.ts
+import { NextRequest, NextResponse } from "next/server";
+
+const locales = ["en", "fr"];
+const defaultLocale = "en";
+
+export function middleware(request: NextRequest) {
+ const pathname = request.nextUrl.pathname;
+
+ // 检查路径是否包含地区信息
+ const pathnameHasLocale = locales.some(
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
+ );
+
+ if (pathnameHasLocale) return;
+
+ // 重定向到默认地区
+ return NextResponse.redirect(
+ new URL(`/${defaultLocale}${pathname}`, request.url)
+ );
+}
+
+export const config = {
+ matcher: ["/((?!api|_next|.*\\..*).*)"],
+};
+```
+
+## 静态生成
+
+为所有地区生成静态页面:
+
+```tsx
+// app/[locale]/page.tsx
+export async function generateStaticParams() {
+ return [{ locale: "en" }, { locale: "fr" }];
+}
+```
+
+## Link 组件
+
+使用翻译过的 Link 组件进行导航:
+
+```tsx
+import { Link } from "@onruntime/translations/next";
+
+function Navigation() {
+ return (
+
+ 首页
+ 关于
+
+ );
+}
+```
+
+`Link` 组件会自动处理地区前缀。
+
+## 示例项目结构
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/content/zh/docs/translations/react.mdx b/apps/web/src/content/zh/docs/translations/react.mdx
new file mode 100644
index 000000000..21d37f9e2
--- /dev/null
+++ b/apps/web/src/content/zh/docs/translations/react.mdx
@@ -0,0 +1,157 @@
+---
+title: React 使用
+description: 在 React 应用程序中使用 @onruntime/translations
+---
+## 基础用法
+
+### useTranslation Hook
+
+`useTranslation` hook 是你在 React 组件中访问翻译的主要方式:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function MyComponent() {
+ const { t, locale } = useTranslation("common");
+
+ return (
+
+
当前语言环境: {locale}
+
{t("title")}
+
+ );
+}
+```
+
+### 变量插值
+
+将变量传递给你的翻译:
+
+```json
+// locales/en/common.json
+{
+ "greeting": "你好, {name}!",
+ "items_count": "你有 {count} 个项目"
+}
+```
+
+```tsx
+function Greeting({ name, itemCount }) {
+ const { t } = useTranslation("common");
+
+ return (
+ <>
+ {t("greeting", { name })}
+ {t("items_count", { count: itemCount })}
+ >
+ );
+}
+```
+
+## 多个命名空间
+
+你可以在同一个组件中使用多个命名空间:
+
+```tsx
+function Dashboard() {
+ const { t: tCommon } = useTranslation("common");
+ const { t: tDashboard } = useTranslation("dashboard");
+
+ return (
+
+
{tDashboard("title")}
+ {tCommon("buttons.save")}
+
+ );
+}
+```
+
+## 更改语言环境
+
+使用 `setLocale` 函数来更改当前语言环境:
+
+```tsx
+import { useTranslation } from "@onruntime/translations/react";
+
+function LanguageSwitcher() {
+ const { locale, setLocale } = useTranslation("common");
+
+ return (
+ setLocale(e.target.value)}>
+ 英语
+ 法语
+ 德语
+
+ );
+}
+```
+
+## 嵌套键
+
+使用点表示法访问嵌套的翻译键:
+
+```json
+// locales/en/common.json
+{
+ "nav": {
+ "home": "首页",
+ "about": "关于",
+ "contact": "联系"
+ }
+}
+```
+
+```tsx
+function Navigation() {
+ const { t } = useTranslation("common");
+
+ return (
+
+ {t("nav.home")}
+ {t("nav.about")}
+ {t("nav.contact")}
+
+ );
+}
+```
+
+## 最佳实践
+
+
+ 按功能或页面组织翻译,而不是把所有内容放在一个文件中。
+
+
+### 推荐结构
+
+
+
+
+
+
+
+
+
+
+
+
+### 保持键的一致性
+
+在所有语言环境中使用一致的命名约定:
+
+```json
+// ✅ 好 - 一致的结构
+{
+ "page_title": "仪表板",
+ "actions": {
+ "save": "保存",
+ "cancel": "取消"
+ }
+}
+
+// ❌ 避免 - 不一致
+{
+ "pageTitle": "仪表板",
+ "save_button": "保存",
+ "cancelBtn": "取消"
+}
+```
diff --git a/apps/web/src/locales/ar/app/docs/page.json b/apps/web/src/locales/ar/app/docs/page.json
new file mode 100644
index 000000000..2b7843bd2
--- /dev/null
+++ b/apps/web/src/locales/ar/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "التوثيق",
+ "description": "تعرف على كيفية العمل مع onRuntime Studio. استكشف توثيقنا للحصول على الأدلة والدروس وأفضل الممارسات."
+ },
+ "title": "التوثيق",
+ "subtitle": "مرحباً بك في توثيق onRuntime Studio. تعلم كيف تعمل معنا، واستكشف عملياتنا، واكتشف أفضل الممارسات.",
+ "toc": {
+ "title": "في هذه الصفحة"
+ },
+ "reading-time": {
+ "min-read": "دقائق قراءة",
+ "words": "كلمات"
+ },
+ "navigation": {
+ "previous": "سابق",
+ "next": "التالي",
+ "last-updated": "تم التحديث آخر مرة في"
+ },
+ "sidebar": {
+ "title": "التوثيق"
+ }
+}
diff --git a/apps/web/src/locales/ar/layout/navbar.json b/apps/web/src/locales/ar/layout/navbar.json
index 56647456a..72fe40a7a 100644
--- a/apps/web/src/locales/ar/layout/navbar.json
+++ b/apps/web/src/locales/ar/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "مشاريعنا",
"agencies": "وكالاتنا",
"npo": "الجمعية",
+ "docs": "الوثائق",
"contact": "اتصل بنا"
},
"services": {
diff --git a/apps/web/src/locales/de/app/docs/page.json b/apps/web/src/locales/de/app/docs/page.json
new file mode 100644
index 000000000..17994e805
--- /dev/null
+++ b/apps/web/src/locales/de/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Dokumentation",
+ "description": "Erfahre, wie du mit onRuntime Studio arbeitest. Durchstöbere unsere Dokumentation für Anleitungen, Tutorials und beste Praktiken."
+ },
+ "title": "Dokumentation",
+ "subtitle": "Willkommen zur Dokumentation von onRuntime Studio. Erfahre, wie du mit uns arbeitest, entdecke unsere Prozesse und finde beste Praktiken.",
+ "toc": {
+ "title": "Auf dieser Seite"
+ },
+ "reading-time": {
+ "min-read": "min lesen",
+ "words": "Wörter"
+ },
+ "navigation": {
+ "previous": "Vorherige",
+ "next": "Nächste",
+ "last-updated": "Zuletzt aktualisiert am"
+ },
+ "sidebar": {
+ "title": "Dokumentation"
+ }
+}
diff --git a/apps/web/src/locales/de/layout/navbar.json b/apps/web/src/locales/de/layout/navbar.json
index 9aac6d680..dde7acd02 100644
--- a/apps/web/src/locales/de/layout/navbar.json
+++ b/apps/web/src/locales/de/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Unsere Projekte",
"agencies": "Unsere Agenturen",
"npo": "Der Verein",
+ "docs": "Dokumente",
"contact": "Kontaktiere uns"
},
"services": {
diff --git a/apps/web/src/locales/es/app/docs/page.json b/apps/web/src/locales/es/app/docs/page.json
new file mode 100644
index 000000000..e6686c293
--- /dev/null
+++ b/apps/web/src/locales/es/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Documentación",
+ "description": "Aprende a trabajar con onRuntime Studio. Explora nuestra documentación para guías, tutoriales y mejores prácticas."
+ },
+ "title": "Documentación",
+ "subtitle": "Bienvenido a la documentación de onRuntime Studio. Aprende a trabajar con nosotros, explora nuestros procesos y descubre mejores prácticas.",
+ "toc": {
+ "title": "En esta página"
+ },
+ "reading-time": {
+ "min-read": "min lectura",
+ "words": "palabras"
+ },
+ "navigation": {
+ "previous": "Anterior",
+ "next": "Siguiente",
+ "last-updated": "Última actualización el"
+ },
+ "sidebar": {
+ "title": "Documentación"
+ }
+}
diff --git a/apps/web/src/locales/es/layout/navbar.json b/apps/web/src/locales/es/layout/navbar.json
index 859c96fad..2be64a595 100644
--- a/apps/web/src/locales/es/layout/navbar.json
+++ b/apps/web/src/locales/es/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Nuestros proyectos",
"agencies": "Nuestras agencias",
"npo": "La asociación",
+ "docs": "Documentos",
"contact": "Contáctanos"
},
"services": {
diff --git a/apps/web/src/locales/hi/app/docs/page.json b/apps/web/src/locales/hi/app/docs/page.json
new file mode 100644
index 000000000..e7e6f99c0
--- /dev/null
+++ b/apps/web/src/locales/hi/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "डॉक्यूमेंटेशन",
+ "description": "onRuntime स्टूडियो के साथ काम करना सीखें। मार्गदर्शिकाओं, ट्यूटोरियल, और सर्वोत्तम प्रथाओं के लिए हमारी डॉक्यूमेंटेशन की खोज करें।"
+ },
+ "title": "डॉक्यूमेंटेशन",
+ "subtitle": "onRuntime स्टूडियो डॉक्यूमेंटेशन में आपका स्वागत है। हमारे साथ काम करना सीखें, हमारे प्रक्रियाओं की खोज करें, और सर्वोत्तम प्रथाओं का पता लगाएं।",
+ "toc": {
+ "title": "इस पृष्ठ पर"
+ },
+ "reading-time": {
+ "min-read": "मिनट पढ़ें",
+ "words": "शब्द"
+ },
+ "navigation": {
+ "previous": "पिछला",
+ "next": "आगे",
+ "last-updated": "आखिरी अपडेट"
+ },
+ "sidebar": {
+ "title": "डॉक्यूमेंटेशन"
+ }
+}
diff --git a/apps/web/src/locales/hi/layout/navbar.json b/apps/web/src/locales/hi/layout/navbar.json
index ec6803764..8a01ada60 100644
--- a/apps/web/src/locales/hi/layout/navbar.json
+++ b/apps/web/src/locales/hi/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "हमारे प्रोजेक्ट",
"agencies": "हमारे एजेंसियां",
"npo": "संस्थान",
+ "docs": "दस्तावेज़",
"contact": "हमसे संपर्क करें"
},
"services": {
diff --git a/apps/web/src/locales/it/app/docs/page.json b/apps/web/src/locales/it/app/docs/page.json
new file mode 100644
index 000000000..d7d49b813
--- /dev/null
+++ b/apps/web/src/locales/it/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Documentazione",
+ "description": "Scopri come lavorare con onRuntime Studio. Esplora la nostra documentazione per guide, tutorial e migliori pratiche."
+ },
+ "title": "Documentazione",
+ "subtitle": "Benvenuto nella documentazione di onRuntime Studio. Scopri come lavorare con noi, esplora i nostri processi e scopri le migliori pratiche.",
+ "toc": {
+ "title": "In questa pagina"
+ },
+ "reading-time": {
+ "min-read": "min lettura",
+ "words": "parole"
+ },
+ "navigation": {
+ "previous": "Precedente",
+ "next": "Successivo",
+ "last-updated": "Ultimo aggiornamento il"
+ },
+ "sidebar": {
+ "title": "Documentazione"
+ }
+}
diff --git a/apps/web/src/locales/it/layout/navbar.json b/apps/web/src/locales/it/layout/navbar.json
index f92fc27a4..30860b042 100644
--- a/apps/web/src/locales/it/layout/navbar.json
+++ b/apps/web/src/locales/it/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "I nostri progetti",
"agencies": "Le nostre agenzie",
"npo": "L'associazione",
+ "docs": "Documenti",
"contact": "Contattaci"
},
"services": {
diff --git a/apps/web/src/locales/ja/app/docs/page.json b/apps/web/src/locales/ja/app/docs/page.json
new file mode 100644
index 000000000..6958f0f5a
--- /dev/null
+++ b/apps/web/src/locales/ja/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "ドキュメント",
+ "description": "onRuntime Studioの使い方を学ぶ。ガイド、チュートリアル、ベストプラクティスについてのドキュメントを探ってみてね。"
+ },
+ "title": "ドキュメント",
+ "subtitle": "onRuntime Studioのドキュメントへようこそ。私たちと一緒に作業する方法や、プロセスを探ったり、ベストプラクティスを見つけたりしよう。",
+ "toc": {
+ "title": "このページについて"
+ },
+ "reading-time": {
+ "min-read": "分読",
+ "words": "単語"
+ },
+ "navigation": {
+ "previous": "前へ",
+ "next": "次へ",
+ "last-updated": "最終更新日"
+ },
+ "sidebar": {
+ "title": "ドキュメント"
+ }
+}
diff --git a/apps/web/src/locales/ja/layout/navbar.json b/apps/web/src/locales/ja/layout/navbar.json
index 19c163896..1c6ea93ec 100644
--- a/apps/web/src/locales/ja/layout/navbar.json
+++ b/apps/web/src/locales/ja/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "私たちのプロジェクト",
"agencies": "私たちのエージェンシー",
"npo": "協会",
+ "docs": "ドキュメント",
"contact": "お問い合わせ"
},
"services": {
diff --git a/apps/web/src/locales/ko/app/docs/page.json b/apps/web/src/locales/ko/app/docs/page.json
new file mode 100644
index 000000000..080108e13
--- /dev/null
+++ b/apps/web/src/locales/ko/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "문서",
+ "description": "onRuntime Studio와 함께 작업하는 방법을 배워보세요. 가이드, 튜토리얼, 최선의 방법을 위한 문서를 확인해보세요."
+ },
+ "title": "문서",
+ "subtitle": "onRuntime Studio 문서에 오신 것을 환영합니다. 우리와 함께 작업하는 방법을 배우고, 우리의 프로세스를 탐색하며, 최선의 방법을 알아보세요.",
+ "toc": {
+ "title": "이 페이지에서"
+ },
+ "reading-time": {
+ "min-read": "분 소요",
+ "words": "단어"
+ },
+ "navigation": {
+ "previous": "이전",
+ "next": "다음",
+ "last-updated": "마지막 업데이트:"
+ },
+ "sidebar": {
+ "title": "문서"
+ }
+}
diff --git a/apps/web/src/locales/ko/layout/navbar.json b/apps/web/src/locales/ko/layout/navbar.json
index 68deb1a57..76fabd71f 100644
--- a/apps/web/src/locales/ko/layout/navbar.json
+++ b/apps/web/src/locales/ko/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "우리 프로젝트",
"agencies": "우리 기관",
"npo": "협회",
+ "docs": "문서",
"contact": "문의하기"
},
"services": {
diff --git a/apps/web/src/locales/nl/app/docs/page.json b/apps/web/src/locales/nl/app/docs/page.json
new file mode 100644
index 000000000..8cae3e3b2
--- /dev/null
+++ b/apps/web/src/locales/nl/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Documentatie",
+ "description": "Leer hoe je met onRuntime Studio aan de slag gaat. Verken onze documentatie voor handleidingen, tutorials en best practices."
+ },
+ "title": "Documentatie",
+ "subtitle": "Welkom bij de onRuntime Studio documentatie. Leer hoe je met ons samenwerkt, verken onze processen en ontdek best practices.",
+ "toc": {
+ "title": "Op deze pagina"
+ },
+ "reading-time": {
+ "min-read": "min lezen",
+ "words": "woorden"
+ },
+ "navigation": {
+ "previous": "Vorige",
+ "next": "Volgende",
+ "last-updated": "Laatst bijgewerkt op"
+ },
+ "sidebar": {
+ "title": "Documentatie"
+ }
+}
diff --git a/apps/web/src/locales/nl/layout/navbar.json b/apps/web/src/locales/nl/layout/navbar.json
index ff9a73bfa..fb941f566 100644
--- a/apps/web/src/locales/nl/layout/navbar.json
+++ b/apps/web/src/locales/nl/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Onze projecten",
"agencies": "Onze bureaus",
"npo": "De vereniging",
+ "docs": "Docs",
"contact": "Neem contact met ons op"
},
"services": {
diff --git a/apps/web/src/locales/pl/app/docs/page.json b/apps/web/src/locales/pl/app/docs/page.json
new file mode 100644
index 000000000..e801775b7
--- /dev/null
+++ b/apps/web/src/locales/pl/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Dokumentacja",
+ "description": "Dowiedz się, jak pracować z onRuntime Studio. Przeglądaj naszą dokumentację, aby znaleźć przewodniki, samouczki i najlepsze praktyki."
+ },
+ "title": "Dokumentacja",
+ "subtitle": "Witamy w dokumentacji onRuntime Studio. Dowiedz się, jak z nami pracować, odkryj nasze procesy i poznaj najlepsze praktyki.",
+ "toc": {
+ "title": "Na tej stronie"
+ },
+ "reading-time": {
+ "min-read": "min czytania",
+ "words": "słów"
+ },
+ "navigation": {
+ "previous": "Poprzedni",
+ "next": "Następny",
+ "last-updated": "Ostatnia aktualizacja"
+ },
+ "sidebar": {
+ "title": "Dokumentacja"
+ }
+}
diff --git a/apps/web/src/locales/pl/layout/navbar.json b/apps/web/src/locales/pl/layout/navbar.json
index e3dd7b3fc..8889ad22f 100644
--- a/apps/web/src/locales/pl/layout/navbar.json
+++ b/apps/web/src/locales/pl/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Nasze projekty",
"agencies": "Nasze agencje",
"npo": "Stowarzyszenie",
+ "docs": "Dokumenty",
"contact": "Skontaktuj się z nami"
},
"services": {
diff --git a/apps/web/src/locales/pt/app/docs/page.json b/apps/web/src/locales/pt/app/docs/page.json
new file mode 100644
index 000000000..a95d155b1
--- /dev/null
+++ b/apps/web/src/locales/pt/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Documentação",
+ "description": "Aprenda a trabalhar com o onRuntime Studio. Explore nossa documentação para guias, tutoriais e melhores práticas."
+ },
+ "title": "Documentação",
+ "subtitle": "Bem-vindo à documentação do onRuntime Studio. Aprenda a trabalhar conosco, explore nossos processos e descubra as melhores práticas.",
+ "toc": {
+ "title": "Nesta página"
+ },
+ "reading-time": {
+ "min-read": "min de leitura",
+ "words": "palavras"
+ },
+ "navigation": {
+ "previous": "Anterior",
+ "next": "Próximo",
+ "last-updated": "Última atualização em"
+ },
+ "sidebar": {
+ "title": "Documentação"
+ }
+}
diff --git a/apps/web/src/locales/pt/layout/navbar.json b/apps/web/src/locales/pt/layout/navbar.json
index ee2c97b9a..21cd7362b 100644
--- a/apps/web/src/locales/pt/layout/navbar.json
+++ b/apps/web/src/locales/pt/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Nossos projetos",
"agencies": "Nossas agências",
"npo": "A associação",
+ "docs": "Documentos",
"contact": "Entre em contato conosco"
},
"services": {
diff --git a/apps/web/src/locales/sv/app/docs/page.json b/apps/web/src/locales/sv/app/docs/page.json
new file mode 100644
index 000000000..b175ed3c7
--- /dev/null
+++ b/apps/web/src/locales/sv/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Dokumentation",
+ "description": "Lär dig hur du arbetar med onRuntime Studio. Utforska vår dokumentation för guider, handledningar och bästa metoder."
+ },
+ "title": "Dokumentation",
+ "subtitle": "Välkommen till dokumentationen för onRuntime Studio. Lär dig hur du arbetar med oss, utforska våra processer och upptäck bästa metoder.",
+ "toc": {
+ "title": "På den här sidan"
+ },
+ "reading-time": {
+ "min-read": "min läsning",
+ "words": "ord"
+ },
+ "navigation": {
+ "previous": "Föregående",
+ "next": "Nästa",
+ "last-updated": "Senast uppdaterad den"
+ },
+ "sidebar": {
+ "title": "Dokumentation"
+ }
+}
diff --git a/apps/web/src/locales/sv/layout/navbar.json b/apps/web/src/locales/sv/layout/navbar.json
index d85b0cd68..dae92d3bb 100644
--- a/apps/web/src/locales/sv/layout/navbar.json
+++ b/apps/web/src/locales/sv/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Våra projekt",
"agencies": "Våra byråer",
"npo": "Föreningen",
+ "docs": "Dokument",
"contact": "Kontakta oss"
},
"services": {
diff --git a/apps/web/src/locales/tr/app/docs/page.json b/apps/web/src/locales/tr/app/docs/page.json
new file mode 100644
index 000000000..d7981880c
--- /dev/null
+++ b/apps/web/src/locales/tr/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "Dokümantasyon",
+ "description": "onRuntime Studio ile nasıl çalışacağınızı öğrenin. Kılavuzlar, öğreticiler ve en iyi uygulamalar için belgelerimize göz atın."
+ },
+ "title": "Dokümantasyon",
+ "subtitle": "onRuntime Studio belgelerine hoş geldiniz. Bizimle nasıl çalışacağınızı öğrenin, süreçlerimizi keşfedin ve en iyi uygulamaları öğrenin.",
+ "toc": {
+ "title": "Bu sayfada"
+ },
+ "reading-time": {
+ "min-read": "dakika okunma süresi",
+ "words": "kelime"
+ },
+ "navigation": {
+ "previous": "Önceki",
+ "next": "Sonraki",
+ "last-updated": "Son güncelleme"
+ },
+ "sidebar": {
+ "title": "Dokümantasyon"
+ }
+}
diff --git a/apps/web/src/locales/tr/layout/navbar.json b/apps/web/src/locales/tr/layout/navbar.json
index 98bc4b5a2..1852563a4 100644
--- a/apps/web/src/locales/tr/layout/navbar.json
+++ b/apps/web/src/locales/tr/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "Projelerimiz",
"agencies": "Ajanslarımız",
"npo": "Dernek",
+ "docs": "Belgeler",
"contact": "Bize ulaşın"
},
"services": {
diff --git a/apps/web/src/locales/zh/app/docs/page.json b/apps/web/src/locales/zh/app/docs/page.json
new file mode 100644
index 000000000..68da88659
--- /dev/null
+++ b/apps/web/src/locales/zh/app/docs/page.json
@@ -0,0 +1,23 @@
+{
+ "meta": {
+ "title": "文档",
+ "description": "了解如何使用 onRuntime Studio。探索我们的文档,获取指南、教程和最佳实践。"
+ },
+ "title": "文档",
+ "subtitle": "欢迎来到 onRuntime Studio 文档。了解如何与我们合作,探索我们的流程,发现最佳实践。",
+ "toc": {
+ "title": "本页内容"
+ },
+ "reading-time": {
+ "min-read": "分钟阅读",
+ "words": "字"
+ },
+ "navigation": {
+ "previous": "上一个",
+ "next": "下一个",
+ "last-updated": "最后更新于"
+ },
+ "sidebar": {
+ "title": "文档"
+ }
+}
diff --git a/apps/web/src/locales/zh/layout/navbar.json b/apps/web/src/locales/zh/layout/navbar.json
index addc480f6..c6dbeb1bb 100644
--- a/apps/web/src/locales/zh/layout/navbar.json
+++ b/apps/web/src/locales/zh/layout/navbar.json
@@ -4,6 +4,7 @@
"projects": "我们的项目",
"agencies": "我们的机构",
"npo": "协会",
+ "docs": "文档",
"contact": "联系我们"
},
"services": {