c# - net - multi language mvc




Come convertire e archiviare elementi configurabili in un'applicazione Web multilingue? (5)

Ad esempio, la pagina di registrazione ha il menu a discesa di Prefix-Mr, Mrs, Miss ecc. Questo prefisso proviene da una tabella ed è configurabile, ovvero stiamo avendo una pagina Web di configurazione per lo stesso.

Dal momento che i valori del menu a discesa sono nel database, penso che la traduzione dovrebbe essere anche nel database.

Il modo più semplice è il modo di avere un campo per ogni lingua nella tabella dei titles :

--------------------------
| Id | TitleEn | TitleFr |
--------------------------
|  1 |  Mr     | M       |
|  2 |  Mrs    | Mme     |
|  3 |  Miss   | Mlle    |
--------------------------

Tuttavia, questo non si ridimensionerà bene se si dispone di più lingua o se si desidera aggiungere lingue in futuro.

Il modo in cui lo farei sarebbe aggiungere una tabella localized_string questo modo:

--------------------------
| Id | Language | String |
--------------------------
|  7 |  FR      | M      |
|  8 |  FR      | Mme    |
|  9 |  FR      | Mlle   |
|  7 |  EN      | Mr     |
|  8 |  EN      | Mrs    |
|  9 |  EN      | Miss   |  
--------------------------

Nella tabella dei titoli e in tutte le altre tabelle in cui è necessario un stringa localizzata, si memorizza l'ID della stringa:

----------------------------
| Id | localized_string_id |
----------------------------
|  1 |  7                  |
|  2 |  8                  |
|  3 |  9                  |
----------------------------

In questo modo è possibile interrogare la stringa localizzata in qualsiasi lingua ed è possibile aggiungere tutte le lingue che si desidera senza modificare lo schema del database.

Ho un'applicazione web multilingue . Sto convertendo tutti i controlli cioè etichette, menu a discesa, testo e messaggi utilizzando il file di risorse .

Problema:

Ad esempio, la pagina di registrazione ha il menu a discesa di Prefix-Mr, Mrs, Miss ecc. Questo prefisso proviene da una tabella ed è configurabile, ovvero stiamo avendo una pagina Web di configurazione per lo stesso.

Ci sono molte altre cose configurabili e pagine corrispondenti.

La mia domanda è come convertire questi dati in un'altra lingua e come salvare lo stesso come non può essere fatto con il file di risorse.

Chiunque abbia idee pratiche può guidarmi.


Estendere il fornitore di risorse è probabilmente l'approccio che vorrete intraprendere.

Rivedi quanto segue:

https://msdn.microsoft.com/en-us/library/aa905797.aspx (il contesto di questo articolo è ASP.Net WebForms; consulta la sezione "Creazione di un provider di risorse di database".)

http://weblogs.asp.net/thangchung/extending-resource-provider-for-soring-resources-in-the-database (questo post del blog in realtà applica ciò che è coperto nel precedente articolo MSDN, ma a ASP.Net MVC invece di WebForms.)

Non sono sicuro del tipo di applicazione ASP.Net che stai creando, quindi ho pensato che sarebbe stato utile includere riferimenti sia per WebForms che per MVC.

Ciò che è menzionato in questi due riferimenti dovrebbe darti una buona base su cui implementare la tua soluzione.


Microsoft .NET fornisce supporto per lavorare con informazioni specifiche della cultura utilizzando la classe CultureInfo nello spazio dei nomi System.Globalization. Le informazioni sulla cultura possono essere impostate sia a livello di pagina che a livello di applicazione.

<%@ Page language="C#" Culture="fr-FR"%>

Per impostare le informazioni sulla cultura a livello di applicazione, utilizzare quanto segue nella sezione Globalizzazione del file web.config.

<configuration>
 <system.web>
  <globalization
   culture="en-GB"
  />
 </system.web>
</configuration>

prova questo,

http://aspalliance.com/articleViewer.aspx?aId=957&pId=-1

Per salvare le cose di configurazione che sono inserite dinamicamente dagli utenti nelle risorse puoi usare IResourceWriter in questo modo:

IResourceWriter writer = new ResourceWriter("Resource.resx");
// Adds resources to the resource writer.
writer.AddResource("String 1", "First String");
writer.AddResource("String 2", "Second String");
// Writes the resources to the file or stream, and closes it.
writer.Close();

Se è configurabile dall'utente, non è pratico utilizzare i file di risorse, poiché gli utenti possono configurare tutto ciò di cui hanno bisogno.

Quindi, se ho capito bene, penso che l'unica soluzione pratica sia la traduzione in una tabella per ogni valore che gli utenti inseriscono.

Dal momento che gli utenti possono inserire valori in qualsiasi lingua, può diventare complicato.

Sceglierei una lingua predefinita, ad esempio inglese, quindi ogni volta che gli utenti gestiscono i valori (Titolo o prefisso nel campione), devono gestirli a coppie, ovvero la loro lingua e l'inglese.

Quindi, se il locale è francese, quando controllano l'indice dei titoli, vedono due colonne, una per il francese e una per l'inglese.

Se è la prima volta che l'utente francese accede alla vista, non ci sono valori francesi, quindi l'utente deve aggiungere la traduzione francese per i valori inglesi già registrati.

Se l'utente aggiunge un nuovo valore [francese], allora deve inserire anche la traduzione inglese.

Sembra un po 'ingombrante e potrebbe non essere molto pratico, ma è un'opzione!

Migliore,

PD: Hey, per favore condividi la soluzione quando ci arrivi!





multilanguage