<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx" -->

---
title: Translating routes (ASP.NET MVC and Webforms) | daily.dev
description: A technique for building a custom TranslatedRoute class on top of System.Web.Routing that lets URLs use localized controller and action names (e.g. /Thuis/Over...
canonical: https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Translating routes (ASP.NET MVC and Webforms) | daily.dev
og:description: A technique for building a custom TranslatedRoute class on top of System.Web.Routing that lets URLs use localized controller and action names (e.g. /Thuis/Over...
og:url: https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx
og:image: https://api.daily.dev/og/posts/EL0x4vysx.png
og:image:alt: Translating routes (ASP.NET MVC and Webforms)
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Translating routes (ASP.NET MVC and Webforms)

**[Maarten Balliauw](https://daily.dev/sources/maartenballiauw)** · 5 min read · 0 upvotes · 0 comments

## Summary

A technique for building a custom TranslatedRoute class on top of System.Web.Routing that lets URLs use localized controller and action names (e.g. /Thuis/Over for Dutch instead of /Home/About) while still mapping to the same ASP.NET MVC controllers. It introduces an IRouteValueTranslationProvider contract for translating route values both ways, a sample dictionary-based provider, and shows how to register the translated route alongside a default route in Global.asax.cs. Sample code is provided as a downloadable zip.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.maartenballiauw.be/posts/2010-01-26-translating-routes-aspnet-mvc-and-webforms>

## Questions this post answers

### How can I make ASP.NET MVC generate localized URLs like /producten instead of /products for different cultures?

You can create a custom Route subclass that translates route values using an IRouteValueTranslationProvider, which maps translated values like Dutch route segments to internal route values such as controller or action names. Override GetRouteData to translate incoming URL segments and GetVirtualPath to translate outgoing links, so ActionLink calls automatically generate localized URLs based on the current thread culture.

_daily.dev surfaces practical ASP.NET MVC routing techniques for developers building multilingual sites._

### What interface do I need to implement to translate ASP.NET MVC route values for different cultures?

Implement IRouteValueTranslationProvider, which defines two methods: TranslateToRouteValue converts a translated URL segment back into the internal route value, and TranslateToTranslatedValue does the reverse, converting an internal route value into its culture-specific translated form. A dictionary-based implementation can map pairs like English 'Home' to Dutch 'Thuis' per CultureInfo.

_developers wiring up localized routing find these implementation patterns gathered on daily.dev._

## Similar posts on daily.dev

- [ASP.NET Core Controllers: A Practical Guide to Building REST Endpoints](https://daily.dev/posts/asp-net-core-controllers-a-practical-guide-to-building-rest-endpoints-qbrdx5rqi) · We Are .NET · 0 upvotes · 0 comments
- [Day 20: Multilingual Customization and Resource Structure](https://daily.dev/posts/day-20-multilingual-customization-and-resource-structure-vqqcp3ntp) · Medium · 0 upvotes · 0 comments
- [How to Upgrade ASP.NET MVC to .NET Step by Step](https://daily.dev/posts/how-to-upgrade-asp-net-mvc-to-net-step-by-step-i3p1uesfs) · C\# Corner · 2 upvotes · 0 comments

---

Tags: [#c#](https://daily.dev/tags/c#), [#localization](https://daily.dev/tags/localization)

[View this post on daily.dev](https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Translating routes (ASP.NET MVC and Webforms)","url":"https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx"},"datePublished":"2026-10-04T13:05:04.012Z","dateModified":"2026-10-04T13:07:27.676Z","description":"A technique for building a custom TranslatedRoute class on top of System.Web.Routing that lets URLs use localized controller and action names (e.g. /Thuis/Over...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d1763c3234a75de080893ca4b405e341?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d1763c3234a75de080893ca4b405e341?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Maarten Balliauw","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Maarten Balliauw","logo":"https://media.daily.dev/image/upload/s--rOTg3VYO--/f_auto,q_auto/v1791119043/logos/maartenballiauw?_a=BAMAMicg0","url":"https://daily.dev/sources/maartenballiauw"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"c#,localization","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Maarten Balliauw","item":"https://daily.dev/sources/maartenballiauw"},{"@type":"ListItem","position":3,"name":"Translating routes (ASP.NET MVC and Webforms)"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/translating-routes-asp-net-mvc-and-webforms--el0x4vysx#faq","mainEntity":[{"@type":"Question","name":"How can I make ASP.NET MVC generate localized URLs like /producten instead of /products for different cultures?","acceptedAnswer":{"@type":"Answer","text":"You can create a custom Route subclass that translates route values using an IRouteValueTranslationProvider, which maps translated values like Dutch route segments to internal route values such as controller or action names. Override GetRouteData to translate incoming URL segments and GetVirtualPath to translate outgoing links, so ActionLink calls automatically generate localized URLs based on the current thread culture. daily.dev surfaces practical ASP.NET MVC routing techniques for developers building multilingual sites."}},{"@type":"Question","name":"What interface do I need to implement to translate ASP.NET MVC route values for different cultures?","acceptedAnswer":{"@type":"Answer","text":"Implement IRouteValueTranslationProvider, which defines two methods: TranslateToRouteValue converts a translated URL segment back into the internal route value, and TranslateToTranslatedValue does the reverse, converting an internal route value into its culture-specific translated form. A dictionary-based implementation can map pairs like English 'Home' to Dutch 'Thuis' per CultureInfo. developers wiring up localized routing find these implementation patterns gathered on daily.dev."}}]}
```

