You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+49-10Lines changed: 49 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,8 @@
2
2
3
3
این راهنما مکمل [README.md](README.md) است و جزئیات فنی و فرایندهای پروژه را توضیح میدهد. پیش از شروع، حتماً [README.md](README.md) و [واژهنامه (GLOSSARY.md)](GLOSSARY.md) را هم بخوانید.
4
4
5
+
تمام مشارکتکنندگان موظفاند از [آییننامهٔ رفتاری PSF](https://www.python.org/psf/conduct/) پیروی کنند. این تعهد در همهٔ ایشیوها و پولریکوئستها بهصورت یک چکباکس ثبت میشود.
6
+
5
7
## شروع کار
6
8
7
9
1. ریپازیتوری را روی GitHub **فورک** کنید و نسخهٔ خودتان را کلون کنید:
@@ -29,14 +31,24 @@
29
31
30
32
هر فایل `.po` شامل جفتهای `msgid` (متن انگلیسی) و `msgstr` (ترجمهٔ فارسی) است.
31
33
34
+
## انواع ایشیو
35
+
36
+
پیش از باز کردن ایشیوی جدید، قالب مناسب را از [صفحهٔ ایشیوهای پروژه](https://github.com/python/python-docs-fa/issues/new/choose) انتخاب کنید. سه قالب موجود است:
37
+
38
+
-**درخواست ترجمهٔ صفحه:** برای اعلام اینکه میخواهید صفحهای را ترجمه کنید، یا برای درخواست اولویتدادن به ترجمهٔ یک صفحهٔ خاص (مثلاً چون برای فعالسازی فارسی در تغییردهندهٔ زبان لازم است). قبل از شروع ترجمهٔ هر فایل، از همین قالب استفاده کنید تا دیگران بدانند آن فایل در حال انجام است.
39
+
-**پرسش یا پیشنهاد واژهنامه:** برای سؤال دربارهٔ قواعد ترجمه، یا پیشنهاد اصطلاح جدید برای افزودن به `GLOSSARY.md`.
40
+
-**اشکال در ترجمه:** برای گزارش ترجمهٔ نادرست یا مشکلدار در یک صفحهٔ منتشرشده. `msgid`، `msgstr` فعلی، و ترجمهٔ پیشنهادی خود را در قالب وارد کنید.
41
+
32
42
## فرایند ترجمه
33
43
34
-
1. فایل `.po` مورد نظر را با [Poedit](https://poedit.net) یا هر ویرایشگر متنی باز کنید.
44
+
1. فایلی را انتخاب کنید و بررسی کنید آیا [ایشیوی](https://github.com/python/python-docs-fa/issues) مربوط به آن باز شده است یا نه (قالب «درخواست ترجمهٔ صفحه»). اگر باز شده و ترجمهٔ کامل آن در حال انجام است، فایل دیگری را انتخاب کنید؛ در غیر این صورت یک ایشیو باز کرده و شروع به کار کنید.
45
+
2. فایل `.po` مورد نظر را با [Poedit](https://poedit.net) یا هر ویرایشگر متنی باز کنید.
35
46
- در Poedit رشتههای ترجمهنشده یا `fuzzy` را از پنل فیلتر (Filter) پیدا کنید.
36
-
2. متن `msgid` را ترجمه کنید و در `msgstr` وارد کنید.
37
-
3.**نشانهگذاریهای Sphinx** مثل `` :class:`int` `` ، `` :func:`repr` `` ، `` :ref:`...` `` ، ````code```` و **جایگذارها** مثل `%s` یا `{name}` را دقیقاً بدون تغییر نگه دارید؛ فقط متن اطراف آنها ترجمه میشود. ترجمهٔ `target` در `` :term:`text <target>` `` ممنوع است چون لینک را خراب میکند.
38
-
4. داخل کدها (بلوکهای `code-block`) نام متغیرها، توابع و کلمات کلیدی را ترجمه نکنید؛ فقط رشتهها و کامنتها را میتوانید ترجمه کنید.
39
-
5. از [واژهنامهٔ پروژه (GLOSSARY.md)](GLOSSARY.md) برای ثابت نگهداشتن اصطلاحات استفاده کنید.
47
+
3. متن `msgid` را ترجمه کنید و در `msgstr` وارد کنید.
48
+
4.**نشانهگذاریهای Sphinx** مثل `` :class:`int` `` ، `` :func:`repr` `` ، `` :ref:`...` `` ، ````code```` و **جایگذارها** مثل `%s` یا `{name}` را دقیقاً بدون تغییر نگه دارید؛ فقط متن اطراف آنها ترجمه میشود. ترجمهٔ `target` در `` :term:`text <target>` `` ممنوع است چون لینک را خراب میکند.
49
+
5. داخل کدها (بلوکهای `code-block`) نام متغیرها، توابع و کلمات کلیدی را ترجمه نکنید؛ فقط رشتهها و کامنتها را میتوانید ترجمه کنید.
50
+
6. از [واژهنامهٔ پروژه (GLOSSARY.md)](GLOSSARY.md) برای ثابت نگهداشتن اصطلاحات استفاده کنید.
51
+
7. اگر به اصطلاحی برخوردید که در واژهنامه نبود، ترجمهای برای آن انتخاب کنید و به واژهنامه اضافه کنید.
روی هر پولریکوئست، بهصورت خودکار این بررسیها (بههمراه `sphinx-lint` و ساخت کامل مستندات) در GitHub Actions اجرا میشوند.
52
64
65
+
پس از باز کردن پولریکوئست، ریدتردکس (Read the Docs) بهصورت خودکار نسخهٔ ساختهشدهٔ مستندات را میسازد؛ از بخش checks پولریکوئست میتوانید لینک پیشنمایش را باز کنید و ترجمهٔ خود را بهصورت رندرشده ببینید.
66
+
67
+
## نکات نگارشی و تایپوگرافی فارسی
68
+
69
+
برای یکدست ماندن ترجمهها، این نکات نگارشی را رعایت کنید:
70
+
71
+
-**نیمفاصله (ZWNJ):** در جاهایی که نیمفاصله لازم است (مثل «میشود»، «میکنید»، جمع با «ها» نظیر «فایلها»، یا پیشوندهایی مثل «بی» و «نا») از کاراکتر نیمفاصلهٔ واقعی (U+200C) استفاده کنید، نه فاصلهٔ معمولی یا بدون فاصله. مثال درست: «فایلهای ترجمهنشده». مثال نادرست: «فایل های ترجمه نشده» یا «فایلهای ترجمهنشده».
72
+
-**اعداد فارسی در برابر اعداد لاتین:** در متن روایی فارسی از ارقام فارسی (۰۱۲۳۴۵۶۷۸۹) استفاده کنید (مثلاً «در نسخهٔ ۳ پایتون»). اما داخل کد، شمارهٔ نسخهٔ پایتون، مسیر فایلها، لینکها و هر جایی که عدد بخشی از یک شناسهٔ فنی است (مثل `v3.14.6`)، همیشه از ارقام لاتین استفاده کنید و آنها را تغییر ندهید.
73
+
-**علائم نگارشی فارسی در برابر انگلیسی:** در متن فارسی از علائم فارسی استفاده کنید: «،» بهجای «,» و «؟» بهجای «?». علائمی که داخل کد، نشانهگذاریهای Sphinx، یا جایگذارها هستند دستنخورده باقی میمانند (چون بخشی از متن انگلیسی اصلی محسوب نمیشوند و نباید تغییر کنند).
74
+
75
+
## سطح رسمیت و لحن نوشتار
76
+
77
+
مستندات پایتون رسمی هستند، پس ترجمهٔ فارسی هم باید در سطح **رسمی** نوشته شود؛ نه محاورهای و نه بیشازحد تشریفاتی. چند نکتهٔ عملی:
78
+
79
+
- برای اشاره به خواننده همیشه از «شما» استفاده کنید، نه «تو». این مورد باید در کل فایل و در کل پروژه یکدست بماند.
80
+
- افعال را بهصورت رسمی و کامل بنویسید (مثلاً «میتوانید» نه «میتونید»).
81
+
- از واژههای محاورهای، اختصارات غیررسمی یا شکستهنویسی خودداری کنید.
82
+
- لحن باید دوستانه و راهنما باشد، اما رسمیتِ متن باید همان سطحی باشد که در مستندات رسمی سایر زبانها (مثل نسخهٔ انگلیسی) دیده میشود.
83
+
53
84
## رشتههای fuzzy
54
85
55
-
رشتههای `fuzzy` یعنی ترجمهٔ قبلی وجود دارد اما به دلیل تغییر متن اصلی (یا مداخلهٔ ابزارها) باید دوباره بررسی شود. این رشتهها در ساختهٔ نهایی مستندات نمایش داده نمیشوند و در جدول `STATUS.md` نیز در ستون «Fuzzy» شمارش میشوند. حتماً آنها را بررسی، بازنویسی و سپس علامت `fuzzy` را حذف کنید.
86
+
رشتههای `fuzzy` یعنی ترجمهٔ قبلی وجود دارد اما به دلیل تغییر متن اصلی (یا مداخلهٔ ابزارها) باید دوباره بررسی شود. این رشتهها در نسخهٔ نهایی ساختهشدهٔ مستندات نمایش داده نمیشوند و در جدول `STATUS.md` نیز در ستون «Fuzzy» شمارش میشوند. حتماً آنها را بررسی، بازنویسی و سپس علامت `fuzzy` را حذف کنید.
> اسکریپت فقط سربرگ را تغییر میدهد و به متن ترجمهها دست نمیزند، اما باگهای خودکار (مثل رباتهای GitHub Actions) را از فهرست مترجمان حذف میکند. جزئیات کامل در docstring خود اسکریپت آمده است.
115
+
> اسکریپت فقط سربرگ را تغییر میدهد و به متن ترجمهها دست نمیزند، اما حسابهای خودکار (مثل رباتهای GitHub Actions) را از فهرست مترجمان حذف میکند. جزئیات کامل در docstring خود اسکریپت آمده است.
116
+
117
+
## اندازهٔ پولریکوئست
118
+
119
+
هر پولریکوئست را به **حداکثر ۴ فایل `.po`** محدود کنید. این محدودیت هم از پولریکوئستهای بزرگ و غیرقابلبازبینی جلوگیری میکند و هم از سیل پولریکوئستهای تکفایلی برای فایلهای خیلی کوچک. اگر چند فایل کوچک و مرتبط دارید (مثلاً چند فایل زیر یک پوشه)، بستهبندیشان در یک پولریکوئست مشکلی ندارد، تا سقف ۴ فایل. برای فایلهای بزرگ، یک پولریکوئست جداگانه برای هرکدام بهتر است.
120
+
121
+
## اگر بررسیهای CI رد شد
122
+
123
+
اگر بررسیهای خودکار روی پولریکوئست شما رد شدند، به تب **Actions** در گیتهاب بروید و ببینید کدام بررسی مشکل داشته، سپس اسکریپت متناظر آن را بهصورت محلی اجرا کنید (مثلاً `msgfmt --check`، `scripts/check_markup.py`، یا `sphinx-lint`) تا خطا را پیدا و برطرف کنید.
فهرست اعضای تیم همراه با آمار مشارکت در [TEAM.md](TEAM.md) نگهداری میشود.
93
132
94
-
ستون «Translated Count» در `TEAM.md` توسط `scripts/team_stats.py` محاسبه میشود: اسکریپت روی همهٔ فایلهای `.po` تعداد رشتههای ترجمهشده (بهجز `fuzzy`) را میشمارد و با `git blame` هر رشته را به نویسندهٔ کامیتی نسبت میدهد که آخرینبار آن سطر را تغییر داده است. کامیتهای مکانیکی (همگامسازی با CPython، بهروزرسانی سربرگ «Update .po files» و کامیتهای ربات/Transifex) شمرده نمیشوند و رشتههای بدون نویسندهٔ مشخص در ردیف «(unassigned)» میافتند. این عدد تقریبی است و بنا به ماهیت git، سهم مترجمان دورهٔ Transifex که کارشان از طریق کامیت ربات وارد شده را نشان نمیدهد. این بهروزرسانی بههمراه بازسازی اعتبارهای سربرگ (با `update_po_headers.py`) و جدول `STATUS.md`، شبانه توسط گردشکار `.github/workflows/maintenance.yml` انجام میشود.
133
+
ستون «Translated Count» در `TEAM.md` توسط `scripts/team_stats.py` محاسبه میشود: اسکریپت روی همهٔ فایلهای `.po` تعداد رشتههای ترجمهشده (بهجز `fuzzy`) را میشمارد و با `git blame` هر رشته را به نویسندهٔ کامیتی نسبت میدهد که آخرینبار آن سطر را تغییر داده است. کامیتهای مکانیکی (همگامسازی با CPython، بهروزرسانی سربرگ «Update .po files» و کامیتهای ربات/Transifex) شمرده نمیشوند و رشتههای بدون نویسندهٔ مشخص در ردیف «(unassigned)» میافتند. این عدد تقریبی است و با توجه به ماهیت git، سهم مترجمان دورهٔ Transifex که کارشان از طریق کامیت ربات وارد شده را نشان نمیدهد. این بهروزرسانی بههمراه بازسازی اعتبارهای سربرگ (با `update_po_headers.py`) و جدول `STATUS.md`، شبانه توسط گردشکار `.github/workflows/maintenance.yml` انجام میشود.
این اسکریپت نسخهٔ مشخصشدهٔ CPython را کلون میکند، قالبهای gettext (`*.pot`) را از روی آن میسازد، فایلهای `.po` موجود را با `msgmerge` بهروزرسانی میکند، برای صفحات جدید فایل `.po` تازه میسازد و در پایان همهٔ فایلها را با `msgfmt --check` صحتسنجی میکند. بعد از اجرای آن، خروجی را بازبینی کنید و اعتبارهای سربرگ را (در صورت نیاز با `scripts/update_po_headers.py`) بهروزرسانی کنید.
109
148
110
-
## مقدار ترجمهی باقیمانده
149
+
## وضعیت ترجمههای باقیمانده
111
150
112
-
با `python3 scripts/translation_status.py --only-incomplete` میتوانید وضعیت دقیق هر فایل را ببینید.
151
+
با `python3 scripts/translation_status.py --only-incomplete` میتوانید وضعیت دقیق هر فایل را ببینید.
0 commit comments