Skip to content

Blog

Shipping one Android app in English, Myanmar and Thai

2026-10-19

Practical notes on strings, plurals, per-app language switching, fonts and testing when one app has to speak three languages.


App တစ်ခုကို English၊ မြန်မာ၊ ထိုင်း ဘာသာသုံးမျိုးနဲ့ ထုတ်တဲ့အခါ

App ကို ဘာသာပြန်တယ်ဆိုတာ strings အလုပ်လို့ ထင်ရပါတယ် — strings.xml ကို copy ကူး၊ အဲဒီဘာသာ ပြောတတ်တဲ့သူကို ပေးလိုက်၊ ပြီးပြီ။ ဒါပေမယ့် မြန်မာ build မှာ ခလုတ်တစ်ဝက်လောက် စာလုံးတွေ ပြတ်နေတယ်၊ ထိုင်း build မှာ စကားလုံးတစ်လုံးကို အလယ်ကနေ ဖြတ်ပြီး line ခွဲသွားတယ်၊ English မှာတော့ "1 items" ဆိုပြီး ပေါ်လာတယ်။ App တစ်ခုက English၊ မြန်မာ၊ ထိုင်း သုံးမျိုး ပြောရမယ်ဆိုရင် ကျွန်တော် အခု စစ်ဆေးတာတွေကို ရေးထားပါတယ်။

Strings: ဘာသာတစ်ခုကို folder တစ်ခု၊ စာကြောင်း မဆက်ပါနဲ့

  • values/ မှာ English ထားပါတယ်၊ ဘာသာပြန် မရှိတဲ့ string တွေအတွက် fallback လည်း ဖြစ်ပါတယ်။ values-my/ က မြန်မာ၊ values-th/ က ထိုင်း။
  • စာကြောင်းကို အပိုင်းအစတွေ ဆက်ပြီး မဆောက်ပါနဲ့။ "Paid " + name + " today" က English မှာပဲ အဆင်ပြေပါတယ်။ မြန်မာနဲ့ ထိုင်းမှာ ကြိယာနဲ့ နာမည်ရဲ့ အစီအစဉ် မတူပါဘူး။ Placeholder ပါတဲ့ string တစ်ခုတည်း သုံးပါ — <string name="paid_today">ယနေ့ %1$s ကို ပေးပြီးပါပြီ</string>။
  • String တစ်ခုချင်းစီ အပေါ်မှာ comment ရေးပြီး ဘာသာပြန်သူကို context ပေးပါ။ ခလုတ်ပေါ်က "Back" နဲ့ ခန္ဓာကိုယ်က "back" က စကားလုံး မတူပါဘူး။

Plural က နေရာတိုင်း မတူပါဘူး

English မှာ one နဲ့ other လိုပါတယ်။ မြန်မာနဲ့ ထိုင်းမှာ အရေအတွက် အလိုက် နာမ်ပုံစံ မပြောင်းတဲ့အတွက် other တစ်ခုပဲ သုံးပါတယ်။ ဒါပေမယ့် plural ကို မှန်မှန်ကန်ကန် ကြေညာထားရင် ဘာသာတိုင်းက သူ့စည်းမျဉ်းအတိုင်း ရပါတယ် —

<plurals name="items_count">
    <item quantity="one">%d item</item>
    <item quantity="other">%d items</item>
</plurals>

values-my/ နဲ့ values-th/ မှာတော့ အဲဒီ entry ထဲမှာ other တစ်ခုပဲ ပါပါတယ်။ pluralStringResource(R.plurals.items_count, n, n) ကို ခေါ်လိုက်ရင် ဘာသာသုံးမျိုးလုံးမှာ မှန်ကန်စွာ ပြပါတယ်။

သုံးစွဲသူကို ဘာသာ ရွေးခွင့်ပေးတာ

