천객만래 [千客萬來] (It has an interminable succession of visitors)

출처 : MKEX''s 닷넷 커뮤니티 “박종명님"

 

여러 언어를 지원해야 하는 다국어 웹 사이트를 구축하기 위한 방법을 알아보자.

 

제일 쉬운 접근 방법은 각 언어에 해당하는 웹 사이트를 별도로 만드는 것이다.

그러나 이것은 접근 방법이 쉽다는 것 뿐, 개발 양적인 측면이나 유지/보수성을 생각한다면 결코 좋은 접근 방법이 아닐 것이다.

동일한 컨셉과 구조, 컨텐츠를 제공하는 웹 사이트가 단지 언어만 다르다는 이유로 쌍둥이 사이트를 새로 개발해야 한다는 문제점과

그렇게 구축된 웹 사이트의 특정 컨텐츠 추가나 변경을 해야 할 때에는 모든 웹 사이트를 다 수정해야 하는 문제점이 있다.

 

예전부터 효율적인 다국어 지원을 위해서 다양한 방법들이 개발자들에 의해 구현되어 왔었는데..

가장 보편적으로는 다국어 처리를 위한 일종의 유틸리티 성 모듈을 거쳐 처리하는 방식이 대부분 이었다.

 

이번 글에서는 닷넷이 제공하는 표준 리소스 메커니즘을 이용해 다국어 지원을 효율적으로 하는 방법을 알아 본다.

 

ASP.NET 1.x 2.0 모두 리소스를 이용할 수 있다.

닷넷의 리소스에 대한 개념은 다음 글에서 확인해 주길 바란다.

리소스(Resource)

 

ASP.NET 1.1 에서는 리소스를 이용한 다국어처리를 위해 ResourceManager 를 이용했었다.

그러나 ASP.NET 2.0에서는 보다 관리용이하고 개발용이 하도록 개선된 부분이 있다.

 

 

전역(Global) 리소스 파일 / 지역(Local) 리소스 파일

ASP.NET 2.0 에서는 리소스 파일의 사용 범위에 따라 전역,지역 두 가지로 분리되었다.

App_Code App_Data 처럼 리소스 파일 역시 예약된 폴더를 가지고 있다.

 

전역 리소스 파일 저장 -> App_GlobalResources

지역 리소스 파일 저장 -> App_LocalResources

 

전역 리소스는 말 그대로 웹 사이트 모든 영역에서 사용할 수 있으나

지역 리소스는 특정 단일 페이지(aspx, ascx, master) 에서만 사용가능하다.

또한 당연하겠지만 App_GlobalResources 폴더는 웹 사이트 루트에 단 1 개만 허용되지만 App_LocalResources 폴더는

웹 사이트 내의 모든 폴더에 하나 씩 존재해도 된다.

 

 

Web.Config 에 언어정보 추가하기.

언어 설정에 따른 지역화를 테스트 하기 위해 웹 사이트의 설정 파일인 Web.Config 파일에 다음과 같이 언어 정보를 기록하자.

<globalization uiCulture="en" />

일단 테스트를 위해 현재 UICulture 를 영어(en) 으로 설정하였다.

 

 

* 현재 브라우저에 설정된 기본 언어(첫 번째 언어) 를 참고해서 UICulture 를 지정하려면 ‘auto’ 를 사용하면 된다

<globalization uiCulture="auto" />

또는

<%@ Page UICulture="es" UICulture="auto" %>

 

이렇게 설정 하면 브라우저에 설정된 첫 번째 언어로 설정되게 된다



 

 

 

전역(Global) 리소스 이용하기.

웹 프로젝트에 App_GlobalResources 폴더를 생성하고 다음과 같이 리소스 파일을 생성하자.



 

  

언어 정보가 없는 Resource.resx 기본 리소스 파일이다.

이 리소스 파일은 해당 언어의 리소스 파일이 없을 경우 대체(fallback) 리소스 파일로 사용된다.

이 기본 리소스 파일을 한국어를 위한 리소스 파일로 사용할 것이며 영어를 지원하기 위해서 Resource.en.resx 을 사용한다.

 

리소스 파일명에 포함된 언어 정보는 정확히 기입해야 한다.

런타임에 ASP.NET  에서는 CurrentUICulture 속성과 가장 많이 일치 하는 리소스 파일을 자동으로 찾아서 사용하게 된다.

이때 참조되는 정보가 리소스 파일명이 된다.

 

각 국가별 언어 표현은 아래와 같이 확인할 수 있다.



  

이렇게 리소스 파일이 준비 되었으면 컨트롤의 지역화를 수행해 보자.

웹 페이지에 버턴과 Localize 컨트롤을 올리고 Text 속성에 명시적으로 지역화를 수행하도록 한다.

<asp:Button ID="Button1" runat="server"

        Text="<%$ Resources:Resource, Message %>" /><br />

              

<asp:Localize ID="Localize1" runat="server"

        Text="<%$ Resources:Resource, Message %>"></asp:Localize>

 

전역 리소스 파일을 사용할 경우 다음과 같은 표현식으로 리소스 내용을 참조하게 된다.

이를 명시적 지역화라 한다.

<%$ Resource: Class , Key %>

Class 의 경우 확장자와 언어정보를 제외한 리소스 파일명이 된다. 이 예에서는 Resource 가 된다.

Key 는 리소스 파일에 기록한 Key 정보 이다. Key 에 해당하는 Value 를 가져오는 것이 되겠다.

 

Localize 컨트롤은 닷넷 2.0에 새로 추가된 컨트롤로써 Literal 컨트롤을 상속받은 컨트롤이다.

이는 웹 페이지에 고정되고 정적인 내용을 표현하기 위한 가벼운 컨트롤 즈음 될 것이다.

(사실 Literal , Label 컨트롤로도 동일한 지역화를 구현할 수 있다)

 

이렇게 다 구현되었다면 Web.Config <globalization uiCulture="en" /> 내용을 변경하면서 테스트 해 보자.

아래는 en, ko 두 가지를 테스트 해본 결과 이다.



en으로 설정하면 Resource.en.resx 가 사용될 것이며

ko 로 했을 경우에는 Resource.ko.resx 가 없으므로 기본 리소스 파일인 Resource.resx 가 대체되어 사용되었다.

 

또한 다음과 같이 전역 리소스의 내용을 출력할 수 있다.

Response.Write(this.GetGlobalResourceObject("Resource", "Message"));

 

 

지역(Local) 리소스 이용하기.

웹 프로젝트의 원하는 폴더에(웹 루트도 상관없다) App_LocalResources 폴더를 생성하고 다음과 같이 리소스 파일을 생성하자.



 

이전과 동일하게 기본리소스와 영어지원을 위한 리소스 두 개를 생성하고 내용을 Key-Value 형태로 기록하였다.

 

주의 해야 할 것은 지역(Local) 리소스의 경우 특정 한 페이지만을 위한 리소스 이므로 페이지명과 연결 시켜서 리소스 파일명이 부여되어야 한다.

현재 이 예제에서는 Local.aspx.resx 리소스라는 말은 Local.aspx 라는 페이지를 위한 리소스 파일이 되는 것이다.

또한 닷넷 컨트롤의 속성과 리소스 파일의 Key 이름과도 연관성이 있는데, 이 예제에서는

