Я делаю что-то простое:
В моем базовом контроллере (все остальные контроллеры наследуются от него) я установил следующие биты ViewData:
If Request.Path.Contains("/en/") Then
ViewData("PathEs") = Request.Path.Replace("/en/", "/es/")
ViewData("PathPt") = Request.Path.Replace("/en/", "/pt/")
ElseIf Request.Path.Contains("/pt/") Then
ViewData("PathEn") = Request.Path.Replace("/pt/", "/en/")
ViewData("PathEs") = Request.Path.Replace("/pt/", "/es/")
Else
ViewData("PathEn") = Request.Path.Replace("/es/", "/en/")
ViewData("PathPt") = Request.Path.Replace("/es/", "/pt/")
End If
А потом на главной странице
<div id="langbar">
<% if not string.isnullorempty(ViewData("PathEs")) then %>
<a href="<%= ViewData("PathEs") %>">Español</a>
<% end if %>
<% if not string.isnullorempty(ViewData("PathEn")) then %>
<a href="<%= ViewData("PathEn") %>">English</a>
<% end if %>
<% if not string.isnullorempty(ViewData("PathPt")) then %>
<a href="<%= ViewData("PathPt") %>">Portugues</a>
<% end if %>
</div>
Не слишком умно, но сделайте свою работу хорошо, если вы имеете дело с несколькими ударами (вы точно можете оптимизировать обе процедуры)