Le composant qui affiche les drapeaux est ce que l'on appelle un skin object: c'est un contrôle ASP.Net, déclaré dans le thème graphique. Il peut donc être remplacé en personalisant ce dernier.
Comme tous les skin object, il expose un certain nombre de propriétés de personalisation, modifiables dans l'asx du thème graphique ou dans le xml de personalisation (skin.xml) s'il s'agit d'un thème html.
Le skin object Language.ascx permet entre autre de définir les gabarits html d'un repeater utilisé pour afficher chaque drapeau. Ces gabarits utilisent le système de tokens dynamique de DNN pour extraire les valeurs propres à chaque locale ([CULTURE:NATIVENAME], [FLAGSRC] etc...) .
Il se trouve que ces propriétés sont également localisées et éditable dans l'éditeur de langue (chemin admin/skins/Language.ascx). C'est donc là qu'il faudrait regarder pour le personaliser, en prenant soin d'enregistrer en mode host plutôt que systeme histoire de pouvoir éviter l'écrasement à la prochaine version.
Ceci dit, passer d'une liste d'images à une Image Map nécessite plus qu'une personalisation html ou même javascript (les images ne vont pas fusionner d'elles-mêmes, et le calcul des rectangles de zone me paraît fastidieux).
Il vaut mieux concevoir un skinobject dédié et le remplacer dans le thème graphique (le calcul des urls peut s'inspirer du skinobject actuel), ou encore remplacer le skin object par un panneau et personaliser notre module de cartes html dynamiques ;-p.
Dans tous les cas, cela me paraît laborieux pour le résultat escompté (quel est l'intérêt d'une carte html de drapeaux?)
PS: pour les textes non traduit, c'est également dans l'éditeur de langue (cocher "Entourer les traductions manquantes")