ButtonResource.Text 라 했으므로 컨트롤의 Text 속성에 이 Key 가 자동으로 사용된다 라고 해석하면 되겠다.

 

일단 지역 리소스파일을 이용해 컨트롤의 지역화를 수행해 보자

<asp:Button ID="Button1" runat="server"

        Text="<%$ Resources: ButtonResource.Text %>" />

또는       

<asp:Button ID="Button2" runat="server" Text="DefaultText2"

        meta:resourcekey="ButtonResource" />

 

지역 리소스를 사용할 경우 전역 리소스처럼 명시적 지역화를 수행할 수도 있지만

Meta 태그를 이용한 암시적 지역화로도 사용가능하다.

암시적 지역화는 앞서 말했듯이 리소스 키 값만 연결해 주면 컨트롤의 특정 속성과 리소스 파일에 속성이 매칭되어 사용되는 것을 말한다.

 

또한 명시적 지역화를 사용할 경우에도 Class 명을 생략할 수 있다. 단일 페이지에 연결된 리소스 파일이기 때문에 굳이 리소스 파일명을

기입할 필요가 없는 것이다.

역시 Web.config 의 언어 정보를 변경하면서 수행하면 다음과 같이 결과가 나온다.



 

물론 지역(Local) 리소스 파일의 경우에도 다음과 같이 일반 출력이 가능하다

Response.Write(this.GetLocalResourceObject("ButtonResource.Text"));

 

 

전역(Global) 리소스 와 지역(Local) 리소스의 적용 상황

닷넷 프레임워크에서는 지역화를 위한 단일한 접근이 아니라 범위에 따른 두 개의 영역으로 리소스 파일을 관리하도록 하였다.

이 둘 중 어느것을 사용할 지에 대한 기준은 프로젝트의 성격에 따라 다르겠지만

일반적으로 다음과 같은 가이드 라인을 제공할 수 가 있겠다.

1)       공용 메시지나 단순 출력 메시지일 경우 전역 리소스 사용

2)       웹 사이트에 전역적으로 사용되는 메시지일 경우 전역 리소스 사용

3)       전역 리소스 파일이 너무 커져 협업의 어려움이나 관리의 어려움이 있을 경우 지역 리소스 사용
-
웹 사이트의 모든 페이지의 리소스를 하나의 전역 리소스에 다 표현한다면 파일을 관리하기도 어려울 것이며,
 
협업 시 발생하는 파일 동시 변경과 같은 문제점도 발생할 수 있다.
 
로컬 리소스를 사용하면 각 폴더마다 리소스 폴더를 별도로 둘 수 있으며 각 페이지에 해당하는 리소스 파일을 각각 생성함으로써
 
협업 시 서로 신경 쓰지 않고 작업할 수 있으며 페이지 별로 리소스를 관리하기 때문에 파일에 대한 관리도 용이해 질 수 있다.

4)       각 페이지의 컨트롤의 텍스트 표현(Text 속성)을 위해서는 지역 리소스 사용
- 3)
의 이유와도 동일함.
 
모든 페이지의 컨트롤 Text 속성을 단 하나의 전역 리소스에 포함해야 한다면.. 끔찍할 것이다.

 

이상의 가이드 라인을 기준으로 현재 프로젝트에 적합한 리소스 파일을 사용하기 바란다.

 

 

리소스를 이용한 웹 페이지 지역화에 대해 보다 상세한 내용은 다음의 MSDN 을 참고하기 바란다.

http://msdn2.microsoft.com/ko-kr/library/ms227427(VS.80).aspx

 

 

 

 

* 참고

아래 이미지를 보자


이와 같이 텍스트를 포함하는 이미지일 경우에도 다국어 처리를 해 주어야 한다.

여러 방법이 있을 수 있으나,

통상적으로 각 언어별로 이미지를 새로 만들어 폴더를 구분하는 방법이 있다.

이 경우에도 리소스 파일과 연계하여 사용하면 그나마 유연한 환경이 될 것이라 본다.

아래처럼 각 언어별 리소스 파일에 이미지의 경로를 기록하는 것이다.

 



 
그리고 아래와 같이 현재 UICulture 에 맞는 리소스의 경로를 참조하도록 한다.

<asp:Image ID="Image1" runat="server" ImageUrl="<%$ Resources:Resource, ImageUrl %>" />

또는       

<img src="<%$ Resources:Resource, ImageUrl %>" runat=server />

 

물론 웹 사이트의 모든 이미지를 서버 컨트롤로 만드는 것이 결코 좋은 선택은 아니다.

닷넷의 서버 컨트롤은 필요하다면 최소화 하는 것이 수행 속도 면에서는 좋을 수 있다.

 

여기서 말하는 이미지 다국어 처리 방법은 리소스와 연계한 힌트 성 글이니 이 글을 절대적으로 수용할 필요도 없으며

적합하지 않을 가능성이 크다.  그래서 참고인 것이다 ^^;

 

Posted by SB패밀리

ASP.NET 웹 페이지에서는 CultureUICulture 속성에 대한 두 가지 culture 값을 설정할 수 있습니다. Culture 값은 날짜, 숫자, 통화 서식 등 culture에 종속된 함수의 결과를 결정합니다. UICulture 값은 페이지에 로드되는 리소스를 결정합니다.

 

참고

CultureUICulture 속성은 언어(예: 영어의 경우 en, 스페인어의 경우 es, 독일어의 경우 de)와 culture(예: 미국의 경우 US, 영국의 경우 GB, 멕시코의 경우 MX, 독일의 경우 DE)를 식별하는 인터넷 표준 문자열을 사용하여 설정됩니다. 예를 들면 영어(미국)를 en-US로, 영어(영국)를 en-GB로, 스페인어(멕시코)를 es-MX로 설정할 수 있습니다. 자세한 내용은 CultureInfo를 참조하십시오.

두 culture 설정에 동일한 값을 설정할 필요는 없습니다. 응용 프로그램에 따라 두 값을 서로 다르게 설정해야 할 수도 있습니다. 그러한 예 중 하나는 웹 경매 사이트입니다. UICulture 속성은 각 웹 브라우저에 따라 변경될 수 있지만 Culture는 그대로 유지됩니다. 따라서 가격은 항상 동일한 통화와 서식으로 표시됩니다.

Culture 값은 en-US 또는 en-GB처럼 특정 culture로만 설정할 수 있습니다. 이렇게 하면 en-USen-GB처럼 통화 기호가 서로 다른 경우 en에 사용할 올바른 통화 기호를 식별할 필요가 없습니다.

사용자는 브라우저에서 UI culture와 culture를 설정할 수 있습니다. 예를 들어 Microsoft Internet Explorer를 사용하는 경우에는 도구 메뉴에서 인터넷 옵션을 클릭하고 일반 탭에서 언어를 클릭한 다음 기본 언어를 설정할 수 있습니다. Web.config 파일에서 globalization 요소의 enableClientBasedCulture 특성이 true로 설정되어 있는 경우 ASP.NET에서는 브라우저가 보낸 값을 기준으로 웹 페이지의 UI culture와 culture를 자동으로 설정할 수 있습니다.

페이지의 UI culture를 결정할 때 브라우저 설정에만 의존하는 것은 좋지 않습니다. 사용자는 자신의 기본 설정과 다른 옵션으로 설정된 브라우저를 사용하는 경우가 많습니다(예: 인터넷 카페의 경우). 이런 경우에는 사용자가 페이지에 대한 언어 또는 언어와 culture(CultureInfo 이름)를 명시적으로 선택할 수 있는 방법을 제공해야 합니다.

