Asp.net

在 ASP.NET 中創建自定義文化

  • December 17, 2019

我想在 App_GlobalResources 文件夾中為新加坡英語 (en-sg) 創建一個名為“shopping.en-sg.resx”的資源文件。

我在編譯過程中出錯。

錯誤 1 命名空間“資源”已包含“購物”的定義 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web\2cd6afe9\737b0a13\App_GlobalResources.vomuzavz.1.cs 26

搜尋Google后,我發現“en-sg”不是預設文化,我必須為它創建自定義文化。我不知道這個的詳細步驟。

我應該怎麼做才能創建文化並消除編譯錯誤?

我按照 MSDN 中的範例,創建一個名為“shopping.x-en-US-sample.resx”的文件,並將以下程式碼放入 BasePage 的函式中(受保護的覆蓋 void InitializeCulture()):

CultureAndRegionInfoBuilder cib = null;

cib = new CultureAndRegionInfoBuilder(
 "x-en-US-sample", CultureAndRegionModifiers.None);

CultureInfo ci = new CultureInfo("en-US");
cib.LoadDataFromCultureInfo(ci);
RegionInfo ri = new RegionInfo("US");
cib.LoadDataFromRegionInfo(ri);

cib.Register();

ci = new CultureInfo("x-en-US-sample");

但是,編譯錯誤仍然存在。

更新:

您可以通過在 app_globalresources 文件夾中創建一個空網站和兩個文件“shopping.en-sg.resx”和“shopping.resx”來輕鬆重現該問題。

您可以基於現有文化創建新文化:

string culture = "en-sg";
string name = "Singaporean English";

CultureInfo cultureInfo = new CultureInfo("en-GB");
RegionInfo regionInfo = new RegionInfo(cultureInfo.Name);

CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder(culture, CultureAndRegionModifiers.None);

cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(cultureInfo);
cultureAndRegionInfoBuilder.LoadDataFromRegionInfo(regionInfo);

// Custom Changes
cultureAndRegionInfoBuilder.CultureEnglishName = name;
cultureAndRegionInfoBuilder.CultureNativeName = name;

cultureAndRegionInfoBuilder.Register();

補充: 剛剛檢查了參考資料:我有:

using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;

添加(更新,基於評論):

關於錯誤資訊:

您看到的錯誤是某些資源命名衝突的結果。檢查資源名稱,這些會被編譯成 dll,您需要檢查命名空間名稱是否衝突。您可以使用反射器工具進行檢查:http ://www.red-gate.com/products/reflector/

引用自:https://stackoverflow.com/questions/1304507