来自资源文件的多语言数据

multilingual data from resource file

我有两个资源文件 Resource.resxResource.ar.resx 使用相同的键,但 englisharabic 数据不同 在下面的代码中, 中的文本工作正常,显示 englisharabic 数据随着下拉列表,而保存按钮的文本始终显示英语而不是阿拉伯语

       </tr>
            <tr>
        <td><span><%=Resources.Resource.Citations%></span></td>
        <td>
            <input runat="server" id="taCitations" type="number" style="width: 600px;" /></td>
    </tr>
</table>
<asp:Button ID="btnSave" runat="server" Text="<%$Resources:Resource, Save%>" CssClass="btn" OnClick="btnSave_Click" />

我在母版页中有一个下拉列表

<asp:DropDownList ID="ddlLang" runat="server" AutoPostBack="true">
                                <asp:ListItem Text="English" Value="en-US">
                                <asp:ListItem Text="Arabic" Value="ar-sa" />
                            </asp:DropDownList>

我更改语言的工作是在母版页的 preRender 中

protected void Page_PreRender(object sender, EventArgs e)
{

    if (Request.Form["__EVENTTARGET"] != null && Request.Form["__EVENTTARGET"].Contains("ddlLang"))
    {
        //Set the Language.
        Language = Request.Form[Request.Form["__EVENTTARGET"]];

    }
    if (Language == "en-US")
    {
        Body.Attributes["dir"] = "ltr";
        tdAppParticulars.Attributes["align"] = "right";

    }
    else
    {
        Body.Attributes["dir"] = "rtl";
        tdAppParticulars.Attributes["align"] = "left";

    }
    Thread.CurrentThread.CurrentCulture = new CultureInfo(Language);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(Language);
    List<ExtFormInstruction1> lefi = bal.ExtFormInstructionByType("External Reviewers");

    formInstructions = new Hashtable();
    formIDs = new Hashtable();
    string currentItemURL = "";
    foreach (ExtFormInstruction1 row in lefi)
    {
        string itemURL = row.Page;
        formInstructions[row.Page] = Language == "ar-sa" ? "" : row.Instruction;
        formIDs[row.Page] = row.FormID;
        if (Language == "en-US")
        {
            lblPageTitle.Text = row.Title;
        }
        else if (Language == "ar-sa")
        {
            lblPageTitle.Text = bal.GetFormByPage(row.Page.Replace(".aspx", "Ar.aspx"))[0].Title;

        }
    }

    MakeMenu(Language);
    if (IsPostBack)
    {
        return;
    }
    lblApplicantEmail.Text = bal.GetApplicant(ApplicationID)[0].NameString;
    lblEmployee.Text = erBAL.GetExtRevByID(ExtReviewerID)[0].Name;
    /* printer friendly */
    if (Utils.IsPrintMode())
    {
        tdLeftMenu.Visible = false;
        lnkPrint.Visible = false;
    }
    lnkPrint.NavigateUrl = currentItemURL + "?print=1";

}

母版页

中的语言是 属性
public string Language
{
    set
    {
        Session["Language"] = value;
    }
    get
    {
        if (Session["Language"] != null)
        {
            return Session["Language"].ToString();
        }
        else
        {
            return "en-US";
        }
    }
}

我宁愿这样做:

<asp:Button ID="btnSave" runat="server" meta:resourceKey="SaveButton"  CssClass="btn" OnClick="btnSave_Click" />

而在 Resource.resx 文件中,条目将类似于

Name: SaveButton.Text
Value: Save
Name: SaveButton.Tooltip
Value: Click to Submit 

类似地在Resource.ar.resx 文件

Name: SaveButton.Text
Value: حفظ
Name: SaveButton.Tooltip
Value: انقر فوق لتقديم