Myanmar Unicode နဲ့ Zawgyi ပြသနာ ကို Android app developer တစ်ယောက်အနေနဲ့ ဘယ်လိုဖြေရှင်းမလဲ။
Disclaimer: Android app developer တစ်ယောက်အနေနဲ့ ကိုယ့် app မှာ မြန်မာစာထည့်ဖို့ စိတ်ဝင်စားတယ်ဆိုရင်တော့ ဒီစာကို ဆက်ဖတ်ပါ။ သာမန် Myanmar Unicode နဲ့ Zawgyi ငြင်းခုံမှုတွေကို စိတ်ဝင်စားတဲ့လူအတွက်ဆိုရင်တော့ ပျင်းစရာကောင်းနိုင်ပါတယ်။ နောက်ပြီး ကျွန်တော် လုပ်ထားတာတွေ အမှန်လို့ မဆိုလိုပါဘူး။ ကျွန်တော်ဟာ font တွေ Unicode standard တွေနဲ့ ပက်သက်လို့ကတော့သေချာနားမလည်တဲ့အတွက် ကိုယ်တတ်သလောက် ကြိုးစားထားခြင်းသာဖြစ်ပြီး အမှားအယွင်းများလည်း ပါနိုင်ပါတယ်။
ကျွန်တော် Tech Fun Myanmar မှာအလုပ်စဝင်ပြီး သိပ်မကြာခင်ပဲ app တစ်ခု ရေးရတယ်။ App နဲ့ပက်သက်လို့ design ချပြီး စရေးမယ့်အချိန်မှာ စဉ်းစားရတာကတော့ ဒီ app ဟာ မြန်မာနိုင်ငံအတွက် အဓိကထားရေးတာရယ်၊ app ရဲ့အဓိကလုပ်ဆောင်ချက်တစ်ခုကလည်း review ရေးတာရယ်ဖြစ်တဲ့အတွက် မြန်မာစာ ဖတ်လို့ ရေးလို့ ရရမယ်ဆိုတဲ့ လိုအပ်ချက်ပါပဲ။ အဲဒီမှာ ပြသနာက သိပြီးသားဖြစ်ကြတဲ့အတိုင်း Myanmar Unicode (MMU) နဲ့ Zawgyi ဘယ်ဟာကို သုံးမလဲပေါ့။
App စရေးမယ်ဆို စဉ်းစားတော့ လုပ်လို့ရတာက Zawgyi/MMU font ကို app ထဲတစ်ခါတည်း ထည့်ပေးလိုက်မယ်ပေါ့။ ပြောတော့သာလွယ်တာ တစ်ကယ်လုပ်တော့ ပြသနာတွေက မသေးဘူး။ ကိုယ့် app ကို အကောင်းဆုံးဖြစ်စေချင်တဲ့ စိတ်ကြောင့်လည်းပါမှာပေါ့။
တွေးမိတဲ့ ပြသနာတွေက -
1. ဖုန်းတွေမှာ မြန်မာ font ပါတာရှိတယ်။ မပါတာရှိတယ်။ ပါပါ မပါပါ ဘယ်လို မြန်မာစာ မြင်ရအောင်လုပ်မလဲ။
2. မြန်မာ font ပါပြီထားဦး။ တစ်ချို့ဖုန်းတွေမှာ Zawgyi ပဲအမှန်ပြတယ်။ တစ်ချို့ဖုန်းတွေမှာ MMU ပဲ အမှန်ပြတယ်။ တစ်ချို့ဖုန်းတွေမှာ နှစ်မျိုးလုံး အမှန်ပြတယ်။ အဲဒီတော့ အမြဲ အမှန်ပေါ်အောင် ဘာ font နဲ့ပြမလဲ။
3. စာရိုကျတဲ့အခါ တစျခြို့က Zawgyi နဲ့ရိုကျမယျ၊ တစျခြို့က Unicode နဲ့ရိုကျမယျ။ ဘာနဲ့ရိုကျလိုကျလဲဆိုတာ ဘယျလိုသိမလဲ။ အဲလို ရိုကျခငြျတာနဲ့ ရိုကျထားတဲ့စာကို ဘယျလို သိမျးမလဲ။
4. MMU font တွေက ပိုလှပြီး (လေ့လာထားသလောက်ဆို) Unicode standard ကို သေချာလိုက်နာတယ်ဆိုတော့ Zawgyi နဲ့စာရိုက်တဲ့ဖုန်းမှာတောင် MMU မှန်မှန်ပေါ်တဲ့ဖုန်းဆိုရင် MMU နဲ့ပဲပြချင်တယ်။ ဥပမာ ကျွန်တော့် Nexus ဖုန်းမှာ 5.1.1 တင်ထားတော့ MMU ရော Zawgyi ရော အမှန်ပေါ်တယ်။ ဒါပေမယ့် ကျွန်တော်က စာရိုက်တော့ Zawgyi ပဲသုံးဖြစ်တာများတယ်။ အဲ့လိုဖုန်းမျိုးမှာဆိုရင် သုံးစွဲသူက review ရေးရင်တော့ Zawgyi နဲ့ရေး၊ သူများရေးထားတဲ့ review ဖတ်ရင်တော့ Unicode နဲ့ဖတ်လို့ ရစေချင်တယ်။
5. Font ရပြီ ဆိုရင်လည်း အဲဒီ font ကို app တစ်ခုလုံးမှာ (Toast notification တွေကအစ) သုံးချင်ရင် ဘယ်လိုလုပ်မလဲ? Android မှာ ကိုယ်ပိုင် font သုံးရတာ တော်တော်အလုပ်ရှုပ်ပါတယ်။ Custom TextView, EditText တွေသုံးရင်သုံး၊ မသုံးရင်လဲ view အားလုံးကို setTypeface() နဲ့ လိုက်ပြောင်းရမှာဆိုတော့ မစားသာဘူး။
6. MMU font တွေက bold ပါတာ သိပ်မရှိဘူး။ Zawgyi One ဆိုလဲ bold မရှိဘူး။ ပြီးတော့ ကိုယ့် App တစ်ခုလုံးကို Myanmar font ထည့်လိုက်ရင် Android က bold လုပ်ထားတာတွေပါ ပျောက်ကုန်ရော။ Android မှာ နဂိုပါတဲ့ Roboto ကိုပဲသုံးမယ်ဆိုရင် "android:textStyle=bold" လုပ်လိုက်ရင် bold ဖြစ်ပေမယ့် ကိုယ်ပိုင် font (typeface) သုံးထားရင်တော့ အဲလိုလုပ်ထားလဲ system font မဟုတ်တဲ့အတွက် Android က bold font ကို မရှာနိုင်တော့ဘူး။
7. နောက်ဆုံးတစ်ချက်ကတော့ Zawgyi/MMU font တွေမှာပါတဲ့ English glyph တွေက (ကျွန်တော့်အတွက်တော့) သိပ်မလှဘူး။ App မှာ မြန်မာစာသုံးချင်တာနဲ့ပဲ English စာလုံး မလှတာကိုလည်း မသုံးချင်ပြန်ဘူး။
အဲဒါတွေကို အချိန်ယူ စဉ်းစားပြီးနောက်မှာ ထွက်လာတဲ့အဖြေတွေကို လေ့လာလို့ရအောင် အောက်မှာ ဆက်ဖော်ပြထားပါတယ်။ အပေါ်က အမှတ်စဉ်အတိုင်း ပြန်ဖြေရှင်းထားပါတယ်။ အမှန်လို့ မဆိုလိုပါဘူး။ ကျွန်တော်စဉ်းစားထားလို့ရသမျှသာ ဖြစ်ပါတယ်။
1. ဖုန်းတွေမှာ မြန်မာ font ပါတာရှိတယ်။ မပါတာရှိတယ်။ ပါပါ မပါပါ ဘယ်လိုမြန်မာစာ မြင်ရအောင်လုပ်မလဲ။
My Solution: ဒီအတွက်ကတော့ သိပြီးသားဖြစ်မှာပါ။ ကိုယ့် app ထဲက “assets” folder အောက်မှာ မြန်မာ font ထည့်ပေးလိုက်ပြီး ပြန်သုံးလို့ရတဲ့အတွက် သွင်းမယ့် device မှာ မြန်မာ font ရှိစရာ မလိုပါဘူး။
2. တစ်ချို့ဖုန်းတွေမှာ Zawgyi ပဲအမှန်ပြတယ်။ တစ်ချို့ဖုန်းတွေမှာ MMU ပဲ အမှန်ပြတယ်။ တစ်ချို့ဖုန်းတွေမှာ နှစ်မျိုးလုံး အမှန်ပြတယ်။ အဲဒီတော့ အမှန်ပေါ်အောင် ဘာ font နဲ့ပြမလဲ။
My Solution: ဒီပြသနာကိုတော့ အမှားနည်းအောင် အများသုံးနေကျနည်းပဲ သုံးလိုက်တယ်။ ပထမအနေနဲ့ app ထဲမှာ Zawgyi font ရော၊ MMU font ရော ထည့်ပေးလိုက်တယ်။ Size တော့ ကြီးသွားပေမယ့် မြန်မာစာ မြင်ရဖို့အတွက် size ကိုတော့ စတေးရတာပါပဲ။ နောက်တစ်ဆင့်အနေနဲ့ "အောက်ပါစာကို အမှန်အတိုင်းမြင်ရပါသလား" လို့ Photoshop မှာရိုက်ပြီး JPG ပုံအဖြစ် သိမ်းလိုက်တယ်။ ဘာ font ပဲရှိရှိ အမှန်မြင်ရအောင် စာနဲ့မပြပဲ ပုံနဲ့ပြတာပါ။ App စစခြင်းမှာ အဲဒီပုံကိုပြပြီး အောက်မှာ MMU နဲ့ စာတစ်ကြောင်း ပြလိုက်ပါတယ်။ ဥပမာ "မြန်မာစာမြန်မာစကား" လို့ ပြလိုက်တယ် ဆိုပါစို့။ အဲဒီစာကို သုံးစွဲသူကို ဖတ်ခိုင်းပြီး အောက်မှာ “Yes”, “No”, “Skip” ဆိုပြီး ရွေးခိုင်းလိုက်ပါတယ်။ သုံးစွဲသူက စာကို အမှန်အတိုင်းမြင်ရလို့ Yes လို့ဖြေရင် သူ့စက်မှာ MMU ဖတ်လို့ရပြီး No လို့ဖြေရင်တော့ သူ့စက်မှာ Zawgyi ဖြစ်ဖို့များသွားပါပြီ။ "Skip" ဆိုတာကတော့ မြန်မာစကား မတတ်တဲ့သူ app ကိုသုံးခဲ့ရင် ကျော်လို့ရအောင် ထည့်ထားပေးတာပါ။ Skip နှိပ်လိုက်ရင် လောလောဆယ်တော့ Zawgyi လို့ ယူဆထားပါတယ်။ Zawgyi က လူသုံးပိုများနေသေးလို့ပါ။
3. စာရိုက်တဲ့အခါ တစ်ချို့က Zawgyi နဲ့ရိုက်မယ်၊ တစ်ချို့က Unicode နဲ့ရိုက်မယ်။ ဘာနဲ့ရိုက်လိုက်လဲဆိုတာ ဘယ်လိုသိမလဲ။ အဲလို ရိုက်ချင်တာနဲ့ ရိုက်ထားတဲ့စာကို ဘယ်လို သိမ်းမလဲ။
My Solution: ဒီအတွက်ကျွန်တော်လေ့လာကြည့်တော့ Zawgyi နဲ့ MMU ခွဲခြားသိနိုင်တဲ့နည်းက Unicode character U+104E မှာဆိုရင် Zawgyi မှာ "၎င်း" ဖြစ်ပြီးတော့ MMU မှာဆို "၄" ဖြစ်နေတာ တွေ့ရပါတယ်။ (နံပါတ် ၄ တော့ မဟုတ်ပါဘူး။ ရိုက်ရအဆင်မပြေလို့ ၄ လို့ပဲအလွယ်ရိုက်လိုက်ပါတယ်။ တကယ်က "၎င်း" ကို ငသတ် ဝစနှစ်လုံးပေါက် ဖြုတ်ထားတဲ့ အက္ခရာပါ)။ အဲလိုသိပြီ ဆိုပေမယ့် app ထဲမှာ programmatically သိအောင် ဘယ်လိုလုပ်မလဲ? ကျွန်တော် တွေးလိုက်တာကတော့ အဲဒီ U+104E ကအက္ခရာကို bitmap ပုံ အဖြစ်ပြောင်းပြီး ပုံမှာ “၄” လား “၎င်း” လား စစ်လိုက်မယ်ပေါ့။ “၄” ဆိုရင် MMU, “၎င်း” ဆိုရင် Zawgyi ပေါ့။ အဲဒီ function ကို တော့ ကျွန်တော့် team member Ko Kyaw Zin ကို ရေးခိုင်းလိုက်ပါတယ်။ သူရေးထားတာ တော်တော်လေးမိုက်ပါတယ်။ Function ကိုခေါ်လိုက်ရင် စက်မှာရှိတဲ့ Myanmar font က Zawgyi လား၊ MMU လား၊ မြန်မာ font မရှိဘူးလား သိနိုင်ပါတယ်။ အဲဒီတော့ သုံးစွဲသူက ဘာ font သုံးပြီး စာရိုက်လဲဆိုတာ သူ့ကို မေးစရာမလိုပဲ အလိုလျောက်သိနိုင်သွားပါတယ်။ (function code ကို နောက်တော့ Github မှာတင်ဖြစ်မယ် ထင်ပါတယ်) ရိုက်ပြီးသားစာကို online server မှာ သိမ်းတဲ့အခါကျတော့ Zawgyi နဲ့ ရိုက်ခဲ့ရင် MMU ပြောင်းပြီး သိမ်းမှာဖြစ်ပြီး၊ MMU နဲ့ ရိုက်ခဲ့ရင်တော့ ဒီအတိုင်းပဲ သိမ်းလိုက်ပါတယ်။ Zawgyi to MMU converter ကိုတော့ saturngod ရဲ့ Rabbit (
https://github.com/Rabbit-Converter/Rabbit) ကို နည်းနည်း ပြုပြင်ပြီး အသုံးပြုထားပါတယ်။ Online server ကနေ review တွေပြန်ယူတဲ့ အခါကျရင်တော့ သုံးစွဲသူရွေးချယ်ထားတဲ့အတိုင်း Zawgyi ဆို Zawgyi, MMU ဆို MMU ပြောင်းပြီး ပြန်ပို့ပေးတဲ့အတွက် စာ မမှားတော့ပါဘူး။
4. MMU font တွေက ပိုလှပြီး (လေ့လာထားသလောက်ဆို) Unicode standard ကို သေချာလိုက်နာတယ်ဆိုတော့ Zawgyi နဲ့စာရိုက်တဲ့ဖုန်းမှာတောင် MMU မှန်မှန်ပေါ်တဲ့ဖုန်းဆိုရင် MMU နဲ့ပဲပြချင်တယ်။
My Solution: ဒီကိစ္စကတော့ နံပါတ် 2 နဲ့ 3 ကို ဖြေရှင်းရင်း ပြေလည်သွားပါတယ်။ ကျွန်တော်က ဖတ်တဲ့ font နဲ့ ရိုက်တဲ့ font ကို သီးခြားခွဲစစ်ထားတဲ့အတွက် သုံးစွဲသူရဲ့ Android OS နဲ့ မြန်မာ font ပေါ်မူတည်ပြီး ဖတ်/ရိုက်ရတဲ့ font တွေ ကွဲသွားပါတယ်။ အသေးစိတ်ပြောရရင်…
Condition 1: Android version က MMU အမှန်မြင်ရတယ်၊ သွင်းထားတဲ့ font ကလည်း MMU
Path 1: ဖတ်တာရော၊ ရိုက်တာရော MMU နဲ့ဖြစ်မှာပါ။
Condition 2: Android version က MMU အမှန်မြင်ရတယ်၊ သွင်းထားတဲ့ font က Zawgyi
Path 2: ဖတ်တော့ MMU နဲ့ပြပြီး၊ စာရိုက်ရင်တော့ Zawgyi နဲ့လက်ခံမှာပါ။
Condition 3: Android version က MMU မမှန်ဘူး၊ Zawgyi တော့ မှန်တယ်၊ သွင်းထားတဲ့ font က Zawgyi
Path 3: ဖတ်တာရော၊ ရိုက်တာရော Zawgyi နဲ့ဖြစ်မှာပါ။
Condition 4: Android version က MMU အမှန်မြင်ရတယ်၊ မြန်မာ font မရှိဘူး
Path 4: ဖတ်တော့ MMU နဲ့ပြပြီး စာရိုက်ရင်တော့ ကျွန်တော့ App ရဲ့ Settings ထဲမှာ ရွေးထားတဲ့ font နဲ့ရိုက်နိုင်မှာပါ။ (မြန်မာ font မရှိတဲ့အတွက် စာရိုက်တဲ့ font ကို အလိုအလျောက် မသိနိုင်တော့ပါဘူး)
Condition 5: Android version က Zawgyi အမှန်မြင်ရတယ်၊ မြန်မာ font မရှိဘူး
Path 5: ဖတ်တော့ Zawgyi နဲ့ပြပြီး စာရိုက်ရင်တော့ ကျွန်တော့ App ရဲ့ Settings ထဲမှာ ရွေးထားတဲ့ font နဲ့ရိုက်နိုင်မှာပါ။ (မြန်မာ font မရှိတဲ့အတွက် စာရိုက်တဲ့ font ကို အလိုအလျောက် မသိနိုင်တော့ပါဘူး)
5. Font ရပြီ ဆိုရင်လည်း အဲဒီ font ကို app တစ်ခုလုံးမှာ (Toast notification တွေကအစ) သုံးချင်ရင် ဘယ်လိုလုပ်မလဲ?
My Solution: ဒီအတွက် research လုပ်ပြီးနောက်မှာတော့ chrisjenx ရဲ့ Calligraphy (
https://github.com/chrisjenx/Calligraphy) ဆိုတဲ့ library ကို အသုံးပြုထားပါတယ်။ ကိုယ့် app တစ်ခုလုံးကို ကြိုက်တဲ့ font သုံးလို့ရအောင် code တစ်ကြောင်းနှစ်ကြောင်းနဲ့တင် အဆင်ပြေလို့ တော်တော် အသုံးဝင်တဲ့ library ပါပဲ။ Toast notification တွေကအစ font ပြောင်းပေးပါတယ်။
6. MMU font တွေက bold ပါတာ သိပ်မရှိဘူး။ Zawgyi One ဆိုလဲ bold မရှိဘူး။ ပြီးတော့ ကိုယ့် App တစ်ခုလုံးကို Myanmar font ထည့်လိုက်ရင် Android က bold လုပ်ထားတာတွေပါ ပျောက်ကုန်ရော။
My Solution: ဒီကိစ္စကို ဖြေရှင်းရတာတော့ မလွယ်လှပါဘူး။ ပထမအဆင့်အနေနဲ့ bold ရတဲ့ MMU font ကို ရှာရပါတယ်။ ပထမက Pyidaungsu font ကို လှလို့ သုံးထားပေမယ့် နောက်တော့ bold ရတဲ့ Padauk font ကို ပြောင်းသုံးလိုက်ရတယ်။ Padauk-Book နဲ့ Padauk-Bold ပေါ့။ ဒီ font လေးလဲ တော်တော်သပ်ရပ်ပြီး ဖတ်လို့ကောင်းပါတယ်။ Zawgyi-One ကတော့ bold မရှိလို့ FontForge သုံးပြီး faux bold လို့ခေါ်တဲ့ bold အတု ဖန်တီးပြီး Zawgyi-One-Bold ဆိုပြီး font တစ်ခု ထုတ်လိုက်ပါတယ်။ App ထဲမှာ စုစုပေါင်း font လေးခုတော့ ထည့်လိုက်ရပါတယ်။ Unicode-regular, Unicode-bold, Zawgyi-regular, Zawgyi-bold ဆိုပြီး နေရာတော့ စားသွားပါတယ်။ ပြီးရင် အဲဒီမှာကိစ္စ မပြတ်သေးပါဘူး။ Calligraphy က တစ်ကြိမ်မှာ font တစ်ခုပဲ သုံးနိုင်လို့ font တစ်ခုထက်ပိုသုံးချင်ရင် styles.xml ထဲမှာ TextAppearance style တစ်ခု ဝင်ရေးရပါသေးတယ်။ Bold အတွက် “boldTextAppearance” ဆိုပြီးရေးရတာပါ။ (အသေးစိတ်ကိုတော့ သိချင်လို့ လာမေးမှပဲ ဖြေပါတော့မယ်) အဲဒီ style ရေးပြီးရင် “android:textStyle=bold” အစား “android:textAppearance=?boldTextAppearance” ဆိုပြီး ပြောင်းသုံးရင် bold ကိစ္စ အဆင်ပြေသွားပါပြီ။
7. နောက်ဆုံးတစ်ချက်ကတော့ Zawgyi/MMU font တွေမှာပါတဲ့ English glyph တွေက (ကျွန်တော့်အတွက်တော့) သိပ်မလှဘူး။ App မှာ မြန်မာစာသုံးချင်တာနဲ့ပဲ English စာလုံး မလှတာကိုလည်း မသုံးချင်ပြန်ဘူး။
My Solution: ဒီအတွက်ကတော့ ကျွန်တော် Bariol ဆိုတဲ့ font အလှလေးကို ဝယ်ပြီး အဲဒီက English glyph တွေကို FontForge သုံးပြီး စောနက မြန်မာ font လေးခုထဲကို ကူးထည့်ရပါတယ်။ အရွယ်အစားညီအောင်ပြန်ညှိရတာ spacing ပြန်ညှိရတာတွေတော့ တော်တော်လက်ဝင်ပါတယ်။ မတတ် တတတ်လုပ်ရတာဆိုတော့ ပိုဆိုးပဲ။ ဒါပေမယ့် အပင်ပန်းခံရကြိုးနပ်ပါတယ်။ နောက်ဆုံးမှာတော့ မြန်မာစာလဲလှ English လဲလှတဲ့ font လေးခု ထွက်လာပါတယ်။
အပေါ်က အဆင့်တွေ လုပ်ဆောင်ပြီးတဲ့နောက်မှာတော့ မြန်မာ font ရှိရှိ မရှိရှိ မြန်မာစာမြင်ရပြီး Zawgyi ရော MMU နဲ့ပါ စာရိုက်/ဖတ်လို့ရတဲ့ application တစ်ခုကို ရေးသားနိုင်ခဲ့ပါတယ်။ ဒီဆောင်းပါးဖတ်ပြီး မရှင်းတာတွေရှိရင် ကျွန်တော့်ကို လာမေးလို့ရသလို ပိုကောင်းတဲ့ နည်းလမ်းတွေရှိရင်လည်း မျှဝေပေးစေလိုပါတယ်။ အဆုံးထိ ဖတ်ရှုတဲ့အတွက် ကျေးဇူးတင်ပါတယ်။
For questions: www.facebook.com/nyeinchanwynn