go to http://oracle.in.th

Thursday, July 1, 2010

JSF 2.0 Properties and Localization

หนีมาเที่ยวเชียงใหม่ เขียนจากวันว่างๆที่ไม่มีอะไรทำ กับร้านกาแฟที่ไม่รู้ชื่อร้านใกล้กองบิน 41ฝั่งตรงข้ามร้านหนมเส้น และเนื่องจากเล่นทวิตเตอร์ไป เขียนไป ดูสาวเชียงใหม่น่ารักๆไป ... เลยขอเป็นเรื่องง่ายๆ ละกันครับ แหะๆ

งั้นวันนี้เรามาดูเรื่องการใช้ *.properties และการกำหนด localization ครับใน jsf ครับ
ทีนี้สำหรับคนที่เคยเขียน java มาก่อนจะรู้ว่า java จะมี api สำหรับให้มันโหลด properties files มาเก็บไว้ใน memory ทำให้เร็วเวลาที่จะเรียกใช้นะครับ แต่ในบทนี้เราจะดูถึงการเอา properties file มาเพื่อจัดการการแสดงผลใน java และการทำเว็บสำหรับหลายภาษาผ่าน properties

มาดูกันก่อนว่าต้องดูที่ไฟล์ไหนบ้าง

localization.xhtml, properties.xhtml, LocalizationManagedBean.java, webmessage.properties, webmessage_th.properties

ก็ update or check out กันลงมาได้เลยครับ

ไปดูกันที่ properties.xhtml กันก่อนเลยครับ

<f:loadBundle basename="cc.nuboat.messages.webmessage" var="msg"/>


ประกาศให้ msg แทน properties นั่นๆ ทีนี้ก็สามารถที่จะอ้างถึง message ใน webmessgae.propeties ได้แล้วครับ

<h:head>
----<title>#{msg.title_properties}</title>
</h:head>


**ข้องี่เง่าอย่างของ jsf คือ ถ้า key ใน *.properties เป็น title.properties จะไม่ได้นะครับ (ทั้งที่ควรจะได้) ถ้าอยากรู้ว่าไมไ่ด้จริงลองเปลี่ยน #{msg.title_properties} เป็น #{msg.title.properties} ดูแล้วลองรันดูครับ

ต่อไปคืออะไร จะเห็นว่าเรามี webmessage.properties, webmessage_th.properties ทีนี้ในโค้ดเราจะไปเรียก webmessage แต่เราจะมาทำให้ jsf ไปเรียกใช้ webmessage_th แทนโดยไม่ต้องแก้โค้ดใหม่เลย(ลองนึกถึงโปรแกรมหรือเว็บที่เปลี่ยนภาษาของเมนูต่างๆได้)

ไปดูกันที่ localization.xhtml กันเลยครับ

<f:view locale="#{localizationManagedBean.locale}">

<f:loadBundle basename="cc.nuboat.messages.webmessage" var="msg"/>


จะเห็นว่าผมมีการกำหนด locale ของ jsf ใหม่โดยใช้ค่าที่ get มาจาก localizationManagedBean เพิ่มด้วย

ลองรัน http://127.0.0.1:8080/easyjsf/localization.jsf ดูเลยครับ

ทีนี้จะแสดงผลเป็นภาษาไทยแทนแล้วซึ่งเป็น value จาก webmessage_th แล้ว ^ ^

copyright 2010 @nuboat in wonderland
ข้อเขียนนี้ช่วยฉัน:  

No comments:

Post a Comment