Récemment, je me suis intéressé à la localisation avec .NET. Essentiellement, j'ai appris comment personnaliser un formulaire (en utilisant la propriété Language et Localizable) et ensuite changer la culture en conséquence.Localisation .NET; Langue de repli lors de l'utilisation de ResourceManager
Cependant, j'ai trouvé que lors de la migration de mes chaînes anglaises codées en dur dans les fichiers de ressources générés automatiquement, et d'utiliser .GetString ("Key") - bien, disons simplement qu'il n'était pas heureux: P.
J'ai décidé de créer un ensemble séparé de fichiers resx dédiés uniquement aux traductions de chaînes codées en dur. Ils ont suivi la convention/exigence de [nom]. [Code-culture] .resx. J'ai fait de ceux-ci pour chaque langue pertinente; par exemple. appstrings.de.resx (pour l'allemand) et appstrings.resx (comme ligne de base invariante).
Pour utiliser ces nouvelles ressources, je créé une instance de ResourceManager et des ressources Set
Dim resManager As New ResourceManager("LanguageTest.appstrings", Assembly.GetExecutingAssembly)
Dim resSet As ResourceSet = resManager.GetResourceSet(My.Application.UICulture, True, True)
La culture d'interface utilisateur actuelle a été fixé (par exemple, allemand) en utilisant
My.Application.ChangeUICulture("de")
Version originale
À moins que t Le resSet.GetString ("Key") est explicitement défini dans le appstrings.de.resx, il retournera une chaîne vide. Y at-il de toute façon que je peux le faire tomber à appstrings.resx (où "clé" existe), que je supposais être la ligne de base par défaut?
Mise à jour
Rhapsody fait une suggestion ci-dessous, tandis que la pointe réelle elle-même ne fonctionne pas, il ne fait en étincelle un point intéressant, en utilisant resManager.GetString (« Key ») par opposition à resSet .GetString ("Clé"). Cela semble fonctionner sans faille jusqu'à présent. C'est-à-dire que les valeurs présentes dans le fichier de langue spécialisé sont renvoyées, tandis que les valeurs «manquantes» reviennent à la culture par défaut lorsqu'elles sont accédées par une seule clé.
émission ultérieure
La seule question qui reste est de savoir si l'impact sur les performances de l'utilisation ResourceManger par opposition à un cache ResourceSet sera que préjudiciable?
Malheureusement, les ressources 'appstrings' n'étaient pas présentes dans l'espace de noms My.Resources. Cependant, votre solution de code soulève un point intéressant (voir la question mise à jour) :). –