นึกชื่อไทยไม่ออกแฮะว่าจะเขียนเป็นหัวข้อภาษาไทยยังไง จริงๆแล้วก็แค่จะเปลี่ยนภาษาขณะที่รันโปรแกรมไปแล้วนั่นแหละ คิดว่าพึ่งมีใน 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 เถอะนะ ^^!
อ้างอิง:
ทำไมผมไม่มี resourceManager ให้ใช้อ่ะครับ ผมทำตามแล้ว ไม่น่าจะมีอะไรผิด
@arraiwa, งั้นลอง ResourceManager.getInstance() ดูครับ แต่ปกติ resourceManager จะมีมากับ UIComponent ทุกตัวอยู่แล้วนะ