Skip to content

Commit a3f994b

Browse files
amir78729brc-dd
andauthored
docs: add Persian language (#4089)
Co-authored-by: Divyansh Singh <[email protected]>
1 parent 08ce34d commit a3f994b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+7187
-11
lines changed

docs/.postcssrc.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"plugins": {
3+
"postcss-rtlcss": {
4+
"ltrPrefix": ":where([dir=\"ltr\"])",
5+
"rtlPrefix": ":where([dir=\"rtl\"])"
6+
}
7+
}
8+
}

docs/.vitepress/config/fa.ts

+223
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
import { createRequire } from 'module'
2+
import { defineConfig, type DefaultTheme } from 'vitepress'
3+
4+
const require = createRequire(import.meta.url)
5+
const pkg = require('vitepress/package.json')
6+
7+
export const fa = defineConfig({
8+
title: 'ویت‌پرس',
9+
lang: 'fa-IR',
10+
description: 'Vite & Vue powered static site generator.',
11+
dir: 'rtl',
12+
markdown: {
13+
container: {
14+
tipLabel: 'نکته',
15+
warningLabel: 'هشدار',
16+
dangerLabel: 'خطر',
17+
infoLabel: 'اطلاعات',
18+
detailsLabel: 'جزئیات'
19+
}
20+
},
21+
themeConfig: {
22+
nav: nav(),
23+
sidebar: {
24+
'/fa/guide/': { base: '/fa/guide/', items: sidebarGuide() },
25+
'/fa/reference/': { base: '/fa/reference/', items: sidebarReference() }
26+
},
27+
28+
editLink: {
29+
pattern: 'https://github.com/vuejs/vitepress/edit/main/docs/:path',
30+
text: 'ویرایش این صفحه در گیت‌هاب'
31+
},
32+
33+
footer: {
34+
message: 'انتشار یافته تحت لایسنس MIT',
35+
copyright: 'حق نسخه‌برداری © 2019-کنون Evan You'
36+
},
37+
38+
docFooter: {
39+
prev: 'قبلی',
40+
next: 'بعدی'
41+
},
42+
43+
outline: {
44+
label: 'در این صفحه'
45+
},
46+
47+
lastUpdated: {
48+
text: 'آخرین به‌روزرسانی‌',
49+
formatOptions: {
50+
dateStyle: 'short',
51+
timeStyle: 'medium'
52+
}
53+
},
54+
55+
langMenuLabel: 'تغییر زبان',
56+
returnToTopLabel: 'بازگشت به بالا',
57+
sidebarMenuLabel: 'منوی جانبی',
58+
darkModeSwitchLabel: 'تم تاریک',
59+
lightModeSwitchTitle: 'رفتن به حالت روشن',
60+
darkModeSwitchTitle: 'رفتن به حالت تاریک',
61+
notFound: {
62+
linkLabel: 'بازگشت به خانه',
63+
linkText: 'بازگشت به خانه',
64+
title: 'صفحه مورد نظر یافت نشد',
65+
code: '۴۰۴',
66+
quote:
67+
'اما اگر جهت خود را تغییر ندهید و اگر ادامه دهید به دنبال چیزی که دنبال می‌کنید، ممکن است در نهایت به جایی که در حال رفتن به سمتش هستید، برسید.'
68+
},
69+
siteTitle: 'ویت‌پرس'
70+
}
71+
})
72+
73+
function nav(): DefaultTheme.NavItem[] {
74+
return [
75+
{
76+
text: 'راهنما',
77+
link: 'fa/guide/what-is-vitepress',
78+
activeMatch: '/guide/'
79+
},
80+
{
81+
text: 'مرجع',
82+
link: 'fa/reference/site-config',
83+
activeMatch: '/reference/'
84+
},
85+
{
86+
text: pkg.version,
87+
items: [
88+
{
89+
text: 'Changelog',
90+
link: 'https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md'
91+
},
92+
{
93+
text: 'مشارکت',
94+
link: 'https://github.com/vuejs/vitepress/blob/main/.github/contributing.md'
95+
}
96+
]
97+
}
98+
]
99+
}
100+
101+
function sidebarGuide(): DefaultTheme.SidebarItem[] {
102+
return [
103+
{
104+
text: 'معرفی',
105+
collapsed: false,
106+
items: [
107+
{ text: 'ویت‌پرس چیست؟', link: 'what-is-vitepress' },
108+
{ text: 'شروع کار', link: 'getting-started' },
109+
{ text: 'مسیریابی', link: 'routing' },
110+
{ text: 'استقرار', link: 'deploy' }
111+
]
112+
},
113+
{
114+
text: 'نوشتن',
115+
collapsed: false,
116+
items: [
117+
{ text: 'افزونه‌های Markdown', link: 'markdown' },
118+
{ text: 'مدیریت منابع', link: 'asset-handling' },
119+
{ text: 'Frontmatter', link: 'frontmatter' },
120+
{ text: 'استفاده از Vue در Markdown', link: 'using-vue' },
121+
{ text: 'بین‌المللی سازی', link: 'i18n' }
122+
]
123+
},
124+
{
125+
text: 'شخصی‌سازی',
126+
collapsed: false,
127+
items: [
128+
{ text: 'استفاده از تم شخصی', link: 'custom-theme' },
129+
{
130+
text: 'گسترش تم پیش‌فرض',
131+
link: 'extending-default-theme'
132+
},
133+
{ text: 'بارگیری داده در زمان Build', link: 'data-loading' },
134+
{ text: 'سازگاری SSR', link: 'ssr-compat' },
135+
{ text: 'اتصال به CMS', link: 'cms' }
136+
]
137+
},
138+
{
139+
text: 'آزمایشی',
140+
collapsed: false,
141+
items: [
142+
{ text: 'حالت MPA', link: 'mpa-mode' },
143+
{ text: 'جنریت کردن Sitemap', link: 'sitemap-generation' }
144+
]
145+
},
146+
{ text: 'پیکربندی و مرجع API', base: 'fa/reference/', link: 'site-config' }
147+
]
148+
}
149+
150+
function sidebarReference(): DefaultTheme.SidebarItem[] {
151+
return [
152+
{
153+
text: 'مرجع',
154+
base: 'fa/reference/',
155+
items: [
156+
{ text: 'پیکربندی Site', link: 'site-config' },
157+
{ text: 'پیکربندی Frontmatter', link: 'frontmatter-config' },
158+
{ text: 'Runtime API', link: 'runtime-api' },
159+
{ text: 'CLI', link: 'cli' },
160+
{
161+
text: 'تم پیش‌فرض',
162+
base: 'fa/reference/default-theme-',
163+
items: [
164+
{ text: 'بررسی اجمالی', link: 'config' },
165+
{ text: 'ناوبری', link: 'nav' },
166+
{ text: 'نوار کنار صفحه', link: 'sidebar' },
167+
{ text: 'صفحه اصلی', link: 'home-page' },
168+
{ text: 'پاورقی', link: 'footer' },
169+
{ text: 'طرح', link: 'layout' },
170+
{ text: 'نشان', link: 'badge' },
171+
{ text: 'صفحه تیم', link: 'team-page' },
172+
{ text: 'لینک‌های قبلی / بعدی', link: 'prev-next-links' },
173+
{ text: 'ویرایش لینک', link: 'edit-link' },
174+
{ text: 'Timestamp آخرین به‌روزرسانی', link: 'last-updated' },
175+
{ text: 'جستجو', link: 'search' },
176+
{ text: 'تبلیغات Carbon', link: 'carbon-ads' }
177+
]
178+
}
179+
]
180+
}
181+
]
182+
}
183+
184+
export const search: DefaultTheme.AlgoliaSearchOptions['locales'] = {
185+
fa: {
186+
placeholder: 'جستجوی مستندات',
187+
translations: {
188+
button: {
189+
buttonText: 'جستجو',
190+
buttonAriaLabel: 'جستجو'
191+
},
192+
modal: {
193+
searchBox: {
194+
resetButtonTitle: 'آغاز مجدد جستجو',
195+
resetButtonAriaLabel: 'آغاز مجدد جستجو',
196+
cancelButtonText: 'لغو',
197+
cancelButtonAriaLabel: 'لغو'
198+
},
199+
startScreen: {
200+
recentSearchesTitle: 'جستجو‌های اخیر',
201+
noRecentSearchesText: 'تاریخچه جستجویی یافت نشد.',
202+
saveRecentSearchButtonTitle: 'ذخیره تاریخچه جستجو',
203+
removeRecentSearchButtonTitle: 'حذف تاریخچه جستجو',
204+
favoriteSearchesTitle: 'موارد دلخواه',
205+
removeFavoriteSearchButtonTitle: 'حذف مورد دلخواه'
206+
},
207+
errorScreen: {
208+
titleText: 'نتیجه‌ای یافت نشد برای',
209+
helpText: 'اتصال شبکه خود را بررسی کنید'
210+
},
211+
footer: {
212+
selectText: 'انتخاب',
213+
navigateText: 'رفتن',
214+
closeText: 'بستن',
215+
searchByText: ' جستجو با '
216+
},
217+
noResultsScreen: {
218+
noResultsText: 'نتیجه‌ای یافت نشد برای'
219+
}
220+
}
221+
}
222+
}
223+
}

