1

I'm using a custom route in my ASP.NET MVC app (/lang/{culture}/{controller}/{action}/{id}) and in my base controller, I'm detecting the presence of a value for the culture parameter and setting the current thread culture. However, if someone manages to navigate to a language that doesn't have any resources, rather than silently falling back to the default culture, I want to present a message indicating the lack of language support.

How can I detect if the current culture has no resources specified rather than silently falling back to the default?

Chris
  • 27,596
  • 25
  • 124
  • 225

2 Answers2

1

The issue is that in practice it's complicated to programmatically determine whether you have localizations for a given culture. You may have satellite assemblies for a given culture for one assembly, but not for another. And worse, one satellite assembly may contain translations for some resources, but not all. This may be intentional: for en-GB you may prefer to only take an "override rather than duplicate" approach and define only a few resources here and there, only where you differ from your base English.

So the simplest and clearest approach may be to maintain a hard-coded master list of supported cultures in your application code, and then just base your language support alerting logic on this list. When you add a new localization, you'll need update that list in code. But most of us do localization by checking-in new resource files into the solution anyway--there already isn't a complete separation between code and localized resources.

Clafou
  • 15,250
  • 7
  • 58
  • 89
0

There doesn't seem to be a direct API to give you the list of available cultures from the resource files.

One possible solution is to enumerate the resource files and parse out the language code.

Take a look at this SO question: Get available languages from resource

Community
  • 1
  • 1
Andy T
  • 10,223
  • 5
  • 53
  • 95