راه حلی برای رفع مشکل زبان فارسی با پلتفرم فلش ، فارسی نویسی در فلش

apolon_021

Member
قبلا یک کمپوننت به نام PTC جهت حل مشکل فارسی نویسی در فلش توسط اعضای گروه اجرا شد که در طراحی و اجرای سایت Fateh Sanat مورد استفاده قرار گرفت اگر چه در کل کارا و عملی بود اما بازهم مشکلات خاص خود را نیز در بر داشت که یکی از آنها عدم توانایی PTC جهت استفاده با متن و فونت Embed شده بود که در نمونه ای که اینجا به بحث درباره آن می پردازیم این مشکل هم حل شده است و در کل کامل تر از ورژن قبلی است و عملا کارایی استفاده جهت مصارف تجاری را دارا می باشد

قرار بود یک سری مقاله جهت بررسی مشکلات فارسی نویسی در فلش و ارایه راه حل های آن در اینجا نوشته شود و باقی کار به خود کاربر واگذار گردد ، به عبارتی ما تنها راه را نشان دهیم و پیمودن آن با خود کاربر باشد اما یادمان آمد که احتمال اینکه کسی بنشیند و بر اساس راه حلهای ما اکشن ها را خودش بنویسد کم است و حتی اگر کسی پیدا شود که بخواهد اینکار را انجام دهد ممکن است توانائی کافی برای این عمل را نداشته باشد و یا به قول دوستی اگر قرار است کاری را انجام دهیم بگذارید درست و کامل باشد پس این مقاله کلا به عنوان اخرین مقاله جهت حذف مشکل فارسی نویسی در فلش و همچنین فارسی نویسی در فلکس و ارایه یک چیدمان RTL تقریبا صحیح ، ارایه می شود که امیدواریم راهگشای دوستان و عزیزان طراح باشد .

لطفا توجه داشته باشید که ماژول PTC برای رفع مشکل فارسی نویسی برای متون داینامیک می باشد و دوستانی که به متنهای Static نیازمند هستند از نرم افزارهای جانبی استفاده کنند .
ماژول PTC یک فایل SWF می باشد که برای رفع مشکل نمایش متون فارسی در فلش با AS 2.0 و همچنین AS 3.0 طراحی و اجرا گشته است ، این ماژول بر اساس نفس اصلی موجودیت irdevs.com یعنی کمک و همکاری و ارایه تجربیات درونی گروه ، در اختیار دوستان قرار می گیرد تا حداقل راهگشای قسمتی از مشکلات طراحان و توسعه دهندگان تکنولوژی فلش با زبان فارسی باشـــد . PTC توانایی ارایه یک چیدمان صحیح RTL و تا حدودی Justify را برای متون داینامیک فارسی در بر دارد .

PTC برای اکشن اسکریپت 2.0

قبلا یک کمپوننت به نام PTC جهت حل مشکل فارسی نویسی در فلش توسط اعضای گروه اجرا شد که در طراحی و اجرای سایت Fateh Sanat مورد استفاده قرار گرفت اگر چه در کل کارا و عملی بود اما بازهم مشکلات خاص خود را نیز در بر داشت که یکی از آنها عدم توانایی PTC جهت استفاده با متن و فونت Embed شده بود که در نمونه ای که اینجا به بحث درباره آن می پردازیم این مشکل هم حل شده است و در کل کامل تر از ورژن قبلی است و عملا کارایی استفاده جهت مصارف تجاری را دارا می باشد .

قبل از اینکه ادامه دهیم یک نمونه کار با PTC را مشاهده کنید ، این فایل با استفاده از AS 2.0 و لود دیتا از XML اجرا شده است که معمولا مصرف اصلی فلشکارا تا جا افتادن فلش پلیر 9 و اکشن اسکریبت 3.0 می باشد .

می توانید نمونه را اینجا ببینید : PTC Test

get-7-2009-upload2world_com_eskjd.jpg

PTC در ارایه یک چیدمان RTL صحیح تقریبا موفق است اما از نظر Jutify ممکن است بر اساس نوع نوشته و سایز آن متفاوت و در بعضی مواقع ضعیف عمل کند، در نمونه بالا سایز نوشته 9 و البته سایز کوچکی است از این رو ایرادات مربوط به Jutify زیاد مشخص نیست که طبق معمول امیدواریم که در نسخه بعدی بهتر شود لازم به ذکر است تابع justify از ورژن AS3.0 این ماژول حذف شده است .

