통화, 캘린더는 선택한 언어로 변경되지만 ASP.NET에서는 레이블이 없습니까?

StackOverflow https://stackoverflow.com/questions/608226

  •  03-07-2019
  •  | 
  •  

문제

캘린더가있는 웹 페이지, 통화 값을 보유하는 레이블, 인사 할 레이블이 있습니다. 드롭 다운에서 언어를 선택하면 통화 레이블 인 캘린더가 변경되지만 Hello는 변경되지 않습니다. 다음은 ASPX 페이지 및 CS 파일의 스트리핑 코드입니다.

ASPX :

<asp:Label ID="lblLanguageSelection" runat="server" 
           Text="Select a language: "></asp:Label>
    <asp:DropDownList ID="ddlLanguages" runat="server" AutoPostBack="true">
    <asp:ListItem Value="auto">Auto</asp:ListItem>
    <asp:ListItem Value="en-US">English (US)</asp:ListItem>
    <asp:ListItem Value="en-GB">English (GB)</asp:ListItem>
    <asp:ListItem Value="de">German</asp:ListItem>
    <asp:ListItem Value="fr">French</asp:ListItem>
    <asp:ListItem Value="fr-CA">French (Canada)</asp:ListItem>
    <asp:ListItem Value="hi">Hindi</asp:ListItem>
    <asp:ListItem Value="th">Thai</asp:ListItem>
    </asp:DropDownList>
    <br /><br />
    <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
    <br /><br />
    <asp:Label ID="lblCurrency" runat="server"></asp:Label>
    <br /><br />
    <asp:Label ID="lblHello" runat="server"></asp:Label>

CS :

protected void Page_Load(object sender, EventArgs e)
{
    decimal currency = 65542.43M;
    string hello = "Hello";

    lblCurrency.Text = string.Format("{0:c}", currency);
    lblHello.Text = string.Format("{0}",hello);
}

protected override void InitializeCulture()
{
    string language = Request["ddlLanguages"];

    if (language != null)
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
        Thread.CurrentThread.CurrentCulture = 
                             CultureInfo.CreateSpecificCulture(language);  
    }
}
도움이 되었습니까?

해결책

라벨을 현지화하려면 문자열에 현지화 된 리소스 파일을 사용해야합니다 (전체 "문자열 리터럴을 사용하지 마십시오"모범 사례가 제공됩니다.

현지화하려는 텍스트를 수동으로 번역하고 이러한 문자열을 언어 별 리소스 파일로 컴파일 한 다음 GetString 방법의 방법 ResourcEmanager 객체에 System.RESOURCES.

// Create a resource manager to retrieve resources.
ResourceManager rm = new ResourceManager("items", 
        Assembly.GetExecutingAssembly());

// Retrieve the value of the string resource named "hello".
// The resource manager will retrieve the value of the  
// localized resource using the caller's current culture setting.
String hello = rm.GetString("hello");
lblHello.Text = hello;

다른 팁

어 ... 정확히 무슨 일이 일어날 지 정확히? 통화 및 날짜에는 로케일을 기반으로 내장 형식이 있습니다. ASP.NET가 당신을 위해 언어 번역을하기를 원하십니까?!? 죄송합니다. 운이 좋지 않습니다. :) 내가 당신의 의도를 놓치고 있습니까?

몇 가지 추가 조언 ... 이와 같은 코드를 피하십시오.

string language = Request["ddlLanguages"];

이것은 좋지 않습니다 ... 이것은 요청 객체 기능의 부작용으로 만 작동 하며이 코드를 콘텐츠 페이지와 같은 이름 지정 컨테이너에 넣 자마자 빠르게 중단됩니다. 대신 이것을하십시오 :

string language = ddlLanguages.SelectedValue;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top