2010-04-11 17 views
6

Sto pensando di sviluppare il seguente, ma chiedendo se esiste già là fuori:Utilizzo di SQL per la localizzazione, invece di file RESX in ASP.NET

ho bisogno di una soluzione basata SQL per l'assegnazione e la gestione di valori di testo di localizzazione per un sito asp.net invece di usare i file RESX. Ciò consente di mantenere il testo sul sito senza doverlo rimuovere per la distribuzione ogni volta che è necessario un aggiornamento.

Grazie.

+0

Mi sento parlare del riavvio del sito quando si rilascia una nuova resx –

+0

Mi chiedo cosa hai concluso allora perché oggi mi trovo in una situazione simile. – Helbo

risposta

3

In realtà abbiamo intrapreso questa strada, e abbiamo finito con un sito Web veramente lento: estrarre il meccanismo di traduzione basato su SQL e utilizzare le risorse ASP.NET ci ha dato un notevole incremento delle prestazioni. Quindi non posso davvero raccomandare di fare la stessa cosa .... (e sì - stavamo memorizzando nella cache e ottimizzando il throughput e tutto il resto - e le cose basate su SQL erano ancora molto più lente).

Ottieni quello per cui paghi: l'approccio basato su SQL è stato più flessibile in termini di "traduzione" al volo e correzione di refusi e cose. Ma alla fine, nella nostra app (Webforms, .NET 2.0 in quel momento), l'utilizzo delle risorse si è rivelato l'unica via percorribile.

+0

In un'app che ho creato stavamo considerando di seguire questa strada per trasferire le risorse in un database. Mi sono sempre chiesto quale sarebbe stata la performance (sapevo che ce ne sarebbe stata una). – Thomas

+1

Sono totalmente in disaccordo. I dati di traduzione sono totalmente facili da memorizzare nella cache e con una soluzione ben eseguita, le prestazioni non dovrebbero essere un problema! – Robert

+0

@Robert: sei libero di non essere d'accordo - posso solo parlare del fatto della nostra esperienza che abbiamo avuto. E abbiamo anche fatto un po 'di cache molto aggressiva - mai le prestazioni sono state nemmeno lontanamente paragonabili a RESX. Questa è la nostra storia. –

1

Abbiamo fatto questo (Traduzione basata su SQL) e siamo davvero contenti del risultato! Abbiamo sviluppato un'interfaccia per le agenzie di traduzione per eseguire gli aggiornamenti della pagina online. Come effetto collaterale, la soluzione ha iniziato a funzionare come sistema di gestione dei contenuti. Se memorizzi i tuoi dati nella cache, le prestazioni non rappresentano un problema. Il rovescio della medaglia è che abbiamo investito centinaia di ore nella nostra soluzione. (Direi che ci vorranno circa 600 ore, ma potrei controllare).

+0

@Robert, è così che l'ho immaginato. Il mio sito è davvero grande e sta diventando sempre più difficile fare gli aggiornamenti più piccoli come testo, stili semplici, mostrare/nascondere elementi, gestire i menu del sito ... ecc. Sto affrontando il mio team ogni volta costruendo piccoli sistemi di gestione basati su SQL che alla fine si sommerà a un CMS a livello di sito. miei due principali preoccupazioni voce su questa strada sono: 1- carico Database 2- gestione del testo e configurazione tra l'ambiente di sviluppo locale e l'ambiente amore Mi puoi dire qualcosa di più sul tuo progetto, portata, carico, dimensioni. ..eccetera? grazie. – Laith

+0

Abbiamo a picco 20 000 visitatori al giorno e ai massimi 200 utenti attivi simultanei. Memorizziamo tutte le traduzioni nella cache ASP.NET. SQL-Load non è un problema in questo modo. Quando qualcuno modifica le traduzioni, la cache viene invalidata e viene ricaricata dal database. (Non sono sicuro di fare alcuna segmentazione qui.) Memorizziamo le traduzioni in 3 tabelle. "Translaiton", "TranslationGroup", "TranslaionValue". Al momento abbiamo 48738 TranslationValue (25 lingue circa) per 2427 elementi da tradurre in 230 gruppi (una singola pagina è un gruppo o segnaposti per argomento sono collegati in questo modo). – Robert

+0

Abbiamo considerato open source la nostra soluzione, ma non abbiamo trovato il tempo per farlo. – Robert

0

Abbiamo finito con una soluzione ibrida in cui gli utenti potevano modificare il contenuto in un database, ma l'applicazione quindi ha creato un .resx che è stato distribuito manualmente.

Si potrebbe anche ignorare la traduzione del server del tutto e fare la traduzione in jQuery sul client che è un approccio che ho usato con successo.

0

Non sono sicuro del riavvio del sito Web, ma almeno l'utilizzo di .NET MVC è molto comodo e non ho notato il problema di riavvio e, in caso affermativo, quanto spesso è necessario aggiornare i file resx? Per i progetti più grandi che uso per creare una soluzione con più progetti, uno per la localizzazione, qualcosa di simile:

  • MyApp.Localization
    • Modello
    • Pagina
    • File1.resx
  • MyApp.Core
  • MyApp.Web

Poi nel progetto Web aggiungo un riferimento al progetto di localizzazione, e usarlo come

@ MyApp.Localization.Model.Customer.CustomerName

@ MyApp.Localization.Page.About.PageTitle

@ MyApp.Localization.File1.Paragraph1

Ogni volta che cambia il testo tradotto, ho caricare un dLL aggiornato o copiare i file RESX.

NOTA: è necessario impostare i file resx su PUBLIC, quindi è possibile accedere come fortemente digitato.

0

Ho creato uno schema di traduzione basato su SQL. Ma carico solo le traduzioni necessarie per una determinata pagina quando viene richiesta, e solo quelle per quella particolare pagina.

Questi vengono caricati in un oggetto dizionario quando la pagina viene ricaricata e memorizzata nella cache durante la sessione. Quindi è solo la sostituzione del testo basata su una ricerca su quello.

Praticamente tutto è generato dinamicamente e include contenuti definiti dall'utente che devono essere tradotti, quindi la flessibilità è la chiave.

Le prestazioni sono abbastanza veloci, le query SQL per recuperare tutti i dati richiedono molto più tempo (relativamente parlando).

Problemi correlati