پرش به محتویات

برای مترجمان

این صفحه برای کسی است که کاتالوگ را ویرایش می‌کند، نه برای کسی که کد می‌نویسد. عمداً کوتاه است، و برای آن نوشته شده که در دستورالعمل‌های مترجمانِ یک پروژه پیوند داده یا رونویسی شود.

هیچ‌چیزِ این‌جا نیازمند خواندن پایتون نیست. همه‌چیزِ این‌جا دربارهٔ یک چیز است: پاره‌های یک پیام که میان آکولاد می‌آیند.

جای‌نگهدار چیست

یک پیام در کاتالوگ ممکن است نام‌هایی میان آکولاد داشته باشد:

msgid "Hello {name}"
msgstr ""

{name} یک جای‌نگهدار است. وقتی برنامه این پیام را نشان می‌دهد، {name} را با مقداری که خودش فراهم می‌کند جایگزین می‌کند — نام یک شخص، نام یک فایل، یک عدد. جای‌نگهدار واژه‌ای برای ترجمه‌کردن نیست؛ یک خانهٔ خالی است.

ترجمهٔ شما در msgstr می‌نشیند، و باید آن خانه را نگه دارد:

msgid "Hello {name}"
msgstr "こんにちは {name}"

چه چیزی را می‌توانید عوض کنید و چه چیزی را نه

می‌توانید:

  • جای‌نگهدار را جابه‌جا کنید، به هر جایی که دستور زبانِ زبان مقصد می‌خواهد، از جمله به آغاز پیام.
  • جای‌نگهدار را تکرار کنید، اگر زبان به آن مقدار دو بار نیاز دارد.
  • هر واژهٔ دیگری را از نو بنویسید، از جمله نشانه‌گذاری، فاصله‌گذاری و ترتیب جمله.

نباید:

  • نامِ درون آکولاد را ترجمه کنید. {name} همان {name} می‌ماند، حتی در زبانی که هیچ چیز دیگرش را با حروف لاتین نمی‌نویسد.
  • آکولادها را بردارید، یا نام را بی‌آن‌ها بنویسید.
  • آکولادهای اَسکی { } را با شکل تمام‌عرضِ جایگزین کنید. بسیاری از روش‌های ورودی شکل تمام‌عرض را تولید می‌کنند؛ تقریباً یکسان به نظر می‌رسند و کار نمی‌کنند.
  • قالب‌بندی بیفزایید، مانند {name!r} یا {amount:.2f}. این‌که یک مقدار چگونه نمایش داده شود در برنامه تصمیم گرفته می‌شود، نه در کاتالوگ.
  • جای‌نگهداری از خود بسازید که در msgid نیست.

اگر پیامی به مقداری نیاز دارد که اصل آن را در اختیار نمی‌گذارد، آن پیامی است که توسعه‌دهنده باید تغییرش دهد. به‌جای دور زدنِ مسئله، آن را بگویید.

صورت‌های جمع

یک پیام شمارشی با یک خانهٔ msgstr برای هر صورت جمعِ زبان شما می‌رسد، و این زبان شماست که تعیین می‌کند چند تاست — یکی برای ژاپنی، دو تا برای آلمانی، سه تا برای روسی، شش تا برای عربی. هر خانه‌ای را که کاتالوگ به شما می‌دهد پر کنید.

دو قاعده که مردم را غافلگیر می‌کند:

  • خانه‌ها «مفرد، جمع، جمع‌ترک» نیستند. هر نمایه هر معنایی دارد که قاعدهٔ جمعِ زبان شما می‌گوید. صورت سومِ لتونیایی تنها برای صفر است؛ صورت دومِ اسلوونیایی برای دقیقاً دو؛ و ولزی حالت عام را در نمایهٔ ۰ و مفرد را در نمایهٔ ۱ می‌گذارد.
  • دو خانه به‌حق می‌توانند همان متن را داشته باشند. در ترکی، مجاری، فارسی و بنگالی اسم پس از عدد مفرد می‌ماند، پس هر دو صورتِ یک پیام شمارشی همان یک رشته‌اند. این درست است، نه لغزشِ رونوشت‌وچسباندن.

قاعده‌های جای‌نگهدارِ بالا برای هر صورت به‌طور مستقل برقرارند.