ASP.NET 웹 페이지에 대한 culture 및 UI culture를 선언적으로 설정하려면

  • 모든 페이지에 대한 UI culture 및 culture를 설정하려면 다음 예제와 같이 Web.config 파일에 globalization 섹션을 추가한 다음 uicultureculture 특성을 설정합니다.

    <globalization uiculture="es" culture="es-MX" />
  • 개별 페이지에 대한 UI culture 및 culture를 설정하려면 다음 예제와 같이 @ Page 지시문의 CultureUICulture 특성을 설정합니다.

    <%@ Page UICulture="es" Culture="es-MX" %>
  • ASP.NET에서 UI culture 및 culture를 현재 브라우저 설정에 지정된 첫 번째 언어로 설정하게 하려면 UICultureCultureauto로 설정합니다. 또는 이 값을 auto:culture_info_name으로 설정할 수도 있습니다. 여기서 culture_info_name은 culture 이름입니다. culture 이름 목록을 보려면 CultureInfo를 참조하십시오. 이 값은 @ Page 지시문 또는 Web.config 파일에서 설정할 수 있습니다.

ASP.NET 웹 페이지에 대한 culture 및 UI culture를 프로그래밍 방식으로 설정하려면

  1. 페이지의 InitializeCulture 메서드를 재정의합니다.

  2. 재정의된 메서드에서 페이지에 설정할 언어와 culture를 결정합니다.

    참고

    InitializeCulture 메서드는 페이지 수명 주기에서 페이지에 대해 속성이 설정되거나 컨트롤이 만들어지기 전에 초기 단계에 호출됩니다. 따라서 컨트롤에서 페이지에 전달되는 값을 읽으려면 Form 컬렉션을 사용하여 요청으로부터 직접 값을 가져와야 합니다.

다음 방법 중 하나를 사용하여 UI culture 및 culture를 설정합니다.

  • 페이지의 CultureUICulture 속성을 언어와 culture 문자열(예: en-US)로 설정합니다. 이러한 속성은 페이지 내부용이므로 페이지에서만 사용될 수 있습니다.

  • 현재 스레드의 CurrentUICultureCurrentCulture 속성을 각각 UI culture와 culture로 설정합니다. CurrentUICulture 속성은 언어와 culture 정보 문자열을 사용합니다. CurrentCulture 속성을 설정하려면 CultureInfo 클래스의 인스턴스를 만든 다음 CreateSpecificCulture 메서드를 호출합니다.

다음 코드 예제에서는 사용자가 드롭다운 목록에서 기본 설정 언어를 선택할 수 있는 ASP.NET 웹 페이지를 보여 줍니다. 이 페이지는 스레딩 및 전역화 클래스 작업을 좀 더 편리하게 할 수 있도록 두 개의 네임스페이스를 가져옵니다.

Visual Basic
<%@ Page Language="VB" uiculture="auto" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
  1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">
    Protected Overrides Sub InitializeCulture()
        If Request.Form("ListBox1") IsNot Nothing Then
            Dim selectedLanguage As String = _
                Request.Form("ListBox1")
            UICulture = Request.Form("ListBox1")
            Culture = Request.Form("ListBox1")
            Thread.CurrentThread.CurrentCulture = _
                CultureInfo.CreateSpecificCulture(selectedLanguage)
            Thread.CurrentThread.CurrentUICulture = New _
                CultureInfo(selectedLanguage)
        End If
        MyBase.InitializeCulture()
    End Sub
</script>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListBox ID="ListBox1" runat="server">
            <asp:ListItem Value="en-US" 
                Selected="True">English</asp:ListItem>
            <asp:ListItem Value="es-MX">Español</asp:ListItem>
            <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
        </asp:ListBox><br />
        <asp:Button ID="Button1" runat="server" 
            Text="Set Language" 
            meta:resourcekey="Button1" />
        <br />
        <asp:Label ID="Label1" runat="server" 
            Text="" 
            meta:resourcekey="Label1" />
        </div>
    </form>
</body>
</html>
====================================

C#
<%@ Page Language="C#" uiculture="auto" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>
<script runat="server">
protected override void InitializeCulture()
{
    if (Request.Form["ListBox1"] != null)
    {
        String selectedLanguage = Request.Form["ListBox1"];
        UICulture = selectedLanguage ;
        Culture = selectedLanguage ;

        Thread.CurrentThread.CurrentCulture = 
            CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new 
            CultureInfo(selectedLanguage);
    }
    base.InitializeCulture();
}
</script>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListBox ID="ListBox1" runat="server">
            <asp:ListItem Value="en-US" 
                Selected="True">English</asp:ListItem>
            <asp:ListItem Value="es-MX">Español</asp:ListItem>
            <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
        </asp:ListBox><br />
        <asp:Button ID="Button1" runat="server" 
            Text="Set Language" 
            meta:resourcekey="Button1" />
        <br />
        <asp:Label ID="Label1" runat="server" 
            Text="" 
            meta:resourcekey="Label1" />
        </div>
    </form>
</body>
</html>
Posted by SB패밀리

Culture 이름 및 식별자

culture 이름은 "<languagecode2>-<country/regioncode2>" 형식의 RFC 1766 표준을 따릅니다. 여기서 <languagecode2>는 ISO 639-1에서 유래한 두 문자의 소문자 코드이고, <country/regioncode2>는 ISO 3166에서 유래한 두 문자의 대문자 코드입니다. 예를 들어, 미국 영어는 "en-US"입니다. 두 문자로 된 코드를 사용할 수 없는 경우 ISO 639-2에서 파생된 세 문자 코드가 사용됩니다. 예를 들어, 세 문자로 된 코드 "div"는 디베히어를 사용하는 culture에 사용됩니다. 일부 culture 이름에는 스크립트를 나타내는 접미사가 있습니다. 예를 들어, "-Cyrl"은 키릴 스크립트를 나타내고 "-Latn"은 라틴 스크립트를 나타냅니다.

미리 정의된 다음 culture 이름과 식별자는 System.Globalization 네임스페이스에 있는 이 클래스와 다른 클래스에서 사용됩니다.

Culture 이름

Culture 식별자

언어-국가/지역

""(빈 문자열)

0x007F

고정 culture

af

0x0036

남아공 공용어

af-ZA

0x0436

남아공 공용어 - 남아프리카 공화국

sq

0x001C

알바니아어

sq-AL

0x041C

알바니아어 - 알바니아

ar

0x0001

아랍어

ar-DZ

0x1401

아랍어 - 알제리

ar-BH

0x3C01

아랍어 - 바레인

ar-EG

0x0C01

아랍어 - 이집트

ar-IQ

0x0801

아랍어 - 이라크

ar-JO

0x2C01

아랍어 - 요르단

ar-KW

0x3401

아랍어 - 쿠웨이트

ar-LB

0x3001

아랍어 - 레바논

ar-LY

0x1001

아랍어 - 리비아

ar-MA

0x1801

아랍어 - 모로코

ar-OM

0x2001

아랍어 - 오만

ar-QA

0x4001

아랍어 - 카타르

ar-SA

0x0401

아랍어 - 사우디아라비아

ar-SY

0x2801

