返回列表 发新帖

win 10 Culture is not supported.

[复制链接]

20

主题

36

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2019-4-15 01:28:50 | 显示全部楼层 | 阅读模式
System.Globalization.CultureNotFoundException: Culture is not supported.
Due to my previous laptop (Windows 7) was broken, so I have purchased a new laptop with Windows 8 installed.
Just found that, when I tried to use an application, it prompted the following error message. However, this application I was used to use in my previous Win 7 laptop without any problem. Since I have no idea for what causing this problem, and definitely no idea on how to resolve it.
Very much appreciated for any one of the professional can help me out of this problem urgently. Thanks!
Below are the error message that I copied from my new laptop.
Server Error in '/' Application.

Culture is not supported.
Parameter name: name
zh-Hant-HK is an
invalid culture identifier.
Description:
An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error and
where it originated in the code.

Exception Details:
System.Globalization.CultureNotFoundException: Culture is not
supported.
Parameter name: name
zh-Hant-HK is an invalid culture
identifier.

Source Error:
An unhandled exception was generated during the execution of the
current web request. Information regarding the origin and location of the
exception can be identified using the exception stack trace below.

Stack Trace:
[CultureNotFoundException: Culture is not supported.Parameter name: namezh-Hant-HK is an invalid culture identifier.]   System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride) +9358573   ASP.global_asax.Session_Start(Object sender, EventArgs e) +455   System.Web.SessionState.SessionStateModule.RaiseOnStart(EventArgs e) +9026339   System.Web.SessionState.SessionStateModule.CompleteAcquireState() +148   System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData) +561   System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +96   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184


回复

使用道具 举报

20

主题

36

帖子

87

积分

注册会员

Rank: 2

积分
87
 楼主| 发表于 2019-4-15 01:29:23 | 显示全部楼层
Microsoft Edge或IE11打开某些网站报错:Culture name ‘zh-hans-cn’ is not supported.
Microsoft Edge或IE11打开某些网站报错:Culture name ‘zh-hans-cn’ is not supported.
参考 ASP.net2.0多国语言系网站与Windows8的IE10语系设定:http://blog.miniasp.com/post/2012/03/11/ASPNET-20-e5a49ae59c8be8aa9ee7b3bbe7b6b2e7ab99e88887-Windows-8-e79a84-IE10-e8aa9ee7b3bbe8a8ade5ae9a.aspx
具体设定看以下设置:
http://blog.miniasp.com/post/2012/09/02/How-to-Change-IE10-Windows-8-Language-Preference-to-zh-TW.aspx
Windows10下的设置:
  • Win+R组合键,输入control,回车;
  • 打开控制面板后,找Language,点击进去;(Control Panel\All Control Panel Items\Language)
  • 点击左边Advanced Settings,进入高级选项;
  • Language for web content下面,选择这个项前面的复选框:Don’t let websites access my language list. The language of my date, time and number formatting will be used instead.  ,保存退出。
  • 然后再去访问网站,发现不会报:Culture name ‘zh-hans-cn’ is not supported. 这个错了。



回复 支持 反对

使用道具 举报

20

主题

36

帖子

87

积分

注册会员

Rank: 2

积分
87
 楼主| 发表于 2019-4-15 01:30:14 | 显示全部楼层
