# Native Code > برنامه نویسی موبایل > Windows Phone و Windows Mobile >  فارسی سازی windows ce5.0

## pershia

سلام

من یک PDA دارم که روش ce5.0 نصب شده. می خواستم ببینیم چطوری می تونم فارسیش کنم چون برنامه ای که نوشتم و باید روش نصب شه فارسی است. و می خوام کیبردش هم فارسی بشه.
ممنون میشم اگه راهنماییم کنید.

----------


## mohammad_alikhani

> سلام
> 
> من یک PDA دارم که روش ce5.0 نصب شده. می خواستم ببینیم چطوری می تونم فارسیش کنم چون برنامه ای که نوشتم و باید روش نصب شه فارسی است. و می خوام کیبردش هم فارسی بشه.
> ممنون میشم اگه راهنماییم کنید.


سلام. شما باید از فارسی ساز یا بهتر بگم عربی ساز استفاده کنید. یه برنامه که من ازش استفاده می کنم Arabizer است. البته من برای برنامه هایی که خودم می نویسم از فارسی سازی که ایجاد کردم استفاده می کنم.

----------


## reza6384

> سلام. شما باید از فارسی ساز یا بهتر بگم عربی ساز استفاده کنید. یه برنامه که من ازش استفاده می کنم Arabizer است. البته من برای برنامه هایی که خودم می نویسم از فارسی سازی که ایجاد کردم استفاده می کنم.


 
سلام، من یه دستگاه Pocket PC دارم (Symbol MC3090) که روش Windows CE  5.0  نصبه. اما Arabizer روش نصب نمی شه. به پیغام اول نصب Arabizer نگاه کردم :

We would like to thank you for choosing IMAGiNET Stars Suite* that works on Microsoft* *Windows Mobile 2003, 2005* operating systems

فکر می کنم که Arabizer برای Windows Mobile فقط کار می کنه نه Windows CE. من وقتی می خوام Arabizer رو روی دستگاهم نصب کنم Errro میده می گه به دلایل Security به بعضی از فایل ها دسترسی نداره. خیلی هم باهاش سر و کله زدم.
من یه جدول از یک دیتابیس رو که اطلاعات فارسی داشت از طریق یک فایل XML منتقل کردم به Device ، کاراکتر های فارسی رو توی DataGrid دیدم، اما برعکس و جدا، اگر یک MessageBox یا یک Label یا هرچیزی رو یه رشته ی فارسی بریزم داخلش همش ؟ می شه.

در ادامه توضیحم بگم که کد 65152 تا 65276 از کاراکتر ست Unicode کد حروف فارسی هست، حتی اینجوری هم جواب نگرفتم که مثلا :

Msgbox(Chrw(65152))

یک کاراکتر فارسی نشون بده، حتی اینو به label ی که فونتش هم Tahoma بود دادم، باز هم ؟ شد.

چیکار کنم؟؟؟؟؟؟

----------


## mehrzad007

دستگاه شما چیه مگه ؟

----------


## iman_s52

با سلام 
من هم دقیقا همین مشکل رو دارم با وجود نصب فارسی ساز ولی برعکس و جدا نشون میده .
قبلا یه نمونه کدی تویه Codeproject  پیدا کردن که این مشکل رو حل کرده بود اگه اشتباه نکنم به زبان ++VC بود.

----------


## iman_s52

در ضمن واسه نشون دادن لیبل ها و Message ها می تونین از Character map .یندوزتون استفاده کنین و اونجا برعکس تایپ کنین بعد از کامپایل تویه دستگاتون درست نمایش میده

----------


## mehrzad007

> من یه دستگاه Pocket PC دارم (Symbol MC3090) که روش Windows CE 5.0 نصبه


شرمنده من اینو ندیده بودم . اگر نتونید فارسی سازی براش پیدا کنید مجبورید از فارسی نویس های مستقل از کد پیج استفاده کنید . احتمالا منظور آقای علی خانی هم همین بوده . فارسی نویس هایی مثل مریم . سروش و...

