многоязычные данные из файла ресурсов

У меня есть два ресурса файла ресурса.resx и ресурс.ar.resx
с теми же ключами, но разные английские и арабские данные
в следующем коде текст в Работает нормально, показывая английский и арабский данные с изменением в выпадающем списке в то время как текст кнопки Сохранить всегда показывает английский не арабский

       </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>

а моя работа по смене языка находится в прерандере главной страницы

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";
        }
    }
}

Введите описание изображения здесьВведите описание изображения здесь

Файлы ресурсов добавляются в GlobalResources

1 ответ

  1. Я бы предпочел сделать это так:

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

    И на ресурсе.resx файл, записи будут как

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

    Аналогично В Resource.ar.resx файл

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