日付、時刻、数値の形式のグローバル化Globalize your date/time/number formats

日付、時刻、数値、電話番号、通貨を適切に書式設定することで、グローバル対応のアプリを設計します。Design your app to be global-ready by appropriately formatting dates, times, numbers, phone numbers, and currencies. これを行うと、後でアプリを世界市場の他のカルチャ、地域、言語に適応させることができます。You'll then be able later to adapt your app for additional cultures, regions, and languages in the global market.

概要Introduction

アプリを作成するときに、1 つの言語とカルチャに限定せずに広範に考えると、アプリが新しい市場に参入するときに予期しない問題があったとしても少なくなります。When creating your app, if you think more broadly than a single language and culture then you'll have fewer (if any) unexpected issues when your app grows into new markets. たとえば、日付、時刻、数値、カレンダー、通貨、電話番号、計測単位、紙のサイズは、すべてカルチャや言語によって表示が異なる場合があります。For example, dates, times, numbers, calendars, currency, telephone numbers, units of measurement, and paper sizes are all items that can be displayed differently in different cultures or languages.

さまざまな地域やカルチャで、さまざまな日付と時刻の形式が使われています。Different regions and cultures use different date and time formats. 例として、日付の月と日の順、時刻の時と分との分離、セパレーターとして使われる句読点に関する規則があります。These include conventions for the order of day and month in the date, for the separation of hours and minutes in the time, and even for what punctuation is used as a separator. また、日付にはさまざまな表示形式があり、長い形式 ("Wednesday, March 28, 2012") や短い形式 ("3/28/12") など、カルチャによってその表示形式が異なります。In addition, dates may be displayed in various long formats ("Wednesday, March 28, 2012") or short formats ("3/28/12"), which vary across cultures. 当然ですが、曜日や月の名称と省略形は言語間で異なります。And, of course, the names and abbreviations for the days of the week and months of the year differ between languages.

さまざまな言語で使用される形式をプレビューすることができます。You can preview the formats used for different languages. [設定] > [時刻と言語] > [地域と言語] に移動し、[日付、時刻、地域の追加設定] > [日付、時刻、または数値の形式の変更] の順にクリックします。Go to Settings > Time & Language > Region & language, and click Additional date, time, & regional settings > Change date, time, or number formats. [形式] タブで、[表示形式] ドロップダウンから言語を選択し、[例] で形式をプレビューします。On the Formats tab, select a language from the Format drop-down and preview the formats in Examples.

このトピックでは、"ユーザー プロファイルの言語の一覧"、"アプリ マニフェストの言語の一覧"、"アプリの実行時の言語の一覧" という用語を定義します。This topic uses the terms "user profile language list", "app manifest language list", and "app runtime language list". これらの用語の正確な意味とその値にアクセスする方法の詳細については、「ユーザー プロファイルの言語とアプリ マニフェストの言語について」を参照してください。For details on exactly what those terms mean and how to access their values, see Understand user profile languages and app manifest languages.

アプリの実行時の言語の一覧の日付と時刻の書式設定Format dates and times for the app runtime language list

ユーザーが日付や時刻を選択できるようにする必要がある場合には、標準のカレンダー、日付、および時刻コントロールを使います。If you need to allow users to choose a date, or to select a time, then use the standard calendar, date, and time controls. これらのコントロールでは、アプリの実行時の言語の一覧に最適な日付と時刻の書式設定を自動的に使います。These automatically use the best date and time format for the app runtime language list.

日付や時刻を独自に表示する必要がある場合は、DateTimeFormatter クラスを使用できます。If you need to display dates or times yourself then you can use the DateTimeFormatter class. 既定では、DateTimeFormatter は、アプリの実行時の言語の一覧については最適な日付と時刻の形式を自動的に使います。By default, DateTimeFormatter automatically uses the best date and time format for the app runtime language list. そのため、次のコードでは、その一覧について最適な方法で特定の DateTime を書式設定します。So, the code below formats a given DateTime in the best way for that list. たとえば、アプリ マニフェストの言語の一覧には、既定である英語 (米国) とドイツ語 (ドイツ) が含まれると想定します。As an example, assume that your app manifest language list includes English (United States), which is also your default, and German (Germany). 現在の日付が 2017 年 11 月 6日で、ユーザー プロファイルの言語の一覧にドイツ語 (ドイツ) が最初に含まれている場合、フォーマッタでは "06.11.2017" を生成します。If the current date is Nov 6 2017 and the user profile language list contains German (Germany) first, then the formatter gives "06.11.2017". ユーザー プロファイルの言語の一覧に英語 (米国) が最初に含まれる (または英語とドイツ語のどちらも含まれない) 場合、("en-US" が一致するか、既定で使用されるため) フォーマッタでは "11/6/2017" を生成します。If the user profile language list contains English (United States) first (or if it contains neither English nor German), then the formatter gives "11/6/2017" (since "en-US" matches, or is used as the default).

    // 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 でテストできます。You can test the code above on your own PC like this.