----------


## reza6384

سلام. من بعد از اینکه Pocket Kelk رو نصب کردم کاراکترهای فارسی رو توی دیتاگرید دیدم، اما برعکس و جدا. برای رفع این مشکل باید برنامه ای می نوشتم که اولا رشته رو برعکس کنه، دوما موقعیت کاراکتر رو تشخیص بده ( هر کاراکتر فارسی 4 تا موقعیت توی یه رشته داره : Alone - End - First - Middle ) و بعد اون کاراکتر رو با کاراکتر فارسی مناسب عوض کنه و یک رشته جدید بسازه، در ضمن SubString های Ascii دوباره باید برعکس بشن.
یک فایل XML ساختم که یه جدول داره که کد کاراکترهای فارسی رو با توجه به موقعیتشون تو جمله ذخیره کرده.
این کد کلاسیه که ساختم، متد Persianize یک رشته ( برعکس و جدا ) رو می گیره و درستش می کنه.
کد کلاس :


Imports System.Data
PublicClass PersianChar
Dim MapDS AsNew DataSet
Dim MapTable AsNew DataTable
Dim _Font10Reg AsNew System.Drawing.Font(System.Drawing.FontFamily.Gene  ricSansSerif, 10, FontStyle.Regular)
Dim _Font10Bold AsNew System.Drawing.Font(System.Drawing.FontFamily.Gene  ricSansSerif, 10, FontStyle.Bold)
Dim _Font12Reg AsNew System.Drawing.Font(System.Drawing.FontFamily.Gene  ricSansSerif, 12, FontStyle.Regular)
Dim _Font12Bold AsNew System.Drawing.Font(System.Drawing.FontFamily.Gene  ricSansSerif, 12, FontStyle.Bold)
PublicReadOnlyProperty Font10Reg() AsObject
Get
Return _Font10Reg
EndGet
EndProperty
PublicReadOnlyProperty Font10Bold() AsObject
Get
Return _Font10Bold
EndGet
EndProperty
PublicReadOnlyProperty Font12Reg() AsObject
Get
Return _Font10Reg
EndGet
EndProperty
PublicReadOnlyProperty Font12Bold() AsObject
Get
Return _Font12Bold
EndGet
EndProperty
SubNew()
Try
MapDS.ReadXml("\My Documents\SETTINGS\Unicode_Mapping.xml")
Catch ex As Exception
MsgBox("Missing Unicode Mapping Table", MsgBoxStyle.Critical, "ARZANESH")
EndTry
MapTable = MapDS.Tables(0)
EndSub
PrivateFunction StringReverser(ByVal ST AsString) AsString
Dim Temp AsString = ""
Dim Reversed AsString = ""
For i AsInteger = ST.Length - 1 To 0 Step -1
If IsAscii(ST.Chars(i)) And ST.Chars(i) <> " " Then
While IsAscii(ST.Chars(i)) And ST.Chars(i) <> " "
Temp = Temp + ST.Chars(i)
If i = 0 Then
ExitWhile
EndIf
If IsAscii(ST.Chars(i - 1)) And ST.Chars(i - 1) <> " " Then
i = i - 1
Else
ExitWhile
EndIf
EndWhile
Me.MakeReverse(Temp)
Reversed += Temp
Temp = ""
Else
Reversed += ST.Chars(i)
EndIf
Next
Return Reversed
EndFunction
PublicFunction CheckReturnIndex(ByVal Code AsString) AsInteger
For i AsInteger = 0 To MapTable.Rows.Count - 1
If MapTable.Rows(i).Item(0) = Code Then
Return i
EndIf
Next
MsgBox("Can not find character : " & Code, MsgBoxStyle.Critical)
Return 0
EndFunction
PublicFunction Persianize(ByRef ST AsString) AsString
Dim T1, TrueString AsString
TrueString = ""
Dim CharCode AsString
Dim TrueChar AsChar
Dim TableIndex, Position AsInteger
T1 = ST
Try
For i AsInteger = 0 To T1.Length - 1
CharCode = Hex(GetCharCode(T1.Chars(i)))
IfNot (Convert.ToInt32(CharCode, 16) <= 255 And Convert.ToInt32(CharCode, 16) >= 0) Then' Not ASCII
TableIndex = Me.CheckReturnIndex(CharCode)
Position = Me.TellPosition(T1, i)
TrueChar = ChrW(Convrt.ToInt32(MapTable.Rows(TableIndex).Item  (Position), 16))
TrueString = TrueString + TrueChar
Else
TrueString = TrueString + T1.Chars(i)
EndIf
'MsgBox(CharCode & " => " & (MapTable.Rows(TableIndex).Item(Position)))
Next
 
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
EndTry
ReturnMe.StringReverser(TrueString)
EndFunction
PublicFunction GetCharCode(ByVal Chr AsChar) AsInteger
For i AsInteger = 0 To 65535
If Chr = ChrW(i) Then
Return i
ExitFunction
EndIf
Next
EndFunction
PrivateFunction TellPosition(ByVal ST AsString, ByVal Index AsInteger) AsInteger
'This Function Returns : 
' 1 For "ALONE" CHARACTER
' 2 For "END" CHARACTER
' 3 For "FIRST" CHARACTER
' 4 For "MIDDLE" CHARACTER
Dim Status AsInteger = 1
If Index = 0 Then
If ST.Length = 1 Then
Status = 1 : GoTo Final ' This string just have one char, so it's ALONE
Else
Status = 3 : GoTo Final ' This String have more than one char, so this is the FIRST
EndIf
EndIf
If Index = ST.Length - 1 Then
If ST.Chars(Index - 1) = " " Then
Status = 1 : GoTo Final ' ALONE
Else
IfMe.UnjoinableWithNext(ST.Chars(Index - 1)) Then
Status = 1 : GoTo Final ' ALONE
Else
Status = 2 : GoTo Final ' END
EndIf
EndIf
EndIf
If ST.Chars(Index - 1) = Chr(13) Or ST.Chars(Index - 1) = Chr(13) Then
Status = 3 : GoTo Final ' FIRST
EndIf
If ST.Chars(Index - 1) = " " And ST.Chars(Index + 1) = " " Then
Status = 1 : GoTo Final ' ALONE
EndIf
If ST.Chars(Index - 1) <> " " And ST.Chars(Index + 1) = " " Then
IfMe.UnjoinableWithNext(ST.Chars(Index - 1)) Then
Status = 1 : GoTo Final ' ALONE
Else
Status = 2 : GoTo Final ' END
EndIf
EndIf
If ST.Chars(Index - 1) = " " And ST.Chars(Index + 1) <> " " Then
Status = 3 : GoTo Final ' FIRST
EndIf
If ST.Chars(Index - 1) <> " " And ST.Chars(Index + 1) <> " " Then
' اگر کاراکتر وسط رشته بود باید ببینیم که آیا کاراکتر قبلی بهش می چسبه یا نه 
IfMe.UnjoinableWithNext(ST.Chars(Index - 1)) Then
Status = 3 : GoTo Final ' FIRST
Else
Status = 4 : GoTo Final ' Middle
EndIf
EndIf
Final: Return Status
EndFunction
PrivateFunction UnjoinableWithNext(ByVal Ch AsChar) AsBoolean
Dim sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, sc8, sc9, sc10 AsInteger'Special Chars
Dim Code AsInteger = Me.GetCharCode(Ch)
 