아랍어 - 시리아

ar-TN

0x1C01

아랍어 - 튀니지

ar-AE

0x3801

아랍어 - 아랍에미리트

ar-YE

0x2401

아랍어 - 예멘

hy

0x002B

아르메니아어

hy-AM

0x042B

아르메니아어 - 아르메니아

az

0x002C

아제리어

az-AZ-Cyrl

0x082C

아제리어(키릴 자모) - 아제르바이잔

az-AZ-Latn

0x042C

아제리어(라틴 문자) - 아제르바이잔

eu

0x002D

바스크어

eu-ES

0x042D

바스크어 - 바스크

be

0x0023

벨로루시어

be-BY

0x0423

벨로루시어 - 벨로루시

bg

0x0002

불가리아어

bg-BG

0x0402

불가리아어 - 불가리아

ca

0x0003

카탈로니아어

ca-ES

0x0403

카탈로니아어 - 카탈로니아

zh-HK

0x0C04

중국어 - 홍콩 특별 행정구

zh-MO

0x1404

중국어 - 마카오 특별 행정구

zh-CN

0x0804

중국어 - 중국

zh-CHS

0x0004

중국어(간체)

zh-SG

0x1004

중국어 - 싱가포르

zh-TW

0x0404

중국어 - 대만

zh-CHT

0x7C04

중국어(번체)

hr

0x001A

크로아티아어

hr-HR

0x041A

크로아티아어 - 크로아티아

cs

0x0005

체코어

cs-CZ

0x0405

체코어 - 체코

da

0x0006

덴마크어

da-DK

0x0406

덴마크어 - 덴마크

div

0x0065

디베히어

div-MV

0x0465

디베히어 -몰디브

nl

0x0013

네덜란드어

nl-BE

0x0813

네덜란드어 - 벨기에

nl-NL

0x0413

네덜란드어 - 네덜란드

en

0x0009

영어

en-AU

0x0C09

영어 - 오스트레일리아

en-BZ

0x2809

영어 - 벨리즈

en-CA

0x1009

영어 - 캐나다

en-CB

0x2409

영어 - 카리브 해

en-IE

0x1809

영어 - 아일랜드

en-JM

0x2009

영어 - 자메이카

en-NZ

0x1409

영어 - 뉴질랜드

en-PH

0x3409

영어 - 필리핀

en-ZA

0x1C09

영어 - 남아프리카 공화국

en-TT

0x2C09

영어 - 트리니다드 토바고

en-GB

0x0809

영어 - 영국

en-US

0x0409

영어 - 미국

en-ZW

0x3009

영어 - 짐바브웨

et

0x0025

에스토니아어

et-EE

0x0425

에스토니아어 - 에스토니아

fo

0x0038

페로스어

fo-FO

0x0438

페로스어 - 페로 제도

fa

0x0029

페르시아어

fa-IR

0x0429

페르시아어 - 이란

fi

0x000B

핀란드어

fi-FI

0x040B

핀란드어 - 핀란드

fr

0x000C

프랑스어

fr-BE

0x080C

프랑스어 - 벨기에

fr-CA

0x0C0C

프랑스어 - 캐나다

fr-FR

0x040C

프랑스어 - 프랑스

fr-LU

0x140C

프랑스어 - 룩셈브르크

fr-MC

0x180C

프랑스어 - 모나코

fr-CH

0x100C

프랑스어 - 스위스

gl

0x0056

갈리시아어

gl-ES

0x0456

갈리시아어 - 갈리시아

ka

0x0037

그루지야어

ka-GE

0x0437

그루지야어 - 그루지야

de

0x0007

독일어

de-AT

0x0C07

독일어 - 오스트리아

de-DE

0x0407

독일어 - 독일

de-LI

0x1407

독일어 - 리히텐슈타인

de-LU

0x1007

독일어 - 룩셈부르크

de-CH

0x0807

독일어 - 스위스

el

0x0008

그리스어

el-GR

0x0408

그리스어 - 그리스

gu

0x0047

구자라트어

gu-IN

0x0447

구자라트어 - 인도

he

0x000D

히브리어

he-IL

0x040D

히브리어 - 이스라엘

hi

0x0039

힌디어

hi-IN

0x0439

힌디어 - 인도

hu

0x000E

헝가리어

hu-HU

0x040E

헝가리어 - 헝가리

is

0x000F

아이슬란드어

is-IS

0x040F

아이슬란드어 - 아이슬란드

id

0x0021

인도네시아어

id-ID

0x0421

인도네시아어 - 인도네시아

it

0x0010

이탈리아어

it-IT

0x0410

이탈리아어 - 이탈리아

it-CH

0x0810

이탈리아어 - 스위스

ja

0x0011

일본어

ja-JP

0x0411

일본어 - 일본

kn

0x004B

카나다어

kn-IN

0x044B

카나다어 - 인도

kk

0x003F

카자흐어

kk-KZ

0x043F

카자흐어 - 카자흐스탄

kok

0x0057

콘칸어

kok-IN

0x0457

콘칸어 - 인도

ko

0x0012

한국어

ko-KR

0x0412

한국어 - 한국

ky

0x0040

키르기스어

ky-KG

0x0440

키르기스어 - 키르기스스탄

lv

0x0026

라트비아어

lv-LV

0x0426

라트비아어 - 라트비아

lt

0x0027

리투아니아어

lt-LT

0x0427

리투아니아어 - 리투아니아

mk

0x002F

마케도니아어

mk-MK

0x042F

마케도니아어- 마케도니아

ms

0x003E

말레이어

ms-BN

0x083E

말레이어 - 브루나이

ms-MY

0x043E

말레이어 - 말레이시아

mr

0x004E

마라티어

mr-IN

0x044E

마라티어 - 인도

mn

0x0050

몽골어

mn-MN

0x0450

몽골어 - 몽골

no

0x0014

노르웨이어

nb-NO

0x0414

노르웨이어(복말) - 노르웨이

nn-NO

0x0814

노르웨이어(니노르스크) - 노르웨이

pl

0x0015

폴란드어

pl-PL

0x0415

폴란드어 - 폴란드

pt

0x0016

포르투갈어

pt-BR

0x0416

포르투갈어 - 브라질

pt-PT

0x0816

포르투갈어 - 포르투갈

pa

0x0046

펀잡어

pa-IN

0x0446

펀잡어 - 인도

ro

0x0018

루마니아어

ro-RO

0x0418

루마니아어 - 루마니아

ru

0x0019

러시아어

ru-RU

0x0419

러시아어 - 러시아

sa

0x004F

산스크리트어

sa-IN

0x044F

산스크리트어 - 인도

sr-SP-Cyrl

0x0C1A

세르비아어(키릴 자모) - 세르비아

sr-SP-Latn

0x081A

세르비아어(라틴 문자) - 세르비아

sk

0x001B

슬로바키아어

sk-SK

0x041B

슬로바키아어 - 슬로바키아

sl

0x0024

솔로베니아어

sl-SI

0x0424

솔로베니아어 - 솔로베니아

es

0x000A

스페인어

es-AR

0x2C0A

스페인어 - 아르헨티나

es-BO

0x400A

스페인어 - 볼리비아

es-CL

0x340A

스페인어 - 칠레

es-CO

0x240A

스페인어 - 콜롬비아

es-CR

0x140A

스페인어 - 코스타리카

es-DO