ユーザー プロファイルの言語の一覧の日付と時刻の書式設定Format dates and times for the user profile language list

既定では、DateTimeFormatter がアプリの実行時の言語の一覧に一致することに注意してください。Remember that, by default, DateTimeFormatter matches the app runtime language list. それにより、"日付は <date> です" という文字列を表示する場合に、言語が日付形式に一致します。That way, if you display strings such as "The date is <date>", then the language will match the date format.

何らかの理由でユーザー プロファイルの言語の一覧のみに従って日付または時刻を書式設定する場合は、下の例のようなコードを使って行うことができます。If for whatever reason you want to format dates and/or times only according to the user profile language list, then you can do that using code like the example below. ただし、その場合は、アプリに翻訳された文字列がない言語をユーザーが選択できる点を理解してください。But if you do so then understand that the user can choose a language for which your app doesn't have translated strings. たとえば、アプリがドイツ語 (ドイツ) にローカライズされていないが、ユーザーがドイツ語 (ドイツ) を優先する言語として選択する場合、"日付は 06.11.2017 です" のような間違いなく変わった外観の文字列が表示される可能性があります。For example, if your app is not localized into German (Germany), but the user chooses that as their preferred language, then that could result in the display of arguably odd-looking strings such as "The date is 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);

数字と通貨を適切に書式設定するFormat numbers and currencies appropriately

数字の書式設定はカルチャによって異なります。Different cultures format numbers differently. 数字の書式設定が異なるものには、表示する小数の桁数、小数点記号に使う文字、通貨記号などがあります。Format differences may include how many decimal digits to display, what characters to use as decimal separators, and what currency symbol to use. NumberFormatting 名前空間のクラスを使って、小数、パーセントまたはパーミル数値、通貨を表示します。Use classes in the NumberFormatting namespace to display decimal, percent, or permille numbers, and currencies. 多くの場合、これらのフォーマッタ クラスでユーザー プロファイル用の最適な形式を使う必要があります。Most of the time, you will want these formatter classes to use the best format for the user profile. ただし、フォーマッタを使って任意の地域または形式の通貨を表示できます。But you may use the formatters to display a currency for any region or format.

この例では、ユーザー プロファイルに従った通貨、および特定の通貨制度に対応した通貨を表示する方法を示しています。This example shows how to display currencies both per the user profile, and for a specific given currency system.

    // 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 で上のコードをテストできます。You can test the code above on your own PC by changing the country or region in Settings > Time & Language > Region & language > Country or region. 国または地域 (アイスランドなど) を選択し、もう一度コードを実行します。Choose a country or region (perhaps Iceland), and run the code again.

カルチャに適したカレンダーを使用するUse a culturally appropriate calendar

カレンダーは地域や言語によって異なります。The calendar differs across regions and languages. グレゴリオ暦がすべての地域で既定となっているわけではありません。The Gregorian calendar is not the default for every region. ある地域のユーザーは、日本の年号、アラビアの太陰暦など別のカレンダーを選ぶ場合があります。Users in some regions may choose alternate calendars, such as the Japanese era calendar, or Arabic lunar calendars. カレンダーの日付や時刻も、さまざまなタイム ゾーンや夏時間に影響されます。Dates and times on the calendar are also sensitive to different time zones and daylight-saving time.

必要なカレンダー形式が使用されていることを確認するために、標準のカレンダー、日付、および時刻コントロールを使うことができます。To ensure that the preferred calendar format is used, you can use the standard calendar, date, and time controls. カレンダーの日付を直接操作することが必要な、さらに複雑なシナリオの場合、特定のカルチャ、地域、カレンダーの種類を表す適切なカレンダーを提供する Calendar クラスが Windows.Globalization によって提供されています。For more complex scenarios, where working directly with operations on calendar dates may be required, Windows.Globalization provides a Calendar class that gives an appropriate calendar representation for the given culture, region, and calendar type.

電話番号を適切に書式設定するFormat phone numbers appropriately

電話番号の書式設定は地域によって異なります。Phone numbers are formatted differently across regions. 電話番号の桁数、桁のグループ化、および特定部分の重要性は、国によって異なります。The number of digits, how the digits are grouped, and the significance of certain parts of the phone number vary between countries. Windows 10 Version 1607 以降では、PhoneNumberFormatting 名前空間のクラスを使って、電話番号を現在の地域に適した書式に設定できます。Starting in Windows 10, version 1607, you can use classes in the PhoneNumberFormatting namespace to format phone numbers appropriately for the current region.

PhoneNumberInfo 桁の文字列を解析し、することができます数字が現在のリージョンで有効な電話番号であるかどうかを確認; は、等価性と、電話のさまざまな機能の部分を抽出する 2 つの数値の比較。国コードや地理的領域のコードなどの数。PhoneNumberInfo parses a string of digits and allows you to: determine whether the digits are a valid phone number in the current region; compare two numbers for equality; and to extract the different functional parts of the phone number, such as country code or geographical area code.

PhoneNumberFormatter 形式の数字の文字列またはPhoneNumberInfo数字の文字列が、部分的な電話番号を表す場合にも、表示のためです。PhoneNumberFormatter formats a string of digits or a PhoneNumberInfo for display, even when the string of digits represents a partial phone number. この部分的な番号の書式設定を使って、ユーザーの番号入力に合わせて番号を書式設定できます。You can use this partial number formatting to format a number as a user is entering the number.

次の例では、入力されている電話番号を PhoneNumberFormatter を使って書式設定する方法を示します。The example below shows how to use PhoneNumberFormatter to format a phone number as it is being entered. phoneNumberInputTextBox という名前の TextBox のテキストが変わるたびに、現在の既定の地域を使ってテキスト ボックスの内容が書式設定されて、phoneNumberOutputTextBlock という名前の TextBlock に表示されます。Each time text changes in a TextBox named phoneNumberInputTextBox, the contents of the text box are formatted using the current default region and displayed in a TextBlock named phoneNumberOutputTextBlock. デモンストレーション用として、文字列は地域としてニュージーランドを使って書式設定され、phoneNumberOutputTextBlockNZ という名前の TextBlock にも表示されます。For demonstration purposes, the string is also formatted using the region for New Zealand, and displayed in a TextBlock named phoneNumberOutputTextBlockNZ.

    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 で上のコードをテストできます。You can test the code above on your own PC by changing the country or region in Settings > Time & Language > Region & language > Country or region. 国または地域 (形式が一致することを確認するために、ニュージーランドなど) を選択し、もう一度コードを実行します。Choose a country or region (perhaps New Zealand to confirm that the formats match), and run the code again. テスト データでは、ニュージーランドの企業の電話番号を Web 検索することができます。For test data, you can do a web search for the phone number of a business in New Zealand.

ユーザーの言語とカルチャの設定The user's language and cultural preferences

ユーザーの言語、地域、カルチャの設定のみに基づいてさまざまな機能を提供するシナリオでは、Windows.System.UserProfile.GlobalizationPreferences を使ってそれらの設定にアクセスするための方法が、Windows によって提供されます。For scenarios where you wish to provide different functionality based solely on the user's language, region, or cultural preferences, Windows gives you a way to access those preferences, through Windows.System.UserProfile.GlobalizationPreferences. 必要に応じて、GlobalizationPreferences クラスを使って、ユーザーの現在の地理的な地域、優先する言語や通貨などの値を取得します。When needed, use the GlobalizationPreferences class to get the value of the user's current geographic region, preferred languages, preferred currencies, and so on. ただし、アプリの文字列/イメージが、ユーザーの優先する言語にローカライズされていない場合、優先する言語に合わせて書式設定された日付と時刻などのデータが、表示する文字列と一致しないことに注意してください。But remember that if your app's strings/images aren't localized for the user's preferred language then dates and times and other data formatted for that preferred language won't match the strings that you display.

重要な APIImportant APIs

サンプルSamples