JasperReports中的图表本地化

时间:2014-04-25 08:00:01

标签: jasper-reports

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

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

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

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);

要翻译图表中的字符串,请将其与报表的区域设置一起传递给ReportLocalizer的getLocalizedString方法。

[CDATA[com.company.package.ReportLocalizer.getLocalizedString($P{REPORT_LOCALE}, "string_key")]]>

例如,我们可以通过这种方式本地化一个显示男性和女性数量的饼图:

<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>