docs/.vitepress/config/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { pt } from './pt'
66
import { ru } from './ru'
77
import { es } from './es'
88
import { ko } from './ko'
9+
import { fa } from './fa'
910

1011
export default defineConfig({
1112
...shared,
@@ -15,6 +16,7 @@ export default defineConfig({
1516
pt: { label: 'Português', ...pt },
1617
ru: { label: 'Русский', ...ru },
1718
es: { label: 'Español', ...es },
18-
ko: { label: '한국어', ...ko }
19+
ko: { label: '한국어', ...ko },
20+
fa: { label: 'فارسی', ...fa }
1921
}
2022
})

docs/.vitepress/config/shared.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { search as ptSearch } from './pt'
44
import { search as ruSearch } from './ru'
55
import { search as esSearch } from './es'
66
import { search as koSearch } from './ko'
7+
import { search as faSearch } from './fa'
78

89
export const shared = defineConfig({
910
title: 'VitePress',
@@ -67,7 +68,8 @@ export const shared = defineConfig({
6768
...ptSearch,
6869
...ruSearch,
6970
...esSearch,
70-
...koSearch
71+
...koSearch,
72+
...faSearch
7173
}
7274
}
7375
},

docs/fa/guide/asset-handling.md

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# مدیریت منابع {#asset-handling}
2+
3+
## ارجاع به منابع ایستا {#referencing-static-assets}
4+
5+
تمام فایل‌های Markdown به کامپوننت‌های Vue تبدیل و توسط [Vite](https://vitejs.dev/guide/assets.html) پردازش می‌شوند. شما می‌توانید، **و باید**، هر نوع دارایی را با استفاده از URL‌های نسبی مرجع قرار دهید:
6+
7+
```md
8+
![تصویر](./image.png)
9+
```
10+
11+
شما می‌توانید منابع ایستا را در فایل‌های Markdown خود، کامپوننت‌های `*.vue` در قالب، استایل‌ها و فایل‌های `.css` ساده، با استفاده از مسیرهای عمومی مطلق (براساس ریشه پروژه) یا مسیرهای نسبی (براساس سیستم فایل شما) ارجاع دهید. روش دوم مشابه رفتاری است که در صورت استفاده از Vite، Vue CLI یا `file-loader` webpack با آن آشنا هستید.
12+
13+
انواع شایع تصویر، رسانه و فایل فونت به طور خودکار شناسایی و به عنوان منابع درج می‌شوند.
14+
15+
::: tip فایل‌های لینک شده به عنوان دارایی محسوب نمی‌شوند
16+
PDFها یا سند‌های دیگر که از طریق پیوندها در فایل‌های Markdown ارجاع داده شده‌اند به طور خودکار به عنوان دارایی در نظر گرفته نمی‌شوند. برای دسترسی به فایل‌های لینک شده، باید آن‌ها را به صورت دستی در دایرکتوری [`public`](#the-public-directory) پروژه قرار دهید.
17+
:::
18+
19+
تمام منابع ارجاع داده شده، شامل آن‌هایی که از مسیرهای مطلق استفاده می‌کنند، در مرحله تولید به دایرکتوری خروجی با نام فایلی بر اساس یک هش کپی خواهند شد. دارایی‌هایی که هرگز ارجاع نداده شوند، کپی نخواهند شد. منابع تصویر کوچک‌تر از 4 کیلوبایت به صورت base64 درون خطی می‌شوند - این می‌تواند از طریق گزینه پیکربندی [`vite`](../reference/site-config#vite) تنظیم شود.
20+
21+
تمام ارجاع‌های مسیر **ایستا**، شامل مسیرهای مطلق، باید بر اساس ساختار دایرکتوری کاری شما تعیین شوند.
22+
23+
## دایرکتوری عمومی {#the-public-directory}
24+
25+
گاهی اوقات ممکن است نیاز داشته باشید منابع ایستا را فراهم کنید که به صورت مستقیم در هیچ‌یک از Markdown یا کامپوننت‌های قالب شما ارجاع نشده‌اند، یا ممکن است بخواهید برخی فایل‌ها را با نام اصلی خود سرویس دهید. به عنوان مثال، فایل‌هایی مانند `robots.txt`، آیکون‌های fav، و آیکون‌های PWA.
26+
27+
شما می‌توانید این فایل‌ها را در دایرکتوری `public` تحت [دایرکتوری منبع](./routing#source-directory) قرار دهید. به عنوان مثال، اگر ریشه پروژه شما `./docs` است و از محل پیش‌فرض دایرکتوری منبع استفاده می‌کنید، آنگاه دایرکتوری عمومی شما `./docs/public` خواهد بود.
28+
29+
منابع قرار داده شده در `public` به صورت اصلی در ریشه دایرکتوری خروجی کپی خواهند شد.
30+
31+
توجه داشته باشید که باید به فایل‌های قرار داده شده در `public` با استفاده از مسیر مطلق ریشه ارجاع دهید - به عنوان مثال، `public/icon.png` همیشه باید به عنوان `/icon.png` در کد منبع ارجاع داده شود.
32+
33+
## URL پایه {#base-url}
34+
35+
اگر وب‌سایت شما به URL غیر ریشه استقرار می‌یابد، باید گزینه `base` را در `.vitepress/config.js` تنظیم کنید. به عنوان مثال، اگر قصد دارید وب‌سایت خود را به `https://foo.github.io/bar/` استقرار دهید، آنگاه `base` باید به `'/bar/'` تنظیم شود (همیشه باید با یک خط شروع و پایان یابد).
36+
37+
تمام مسیرهای دارایی ایستا شما به صورت خودکار پردازش می‌شوند تا با ارزش‌های `base` مختلف تطبیق یابند. به عنوان مثال، اگر به یک ارجاع مطلق به یک دارایی زیر `public` در Markdown خود اشاره کرده‌اید:
38+
39+
```md
40+
![تصویر](/image-inside-public.png)
41+
```
42+
43+
در این حالت، شما **نیازی ندارید** که آن را به روز کنید وقتی که مقدار پیکربندی `base` را تغییر می‌دهید.
44+
45+
اما، اگر شما در حال نویسندگی یک کامپوننت قالب هستید که به صورت پویا به منابع لینک می‌دهد، به عنوان مثال یک تصویر که `src` آن براساس مقدار پیکربندی قالب است:
46+
47+
```vue
48+
<img :src="theme.logoPath" />
49+
```
50+
51+
در این حالت، توصیه می‌شود که مسیر را با استفاده از کمکی [`withBase`](../reference/runtime-api#withbase) ارائه شده توسط ویت‌پرس بپوشانید:
52+
53+
```vue
54+
<script setup>
55+
import { withBase, useData } from 'vitepress'
56+
57+
const { theme } = useData()
58+
</script>
59+
60+
<template>
61+
<img :src="withBase(theme.logoPath)" />
62+
</template>
63+
```

docs/fa/guide/cms.md

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
---
2+
outline: deep
3+
---
4+
5+
# اتصال به یک سیستم مدیریت محتوا (CMS) {#connecting-to-a-cms}
6+
7+
## گام‌های کلی {#general-workflow}
8+
9+
اتصال ویت‌پرس به یک سیستم مدیریت محتوا به طور عمده بر اساس [مسیریابی پویا](./routing#dynamic-routes) خواهد بود. حتماً قبل از شروع، با روش کار آن آشنا شوید.
10+
11+
از آنجایی که هر سیستم مدیریت محتوا به طریقی متفاوت کار می‌کند، در اینجا تنها می‌توانیم یک جریان کاری عمومی را ارائه دهیم که شما باید آن را برای حالت خاص خودتان سفارشی کنید.
12+
13+
1. اگر سیستم مدیریت محتوا نیاز به احراز هویت دارد، یک فایل `.env` برای ذخیره توکن‌های API خود ایجاد کنید و آن را بارگذاری کنید:
14+
15+
```js
16+
// posts/[id].paths.js
17+
import { loadEnv } from 'vitepress'
18+
19+
const env = loadEnv('', process.cwd())
20+
```
21+
22+
2. داده‌های مورد نیاز را از سیستم مدیریت محتوا بازیابی کرده و به شکل داده‌های مسیر مناسب فرمت کنید:
23+
24+
```js
25+
export default {
26+
async paths() {
27+
// از کتابخانه مشتری مربوط به سیستم مدیریت محتوا استفاده کنید اگر نیاز دارید
28+
const data = await (await fetch('https://my-cms-api', {
29+
headers: {
30+
// توکن در صورت لزوم
31+
}
32+
})).json()
33+
34+
return data.map(entry => {
35+
return {
36+
params: { id: entry.id, /* عنوان، نویسندگان، تاریخ و غیره */ },
37+
content: entry.content
38+
}
39+
})
40+
}
41+
}
42+
```
43+
44+
3. نمایش محتوا در صفحه:
45+
46+
```md
47+
# {{ $params.title }}
48+
49+
- نوشته شده توسط {{ $params.author }} در تاریخ {{ $params.date }}
50+
51+
<!-- @content -->
52+
```
53+
54+
## راهنماهای ادغام {#integration-guides}
55+
56+
اگر راهنمایی درباره ادغام ویت‌پرس با یک سیستم مدیریت محتوا خاص نوشته‌اید، لطفاً از لینک "ویرایش این صفحه" زیر استفاده کنید تا آن را ارسال کنید!

0 commit comments

Comments
 (0)