မြန်မာနဲ့ ထိုင်းမှာ ဖုန်းကို English နဲ့ ထားပေမယ့် app ကိုတော့ ကိုယ့်ဘာသာနဲ့ ဖတ်ချင်တဲ့သူ အများကြီးရှိပါတယ်၊ ပြောင်းပြန်လည်း ရှိပါတယ်။ Android 13 မှာ per-app language setting ပါလာပြီး AppCompat က version အဟောင်းတွေမှာပါ API တစ်ခုတည်းနဲ့ သုံးလို့ရအောင် လုပ်ပေးပါတယ် —

AppCompatDelegate.setApplicationLocales(
    LocaleListCompat.forLanguageTags("my")
)

en၊ my၊ th ပါတဲ့ locales_config.xml ထည့်ထားရင် system ရဲ့ App languages screen မှာလည်း app ပေါ်လာပါတယ်။

အခက်ဆုံးက စာလုံးပုံစံ (script) ပါ

ဘာသာပြန်က စကားလုံးကို မှန်အောင် လုပ်ပေးတယ်။ ဖတ်လို့ရ မရကိုတော့ typography က ဆုံးဖြတ်တယ်။

  • Zawgyi မဟုတ်ဘဲ Unicode။ မြန်မာ content အဟောင်းတွေ အများစုက Unicode code point တွေကို ပြန်သုံးထားတဲ့ Zawgyi နဲ့ ဖြစ်ပါတယ်။ Unicode ကိုပဲ သိမ်းပြီး ထုတ်ပါ၊ import လုပ်တဲ့ စာတွေကို database မရောက်ခင် convert လုပ်ပါ။
  • စာလုံးတွေ ပိုမြင့်တယ်။ မြန်မာနဲ့ ထိုင်းမှာ အပေါ်အောက် သင်္ကေတတွေ ထပ်ပါတယ်။ Height ကို fix လုပ်ထားရင်၊ lineHeight ကျပ်ထားရင် ပြတ်သွားပါတယ်။ စာကို ကိုယ်တိုင် တိုင်းခွင့်ပေးပြီး အရှည်ဆုံး string နဲ့ စမ်းပါ။
  • စကားလုံးကြား space မရှိဘူး။ ဘာသာနှစ်ခုလုံးမှာ space မခြားတဲ့အတွက် line ခွဲဖို့ dictionary လိုပါတယ်။ Android က လုပ်ပေးပါတယ် — body text မှာ maxLines = 1 နဲ့ ellipsis ကို အတင်းမထားရင်ပေါ့။
  • ဂဏန်းနဲ့ ရက်စွဲ။ ကိုယ်တိုင် pattern မရေးဘဲ သုံးစွဲသူရဲ့ locale နဲ့ (NumberFormat၊ DateTimeFormatter) format လုပ်ပါ။ ထိုင်းဖုန်းတွေမှာ ဗုဒ္ဓသက္ကရာဇ် နှစ်ကို သုံးနိုင်ပါတယ်။

စမ်းသပ်တာ

Hard-code လုပ်ထားတဲ့ စာနဲ့ မချဲ့နိုင်တဲ့ layout တွေကို ရှာဖို့ pseudo-locale ကို ဖွင့်ပါ။ အဓိက screen တိုင်းကို ဘာသာသုံးမျိုးလုံးနဲ့ screenshot ရိုက်ပါ။ Release မလုပ်ခင် အဲဒီဘာသာ မိခင်ဘာသာ ပြောတဲ့သူကို ဖုန်းအစစ်ပေါ်မှာ app ကို ဖတ်ခိုင်းပါ — strings spreadsheet ကိုပဲ ဖတ်ခိုင်းတာ မဟုတ်ဘဲ။

ပြန်လုပ်ရရင် ဘာကို ပြောင်းမလဲ

မြန်မာနဲ့ ထိုင်း folder တွေကို ပထမဆုံးနေ့ကတည်းက ထည့်ထားမှာပါ — placeholder စာနဲ့ပဲ ဖြစ်ဖြစ်။ English တစ်ခုတည်းနဲ့ ဆောက်ထားတဲ့ layout တိုင်းကို နောက်မှ ပြန်ပြင်ရပြီး အဲဒါက အစကတည်းက ချဲ့လို့ရအောင် ဆောက်ထားတာထက် အမြဲ ပိုကြာပါတယ်။

All posts