sc0 = Convert.ToInt32("625", 16)
sc1 = Convert.ToInt32("627", 16)
sc2 = Convert.ToInt32("62F", 16)
sc3 = Convert.ToInt32("630", 16)
sc4 = Convert.ToInt32("631", 16)
sc5 = Convert.ToInt32("632", 16)
sc6 = Convert.ToInt32("698", 16)
sc7 = Convert.ToInt32("648", 16)
sc8 = Convert.ToInt32("624", 16)
sc9 = Convert.ToInt32("623", 16)
SC10 = Convert.ToInt32("622", 16)
SelectCase Code
Case sc1, sc2, sc3, sc4, sc5, sc6, sc7, sc8, sc9, sc10
ReturnTrue
CaseElse
ReturnFalse
EndSelect
EndFunction
Function IsAscii(ByVal CH AsChar) AsBoolean
Dim Code AsInteger = Me.GetCharCode(CH)
If Code >= 0 And Code <= 255 Then
ReturnTrue
Else
ReturnFalse
EndIf
EndFunction
Sub MakeReverse(ByRef ST AsString)
Dim Temp AsString = ""
For i AsInteger = ST.Length - 1 To 0 Step -1
Temp = Temp + ST.Chars(i)
Next
ST = Temp
EndSub
EndClass