ASP.NET 2.0 多國語系網站與 Windows 8 的 IE10 語系設定
前天將我的 Windows 8 安裝了簡體中文的 Language pack (語言套件),設定上去後連到我的部落格網站立刻出現嚴重的例外錯誤,因此注意到從 Windows Vista / .NET 3.0+ 開始針對繁體中文簡體中文的 Language Tag 已經都改用 IETF 的標準表示字串,原本我們常用 zh-CHT 代表繁體中文,爾後都會改用 zh-Hant 來表示,若是簡體中文則是 zh-Hans。然而重點是 ASP.NET 2.0 並不支援讀取繁體中文zh-Hant簡體中文zh-Hans,只要嘗試讀取就會立刻引發例外狀況,這是各位開發人員應該注意的地方。
首先,我必須聲明這樣的改變完全是為了因應 IETF 標準的變化所致,zh-Hant / zh-Hans 這樣的 Language Tag 是從 2006 年才被定義出來(RFC 4646),在這之前我們要表示不含地區特性的中文,都會採用 zh-CHT 或 zh-CHS,然而之後才被定義成 zh-Hant / zh-Hans。
我們從 IE9 的「語言喜好設定」的畫面來看,如下圖示,通常台灣這邊的預設語言都會是 中文 (繁體,台灣) [zh-TW],當你新增語言的時候有個選項叫做 中文 (繁體) [zh-Hant],兩者的差異就在於 zh-TW 是含有地區特性的 Language Tag,而 zh-Hant 為通用於「中文繁體」的語系,並沒有區分台灣、香港或澳門之間的文化差異。
若用 Fiddler 來看從瀏覽器送出的 Accept-Language 標頭,可以發現他送出的 Language Tag 是 zh-TW
而 ASP.NET 的多國語系功能支援,就是依賴這個 HTTP Header (Accept-Language) 的值來判斷瀏覽器的語系,藉此送出不同語系資源的內容。由於我的部落格有內建多國語系功能,前天將我的 Windows 8 Consumer Preview 安裝了簡體中文的語言套件(Language pack),設定上去後連到我的部落格網站立刻出現嚴重的例外錯誤:
我查了一下 事件檢視器 (Event Log),得到以下錯誤訊息:
  • Exception type: NotSupportedException
  • Exception message: Culture 'zh-Hant' is a neutral culture. It cannot be used in formatting and parsing and therefore cannot be set as the thread's current culture.
  • Stack trace:
    at System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture)
    at System.Threading.Thread.set_CurrentCulture(CultureInfo value)
    at System.Web.HttpApplication.ThreadContext.SetRequestLevelCulture(HttpContext context)
    at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext)
    at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
    at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
    at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
    at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)

看到這個錯誤很直覺的會想到應該是多國語系的地方出了問題,因此我就在我的 Windows 8 主機安裝 Fiddler 來分析我從 Windows 8 的 IE10 到底送出了什麼 Accept-Language 內容過去,如下圖示:
備註:你也可以用 IE10 內建的開發者工具進行 HTTP 封包分析。
果不其然,IE10 送出的 Language Tag 並不是常見的 zh-TW 而是 zh-Hant,這個例外並不是網站本身程式所造成的,而是 ASP.NET 在 自動判斷 文化特行的時候發生了錯誤。下圖我列出了我網站 web.config 所列出的 <globalization> 設定值,造成錯誤的地方正是如圖箭頭處所指出的 culture="auto" 設定。
解決辦法也很簡單,就是是不要自動判斷 culture 的文化特性將該屬性移除即可
請注意:設定 uiCulture="auto" 一樣可以讓全域資源檔區域資源檔正常運作,所以大部分情況下是不會有問題的,這裡的 culture 主要是針對數字、貨幣、時間、日期等地區特性進行判斷。
而我剛剛也針對 ASP.NET 2.0 , 3.5 , 3.5 SP1 , 4.0 進行測試,發現要 ASP.NET 4.0 之後才不會出現例外狀況,所以如果你的 ASP.NET 應用程式需要針對數字、貨幣、時間、日期等地區特性進行自動判斷,恐怕需要在 Global.asax 裡多寫程式額外判斷才行,相關範例可參考我的另一篇文章【如何讓 ASP.NET 依據瀏覽器指定的語系自動選用資源檔】。
這問題也許只會出現在 Windows 8 Consumer Preview 這個版本裡,因為目前這一版的 IE10 並無法選取內含地區特性的語系,所以你並無法選擇 zh-TW 或 zh-CN 這些語系,這點實在讓我非常困擾。
在 IE9 以前的語言喜好設定都可以很自由的個別設定,跟作業系統不會有直接的關聯,但是在 Windows 8 裡的 IE10 卻跟作業系統綁的緊緊的,以下是在 IE10 設定不同語系的步驟圖示:
1. 開啟「網際網路選項」並點選「語言」按鈕,目前這步驟跟之前的 IE 版本都一樣:
2. 在設定語言喜好設定的介面,跟前一版已經不一樣了,現在這一版變成要開啟作業系統裡的語言設定
3. 這時你會開啟控制台裡的語言設定,你必須在這裡挑選語言,而且無法預覽或選擇含地區特性的語系,我也找不到任何可以選擇 zh-TW 這個 Language Tag 的選項,希望在未來的 Windows 8 版本能夠解決這個問題。
註:文化特性這部份真的有夠錯綜複雜的 @_@

