นึกชื่อไทยไม่ออกแฮะว่าจะเขียนเป็นหัวข้อภาษาไทยยังไง จริงๆแล้วก็แค่จะเปลี่ยนภาษาขณะที่รันโปรแกรมไปแล้วนั่นแหละ คิดว่าพึ่งมีใน Flex3 เพราะค้นใน google ก็เจอแต่เอกสารของ Flex3 แฮะถ้าเป็น Flex2 คนต้องใช้วิธีดิบเถื่อนนิดหน่อย ^^!
อย่างแรกที่ต้องทำเพื่อให้ compile flex กับภาษาอื่นๆ ได้คือต้อง copylocale ก่อนโดย flex เตรียม locale พื้นฐานให้สองภาษาคือ อังกฤษ(อังกฤษแบบอเมริกาด้วย แต่มันจะต่างจาก อังกฤษอื่นๆ ยังไงฟะ) กับ ญี่ปุ่น ซึ่งก็ไม่รู้ copy แล้วมันจะต่างกันยังไงอีกนั่นแหละ - -” โดยจากตอนก่อนนู้นๆ จำได้ว่าเคยแนะนำโปรแกรมต่างๆ ใน /bin ของ sdk ไปบ้างแล้วโปรแกรมหนึ่งก็คือ copylocale โดยมีทั้งสำหรับ windows และ linux/unix ของ windows ก็จะมี .exe ตามท้าย จากการทำงานแล้ว จริงๆ มันก็เหมือนกับ copy ไฟล์ธรรมดานะ แต่ดูละเอียดๆ เหมือนมันจะมี compile อะไรบางอย่างด้วยหละ
copylocale en_US th_TH
ผมก็เลือก copy จาก en_US หละ เพราะคิดว่า ja_JP คงเหมาะกับพวกภาษาจีนมากกว่า(มั้ง)
ต่อจากนั้นก็เตรียมไฟล์ที่เก็บคำต่างๆ ทั้งสองภาษาคือ ไทย กับ อังกฤษ (ที่ flash ไม่ทำตรงนี้แต่แรกก็เพราะ ถ้าเป็น flash ธรรมดาคงไม่ต้องการอะไรพวกนี้เท่าไหร่มั้ง แต่พอมาเป็นโปรแกรมใหญ่ การรองรับภาษาหลายๆ ภาษาเลยมีความสำคัญขึ้นมา)
File: /directory/to/resource/en_US/sample.properties
greeting=Greeting
goodbye=Goodbye
File: /directory/to/resource/th_TH/sample.properties
greeting=สวัสดี
goodbye=ลาก่อน
แล้วก็เขียนโปรแกรมเล็กๆ เพื่อจะมาใช้
File: /directory/to/project/sample.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Metadata>
[ResourceBundle('sample')]
</mx:Metadata>
<mx:ArrayCollection id="langs">
<mx:String>English</mx:String>
<mx:String>ไทย</mx:String>
</mx:ArrayCollection>
<mx:Script>
<![CDATA[
import mx.resources.ResourceBundle;
private function changeLocale(event:Event):void {
if (langCombo.selectedItem == "English") {
resourceManager.localeChain = [ "en_US" ]
} else {
resourceManager.localeChain = [ "th_TH" ]
}
}
]]>
</mx:Script>
<mx:VBox>
<mx:ComboBox id="langCombo" dataProvider="{langs}" close="changeLocale(event)" />
<mx:HBox>
<mx:Label text="{resourceManager.getString('sample','greeting')}" fontSize="20" />
<mx:Label text="{resourceManager.getString('sample','goodbye')}" fontSize="20" />
</mx:HBox>
</mx:VBox>
</mx:Application>
จากนั้นเวลา compile ก็ใส่ option เพิ่มอีกนิดหน่อยเป็น
mxmlc sample.mxml -locale=en_US,th_TH -source-path=/directory/to/resource/{locale}
ก็จะได้ไฟล์ .swf ออกมาที่สามารถสลับภาษาได้ในตัว สำหรับ Flex2 ตอนนี้คิดเล่นๆไว้สองอย่างคือ ทำ resource เหมือนกัน แต่ว่าเติม _locale เข้าไปด้วย เวลาสลับภาษาก็ให้สลับที่โค้ดเลย แต่แบบนี้ถึกน่าดู กับ compile ไว้สอง swf พอสลับภาษาก็โหลดอีก swf นึงแทน ก็ถึกที่ user อีก - -” งั้นเปลี่ยนมาใช้ Flex3 เถอะนะ ^^!
อ้างอิง:
เขียนเมื่อ: May 29th, 2008 | หมวด: ภาษาเครื่องกล | แถก: Flex,locale | อ้างอิง |





ทำไมผมไม่มี resourceManager ให้ใช้อ่ะครับ ผมทำตามแล้ว ไม่น่าจะมีอะไรผิด
@arraiwa, งั้นลอง ResourceManager.getInstance() ดูครับ แต่ปกติ resourceManager จะมีมากับ UIComponent ทุกตัวอยู่แล้วนะ