با توجه به اینکه این نوشتار فقط جهت معرفی PTC است ، آموزش کامل تری برای استفاده از آن را به بعد موکول می کنیم هر چند آموزشی لازم نیست و با دانلود فایلهای آخر مبحث به راحتی متوجه نحوه استفاده از آن خواهید شد با این حال چند توضیح کوچک را برای پروژه های فلش با اکشن اسکریپت 2.0 ملاحظه کنید .

مراحل استفاده از PTC به شرح زیر خواهد بود ، لازم به ذکر است که این مراحل تنها مختص ورژن AS 2.0 می باشد و برای AS 3.0 و استفاده در فلکس به صفحه 3 مراجعه کنید

1- ابتدا باید PTC که به صورت یک فایل SWF است را به درون فایل اصلی لود کنید و یک تکست فرمت TextFormat برای تعیین فونت و اندازه نوشته ها تعریف کنید

PHP:
ActionScript:
var fmt:TextFormat = new TextFormat();
fmt.font = 'tahoma';
fmt.size = 9;
var __ptc:MovieClip = _root.createEmptyMovieClip('ptc', -18000);
var __mcl:MovieClipLoader = new MovieClipLoader();
__mcl.loadClip('PTCAS2.swf',__ptc);

از اینجا به بعد دو راه حل پیش رو دارید:

الف : استفاده از توابع کمکی PTC
برای استفاده از توابع کمکی PTC شما باید فایل xml را مطابق نمونه و بر اساس node و attribute برای PTC ارسال کنید و توابع درونی PTC را به شرح زیر مورد استفاده قرار دهید .

1- PTC بعد از لود کامل خود ، در root مووی مادر به دنبال یک تابع با نام ptcLoaded خواهد بود که در صورت تعریف این تابع از سوی برنامه نویس ، اجرا خواهد شد و شما می توانید دستور لود XML را از درون این تابع ارسال کنید

PHP:
function ptcLoaded(mc) {
    lod.text = "Loading XML File";
    __ptc.loadXml('ptc.xml',xmlLoaded);
}

2- PTC دارای یک تابع لود XML با نام loadXml نیز می باشد که بر اساس نمونه همراه ماژول ، دیتا را لود کرده و در یک آرایه دسته بندی می کند و شما با استفاده از نام node و attribute مربوطه به متون مورد نظر دسترسی خواهید داشت در کد بالا بعد از لود PTC تابع ptcLoaded اجرا خواهد شد و این تابع آدرس فایل xml و تابعی که با پایان یافتن لود فایل xml باید اجرا شود را برای تابع loadXml ارسال می کند و در نهایت مطابق کد زیر پس از اینکه لود xml پایان یافت تابع فرستاده شده xmlLoaded اجرا می شود و تابع اصلی PTC یعنی getPerText را فراخوانی می کند ، آرگمانها به ترتییب نام Node ، نام attribute ، عرض متن ، TextFormat مورد نظر و تعیین Justify می باشد .

PHP:
function xmlLoaded(__xml:XML) {
txt1.text =  __ptc.getPersianText('Text', 'txt1', 170, fmt, true, ) ;
}

ب : استفاده از تابع doPersianText

در صورتی که نخواهید از توابع خود PTC برای لود و دسترسی به دیتا استفاده کنید مستقیما تابع doPersianText را فراخوانی کنید ، آرگمانها به ترتییب ، متن شما ، عرض متن ، TextFormat مورد نظر و تعیین Justify می باشد .

PHP:
function xmlLoaded(__xml:XML) {
txt9.text = __ptc.doPersianText(__str, 350, fmt, true) ;
}

نکته : در روش اول ( الف ) تابع getPersianText درخواستهای تکراری را شناسایی می کند و عملیات تبدیل را تکرار نخواهد کرد و متن تصحیح شده را مستقیما از حافظه فراخوانی خواهد کرد .