فایل XML رو هم Attach کردم.

----------


## iekrang

> سلام. من بعد از اینکه Pocket Kelk رو نصب کردم


شما کدوم ورژن از برنامه Pocket Kelk رو نصب کردید؟با توجه به اینکه قبلاً فرموده بودید ویندوزتون CE 5.0 هست.و ورژن های موجود این برنامه برای Windows Mobile.
من 2005 رو امتحان کردم ولی نتونستم روی CE5.0 نصبش کنم.

----------


## reza6384

> شما کدوم ورژن از برنامه Pocket Kelk رو نصب کردید؟


اسم فایلش PocketKelk_2005_1005 اه. این هم لینکش تو همین سایت، نمی دونم چه ورژن ای هست. ولی من همین رو روی WinCE5.0 نصب کردم: 
https://barnamenevis.org/showth...ht=pocket+kelk

----------


## rahmatr

آقای reza6384 دستت درد نکند.
خیلی مفید بود.

چند روش را امتحان کرده بودم ولی هیچ کدام به این خوبی کار نکرد.

البته من چند خط دیگر هم  به کلاس اضافه کردم:
    Public Sub PersianizeControlCaption(ByRef Frm As Form)
        Frm.Text = Persianize(Frm.Text)
        For Each C As Control In Frm.Controls
            If TypeOf C Is Label Or TypeOf C Is Button Then
                C.Text = Persianize(C.Text)
            End If
        Next
    End Sub


البته تابع Persianize خیلی کند است و بعضی قسمتهای کلاس باید بطور اساسی اصلاح شود. مثلا تابع زیر:

Public Function GetCharCode(ByVal Chr As Char) As Integer
    For i As Integer = 0 To 65535
        If Chr = ChrW(i) Then
            Return i
            Exit Function
        End If
    Next
End Function

که باید اینگونه باشد:

Public Function GetCharCode(ByVal Chr As Char) As Integer
    Return Ascw(chr)
End Function

----------


## داداشی

با سلام خدمت اساتید محترم
حقیر یک دستگاه پلیر دارم که در ان از win ce 5 استفاده شده 
از اکثر فارسی سازهای که در اینترنت سرچ کردم استفاده کردم ولی نصب نمی شود
دستگاه cowon q5w
فایلهای که میتوان نصب کرد با پسوند cabمی باشد
زمانی که از طریق وایرلس به اینترنت وصل می شویم در سایت هائی که فارسی هستند 
حروف را جداجدا نشان می دهد(کتابخانه_ک ت ب ا خ ا ن ه )
در ضمن تایپ فارسی هم ندارد وقتی هم فایلی فارسی را در خود دستکاه باز میکنم حروف را 
برعکس وجداجدا نشان میدهد
معذرت از این که طولانی شد 
لطف کنید کمک کنید در ضمن اگر سئوالی در مورد دستگاه دارید جوابگو هستم

----------


## داداشی

:گریه:  :گریه: اقا کسی نیست جواب سئوال ماروبده :گریه:

----------


## reza6384

سلام. راستش ما هم زیاد گشتیم، پیدا نکردیم، آخرش هم این حروف جدا جدا و به هم وصل کردیم ( برنامش توی صفحه اول همین تاپیک هست ( Persianizer ) ) . حالا اینکه این برنامه چجوری روی همه Device  ها نصب بشه و همه جا کار کنه، انشاا... وقتی حرفه ای شدیم می نویسیم.    :لبخند گشاده!:

