2011-02-06 12 views
5

Abbiamo un'applicazione piuttosto grande, con una grande quantità di contenuti dinamici. Esiste comunque la possibilità di forzare le aste per utilizzare un database per le ricerche i18n, anziché i file delle proprietà?Internazionalizzazione Struts2 utilizzando un database

Sarei aperto ad altri modi per risolvere questo problema, se qualcuno ha mai realizzato i18n con contenuti dinamici.

+0

C'erano dei modi per farlo con Struts 1 (ad esempio http://wiki.apache.org/struts/DatabaseMessageResourcesHowto).Non sembra che ci siano molte informazioni su come fare la stessa cosa in Struts 2, sfortunatamente. –

risposta

2

No, non esiste un modo integrato per consentire a Struts2 di caricare il contenuto localizzato da un database. Avresti bisogno di scriverlo da solo.

Quali sono le vostre esigenze? È necessario che gli utenti siano in grado di modificare dinamicamente prompt di campo, messaggi di errore, ecc.?

+0

I nostri utenti immettono ciò che sono essenzialmente sondaggi e quelli che devono essere tradotti. Speravo di cambiare la fonte delle risorse di traduzione, in modo da poter cambiare le traduzioni anche dinamicamente. – partkyle

0

Si può essere in grado di fare qualcosa di simile costruendo un intercettore personalizzato. Si potrebbe fare in modo che l'intercettore legga tutte le coppie di valori chiave dal proprio database e le immetta nella pila di valori. L'unica cosa di cui non sono sicuro, non avendo realmente incasinato i18n con le puntine prima, è se la roba i18n estrae quelle informazioni dalla pila dei valori. In caso contrario, non sono sicuro che forse potresti fare qualcos'altro nell'intercettore per caricare le informazioni.

Costruire un intercettore personalizzato non è troppo complicato. Ci sono un sacco di siti tutorial là fuori, tra cui (tutore per l'auto promozione qui) il mio blog: http://ddubbya.blogspot.com/2011/01/creating-custom-struts2-interceptors.html. i file

-1

utilizzare le proprietà solo per i contenuti statici, come le etichette, i messaggi ecc

per il contenuto dinamico inizia con una tabella di database che include un linguaggio id-codice-per ogni lingua che si desidera utilizzare. Tutte le voci di contenuti dinamici che sono già tradotte vanno con il loro id di codice linguistico aggiunto alla loro chiave primaria. Se manca una traduzione, puoi programmare la tua applicazione per tornare alla tua lingua predefinita in modo da semplificare le cose finché non è presente la traduzione corretta.

Consenti ai tuoi utenti di fornire i loro contributi nella lingua che preferiscono e di memorizzarli con l'ID lingua appropriato. Qualcuno dovrebbe fornire la traduzione alle altre lingue per completare il contributo.

... 
PRIMARY KEY (`subject_id`,`language_id`), 
... 
4

non so di una soluzione plug-and-play facile per questo, quindi probabilmente si dovrà per attuare da soli - ha intenzione di spendere un bel po 'di tempo solo alle prese con come il sono implementate le funzionalità di localizzazione di struts 2 (e XWork). La chiave sarà probabilmente quella di fornire la propria implementazione di com.opensymphony.xwork2.TextProvider (e dire ai montanti di usarlo fornendo un tag > di bean > in struts.xml). Mi vengono in mente almeno due modi di montaggio di questo nell'architettura complessiva:

  • avere accesso al database direttamente l'implementazione TextProvider. Nello spirito di YAGNI, questo è probabilmente il modo migliore per iniziare (puoi sempre refactoring in seguito, se necessario).

  • In alternativa, è possibile inserire il codice del database in un'implementazione dell'interfaccia Java ResourceBundle, che è quella che XWork utilizza internamente. Per me questo sembra un approccio ancora più progettuale, ma sul lato positivo ci sono alcuni articlesaround che descrivono come farlo.