نمایش صحیح متون فارسی در جهت چپ به راست (بخش دوم)

۱۳۹۰/۱۱/۰۵ ۱۷:۱۳ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۹۰/۱۱/۰۵ دسته بندی : ، ، ، 0

قبلا کدی را برای تصحیح نمایش صحیح متون فارسی در محیطهایی که فارسی یا یونیکد را پشتیبانی نمی کنند نوشته بودم. آن تکه کد مشکلاتی داشت که بر آن شدم تا مجددا کلاسی را برای انجام صحیح این کار تهیه کنم که مشکلات قبلی را نداشته باشد.
قبل از استفاده از این کلاس باید مطمئن باشید که کامپوننت یا برنامه مورد نظر شما از یونیکد پشتیبانی نمی کند. اما در صورتی که از یونیکد پشتیبانی کرد بهتر است که از راه حل یونیکد استفاده کنید.
در راه حل یونیکد که با استفاده از تابع CorrectPersinRtlToDisplayLtrUnicode در دسترس است کارکاکتر RTL Embedding را به ابتدای رشته اضافه می کند. وجود این کاراکتر سبب خواهد شد یا رشته مورد به صورت راست به چپ و درست نمایش داده شود و در عین حال نیز چپ چین باقی بماند (Aligned to left).
در صورتی که از عدم پشتیبانی یونیکد مطمئن هستید از تابع CorrectPersinRtlToDisplayLtr استفاده کنید. این تابع ترتیت کلمات در متون فارسی/انگلیسی را طوری جابجا می کند که متن راست به چپ بتواند به درستی در محیط چپ به راست نیز نمایش داده شود. توجه کنید متن تبدیل شده قابل برگشت نیست.
نکته مهم در مورد اعداد. به علت اینکه رفتار اعداد به RTL یا LTR بودن محیط وابسته است در برخی شرایط خاص امکان تصحیح نمایش آنها برای محیط چپ به راست وجود ندارد. این استثنا در صورتی رخ می دهد که عددی در ابتدای جمله و با فاصله از کلمه بعدی قرار بگیرد.
مثال: راست به چپ: 1 تست 2
1 تست 2
به هر ترتیب در صورت عدم وجود فاصله بعد از اولین عدد مشکلی پیش نخواهد آمد.
نکته: برای سهولت تابعی نیز برای تبدیل اعداد به معادل فارسی آنها و بالعکس که البته یونیکد نیز هستند تعبیه شده است. فراموش نشود که برای محیط یونیکد از تابع یونیکد استفاده کنید.

کدهای کلاس و برنامه مورد نظر در ادامه قابل دریافت است.

نتیجه اجرای کلاس تبدیل
دریافت کلاس و برنامه PersianLeftToRight از اینجا و یا اینجا
کدهای پروژه به صورت آنلاین از اینجا نیز قابل مشاهده است.

 

نظر خود را بیان کنید