PTC ابتدا جملات را با توابع داخلی خود از XML لود می کند ، سپس فاصله های اضافه و Break Line های اضافه را از متن حذف می کند و در کل به تمیز کاری متن می پردازد در مرحله بعد بر اساس اندازه داده شده از طرف کاربر کلمات را در جملات جای می دهد و ترتیب نمایش جملات به صورت صحیح را اعمال خواهد کرد و آرایه را برای تابع اصلی که وظیفه تصحیح چیدمان کلمات را به عهده دارد ، ارسال می کند و در انتها در صورت درخواست کاربر Jutify روی متن صورت می پذیرد و متن اصلی بازگشت داه می شود .

PTC برای فلکس و اکشن اسکریپت 3.0

فلکس و کمپوننتهای آن از AS 3.0 پشتیبانی می کند و در صورتی که ما یک فایل SWF را با اکشن های ورژن 2.0 به درون آن لود کنیم ، کمپایلر این اکشن ها را نادیده خواهد گرفت و عملا PTC با اکشن اسکریپت 2.0 برای فلکس قابل اجرا نبود از این رو ورژن دیگری از PTC با اکشن اسکریپت 3.0 بر اساس همان توابع و ساختار AS 2.0 اجرا شد که همان قابلیتها را برای فلکس و فایلهای SWF با اکشن اسکریپت 3.0 به همراه داشت اگر چه نوشتن دوباره PTC از ابتدا با استفاده از توابع جدید AS 3.0 کاری بهینه تر را ارایه می کرد اما به دلایل مختلف ( طبق معمول مشکلات کاری ) فعلا صرف نظر کردیم و با کمی تغییر در ساختار برنامه اصلی PTC این کمپوننت قابلیت استفاده در فلکس را نیز کسب کرد و به عنوان مثال می توانید ، نمونه زیر که در فلکس و بر اساس همان متون فایل قبلی اجرا شده است را ببینید :
get-7-2009-upload2world_com_olvmj.jpg

به دلیل محدودیتهایی برای توسعه بیشتر ورژن AS 3.0 ماژول PTC ، قواعد ورژن AS 2.0 در اینجا قابل اجرا نیست ، با بررسی کد MXML نمونه پیوست در انتهای مطلب و مخصوصا تگ SCRIPT به راحتی همه چیز مشخص است با این حال چند توضیح کوچک :

1- ابتدا از Event های درونی Application در اینجا initialize برای لود بلافاصله PTC استفاده می کنیم
PHP:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
layout="vertical" width="520"
    initialize="init()"
و تابع نسبت داده شده در اینجا init را به شکل زیر تعریف می کنیم
PHP:
public var __lod:Loader =  new Loader();
public var __req:URLRequest = new URLRequest("PTCAS3.swf")
public var __ptc:MovieClip
public var __fmt:TextFormat =  new TextFormat();
public function init():void
{
     CursorManager.setBusyCursor();
    __lod.contentLoaderInfo.addEventListener(Event.INIT , ptcLoaded);
    __lod.load(__req)
     function ptcLoaded(e:Event):void
    {
        __ptc = __lod.content as MovieClip
        // a delay ,to Ptc initialize its contents
        setTimeout(function ():void {
            hts.send() // send httpService !
              },200) 
        
    }
    __fmt.font = "tahoma";
    __fmt.size = 10
}
و همه چیز تمام است و هر زمان که خواستید متن خود را تصحیح کنید مطابق روش دوم در AS 2.0 از تابع doPerianText استفاده می کنیم و چون تابع justify در این ورژن موجود نیست آرگمانها به 3 عدد تقلیل یافته است :
PHP:
function myFunc(__xml:XML) {
txt9.text = __ptc.doPersianText(__str, 350, fmt ) ;
}
فایل MXML اصلی نمونه بالا به همراه پکیج اصلی ورژن AS 3.0 می باشد و با بررسی آن بهتر متوجه روش کار خواهید شد هر چند استفاده از PTC بسیار ساده و راحت است و با دانلود فایل متوجه روش کار خواهید شد .

