Bonjour,

Je souhaite utiliser un language selector reposant sur des images, des drapeaux en fait.

Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<div class="select-languages">
     <div class="selected-language">
          <img class="selected-language-flag" src="~/Content/images/flags/united-states.png" height="20" width="20" />
     </div>
     <ul class="languages-list">
          <li><img class="language-flag" src="~/Content/images/flags/united-states.png" height="15" width="15" />English</li>
          <li><img class="language-flag" src="~/Content/images/flags/france.png" height="15" width="15" />French</li>
          <li><img class="language-flag" src="~/Content/images/flags/spain.png" height="15" width="15" />Spanish</li>
          <li><img class="language-flag" src="~/Content/images/flags/portugal.png" height="15" width="15" />Portuguese</li>
     </ul>
</div>

J'ai donc créé un helper me permettant de récolter des infos telles que l'url, le controller, l'action, la culture...
Dans ce helper j'aimerais créer deux fonctions (selectedLanguage() et languageSelection()) me permettant sur base de ces données de générer des liens sur mes images pour rendre mon language selector dynamique.

La première fonction (selectedLanguage()) afficherait le drapeau de la langue sélectionnée, et la deuxieme(languageSelection() la liste des autres langues disponibles avec le lien correspondant.

Pour le moment j'arrive juste à générer tous les liens des langues disponibles et ce sans inclure les images.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
public static class SwitchLanguageHelper
    {
        public class Language
        {
            public string Url { get; set; }
            public string ActionName { get; set; }
            public string ControllerName { get; set; }
            public RouteValueDictionary RouteValues { get; set; }
            public bool IsSelected { get; set; }
 
            public MvcHtmlString HtmlSafeUrl
            {
                get
                {
                    return MvcHtmlString.Create(Url);
                }
            }
        }
 
        public static Language LanguageUrl(this HtmlHelper helper, string cultureName,
            string languageRouteName = "lang", bool strictSelected = false)
        {
 
            cultureName = cultureName.ToLower();
            // récupération des valeurs de ka route depuis le view context
            var routeValues = new RouteValueDictionary(helper.ViewContext.RouteData.Values);
 
            //copie de la chaine de requête dans les valeurs de route pour générer le nouveau lien
            var queryString = helper.ViewContext.HttpContext.Request.QueryString;
            foreach (string key in queryString)
            {
                if (queryString[key] != null && !string.IsNullOrWhiteSpace(key))
                {
                    if (routeValues.ContainsKey(key))
                    {
                        routeValues[key] = queryString[key];
                    }
                    else
                    {
                        routeValues.Add(key, queryString[key]);
                    }
                }
            }
            var actionName = routeValues["action"].ToString();
            var controllerName = routeValues["controller"].ToString();
            //modification de la langue dans les valeurs de route
            routeValues[languageRouteName] = cultureName;
            //génération de l'URL avec la langue
            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection);
            var url = urlHelper.RouteUrl("Localization", routeValues);
            // vérification si la culture courante correspond à celle passée en paramètre
            var current_lang_name = Thread.CurrentThread.CurrentUICulture.Name.ToLower();
            var isSelected = strictSelected ?
                current_lang_name == cultureName :
                current_lang_name.StartsWith(cultureName);
            return new Language()
            {
                Url = url,
                ActionName = actionName,
                ControllerName = controllerName,
                RouteValues = routeValues,
                IsSelected = isSelected
            };
        }
 
 
        public static MvcHtmlString LanguageSelectorLink(this HtmlHelper helper,
           string cultureName, string selectedText, string unselectedText,
           IDictionary htmlAttributes, string languageRouteName = "lang", bool strictSelected = false)
        {
            var language = helper.LanguageUrl(cultureName, languageRouteName, strictSelected);
            var link = helper.RouteLink(language.IsSelected ? selectedText : unselectedText,
                "Localization", language.RouteValues);
            return link;
        }
 
 
    }
Merci d'avance pour votre aide.