DateChooser소스를 살펴 보던중 요일은 어떻게 가지고 오는지 살펴보던중 set dayNames()메소드에서 아래와 같은 소스가 눈에 띄었다.
-DateChooser.as
resourceManager.getStringArray(
"controls", "dayNamesShortest");
-controls.properties
# Shared by DateChooser, DateField, CalendarLayout
dayNamesShortest=S,M,T,W,T,F,S
요일을 가지고 오는 소스이다. resourceManager.getStringArray(
"controls", "dayNamesShortest");
-controls.properties
# Shared by DateChooser, DateField, CalendarLayout
dayNamesShortest=S,M,T,W,T,F,S
바로 .properties 파일에서 ResourceManager를 이용하여 해당 데이터를 읽어 오는것이다.
properties 파일은 {sdk}\bundles\en_US\src 에 위치한다.
SDK에서는 이런식으로 국제화를 하고 있었다.
이제야 이런게 눈에 보이다니..ㅎㅎ 분발해야겠다
출처 : http://blog.empas.com/bonggai/31171590
1. 다음과 같이 properties 파일을 생성한다.
# locale/en_US/RegistrationForm.properties
registration_title=Registration
submit_button=Submit Form
personname=Name
street_address=Street Address
city=City
state=State
zip=ZIP Code
thanks=Thank you for registering!
|
2. 컴파일 방법
- 일반적인 컴파일 방법
mxmlc -locale=en_US -source-path=c:\myapp\locale\{locale} -allow-source-path-overlap=true c:\myapp\LocalizedForm.mxml
- Flex Builder 설정
“-locale=en_US -source-path=../locale/{locale} -allow-source-path-overlap=true”
3.Propertis File 문법
다음과 같이 구분 세미콜론이나 기타 문자로 구분할 수 있다.
key = value
key : value
key value |
주석 처리는 다음과 같이 # 또는 !로 입력할수 있다.
! This is a comment.
# This is a comment.
|
이스케이프 문자열은 표준 이스케이프 문자열로 입력한다 (\n (newline), \r (return), \t (tab), \u0020 (space), and \\ (backslash) )
4. 다른 언어 설정 방법
copylocale 명령어를 사용 하여 다른 언어에 대하여 설정한다.
(copylocale는 flexSDK\bin 에 있다.)
(copylocale는 flexSDK\bin 에 있다.)
문법 ) copylocale original_locale new_locale
Ex) copylocale en_US es_ES
5. resources 사용법
@Resource directive 과 Methods of the ResourceManager class를 사용하는 방법 2가지로 구분되어진다.
5.1 @Resource directive 사용법
<?xml version="1.0"?>
<!-- l10n/LocalizedForm.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Form>
<mx:FormItem label="@Resource(key='personname', bundle='RegistrationForm')">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="@Resource(key='street_address', bundle='RegistrationForm')">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="@Resource(key='city', bundle='RegistrationForm')">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="@Resource(key='state', bundle='RegistrationForm')">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="@Resource(key='zip', bundle='RegistrationForm')">
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
</mx:Application> |
5.2 ResourceManager 사용
5.2.1 첫번째 메타데이타를 정의한다.
<mx:Metadata>
[ResourceBundle("Resource_file_name")]
</mx:Metadata>
|
ex)
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
</mx:Metadata>
|
여러 개의 Resource를 bundles 할 수 있다.
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
[ResourceBundle("StyleProperties")]
[ResourceBundle("FormatterProperties")]
</mx:Metadata>
|
[ ActionScript Class에서 사용법 ]
[ResourceBundle("RegistrationForm")]
public class MyComponent extends UIComponent {
...
}
|
5.2.2 ResourceManager를 사용하여 표현하는법
ResourceManager's getString() 를 사용하여 표현하고자 하는 resources를 표현할수 있다.
<?xml version="1.0"?>
<!-- l10n/LocalizedFormWithBinding.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.resources.ResourceBundle;
import mx.controls.Alert;
private function registrationComplete():void {
Alert.show(resourceManager.getString('RegistrationForm', 'thanks'));
}
]]></mx:Script>
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
</mx:Metadata>
<mx:Form>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','personname')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','street_address')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','city')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','state')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','zip')}">
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
<mx:Button id="b1" label="{resourceManager.getString('RegistrationForm','submit_button')}" click="registrationComplete()"/>
</mx:Application>
|
이미지를 표현하고자 할떄는 ResourceManager's getClass()를 이용한다.
6. locals 실시간 변경
6.1 copylocale 명령어를 사용하여 사용하고자 하는 언어를 카피 설정한다.
ex) copylocale en_US ko_KR
6.2 실행시에 resource가 반영되기 위해서는 다음과 같이 설정한다.
-locale=en_US, ko_KR
6.3 localeChain property를 이용하여 locales를 변경한다.
6.4 다음 예제는 콤보박스가 변경될 때 localeChain property를 업데이트 시켜준다.
<?xml version="1.0"?>
<!-- l10n/BasicLocaleChain.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
<mx:Script><![CDATA[
import mx.resources.ResourceBundle;
import mx.controls.Alert;
[Bindable]
private var locales:Array = [ "ko_KR","en_US" ];
private function initApp():void {
b1.setStyle("downSkin", resourceManager.getClass("RegistrationForm", "flag"));
// Initialize the ComboBox to the first locale in the locales Array.
localeComboBox.selectedIndex = locales.indexOf(resourceManager.localeChain[0]);
}
private function registrationComplete():void {
Alert.show(resourceManager.getString('RegistrationForm', 'thanks'));
}
private function comboChangeHandler():void {
// Set the localeChain to either the one-element Array
// [ "en_US" ] or the one-element Array [ " ko_KR " ].
resourceManager.localeChain = [ localeComboBox.selectedItem ];
// This style is not bound to the resource bundle, so it must be reset when
// the new locale is selected.
b1.setStyle("downSkin", resourceManager.getClass("RegistrationForm", "flag"));
}
]]></mx:Script>
<mx:Metadata>
[ResourceBundle("RegistrationForm")]
</mx:Metadata>
<mx:Image source="{resourceManager.getClass('RegistrationForm', 'flag')}"/>
<mx:ComboBox id="localeComboBox"
dataProvider="{locales}"
change="comboChangeHandler()"
/>
<mx:Form>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','personname')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','street_address')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','city')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','state')}">
<mx:TextInput/>
</mx:FormItem>
<mx:FormItem label="{resourceManager.getString('RegistrationForm','zip')}">
<mx:TextInput/>
</mx:FormItem>
</mx:Form>
<mx:Button id="b1" label="{resourceManager.getString('RegistrationForm','submit_button')}" click="registrationComplete()"/>
</mx:Application> |
6.5 컴파일 옵션을 다음과 같이 설정한다.
-locale=en_US,ko_KR -allow-source-path-overlap=true -source-path=locale/{locale}
6.6 multiple locales 사용하기 위해서는 다은과 같은 경로상에 파일이 위치한다.
/main/BasicLocaleChain.mxml
/main/locale/en_US/RegistrationForm.properties
/main/locale/en_US/images/unitedstates.gif
/main/locale/es_ES/RegistrationForm.properties
/main/locale/es_ES/images/spain.gif |
6.7 properties의 내용은 다음과 같다.
# /locale/en_US/RegistrationForm.properties
registration_title=Registration
submit_button=Submit Form
personname=Name
street_address=Street Address
city=City
state=State
zip=ZIP Code
thanks=Thank you for registering!
flag=Embed("images/unitedstates.gif")
# /locale/es_ES/RegistrationForm.properties
registration_title=Registro
submit_button=Someta La Forma
personname=Nombre
street_address=Dirección De la Calle
city=Ciudad
state=Estado
zip=Código postal
thanks=¡Gracias por colocarse!
flag=Embed("images/spain.gif")
|
6.8 resourceManager는 다음과 같은 형태로 값을 가져올수 있다.
resourceManager.getNumber("myResources", "PRICE"); // Returns a Number like 19.99.
resourceManager.getInt("myResources", "AGE"); // Returns an int like 21.
resourceManager.getUint("myResources", "COLOR"); // Returns a Uint like 0xFF33AA.
resourceManager.getBoolean("myResources", "SENIOR") // Returns the Boolean like true.
아래 형태도 사용할수 있다.
getClass()
getString()
getObject()
getStringArray()
|
참조 URL : http://livedocs.adobe.com/flex/3/html/l10n_1.html
'Flex / AIR / AS' 카테고리의 다른 글
[Flex3.0] Module 형변환 에러 (0) | 2009.03.10 |
---|---|
[Flex3.0] CSS를 사용하여 FormItem 라벨 정렬 (0) | 2009.02.16 |
[Flex3] ItemRenderer나 ItemEditor에 사용되는 컴포넌트에 StyleName 적용시키자. (2) | 2009.02.11 |
[FLEX3.0] ScrollBar... (0) | 2009.02.11 |
[AS3.0] 객체 복사.( ObjectUtil ) (0) | 2009.02.07 |