竹林听雨yue 2024-11-18 21:01 采纳率: 33.3%
浏览 8

struts2框架国际化错误

struts2国际化,我定义了中英文两个版本,配置如下

img

img


在jsp中使用<s:text name="login"/>可以正常获取到值,但在action类中调用getText()方法获取不到值,为什么

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你给出的描述和配置来看,你在JSP中使用<s:text name="login"/>可以正常获取到值,但在Action类中调用getText()方法获取不到值的问题可能有以下几个原因:

    1. 资源文件的命名和位置:确保你的国际化资源文件命名正确并且放置在正确的位置。对于Struts2,资源文件应该放在src/main/resources目录下,并且遵循<basename>_<locale>.properties的命名规则。例如,你的英文资源文件应该命名为yhc_en_US.properties
    2. 资源的加载:确保在Action类中正确加载了资源文件。你可以使用TextProvider类或ActionContext来获取文本。例如:
    TextProvider textProvider = (TextProvider) ActionContext.getContext().getApplication().getService("textProvider");
    String text = textProvider.getText("login");
    

    或者使用LocaleActionContext

    Locale locale = (Locale) actionContext.get(I18nUtil.CURRENT_LOCALE_KEY);
    String message = getText("login", locale);
    
    1. 配置检查:检查你的struts.xml配置文件中的<constant>是否正确配置了国际化资源的路径,即"struts.costom.iL8n.resources"的值是否正确指向了你的资源文件。注意这里的拼写错误(应该是"struts.custom.i18n.resources"而不是"struts.costom.iL8n.resources")。
    2. 编码问题:确保你的资源文件编码与配置中的编码一致(在你的例子中是UTF-8)。如果编码不一致,可能会导致读取资源文件时出现问题。
    3. 检查Action类的包和路径:确保你的Action类所在的包与在struts配置文件中定义的包一致。如果包路径不正确,可能会导致无法正确加载资源文件。

    根据上述检查点逐一排查问题,应该能够找到导致在Action类中无法获取到国际化文本的原因。如果问题依然存在,可能需要更详细地检查你的代码和配置。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月18日