Uses LocaleProvider and default TextProvider instead of evaluating expression
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/fae1e0e7 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/fae1e0e7 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/fae1e0e7 Branch: refs/heads/support-2-3 Commit: fae1e0e7993fff80ff24c320dc38b1d8ad510137 Parents: e4ce3ce Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Wed Jun 22 10:38:12 2016 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Wed Jun 22 10:38:12 2016 +0200 ---------------------------------------------------------------------- .../org/apache/struts2/components/I18n.java | 25 ++++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/fae1e0e7/core/src/main/java/org/apache/struts2/components/I18n.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/components/I18n.java b/core/src/main/java/org/apache/struts2/components/I18n.java index 82d991e..4492fa1 100644 --- a/core/src/main/java/org/apache/struts2/components/I18n.java +++ b/core/src/main/java/org/apache/struts2/components/I18n.java @@ -22,14 +22,12 @@ package org.apache.struts2.components; import java.io.Writer; -import java.util.Locale; import java.util.ResourceBundle; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; import org.apache.struts2.StrutsException; -import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.LocaleProvider; import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.TextProvider; @@ -95,6 +93,8 @@ public class I18n extends Component { protected String name; protected Container container; private TextProvider textProvider; + private TextProvider defaultTextProvider; + private LocaleProvider localeProvider; public I18n(ValueStack stack) { super(stack); @@ -105,26 +105,31 @@ public class I18n extends Component { this.container = container; } + @Inject + public void setTextProvider(TextProvider textProvider) { + this.defaultTextProvider = textProvider; + } + + @Inject + public void setLocaleProvider(LocaleProvider localeProvider) { + this.localeProvider = localeProvider; + } + public boolean start(Writer writer) { boolean result = super.start(writer); try { String name = this.findString(this.name, "name", "Resource bundle name is required. Example: foo or foo_en"); - ResourceBundle bundle = (ResourceBundle) findValue("getTexts('" + name + "')"); + ResourceBundle bundle = defaultTextProvider.getTexts(name); if (bundle == null) { - bundle = LocalizedTextUtil.findResourceBundle(name, (Locale) getStack().getContext().get(ActionContext.LOCALE)); + bundle = LocalizedTextUtil.findResourceBundle(name, localeProvider.getLocale()); } if (bundle != null) { - final Locale locale = (Locale) getStack().getContext().get(ActionContext.LOCALE); TextProviderFactory tpf = new TextProviderFactory(); container.inject(tpf); - textProvider = tpf.createInstance(bundle, new LocaleProvider() { - public Locale getLocale() { - return locale; - } - }); + textProvider = tpf.createInstance(bundle, localeProvider); getStack().push(textProvider); pushed = true; }