پشت صحنهٔ توسعه
تبدیل واژه، فقط شروع ماجراست.
بخش سخت کار این است که دیار بفهمد چه زمانی یک واژه باید تبدیل شود، باقی متن را حفظ کند و در ویرایشگرهای گوناگون ویندوز با اطمینان کار کند.
این شمارها از یادداشتهای مهندسی پروژه در ۱۳ اکتبر ۲۰۲۶ آمدهاند. آنها کار مستندشده را نشان میدهند؛ رفتار همهٔ ویرایشگرها یکسان نیست.
از ابهام زبانی تا رفتار ویندوز
چه چیزهایی کار را دشوار میکرد؟
اینها نمونههایی از شکستهای واقعی در روند توسعهاند و راهکارهایی که دیار برای محافظت از متن در شرایط مبهم به کار میگیرد.
هر واژه به شاهد نیاز دارد
واژههای دوپهلو و ناآشنا را نمیتوان فقط از روی ظاهر لاتین به فارسی تبدیل کرد؛ تبدیل اشتباه ممکن است متن انگلیسی معمولی را خراب کند.
واژههای انگلیسی شناختهشده و رشتههای فنی از ابتدا محافظت میشوند. تبدیل به فارسی باید شاهد مثبت داشته باشد؛ برای fun و leg میتوان اولویت فارسی یا انگلیسی را برگزید یا از بافت نزدیک کمک گرفت.
چیدمان صفحهکلید، خودِ حروف را عوض میکند
روی چیدمان انگلیسی، کلیدهای نشانهگذاری [ ] ; ' , میتوانند حروف چ، ج، ک، گ، و باشند. جای کلیدها، نیمفاصله و پسوندهای چسبیده تبدیل سادهٔ حرفبهحرف را ناکافی میکنند.
دیار دادهٔ نسخهدار چیدمان ویندوز را میخواند و کلیدهایی را که فقط در فارسی حرفاند، شاهد زبانی میگیرد. نیمفاصله و پسوندها و ضمیرهای رایج هم در نگاشت لحاظ میشوند.
متن ترکیبی الگوهای محافظتشده دارد
ایمیل، نشانی وب، IP، مسیر فایل، شمارهٔ نسخه، عدد و کد ممکن است وسط جملهٔ فارسی باشند. تغییرشان اشتباه است؛ اما انگلیسی فرض کردن کل جمله هم میتواند جلوی تبدیل واژهٔ فارسی بعدی را بگیرد.
آشکارساز الگوهای فنی این رشتهها را پیش از امتیازدهی زبانی جدا میکند و دستنخورده نگه میدارد. مخففهای انگلیسی مثل can't هم بهعنوان انگلیسی شناسایی میشوند.
مکاننما و ویرایشگر همیشه همنظر نیستند
کلیک، چسباندن، کلید جهت یا تغییر فوکوس میتواند شروع واژه را نامعلوم کند. ویرایشگرهای Chromium گاهی متن را دیر، کهنه یا با ترتیب دیداری RTL بهجای ترتیب ذخیرهشده گزارش میکنند.
دیار تأخیر را از ناهمخوانی جدا میکند، معلوم بودن شروع واژه را دنبال میکند و انتخاب باقیماندهٔ خودش را ایمن میبندد. فقط متن تأییدشده را جایگزین میکند؛ وگرنه واژه دستنخورده میماند.
برای بعضی ویرایشگرها، پاسخ امن یعنی تبدیلنکردن
در یک مسیر از Notepad ویندوز ۱۱، درج دستهای نویسههای یونیکد میتواند چند حرف فارسی را از دست بدهد. کنترل ناخوانا یا فیلد محافظتشده هم اطلاعات کافی برای جایگزینی امن نمیدهد.
دیار آن مسیر Notepad را تشخیص میدهد و تبدیل خودکار را رد میکند. در فیلد ناشناخته، محافظتشده یا ناخوانا هم متن بدون تغییر عبور میکند تا چیزی گم یا جابهجا نشود.
بازگردانی و سرعت، بخشی از درستیاند
تبدیل اشتباه باید برگشتپذیر باشد؛ بررسی ویرایشگر هم نباید کلید بعدی را معطل کند یا پس از تغییر فوکوس آن را به فیلد دیگری بفرستد.
کلیدهای اصلی هر تبدیل خودکار برای بازگردانی یکجای Backspace نگه داشته میشوند. فرمان صریح متن و نتیجه را میسنجد؛ بررسی ویرایشگر بیرون از مسیر هوک انجام میشود و دیار هنگام انتظار کلیدی را در صف نگه نمیدارد.
نقشهٔ کار مهندسی
ده حوزه پشت ۶۳ چالش
۶۳ چالش مستندشده در ده حوزه دستهبندی شدهاند. هر بخش را باز کن تا نمونههایی از تصمیمهای مهندسی همان حوزه را ببینی.
تصمیمگیری زبانی
واژههای دوپهلو و کوتاه، بافت، حفاظت از انگلیسی و واژگان فارسی.
تصمیمگیری زبانی
واژههای دوپهلو و کوتاه، بافت، حفاظت از انگلیسی و واژگان فارسی.
- نبودن واژه در فرهنگ انگلیسی بهتنهایی دلیل تبدیل نیست؛ واژههای انگلیسی شناختهشده و الگوهای فنی پیش از تحلیل محافظت میشوند.
- اولویت زمینهای از واژهٔ فارسیِ بلافاصله قبل و نشانههای بسامد برای واژههای دوپهلو مثل fun و leg کمک میگیرد؛ واژههای یک و دوحرفی سیاست جدا دارند.
صفحهکلید و نویسهها
چیدمان فارسی، کلیدهای نشانهگذاری، نیمفاصله، پسوند، عدد و نماد.
صفحهکلید و نویسهها
چیدمان فارسی، کلیدهای نشانهگذاری، نیمفاصله، پسوند، عدد و نماد.
- نگاشت چیدمانها دادهٔ نسخهدار است، نه مجموعهای از ثابتهای پراکنده؛ کلیدهای نشانهگذاری میتوانند شاهد حروف فارسی و، گ، ک، ج و چ باشند.
- قواعد تبدیل نیمفاصله، پسوند و ضمیر چسبیده، نشانهگذاری فارسی، مبلغ ریال و تومان و ارقام فارسی اختیاری را پوشش میدهند، بیآنکه IP، ساعت، نسخه یا کد را دستکاری کنند.
ویرایشگر و مکاننما
تغییر فوکوس، متن کهنه، ایمنی انتخاب و بازگردانی مطمئن.
ویرایشگر و مکاننما
تغییر فوکوس، متن کهنه، ایمنی انتخاب و بازگردانی مطمئن.
- کلیک، جهتنما، چسباندن یا تغییر فوکوس میتواند شروع واژه را نامعلوم کند تا وقتی دیار دوباره آن را مشخص کند.
- متن دیررس، ناهمخوان، منجمد و ناخوانا حالتهای جدا هستند؛ انتخاب ناموفقِ خود دیار پاکسازی میشود و فقط هدف تأییدشده ویرایش میشود.
برنامههای گوناگون
Chromium، Notepad، ویرایشگر کد، متن غنی، ترمینال و رفتار اختصاصی برنامهها.
برنامههای گوناگون
Chromium، Notepad، ویرایشگر کد، متن غنی، ترمینال و رفتار اختصاصی برنامهها.
- مسیر مشخصی از Notepad ویندوز ۱۱ هنگام درج دستهای یونیکد میتواند حروف فارسی را گم کند؛ تبدیل خودکار در همان مسیر محدود میماند.
- قابلیت هر ویرایشگر ثبت میشود. در ویرایشگر کد و ترمینال، نوشتن مستقیم فارسی میتواند آزاد باشد اما جایگزینی خودکار محتاط میماند؛ پنجرهٔ مدیر به سطح دسترسی یکسان نیاز دارد.
فیلدهای حساس
رمز، نشانی، پرداخت و کنترل ناشناخته باید بدون تغییر عبور کنند.
فیلدهای حساس
رمز، نشانی، پرداخت و کنترل ناشناخته باید بدون تغییر عبور کنند.
- فیلد رمز، فقطخواندنی، ایمیل، نشانی وب و پرداخت محافظت میشوند؛ تا وقتی وضعیت فیلد ناشناخته باشد، دیار آن را هم محافظتشده فرض میکند.
- تایپ مستقیم هم بررسی ایمنی فیلد دارد؛ کلیدهای رمز بدون تغییر عبور میکنند و نباید وارد لاگ عیبیابی شوند.
جداسازی حالتهای تایپ
خودکار، تایپ مستقیم، Caps Lock، Shift، مکث و قواعد جداگانهٔ آنها.
جداسازی حالتهای تایپ
خودکار، تایپ مستقیم، Caps Lock، Shift، مکث و قواعد جداگانهٔ آنها.
- در هر لحظه فقط یک حالت فعال است. تایپ مستقیم نویسهٔ متناظر را بدون حدس واژه مینویسد و متن ویرایشگر را نمیخواند؛ Caps Lock و Shift فقط در حالت خودشان نقش ویژه دارند.
- هنگام مکث، بافر واژهٔ نیمهکاره پاک میشود تا کلیدهای قبل و بعد مکث به اشتباه یک واژه نشوند.
ویندوز و کارایی
هوک صفحهکلید، UI Automation، نخ پسزمینه، پایش فوکوس و TSF.
ویندوز و کارایی
هوک صفحهکلید، UI Automation، نخ پسزمینه، پایش فوکوس و TSF.
- بررسی کند ویرایشگر از هوک سطح پایین صفحهکلید بیرون رفته است؛ فرایند کمکی و watchdog نمیگذارند UI Automation ناموجود برنامه را متوقف کند.
- تغییر فوکوس اطلاعات کهنهٔ ویرایشگر را باطل میکند؛ وضعیت کلیدهای اصلاحگر پس از رفتن به دسکتاپ امن با ویندوز تطبیق داده میشود و TSF فرمانهای صریح را در ویرایشگرهای سازگار انجام میدهد.
متن راستبهچپ
جهت پاراگراف، ترکیب فارسی و انگلیسی و قواعد مخصوص هر ویرایشگر.
متن راستبهچپ
جهت پاراگراف، ترکیب فارسی و انگلیسی و قواعد مخصوص هر ویرایشگر.
- جهت پاراگراف هنگام شروع فارسی آگاهانه تنظیم میشود تا نام انگلیسی در ابتدای خط، کل پاراگراف را چپبهراست نکند.
- ویرایشگرهایی مثل Word که جهت پاراگراف را خودشان نگه میدارند مسیر ویژه دارند؛ ویرایشگرهایی که متن را موقع فاصله بازنویسی میکنند محدودیت سازگاری مشخص دارند.
آزمون و عیبیابی
ویرایشگر شبیهسازیشدهٔ نامطمئن، آزمون بازگشت، لاگ عیبیابی و CI.
آزمون و عیبیابی
ویرایشگر شبیهسازیشدهٔ نامطمئن، آزمون بازگشت، لاگ عیبیابی و CI.
- FakeEditor میتواند متن کهنه بدهد، منجمد یا ناخوانا شود یا ترتیب دیداری RTL را نشان دهد؛ TypingSession کنترلر واقعی را با این وضعیتها اجرا میکند.
- آزمون بازگشت باید در برابر رفتار قدیمی شکست بخورد. ثبت عیبیابی روی هوک صفحهکلید انجام نمیشود، فقط هنگام فعالبودن ساخته میشود و با خاموشکردن پاک میشود.
رابط و انتشار
رابط دوزبانه، نمایش فونت، ثبت نصاب، ارتقا و ذخیرهٔ تنظیمات.
رابط و انتشار
رابط دوزبانه، نمایش فونت، ثبت نصاب، ارتقا و ذخیرهٔ تنظیمات.
- کاتالوگهای متنی تایپشده تغییر زندهٔ فارسی و انگلیسی را ممکن میکنند؛ رابط فارسی از Shabnam FD و جداسازی جهت اجرای لاتین برای میانبرها و مسیرها استفاده میکند.
- نصاب دوزبانه TSF را ثبت و ارتقا را مدیریت میکند. بررسی بهروزرسانی با تأخیر و دورهای است اما چیزی را خودکار دانلود یا نصب نمیکند؛ کلید Azure در Windows Credential Manager نگهداری میشود.
هر بار یک حالت
چهار شیوهٔ تایپ
برای روش نوشتنت، حالت مناسب را انتخاب کن.
خودکار
با چیدمان انگلیسی بنویس. حالت هوشمند در پایان واژه بررسی میکند و وقتی شواهد کافی برای فارسی باشد آن را تبدیل میکند.
تایپ مستقیم فارسی
هر کلید همان لحظه نویسهٔ فارسی متناظر را مینویسد. حدس واژه در کار نیست؛ برای انگلیسی، کلید تنظیمشده را نگه دار.
سوئیچ Caps Lock
از Caps Lock برای تغییر چیدمان یا رفتار تایپ مستقیم انتخابشده استفاده کن. نقش این کلید به حالت فعال بستگی دارد.
سوئیچ Shift
Shift را نگه دار تا از چیدمان جایگزین ویندوز استفاده کنی و با رهاکردنش برگردی. این حالت چیدمان را عوض میکند و تبدیل خودکار ندارد.
زیرساخت بومی ویندوز
چرا دیار از TSF ویندوز استفاده میکند؟
Text Services Framework راه بومی ویندوز برای در اختیار گذاشتن و ویرایش متن توسط برنامههاست. دیار برای فرمانهای صریح روی متن انتخابشده از سرویس اختصاصی خودش استفاده میکند؛ بدون آنکه چیدمان فعال صفحهکلید را از انگلیسی تغییر دهد.
وظیفهای مشخص
سرویس TSF فرمانهای تبدیل واژهٔ قبلی، تبدیل متن انتخابی و بازگردانی آنها را در ویرایشگرهای پشتیبانیشده انجام میدهد. تایپ خودکار مسیر جداگانهٔ خودش را دارد.
یک ویرایشِ تأییدشده
خود ویرایشگر متن هدف را انتخاب میکند؛ دیار در یک نشست ویرایش آن را تغییر میدهد و نتیجه را دوباره میخواند. اگر متن بین بررسی و نوشتن عوض شده باشد، عملیات متوقف میشود و روی هدف تازه دوباره امتحان نمیکند.
حفاظت از زمینههای حساس
فیلد رمز، فقطخواندنی و در حال تایپ رد میشوند. سرویس فقط طول و نتیجهٔ عملیات را برای عیبیابی ثبت میکند، نه خود متن را.
ثبت هنگام نصب
نصاب سرویس را برای کاربران ویندوز ثبت میکند. برنامههایی که هنگام نصب باز بودهاند باید یکبار بسته و دوباره باز شوند تا سرویس را بارگذاری کنند.
سازگاری واقعبینانه
پشتیبانی به ویرایشگر بستگی دارد
دیار با توجه به چیزی که ویندوز و هر ویرایشگر میتوانند با اطمینان تأیید کنند رفتار میکند. این مرزها عمدیاند؛ عبارت «همهجا کار میکند» دربارهٔ رفتار فعلی دقیق نیست.
سرویسهای متنی پشتیبانیشده
فرمانهای صریح روی متن انتخابشده در ویرایشگرهایی که سرویس متنی سازگار دارند از TSF استفاده میکنند؛ نتیجهٔ عملیات هم بررسی میشود.
Chrome، Edge و Electron
متن دسترسپذیری ممکن است با تأخیر یا ترتیب متفاوت برسد. دیار متن کهنه، دیررس و ناهمخوان را از هم تفکیک میکند و از جایگزینی کور با Backspace پرهیز میکند.
Notepad ویندوز ۱۱
یک مسیر شناختهشدهٔ از دسترفتن نویسههای یونیکد، تبدیل خودکار را محدود میکند. در آن مسیر واژه همانطور که تایپ شده میماند تا حروف فارسی حذف نشوند.
فیلدهای محافظتشده و اجرای مدیر
ویندوز ورودی میان سطحهای دسترسی متفاوت را مسدود میکند. رمز، فقطخواندنی، پرداخت و فیلد ناشناخته محافظت میشوند؛ برای برنامهٔ اجراشده با دسترسی مدیر، دیار هم باید در همان سطح اجرا شود.
چیدمانهای صفحهکلید
نگاشت فیزیکی فعلی با چیدمانهای QWERTY آمریکا، US-International، بریتانیا و نیوزیلند سازگار است. Dvorak، Colemak و AZERTY در فهرست محدودیتها هستند.
سرعت بدون قربانیکردن اطمینان
هوک صفحهکلید نباید منتظر بماند
در نسخهٔ اولیه، UI Automation از داخل هوک صفحهکلید ویندوز ویرایشگر را میخواند. فشردن یک Space بین ۵۰۵ تا ۷۱۲ میلیثانیه طول کشید؛ آنقدر که ویندوز هوک کند را حذف کرد.
این زمان در بررسی همان ایراد ثبت شده و ادعای تأخیر فعلی نیست. بررسی ویرایشگر به مسیرهای worker/background منتقل شد، هر فراخوانی هوک زمانسنجی میشود و هوک حذفشده امکان نصب دوباره دارد.
آزمونهایی که میتوانند شکست بخورند
ویرایشگر بدرفتار را بازتولید کن
شمار زیاد آزمون سبز جلوی باگهای واقعی را نگرفته بود، چون ویرایشگر شبیهسازیشده همیشه پاسخ درست میداد. اکنون کنترلر واقعی تایپ در برابر ویرایشگرهایی آزمایش میشود که عمداً رفتار نامطمئن دارند.
ویرایشگر عمداً غیرقابلاعتماد
FakeEditor میتواند متن کهنه بدهد، منجمد شود، ترتیب دیداری RTL را نشان دهد یا اصلاً متن را در اختیار نگذارد؛ همان وضعیتهایی که در برنامههای واقعی دیده میشوند.
اجرای کنترلر واقعی در نشست تایپ
TypingSession کنترلر اصلی برنامه را با این رفتارها روبهرو میکند تا بازگردانی، تغییر فوکوس و پاکسازی انتخاب با هم بررسی شوند.
آزمون بازگشت باید اول شکست بخورد
برای اینکه آزمون واقعاً پوشش یک اصلاح را ثابت کند، رفتار قدیمی باید پیش از اعمال اصلاح باعث شکست آن شود.
عدد اجرای ثبتشده
یادداشتهای پروژه از بیش از ۳٬۰۰۰ آزمون در آخرین اجرای ثبتشدهٔ CI میگویند. برای اعلام عدد دقیق و بهروز باید نتیجهٔ CI دوباره بررسی شود.
اصل ایمنی
با احتیاط طراحی شده
وقتی اطمینان کافی نیست، دیار متن را تغییر نمیدهد.
- فیلدهای رمز و فقطخواندنی بدون تغییر میمانند.
- ایمیل، نشانی وب، مسیر فایل و کد بهعنوان متن فنی شناخته میشوند.
- برای کاهش تبدیل اشتباه، واژههای کوتاه فارسی با توجه به بافت نزدیک بررسی میشوند.
- اگر متن یا جای مکاننما با اطمینان تأیید نشود، جایگزینی خودکار انجام نمیشود.
- تایپ و ترجمهٔ Foundry Local محلی میمانند. فقط درخواست صریح ترجمهٔ متن انتخابشده، پس از تنظیم Azure با کلید API شخصی، همان متن را مستقیماً به Azure میفرستد و ترجمه را دریافت میکند.
در اختیار خودت
میانبرهای پیشفرض
دستورهای سریع برای اصلاح، بازگردانی و کنترل دیار.
میانبرها از تنظیمات دیار قابل تغییرند. رفتار برنامه با توجه به ویرایشگر و نوع فیلد فرق میکند؛ وقتی ویرایش امن تأییدشدنی نباشد، دستنزدن به متن رفتاری عمدی است.