|
Application Programming: Using Language Catalogs |
|
This example creates a widget with two buttons whose text strings change between two languages, depending on the selection from a drop-down list.
The following language catalogs are two separate files (as denoted by the <IDLffLangCat> tag for each) and should be placed on your system as such.
<?xml version="1.0"?> <!-- $Id: myButtonsText.eng.cat,v 1.1 2004 rsiDoc Exp $ --> <IDLffLangCat APPLICATION="myOpenButtons" VERSION="1.0" AUTHOR="ITT"> <LANGUAGE NAME="English"> <KEY NAME="Button:OpenFile">Open File</KEY> <KEY NAME="Button:OpenFolder">Open Folder</KEY> </LANGUAGE> </IDLffLangCat> <?xml version="1.0"?> <!-- $Id: myButtonsText.fr.cat,v 1.1 2004 rsiDoc Exp $ --> <IDLffLangCat APPLICATION="myOpenButtons" VERSION="1.0" AUTHOR="ITT"> <LANGUAGE NAME="French"> <KEY NAME="Button:OpenFile">Ouvrir le Fichier</KEY> <KEY NAME="Button:OpenFolder">Ouvrir le Dossier</KEY> </LANGUAGE> </IDLffLangCat>
To use the following code, save it in a .pro file. You do not have to run it from the same directory containing the language catalog files.
; Routine to change the language of the button labels.
PRO button_language_change, pstate
vLangString = (*pstate).vlang
; Access the language catalog to retrieve string values.
oLangCat = OBJ_NEW( 'IDLffLangCat', vLangString, $
APP_NAME='myOpenButtons' , APP_PATH=(*pstate).vpath)
; Access and store language-specific strings in the structure.
strOpenFile = oLangCat->Query( 'Button:OpenFile' )
strOpenFolder = oLangCat->Query( 'Button:OpenFolder' )
WIDGET_CONTROL, (*pstate).pb1, SET_VALUE=strOpenFile
WIDGET_CONTROL, (*pstate).pb2, SET_VALUE=strOpenFolder
END
; Event handler for 'Open File' button.
PRO button_file, event
sFile = DIALOG_PICKFILE( TITLE='Select image file' )
END
; Event handler for 'Open Folder' button.
PRO button_folder, event
sFolder = DIALOG_PICKFILE( /DIRECTORY, $
TITLE='Choose the directory in which to store the data' )
END
; Event handler for 'Language' droplist.
PRO button_language_event, event
WIDGET_CONTROL, event.top, GET_UVALUE = pstate
; Access user's language selection and store it in the pointer.
IF event.index EQ 0 THEN (*pstate).vlang = 'English'
IF event.index EQ 1 THEN (*pstate).vlang = 'French'
; Call the procedure to change the button text.
button_language_change, pstate
END
; Widget-creation procedure
PRO button_language
; Prompt for path to catalog files
vpath=dialog_pickfile( TITLE='Select directory that ' + $
'contains *.cat files', /DIRECTORY )
IF vpath EQ '' THEN return
; Create a top level base. Not specifying tab mode uses default
; value of zero (do not allow widgets to receive or lose focus).
tlb = WIDGET_BASE( /COLUMN, TITLE = "Language Change", $
XSIZE=220, /BASE_ALIGN_CENTER )
; Create the button widgets.
bbase = WIDGET_BASE( tlb, /COLUMN )
pb1 = WIDGET_BUTTON( bbase, VALUE='Open File', $
UVALUE='openFile', XSIZE=105, EVENT_PRO='button_file' )
pb2 = WIDGET_BUTTON( bbase, VALUE='Open Folder', $
UVALUE='openFolder', XSIZE=105, EVENT_PRO='button_folder' )
; Create a drop-down list indicating available catalogs.
vLangList = ['English', 'French']
langDrop = WIDGET_DROPLIST( tlb, VALUE=vLangList, $
TITLE='Language' )
; Draw the widgets and activate events.
WIDGET_CONTROL, tlb, /REALIZE
; Create the state structure.
state = { $
pb1:pb1, $
pb2:pb2, $
vlang:'', $
vpath:vpath $
}
pstate = PTR_NEW( state, /NO_COPY )
WIDGET_CONTROL, tlb, SET_UVALUE=pstate
XMANAGER, 'button_language', tlb
; Clean up pointers.
PTR_FREE, pstate
END
IDL Online Help (March 06, 2007)