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/