我的网站上有一个名为 buystuff.aspx 的网页。我创建了两个本地资源: buystuff.aspx.resx 和 buystuff.aspx.da-dk.resx 。
这样可以正常工作,如果我使用da-DK设置进入网站,我会获得该版本,如果我输入其他任何内容,我将获得默认设置。
但是,我想要的是以编程方式设置它。当用户输入buystuff.aspx时,他们应该被强制进入英语(en-US)版本,如果他们输入buystuff.aspx?language = da,他们应该被强制进入da-dk版本。
以下代码无法解决问题:
private void SetupLanguage()
{
if (!string.IsNullOrEmpty(CurrentLanguage))
{
if (CurrentLanguage == "da")
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
return;
}
}
Culture = "en-US";
UICulture = "en-US";
}
我也尝试过以下哪些不起作用:
private void SetupLanguage()
{
if (!string.IsNullOrEmpty(CurrentLanguage))
{
if (CurrentLanguage == "da")
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
return;
}
}
CultureInfo info = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = info;
Thread.CurrentThread.CurrentCulture = info;
}
在调试模式下,我可以告诉代码按原样运行。但是,当加载buybtc.aspx(我的CurrentLanguage变量是string.empty)时,它仍然从buystuff.aspx.da-dk.resx加载资源。
有什么想法吗?
答案 0 :(得分:0)
好的,我自己解决了(离开那些时间 - 永远;))。
问题发生在我的web.config中,我有几个SEO原因的规则:
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect domain.com to www" patternSyntax="Wildcard" stopProcessing="true">
<match url="*"/>
<conditions>
<add input="{HTTP_HOST}" pattern="btcglobe.com"/>
</conditions>
<action type="Redirect" url="http://www.btcglobe.com/{R:0}"/>
</rule>
<!--To always remove trailing slash from the URL-->
<rule name="Remove trailing slash" stopProcessing="true">
<match url="(.*)/$"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}"/>
</rule>
<rule name="LowerCaseRule1" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false"/>
<conditions>
<add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml)|(asmx))$" ignoreCase="true" negate="true"/>
</conditions>
<action type="Redirect" url="{ToLower:{URL}}"/>
</rule>
</rules>
</rewrite>
</system.webServer>
我也在web.config中指定了我的文化,所以不管我做了什么,它总是一样的文化。
所以解决方案:
我的代码现在是这样的:
private void SetupLanguage()
{
if (!string.IsNullOrEmpty(CurrentLanguage))
{
if (CurrentLanguage == "da")
{
CultureInfo dkinfo = CultureInfo.CreateSpecificCulture("da-dk");
CultureInfo.DefaultThreadCurrentCulture = dkinfo;
CultureInfo.DefaultThreadCurrentUICulture = dkinfo;
Thread.CurrentThread.CurrentCulture = dkinfo;
Thread.CurrentThread.CurrentUICulture = dkinfo;
return;
}
}
CultureInfo info = CultureInfo.CreateSpecificCulture("en-us");
CultureInfo.DefaultThreadCurrentCulture = info;
CultureInfo.DefaultThreadCurrentUICulture = info;
Thread.CurrentThread.CurrentCulture = info;
Thread.CurrentThread.CurrentUICulture = info;
}