2017-02-28 144 views
1

我在使用Asp.Net 1.1內核編寫一個Web應用程序的一些奇怪的問題,使用完整的.NET框架v4.6.2。力區域與Asp.Net核心

我想迫使應用程序使用瑞典區域設置(SV-SE)。這在開發機器(當然是......)上工作得很好,但不在它應該運行的服務器上運行(運行Windows Server 2012r2)。

我已經試過如下:

1)把 「SiteLocale」: 「SV-SE」 在appsettings.json文件。

2)把以下在web.config

<configuration> 
    <system.web> 
     <globalization culture="sv-SE" uiCulture="sv-SE" /> 
    </system.web> 
    ... 
</configuration 

3)在初始化的Program.cs應用之前設置默認區域

System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("sv-SE"); 
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new System.Globalization.CultureInfo("sv-SE"); 

4)添加RequestLocalization配置(.. )在Startup.cs中

var supportedCultures = new[] 
{ 
    new CultureInfo("sv-SE") 
}; 
app.UseRequestLocalization(new RequestLocalizationOptions 
{ 
    DefaultRequestCulture = new RequestCulture("sv-SE"), 
    SupportedCultures = supportedCultures, 
    SupportedUICultures = supportedCultures 
}); 

5)在我的控制器構造函數設置當前線程文化

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE"); 
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("sv-SE"); 

6)在我的控制器操作設置當前線程的文化

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE"); 
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("sv-SE"); 

7)安裝瑞典語言包的服務器端(server最初只有英文)

後做所有上述任何日期或數字輸出在視圖中仍然使用en-US語言環境呈現。

在視圖中我可以看到下面看當前區域:

System.Globalization.CultureInfo.CurrentCulture.Name => "sv-SE" 
System.Globalization.CultureInfo.CurrentUICulture.Name => "sv-SE" 
System.Globalization.CultureInfo.InstalledUICulture => "en-US" 

同樣,我的開發機器上,這是工作確定,數字&日期根據瑞典的語言環境進行格式化。但在服務器上他們不是。

在應用程序在ApplicationPoolIdentity下運行的服務器。我假設我將配置爲使用「en-US」作爲語言環境,因爲操作系統最初僅安裝了英語語言。

困惑,爲什麼設置CurrentThread.CurrentCulture /的CurrentUICulture沒有任何影響。

回答

3

你嘗試在Program.cs設置CultureInfo.CurrentCulture屬性:

using System.Globalization; 

CultureInfo.CurrentCulture = new CultureInfo("sv-SE"); 
+0

剛剛嘗試過,但結果仍然一樣。我會假設在Controller的構造函數中設置這些屬性,或者Actions也會覆蓋這種情況。但謝謝你的建議。 – NeoDarque

+0

@NeoDarque在創建'WebHostBuilder'並調用'Build()'之前配置了它嗎? –

+0

是的,正確的。在創建WebHostBuilder之前嘗試設置CultureInfo.CurrentCulture,CultureInfo.CurrentUICulture,CultureInfo.DefaultThreadCurrentCulture&CultureInfo.DefaultThreadCurrentUICulture。 – NeoDarque

1

Microsoft ASP.NET Core Docs - Globalization and localization看看。

4)添加RequestLocalization配置(...)在Startup.cs

從文檔:

上的請求的當前培養被設定在本地化中間件。本地化中間件在Startup.cs文件的Configure方法中啓用。

注意,定位中間件必須可能檢查請求培養任何中間件之前進行配置(例如,app.UseMvc())。

5)在我的控制器構造函數設置當前線程的文化

6)在我的控制器操作設置當前線程的文化

,而不是在構造函數或在每一個動作設定,請嘗試在OnActionExecuting篩選器上設置文化。下面是一個例子代碼:

public class InternationalizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var cultureInfo = CultureInfo.GetCultureInfo("sv-SE"); 

     Thread.CurrentThread.CurrentCulture = cultureInfo; 
     Thread.CurrentThread.CurrentUICulture = cultureInfo; 
    } 
} 

在你的控制器類,把這個:[Internationalization]

+0

之前的'Main()'方法中添加了它,我也嘗試過,但仍然沒有幫助。正如我上面寫的,我可以在視圖中看到CurrentCulture&CurrentUICulture已正確設置爲「sv-SE」,所以這可能不是問題。但即使這樣,視圖模型屬性的渲染仍然使用en-US語言環境呈現。 – NeoDarque