رقم فارسی یک ویژگی فونت نیست
عدد فارسی این سایت را fa-IR میسازد و وزیرمتن میکشد. Inter آن محدوده را ندارد، OpenType رقم را عوض نمیکند، و ستارهٔ گیتهاب لاتین میماند.
انتظار رایج این است که فونت، رقم لاتین را فارسی کند. این سایت آن کار را نمیکند. نویسهی رقم پیش از رنگ شدن انتخاب میشود، با fa-IR. وزیرمتن بعداً برای همان نویسه گلیف دارد، چون رقم فارسی داخل بلوک عربی است و فایل متغیر وزیرمتن آن بلوک را دارد. Inter در استایل سراسری فقط لاتین و لاتین گسترده است. در fonts.css ویژگیای نیست که شکل رقم را عوض کند.
یادداشت کوتاه راستبهچپ را از روز اول بگذار خوشهی همین موضوع است. مقالهی دو مسیر، نه یک صفحهی وارونه از lang و تقویم میگذرد. این یکی فقط روی رقم و فونت میماند.
رقم، نویسهی دیگری است
toLocaleString('fa-IR') و Intl.NumberFormat('fa-IR') رقم را فارسی مینویسند. این جایگزینی در CSS نیست. کد عدد را به رشتهای از نویسههای فارسی تبدیل میکند و بعد آن رشته وارد متن میشود.
دقایق مطالعه در صفحهی نوشته همینطور است. آمار خانهی سایت، درصد زبانها در پروژهها، و شمارندهای که در motion.ts بالا میرود هم همینطور. آن شمارنده فقط وقتی document.documentElement.lang با fa شروع شود از fa-IR استفاده میکند. سند فارسی fa-IR است، پس شرط برقرار است. سند انگلیسی en-US است و همان تابع رقم لاتین میسازد.
کارت نوشته جداگانه قالب میکند: useGrouping: false. عدد کوچک جداکنندهی هزارگان نمیگیرد. ریل کنار خانهی سایت یک کار اضافه دارد. padStart با نویسهی ۰ پر میکند، نه با 0 لاتین. رشتهی یکرقمی فارسی هنوز یک نویسه است. اگر پرکننده لاتین بود، کنار رقم فارسی یک صفر بیگانه مینشست.
تاریخ همان صفحه از راه دیگری فارسی میشود، ولی شکل رقم و نام ماه هر دو از زبان میآیند. formatDate روی عنصر time مینشیند. دقیقه کنارش جدا قالب شده است. یکی تقویم و روز است، یکی شمارِ خواندن. هر دو، روی صفحهی فارسی، رقم فارسی دارند چون هر دو fa-IR گرفتهاند.
دو خانواده، دو محدوده
روی html ترتیب پیشفرض Inter است، بعد وزیرمتن، بعد فونت سیستم. html:lang(fa) ترتیب را برمیگرداند. انتخابگر :lang(fa) است، که fa-IR را هم میگیرد. انتخابگر دقیق html[lang='fa'] با سندی که زبانش fa-IR است جور نمیشود و وزیرمتن را جلو نمیاندازد.
وزیرمتن از @fontsource-variable/vazirmatn میآید. یکی از محدودههایش بلوک عربی است، از U+0600. رقمهای فارسی U+06F0 تا U+06F9 داخل همین بلوکاند. Inter در fonts.css دو فایل دارد: لاتین و لاتین گسترده. هیچکدام به بلوک عربی نمیرسند. پس رقم فارسی را Inter نمیکشد، حتی اگر جایی روی صفحهی انگلیسی ظاهر شود. به وزیرمتن یا به فونت سیستم میافتد.
رقم لاتین U+0030 تا U+0039 در محدودهی لاتین هر دو فونت هست. روی صفحهی فارسی وزیرمتن اول است، پس رقم لاتین داخل نام یک ریپازیتوری معمولاً از لاتینِ وزیرمتن میآید، نه از Inter. جایی که خانواده مشخصتر باشد، این ترتیب عوض میشود. پالت فرمان با ui-monospace شروع میشود و وزیرمتن را پشت سر آن میگذارد. بوم معرفی، برای هر دو زبان، وزیرمتن را اول مینویسد. تصویر اشتراک فایل جداگانهی Vazirmatn-Bold.ttf است، نه فونت متغیر صفحه.
وزن، فاصلهی سطر و حرکت در حروف، فاصله، و حرکت صفحه است. این صفحه آنها را تکرار نمیکند.
همهی عددها فارسی نیستند
ستاره و انشعاب روی کارت پروژه عدد خام جاوااسکریپتاند، داخل dir="ltr". از toLocaleString رد نمیشوند. نام ریپازیتوری، زبان، موضوعها، و دکمهی ⌘K هم جزیرهی چپبهراستاند. بلوک کد در نوشته direction: ltr دارد.
پس جهت و شکل رقم دو تصمیماند. جزیرهی چپبهراست میتواند رقم فارسی را هم نگه دارد، اگر رشته قبلاً قالب شده باشد. ماههای نوار فعالیت خانه با fa-IR-u-ca-persian ساخته میشوند و بعد داخل شبکهای با dir="ltr" مینشینند. برچسب ماه فارسی است. ستون هفتهها آینه نمیشود.
درصد زبانها از تابع num میگذرد و روی صفحهی فارسی فارسی است. همان صفحه، کنارش، ستاره را لاتین نشان میدهد. این ناهمخوانی عمدیِ یک قانون سراسری نیست. هر جا عدد ساخته شده، قالب همانجا تصمیم گرفته است.
تقویم و شکل رقم یکی نیستند
formatDate تاریخ نوشته را با fa-IR میسازد. در Intl امروز این زبان هم تقویم هجری خورشیدی است و هم رقم فارسی. formatMonth و نوار فعالیت خانه صریحترند: fa-IR-u-ca-persian. پرکارترین روز پروژهها به Intl گزینهی calendar: 'persian' میدهد.
ساعت دربارهی من Intl.DateTimeFormat است با همان زبان صفحه، و timeZone: 'Asia/Tehran'. برچسبش «ساعت من در تهران» است. کلاس ساعت font-variant-numeric: tabular-nums میخواهد، و عددهای آمار خانه هم همین ویژگی را دارند. این درخواستِ رقم همعرض است. خود نویسهها هنوز از Intl میآیند. استایل سراسری ویژگی OpenType برای تعویض رقم لاتین و فارسی ندارد.
رقم روی بوم، جدا از شبکهی لاتین
شهر کامیتها شمار روز پرکار را با Intl.NumberFormat و زبان همان صفحه مینویسد و روی یک sprite میگذارد. تاریخ همان صحنه، وقتی صفحه فارسی است، calendar: 'persian' میگیرد. شبکهی خانههای فعالیت چیز دیگری است و dir="ltr" میماند. یک نما میتواند هم برچسب با رقم فارسی داشته باشد و هم شبکهای که ستون هفتههایش آینه نمیشود.
آمار خانه و درصد زبانها toLocaleString را با گروهبندی پیشفرض صدا میزنند. کارت نوشته گروهبندی را با useGrouping: false خاموش میکند. عدد بزرگ مشارکت روی خانه جداکننده میگیرد. دقیقهی مطالعه روی کارت نه. هر دو فارسیاند اگر صفحه فارسی باشد. تفاوت در جداکننده است، نه در فونت.
تصویر اشتراک این رقمها را نمیسازد. فایل Bold وزیرمتن را بار میکند و جهت را روی SVG جدا میگذارد. اگر عنوان نوشته خودش رقم داشته باشد، همان نویسهای است که در مارکداون آمده، نه خروجی تازهی fa-IR. آمار صفحه به آن PNG نمیرسد.
جهت صفحه این انتخاب را عوض نمیکند. dir میگوید سطر از کدام لبه شروع شود. نمیگوید 4 کدام نویسه باشد. آن تفاوت در جهت صفحه همهی کار را نمیکند است.
مسیر جدا، رقم جدا
فارسی و انگلیسی فایل HTML را شریک نمیشوند. خانهی فارسی آمار را با fa-IR میسازد و خانهی انگلیسی با en-US. اگر هر دو زبان یک سند بودند و فقط dir عوض میشد، همان رشتهی عدد به هر دو میرسید. اینجا تابع قالب هنگام ساخت صفحه زبان را میگیرد. جزئیات آدرس و hreflang در ترجمه یک فایل دوم است است.
صفحهی همکاری میگوید چه کاری خوشامد است. تنها تماس عمومی تلگرام است، @MH759.
اگر یک چیز از این صفحه بماند این است: رقم فارسی را فونت اختراع نمیکند. fa-IR نویسه را میسازد، وزیرمتن بلوک عربی را میکشد، و عددی که از این قالب رد نشده لاتین میماند.