November 24, 2012

Internationalization

ကျွှန်တော်သည် Java ပရိုဂရမ်မင်းနှင့် ပတ်သက်ပြီး Easy Java ဟူသော ခေါင်းစဉ်ဖြင့် OOP နှင့် ပတ်သက်သော Java ဘာသာရပ်၏ ထူးခြားချက်များကို စတင်ရေးသားခဲ့၏။ Easy Java ကို ရေးပြီးနောက်တွင် ပရိုဂရမ်မင်း၏ အခြေခံအား မရေးသားခဲ့သောကြောင့် ပရိုဂရမ်မင်းအား မလေ့လာခဲ့ဘူးသော စာဖတ်သူများအတွက် အထောက်အကူ ဖြစ်စေရန်ရည်ရွယ်၍ အခြေခံဖြစ်သော Basic Programming ခေါင်းစဉ်ကို ဆက်လက် ရေးသားခဲ့၏။ Basic Programming နှင့် Easy Java အကြောင်းအား ဖတ်ပြီးပါက Java Programming အကြောင်းကို အတော်လေး တည်းမိခေါက်မိ ရှိသွားမည် ဖြစ်သည်။ Java Source Code များအား ဖတ်နိုင်လာမည် ဖြစ်သည်။ ဆက်လက်၍ Java EE နှင့် ပတ်သက်သော အကြောင်းအရာများကို လေ့လာနိုင်မည် ဖြစ်သည်။

သို့ရာတွင်ပရိုဂရမ်များအား ရေးနိုင်လာပြီလား ဆိုတော့ လက်ချ ရေးနိုင်မည် မဟုတ်သေး။ အဘယ်ကြောင့်ဆိုသော် အသုံးပြုရမည့် API များအကြောင်းကို မလေ့လာရသေး သောကြောင့်ဖြစ်၏။ ထို့ကြောင့် ပြီးခဲ့သော ဘလောဂ်များဖြင့် java.util ၏ အောက်မှ Collection Framework ၏အကြောင်းအရာများကို Easy Java API ဟု ခေါင်းစဉ်ဖြင့် ရေးသားခဲ့၏။ သို့ရာတွင် Collection တစ်ခုတည်းဖြင့် အခန်း၉ ခန်းဖြစ်သွား၏။ အခြား အကြောင်းအရာများ မပါသေးပါ။ ခေါင်းစဉ်တစ်ခုတွင် အခန်း ၉ ခန်း ၁၀ခန်းသာ ပါသင့်ပါသည်။ ထို့ထက်များသွားလျှင် ရေးသူရော ဖတ်သူပါ ရည်ရွယ်ချက် ပျောက်သွားတတ်ပါသည်။ ထို့အတွက် Easy Java API အား ရပ်နားပြီး Java SE ၏ Sub Title များ အနေဖြင့် ရေးသားသွားရန် ဆုံးဖြတ်လိုက်ပါသည်။ ပြီးခဲ့သော Collection များအား Java SE : Collection Framework ဟု ခေါင်းစဉ်ပြောင်းလိုက်ပါသည်။

ယခုတစ်ခေါက် ခေါင်းစဉ်မှာ Java SE : Utility Classes ဖြစ်ပြီး၊ java.lang၊ java.text နှင့် java.util ၏ အောက်မှ အသုံးဝင်သော API များအား မိတ်ဆက်သွားပါမည်။ ယခုတစ်ခေါက်တွင် Java နှင့် ပတ်သက်သော Internationalization အကြောင်းကို ရေးသားသွားပါမည်။


Localae

Localae ဆိုသည်မှာ ဘာသာစကား တစ်ခုအား ပူးတွဲအသုံးပြုနေသော ဒေသအား ခေါ်ဆိုပြီး၊ Java ဘာသာရပ်တွင် java.util.Localae ဖြင့် ကိုယ်စားပြုဖော်ပြလေ့ရှိ၏။ Localae မတူညီပါက အသုံးပြုနေသော ဘာသာစကား များအပြင်၊ ကိန်းဂဏန်း၊ နေ့စွဲ၊ ကြေးငွေ ဖော်ပြပုံတို့မှာ တူညီနိုင်မည် မဟုတ်ပေ။ ထို့အတွက် အပလီကေးရှင်း တစ်ခုအား ကမ္ဘာအနှံ့တွင် အစဉ်ပြေပြေ အသုံးပြုနိုင်ဖို့အတွက် Error Message များမှအစ တစ်ခုချင်း ပြောင်းလည်းပြင်ဆင်ထားရန် လိုအပ်ပါသည်။ အဆိုပါ ဘာသာရပ်များအပေါ် မှုတည်၍ ပြောင်းလည်းခြင်း အတွက် Java ဘာသာရပ်တွင် ပြင်ဆင်ထားသော Utility ကတော့ Localae ပဲ ဖြစ်၏။

Java ပတ်ဝင်းကျင်တွင် Lacaleတစ်ခုအား [language code(2)]_[country code(2)]_[additional information] ဟူ၍ ရေးသားလေ့ရှိ၏။ ဥပမာအားဖြင့် ဂျပန်ဆိုပါက language code က jp ဖြစ်ပြီး၊ နိုင်ငံကုဒ်က JP ဖြစ်သောကြောင့် localae သည် jp_JP ဟု ဖော်ပြနိုင်မည် ဖြစ်သည်။ အမေရိက ဆိုပါက  ဘာသာစကားသည် en ဖြစ်ပြီး၊ နိုင်ငံသည် US ဖြစ်သောကြောင့် en_US ဖြစ်၏။ တဖန် အီတလီဆိုပါက ဘာသာစကားသည် it ဖြစ်ပြီး၊ နိုင်ငံသည် IT ဖြစ်သောကြောင့် it_IT ဖြစ်မည် ဖြစ်သည်။ ဘာသာစကားကုဒ်သည် ISO-639 ဖြင့် သတ်မှတ်ထားပြီး၊ နိုင်ငံကုဒ်အား ISO-3166 အပေါ်မှုတည်၍ သတ်မှတ်ထားပါသည်။