آنچه در اینجا ارایه شد حاصل تلاش چند ماهه ( گاه و بی گاه ! ) دوستان و البته ثمره تجربه چند ساله انها می باشد و به نوبه خود اگر چه چیز کوچکی است اما بهترین راه حل برای رفع مشکل فارسی نویسی در فلش و فلکس ( در حال حاظر البته ! ) می باشد . PTC همانگونه که در ابتدا توضیح داده شد یک پروژه داخلی بود بنابر این مشکلات و محدودیتهای که ممکن بود در روند کار پیش آید به طرق مختلفی توسط دوستان حل و رفع می شد و ماژولی که اینجا ارایه می شود دقیقا همان ماژول مورد استفاده اعضا گروه می باشد بنابراین قابل پیشبینی است که استفاده عمومی آن مشکلات خاص خود را نیز به همراه داشته باشد چرا که PTC از ابتدا برای یک استفاده عمومی طراحی نشده است لذا تا ارایه ورژنهای بعدی و آموزشهای مربوطه ، هر نوع مشکل و یا ایرادی که در طول استفاده از برنامه پیش آمد را با ما در میان بگذارید .
PTC0.png


هر برنامه و نرم افزاری در صورتی که با یک ورودی غلط مواجه شود خروجی غلط را ارایه خواهد داد از این رو چند توصیه زیر را جهت نوشته ها و متون در خاطر داشته باشید :

1- PTC بر اساس Space فاصله و فضای خالی بین کلمات کار می کند لذا در فواصل کلمات دقت کنید و به یاد داشته باشید فضای اضافی بین کلمات به هیچ عنوان مشکل ساز نیست چرا که در روند برنامه خود به خود حذف خواهد شد .
2- PTC بر خلاف نمونه های مشابه به هیچ عنوان با Break Line مشکلی ندارد بنابراین در صورتی که متن شما در جای خاصی احتیاج به یک خط فاصله با خط بالایی داشت یک بریک لاین یا خط خالی اضافه کنید
3- متون انگلیسی را حتما با فاصله از متون فارسی قرار دهید هرچند PTC خودش این عمل را انجام خواهد داد اما از جهت ارایه یک کار تمیز این نکته را فراموش نکنید .
4- نکته شماره 3 را برای استفاده ار کاما و پرانتز و نقطه و دونقطه و براکت و ... نیز در نظر داشته باشید .


چند نکته کلی اما مهم در مورد ماژول PTC :

1- به دلایل مختلفی فایل اصلی ماژول PTC به صورت SWF و کد شده ارایه می شود و دوستانی که فکر می کنند این فایل کد شده رفع نیاز آنها را نمی کند لطفا با ما تماس بگیرن و در صورتی که با دلایل قانع کننده نیاز به دریافت سورس داشتن حتما در اختیار آنها قرار خواهد گرفت .
2- تغییر نــام ماژول فعـلی ممکن نیست، در ورژنهای بعدی این محدودیت حذف می گردد .
3- این ماژول که الان می خواهید انرا دانلود کنید (شایدم نخواهید! ) به زودی تغییر خواهد کرد و بهینه خواهد شد پس سعی کنید پیگیر ورژنهای Uptodate باشید
4- به زودی یـک آمـوزش با مثالهای بیشتر از نحوه کار PTC و توضیــح تـوابع ارایه خواهد شد .
5- اصولا کار بی عیب کار خداست ، ایرادی ، مشکلی بود مطرح کنید تـا با هم فکری هم ماژول بهتری بسازیم .
6- سـورس کامل ورژن AS 3.0 مـاژول ، پس از بهینـــه سازی و توسعه با تـوابع جدید AS 3.0 ارایه خواهد شـد .

پکیچ زیر شامــل کل مــاژولها هم AS 2.0 هــم AS 3.0 و هم ســورس نمونــه های ارایه شده در این نوشتـــار مـــی باشــــد.

download PTC Module Files
 
آخرین ویرایش:

BioDread

Banned
دوست من
ptc رو با fs یا fc مقایسه کردید؟

لطفا مزیت این فایل swf روبگید نسبت به بقه کلاس ها!!!
 

arjmand200

Member
من فکر کنم PTC برای ورژن AS3 یکی از معایبش نبود justify هست ولی در کل ماژول خوبی و میشه گفت مثل فارسی استایل بهترینه ولی در کل معایب هر دوشون اینه که وقتی میخوای متن convert شده رو کپی کنی حروف به هم میریزن 
 

