I have a site in the Netherlands "nl-NL" and visitors are also from foreign countries.
I want my visitors to get the language "en" and visitors from Belgium "nl-BE" and "nl-NL" the language "nl". You can't do this default in nop.
With this MOD you only have to install two languages "en-US" and "nl-NL" and the rest is done automaticly.
Feel free to use this in the newest version.
In nop v1.80
In ..\Libraries\NopContext.cs
Find this:
public Language WorkingLanguage
{
get
{
var customer = NopContext.Current.User;
var publishedLanguages = LanguageManager.GetAllLanguages(false);
if (customer != null)
{
var customerLanguage = customer.Language;
if (customerLanguage != null && customerLanguage.Published)
return customerLanguage;
}
else if (CommonHelper.GetCookieInt("Nop.CustomerLanguage") > 0)
{
var customerLanguage = LanguageManager.GetLanguageById(CommonHelper.GetCookieInt("Nop.CustomerLanguage"));
if (customerLanguage != null)
if (customerLanguage != null && customerLanguage.Published)
return customerLanguage;
}
foreach (var _language in publishedLanguages)
return _language;
And change it to his:
public Language WorkingLanguage
{
get
{
var customer = NopContext.Current.User;
var publishedLanguages = LanguageManager.GetAllLanguages(false);
if (customer != null)
{
var customerLanguage = customer.Language;
if (customerLanguage != null && customerLanguage.Published)
return customerLanguage;
}
else if (CommonHelper.GetCookieInt("Nop.CustomerLanguage") > 0)
{
var customerLanguage = LanguageManager.GetLanguageById(CommonHelper.GetCookieInt("Nop.CustomerLanguage"));
if (customerLanguage != null)
if (customerLanguage != null && customerLanguage.Published)
return customerLanguage;
}
//MOD_MATCHLANGUAGE>
//Gets all preferred languages from the browser client
//and tries to match this with a published nop language
string[] languages = HttpContext.Current.Request.UserLanguages;
if ((languages != null) && (languages.Length > 0))
{
//size=5, First time we look for an exact match "en-US", "nl-NL", etc.
//size=2, Second time we look for the first match on "en", "nl", etc.
for (int size = 5; size >= 2; size=size-3)
{
foreach (string language in languages)
{
string sLanguageBrowser = language.ToLowerInvariant().Trim();
if (sLanguageBrowser.Length >= size)
{
sLanguageBrowser = sLanguageBrowser.Substring(0, size);
foreach (var _language in publishedLanguages)
{
string sLanguagePublished = _language.LanguageCulture.ToLowerInvariant().Trim();
if (sLanguagePublished.Length >= size)
{
sLanguagePublished = sLanguagePublished.Substring(0, size);
//compare first "en-US" and second time "en"
if (sLanguageBrowser == sLanguagePublished)
{
return _language;
}
}
}
}
}
}
}
//MOD_MATCHLANGUAGE<
foreach (var _language in publishedLanguages)
return _language;