Ultimamente stavo scavando nella localizzazione con .NET. In sostanza, ho imparato come personalizzare un modulo (utilizzando la proprietà Language e Localizable) e quindi modificare la cultura di conseguenza.Localizzazione .NET; Lingua di fallback quando si utilizza ResourceManager
Tuttavia, ho scoperto che durante la migrazione delle mie stringhe inglesi codificate in modo rigido nei file di risorse generate automaticamente e utilizzare .GetString ("Chiave") - beh, diciamo solo che non era felice: P.
Ho deciso di creare un set separato di file resx dedicato esclusivamente alle traduzioni di stringhe codificate. Hanno seguito la convenzione/requisito di [nome]. [Codice cultura] .resx. Ne ho fatti di questi per ogni lingua rilevante; per esempio. appstrings.de.resx (per tedesco) e appstrings.resx (come base di riferimento invariata).
Per utilizzare queste nuove risorse, ho creato un 'istanza di ResourceManager e Resource Set
Dim resManager As New ResourceManager("LanguageTest.appstrings", Assembly.GetExecutingAssembly)
Dim resSet As ResourceSet = resManager.GetResourceSet(My.Application.UICulture, True, True)
La lingua dell'interfaccia utente corrente è stato fissato (ad esempio, per tedesco) utilizzando
My.Application.ChangeUICulture("de")
Edizione originale
A meno che t Il parametro resSet.GetString ("Chiave") è definito esplicitamente nello appstrings.de.resx, restituirà una stringa vuota. Esiste comunque la possibilità di effettuare il fallback su appstrings.resx (dove "Key" esiste), che presumo sarebbe la linea di base predefinita?
Aggiornamento
Rhapsody ha fatto un suggerimento di sotto, mentre la punta vero e proprio non ha funzionato, lo ha fatto in realtà scintilla un punto interessante, utilizzando resManager.GetString ("chiave") in contrapposizione a resSet .GetString ("chiave"). Questo sembra funzionare senza pecche finora. Cioè, i valori presenti nel file di lingua specializzato vengono restituiti, mentre i valori "mancanti" ricadono nella cultura predefinita quando vi si accede da una singola chiave.
successiva emissione
La questione unica rimasta sarebbe se l'impatto sulle prestazioni di utilizzare ResourceManger al contrario di un ResourceSet cache sarà che dannoso?
Sfortunatamente le risorse 'appstrings' non erano presenti nello spazio dei nomi My.Resources. Comunque la tua soluzione di codice solleva un punto interessante (vedi domanda aggiornata) :). –