0x1C0A

스페인어 - 도미니카 공화국

es-EC

0x300A

스페인어 - 에콰도르

es-SV

0x440A

스페인어 - 엘살바도르

es-GT

0x100A

스페인어 - 과테말라

es-HN

0x480A

스페인어 - 온두라스

es-MX

0x080A

스페인어 - 멕시코

es-NI

0x4C0A

스페인어 - 니카라과

es-PA

0x180A

스페인어 - 파나마

es-PY

0x3C0A

스페인어 - 파라과이

es-PE

0x280A

스페인어 - 페루

es-PR

0x500A

스페인어 - 푸에르토리코

es-ES

0x0C0A

스페인어 - 스페인

es-UY

0x380A

스페인어 - 우루과이

es-VE

0x200A

스페인어 - 베네수엘라

sw

0x0041

스와힐리어

sw-KE

0x0441

스와힐리어 - 케냐

sv

0x001D

스웨덴어

sv-FI

0x081D

스웨덴어 - 핀란드

sv-SE

0x041D

스웨덴어 - 스웨덴

syr

0x005A

시리아어

syr-SY

0x045A

시리아어 - 시리아

ta

0x0049

타밀어

ta-IN

0x0449

타밀어 - 인도

tt

0x0044

타타르어

tt-RU

0x0444

Tatar - Russia

te

0x004A

텔루구어

te-IN

0x044A

텔루구어 - 인도

th

0x001E

태국어

th-TH

0x041E

태국어 - 태국

tr

0x001F

터키어

tr-TR

0x041F

터키어 - 터키

uk

0x0022

우크라이나어

uk-UA

0x0422

우크라이나어 - 우크라이나

ur

0x0020

우르두어

ur-PK

0x0420

우르두어 - 파키스탄

uz

0x0043

우즈베크어

uz-UZ-Cyrl

0x0843

우즈베크어(키릴 자모) - 우즈베키스탄

uz-UZ-Latn

0x0443

우즈베크어(라틴 문자) - 우즈베키스탄

vi

0x002A

베트남어

vi-VN

0x042A

베트남어 - 베트남

고정, 중립 및 특정 culture

일반적으로 culture는 고정 culture, 중립 culture 및 특정 culture로 나누어집니다.

고정 culture는 culture를 구분하지 않으므로, 빈 문자열("")을 사용하여 고정 culture를 이름별로 지정하거나 culture 식별자 0x007F별로 지정할 수 있습니다. InvariantCulture는 고정 culture의 인스턴스를 가져옵니다. 이 인스턴스는 영어만 표시하고 국가/지역은 표시하지 않는 인스턴스로, culture를 필요로 하는 Globalization 네임스페이스의 거의 모든 메서드에 사용될 수 있습니다.

중립 culture는 언어만 표시하고 국가/지역은 표시하지 않는 culture이고, 특정 culture는 언어와 국가/지역을 모두 표시하는 culture입니다. 예를 들어, "fr"는 중립 culture이고 "fr-FR"는 특정 culture입니다. "zh-CHS"(중국어 간체)와 "zh-CHT"(중국어 번체)는 모두 중립 culture입니다.

중립 culture의 CompareInfo 클래스에는 임의의 데이터가 포함되므로 이 클래스의 인스턴스는 만들지 않는 것이 좋습니다. 데이터를 표시하고 정렬하려면 언어와 지역을 모두 지정합니다. 또한 중립 culture에 대해 만든 CompareInfo 개체의 Name 속성은 국가만 반환하고 지역은 포함하지 않습니다.

culture에는 특정 culture의 부모가 중립 culture이고 중립 culture의 부모가 InvariantCulture인 계층이 있습니다. Parent 속성은 특정 culture와 관련된 중립 culture를 반환합니다.

특정 culture의 리소스를 시스템에서 사용할 수 없으면 중립 culture의 리소스가 사용됩니다. 중립 culture의 리소스도 사용할 수 없으면 주 어셈블리에 포함된 리소스가 사용됩니다. 리소스 대체 프로세스에 대한 자세한 내용은 리소스 패키징 및 배포를 참조하십시오.

Windows API의 culture 목록은 .NET Framework의 culture 목록과 약간 다릅니다. 예를 들어, culture 식별자가 0x7C04인 중립 culture zh-CHT "중국어(번체)"는 Windows API에서 사용할 수 없습니다. 예를 들어, 플랫폼 호출 메커니즘 등을 통해 Windows와 상호 운용하려면 운영 체제에 정의된 특정 culture를 사용합니다. 이렇게 하면 동일한 LCID로 식별되는 해당 Windows 로캘과의 일관성이 유지됩니다.

중립 culture가 아닌 불변 culture나 특정 culture에 대해서만 DateTimeFormatInfo 또는 NumberFormatInfo를 만들 수 있습니다.

DateTimeFormatInfo.CalendarTaiwanCalendar이고 Thread.CurrentCulture는 "zh-TW"가 아니면 DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraNameDateTimeFormatInfo.GetAbbreviatedEraName은 빈 문자열("")을 반환합니다.

Windows 로캘

.NET Framework 버전 2.0부터 CultureInfo 생성자는 culture에 해당하는 Windows 로캘을 사용하여 .NET Framework에 없는 culture를 자동으로 생성할 수 있습니다. 자세한 내용은 Windows 로캘에서 생성된 cultures를 참조하십시오.

제어판 재정의

사용자는 제어판의 국가별 설정 옵션을 사용하여 Windows의 현재 culture와 관련된 일부 값을 재정의할 수 있습니다. 예를 들어, 날짜를 다른 형식으로 표시하거나 해당 culture의 기본 통화 단위가 아닌 다른 통화 단위를 사용할 수 있습니다.

UseUserOverridetrue이고 지정된 culture가 Windows의 현재 culture와 일치하면, CultureInfoDateTimeFormat 속성에서 반환하는 DateTimeFormatInfo 인스턴스의 속성 및 NumberFormat 속성에서 반환하는 NumberFormatInfo 인스턴스의 속성에 대한 사용자 설정이 포함된 재정의를 사용합니다. 사용자 설정이 CultureInfo에 연결된 culture와 호환되지 않는 경우(예: 선택한 달력이 OptionalCalendars 중 하나가 아닌 경우) 해당 메서드의 결과와 속성 값은 정의되지 않습니다.

유로화를 사용하는 culture의 경우 .NET Framework와 Windows XP에서는 기본 통화로 유로화가 설정되지만 이전 버전의 Windows에서는 그렇지 않습니다. 따라서 이전 버전의 Windows를 사용하는 경우 제어판의 국가별 옵션이나 국가별 설정을 사용하여 통화 단위를 변경하지 않으면 통화 단위가 잘못될 수도 있습니다. .NET Framework의 기본 통화 설정을 사용하려면 useUserOverride 매개 변수를 취하는 CultureInfo 생성자 오버로드를 사용하고, 해당 매개 변수를 false로 설정합니다.

대체 정렬 순서

"스페인어 - 스페인"의 culture 식별자 "0x0c0a"는 기본 국제 정렬 순서를 사용합니다. 또 다른 "스페인어 - 스페인"의 culture 식별자 "0x040A"는 전통 정렬 순서를 사용합니다. CultureInfo가 "es-ES" culture 이름을 사용하여 생성된 경우 이 새 CultureInfo는 기본 국제 정렬 순서를 사용합니다. 전통 정렬 순서를 사용하는 CultureInfo를 생성하려면 해당 생성자와 함께 culture 식별자 "0x040A"를 사용합니다. 대체 정렬 순서를 따르는 다른 culture에 대한 자세한 내용은 특정 Culture의 데이터 비교 및 정렬을 참조하십시오

