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