So I have been working on a practical solution that allows me to source
my localization texts from a database table. I am using Spring 3.0.2
and Hibernate 3.5.1 along with Struts 2.1.8.1 for the implementation. I
have my base action being wired with my TextService via Spring and then
I have overwritten each of the getText() methods to make calls to
getMyTextProvider().getText(...) methods as shown below.
// MyBaseAction.java
//
abstract public class MyBaseAction
extends ActionSupport
implements Preparable, SessionAware, ServletContextAware,
ServletRequestAware {
protected TextService textService;
public void setTextService(TextService textService) {
this.textService = textService;
}
public MyTextProvider getMyTextProvider() {
return new MyTextProvider(textService, this);
}
// Overwrote all getText methods to use
// return(getMyTextProvider().getText(......) methods
}
The text provider itself simply extends TextProviderSupport and when the
object is being created, I am actually referencing a special
ResourceBundle class called MyDatabaseBundle and passing that to the
TextProvider framework as shown here.
// MyTextProvider.java
//
public class MyTextProvider extends TextProviderSupport {
public MyTextProvider(TextService textService, LocaleProvider
localeProvider) {
super(new MyDatabaseBundle(textService), localeProvider);
}
}
The MyDatabaseBundle resource bundle object will read the database table
and store the values.
// MyDatabaseBundle.java
//
public class MyDatabaseBundle extends ResourceBundle {
// overwritten implement here
}
>From what I have gathered, this looks pretty straight forward but is it
the right and practical way? What about multiple languages? Will that
resource bundle object handle it appropriately? What will I need to do
to support that? If there is a better approach, please inform me. It
is probably worth noting that in my struts.xml file I have the following
configurations:
<constant name="seek.xworkTextProvider" value="myTextProvider"/>
<bean name="myTextProvider"
class="com.struts2.localization.MyTextProvider" scope="default"
type="com.opensymphony.xwork2.TextProvider"/>
Thanks
Chris