Översätt en applikation i Flex 4, Localization, del 2

 

Detta är del 2 i min guide till att översätta projekt i Flash Builder 4, Flex 4. För att kunna följa med i denna del behöver du veta grunderna till att lokalisera ett projekt. Detta lär du dig i del 1 om översättning som du hittar här.

Del 1 beskrev hur man översätter strängar i Flash Builder 4. Detta är inte den enda resurs som kan lokaliseras. Resursfilen kan även referera till binära objekt som bilder, ljud, video och SWF filer.

Du använder Embed() för att referera dessa objekt i din properties fil.

currentLanguageFlag=Embed("images/sweden.jpg")

Det är även möjligt att använda symboler som ligger inbakade i en SWF file.

currentLanguageFlag=Embed(source="Flags.swf", symbol="sweden")

Du kan till och med inkludera referenser till klasser i din properties fil.

MyClass=ClassReference("se.flashutvecklaren.swedishClass")

@Resource

Det finns ett alternativ till att använda klassen ResourceManager för att hämta värden från en översättningen. I MXML kan du kan använda @Resource istället. Detta sätt är enklare att använda men är också mer begränsat i hur det kan användas. Du kan bara använda @Resource i MXML, du kan inte ändra språk under körning och @Resource returnerar bara strängar.

<s:Label text="@Resource(key='username', bundle='default')" />
  • key är namnet på strängen i properties filen
  • bundle är namnet på resurspaketet

Du kan använda @Resource överallt där det går att använda en sträng.

<mx:Image source="@Resource(key='currentLanguageFlag', bundle='default')"/>

ResourceManager

Det finns en referens till resourceManager i alla klasser som ärver UIComponent, Formatter eller Validator. I övriga klasser kan du komma åt resourceManager genom att använda ResourceManager.getInstance().

ResourceManager skickar ut ett event när du byter värde på parametern localeChain. Detta event får alla bindningar till resursmetoder i ResourceManager att uppdateras. Följande resursmetoder finns i ResourceManager:

  • getString()
  • getNumber()
  • getInt()
  • getUint()
  • getBoolean()
  • getClass()
  • getObject()
  • getStringArray()

Parametern localeChain är en Array vilket möjliggör att vi kan använda oss av ofullständiga översättningar. Detta innebär att du inte behöver duplicera information för språk som har mycket gemensamt. Till exempel för engelska för Storbritannien, en_GB, och för USA, en_US. Om vi redan har en komplett översättning för USA räcker det med att vi specificerar översättningar för de objekt som skiljer sig åt i Storbritanniens resursfil.

Vi sätter värdet på localChain till en Array med båda språken. ResourceManager letar då efter resurser i tur och ordning med början i det första språket och fortsätter därefter att leta i övriga språk till den hittar resursen.

resourceManager.localeChain = [en_GB, en_US];

I detta exempel letar ResourceManager först i en_GB efter en önskad resurs. Finns inte resursen definierad i den översättningen så letar ResourceManager vidare i en_US istället. Detta möjliggör för oss att bara definiera skillnaderna i en_GB och använda övriga resurser från en_US.

Detta var allt i del 2 i min guide till hur man översätter, lokaliserar, en applikation i Flash Builder 4. Du kan hitta ett exempel på lokalisering i detta spel.

Söker ni efter en flashutvecklare att anlita som konsult? Kontakta mig i så fall här. Vill ni veta mer om mig som frilansande flashutvecklare så hittar ni det här. Fler guider om ActionScript 3 för flashutvecklare hittar ni här.