مدخل‌های fuzzy

مدخلی که fuzzy علامت خورده حدسِ یک ماشین است: توسعه‌دهنده پیام اصلی را عوض کرده و ابزار متن تازه را با ترجمهٔ کهنهٔ شما جفت کرده تا جایی برای شروع داشته باشید.

#, fuzzy
msgid "Welcome back, {name}"
msgstr "こんにちは {name}"

یک مدخل fuzzy به‌دست برنامه به کار نمی‌رود — به‌جایش اصلِ ترجمه‌نشده را نشان می‌دهد — تا زمانی که کسی متن را بازبینی و نشانِ fuzzy را حذف کند. بیشتر ویرایشگرهای PO دقیقاً برای همین یک دکمه دارند.

خواندن یک پیام خطا

ابزار هنگام کامپایل‌شدنِ کاتالوگ جای‌نگهدارها را بررسی می‌کند، و پیام برای شما نوشته شده است نه برای یک برنامه‌نویس. گزارش‌کردنِ صرفِ این‌که {name} غایب است بن‌بست است، وقتی همان نویسه‌ها را پیش چشم خود می‌بینید؛ پس هر جا جای‌نگهدار حاضر به نظر می‌رسد اما نیست، پیام دلیلش را می‌گوید. در برابر اصلِ Hello {name}، هر یک از این‌ها زیر عنوانِ translation does not match the source placeholders: گزارش می‌شود:

ترجمهٔ شما می‌گوید دلیلی که ابزار می‌دهد
こんにちは {name} {name} is missing (the braces around it are not the ASCII { and })
こんにちは {{name}} {name} is missing (it is written {{name}}, which is how a literal brace is escaped)
こんにちは name {name} is missing (the name appears, but not inside braces)
こんにちは {名前} {name} is missing; {名前} is not in the source message

نویسه‌هایی که دیده نمی‌شوند رفتار ویژهٔ خود را دارند. یک فاصلهٔ بی‌شکستِ درونِ آکولادها چیزی است که روش ورودی تولیدش می‌کند و هیچ ویرایشگری نشانش نمی‌دهد، پس پیام آن را با نقطه‌کدش چاپ می‌کند به‌جای نام‌بردن از نویسه‌ای که هرگز نمی‌توانستید بیابیدش:

placeholder {<U+00A0>name} has a space inside the braces; write {name}

نامی که حروفش نظام‌های نوشتاری را درهم می‌آمیزد — حالتِ هم‌نگاره، جایی که аی سیریلیک از لاتینش تشخیص‌ناپذیر است — دو بار نشان داده می‌شود، یک بار خوانا و یک بار گریزدار، و این تنها شکلی است که آن دو را از هم بازمی‌شناساند:

translation does not match the source placeholders: {name} is missing;
{nаme} (n\u0430me) is not in the source message

همین ابهام‌زدایی وقتی هم برقرار است که نامی یونانی یا سیریلیک که یکسره در یک خط نوشته شده با نامِ اَسکیِ مبدأ ناسازگار باشد، از جمله حالتِ تک‌حرفیِ aی لاتین در برابر аی سیریلیک.

اگر به یکی از این‌ها برخوردید و راه‌حل بدیهی نبود، حرکتِ امن این است که جای‌نگهداری را که تایپ کرده‌اید حذف کنید و آن یکی را از msgid رونویسی کنید.

آنچه بررسی‌ها نمی‌توانند بکنند

ابزار وارسی می‌کند که جای‌نگهدارهای شما دست‌نخورده باشند. نمی‌تواند بگوید که ترجمه دقیق، طبیعی یا مناسبِ بافتار هست یا نه — آن یکسره بر عهدهٔ شما می‌ماند.

دو چیز بیش از هر بررسی‌ای کمک می‌کنند:

  • یادداشتِ مترجم را بخوانید. خطی که بالای پیام با #. آغاز می‌شود توسعه‌دهنده است که به شما می‌گوید پیام کجا ظاهر می‌شود و چه معنایی دارد.
  • دربارهٔ msgctxt بپرسید. وقتی همان واژه دو بار با بافتارهای متفاوت می‌آید، از آن روست که آن دو باید متفاوت ترجمه شوند — مثلاً «Open»ِ دکمه و «Open»ِ وضعیت.