Skip to content

Commit 4d63016

Browse files
committed
Update CONTRIBUTING.md
1 parent 039ec2c commit 4d63016

1 file changed

Lines changed: 49 additions & 10 deletions

File tree

CONTRIBUTING.md

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
این راهنما مکمل [README.md](README.md) است و جزئیات فنی و فرایندهای پروژه را توضیح می‌دهد. پیش از شروع، حتماً [README.md](README.md) و [واژه‌نامه (GLOSSARY.md)](GLOSSARY.md) را هم بخوانید.
44

5+
تمام مشارکت‌کنندگان موظف‌اند از [آیین‌نامهٔ رفتاری PSF](https://www.python.org/psf/conduct/) پیروی کنند. این تعهد در همهٔ ایشیوها و پول‌ریکوئست‌ها به‌صورت یک چک‌باکس ثبت می‌شود.
6+
57
## شروع کار
68

79
1. ریپازیتوری را روی GitHub **فورک** کنید و نسخهٔ خودتان را کلون کنید:
@@ -29,14 +31,24 @@
2931

3032
هر فایل `.po` شامل جفت‌های `msgid` (متن انگلیسی) و `msgstr` (ترجمهٔ فارسی) است.
3133

34+
## انواع ایشیو
35+
36+
پیش از باز کردن ایشیوی جدید، قالب مناسب را از [صفحهٔ ایشیوهای پروژه](https://github.com/python/python-docs-fa/issues/new/choose) انتخاب کنید. سه قالب موجود است:
37+
38+
- **درخواست ترجمهٔ صفحه:** برای اعلام اینکه می‌خواهید صفحه‌ای را ترجمه کنید، یا برای درخواست اولویت‌دادن به ترجمهٔ یک صفحهٔ خاص (مثلاً چون برای فعال‌سازی فارسی در تغییردهندهٔ زبان لازم است). قبل از شروع ترجمهٔ هر فایل، از همین قالب استفاده کنید تا دیگران بدانند آن فایل در حال انجام است.
39+
- **پرسش یا پیشنهاد واژه‌نامه:** برای سؤال دربارهٔ قواعد ترجمه، یا پیشنهاد اصطلاح جدید برای افزودن به `GLOSSARY.md`.
40+
- **اشکال در ترجمه:** برای گزارش ترجمهٔ نادرست یا مشکل‌دار در یک صفحهٔ منتشرشده. `msgid`، `msgstr` فعلی، و ترجمهٔ پیشنهادی خود را در قالب وارد کنید.
41+
3242
## فرایند ترجمه
3343

34-
1. فایل `.po` مورد نظر را با [Poedit](https://poedit.net) یا هر ویرایشگر متنی باز کنید.
44+
1. فایلی را انتخاب کنید و بررسی کنید آیا [ایشیوی](https://github.com/python/python-docs-fa/issues) مربوط به آن باز شده است یا نه (قالب «درخواست ترجمهٔ صفحه»). اگر باز شده و ترجمهٔ کامل آن در حال انجام است، فایل دیگری را انتخاب کنید؛ در غیر این صورت یک ایشیو باز کرده و شروع به کار کنید.
45+
2. فایل `.po` مورد نظر را با [Poedit](https://poedit.net) یا هر ویرایشگر متنی باز کنید.
3546
- در 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. اگر به اصطلاحی برخوردید که در واژه‌نامه نبود، ترجمه‌ای برای آن انتخاب کنید و به واژه‌نامه اضافه کنید.
4052

4153
### بررسی‌ها قبل از ارسال پول‌ریکوئست
4254

@@ -50,9 +62,28 @@ python3 scripts/check_markup.py your_file.po
5062

5163
روی هر پول‌ریکوئست، به‌صورت خودکار این بررسی‌ها (به‌همراه `sphinx-lint` و ساخت کامل مستندات) در GitHub Actions اجرا می‌شوند.
5264

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+
5384
## رشته‌های fuzzy
5485

55-
رشته‌های `fuzzy` یعنی ترجمهٔ قبلی وجود دارد اما به دلیل تغییر متن اصلی (یا مداخلهٔ ابزارها) باید دوباره بررسی شود. این رشته‌ها در ساختهٔ نهایی مستندات نمایش داده نمی‌شوند و در جدول `STATUS.md` نیز در ستون «Fuzzy» شمارش می‌شوند. حتماً آن‌ها را بررسی، بازنویسی و سپس علامت `fuzzy` را حذف کنید.
86+
رشته‌های `fuzzy` یعنی ترجمهٔ قبلی وجود دارد اما به دلیل تغییر متن اصلی (یا مداخلهٔ ابزارها) باید دوباره بررسی شود. این رشته‌ها در نسخهٔ نهایی ساخته‌شدهٔ مستندات نمایش داده نمی‌شوند و در جدول `STATUS.md` نیز در ستون «Fuzzy» شمارش می‌شوند. حتماً آن‌ها را بررسی، بازنویسی و سپس علامت `fuzzy` را حذف کنید.
5687

5788
## سربرگ فایل‌های `.po` و اعتبار مترجمان
5889

@@ -81,7 +112,15 @@ python3 scripts/update_po_headers.py --no-credits \
81112
python3 scripts/update_po_headers.py --merge bugs.po tutorial/
82113
```
83114

84-
> اسکریپت فقط سربرگ را تغییر می‌دهد و به متن ترجمه‌ها دست نمی‌زند، اما باگ‌های خودکار (مثل ربات‌های 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`) تا خطا را پیدا و برطرف کنید.
85124

86125
## فرایند بازبینی و نقش‌ها
87126

@@ -91,7 +130,7 @@ python3 scripts/update_po_headers.py --merge bugs.po tutorial/
91130

92131
فهرست اعضای تیم همراه با آمار مشارکت در [TEAM.md](TEAM.md) نگهداری می‌شود.
93132

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` انجام می‌شود.
95134

96135
## همگام‌سازی با نسخه‌های جدید پایتون
97136

@@ -107,6 +146,6 @@ python3 scripts/update_python_version.py v3.15.0 --keep-src
107146

108147
این اسکریپت نسخهٔ مشخص‌شدهٔ CPython را کلون می‌کند، قالب‌های gettext (`*.pot`) را از روی آن می‌سازد، فایل‌های `.po` موجود را با `msgmerge` به‌روزرسانی می‌کند، برای صفحات جدید فایل `.po` تازه می‌سازد و در پایان همهٔ فایل‌ها را با `msgfmt --check` صحت‌سنجی می‌کند. بعد از اجرای آن، خروجی را بازبینی کنید و اعتبارهای سربرگ را (در صورت نیاز با `scripts/update_po_headers.py`) به‌روزرسانی کنید.
109148

110-
## مقدار ترجمه‌ی باقی‌مانده
149+
## وضعیت ترجمه‌های باقی‌مانده
111150

112-
با `python3 scripts/translation_status.py --only-incomplete` می‌توانید وضعیت دقیق هر فایل را ببینید.
151+
با `python3 scripts/translation_status.py --only-incomplete` می‌توانید وضعیت دقیق هر فایل را ببینید.

0 commit comments

Comments
 (0)