我正在使用 JasperReports 5.5.1 从Java生成报告。我使用 Jaspersoft Studio 设计了报告。该报告有几个不同类型的图表,当我尝试使用REPORT_RESOURCE_BUNDLE参数中传递的ResourceBundle来本地化报告时,我遇到了一些问题。除了图表中的文本外,报告中的所有文本都被正确翻译。我使用$ R {STRING_KEY}填充了keyExpression,labelExpression和seriesExpression,但报告中填充了STRING_KEY而不是属性文件中的值。虽然图表的标题已正确翻译。
任何人都可以帮我解决这个问题吗?
答案 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>