Avang2005

مدیر انجمن
سلام دوست من

من كه همون fs رو پيشنهاد مي كنم

موفق باشيد
 

kiarash.M

Active Member
از آندر اسکور اول متغییر هات فهمیدم cmax ای ;) شک داشتم اول .. بابا چند تا هویت :دی
در کل شما روی سر ما جا دارید ؛ خوش حال شدم تموم شد کارتون
 

UnknownUser

Well-Known Member
سلام
apolon_021 ممنون از این که این Module رو معرفی کردی البته قبلا این کار شده بود توسط سیاوش ( CMAX )
این module خیلی خوب طراحی شده
زمانی که irdevs یا TCX این module رو release کرد به طور تصادفی هم زمان شد با release فارسی استایل نسخه 1  و جالب ایجا بود که هیچ کدوم از 2 طرف خبر نداشتیم که داریم روی یک موضوع کار می کنیم
به خاطر هم زمان شدن ارائه ی این دو module آخرین باری که من و سیاوش با هم صحبت میکردیم ( دیگه هم ندیدمش ! دلیلش رو نمیدونم شاید یه روزی خودش بگه ! ) تصمیم گرفتیم که کار های هم دیگه رو مقایسه نکنیم  و بگذاریم خود کاربرها نسبت به نیازشون هر کدوم رو که مناسب تر دیدن انتخاب کنن

حالا که پرسیده شده
ptc رو با fs یا fc مقایسه کردید؟
با اینکه من با هر سه این convector ها کار کردم تصمیم ندارم با هم مقایسه کنم خوب چون FS رو من طراحی کردم شاید یک طرفه قضاوت کنم
اگه فکر می کنید لازمه که مقایسه بشه یکی از خودتون با تست کردن هر کدوم این ها بیاید ویژگی ها شون رو معرفی کنین
 

apolon_021

Member
سلام مرتضی جان ،خسته نباشی ، راستش من در حدی نیستم که بخوام کاره شمارو مقایسه کنم من حتی قبل از گذاشتن این تاپیک سرچ کردم تو فروم چیزی پیدا نکردم و معرفیش کردم . من بسیاری از مولتی مدیا هام با ptc هست ، مشکلاته کوچیکی داره ولی خوب عوضش از xml به راحتی برای متن های کل پروژه استفاده میکنم . تو پروژه ی جدیدم که خیلی سنگینه پروژه ی مولتی مدیای شرکت کل کنترل ترافیک تهرانه از FS شما استفاده میکنم و امیدوارم و مطمئنم که کمکم میکنه . مرسی از توجهت
 

arjmand200

Member
به نظر من نباید مقایسه ای در کار باشه چون مقایسه ارزش یک کار رو پایین میاره به نظر من باید این دو دوستان (اقا سیاوش و اقا مرتضی) کارشون رو با هم ترکیب کنن و با کمک کاربر های این انجمن یه کار خوب رو تهیه کرد این کار باعث میشه مزایای این دو ماژول با هم افزایش پیدا کرده و اگه عیبی هم داشته باشن از بین بره
البته این نظره منه حالا بقیه دوستان هم هستن
من با ایجاد یک ماژول که مثل adobe textlayout FrameWork موافقم با این امکاناتی که در ورژن CS4 برای as3 در کار با متنها هست میشه یه کار تک رو تولید کرد
 

BioDread

Banned
مقایسه خوبه
چون ایجاد رقابت میکنه
مطمئن باشید اگه PTC قویتر باشه مرتضی بی کار نمیشینه و کار بهتری میزنه

من چند نمونه میگم

fs کلاس هست و متن باز ولی PTC نه
fs تا ورژن 3 پیش رفته این نشون می ده developerش سدد در بالا بردن سطح کارش داره
fs امکان ترکیب شده با کلاس های دیگر را دارد بر خلاف fc (کمتر گیر میده)
در کل fs کد نویسیش بهتره تا fc
حجم رو هنوز تست نکردم
حالا اگر کسه دیگه ای نظزی داره بگه!!!
 

apolon_021

Member
من همه ی حرفم رو حجمه کاره ، تو یه مولتی مدیایی که پره مووی کلیپ و آهنگ و 3d و ایناس 20خط متن فارسی fs سیبکتره یا ptc ?
 