Posted by SB패밀리

네임스페이스:  :Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl03',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.aspx">System.Globalization
.NET Framework 클래스 라이브러리
DateTimeFormatInfo 클래스
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DateTimeFormatInfo : ICloneable, 
    IFormatProvider

 

이 클래스에는 날짜 패턴, 시간 패턴 및 AM/PM 지정자와 같은 정보가 들어 있습니다.

특정 문화권에 대한 DateTimeFormatInfo를 만들려면 응용 프로그램에서 해당 문화권에 대한 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl72',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.aspx">CultureInfo를 만든 다음 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl73',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.datetimeformat.aspx">CultureInfo..::.DateTimeFormat 속성을 검색합니다. 현재 스레드의 문화권에 대한 DateTimeFormatInfo를 만들려면 응용 프로그램에서 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl75',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.currentinfo.aspx">CurrentInfo 속성을 사용해야 합니다. 고정 문화권에 대한 DateTimeFormatInfo를 만들려면 응용 프로그램에서 읽기 전용 버전의 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl76',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.invariantinfo.aspx">InvariantInfo 속성 또는 쓰기 가능한 버전의 DateTimeFormatInfo 생성자를 사용합니다. 중립 문화권에 대한 DateTimeFormatInfo를 만들 수 없습니다.

사용자는 제어판의 국가 및 언어 옵션을 통해 Windows의 현재 문화권과 연결된 값의 일부를 재정의할 수 있습니다. 예를 들어, 날짜를 다른 형식으로 표시하거나 해당 문화권의 기본 통화 단위가 아닌 다른 통화 단위를 사용할 수 있습니다. :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl77',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.useuseroverride.aspx">CultureInfo..::.UseUserOverride 속성을 true로 설정한 경우 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl79',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.datetimeformat.aspx">CultureInfo..::.DateTimeFormat 인스턴스, :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl81',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.numberformat.aspx">CultureInfo..::.NumberFormat 인스턴스 및 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl83',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.textinfo.aspx">CultureInfo..::.TextInfo 인스턴스의 속성 또한 사용자 설정에서 검색됩니다. 사용자 설정이 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl85',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.aspx">CultureInfo에 연결된 문화권과 호환되지 않는 경우(예: 선택한 달력이 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl86',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.optionalcalendars.aspx">OptionalCalendars에서 나타내는 달력 중 하나가 아닌 경우) 메서드의 결과와 속성 값은 정의되지 않습니다.

.NET Framework 버전 2.0 이전에서는 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl87',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.cultureinfo.useuseroverride.aspx">CultureInfo..::.UseUserOverride 속성이 true로 설정된 경우 사용자가 재정의할 수 있는 속성에 처음으로 액세스한 경우에만 개체에서 해당 속성을 읽습니다. DateTimeFormatInfo에 사용자가 재정의할 수 있는 속성이 둘 이상 있으므로 "초기화 지연"을 사용하면 응용 프로그램에서 한 속성에 액세스한 다음 사용자가 다른 문화권으로 변경하거나 제어판의 국가 및 언어 옵션을 통해 현재 사용자 문화권의 속성을 재정의한 후 응용 프로그램에서 다른 속성에 액세스할 때 이러한 속성이 일치하지 않게 될 수 있습니다. 예를 들어 이와 같은 순서로 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl89',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.longdatepattern.aspx">LongDatePattern에 액세스한 다음 사용자가 제어판에서 패턴을 변경한 후 다시 액세스하면 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl90',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.shortdatepattern.aspx">ShortDatePattern에 새 설정이 적용됩니다. 사용자가 특정 패턴을 재정의하는 대신 다른 사용자 문화권을 선택하는 경우에도 이와 유사한 불일치가 발생할 수 있습니다.

.NET Framework 버전 2.0 이상에서 DateTimeFormatInfo는 이 "초기화 지연"을 사용하지 않고 생성될 때 사용자가 재정할 수 있는 속성을 모두 읽습니다. 개체 만들기도 사용자 재정의 프로세스도 모두 원자성이 아니고 개체를 만드는 중에 관련 값이 변경될 수 있으므로 여전히 취약한 부분이 있지만 이는 매우 드문 경우입니다.

이 변경 사항은 serialization의 경우에 특히 중요합니다. ..NET Framework 버전 2.0 이상에서는 serialization이 발생되는 시간까지 액세스되는 설정뿐 아니라 재정의 가능한 모든 설정이 유지됩니다.

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl91',this);" href="http://msdn.microsoft.com/ko-kr/library/system.datetime.aspx">DateTime 값의 형식은 DateTimeFormatInfo 속성에 저장된 표준 또는 사용자 지정 패턴을 사용하여 지정됩니다.

응용 프로그램에서는 쓰기 가능한 DateTimeFormatInfo 개체의 관련 속성을 설정하여 표준 패턴을 사용자 지정 패턴으로 대체할 수 있습니다. :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl92',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.isreadonly.aspx">IsReadOnly 개체가 쓰기 가능한지 확인하려면 응용 프로그램에서 DateTimeFormatInfo 속성을 사용해야 합니다.

다음 표에서는 DateTimeFormatInfo 속성과 관련된 표준 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl93',this);" href="http://msdn.microsoft.com/ko-kr/library/system.datetime.aspx">DateTime 형식 패턴을 보여 줍니다. 자세한 내용은 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl94',this);" href="http://msdn.microsoft.com/ko-kr/library/az4se3k1.aspx">표준 날짜 및 시간 형식 문자열을 참조하십시오.

형식 패턴

관련 속성/설명

d

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl95',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.shortdatepattern.aspx">ShortDatePattern

D

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl96',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.longdatepattern.aspx">LongDatePattern

f

전체 날짜 및 시간(자세한 날짜와 간단한 시간)

F

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl97',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.fulldatetimepattern.aspx">FullDateTimePattern(자세한 날짜와 자세한 시간)

g

일반(간단한 날짜와 간단한 시간)

G

일반(간단한 날짜와 자세한 시간)

m, M

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl98',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.monthdaypattern.aspx">MonthDayPattern

o, O

라운드트립 날짜/시간 패턴. 이 형식 패턴을 사용하면 형식 지정 또는 구문 분석 작업을 할 때 항상 고정 문화권이 사용됩니다.

r, R

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl99',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.rfc1123pattern.aspx">RFC1123Pattern. 이 형식 패턴을 사용하면 형식 지정 및 구문 분석 작업을 할 때 항상 고정 문화권이 사용됩니다.

s

지역 시간을 사용한 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl100',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.sortabledatetimepattern.aspx">SortableDateTimePattern(ISO 8601 기반). 이 형식 패턴을 사용하면 형식 지정 또는 구문 분석 작업을 할 때 항상 고정 문화권이 사용됩니다.

t

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl101',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.shorttimepattern.aspx">ShortTimePattern

T

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl102',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.longtimepattern.aspx">LongTimePattern

u