----------


## داداشی

> سلام. راستش ما هم زیاد گشتیم، پیدا نکردیم، آخرش هم این حروف جدا جدا و به هم وصل کردیم ( برنامش توی صفحه اول همین تاپیک هست ( Persianizer ) ) . حالا اینکه این برنامه چجوری روی همه Device  ها نصب بشه و همه جا کار کنه، انشاا... وقتی حرفه ای شدیم می نویسیم.


اینو  تو کدوم فایل باید جا داد  :خیلی عصبانی: 
ما که چیزی از این نفهمیدیم

----------


## داداشی

کمممممممممممممممممممممممم  ممممممممممممممممممممممممم  ممک
یکی پیدا نمیشه منو کمک کنه 
ااااااااااااااااااااااااا  ااااااااااااااااااااااااا  اااااااااااااااای کسی صدای منو نمیشنوه  :گریه:  :گریه:  :گریه:

----------


## داداشی

> با سلام خدمت اساتید محترم
> حقیر یک دستگاه پلیر دارم که در ان از win ce 5 استفاده شده 
> از اکثر فارسی سازهای که در اینترنت سرچ کردم استفاده کردم ولی نصب نمی شود
> دستگاه cowon q5w
> فایلهای که میتوان نصب کرد با پسوند cabمی باشد
> زمانی که از طریق وایرلس به اینترنت وصل می شویم در سایت هائی که فارسی هستند 
> حروف را جداجدا نشان می دهد(کتابخانه_ک ت ب ا خ ا ن ه )
> در ضمن تایپ فارسی هم ندارد وقتی هم فایلی فارسی را در خود دستکاه باز میکنم حروف را 
> برعکس وجداجدا نشان میدهد
> ...


این همه استاد برنامه نویس ما هنوز اندر خم یک کوچه ایم  :ناراحت:

----------


## داداشی

بابا ایول چند روزه تواین سایت عضو شدیم ی سئوال کردیم یکی پیدا نشد جواب مارو بده

جمش کنید با با با این مدیریت سایت

----------


## reza6384

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

----------


## reza6384

آقای Rahmatr از تذکرتون بابت سرعت ممنونم، من می دونستم که net. باید یک تابع برگردوندن کد حروف داشته باشه ، اما نمی دونستم چیه. بله ، دقیقا همونطور که شما گفتید با اینکار سرعت بالا می ره.
بعضی وقت ها انگار واضحه که یک سری توابع توی net. هستن، اما نمیدونم چرا یه وقتایی این عزیزان از پیش نوشته شده قایم می شن یا ما نمی تونیم پیداشون کنیم.

----------


## mohammad_alikhani

سلام.
من يه همچين كدي رو توي C شارپ نوشتم.
متدي كه من نوشتم واسه جمله هاي يك خطي درست جواب مي ده. اما اگه يه متن چند خطي بهش بدي خطوط با هم جابجا مي شن. كلمات درسته. ولي مثلا خط اول رفته آخر. خط آخر اومده اول  :گیج:  مي دونيد حدس بزنيد مشكل كار من از كجاست؟ :خجالت:

----------


## ganbarih

سلام 
من پاکت پی سی qtek9090 دارم که با windows ce 2003 کار می کنه بعد از مدتها یک فاسی ساز توپ گیرآوردم نمیدونم که در windows 5 جواب بده اگه می خوای ایمیل بده برات بفرستم

----------


## reza6384

> سلام.
> من يه همچين كدي رو توي C شارپ نوشتم.
> متدي كه من نوشتم واسه جمله هاي يك خطي درست جواب مي ده. اما اگه يه متن چند خطي بهش بدي خطوط با هم جابجا مي شن. كلمات درسته. ولي مثلا خط اول رفته آخر. خط آخر اومده اول  مي دونيد حدس بزنيد مشكل كار من از كجاست؟