BioDread

Banned
خوب فقط 9kb حجم فایل swf هست!!!
احتمالا هم باز حجم رو زیاد می کنه
 

UnknownUser

Well-Known Member
من همه ی حرفم رو حجمه کاره ، تو یه مولتی مدیایی که پره مووی کلیپ و آهنگ و 3d و ایناس 20خط متن فارسی fs سیبکتره یا ptc ?

در مورد حجم بستگی به کاری که دارین داره
اگه می خواین متن static باشه بهترین گزینه همون panel و اون convertor ای هست که گذاشتم که در واقع اصلا حجمی رو اضافه نمی کنه
در مورد این که به صورت Dynamic باشه می تونین font رو embed کنین که در حدود 40 KB حجم رو افزایش می ده اگه هم می خواین می تونین embed نکنین و حجم اضافه شده معادل خود فایل های AS می شه ( البته کمتر )
این چیزایی که من گفتم مربوط به FS بود در مورد module های دیگه خودتون می تونین test کنین
 

apolon_021

Member
تو flash 8 آره ولی چون پروژه ی جدیدم تو CS4 هست و CS3 ندارم که تبدیلش کنم به flash 8 خیلی لازمم میشه هنوز نتونستم نصب کنم از همون اولشم با نصب کامپوننت ها مشکل داشتم .
اگه دقت کرده باشی پروژه های انگلیسی نسبت به فارسی که متن ها با مریم تبدیل شده باشه سبکتره دلیلش چیه ؟ آیا FS هم مثل متن انگلیسی عمل میکنه ؟
از شانس بده ما همه ی پروژه هایی که به ما میخوره سنگینه آرزو به دلمون موند که 4 خط نوشته داشته باشه :)
 

arjmand200

Member
این مشکل اشتباه نصب شدن کامپوننتها رو خیلی ها دارن که به موضل تبدیل شده ، و چون بعضیها مسیر نصب پیشفرض کامپوننتها رو نمیدونن فکر میکنن که اصلا کامپوننت نصب نشده ولی در حالی که کامپوننت نصب میشه ولی به یه جای اشتباه نصب شده ( که من به نظرم این اشتباه در فایل زبان ectention manager cs4 هستش که بهتون میگم از روی چه حسابی این حرف رو میگم) ولی راه حل :
ببینید دوستان وقتی شما به کامپوننی رو نصب میکنین اصولا این کامپوننت باید توی این مسیر ریخته بشه :

C:\Documents and Settings\User Name\Local Settings\Application Data\Adobe\Flash CS4\Language\Configuration
که در اینجا User Name نام یوزر سیستم و Language زبان پیشفرض در هنگام نصب که اکثرا en هستش ولی در extention manager cs4 این فایلها به این مسیر ریخته میشن :
C:\Documents and Settings\User Name\Local Settings\Application Data\Adobe\Flash CS4\NIL\Configuration
که در اینجا اگه دقت کنین به جای اینکه در پوشه en کاموننتها ریخته بشن تو یه پوشه به NIL که مشخص کننده نام زبان هستش (من تا به حال نتونستم بفهم (این NIL مخفف چه زبونی :shock: ) اما راه حل اینه که شما بعد از این که کامپوننت رو نصب کردین در اینجا مثال (FS_panel) به این مسیر برین :
C:\Documents and Settings\User Name\Local Settings\Application Data\Adobe\Flash CS4\NIL\Configuration
و تمامی محتویات این شاخه رو در این شاخه کپی کنین :
C:\Documents and Settings\User Name\Local Settings\Application Data\Adobe\Flash CS4\en\Configuration
من این روش رو تست کردم و کاملا جواب میده  
 

UnknownUser

Well-Known Member
برای اینکه بخای panel نصب بشه این فایل swf ای رو که برات پیوست کردم رو تو همون مسیری که دادم که توش project.swf بود کپی کن بعد فلش رو 2 باره باز کن
البته فکر کنم راه حل arjmand200 هم درست باشه
 

پیوست ها

  • FarsiStyle Panel.zip
    297.6 کیلوبایت · بازدیدها: 32

جدیدترین ارسال ها

بالا