package net.xoetrope.samples.tramslate;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.prefs.Preferences;
import net.xoetrope.optional.annotation.Find;
import net.xoetrope.optional.langmgr.EncodedLanguageResourceBundleLoader;
import net.xoetrope.swing.XComboBox;
import net.xoetrope.xui.XPage;
import net.xoetrope.xui.XPageManager;
/**
* Add support for localization
* @author luano
*/
public class Welcome extends XPage
{
@Find
private XComboBox languageList;
private static boolean inChangeLang = false;
private Hashtable languages;
private String selectedLanguage;
private String defLangCode;
/** Creates a new instance of Welcome */
public Welcome()
{
project.setResourceBundleLoader( new EncodedLanguageResourceBundleLoader( project ));
Preferences rsPrefs = Preferences.userNodeForPackage( getClass());
defLangCode = rsPrefs.get( "defaultLanguage", "en" );
project.setStartupParam( "Language", defLangCode );
pageHelper.componentFactory.setResourceBundle( defLangCode );
}
public void pageCreated()
{
fillLanguageList();
}
/**
* Respond to a change in the language list by resetting the language
*/
public void changeLanguage()
{
if ( !inChangeLang ) {
inChangeLang = true;
String language = (String)languageList.getSelectedItem();
if ( language != null ) {
defLangCode = (String)languages.get( language );
Preferences rsPrefs = Preferences.userNodeForPackage( getClass());
rsPrefs.put( "defaultLanguage", defLangCode );
project.setStartupParam( "Language", defLangCode );
pageHelper.componentFactory.setResourceBundle( defLangCode );
XPageManager pm = project.getPageManager();
pm.reset();
pm.showPage( "Welcome" );
updateBoundComponentValues();
}
inChangeLang = false;
}
}
/**
* Read the language file and fill the language list
*/
private void fillLanguageList()
{
try {
inChangeLang = true;
languages = new Hashtable();
Properties props = new Properties();
String selectedLanguageName = null;
props.load( project.getInputStream( "LanguageList.properties" ));
Enumeration propNames = props.propertyNames();
while ( propNames.hasMoreElements() ) {
String languageName = (String)propNames.nextElement();
String languageCode = (String)props.get( languageName );
if ( languageCode.equals( defLangCode ))
selectedLanguageName = languageName;
languages.put( languageName, languageCode );
languageList.addItem( languageName );
}
if ( selectedLanguageName != null )
languageList.select( (Object)selectedLanguageName );
inChangeLang = false;
}
catch ( Exception ex ) {
}
}
}