Skip to content

Instantly share code, notes, and snippets.

@0liver
Created December 16, 2010 15:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0liver/743540 to your computer and use it in GitHub Desktop.
Save 0liver/743540 to your computer and use it in GitHub Desktop.
public class LanguageSpecificFileRule : RegExRewriteRule
{
private string _defaultLanguageIso2;
public override void Initialize(UrlRewritingNet.Configuration.RewriteSettings rewriteSettings)
{
base.Initialize(rewriteSettings);
_defaultLanguageIso2 = rewriteSettings.GetAttribute("defaultLanguage", "de").ToLowerInvariant();
if (Rewrite != RewriteOption.Domain)
throw new InvalidOperationException("RewriteOption must be Domain!");
}
public override bool IsRewrite(string requestUrl)
{
var isRewrite = base.IsRewrite(requestUrl);
return isRewrite;
}
public override string RewriteUrl(string url)
{
var langIso2 = UriUtils.GetSubdomain(new Uri(url));
var relativeUrl = new Uri(url).AbsolutePath;
var filePathWithLang = GetFilePathWithLang(relativeUrl, langIso2);
var filePathDefault = GetFilePathWithLang(relativeUrl, _defaultLanguageIso2);
var languageSpecificPath = GetLanguageSpecificPhysicalPath(filePathWithLang);
return File.Exists(languageSpecificPath)
? filePathWithLang
: filePathDefault;
}
private string GetFilePathWithLang(string url, string langIso2)
{
var dotIndex = url.LastIndexOf('.');
return url.Insert(dotIndex, "-" + langIso2);
}
private string GetLanguageSpecificPhysicalPath(string fileNameWithLang)
{
return HttpContext.Current.Server.MapPath(fileNameWithLang);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment