다음을 통해 공유


날짜/시간/숫자 형식 세계화

날짜, 시간, 숫자, 전화번호, 통화의 형식을 적절하게 지정하여, 앱을 글로벌하게 준비할 수 있도록 디자인합니다. 그런 다음 나중에 글로벌 시장에서 추가 문화권, 지역 및 언어에 맞게 앱을 조정할 수 있습니다.

소개

앱을 만들 때 단일 언어 및 문화보다 더 광범위하게 생각한다면 앱이 새로운 시장으로 성장할 때 예기치 않은 문제가 더 적어질 수 있습니다. 예를 들어 날짜, 시간, 숫자, 달력, 통화, 전화 번호, 측정 단위 및 용지 크기는 모두 다양한 문화권 또는 언어에서 다르게 표시될 수 있는 항목입니다.

다른 지역 및 문화권은 서로 다른 날짜 및 시간 형식을 사용합니다. 여기에는 날짜에서의 일과 월의 순서, 시간과 분의 구분 방식, 그리고 구분 기호로 사용되는 문장 부호에 대한 규약이 포함됩니다. 또한 날짜는 다양한 긴 형식("2012년 3월 28일 수요일") 또는 문화권에 따라 달라지는 짧은 형식("3/28/12")으로 표시될 수 있습니다. 물론 요일과 월의 이름과 약어는 언어마다 다릅니다.

다른 언어에 사용되는 형식을 미리 볼 수 있습니다. 설정>시간 및 언어>지역 및 언어로 이동하고 추가 날짜, 시간 및 국가별 설정>변경 날짜, 시간 또는 숫자 형식을 클릭합니다. 서식 탭의 서식 드롭다운에서 언어를 선택하고 예제의 서식을 미리 봅니다.

이 항목에서는 "사용자 프로필 언어 목록", "앱 매니페스트 언어 목록" 및 "앱 런타임 언어 목록"이라는 용어를 사용합니다. 해당 용어의 의미와 해당 값에 액세스하는 방법에 대한 자세한 내용은 사용자 프로필 언어 및 앱 매니페스트 언어 이해를 참조하세요.

앱 런타임 언어 목록의 날짜 및 시간 서식 지정

사용자가 날짜를 선택하거나 시간을 선택할 수 있도록 허용해야 하는 경우 표준 달력, 날짜 및 시간 컨트롤을 사용하십시오. 앱 런타임 언어 목록에 가장 적합한 날짜 및 시간 형식을 자동으로 사용합니다.

날짜 또는 시간을 직접 표시해야 하는 경우 DateTimeFormatter 클래스를 사용할 수 있습니다. 기본적으로 DateTimeFormatter 는 앱 런타임 언어 목록에 가장 적합한 날짜 및 시간 형식을 자동으로 사용합니다. 따라서 아래 코드는 해당 리스트에 가장 알맞게 DateTime 서식을 지정합니다. 예를 들어 앱 매니페스트 언어 목록에는 기본값인 영어(미국) 및 독일어(독일)가 포함되어 있다고 가정합니다. 현재 날짜가 2017년 11월 6일이고 사용자 프로필 언어 목록에 독일어(독일)가 먼저 포함된 경우 포맷터는 "06.11.2017"을 제공합니다. 사용자 프로필 언어 목록에 영어(미국)가 먼저 포함되어 있거나 영어나 독일어가 없는 경우 포맷터는 "11/6/2017"("en-US"이 일치하거나 기본값으로 사용됨)을 제공합니다.

    // Use the DateTimeFormatter class to display dates and times using basic formatters.

    var shortDateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shortdate");
    var shortTimeFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shorttime");

    var dateTimeToFormat = DateTime.Now;

    var shortDate = shortDateFormatter.Format(dateTimeToFormat);
    var shortTime = shortTimeFormatter.Format(dateTimeToFormat);

    var results = "Short Date: " + shortDate + "\n" +
                  "Short Time: " + shortTime;

다음과 같이 사용자 고유의 PC에서 위의 코드를 테스트할 수 있습니다.

  • 프로젝트에 "en-US" 및 "de-DE" 모두에 대해 정규화된 리소스 파일이 있는지 확인합니다(언어, 규모, 고대비 및 기타 한정자맞게 리소스 조정 참조).
  • 설정>시간 및 언어>지역 및 언어>언어에서 사용자 프로필의 언어 목록을 변경합니다. 독일어(독일)를 추가하고, 기본값으로 지정하고, 코드를 다시 실행합니다.

사용자 프로필 언어 목록의 날짜 및 시간 서식 지정

기본적으로 DateTimeFormatter 는 앱 런타임 언어 목록과 일치합니다. 이렇게 하면 "날짜는 <날짜>"과 같은 문자열을 표시하게 되는데, 이때 언어가 날짜 형식과 일치하게 됩니다.

어떤 이유로든 사용자 프로필 언어 목록에 따라 날짜 및/또는 시간만 서식을 지정하려는 경우 아래 예제와 같은 코드를 사용하여 서식을 지정할 수 있습니다. 그러나 이렇게 하면 사용자가 앱에 번역된 문자열이 없는 언어를 선택할 수 있음을 이해합니다. 예를 들어 앱이 독일어(독일)로 지역화되지 않았지만 사용자가 선호하는 언어로 선택하면 "날짜가 06.11.2017"과 같이 이상하게 보이는 문자열이 표시될 수 있습니다.

    // Use the DateTimeFormatter class to display dates and times using basic formatters.

    var userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

    var shortDateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shortdate", userLanguages);

    var results = "Short Date: " + shortDateFormatter.Format(DateTime.Now);

숫자 및 통화 서식을 적절하게 지정

다른 문화권은 숫자의 서식을 다르게 지정합니다. 서식 차이에는 표시할 소수 자릿수, 소수 구분 기호로 사용할 문자 및 사용할 통화 기호가 포함될 수 있습니다. NumberFormatting 네임스페이스의 클래스를 사용하여 10진수, 백분율 또는 permille 숫자 및 통화를 표시합니다. 대부분의 경우 이러한 포맷터 클래스에서 사용자 프로필에 가장 적합한 형식을 사용하려고 합니다. 그러나 포맷터를 사용하여 모든 지역 또는 형식에 대한 통화를 표시할 수 있습니다.

이 예제에서는 사용자 프로필 및 지정된 특정 통화 시스템에 대한 통화를 표시하는 방법을 보여 주었습니다.

    // This scenario uses the CurrencyFormatter class to format a number as a currency.

    var userCurrency = Windows.System.UserProfile.GlobalizationPreferences.Currencies[0];

    var valueToBeFormatted = 12345.67;

    var userCurrencyFormatter = new Windows.Globalization.NumberFormatting.CurrencyFormatter(userCurrency);
    var userCurrencyValue = userCurrencyFormatter.Format(valueToBeFormatted);

    // Create a formatter initialized to a specific currency,
    // in this case US Dollar (specified as an ISO 4217 code) 
    // but with the default number formatting for the current user.
    var currencyFormatUSD = new Windows.Globalization.NumberFormatting.CurrencyFormatter("USD");
    var currencyValueUSD = currencyFormatUSD.Format(valueToBeFormatted);

    // Create a formatter initialized to a specific currency.
    // In this case it's the Euro with the default number formatting for France.
    var currencyFormatEuroFR = new Windows.Globalization.NumberFormatting.CurrencyFormatter("EUR", new[] { "fr-FR" }, "FR");
    var currencyValueEuroFR = currencyFormatEuroFR.Format(valueToBeFormatted);

    // Results for display.
    var results = "Fixed number (" + valueToBeFormatted + ")\n" +
                    "With user's default currency: " + userCurrencyValue + "\n" +
                    "Formatted US Dollar: " + currencyValueUSD + "\n" +
                    "Formatted Euro (fr-FR defaults): " + currencyValueEuroFR;

설정>시간 및 언어>> 국가 또는 지역에서 국가 또는 지역을 변경하여 사용자 고유의 PC에서 위의 코드를 테스트할 수있습니다. 국가 또는 지역(아마도 아이슬란드)을 선택하고 코드를 다시 실행합니다.

문화적으로 적절한 일정 사용

일정은 지역 및 언어에 따라 다릅니다. 그레고리오력은 모든 지역의 기본값이 아닙니다. 일부 지역의 사용자는 일본 시대 달력 또는 아랍어 음력과 같은 대체 달력을 선택할 수 있습니다. 일정의 날짜 및 시간도 서로 다른 표준 시간대 및 일광 절약 시간에 민감합니다.

