在ASP.NET中创建自定义文化

Bil*_*lly 10 asp.net internationalization

我想在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的函数中(protected override 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");
Run Code Online (Sandbox Code Playgroud)

但是,编译错误仍然存​​在.

更新:

您可以通过在app_globalresources文件夹中创建一个空网站和两个文件"shopping.en-sg.resx"和"shopping.resx"轻松地重现问题.

Mar*_*man 17

您可以基于现有文化创建新文化:

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();
Run Code Online (Sandbox Code Playgroud)

补充: 刚检查了参考文献:我有:

using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
Run Code Online (Sandbox Code Playgroud)

添加(根据评论更新):

关于错误消息:

您看到的错误是某些资源命名冲突的结果.检查资源名称,将这些编译成dll,你需要检查命名空间名称是否冲突.您可以使用反射器工具进行检查:http://www.red-gate.com/products/reflector/