세계 표준시 표시 형식을 사용한 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl103',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.universalsortabledatetimepattern.aspx">UniversalSortableDateTimePattern. 이 형식 패턴을 사용하면 형식 지정 또는 구문 분석 작업을 할 때 항상 고정 문화권이 사용됩니다

U

지역 표준시를 사용한 전체 날짜 및 시간(자세한 날짜와 자세한 시간)

y, Y

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl104',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.yearmonthpattern.aspx">YearMonthPattern

다음 표에서는 사용자 지정 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl105',this);" href="http://msdn.microsoft.com/ko-kr/library/system.datetime.aspx">DateTime 형식 패턴 및 해당 동작을 보여 줍니다. 자세한 내용은 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl106',this);" href="http://msdn.microsoft.com/ko-kr/library/8kb3ddd4.aspx">사용자 지정 날짜 및 시간 형식 문자열을 참조하십시오.

형식 패턴

설명

d, %d

날짜. 한 자리로 된 날짜 앞에는 0이 오지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%d"를 지정합니다.

dd

날짜. 한 자리로 된 날짜 앞에는 0이 옵니다.

ddd

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl107',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.abbreviateddaynames.aspx">AbbreviatedDayNames에 정의된 약식 요일 이름

dddd

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl108',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.daynames.aspx">DayNames에 정의된 자세한 요일 이름

f, %f

한 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%f"를 지정합니다.

ff

두 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다.

fff

세 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다.

ffff

네 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다.

fffff

다섯 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다.

ffffff

여섯 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다.

fffffff

일곱 자리 정밀도에서 초의 소수 부분입니다. 나머지 자릿수는 잘립니다.

F, %F

초의 소수 부분에 대한 최대 유효 자릿수를 표시합니다. 이 자릿수가 0이면 아무 것도 표시되지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%F"를 지정합니다.

FF

초의 소수 부분에 대한 최대 유효 자릿수를 2개로 표시합니다. 그러나 후행 0이나 2개의 0으로 된 숫자는 표시되지 않습니다.

FFF

초의 소수 부분에 대한 최대 유효 자릿수를 3개로 표시합니다. 그러나 후행 0이나 3개의 0으로 된 숫자는 표시되지 않습니다.

FFFF

초의 소수 부분에 대한 최대 유효 자릿수를 4개로 표시합니다. 그러나 후행 0이나 4개의 0으로 된 숫자는 표시되지 않습니다.

FFFFF

초의 소수 부분에 대한 최대 유효 자릿수를 5개로 표시합니다. 그러나 후행 0이나 5개의 0으로 된 숫자는 표시되지 않습니다.

FFFFFF

초의 소수 부분에 대한 최대 유효 자릿수를 6개로 표시합니다. 그러나 후행 0이나 6개의 0으로 된 숫자는 표시되지 않습니다.

FFFFFFF

초의 소수 부분에 대한 최대 유효 자릿수를 7개로 표시합니다. 그러나 후행 0이나 7개의 0으로 된 숫자는 표시되지 않습니다.

gg

서기. 형식이 지정될 날짜에 연관된 서기 문자열이 없는 경우 이 패턴은 무시됩니다.

h, %h

12시간제 시간. 한 자리로 된 시 앞에는 0이 오지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%h"를 지정합니다.

hh

12시간제 시간. 한 자리로 된 시 앞에는 0이 옵니다.

H, %H

24시간제 시간. 한 자리로 된 시 앞에는 0이 오지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%H"를 지정합니다.

HH

24시간제 시간. 한 자리로 된 시 앞에는 0이 옵니다.

K

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl109',this);" href="http://msdn.microsoft.com/ko-kr/library/system.datetime.kind.aspx">Kind 속성의 여러 값(로컬, UTC 또는 지정되지 않음)

m, %m

분. 한 자리로 된 분 앞에는 0이 오지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%m"을 지정합니다.

mm

분. 한 자리로 된 분 앞에는 0이 옵니다.

M, %M

숫자로 표현된 월. 한 자리로 된 달 앞에는 0이 오지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%M"을 지정합니다.

MM

숫자로 표현된 월. 한 자리로 된 달 앞에는 0이 옵니다.

MMM

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl110',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.abbreviatedmonthnames.aspx">AbbreviatedMonthNames에 정의된 약식 월 이름

MMMM

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl111',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.monthnames.aspx">MonthNames에 정의된 자세한 월 이름

s, %s

초. 한 자리로 된 초 앞에는 0이 오지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%s"를 지정합니다.

ss

초. 한 자리로 된 초 앞에는 0이 옵니다.

t, %t

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl112',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.amdesignator.aspx">AMDesignator 또는 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl113',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.pmdesignator.aspx">PMDesignator에 정의된 AM/PM 지정자의 첫 문자입니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%t"를 지정합니다.

tt

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl114',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.amdesignator.aspx">AMDesignator 또는 :Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl115',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.pmdesignator.aspx">PMDesignator에 정의된 AM/PM 지정자입니다. 응용 프로그램에서는 AM과 PM을 구분하는 데 필요한 해당 언어의 이 형식 패턴을 사용해야 합니다. 예를 들어 일본어 AM/PM 지정자의 경우 첫 번째 문자가 아니라 두 번째 문자가 서로 다릅니다.

y, %y

세기 표시 제외 연도. 세기 부분을 제외한 연도가 10보다 작은 경우 연도 앞에 0이 붙지 않습니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%y"를 지정합니다.

yy

세기 표시 제외 연도. 세기 부분을 제외한 연도가 10보다 작은 경우 연도 앞에 0이 붙습니다.

yyy

세 자리 연도. 연도가 100보다 작으면 연도 앞에 0이 붙습니다.

yyyy

세기를 포함한 네 자리 또는 다섯 자리 연도(사용하는 달력에 따라 다름). 네 자리 숫자를 만들기 위해 앞에 0을 채웁니다. 태국 불교식과 한국식 달력에서는 다섯 자리 연도를 사용합니다. 사용자가 "yyyy" 패턴을 선택하면 다섯 자리 숫자를 사용하는 달력에서 앞에 0이 없이 모두 숫자로만 구성된 다섯 자리가 표시됩니다. 예외: 일본식 달력과 대만식 달력에서는 항상 "yy"가 선택된 것처럼 동작합니다.

yyyyy

다섯 자리 연도. 다섯 자리 숫자를 만들기 위해 앞에 0을 채웁니다. 예외: 일본식 달력과 대만식 달력에서는 항상 "yy"가 선택된 것처럼 동작합니다.

yyyyyy

여섯 자리 연도. 여섯 자리 숫자를 만들기 위해 앞에 0을 채웁니다. 예외: 일본식 달력과 대만식 달력에서는 항상 "yy"가 선택된 것처럼 동작합니다. 앞에 0이 더 채워진 보다 긴 "y" 문자열을 사용하여 패턴이 계속될 수 있습니다.

z, %z

시간대 오프셋("+" 또는 "-" 뒤에 시간만 옴)입니다. 한 자리로 된 시 앞에는 0이 오지 않습니다. 예를 들어, 태평양 표준시는 "-8"입니다. 응용 프로그램에서는 형식 패턴이 다른 형식 패턴과 결합되지 않을 경우 "%z"를 지정합니다.

zz

시간대 오프셋("+" 또는 "-" 뒤에 시간만 옴)입니다. 한 자리로 된 시 앞에는 0이 옵니다. 예를 들어, 태평양 표준시는 "-08"입니다.

