2010-12-14 12 views
5

Voglio creare un documento, che stampa in più di una lingua, basato su Locale.Come creare un rapporto multilingue?

Ho creato 2 pacchetti di risorse, uno in inglese e uno in cinese, ma non sono sicuro di come usarli.

risposta

0

Poiché il generatore di documenti può far parte della vostra applicazione, dovreste avere in qualche posto un menu di selezione della lingua - voce, casella di controllo o casella combinata che è già preselezionata.

Quindi, perché non basta aggiungere un'istruzione if che legge le impostazioni internazionali o la lingua richiesta prima della generazione del report e caricare il report appropriato in base alle impostazioni locali.

In questo modo è necessario conservare un file jrxml per ogni lingua. Sarà abbastanza facile tradurre le intestazioni e le etichette manualmente.

I dati devono essere già tradotti nel database, in cui è necessario comunque mantenere i valori degli attributi pertinenti multilingue.

Sarà necessario modificare la query SQL per la lingua appropriata, ma poiché la Query fa parte di jrxml, verrà eseguita automaticamente.

4

Ecco il the sample su come implementare il supporto per l'internazionalizzazione per JasperReports.

L'idea principale è utilizzare l'espressione speciale $R{} per localizzare testo e immagini.

Il campione per le immagini:

<image scaleImage="Clip"> 
    <reportElement positionType="Float" x="20" y="20" width="100" height="50"/> 
    <imageExpression class="java.lang.String"><![CDATA[$R{image.flag}]]></imageExpression> 
</image> 

I campioni per il testo (il $ R {} sintassi):

<textField isBlankWhenNull="true"> 
<reportElement x="20" y="100" width="530" height="20"/> 
<textElement/> 
<textFieldExpression class="java.lang.String"><![CDATA[$R{sampleString}]]></textFieldExpression> 
</textField> 

o (il msg() metodo):

text.message=The program picked up {0} as a random number. 
<textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
<reportElement x="20" y="210" width="530" height="20"/> 
<textElement/> 
<textFieldExpression class="java.lang.String"><![CDATA[msg($R{text.message}, $P{number})]]></textFieldExpression> 
</textField>