سلام. من هم دقیقا همین مشکل برام پیش اومد. مشکل اینجاست که ما رشته رو از چپ به راست بررسی و تصحصیح می کنیم. مثلا رشته:

"
سلام، خوبی
ممنونم
"

برای کامپیوتر از حرف م و بعد ن شروع میشه تا به س برسه. ما میایم این حروف برعکس رو به هم پیوند میدیم و بعد که به کاراکتر CR می رسیم اون رو هم وارد میکنیم که در نتیجه ترتیب خطوط از آخر به اول میشه.

----------


## reza6384

یکی از دوستان از من خواست که توضیح بدم Persianizer چجوری کار می کنه.

وقتی یک رشته به صورت جدا و برعکسه ، مثلا :
من 150 هزار تومن دارم.
اینجوریه :
. م ر ا د ن م و ت ر ا ز ه 1 5 0 ن م

خوب ، ابتدا باید رشته رو برعکس کنیم و در ضمن زیر رشته هایی رو که ASCII هستند ( در این مثال 150 ) دوباره برعکس کنیم. 
بعد با تابع TellPosition موقعیت کاراکتر رو در جمله به دست بیاریم.
هر حرف فارسی دارای 5 موقعیت در رشته هست : 
1- First : اولین حرف رشته یا کلمه ، مثل م در مانی . حروفی که اندیس اونها در رشته صفر باشه ( اولین کاراکتر رشته ) ، یا حرف قبلی اونها Space باشه ، یا حرف قبلیشون حرفی باشه که به بعدی نمی چسبه ( مثل "د" در "دست" ) از این قبیلند.

2-Middle : حرف وسط ، یعنی حرفی که دو حرف از چپ و راست بهش چسبیدن.  حرفی که نه کاراکتر بعدیش Space باشه و نه قبلی ، همچنین حرف قبلیش هم از حروف Unjoinable With Next نباشه.

3- End : حرف آخر کلمه یا جمله. مثل "م" در "نمیدونم" . اگر حرفی آخرین حرف رشته باشه، یا حرف بعدیش Space باشه ، یا از حروف Unjoinable With Next باشه موقعیتش در رشته End هست.

4- Alone : حرفی که نه قبلیش بهش متصل میشه نه بعدیش. مثل "ز" در ترازو. این حرف باید خودش و همچنین حرف قبلش Unjoinable With Next باشن ، یا اینکه حرف قبل و بعدش هر دو Space باشن.

5- خود کاراکتر.

بعد از اینکه موقعیت کاراکتر رو در رشته پیدا کردیم، اونرو باید با حرف اون موقعیت جایگزین کنیم. یعنی "م" را در کلمه "همت" با " م وسط " عوض کنیم. بعدشه که رشته درست نمایش داده میشه.

----------


## mtcox3000

سلام
شما می تونید این دو فایل را جستجو کنید
Arabic reader.CAB
Arabizer.cab
این دو فایل در ویندوز سی ای قابل استفاده است.

----------


## farhad-s

> سلام
> 
> من یک PDA دارم که روش ce5.0 نصب شده. می خواستم ببینیم چطوری می تونم فارسیش کنم چون برنامه ای که نوشتم و باید روش نصب شه فارسی است. و می خوام کیبردش هم فارسی بشه.
> ممنون میشم اگه راهنماییم کنید.


از فارسی ساز شهاب استفاده کنید شاید جواب بده

http://phalls.com/vbulletin/showthread.php?t=11763

----------


## net_ved

یه فارسی ساز به نام "فی جیبی ع" هست که من با هاش Win mobile 5,6,6.1 رو فارسی کردم ... تقریبا رو هر PPC کار می کنه واسه همین ممکنه روی WinCE هم کار کنه .. امتحان کنین 
این و شرکت HTC روی PPC های جدیدش مثل TYTN II نصب کرده .. که کاملا فارسی می کنه
تو سایتش هست اگه پیدا نکردین به من بگید ..

----------

