Flex runtime localization

นึกชื่อไทยไม่ออกแฮะว่าจะเขียนเป็นหัวข้อภาษาไทยยังไง จริงๆแล้วก็แค่จะเปลี่ยนภาษาขณะที่รันโปรแกรมไปแล้วนั่นแหละ คิดว่าพึ่งมีใน 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



  
    [ResourceBundle('sample')]
  

  
    English
    ไทย
  

  
    

  
    
    
      
      
    
  

จากนั้นเวลา 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 เถอะนะ ^^!

อ้างอิง:

  1. Flex 3:Feature Introductions:Runtime Localization
  2. Flex 3 Localization

About llun

Just a programmer

,

  • http://llun.info llun

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

  • arraiwa

    ทำไมผมไม่มี resourceManager ให้ใช้อ่ะครับ ผมทำตามแล้ว ไม่น่าจะมีอะไรผิด