更改每条记录的报告区域设置?

时间:2016-10-13 16:26:37

标签: internationalization jasper-reports

我有来自许多国家/地区的客户,每个我需要生成一个包含数据的页面。

在我的报告中,我有类似的查询: SELECT Name,Address,CodLanguage ... FROM Customers

对于此查询的每条记录,我想在Jasper Reports中生成一个页面,其中包含各自语言的客户数据(我通过此标志CodLanguage了解其语言)。 我想为每个客户页面(每条记录)更改报告语言。我可以使用报表参数区域设置吗?或者为每条记录更改一些变量?有谁有类似的情况?知道可以做些什么吗?

示例

我需要根据客户的国家/地区语言翻译10种不同语言的标签:姓名,地址,城市,电话号码和国家/地区enter image description here

这个例子只是一个简化。我将为每个客户生成3到6个报告页面,以及许多其他数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知,使用任何标准资源引用都无法做到这一点:

  • $R{resource.bundle.property}
  • msg()功能
  • str()功能

对于每条记录,提供相应的区域设置(或根据其他数据确定,如国家和城市 - 魁北克,加拿大可能是法国[fr_CA],而多伦多,加拿大将是英语[ en_CA])。

如果有地理位置到地点的地图,请使用ResourceBundle(或MessageFormat?)来翻译特定标签的密钥。

创建一些resource bundle files,其中包含各种标签的翻译。文件名必须具有与预定区域设置相对应的后缀(例如,Bundle_fr_CA.properties)。

将标签从静态文本更改为表达式。该表达式实例化一个新的资源包以查找其转换值的密钥(例如"city.name"),例如:

ResourceBundle.getBundle("Bundle", new Locale("en", $F{country})).getString("city.name")

除非您可以更改数据库以获取用户的语言首选项,否则"en"如何确定将是一件苦差事。这意味着您还必须为每种语言/国家组合创建资源包,这可以自动化。