Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 23 additions & 19 deletions docs/docs/ar/intlayer_with_tanstack.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
createdAt: 2025-09-09
updatedAt: 2026-10-08
updatedAt: 2026-11-02
priority: 10
title: "تدويل TanStack Start - الدليل الكامل لترجمة تطبيقك"
description: "إعداد Intlayer في TanStack Start: معامل اللغة في المسارات، ومحتوى مترجم متوافق مع SSR، وبيانات head مترجمة، وhreflang وخريطة موقع."
Expand Down Expand Up @@ -430,7 +430,7 @@ const appContent = {
export default appContent;
```

> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./app`). وتطابق امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`).
> يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `['.']`). وتطابق امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`).

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch @kyziq

Let's merge

> لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md).

Expand Down Expand Up @@ -487,11 +487,14 @@ export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {

ثم يمكننا إنشاء خطاف `useLocalizedNavigate` للتنقل البرمجي:

```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
```tsx fileName="src/hooks/useLocalizedNavigate.ts"
import { useNavigate } from "@tanstack/react-router";
import { getPrefix } from "intlayer";
import { useLocale } from "react-intlayer";
import type { StripLocalePrefix } from "@/components/localized-link";
import {
LOCALE_ROUTE,
type StripLocalePrefix,
} from "@/components/localized-link";
import type { FileRouteTypes } from "@/routeTree.gen";

type NavigateFn = ReturnType<typeof useNavigate>;
Expand Down Expand Up @@ -526,13 +529,14 @@ export const useLocalizedNavigate = () => {
});
}

const { to, ...rest } = args;
const { to, params, ...rest } = args;

const localizedTo = `/${LOCALE_ROUTE}${to}` as any;

return navigate({
...rest,
to: localizedTo,
params: { locale: localePrefix, ...rest } as any,
params: { locale: localePrefix, ...params } as any,
});
};

Expand All @@ -553,7 +557,7 @@ export const useLocalizedNavigate = () => {
import { createFileRoute } from "@tanstack/react-router";
import { useIntlayer } from "react-intlayer";

import LocaleSwitcher from "@/components/locale-switcher";
import { LocaleSwitcher } from "@/components/locale-switcher";
import { LocalizedLink } from "@/components/localized-link";
import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";

Expand All @@ -568,7 +572,7 @@ function RouteComponent() {
return (
<div>
<div>
{content.title}
{content.meta.title}
<LocaleSwitcher />
<div>
<LocalizedLink to="/">{content.links.home}</LocalizedLink>
Expand Down Expand Up @@ -720,7 +724,7 @@ export default defineConfig({
```

</Step>
<Step number={12} title="تدويل البيانات الوصفية الخاصة بك">
<Step number={13} title="تدويل البيانات الوصفية الخاصة بك">

<Tabs>

Expand Down Expand Up @@ -766,7 +770,7 @@ export const Route = createFileRoute("/{-$locale}/")({
},
],
meta: [
{ title: metaContent.title },
{ title: metaContent.meta.title },
{ name: "description", content: metaContent.meta.description },
],
};
Expand Down Expand Up @@ -820,7 +824,7 @@ export const Route = createFileRoute("/{-$locale}/")({
},
],
meta: [
{ title: metaContent.title },
{ title: metaContent.meta.title },
{ name: "description", content: metaContent.meta.description },
],
};
Expand Down Expand Up @@ -882,7 +886,7 @@ export const Route = createFileRoute("/{-$locale}/")({
},
],
meta: [
{ title: loaderData?.metaContent.title },
{ title: loaderData?.metaContent.meta.title },
{
name: "description",
content: loaderData?.metaContent.meta.description,
Expand Down Expand Up @@ -912,7 +916,7 @@ export const Route = createFileRoute("/{-$locale}/")({
| تجربة المطوّر | الأبسط | `await` واحد | المحتوى يُمرَّر عبر `loaderData` |

</Step>
<Step number={13} title="جلب اللغة في إجراءات الخادم الخاصة بك">
<Step number={14} title="جلب اللغة في إجراءات الخادم الخاصة بك">

قد ترغب في الوصول إلى اللغة الحالية من داخل إجراءات الخادم أو نقاط نهاية API الخاصة بك.
يمكنك القيام بذلك باستخدام مساعد `getLocale` من `intlayer`.
Expand Down Expand Up @@ -948,7 +952,7 @@ export const getLocaleServer = createServerFn().handler(async () => {
```

</Step>
<Step number={14} title="إدارة الصفحات غير الموجودة">
<Step number={15} title="إدارة الصفحات غير الموجودة">

عندما يزور المستخدم صفحة غير موجودة، يمكنك عرض صفحة مخصصة "غير موجودة" وقد تؤثر بادئة اللغة على الطريقة التي يتم بها تشغيل صفحة "غير موجودة".

Expand Down Expand Up @@ -1023,7 +1027,7 @@ export const Route = createFileRoute("/{-$locale}/$")({
```

</Step>
<Step number={15} title="استخراج محتوى مكوناتك" isOptional={true}>
<Step number={16} title="استخراج محتوى مكوناتك" isOptional={true}>

إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.

Expand Down Expand Up @@ -1136,7 +1140,7 @@ bun run build # Or bun run dev
</Tabs>

</Step>
<Step number={16} title="Pre-render & Generate Sitemap">
<Step number={17} title="Pre-render & Generate Sitemap">

يأتي Intlayer مع مولد خريطة موقع مدمج لمساعدتك في إنشاء خريطة موقع لتطبيقك بسهولة. يتعامل مع المسارات المحلية ويضيف البيانات الوصفية الضرورية لمحركات البحث.

Expand Down Expand Up @@ -1206,7 +1210,7 @@ export const Route = createFileRoute("/sitemap.xml")({
```

</Step>
<Step number={17} title="تكوين TypeScript">
<Step number={18} title="تكوين TypeScript">

يستخدم Intlayer module augmentation للاستفادة من TypeScript وجعل codebase الخاص بك أقوى.

Expand Down Expand Up @@ -1357,12 +1361,12 @@ export const Route = createFileRoute("/sitemap.xml")({
</Question>
<Question title="كيف أنشئ مبدل لغة يحافظ على المسار الحالي؟">

استخدم `useLocale` مع مكون الرابط المترجم الموضح في الخطوة 9.
استخدم `useLocale` مع مكون الرابط المترجم الموضح في الخطوة 10.

</Question>
<Question title="كيف أتعامل مع صفحات 404 على المسارات المترجمة؟">

توضح الخطوة 14 ذلك. يتحقق `validatePrefix` من صحة مقطع اللغة في URL.
توضح الخطوة 15 ذلك. يتحقق `validatePrefix` من صحة مقطع اللغة في URL.

</Question>
<Question title="كيف أترجم تطبيق TanStack Start تلقائياً باستخدام الذكاء الاصطناعي؟">
Expand Down
Loading