В настоящее время я разрабатываю приложение, которое должно быть доступно на многих языках, и после долгих исследований я вернулся к использованию resouceBundles.Я использую java se 1.6 и java ee 6 с jsf 1.2 и glassfish 3.1 ..
Я получил следующие коды со всего интернета и расставил их так, чтобы имело смысл ... Теперь вопрос в том,ResourceBundle загружается нормально, но не обновляется .. Я пробовал так много разных методов ResourceBundle.clearCache (), но ни один из них не работает ...
Обратите внимание, в классе Control я проверяю локальи загрузка данных, чтобы соответствовать этому.Позже это будет заменено системой, поддерживаемой базой данных.Это только тестовый код, чтобы убедиться, что у меня работает базовая структура ...
CODE_SAMPLE: LocalTest.java - Комплект ресурсов
public class LocalTester extends ResourceBundle {
protected static final String BUNDLE_NAME = "local.lantest.LocalTester";
protected static final Control UTF8_CONTROL = new LocalTesterControl();
public LocalTester() {
setParent(ResourceBundle.getBundle(BUNDLE_NAME, FacesContext.getCurrentInstance().getViewRoot().getLocale(), UTF8_CONTROL));
}
@Override
protected Object handleGetObject(String key) {
return parent.getObject(key);
}
@Override
public Enumeration<String> getKeys() {
return parent.getKeys();
}
public static Control getUTF8_CONTROL() {
return UTF8_CONTROL;
}
}
CODE_SAMPLE: LocalTestControl.java - Комплект ресурсовControl
public class LocalTesterControl extends Control {
@Override
public boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime) {
return true;
}
@Override
public long getTimeToLive(String baseName, Locale locale) {
return TTL_DONT_CACHE;
}
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
System.out.println("---------------------------LOADING LOCALE PACK-------------------------------------");
System.out.println("Printing baseName = " + baseName);
System.out.println("Printing locale.getLanguage() = " + locale.getLanguage());
System.out.println("Printing locale.getDisplayLanguage() = " + locale.getDisplayLanguage());
ResourceBundle rbdl;
if (locale.getLanguage().compareTo("fr") == 0) {
System.out.println("------- LOAD FRENCH language pack load");
rbdl = new ListResourceBundle() {
@Override
protected Object[][] getContents() {
Object[][] aa = {
{"welcome", "FR- Welcome" + (new Date().toString())},
{"message", "FR- message"},
{"signoff", "FR- Sign Off"},
{"parametWelcome", "FR-Para Meter Welcome... {0} is parameter..."},
{"numberParaFormat", "FR-NUMBER parameter = {0}...."}
};
return aa;
}
};
} else if (locale.getLanguage().compareTo("es") == 0) {
System.out.println("------- LOAD ESPANIOLA language pack load");
rbdl = new ListResourceBundle() {
@Override
protected Object[][] getContents() {
Object[][] aa = {
{"welcome", "ES- Welcome" + (new Date().toString())},
{"message", "ES- message"},
{"signoff", "ES- Sign Off"},
{"parametWelcome", "ES-Para Meter Welcome... {0} is parameter..."},
{"numberParaFormat", "ES-NUMBER parameter = {0}...."}
};
return aa;
}
};
} else {
System.out.println("------- LOAD DEFAULT language pack load");
rbdl = new ListResourceBundle() {
@Override
protected Object[][] getContents() {
Object[][] aa = {
{"welcome", "EN- Welcome" + (new Date().toString())},
{"message", "EN- message"},
{"signoff", "EN- Sign Off"},
{"parametWelcome", "EN-Para Meter Welcome... {0} is parameter..."},
{"numberParaFormat", "EN-NUMBER parameter = {0}...."},
{"notrans", "EN- No Language Translation"}
};
return aa;
}
};
}
return rbdl;
}
}
И, наконец, конфигурация Faces:
<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<application>
<resource-bundle>
<base-name>local.lantest.LocalTester</base-name>
<var>bundi</var>
</resource-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
</application>
</faces-config>
Любая помощь и совет очень ценятся.