وقتی توی یک سایت، پیامرسان یا اپلیکیشن متنی فارسی و انگلیسی را با هم مینویسیم، ممکن است جای کلمات، پرانتزها، عددها یا علائم نگارشی به هم بریزد:
قبل از مشخصکردن جهت متن
دلیلش این است که سیستم باید با «الگوریتم دوجهتهٔ یونیکد» یا Unicode Bidirectional Algorithm تشخیص بدهد هر بخش از متن در چه جهتی نمایش داده شود. ویرایشگرهای کامل معمولاً دکمهٔ راستبهچپ دارند، اما در فیلدهای سادهٔ متنی یا بعضی شبکههای اجتماعی چنین گزینهای در دسترس نیست.
راهحل سریع برای یک خط فارسی
در بیشتر موارد کافی است کاراکتر نامرئی Right-to-Left Mark با کد U+200F را ابتدای خط بگذارید. این کاراکتر به برنامه میگوید جهت پایهٔ خط راستبهچپ است، بدون اینکه ترتیب واقعی حروف را تغییر بدهد.
برای واردکردن RLM باید کد 200F را با روش مناسب سیستمعاملتان تایپ کنید؛ روشها در ادامه آمدهاند.
بعد از اضافهکردن RLE؛ راهحل نسخهٔ اولیهٔ این نوشته
وقتی یک بخش از متن جهت متفاوتی دارد
اگر فقط بخشی از یک متن باید مستقل و راستبهچپ باشد، روش مدرن یونیکد استفاده از این دو کاراکتر است:
RLIبا کدU+2067در ابتدای بخش راستبهچپPDIبا کدU+2069در انتهای آن بخش
یعنی متن به شکل RLI + متن فارسی + PDI ذخیره میشود. برای یک بخش انگلیسی داخل محیطی چپبهراست هم میتوان از LRI با کد U+2066 و سپس PDI استفاده کرد.
راهحل قدیمیتر: RLE
راهحل نسخهٔ اولیهٔ این نوشته این بود که ابتدای هر خط یک Right-to-Left Embedding یا RLE با کد U+202B بگذاریم. این روش هنوز معتبر است و بهخصوص برای نرمافزارهای قدیمیای که isolateهای جدید را پشتیبانی نمیکنند میتواند مفید باشد.
برای واردکردن RLE باید کد 202B را با روش مناسب سیستمعاملتان تایپ کنید؛ روشها کمی پایینتر آمدهاند.
اگر RLE را برای بخشی از یک خط استفاده میکنید، محدودهٔ آن را با Pop Directional Formatting یا PDF با کد U+202C ببندید:
RLE + متن فارسی + PDF
برای واردکردن PDF هم به همین روش از کد 202C استفاده کنید.
گذاشتن RLE در ابتدای یک خط و نبستن آن معمولاً تا پایان همان پاراگراف جواب میدهد؛ همان روشی که در نسخهٔ قدیمی پیشنهاد شده بود. بااینحال، اگر متن بعداً کپی، ترکیب یا داخل متن دیگری قرار داده شود ممکن است جهت بخشهای بعدی را هم عوض کند. به همین دلیل بهتر است آن را با PDF ببندید.
پس انتخابها بهترتیب اینها هستند:
- برای تعیین جهت پایهٔ یک خط،
RLMمعمولاً سادهترین گزینه است. - برای محصورکردن یک بخش در نرمافزارهای امروزی،
RLI/LRI … PDIپیشنهاد میشود. - برای سازگاری با نرمافزارهای قدیمی،
RLE/LRE … PDFهمچنان قابل استفاده است.
استاندارد یونیکد RLE و LRE را حذف نکرده است؛ فقط برای متنهای جدید isolateها را ترجیح میدهد، چون اثرشان به بیرون از محدوده نشت نمیکند.
چجوری کاراکتر یونیکد را تایپ کنیم؟
سیستمهای لینوکسی
در بیشتر برنامههای GTK مثل Firefox و ویرایشگرهای GNOME:
Ctrl+Shift+Uرا بزنید.- کلیدها را رها کنید و کد را بدون
U+تایپ کنید؛ مثلاً200Fبرای RLM یا202Bبرای RLE. EnterیاSpaceرا بزنید.
این میانبر در همهٔ برنامههای لینوکس، بهخصوص بعضی برنامههای Qt، لزوماً کار نمیکند.
مک
ابتدا از تنظیمات Keyboard، ورودی Unicode Hex Input را اضافه و انتخاب کنید. بعد کلید ⌥ Option را نگه دارید، کد چهاررقمی مثل 200F یا 202B را تایپ کنید و کلید را رها کنید.
ویندوز
ویندوز میانبر عمومی و فعالی برای واردکردن کد هگز یونیکد در همهٔ برنامهها ندارد. در Word و بعضی برنامههایی که از Rich Edit پشتیبانی میکنند، کد موردنظر مثل 200F یا 202B را تایپ و سپس Alt+X را بزنید. برای برنامههای دیگر، کپیکردن کاراکتر یا ساختن یک Text Replacement معمولاً سادهتر است.
موبایل
اندروید و iOS هم روش یکسان و عمومی برای تایپ این کدها ندارند. اگر زیاد به آن نیاز دارید، کاراکتر را کپی کنید و برایش یک میانبر در تنظیمات جایگزینی متن بسازید.
اگر خودتان سایت یا اپلیکیشن میسازید
بهتر است از کاراکترهای نامرئی بهعنوان راهحل اصلی رابط کاربری استفاده نکنید. در HTML جهت را با ویژگیهای معنایی مشخص کنید:
| |
dir="auto" برای محتوای تولیدشده توسط کاربر مفید است و <bdi> اجازه نمیدهد جهت یک مقدار ناشناخته روی متن اطرافش اثر بگذارد.
یک نکتهٔ مهم دربارهٔ کاراکترهای نامرئی
این کاراکترها هنگام جستوجو، کپیکردن، مقایسهٔ متن یا بررسی کد ممکن است دردسرساز شوند. از RLO و LRO برای برعکسکردن اجباری ترتیب کاراکترها استفاده نکنید؛ این کنترلها میتوانند ظاهر متن و کد را گمراهکننده کنند. تا جای ممکن از تنظیم جهت در خود ویرایشگر یا از dir در HTML استفاده کنید.
برای جزئیات بیشتر میتوانید استاندارد Unicode Bidirectional Algorithm و راهنمای W3C دربارهٔ کنترل جهت متن را ببینید.