Multilanguage ASP.Net Website tips (part 3)

*Eh ternyata seru juga ngeblog disini, saya jadi bikin hattrick hari ini.*

Part 3: Mengubah culture pada ASP.Net

Pada part 1 saya membuat masterpage Anonymous.master. Lalu di part 2 saya mulai mengatur resource file untuk en-US dan ar-KW, dan saya beritahu juga bagaimana cara memetakan value pada setiap ASP.Net control ke resource yang mana. Eh tapi saya lupa memberitahukan cara saya untuk mengubah culture, uiculture di halaman ASP.Net.

Pertama, user ingin mengubah bahasa ke arabic (Kuwait). Mungkin setelah itu ingin kembali lagi ke English, terus bisa balik lagi ke arabic (Kuwait). Kalau begitu saya simpan kode culture ini di session sajalah, misalnya di HttpContext.Current.Session["lang"]. Sehingga saya dapat melakukannya demikian..


string lang = HttpContext.Current.Session["lang"].ToString();

Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);

Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);

 

Saya punya 2 resource file untuk Anonymous.master, yaitu Anonymous.master.ar-KW.resx dan Anonymous.master.resx

 

Jika lang = "ar-KW", maka resource file yang dipilih adalah Anonymous.master.ar-KW.resx

Jika lang = "en-US", maka resource file yang dipilih adalah Anonymous.master.resx (default, karena gak ada Anonymous.master.en-US.resx)

Jika lang = "id" pun resource file yang dipilih adalah Anonymous.master.resx (default, karena gak ada Anonymous.master.id.resx)

 

Potongan kode tersebut wajib dieksekusi pada fase InitializeCulture, oleh sebab itu saya override InitializeCulture pada Page Class

 

protected override void InitializeCulture()

{

   base.InitializeCulture();

   string lang = "en-US"; // default

   if (HttpContext.Current.Session["lang"] != null)

       lang = HttpContext.Current.Session["lang"].ToString();

   this.Culture = lang;

   this.UICulture = lang;

}


Eh tapi saya gak mau copy-paste potongan kode ini di semua halaman loh, makanya saya bikin Page Class baru, katakanlah AndraPage. Supaya terlihat rapih, saya pindahkan potongan kode sebenearnya ke Class Utilities

 

public class AndraPage : System.Web.UI.Page

{

   protected override void InitializeCulture()

   {

       base.InitializeCulture();

       // saya pindahin, tapi gak harus, supaya rapih aja buat yang baca tutorial

       Utilities.InitLanguage(this);

   }

}


 

Karena saya akan menyimpan informasi culture code di Session, berarti saya perlu fungsi untuk mengubah informasi ini pada Session

Saya letakkan saja di Utilities

 

public class Utilities

{

   public static void InitLanguage(Page page)[....]

 

   public static void SwitchLanguage()

   {

       if (HttpContext.Current.Session["lang"] != null && HttpContext.Current.Session["lang"].ToString() == "ar-KW")

       {

           HttpContext.Current.Session["lang"] = "en-US"; // if arabic, switch to en

       }

       else

       {

           HttpContext.Current.Session["lang"] = "ar-KW"; // if not arabic, switch to arabic

       }

       // refresh

       HttpContext.Current.Response.Redirect(HttpContext.Current.Request.CurrentExecutionFilePath);

   }

}

 

Informasi pada Session memang sudah berubah, tapi event InitializeCulture di Page sudah dipanggil sebelum Session ini berubah.

Makanya saya refresh lagi halaman yang dipanggil user. Supaya informasi yang baru ini disertai dengan tampilan yang baru.


Dan saya ingin SwitchLanguage() dipanggil,

ketika user menekan LinkButton yang saya buat di masterpage Anonymous.master

 

<asp:LinkButton ID="BtnLang" ValidationGroup="Language" meta:resourcekey="btnLang" runat="server" OnClick="btnLang_Click" />

 

   protected void btnLang_Click(object sender, EventArgs e)

   {

       Utilities.SwitchLanguage();

   }

 

Jangan lupa menggunakan AndraPage, instead of System.Web.UI.Page

Share this post: | | | |
Published Sunday, June 22, 2008 12:45 AM by anwarchandra

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 

Enter the numbers above:
Powered by Community Server (Commercial Edition), by Telligent Systems