当我为翻译的使用创造新的文化时,我遇到了一个问题。我当前的问题是Windows不允许应用程序访问这种文化似乎是的文件夹。在我们的本地机器中,我们可以将Visual Studio作为管理员,然后我们对此没有任何问题,但由于我们使用Azure部署我的应用程序,我不知道如何允许访问有问题的文件夹,因此我们得到此异常: System.Globalization.CultureNotFoundException:不支持Culture。参数名称:name en-US-biz是无效的区域性标识符。
当我们更新用户语言代码的下一部分时出现异常:
var currentUserLanguage = 'en-US-biz';
IocContainer.SetCurrentUserLanguage(currentUserLanguage);
var ci = domCultureLanguage != null ? domCultureLanguage.CultureInfo : new CultureInfo(currentUserLanguage);
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
在行中:new CultureInfo(currentUserLanguage)是我得到异常的地方。
我们在global.asax文件中注册文化:
private void LoadCultureManager()
{
BizCultureEn.Register();
BizCultureEs.Register();
}
我们已经建立了2个不同的文化类+ rsex各自的文件。
例如BizCultureEn类:
public static class BizCultureEn
{
//"es-ES-custom" need to match with Translations.es-ES-custom.resx
public static string CustomCultureName = "en-US-biz";
public static CultureInfo CultureInfo { get; set; }
public static void Register()
{
// Create a custom culture for ru-US.
CultureAndRegionInfoBuilder builder = new CultureAndRegionInfoBuilder(CustomCultureName, CultureAndRegionModifiers.None);
CultureInfo = CultureInfo.CreateSpecificCulture(CustomCultureName);
builder.LoadDataFromCultureInfo(CultureInfo);
builder.CultureEnglishName = "Biz English (United States)";
builder.CultureNativeName = "Biz English (United States)";
builder.ThreeLetterISOLanguageName = "ben";
builder.ThreeLetterWindowsLanguageName = "ben";
builder.TwoLetterISOLanguageName = "bn";
builder.RegionEnglishName = "Biz English";
builder.ThreeLetterISORegionName = "USA";
builder.ThreeLetterWindowsRegionName = "USA";
builder.TwoLetterISORegionName = "US";
// Register the culture.
try
{
builder.Register();
}
catch (InvalidOperationException ex)
{
var ex1 = ex;
// Swallow the exception: the culture already is registered.
}
// Use the custom culture.
//CultureInfo = CultureInfo.CreateSpecificCulture(CustomCultureName);
Thread.CurrentThread.CurrentCulture = CultureInfo;
Thread.CurrentThread.CurrentUICulture = CultureInfo;
}
}
答案 0 :(得分:0)
您可以通过Kudu访问“Debug console> PowerShell”来运行[system.Globalization.CultureInfo]::GetCultures('AllCultures')
命令来检索所有文化。
此外,据我所知,当我们调用CultureAndRegionInfoBuilder.Register
方法注册自定义文化时,注册过程将创建.nlp文件并将.nlp文件存储在%windir%中\ Globalization 系统目录,需要管理权限。如果我们在Azure Web应用程序上执行此操作,这将导致访问权限相关问题。您可以尝试remote debug your web app检查注册自定义文化时是否发生任何异常。
如果注册自定义文化在Azure Web App sandbox上无法正常工作,您可以尝试其他托管选项(例如虚拟机)。