two things
1) I would add a variable to save the result of the message in
<fmt:message key="registration.direction" var="direction" />
then
2) I would do the following with your code
<fmt:setBundle basename="class.path.to.resource.bundle"/> <fmt:message key="registration.direction" var="direction" /> <table align=center class="" dir="${direction}">
Now, as far as your resource packs are usually, you should have the following structure for your resource packs
/foo/bar/MyResourceBundle.properties /foo/bar/MyResourceBundle_en.properties /foo/bar/MyResourceBundle_en_US.properties /foo/bar/MyResourceBundle_<lang>[_COUNTRY[_VAR]].properties
If your package is not structured this way, this may be your problem.
Ensure that all keys that should be available are defined in MyResourceBundle with reasonable defaults.
I am correcting this answer as I am not sure that my comment was lost in a hidden function.
With the fact that you are using Struts 2, I get the impression that you are using the i18n interceptor. The interceptor will save the current language in the sesion variable with the name WW_TRANS_I18N_LOCALE. Thus, you should be able to get to it and set the locale for the JSTL tags using the following:
<fmt:setLocale scope="session" value="${sessionScope.WW_TRANS_I18N_LOCALE}" />
Hope this works for you.
Dave g
source share