Asp.net Core localisation avec les fichiers json

J’essaie de trouver un bon tutoriel sur la localisation asp.net. Dans la documentation officielle, les explications concernent les fichiers .resx et je souhaite utiliser des fichiers json.

Si quelqu’un a un bon tutoriel sur la façon d’écrire le middleware pour le faire.

Merci

Forfait Nuget

https://www.nuget.org/packages/Askmethat.Aspnet.JsonLocalizer/

Solution

Après quelques recherches, j’ai finalement trouvé un exemple dans Asp / Localization GitHub.

Je fournis ici pour les personnes qui ne veulent pas utiliser un json plat sans casser le fournisseur de culture par défaut.

Les données :

Le json plat:

[ { "Key": "Hello", "LocalizedValue" : { "fr-FR": "Bonjour", "en-US": "Hello" } } ] 

Le modèle C #:

 class JsonLocalization { public ssortingng Key { get; set; } public Dictionary LocalizedValue = new Dictionary(); } 

Le middleware

L’usine

Ceci est juste pour avoir access à la CultureInfo est le SsortingngLocalizer.

  public class JsonSsortingngLocalizerFactory : ISsortingngLocalizerFactory { public ISsortingngLocalizer Create(Type resourceSource) { return new JsonSsortingngLocalizer(); } public ISsortingngLocalizer Create(ssortingng baseName, ssortingng location) { return new JsonSsortingngLocalizer(); } } 

Le localizer

La logique pour obtenir les données du fichier JSON

 public class JsonSsortingngLocalizer : ISsortingngLocalizer { List localization = new List(); public JsonSsortingngLocalizer() { //read all json file JsonSerializer serializer = new JsonSerializer(); localization = JsonConvert.DeserializeObject>(File.ReadAllText(@"localization.json")); } public LocalizedSsortingng this[ssortingng name] { get { var value = GetSsortingng(name); return new LocalizedSsortingng(name, value ?? name, resourceNotFound: value == null); } } public LocalizedSsortingng this[ssortingng name, params object[] arguments] { get { var format = GetSsortingng(name); var value = ssortingng.Format(format ?? name, arguments); return new LocalizedSsortingng(name, value, resourceNotFound: format == null); } } public IEnumerable GetAllSsortingngs(bool includeParentCultures) { return localization.Where(l => l.LocalizedValue.Keys.Any(lv => lv == CultureInfo.CurrentCulture.Name)).Select(l => new LocalizedSsortingng(l.Key, l.LocalizedValue[CultureInfo.CurrentCulture.Name], true)); } public ISsortingngLocalizer WithCulture(CultureInfo culture) { return new JsonSsortingngLocalizer(); } private ssortingng GetSsortingng(ssortingng name) { var query = localization.Where(l => l.LocalizedValue.Keys.Any(lv => lv == CultureInfo.CurrentCulture.Name)); var value = query.FirstOrDefault(l => l.Key == name); return value.LocalizedValue[CultureInfo.CurrentCulture.Name]; } } 

Avec cette solution, vous pouvez utiliser le ISsortingngLocalizer de base dans vos vues et vos contrôleurs .

Bien sûr, si vous avez un gros fichier json, vous pouvez utiliser IMemoryCache ou IDissortingbutedMemoryCache pour améliorer les performances.

MODIFIER :

Dans l’application Démarrage, ajoutez ces lignes pour utiliser votre propre implémentation:

 services.AddSingleton(); services.AddSingleton(); services.AddLocalization(options => options.ResourcesPath = "Resources"); 

Après cela, vous pouvez configurer comme vous le souhaitez vos préférences de mondialisation.

Regardez ici, je n’ai pas essayé moi-même, mais ça a l’air prometteur.

http://ronaldwildenberg.com/asp-net-core-localization-with-json-resource-files/