-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Divyansh Singh <[email protected]>
- Loading branch information
Showing
48 changed files
with
7,187 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"plugins": { | ||
"postcss-rtlcss": { | ||
"ltrPrefix": ":where([dir=\"ltr\"])", | ||
"rtlPrefix": ":where([dir=\"rtl\"])" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
import { createRequire } from 'module' | ||
import { defineConfig, type DefaultTheme } from 'vitepress' | ||
|
||
const require = createRequire(import.meta.url) | ||
const pkg = require('vitepress/package.json') | ||
|
||
export const fa = defineConfig({ | ||
title: 'ویتپرس', | ||
lang: 'fa-IR', | ||
description: 'Vite & Vue powered static site generator.', | ||
dir: 'rtl', | ||
markdown: { | ||
container: { | ||
tipLabel: 'نکته', | ||
warningLabel: 'هشدار', | ||
dangerLabel: 'خطر', | ||
infoLabel: 'اطلاعات', | ||
detailsLabel: 'جزئیات' | ||
} | ||
}, | ||
themeConfig: { | ||
nav: nav(), | ||
sidebar: { | ||
'/fa/guide/': { base: '/fa/guide/', items: sidebarGuide() }, | ||
'/fa/reference/': { base: '/fa/reference/', items: sidebarReference() } | ||
}, | ||
|
||
editLink: { | ||
pattern: 'https://github.com/vuejs/vitepress/edit/main/docs/:path', | ||
text: 'ویرایش این صفحه در گیتهاب' | ||
}, | ||
|
||
footer: { | ||
message: 'انتشار یافته تحت لایسنس MIT', | ||
copyright: 'حق نسخهبرداری © 2019-کنون Evan You' | ||
}, | ||
|
||
docFooter: { | ||
prev: 'قبلی', | ||
next: 'بعدی' | ||
}, | ||
|
||
outline: { | ||
label: 'در این صفحه' | ||
}, | ||
|
||
lastUpdated: { | ||
text: 'آخرین بهروزرسانی', | ||
formatOptions: { | ||
dateStyle: 'short', | ||
timeStyle: 'medium' | ||
} | ||
}, | ||
|
||
langMenuLabel: 'تغییر زبان', | ||
returnToTopLabel: 'بازگشت به بالا', | ||
sidebarMenuLabel: 'منوی جانبی', | ||
darkModeSwitchLabel: 'تم تاریک', | ||
lightModeSwitchTitle: 'رفتن به حالت روشن', | ||
darkModeSwitchTitle: 'رفتن به حالت تاریک', | ||
notFound: { | ||
linkLabel: 'بازگشت به خانه', | ||
linkText: 'بازگشت به خانه', | ||
title: 'صفحه مورد نظر یافت نشد', | ||
code: '۴۰۴', | ||
quote: | ||
'اما اگر جهت خود را تغییر ندهید و اگر ادامه دهید به دنبال چیزی که دنبال میکنید، ممکن است در نهایت به جایی که در حال رفتن به سمتش هستید، برسید.' | ||
}, | ||
siteTitle: 'ویتپرس' | ||
} | ||
}) | ||
|
||
function nav(): DefaultTheme.NavItem[] { | ||
return [ | ||
{ | ||
text: 'راهنما', | ||
link: 'fa/guide/what-is-vitepress', | ||
activeMatch: '/guide/' | ||
}, | ||
{ | ||
text: 'مرجع', | ||
link: 'fa/reference/site-config', | ||
activeMatch: '/reference/' | ||
}, | ||
{ | ||
text: pkg.version, | ||
items: [ | ||
{ | ||
text: 'Changelog', | ||
link: 'https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md' | ||
}, | ||
{ | ||
text: 'مشارکت', | ||
link: 'https://github.com/vuejs/vitepress/blob/main/.github/contributing.md' | ||
} | ||
] | ||
} | ||
] | ||
} | ||
|
||
function sidebarGuide(): DefaultTheme.SidebarItem[] { | ||
return [ | ||
{ | ||
text: 'معرفی', | ||
collapsed: false, | ||
items: [ | ||
{ text: 'ویتپرس چیست؟', link: 'what-is-vitepress' }, | ||
{ text: 'شروع کار', link: 'getting-started' }, | ||
{ text: 'مسیریابی', link: 'routing' }, | ||
{ text: 'استقرار', link: 'deploy' } | ||
] | ||
}, | ||
{ | ||
text: 'نوشتن', | ||
collapsed: false, | ||
items: [ | ||
{ text: 'افزونههای Markdown', link: 'markdown' }, | ||
{ text: 'مدیریت منابع', link: 'asset-handling' }, | ||
{ text: 'Frontmatter', link: 'frontmatter' }, | ||
{ text: 'استفاده از Vue در Markdown', link: 'using-vue' }, | ||
{ text: 'بینالمللی سازی', link: 'i18n' } | ||
] | ||
}, | ||
{ | ||
text: 'شخصیسازی', | ||
collapsed: false, | ||
items: [ | ||
{ text: 'استفاده از تم شخصی', link: 'custom-theme' }, | ||
{ | ||
text: 'گسترش تم پیشفرض', | ||
link: 'extending-default-theme' | ||
}, | ||
{ text: 'بارگیری داده در زمان Build', link: 'data-loading' }, | ||
{ text: 'سازگاری SSR', link: 'ssr-compat' }, | ||
{ text: 'اتصال به CMS', link: 'cms' } | ||
] | ||
}, | ||
{ | ||
text: 'آزمایشی', | ||
collapsed: false, | ||
items: [ | ||
{ text: 'حالت MPA', link: 'mpa-mode' }, | ||
{ text: 'جنریت کردن Sitemap', link: 'sitemap-generation' } | ||
] | ||
}, | ||
{ text: 'پیکربندی و مرجع API', base: 'fa/reference/', link: 'site-config' } | ||
] | ||
} | ||
|
||
function sidebarReference(): DefaultTheme.SidebarItem[] { | ||
return [ | ||
{ | ||
text: 'مرجع', | ||
base: 'fa/reference/', | ||
items: [ | ||
{ text: 'پیکربندی Site', link: 'site-config' }, | ||
{ text: 'پیکربندی Frontmatter', link: 'frontmatter-config' }, | ||
{ text: 'Runtime API', link: 'runtime-api' }, | ||
{ text: 'CLI', link: 'cli' }, | ||
{ | ||
text: 'تم پیشفرض', | ||
base: 'fa/reference/default-theme-', | ||
items: [ | ||
{ text: 'بررسی اجمالی', link: 'config' }, | ||
{ text: 'ناوبری', link: 'nav' }, | ||
{ text: 'نوار کنار صفحه', link: 'sidebar' }, | ||
{ text: 'صفحه اصلی', link: 'home-page' }, | ||
{ text: 'پاورقی', link: 'footer' }, | ||
{ text: 'طرح', link: 'layout' }, | ||
{ text: 'نشان', link: 'badge' }, | ||
{ text: 'صفحه تیم', link: 'team-page' }, | ||
{ text: 'لینکهای قبلی / بعدی', link: 'prev-next-links' }, | ||
{ text: 'ویرایش لینک', link: 'edit-link' }, | ||
{ text: 'Timestamp آخرین بهروزرسانی', link: 'last-updated' }, | ||
{ text: 'جستجو', link: 'search' }, | ||
{ text: 'تبلیغات Carbon', link: 'carbon-ads' } | ||
] | ||
} | ||
] | ||
} | ||
] | ||
} | ||
|
||
export const search: DefaultTheme.AlgoliaSearchOptions['locales'] = { | ||
fa: { | ||
placeholder: 'جستجوی مستندات', | ||
translations: { | ||
button: { | ||
buttonText: 'جستجو', | ||
buttonAriaLabel: 'جستجو' | ||
}, | ||
modal: { | ||
searchBox: { | ||
resetButtonTitle: 'آغاز مجدد جستجو', | ||
resetButtonAriaLabel: 'آغاز مجدد جستجو', | ||
cancelButtonText: 'لغو', | ||
cancelButtonAriaLabel: 'لغو' | ||
}, | ||
startScreen: { | ||
recentSearchesTitle: 'جستجوهای اخیر', | ||
noRecentSearchesText: 'تاریخچه جستجویی یافت نشد.', | ||
saveRecentSearchButtonTitle: 'ذخیره تاریخچه جستجو', | ||
removeRecentSearchButtonTitle: 'حذف تاریخچه جستجو', | ||
favoriteSearchesTitle: 'موارد دلخواه', | ||
removeFavoriteSearchButtonTitle: 'حذف مورد دلخواه' | ||
}, | ||
errorScreen: { | ||
titleText: 'نتیجهای یافت نشد برای', | ||
helpText: 'اتصال شبکه خود را بررسی کنید' | ||
}, | ||
footer: { | ||
selectText: 'انتخاب', | ||
navigateText: 'رفتن', | ||
closeText: 'بستن', | ||
searchByText: ' جستجو با ' | ||
}, | ||
noResultsScreen: { | ||
noResultsText: 'نتیجهای یافت نشد برای' | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# مدیریت منابع {#asset-handling} | ||
|
||
## ارجاع به منابع ایستا {#referencing-static-assets} | ||
|
||
تمام فایلهای Markdown به کامپوننتهای Vue تبدیل و توسط [Vite](https://vitejs.dev/guide/assets.html) پردازش میشوند. شما میتوانید، **و باید**، هر نوع دارایی را با استفاده از URLهای نسبی مرجع قرار دهید: | ||
|
||
```md | ||
![تصویر](./image.png) | ||
``` | ||
|
||
شما میتوانید منابع ایستا را در فایلهای Markdown خود، کامپوننتهای `*.vue` در قالب، استایلها و فایلهای `.css` ساده، با استفاده از مسیرهای عمومی مطلق (براساس ریشه پروژه) یا مسیرهای نسبی (براساس سیستم فایل شما) ارجاع دهید. روش دوم مشابه رفتاری است که در صورت استفاده از Vite، Vue CLI یا `file-loader` webpack با آن آشنا هستید. | ||
|
||
انواع شایع تصویر، رسانه و فایل فونت به طور خودکار شناسایی و به عنوان منابع درج میشوند. | ||
|
||
::: tip فایلهای لینک شده به عنوان دارایی محسوب نمیشوند | ||
PDFها یا سندهای دیگر که از طریق پیوندها در فایلهای Markdown ارجاع داده شدهاند به طور خودکار به عنوان دارایی در نظر گرفته نمیشوند. برای دسترسی به فایلهای لینک شده، باید آنها را به صورت دستی در دایرکتوری [`public`](#the-public-directory) پروژه قرار دهید. | ||
::: | ||
|
||
تمام منابع ارجاع داده شده، شامل آنهایی که از مسیرهای مطلق استفاده میکنند، در مرحله تولید به دایرکتوری خروجی با نام فایلی بر اساس یک هش کپی خواهند شد. داراییهایی که هرگز ارجاع نداده شوند، کپی نخواهند شد. منابع تصویر کوچکتر از 4 کیلوبایت به صورت base64 درون خطی میشوند - این میتواند از طریق گزینه پیکربندی [`vite`](../reference/site-config#vite) تنظیم شود. | ||
|
||
تمام ارجاعهای مسیر **ایستا**، شامل مسیرهای مطلق، باید بر اساس ساختار دایرکتوری کاری شما تعیین شوند. | ||
|
||
## دایرکتوری عمومی {#the-public-directory} | ||
|
||
گاهی اوقات ممکن است نیاز داشته باشید منابع ایستا را فراهم کنید که به صورت مستقیم در هیچیک از Markdown یا کامپوننتهای قالب شما ارجاع نشدهاند، یا ممکن است بخواهید برخی فایلها را با نام اصلی خود سرویس دهید. به عنوان مثال، فایلهایی مانند `robots.txt`، آیکونهای fav، و آیکونهای PWA. | ||
|
||
شما میتوانید این فایلها را در دایرکتوری `public` تحت [دایرکتوری منبع](./routing#source-directory) قرار دهید. به عنوان مثال، اگر ریشه پروژه شما `./docs` است و از محل پیشفرض دایرکتوری منبع استفاده میکنید، آنگاه دایرکتوری عمومی شما `./docs/public` خواهد بود. | ||
|
||
منابع قرار داده شده در `public` به صورت اصلی در ریشه دایرکتوری خروجی کپی خواهند شد. | ||
|
||
توجه داشته باشید که باید به فایلهای قرار داده شده در `public` با استفاده از مسیر مطلق ریشه ارجاع دهید - به عنوان مثال، `public/icon.png` همیشه باید به عنوان `/icon.png` در کد منبع ارجاع داده شود. | ||
|
||
## URL پایه {#base-url} | ||
|
||
اگر وبسایت شما به URL غیر ریشه استقرار مییابد، باید گزینه `base` را در `.vitepress/config.js` تنظیم کنید. به عنوان مثال، اگر قصد دارید وبسایت خود را به `https://foo.github.io/bar/` استقرار دهید، آنگاه `base` باید به `'/bar/'` تنظیم شود (همیشه باید با یک خط شروع و پایان یابد). | ||
|
||
تمام مسیرهای دارایی ایستا شما به صورت خودکار پردازش میشوند تا با ارزشهای `base` مختلف تطبیق یابند. به عنوان مثال، اگر به یک ارجاع مطلق به یک دارایی زیر `public` در Markdown خود اشاره کردهاید: | ||
|
||
```md | ||
![تصویر](/image-inside-public.png) | ||
``` | ||
|
||
در این حالت، شما **نیازی ندارید** که آن را به روز کنید وقتی که مقدار پیکربندی `base` را تغییر میدهید. | ||
|
||
اما، اگر شما در حال نویسندگی یک کامپوننت قالب هستید که به صورت پویا به منابع لینک میدهد، به عنوان مثال یک تصویر که `src` آن براساس مقدار پیکربندی قالب است: | ||
|
||
```vue | ||
<img :src="theme.logoPath" /> | ||
``` | ||
|
||
در این حالت، توصیه میشود که مسیر را با استفاده از کمکی [`withBase`](../reference/runtime-api#withbase) ارائه شده توسط ویتپرس بپوشانید: | ||
|
||
```vue | ||
<script setup> | ||
import { withBase, useData } from 'vitepress' | ||
const { theme } = useData() | ||
</script> | ||
<template> | ||
<img :src="withBase(theme.logoPath)" /> | ||
</template> | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
--- | ||
outline: deep | ||
--- | ||
|
||
# اتصال به یک سیستم مدیریت محتوا (CMS) {#connecting-to-a-cms} | ||
|
||
## گامهای کلی {#general-workflow} | ||
|
||
اتصال ویتپرس به یک سیستم مدیریت محتوا به طور عمده بر اساس [مسیریابی پویا](./routing#dynamic-routes) خواهد بود. حتماً قبل از شروع، با روش کار آن آشنا شوید. | ||
|
||
از آنجایی که هر سیستم مدیریت محتوا به طریقی متفاوت کار میکند، در اینجا تنها میتوانیم یک جریان کاری عمومی را ارائه دهیم که شما باید آن را برای حالت خاص خودتان سفارشی کنید. | ||
|
||
1. اگر سیستم مدیریت محتوا نیاز به احراز هویت دارد، یک فایل `.env` برای ذخیره توکنهای API خود ایجاد کنید و آن را بارگذاری کنید: | ||
|
||
```js | ||
// posts/[id].paths.js | ||
import { loadEnv } from 'vitepress' | ||
|
||
const env = loadEnv('', process.cwd()) | ||
``` | ||
|
||
2. دادههای مورد نیاز را از سیستم مدیریت محتوا بازیابی کرده و به شکل دادههای مسیر مناسب فرمت کنید: | ||
|
||
```js | ||
export default { | ||
async paths() { | ||
// از کتابخانه مشتری مربوط به سیستم مدیریت محتوا استفاده کنید اگر نیاز دارید | ||
const data = await (await fetch('https://my-cms-api', { | ||
headers: { | ||
// توکن در صورت لزوم | ||
} | ||
})).json() | ||
return data.map(entry => { | ||
return { | ||
params: { id: entry.id, /* عنوان، نویسندگان، تاریخ و غیره */ }, | ||
content: entry.content | ||
} | ||
}) | ||
} | ||
} | ||
``` | ||
|
||
3. نمایش محتوا در صفحه: | ||
|
||
```md | ||
# {{ $params.title }} | ||
- نوشته شده توسط {{ $params.author }} در تاریخ {{ $params.date }} | ||
<!-- @content --> | ||
``` | ||
|
||
## راهنماهای ادغام {#integration-guides} | ||
|
||
اگر راهنمایی درباره ادغام ویتپرس با یک سیستم مدیریت محتوا خاص نوشتهاید، لطفاً از لینک "ویرایش این صفحه" زیر استفاده کنید تا آن را ارسال کنید! |
Oops, something went wrong.