【发布时间】:2013-12-05 14:01:39
【问题描述】:
我有一个 ASP.Net 网站,其 App-GlobalResources 结构如下:
我正在使用此文件在我的标记中检索所需的本地化字符串,如下所示:
<%@ Page Title='<%$ Resources:ResourceStaticStuff, HelpIntroductionTitle %>' Language="C#" MasterPageFile="~/App_Resources/PlainDefault.master"
AutoEventWireup="true" CodeBehind="Introduction.aspx.cs" Inherits="Software.PasswordReset.Registration.Web.Help.Introduction" %>
<asp:Content ID="ContentWelcome" ContentPlaceHolderID="BodyContentPlaceholder" runat="server">
<h1 class="title-regular clearfix">
<asp:Literal ID="LiteralHeader" runat="server" Text='<%$ Resources:ResourceStaticStuff, HelpIntroductionTitle %>' />
</h1>
<asp:Literal ID="LiteralHelp" runat="server" Text='<%$ Resources:ResourceStaticStuff, HelpIntroductionLiteralHelpText %>' />
<br />
<br />
</asp:Content>
即使更改了文化 + ui 文化,我也总是得到默认的英文文本。我在运行时改变文化如下:
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
{
SiteLogger.NLogger.Info("Loading Languages and Directories");
if (!LoadLanguages() || !LoadDirectories())
{
SiteLogger.NLogger.Info("Loading Languages or Directories failed!");
return;
}
SiteLogger.NLogger.Info("Completed : PublicLogOn.PageLoad");
}
}
catch (Exception ex)
{
SiteLogger.NLogger.Error("Error in PublicLogOn.Page_Load", ex.Message);
}
}
private Boolean LoadLanguages()
{
Boolean methodResult;
try
{
SiteLogger.NLogger.Info("In Load Languages");
DDLLanguages.Items.Clear();
var fetchedLanguages = UserManagePage.GetOrganizationLanguages();
foreach (var oneFetchedLanguage in fetchedLanguages)
{
DDLLanguages.Items.Add(new ListItem(oneFetchedLanguage.LanguageSymbol, oneFetchedLanguage.LanguageSymbol));
}
if (fetchedLanguages.Count() == 1)
{
DDLLanguages.Enabled = false;
}
// The first place where the language is pushed in. Everything that follows afterwards will be translated
Session["UserLanguage"] = DDLLanguages.SelectedValue;
UpdateLanguage();
methodResult = true;
}
catch (Exception exp)
{
SiteLogger.NLogger.Error("Error in load languages : ", exp.ToString());
// Nlogger.LogError(exp);
labelMessage.Text = MessageFormatter.GetFormattedErrorMessage("Error retrieving organization languages.");
methodResult = false;
}
return methodResult;
}
private void UpdateLanguage(String languageCode="")
{
if (String.IsNullOrEmpty(languageCode))
{
languageCode = Session["UserLanguage"].ToString();
}
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageCode);
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageCode);
var isRtl = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.IsRightToLeft;
if (isRtl)
{
Master.BodyTag.Attributes["dir"] = "rtl";
}
else
{
Master.BodyTag.Attributes["dir"] = "ltr";
}
base.InitializeCulture();
}
protected void DDLLanguages_SelectedIndexChanged(object sender, EventArgs e)
{
Session["UserLanguage"] = DDLLanguages.SelectedValue;
UpdateLanguage();
}
这里有趣的是页面变成了从右到左或从左到右的良好和正确但带有英文的页面。所以,*.ur-PK.resx 似乎没有被娱乐。
有什么想法吗?
【问题讨论】:
标签: c# asp.net visual-studio-2013 globalization