当我为翻译的使用创造新的文化时,我遇到了一个问题 . 我当前的问题是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();
}
我们已经 Build 了两个不同的文化类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;
}
}
1 回答
您可以通过从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上注册自定义文化无法正常工作,则可以尝试其他托管选项(如虚拟机) .