Jasper reports JasperReports中的图表本地化

Jasper reports JasperReports中的图表本地化,jasper-reports,Jasper Reports,我正在使用JasperReports 5.5.1从Java生成报告。我使用Jaspersoft Studio设计报告。该报表有几种不同类型的图表,我在尝试使用report\u RESOURCE\u BUNDLE参数中传递的ResourceBundle本地化报表时遇到了一些问题。除图表中的文本外,报告中的所有文本均翻译正确。我用$R{STRING_KEY}填充了keyExpression、labelExpression和SerieExpression,但报告中填充的是STRING_KEY,而不是属

我正在使用JasperReports 5.5.1从Java生成报告。我使用Jaspersoft Studio设计报告。该报表有几种不同类型的图表,我在尝试使用report\u RESOURCE\u BUNDLE参数中传递的ResourceBundle本地化报表时遇到了一些问题。除图表中的文本外,报告中的所有文本均翻译正确。我用$R{STRING_KEY}填充了keyExpression、labelExpression和SerieExpression,但报告中填充的是STRING_KEY,而不是属性文件中的值。但图表的标题已正确翻译

有人能帮我解决这个问题吗?

我找到了解决办法

首先创建一个类,负责从特定的资源包中获取本地化字符串

public class ReportLocalizer {

    private static String resourceBundleBaseName = "com.company.package.boundle_name";

    public static String getLocalizedString(Locale locale, String key) {
        ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundleBaseName, locale);
        return resourceBundle.getString(key);
    }
}
使用JasperReports的参数设置所需的区域设置:

Map<String, Object> parameters = new HashMap<String, Object>();
...
parameters.put(JRParameter.REPORT_LOCALE, locale);
...
final JasperPrint print = JasperFillManager.fillReport(report, parameters, datasource);
例如,我们可以通过以下方式定位显示男性和女性数量的饼图:

<pieChart>
    <chart>
    ...
    </chart>
    <pieDataset>
        <dataset>
        ...
        </dataset>
        <keyExpression><![CDATA[com.company.package.ReportLocalizer.getLocalizedString($P{REPORT_LOCALE}, $F{gender}.toString())]]></keyExpression>
        <valueExpression><![CDATA[$F{amount}]]></valueExpression>
        <labelExpression><![CDATA[String.valueOf($F{amount})]]></labelExpression>
    </pieDataset>
    <piePlot>
    ...
    </piePlot>
</pieChart>

...
...
...
<pieChart>
    <chart>
    ...
    </chart>
    <pieDataset>
        <dataset>
        ...
        </dataset>
        <keyExpression><![CDATA[com.company.package.ReportLocalizer.getLocalizedString($P{REPORT_LOCALE}, $F{gender}.toString())]]></keyExpression>
        <valueExpression><![CDATA[$F{amount}]]></valueExpression>
        <labelExpression><![CDATA[String.valueOf($F{amount})]]></labelExpression>
    </pieDataset>
    <piePlot>
    ...
    </piePlot>
</pieChart>