Locale တွင် Argument တစ်ခုကို ပိုင်ဆိုင်သော Constructor မှ အစပြု၍၊ Argument 3 ခုကို အသုံးပြုသော Constructor အထိ အမျိုးအစား ၃မျိုးရှိပါသည်။ အဆိုပါ Arguments များမှာ၊ Language Code, Country Code နှင့် အခြားသော အချက်အလက်များ တို့ ဖြစ်ကြသည်။ သို့ရာတွင် ပုံမှန်အားဖြင့် Constructor မှ New လုပ်၍ အသုံးပြုခြင်းနည်းအား အသုံးပြုလေ့မရှိပါ။ များသောအားဖြင့် ကိန်းသေအဖြစ် ရေးသားထားသော Locale များအား အသုံးပြု၍သော်၎င်း၊ Lacale#getDefault လုပ်ဆောင်ချက်အား အသုံးပြု၍သော်၎င်း Locale အော့ဘဂျက်များအား အသုံးပြုလေ့ရှိပါသည်။

LocaleDefaultSample.java
import java.util.Locale;

public class LocaleDefaultSample {

    public static void main(String[] args) {

        Locale defaultLocale = Locale.getDefault();
        System.out.println(defaultLocale.getDisplayCountry());
        System.out.println(defaultLocale.getDisplayLanguage());
    }

} 

အထက်ပါအတိုင်း Locale#getDefault အား အသုံးပြုခြင်းအားဖြင့် လက်ရှိ ပတ်ဝင်းကျင်တွင် အသုံးပြုနေသော Default Locale ကို ရရှိနိုင်မည် ဖြစ်သည်။ Locale Object ၏ getter လုပ်ဆောင်ချက်များအား အသုံးပြုပါက Date Format တွေ၊ Number Format တွေ၊ Currency အစရှိတဲ့ ပတ်ဝန်းကျင်အပေါ်မှုတည်၍ ပြောင်းလည်းတက်သော အသုံးပြုချက်များကို အသုံးပြုနိုင်မည် ဖြစ်သည်။

တဖန် အသုံးပြုနေသော Java ပတ်ဝင်းကျင်ပေါ်တွင် အသုံးပြုနိုင်သော Locale များအား Locale#getAvailableLocales လုပ်ဆောင်ချက်အား အသုံးပြု၍ သိရှိနိုင်ပါသည်။

LocalaeSample.java
import java.util.Currency;
import java.util.Locale;

public class LocalaeSample {

    public static void main(String[] args) {

        Locale [] ls = Locale.getAvailableLocales();

        for(Locale lo : ls) {
            try {
                Currency c = Currency.getInstance(lo);
                System.out.println(lo + " : " + c.getCurrencyCode());
            } catch (Exception e) {
                System.out.println("Can't get currency : " + lo);
            }
        }
    }
}

အထက်ဖော်ပြပါအတိုင်း Locale#getAvailableLocales လုပ်ဆောင်ချက်အား အသုံးပြု၍ လက်ရှိ Java ပတ်ဝင်းကျင် အတွင်း အသုံးပြုနိုင်သော Locale များအား ရယူပါသည်။ တဖန် for ဝါကျအား အသုံးပြု၍ Locale Object တစ်ခုချင်းဆီမှ Currency Object အား ရယူပါသည်။ ပြီးပါက ကွန်ဆိုးပေါ်တွင် locale နှင့် ၎င်းတွင် အသုံးပြုနိုင်သော Currency Code အား ရေးကြည့်စေပါသည်။

ဝမ်းနည်းစရာကောင်းလောက်အောင်ပင် လက်ရှိ Java SE 7 ပတ်ဝင်းကျင်တွင် မြန်မာလိုကယ်အား အသုံးပြုနိုင်ခြင်း မရှိသေးပါ။ ကျွှန်တော်တို့တွေ အများကြီး ကြိုးစားရပါဦးမည်။

ကိုးကား

http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html

ဆက်ပါဦးမည်။ လေးစားစွာဖြင့်။
မင်းလွင်

1 comment:

  1. အကိုေရ အကို႔ေမးလ္ကို ရွာတာ မေတြ႕လို႔ ဒီကေနပဲ စာေရးလိုက္ပါတယ္ ။
    ညီက python ကို ေလ႔လာခ်င္တာပါ ။ သံုးခ်င္တဲ႔ db က sqlite နဲ႔ သံုးခ်င္ပါတယ္ ။ အကို ဆီမွာေရးထားတာလည္းဖတ္ေနပါတယ္ အကို ။ လမ္းၾကံဳရင္ၿဖင္႔ programming အေၿခခံနဲ႔ sqlite အေၾကာင္းကို အေသးစိတ္ေလးေရးေပးေစခ်င္ပါတယ္ အကို ။ sqlite ကို စၿပီးေလ႔လာခ်င္တာမို႔ really beginner အတြက္ သင္႔ေတာ္တဲ႔ စာအုပ္ေလးမ်ားရွိရင္ ကၽြန္ေတာ္႔ေမးလ္ကို စာအုပ္နာမည္ၿဖစ္ၿဖစ္ ၊ စာအုပ္ၿဖစ္ၿဖစ္ ပို႔ေပးပါလားအကို
    ေလးစားစြာၿဖင္႔
    sagittarus999@gmail.com

    ReplyDelete