2012-12-29 18 views
5

Desidero creare un sito Web che può essere visualizzato con due lingue, una LTR e una RTL. Ciò significa che tutti i contenuti dovrebbero essere mostrati in una delle due lingue.Internazionalizzazione JSP RTL/LTR

Il mio framework è Spring, e sto usando Tiles2, ma penso che questa domanda non sia specifica del framework.

L'ovvia soluzione al supporto di due lingue è il raddoppiamento di tutti (JSP, frammenti, ecc.) E si ottiene la parte dell'albero che si adatta alla lingua scelta. Ma questo causa problemi durante la modifica del sito web (potresti dimenticarti di aggiornare gli altri JSP) e non è scalabile (prova a farlo per 5 o 10 lingue).

So che posso utilizzare i file delle proprietà per ospitare le stringhe per le diverse lingue, ma il mio sito Web sarebbe un'enorme raccolta di messaggi: tag dei messaggi e sarà molto più difficile da mantenere (cosa succede se ho un paragrafo 100 linee, tutto questo va in una sola linea di proprietà?)

C'è qualche tipo di framework, plug-in, altro, che risolve questo problema? Qualcuno ha mai trovato una soluzione intelligente a questo problema?

+0

Lasciando Tiles/Spring/etc fuori considerazione, puoi trovare qui un esempio JSP/JSTL di base: http://stackoverflow.com/questions/4276061/how -to-internationalize-a-java-web-application/4278571 # 4278571 – BalusC

+0

Ho già usato queste tecnologie per creare un sito web internazionalizzato ed è per questo che sto cercando qualcosa di diverso ferenti.Stavo pensando di creare un plug-in Eclipse che prendesse magicamente qualsiasi frammento JSP e incorporasse internazionalizzazione, stavo solo chiedendo se qualcuno si sia imbattuto in qualcosa del genere. – TheZuck

risposta

2

In genere, i framework Web vengono utilizzati per creare applicazioni Web anziché siti Web e sono presenti pochi paragrafi statici lunghi. La maggior parte del contenuto è dinamica e proviene da un database. Ma sì, il solito modo di fare è esternalizzare tutto in bundle di risorse, solitamente sotto forma di file di proprietà.

Mettere un lungo paragrafo in un file di proprietà non causa un problema molto, perché si può rompere lunghi paragrafi in più righe terminando ogni riga da una barra rovesciata:

home.welcomeParagraph=This is a long \ 
    paragraph splitted into several lines \ 
    thanks to backslashes. 
1

RTL e LTR è uno dei problemi i18n superiori e più difficili.

Fondamentalmente è un problema dello scopo di visualizzazione del modello MVC. Questo può includere anche immagini e differenze emotive come il colore della pelle delle persone. In questo caso è meglio abituarsi alla soluzione che HTML + CSS ti offre.

Nell'esempio:

<style type="text/css"> 
    *:lang(ar) { direction:rtl } 
    *:lang(de) { direction:ltr } 
</style> 

La pratica migliore è quello di chiedere i membri del pubblico-gruppo circa l'effetto che le pagine web hanno a loro.

+0

grazie, ma sto cercando la soluzione di traduzione, LTR/RTL può essere risolto in molti modi, forse non perfetto ma almeno funziona. Il problema che non riesco a capire è come tradurre dozzine di pagine in molte lingue diverse senza avere un'enorme duplicazione del codice di vista e senza rendere il codice assolutamente illeggibile perché tutto il testo in esso contenuto diventa variabile – TheZuck

4

Non ho mai realizzato un progetto completo, solo alcuni test. Penso che questo problema non sia così grande come sembra se si seguono alcune semplici regole. Ecco cosa proverei a fare:

  • Specificare la direzione con <body dir='ltr/rtl'>. Questo è preferito rispetto all'attributo di direzione CSS.

  • Evitare margini/padiglioni sinistro/destro diversi in tutti i CSS. Se devi infrangere questa regola, probabilmente dovrai usare due file diversi (ltr.css e rtl.css) contenenti tutti questi diversi elementi.

  • A volte è necessario spostare alcuni elementi da sinistra a destra o viceversa. Ad esempio, in LTR vuoi un menu a sinistra, ma in RTL lo vuoi a destra. Puoi ottenerlo usando i CSS, ma a volte è complicato se non sei un esperto e devi testarlo su tutti i browser. Un'altra opzione è quella di utilizzare alcuni IF a seconda del caso. Quest'ultima opzione si adatta molto bene se si utilizza una libreria CSS basata su griglia, come Bootstrap.

  • Scegli con cura le librerie CSS e JS che utilizzerai. Ovviamente, scegli quelli che offrono supporto RTL/LTR.

  • Non preoccuparti troppo delle immagini. Se è necessario modificare un'immagine a seconda della lingua è probabilmente perché contiene del testo. Quindi, devi comunque usare immagini diverse. Questo è un problema relativo a i18n, non a un problema di direzione del testo.

  • Non lasciare che i tuoi clienti siano troppo schizzinosi a riguardo. Penso che con queste regole (e forse un po 'di più) puoi ottenere un buon risultato. Ma se il tuo cliente inizia a lamentarsi di un pixel qui e di un altro lì, dovrai complicare tutto questo e probabilmente non è necessario.

  • Informazioni sul file delle proprietà della lingua. Sì, usali. Sempre. Questa è una buona pratica, anche quando si utilizza un solo linguaggio: struttura HTML è separata dal contenuto, è molto facile da correggere o tradurre, alcune parole o frasi sono in un solo file ...

1

Io sono d'accordo alla maggior parte delle soluzioni fornite qui. Il tuo problema è più progettuale (architettonicamente) orientato piuttosto che tecnico. È necessario scegliere il percorso se è necessario mantenere questa logica di internazionalizzazione sul lato server (java) o nei file statici.

Nel caso in cui si desideri utilizzare il lato java (soluzione preferibile), è necessario conservare due file di proprietà e utilizzare i tag jstl. Ciò minimizza il tuo lavoro nel caso in cui desideri aggiungere un'altra lingua in futuro. Questa è una soluzione gestibile. Ho visto applicazioni che supportano più di 15 lingue e fusi orari. In effetti, il processo di rilascio diventa piuttosto facile.

Nel caso in cui si desideri mantenere più css e altri file statici, presto si troveranno presto le cose a corto di tempo. Non penso che questa sia una soluzione gestibile.

Detto questo, lascerò questa scelta all'architetto dell'applicazione. Egli sarà in grado di giudicare quale strada seguire in base alla natura dell'applicazione e ai vincoli che gli sono stati dati.

0

Non si desidera utilizzare ovunque. È un peccato perché è proprio il modo in cui dovresti farlo. È una cattiva pratica mantenere i testi codificati in un jsp se è necessaria l'internazionalizzazione.

Inoltre, la maggior parte dei moderni IDE consente di andare alla dichiarazione delle variabili facendo ctrl + clic sinistro (o passando il mouse sulla chiave) in modo che avere molte variabili nel codice non costituisca un problema per la manutenzione.

0

Innanzitutto, è necessario distinguere, per ciascun elemento di testo, se si tratta di un elemento dell'interfaccia utente (ad esempio l'etichetta del pulsante) o del contenuto redazionale.

interfaccia utente etichette degli elementi vengono memorizzati nel file proprietà che dovrà essere tradotto per ogni lingua supportata (e fornire un valore predefinito come ripiego)

contenuto redactionnal verrà memorizzato in un sistema di gestione contenuti ti organizzerai per trovare facilmente una versione localizzata dei tuoi contenuti

Problemi correlati