committed by
GitHub
43 changed files with 1412 additions and 793 deletions
@ -0,0 +1,45 @@ |
|||||
|
labels: [lang-all] |
||||
|
body: |
||||
|
- type: markdown |
||||
|
attributes: |
||||
|
value: | |
||||
|
Thanks for your interest in helping translate the FastAPI docs! 🌍 |
||||
|
|
||||
|
Please follow these instructions carefully to propose a new language translation. 🙏 |
||||
|
|
||||
|
This structured process helps ensure translations can be properly maintained long-term. |
||||
|
- type: checkboxes |
||||
|
id: checks |
||||
|
attributes: |
||||
|
label: Initial Checks |
||||
|
description: Please confirm and check all the following options. |
||||
|
options: |
||||
|
- label: I checked that this language is not already being translated in FastAPI docs. |
||||
|
required: true |
||||
|
- label: I searched existing discussions to ensure no one else proposed this language. |
||||
|
required: true |
||||
|
- label: I am a native speaker of the language I want to help translate. |
||||
|
required: true |
||||
|
- type: input |
||||
|
id: language |
||||
|
attributes: |
||||
|
label: Target Language |
||||
|
description: What language do you want to translate the FastAPI docs into? |
||||
|
placeholder: e.g. Latin |
||||
|
validations: |
||||
|
required: true |
||||
|
- type: textarea |
||||
|
id: additional_info |
||||
|
attributes: |
||||
|
label: Additional Information |
||||
|
description: Any other relevant information about your translation proposal |
||||
|
- type: markdown |
||||
|
attributes: |
||||
|
value: | |
||||
|
Translations are automatized with AI and then reviewed by native speakers. 🤖 🙋 |
||||
|
|
||||
|
This allows us to keep them consistent and up-to-date. |
||||
|
|
||||
|
If there are several native speakers commenting on this discussion and |
||||
|
committing to help review new translations, the FastAPI team will review it |
||||
|
and potentially make it an official translation. 😎 |
@ -0,0 +1,77 @@ |
|||||
|
name: Translate |
||||
|
|
||||
|
on: |
||||
|
workflow_dispatch: |
||||
|
inputs: |
||||
|
debug_enabled: |
||||
|
description: Run with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate) |
||||
|
required: false |
||||
|
default: "false" |
||||
|
command: |
||||
|
description: Command to run |
||||
|
type: choice |
||||
|
options: |
||||
|
- translate-page |
||||
|
- translate-lang |
||||
|
- update-outdated |
||||
|
- add-missing |
||||
|
- update-and-add |
||||
|
- remove-all-removable |
||||
|
language: |
||||
|
description: Language to translate to as a letter code (e.g. "es" for Spanish) |
||||
|
type: string |
||||
|
required: false |
||||
|
default: "" |
||||
|
en_path: |
||||
|
description: File path in English to translate (e.g. docs/en/docs/index.md) |
||||
|
type: string |
||||
|
required: false |
||||
|
default: "" |
||||
|
|
||||
|
env: |
||||
|
UV_SYSTEM_PYTHON: 1 |
||||
|
|
||||
|
jobs: |
||||
|
job: |
||||
|
if: github.repository_owner == 'fastapi' |
||||
|
runs-on: ubuntu-latest |
||||
|
permissions: |
||||
|
contents: write |
||||
|
steps: |
||||
|
- name: Dump GitHub context |
||||
|
env: |
||||
|
GITHUB_CONTEXT: ${{ toJson(github) }} |
||||
|
run: echo "$GITHUB_CONTEXT" |
||||
|
- uses: actions/checkout@v5 |
||||
|
- name: Set up Python |
||||
|
uses: actions/setup-python@v5 |
||||
|
with: |
||||
|
python-version: "3.11" |
||||
|
- name: Setup uv |
||||
|
uses: astral-sh/setup-uv@v6 |
||||
|
with: |
||||
|
version: "0.4.15" |
||||
|
enable-cache: true |
||||
|
cache-dependency-glob: | |
||||
|
requirements**.txt |
||||
|
pyproject.toml |
||||
|
- name: Install Dependencies |
||||
|
run: uv pip install -r requirements-github-actions.txt -r requirements-translations.txt |
||||
|
# Allow debugging with tmate |
||||
|
- name: Setup tmate session |
||||
|
uses: mxschmitt/action-tmate@v3 |
||||
|
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} |
||||
|
with: |
||||
|
limit-access-to-actor: true |
||||
|
env: |
||||
|
GITHUB_TOKEN: ${{ secrets.FASTAPI_TRANSLATIONS }} |
||||
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} |
||||
|
- name: FastAPI Translate |
||||
|
run: | |
||||
|
python ./scripts/translate.py ${{ github.event.inputs.command }} |
||||
|
python ./scripts/translate.py make-pr |
||||
|
env: |
||||
|
GITHUB_TOKEN: ${{ secrets.FASTAPI_TRANSLATIONS }} |
||||
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} |
||||
|
LANGUAGE: ${{ github.event.inputs.language }} |
||||
|
EN_PATH: ${{ github.event.inputs.en_path }} |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,298 @@ |
|||||
|
# متغیرهای محیطی |
||||
|
|
||||
|
/// tip |
||||
|
|
||||
|
اگه از قبل میدونی متغیرهای محیطی چی هستن و چطور ازشون استفاده میشه، میتونی این بخش رو رد کنی. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
یه متغیر محیطی (که بهش "**env var**" هم میگن) یه متغیریه که **خارج** از کد پایتون، توی **سیستمعامل** زندگی میکنه و میتونه توسط کد پایتونت (یا برنامههای دیگه) خونده بشه. |
||||
|
|
||||
|
متغیرهای محیطی میتونن برای مدیریت **تنظیمات** برنامه، بهعنوان بخشی از **نصب** پایتون و غیره مفید باشن. |
||||
|
|
||||
|
## ساخت و استفاده از متغیرهای محیطی |
||||
|
|
||||
|
میتونی متغیرهای محیطی رو توی **شل (ترمینال)** **بسازی** و ازشون استفاده کنی، بدون اینکه به پایتون نیاز داشته باشی: |
||||
|
|
||||
|
//// tab | لینوکس، مکاواس، ویندوز بش |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
// میتونی یه متغیر محیطی به اسم MY_NAME بسازی با |
||||
|
$ export MY_NAME="Wade Wilson" |
||||
|
|
||||
|
// بعد میتونی با برنامههای دیگه ازش استفاده کنی، مثل |
||||
|
$ echo "Hello $MY_NAME" |
||||
|
|
||||
|
Hello Wade Wilson |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | ویندوز پاورشل |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
// یه متغیر محیطی به اسم MY_NAME بساز |
||||
|
$ $Env:MY_NAME = "Wade Wilson" |
||||
|
|
||||
|
// با برنامههای دیگه ازش استفاده کن، مثل |
||||
|
$ echo "Hello $Env:MY_NAME" |
||||
|
|
||||
|
Hello Wade Wilson |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
## خوندن متغیرهای محیطی توی پایتون |
||||
|
|
||||
|
میتونی متغیرهای محیطی رو **خارج** از پایتون، توی ترمینال (یا با هر روش دیگه) بسازی، و بعد توی **پایتون** اونا رو بخونی. |
||||
|
|
||||
|
مثلاً میتونی یه فایل `main.py` داشته باشی با: |
||||
|
|
||||
|
```Python hl_lines="3" |
||||
|
import os |
||||
|
|
||||
|
name = os.getenv("MY_NAME", "World") |
||||
|
print(f"Hello {name} from Python") |
||||
|
``` |
||||
|
|
||||
|
/// tip |
||||
|
|
||||
|
آرگومان دوم <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> مقدار پیشفرضیه که برمیگردونه. |
||||
|
|
||||
|
اگه ندی، بهصورت پیشفرض `None` هست، اینجا ما `"World"` رو بهعنوان مقدار پیشفرض گذاشتیم. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
بعد میتونی اون برنامه پایتون رو صدا کنی: |
||||
|
|
||||
|
//// tab | لینوکس، مکاواس، ویندوز بش |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
// اینجا هنوز متغیر محیطی رو تنظیم نکردیم |
||||
|
$ python main.py |
||||
|
|
||||
|
// چون متغیر محیطی رو تنظیم نکردیم، مقدار پیشفرض رو میگیریم |
||||
|
|
||||
|
Hello World from Python |
||||
|
|
||||
|
// ولی اگه اول یه متغیر محیطی بسازیم |
||||
|
$ export MY_NAME="Wade Wilson" |
||||
|
|
||||
|
// و بعد دوباره برنامه رو صدا کنیم |
||||
|
$ python main.py |
||||
|
|
||||
|
// حالا میتونه متغیر محیطی رو بخونه |
||||
|
|
||||
|
Hello Wade Wilson from Python |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | ویندوز پاورشل |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
// اینجا هنوز متغیر محیطی رو تنظیم نکردیم |
||||
|
$ python main.py |
||||
|
|
||||
|
// چون متغیر محیطی رو تنظیم نکردیم، مقدار پیشفرض رو میگیریم |
||||
|
|
||||
|
Hello World from Python |
||||
|
|
||||
|
// ولی اگه اول یه متغیر محیطی بسازیم |
||||
|
$ $Env:MY_NAME = "Wade Wilson" |
||||
|
|
||||
|
// و بعد دوباره برنامه رو صدا کنیم |
||||
|
$ python main.py |
||||
|
|
||||
|
// حالا میتونه متغیر محیطی رو بخونه |
||||
|
|
||||
|
Hello Wade Wilson from Python |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
چون متغیرهای محیطی میتونن خارج از کد تنظیم بشن، ولی کد میتونه اونا رو بخونه، و لازم نیست با بقیه فایلها ذخیره (کمیتی به `git`) بشن، معمولاً برای پیکربندی یا **تنظیمات** استفاده میشن. |
||||
|
|
||||
|
همچنین میتونی یه متغیر محیطی رو فقط برای **یه اجرای خاص برنامه** بسازی، که فقط برای اون برنامه و فقط برای مدت زمان اجراش در دسترسه. |
||||
|
|
||||
|
برای این کار، درست قبل از خود برنامه، توی همون خط بسازش: |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
// یه متغیر محیطی MY_NAME رو توی خط برای این اجرای برنامه بساز |
||||
|
$ MY_NAME="Wade Wilson" python main.py |
||||
|
|
||||
|
// حالا میتونه متغیر محیطی رو بخونه |
||||
|
|
||||
|
Hello Wade Wilson from Python |
||||
|
|
||||
|
// متغیر محیطی بعدش دیگه وجود نداره |
||||
|
$ python main.py |
||||
|
|
||||
|
Hello World from Python |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
/// tip |
||||
|
|
||||
|
میتونی بیشتر در موردش توی <a href="https://12factor.net/config" class="external-link" target="_blank">برنامه دوازدهفاکتوری: پیکربندی</a> بخونی. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
## نوعها و اعتبارسنجی |
||||
|
|
||||
|
این متغیرهای محیطی فقط میتونن **رشتههای متنی** رو نگه دارن، چون خارج از پایتون هستن و باید با برنامههای دیگه و بقیه سیستم (و حتی سیستمعاملهای مختلف مثل لینوکس، ویندوز، مکاواس) سازگار باشن. |
||||
|
|
||||
|
یعنی **هر مقداری** که توی پایتون از یه متغیر محیطی خونده میشه یه `str` هست، و هر تبدیل به نوع دیگه یا هر اعتبارسنجی باید توی کد انجام بشه. |
||||
|
|
||||
|
توی [راهنمای کاربر پیشرفته - تنظیمات و متغیرهای محیطی](./advanced/settings.md){.internal-link target=_blank} بیشتر در مورد استفاده از متغیرهای محیطی برای مدیریت **تنظیمات برنامه** یاد میگیری. |
||||
|
|
||||
|
## متغیر محیطی `PATH` |
||||
|
|
||||
|
یه متغیر محیطی **خاص** به اسم **`PATH`** وجود داره که سیستمعاملها (لینوکس، مکاواس، ویندوز) ازش برای پیدا کردن برنامههایی که قراره اجرا بشن استفاده میکنن. |
||||
|
|
||||
|
مقدار متغیر `PATH` یه رشته طولانی از پوشههاست که توی لینوکس و مکاواس با دونقطه `:` و توی ویندوز با نقطهویرگول `;` از هم جدا شدن. |
||||
|
|
||||
|
مثلاً، متغیر محیطی `PATH` میتونه اینجوری باشه: |
||||
|
|
||||
|
//// tab | لینوکس، مکاواس |
||||
|
|
||||
|
```plaintext |
||||
|
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin |
||||
|
``` |
||||
|
|
||||
|
یعنی سیستم باید دنبال برنامهها توی این پوشهها بگرده: |
||||
|
|
||||
|
* `/usr/local/bin` |
||||
|
* `/usr/bin` |
||||
|
* `/bin` |
||||
|
* `/usr/sbin` |
||||
|
* `/sbin` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | ویندوز |
||||
|
|
||||
|
```plaintext |
||||
|
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32 |
||||
|
``` |
||||
|
|
||||
|
یعنی سیستم باید دنبال برنامهها توی این پوشهها بگرده: |
||||
|
|
||||
|
* `C:\Program Files\Python312\Scripts` |
||||
|
* `C:\Program Files\Python312` |
||||
|
* `C:\Windows\System32` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
وقتی یه **دستور** توی ترمینال تایپ میکنی، سیستمعامل **دنبال** برنامه توی **هر کدوم از این پوشهها** که توی متغیر محیطی `PATH` لیست شدن میگرده. |
||||
|
|
||||
|
مثلاً، وقتی توی ترمینال `python` تایپ میکنی، سیستمعامل دنبال یه برنامه به اسم `python` توی **اولین پوشه** توی اون لیست میگرده. |
||||
|
|
||||
|
اگه پیداش کنه، **استفادهش میکنه**. وگرنه توی **پوشههای بعدی** دنبالش میگرده. |
||||
|
|
||||
|
### نصب پایتون و بهروزرسانی `PATH` |
||||
|
|
||||
|
وقتی پایتون رو نصب میکنی، ممکنه ازت بپرسن آیا میخوای متغیر محیطی `PATH` رو بهروزرسانی کنی. |
||||
|
|
||||
|
//// tab | لینوکس، مکاواس |
||||
|
|
||||
|
فرض کن پایتون رو نصب کردی و توی یه پوشه `/opt/custompython/bin` قرار گرفته. |
||||
|
|
||||
|
اگه بگی بله برای بهروزرسانی متغیر محیطی `PATH`، نصاب `/opt/custompython/bin` رو به متغیر محیطی `PATH` اضافه میکنه. |
||||
|
|
||||
|
ممکنه اینجوری بشه: |
||||
|
|
||||
|
```plaintext |
||||
|
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin |
||||
|
``` |
||||
|
|
||||
|
اینجوری، وقتی توی ترمینال `python` تایپ میکنی، سیستم برنامه پایتون رو توی `/opt/custompython/bin` (آخرین پوشه) پیدا میکنه و از اون استفاده میکنه. |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | ویندوز |
||||
|
|
||||
|
فرض کن پایتون رو نصب کردی و توی یه پوشه `C:\opt\custompython\bin` قرار گرفته. |
||||
|
|
||||
|
اگه بگی بله برای بهروزرسانی متغیر محیطی `PATH`، نصاب `C:\opt\custompython\bin` رو به متغیر محیطی `PATH` اضافه میکنه. |
||||
|
|
||||
|
```plaintext |
||||
|
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin |
||||
|
``` |
||||
|
|
||||
|
اینجوری، وقتی توی ترمینال `python` تایپ میکنی، سیستم برنامه پایتون رو توی `C:\opt\custompython\bin` (آخرین پوشه) پیدا میکنه و از اون استفاده میکنه. |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
پس، اگه تایپ کنی: |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
$ python |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// tab | لینوکس، مکاواس |
||||
|
|
||||
|
سیستم برنامه `python` رو توی `/opt/custompython/bin` **پیدا** میکنه و اجراش میکنه. |
||||
|
|
||||
|
تقریباً معادل اینه که تایپ کنی: |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
$ /opt/custompython/bin/python |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | ویندوز |
||||
|
|
||||
|
سیستم برنامه `python` رو توی `C:\opt\custompython\bin\python` **پیدا** میکنه و اجراش میکنه. |
||||
|
|
||||
|
تقریباً معادل اینه که تایپ کنی: |
||||
|
|
||||
|
<div class="termy"> |
||||
|
|
||||
|
```console |
||||
|
$ C:\opt\custompython\bin\python |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
این اطلاعات وقتی در مورد [محیطهای مجازی](virtual-environments.md){.internal-link target=_blank} یاد میگیری بهدردت میخوره. |
||||
|
|
||||
|
## نتیجهگیری |
||||
|
|
||||
|
با این باید یه درک پایهای از **متغیرهای محیطی** و نحوه استفادهشون توی پایتون داشته باشی. |
||||
|
|
||||
|
میتونی بیشتر در موردشون توی <a href="https://en.wikipedia.org/wiki/Environment_variable" class="external-link" target="_blank">ویکیپدیا برای متغیر محیطی</a> بخونی. |
||||
|
|
||||
|
توی خیلی موارد مشخص نیست که متغیرهای محیطی چطور میتونن فوری مفید و کاربردی باشن. ولی توی موقعیتهای مختلف توسعه مدام پیداشون میشه، پس خوبه که در موردشون بدونی. |
||||
|
|
||||
|
مثلاً، توی بخش بعدی در مورد [محیطهای مجازی](virtual-environments.md) به این اطلاعات نیاز داری. |
@ -1,4 +1,4 @@ |
|||||
# For mkdocstrings and tests |
# For mkdocstrings and tests |
||||
httpx >=0.23.0,<0.28.0 |
httpx >=0.23.0,<0.29.0 |
||||
# For linting and generating docs versions |
# For linting and generating docs versions |
||||
ruff ==0.11.2 |
ruff ==0.12.7 |
||||
|
@ -1,6 +1,6 @@ |
|||||
PyGithub>=2.3.0,<3.0.0 |
PyGithub>=2.3.0,<3.0.0 |
||||
pydantic>=2.5.3,<3.0.0 |
pydantic>=2.5.3,<3.0.0 |
||||
pydantic-settings>=2.1.0,<3.0.0 |
pydantic-settings>=2.1.0,<3.0.0 |
||||
httpx>=0.27.0,<0.28.0 |
httpx>=0.27.0,<0.29.0 |
||||
pyyaml >=5.3.1,<7.0.0 |
pyyaml >=5.3.1,<7.0.0 |
||||
smokeshow |
smokeshow |
||||
|
@ -1 +1,2 @@ |
|||||
pydantic-ai==0.0.30 |
pydantic-ai==0.4.10 |
||||
|
GitPython==3.1.45 |
||||
|
Loading…
Reference in new issue