zzz

자세한 시간대 오프셋("+" 또는 "-" 뒤에 시간과 분이 옴)입니다. 한 자리로 된 시간과 분 앞에는 0이 옵니다. 예를 들어, 태평양 표준시는 "-08:00"입니다.

:

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl116',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.timeseparator.aspx">TimeSeparator에 정의된 기본 시간 구분 문자입니다.

/

:Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl117',this);" href="http://msdn.microsoft.com/ko-kr/library/system.globalization.datetimeformatinfo.dateseparator.aspx">DateSeparator에 정의된 기본 날짜 구분 문자입니다.

% c

여기서 c는 단독으로 사용된 경우의 형식 패턴 문자입니다. "d", "f", "F", "h", "m", "s", "t", "y", "z", "H" 또는 "M" 형식 패턴을 단독으로 사용하려면 응용 프로그램에서 "%d", "%f", "%F", "%h", "%m", "%s", "%t", "%y", "%z", "%H" 또는 "%M"을 지정합니다.

형식 패턴 문자가 리터럴 문자나 다른 형식 패턴 문자와 조합되어 사용될 경우 "%" 문자를 생략할 수 있습니다.

\ c

여기서 c는 임의의 문자입니다. 문자를 그대로 표시합니다. 백슬래시 문자를 표시하려면 "\\"를 사용해야 합니다.

위의 두 번째 표에 나열된 형식 패턴을 사용해야만 사용자 지정 패턴을 만들 수 있으며, 첫 번째 표에 나열된 표준 형식 패턴을 사용하면 표준 패턴만 만들 수 있습니다. 사용자 지정 패턴은 다음처럼 최소한 두 문자 길이입니다.

 

  • DateTime.ToString("d"):Track('ctl00_rs1_mainContentContainer_cpe283257_c|ctl00_rs1_mainContentContainer_ctl118',this);" href="http://msdn.microsoft.com/ko-kr/library/system.datetime.aspx">DateTime 값을 반환합니다. "d"는 간단한 표준 날짜 패턴입니다.

  • DateTime.ToString("%d")는 일을 반환합니다. "%d"는 사용자 지정 패턴입니다.

  • DateTime.ToString("d ")는 일과 그 다음에 공백 문자를 반환합니다. "d "는 사용자 지정 패턴입니다.

  •  

     

    다음 코드 예제에서는 en-US 문화권에 대해 서로 다른 형식 패턴을 출력합니다. 또한 해당 형식 패턴과 관련된 속성 값을 표시합니다.

     

     

     

    using System;
    using System.Globalization;


    public class SamplesDTFI  {

       public static void Main()  {

          // Creates and initializes a DateTimeFormatInfo associated with the en-US culture.
          DateTimeFormatInfo myDTFI = new CultureInfo( "en-US", false ).DateTimeFormat;

          // Creates a DateTime with the Gregorian date January 3, 2002 (year=2002, month=1, day=3).
          // The Gregorian calendar is the default calendar for the en-US culture.
          DateTime myDT = new DateTime( 2002, 1, 3 );

          // Displays the format pattern associated with each format character.
          Console.WriteLine( "FORMAT  en-US EXAMPLE" );
          Console.WriteLine( "CHAR    VALUE OF ASSOCIATED PROPERTY, IF ANY\n" );
          Console.WriteLine( "  d     {0}", myDT.ToString("d", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.ShortDatePattern, "(ShortDatePattern)" );
          Console.WriteLine( "  D     {0}", myDT.ToString("D", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.LongDatePattern, "(LongDatePattern)" );
          Console.WriteLine( "  f     {0}\n", myDT.ToString("f", myDTFI) );
          Console.WriteLine( "  F     {0}", myDT.ToString("F", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.FullDateTimePattern, "(FullDateTimePattern)" );
          Console.WriteLine( "  g     {0}\n", myDT.ToString("g", myDTFI) );
          Console.WriteLine( "  G     {0}\n", myDT.ToString("G", myDTFI) );
          Console.WriteLine( "  m     {0}", myDT.ToString("m", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.MonthDayPattern, "(MonthDayPattern)" );
          Console.WriteLine( "  M     {0}", myDT.ToString("M", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.MonthDayPattern, "(MonthDayPattern)" );
          Console.WriteLine( "  o     {0}\n", myDT.ToString("o", myDTFI) );
          Console.WriteLine( "  r     {0}", myDT.ToString("r", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.RFC1123Pattern, "(RFC1123Pattern)" );
          Console.WriteLine( "  R     {0}", myDT.ToString("R", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.RFC1123Pattern, "(RFC1123Pattern)" );
          Console.WriteLine( "  s     {0}", myDT.ToString("s", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.SortableDateTimePattern, "(SortableDateTimePattern)" );
          Console.WriteLine( "  t     {0}", myDT.ToString("t", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.ShortTimePattern, "(ShortTimePattern)" );
          Console.WriteLine( "  T     {0}", myDT.ToString("T", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.LongTimePattern, "(LongTimePattern)" );
          Console.WriteLine( "  u     {0}", myDT.ToString("u", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.UniversalSortableDateTimePattern, "(UniversalSortableDateTimePattern)" );
          Console.WriteLine( "  U     {0}\n", myDT.ToString("U", myDTFI) );
          Console.WriteLine( "  y     {0}", myDT.ToString("y", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.YearMonthPattern, "(YearMonthPattern)" );
          Console.WriteLine( "  Y     {0}", myDT.ToString("Y", myDTFI) );
          Console.WriteLine( "        {0} {1}\n", myDTFI.YearMonthPattern, "(YearMonthPattern)" );

       }

    }

    /*
    This code produces the following output.

    FORMAT  en-US EXAMPLE
    CHAR    VALUE OF ASSOCIATED PROPERTY, IF ANY

      d     1/3/2002
            M/d/yyyy (ShortDatePattern)

      D     Thursday, January 03, 2002
            dddd, MMMM dd, yyyy (LongDatePattern)

      f     Thursday, January 03, 2002 12:00 AM

      F     Thursday, January 03, 2002 12:00:00 AM
            dddd, MMMM dd, yyyy h:mm:ss tt (FullDateTimePattern)

      g     1/3/2002 12:00 AM

      G     1/3/2002 12:00:00 AM

      m     January 03
            MMMM dd (MonthDayPattern)

      M     January 03
            MMMM dd (MonthDayPattern)

      o     2002-01-03T00:00:00.0000000

      r     Thu, 03 Jan 2002 00:00:00 GMT
            ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (RFC1123Pattern)

      R     Thu, 03 Jan 2002 00:00:00 GMT
            ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (RFC1123Pattern)

      s     2002-01-03T00:00:00
            yyyy'-'MM'-'dd'T'HH':'mm':'ss (SortableDateTimePattern)

      t     12:00 AM
            h:mm tt (ShortTimePattern)

      T     12:00:00 AM
            h:mm:ss tt (LongTimePattern)

      u     2002-01-03 00:00:00Z
            yyyy'-'MM'-'dd HH':'mm':'ss'Z' (UniversalSortableDateTimePattern)

      U     Thursday, January 03, 2002 8:00:00 AM

      y     January, 2002
            MMMM, yyyy (YearMonthPattern)

      Y     January, 2002
            MMMM, yyyy (YearMonthPattern)

    */



    출처 : MSDN
    Posted by SB패밀리