2009-11-19 11 views
7

Una domanda di WinForm di base: per impostazione predefinita viene creato un file resx per ogni modulo o controllo utente (insieme a designer.cs). Questo resx funziona bene per tutti i controlli e il testo aggiunto ai controlli tramite l'interfaccia utente.Utilizzo risorse modulo per stringhe programmatiche?

Mi chiedevo se potevo usare lo stesso resx per aggiungere le stringhe che devono essere utilizzati a livello di codice e sulla base di condizioni, attaccato ai controlli? La resx verrà sovrascritta in ogni caso e le stringhe personalizzate verranno rimosse? Qual è la migliore pratica da seguire in questo caso?

+2

Non scoraggiarti, ma potresti essere interessato a questo "odio-rave" (basato su VS 2003) sui file ResX: http://www.windojitsu.com/blog/resxsucks.html Speriamo che la situazione sia migliore ora, ma sono ancora timido di usarli direttamente. – BillW

+1

Per la vista "cup is half-full" (?) Prendi in considerazione: http://stackoverflow.com/questions/676312/modifying-resx-file-in-c – BillW

+0

Link interessanti .. Grazie per aver indicato quelli BillW – bschandramohan

risposta

2

I quelli generati automaticamente vengono sovrascritti (sto usando 2005), quindi non vorrei usare lo stesso file. Suggerirei di creare un'area separata nel progetto per i file .resx come questo. Di solito ne creo uno .resx per modulo, corrispondente al nome, ovviamente.

Modifica: Here è una risposta più dettagliata che ho dato di recente per organizzare la struttura di file/cartelle quando si localizza l'app con i file .resx.

2

C'è uno strano problema con le risorse di stringa nel file Resources.resx. Non c'è un modo ovvio in cui io abbia mai scoperto come creare una nuova tabella di risorse per un'altra lingua con l'IDE. Può essere fatto a mano però. Attenersi alla seguente procedura:

  1. Progetto + Proprietà, scheda Risorse, aggiungere le stringhe che si desidera utilizzare nel vostro programma
  2. Avviare Esplora risorse e passare alla cartella Proprietà del progetto
  3. Copia e incolla il Resources.resx file di
  4. rinominarlo la cultura che si desidera uso. Ad esempio: Resources.fr-FR.resx
  5. Torna VS, fare clic sull'icona Mostra tutti i file nella finestra Esplora soluzioni
  6. Espandere il nodo delle proprietà, il nuovo file di risorse dovrebbe essere visibile
  7. destro -clicca e selezionare "Includi nel progetto"
  8. selezionarlo, nella finestra Proprietà set strumento personalizzato = "ResXFileCodeGenerator"
  9. Verificare che Build Action è impostato su "risorsa incorporata"

costruire il programma. Dovresti ottenere una nuova cartella nella directory bin \ Debug del progetto con l'assembly satellite, denominata projectname.resources.dll. Questo assembly satellite contiene sia le stringhe localizzate che qualsiasi risorsa localizzata dai moduli. Prova che funziona con il codice come questo:

public Form1() { 
    System.Threading.Thread.CurrentThread.CurrentUICulture = 
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); 
    InitializeComponent(); 
    textBox1.Text = Properties.Resources.String1; 
} 
+2

Sul tuo modulo, imposta 'Localizable' su' true', quindi cambia la proprietà 'Language'. –

+0

In effetti non l'ho trovato anche io. Il progetto ASP.NET ha il menu Strumenti -> Genera file di risorse, ma WinForms no. Ho ragione? – abatishchev

+0

btw, è necessario 'ResXFileCodeGenerator'? Default .resx ha BuildAction = EmbeddedResource, ma CustomTool è vuoto. – abatishchev

1

Oppure si può provare questo:

aggiungere questo codice in main();

utilizzando System.Resources;

ResXResourceWriter rw = new ResXResourceWriter("Resources.de-DE.resx"); 
rw.AddResource("String1", "de"); 
rw.Close(); 
... 

ripetizione per più file

Vai alla directory bin e spostare il file XML (RESX) (s) per forse la cartella di proprietà.

Andare al passo 5-9 sopra in post nobugz.

+1

Pete, qual è il post di nobugz a cui ti riferisci? – bschandramohan

Problemi correlati