I do something simple:
In my base controller (all other controllers inherits from it) I set the following ViewData bits:
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
And then in the Master Page
<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>
Not too smart, but get the job done well if your are dealing with few langs (you sure can optimize both rutines)