https://blog.miniasp.com/post/2012/03/11/ASPNET-20-e5a49ae59c8be8aa9ee7b3bbe7b6b2e7ab99e88887-Windows-8-e79a84-IE10-e8aa9ee7b3bbe8a8ade5ae9a
相關連結


回复 支持 反对

使用道具 举报

20

主题

36

帖子

87

积分

注册会员

Rank: 2

积分
87
 楼主| 发表于 2019-4-15 01:32:45 | 显示全部楼层
調整 IE10 與 Windows 8 語言喜好設定為舊版的 zh-TW 語系
今年三月剛開始用 Windows 8 預覽版時曾經寫過一篇【ASP.NET 2.0 多國語系網站與 Windows 8 的 IE10 語系設定】文章,該文章提到一個在 Windows 8 與 IE10 在針對語言喜好設定時的問題,除了可能會造成你現有 ASP.NET 多國語系應用程式發生例外狀況外 (先前文章有提到解決辦法),還有可能會導致許多網站顯示錯誤的語言文字。最近安裝了 Windows 8 RTM (正式版) 之後,終於被我找到解決辦法。
備註:建議開發人員先看過【ASP.NET 2.0 多國語系網站與 Windows 8 的 IE10 語系設定】文章才會比較了解為什麼新版 IE10 與 Windows 8 可能會導致 ASP.NET 3.5 以前 (含) 會發生例外狀況。
如果你要讓特定一些網站不發生錯誤或原本該顯示中文的網站突然都顯示成英文的話,建議按照以下設定即可讓原本瀏覽器送出的 Accept-Language 標頭從 zh-Hant-TW 變回傳統的 zh-TW 語系設定!
1. 開啟 語言喜好設定 視窗
選取 [工具] / [網際網路選項] / [一般] 頁籤 / [語言],然後點擊 [設定語言喜好設定] 按鈕
2. 點擊 [進階設定]
3. 捲動到最下方,你會發現有個 適用於網路內容的語言 分類,裡面有個 [不要讓網站存取我的語言清單。將改用我的日期、時間和數字格是設定的語言。] 勾選項目,將其打勾後按下 [儲存] 即可。

如此一來,如果你選擇的日期、時間和數字格式是 中文 (繁體,台灣) 的話 (如下圖示),那麼你的 IE10 瀏覽器所送出的 Accept-Language 標頭就會跟 IE9 以前預設的語言設定 zh-TW 一樣,許多相容性問題也會自然解決。
以下是從 Fiddler 中得到的佐證圖示:

備註
IE9 以前的瀏覽器版本是可以選擇多個語言的,也就是設定語言喜好設定時可以決定其語言優先順序,在 IE10 也會依照系統的語言順序送出正確的 Accept-Language 標頭,如下範例:
Accept-Language: zh-Hant-TW,zh-Hant;q=0.8,en-US;q=0.5,en;q=0.3

但依照本篇文章所建議的設定有個小缺點,那就是這個選項會導致一次只能設定一個語言喜好,不能設定為多個,如下範例:
Accept-Language: zh-TW

不過此缺點似乎對許多人來說不會有多大影響,因為若伺服器端不支援 zh-TW 本來就會預設顯示英文,除非一些比較特殊的網站。
標籤 : Windows 8, IE10, language, zh-tw, zh-hant-tw, win8



回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表