기본 달력 형식을 보장하려면, 표준 달력, 날짜 및 시간 컨트롤을 사용할 수 있습니다. 일정 날짜에 대한 작업을 직접 수행해야 하는 더 복잡한 시나리오의 경우 Windows.Globalization 은 지정된 문화권, 지역 및 일정 유형에 적절한 일정 표현을 제공하는 Calendar 클래스를 제공합니다.

전화 번호를 적절하게 서식 지정

전화 번호는 지역 간에 다르게 서식이 지정됩니다. 숫자 수, 숫자 그룹화 방법 및 전화 번호의 특정 부분의 중요성은 국가/지역마다 다릅니다. Windows 10 버전 1607부터 PhoneNumberFormatting 네임스페이스의 클래스를 사용하여 현재 지역에 맞게 전화 번호의 서식을 지정할 수 있습니다.

PhoneNumberInfo 는 숫자 문자열을 구문 분석하여 현재 지역의 유효한 전화 번호인지 여부를 확인할 수 있습니다. 두 숫자를 같음으로 비교합니다. 및 전화 번호의 다양한 기능 부분(예: 국가 코드 또는 지리적 지역 코드)을 추출합니다.

PhoneNumberFormatter는 숫자 문자열 또는 PhoneNumberInfo를 디스플레이용으로 서식화하며, 이 숫자 문자열이 부분 전화번호를 나타내는 경우에도 가능합니다. 이 부분 숫자 서식을 사용하여 사용자가 숫자를 입력할 때 숫자의 서식을 지정할 수 있습니다.

아래 예제에서는 PhoneNumberFormatter를 사용하여 전화 번호를 입력하는 동안 서식을 지정하는 방법을 보여줍니다. TextBox인 phoneNumberInputTextBox에서 텍스트가 변경될 때마다, 텍스트 상자의 내용이 현재 기본 영역을 사용하여 서식이 지정되고 나서, TextBlock인 phoneNumberOutputTextBlock에 표시됩니다. 데모를 위해 문자열은 뉴질랜드 지역을 사용하여 서식이 지정되고, phoneNumberOutputTextBlockNZ라는 TextBlock에 표시됩니다.

    using Windows.Globalization.PhoneNumberFormatting;

    PhoneNumberFormatter currentFormatter, NZFormatter;

    public MainPage()
    {
        this.InitializeComponent();

        // Use the default formatter for the current region
        this.currentFormatter = new PhoneNumberFormatter();

        // Create an explicit formatter for New Zealand. 
        PhoneNumberFormatter.TryCreate("NZ", out this.NZFormatter);
    }

    private void phoneNumberInputTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        // Format for the default region.
        this.phoneNumberOutputTextBlock.Text = currentFormatter.FormatPartialString(this.phoneNumberInputTextBox.Text);

        // If the NZFormatter was created successfully, format the partial string for the NZ TextBlock.
        if(this.NZFormatter != null)
        {
            this.phoneNumberOutputTextBlockNZ.Text = this.NZFormatter.FormatPartialString(this.phoneNumberInputTextBox.Text);
        }
    }

설정>시간 및 언어>> 국가 또는 지역에서 국가 또는 지역을 변경하여 사용자 고유의 PC에서 위의 코드를 테스트할 수있습니다. 국가 또는 지역(형식이 일치하는지 확인하기 위해 뉴질랜드)을 선택하고 코드를 다시 실행합니다. 테스트 데이터의 경우 뉴질랜드에서 비즈니스의 전화 번호에 대한 웹 검색을 수행할 수 있습니다.

사용자의 언어 및 문화적 선호

사용자의 언어, 지역 또는 문화권 기본 설정에 따라 다른 기능을 제공하려는 시나리오의 경우 Windows는 Windows.System.UserProfile.GlobalizationPreferences를 통해 이러한 기본 설정에 액세스할 수 있는 방법을 제공합니다. 필요한 경우 GlobalizationPreferences 클래스를 사용하여 사용자의 현재 지리적 지역, 기본 설정 언어, 기본 설정 통화 등의 값을 가져옵니다. 그러나 앱의 문자열/이미지가 사용자의 기본 설정 언어에 맞게 지역화되지 않은 경우 날짜와 시간 및 해당 기본 설정 언어로 형식이 지정된 기타 데이터가 표시되는 문자열과 일치하지 않습니다.

중요 API

샘플