ユーザー プロファイルの言語とアプリ マニフェストの言語について

Windows ユーザーは、[設定]>[時刻と言語]>[地域と言語] の順に移動して、優先される表示言語の順序指定された一覧を構成するか、または優先される 1 つの表示言語を構成できます。 言語には地域バリアントを指定できます。 たとえば、スペインで話すスペイン語、メキシコで話すスペイン語、米国で話すスペイン語などを選択できます。

また、[設定]>[時刻と言語]>[地域と言語] では、言語とは別に世界中の場所 (地域と呼ばれます) を指定できます。 表示言語 (および地域バリアント) の設定は、リージョン設定の決定者ではなく、その逆も同様であることに注意してください。 たとえば、ユーザーは現在フランスに住んでいるが、優先する Windows 表示言語として Español (México)を選択している可能性があります。

Windows アプリの場合、言語は BCP-47 言語タグとして表示されます。 たとえば、BCP-47 言語タグ「en-US」は、設定の英語 (米国) に対応します。 適切な Windows ランタイム API は、BCP-47 言語タグの文字列表現を受け入れて返します。

IANA 言語サブ タグ レジストリも参照してください。

次の 3 つのセクションでは、「ユーザー プロファイル言語リスト」、「アプリ マニフェスト言語リスト」、および「アプリ ランタイム言語リスト」という用語を定義します。 これらの用語は、この機能領域のこのトピックおよびその他のトピックで使用しますので、意味を把握しておくことが重要です。

ユーザー プロファイルの言語一覧

ユーザー プロファイルの言語の一覧は、[設定]>[時刻と言語]>[地域と言語]>[言語] でユーザーによって構成された一覧の名前です。 コードでは、GlobalizationPreferences.Languages プロパティを使用して、文字列の読み取り専用リストとしてユーザー プロファイル言語リストにアクセスできます。各文字列は、「en-US」や「ja-JP」などの単一の BCP-47 言語タグです。

    IReadOnlyList<string> userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

アプリ マニフェスト言語の一覧

アプリ マニフェスト言語の一覧は、アプリがサポートを宣言 (または宣言) する言語の一覧です。 このリストは、アプリの開発ライフサイクルを経てローカライズに至るまで成長するにつれて増えます。

リストはコンパイル時に決定されますが、その方法を正確に制御するための 2 つのオプションがあります。 1 つのオプションは、Visual Studio でプロジェクト内のファイルからリストを決定できるようにすることです。 これを行うには、まずアプリ パッケージ マニフェスト ソース ファイルの [アプリケーション] タブでアプリのデフォルト言語を設定します (Package.appxmanifest)。 次に、同じファイルにこの構成が含まれていることを確認します (この構成はデフォルトで行われる)。

  <Resources>
    <Resource Language="x-generate" />
  </Resources>

Visual Studio によってビルドされたアプリ パッケージ マニフェスト ファイル (AppxManifest.xml) が生成されるたびに、ソース ファイル内のその 1 つのResource要素が、プロジェクト内で見つかるすべての言語修飾子の和集合に拡張されます (「言語、スケール、ハイ コントラスト、およびその他の修飾子に合わせてリソースを調整する」を参照してください)。 たとえば、ローカライズを開始し、フォルダー名またはファイル名に「en-US」、「ja-JP」、「fr-FR」が含まれる文字列、画像、ファイル リソースがある場合、ビルドされた AppxManifest.xml ファイルには次のものが含まれます (リストの最初のエントリは、設定したデフォルトの言語)。

  <Resources>
    <Resource Language="EN-US" />
    <Resource Language="JA-JP" />
    <Resource Language="FR-FR" />
  </Resources>

もう 1 つのオプションは、アプリ パッケージ マニフェスト ソース ファイル (Package.appxmanifest) 内の 1 つの「x-generate」<Resource> 要素を展開された<Resource>要素の一覧に置き換えます (最初にデフォルトの言語を一覧表示するように注意してください)。 このオプションには、より多くのメインテナント作業が含まれますが、カスタム ビルド システムを使用する場合は適切なオプションである可能性があります。

まず、アプリ マニフェスト言語の一覧に含まれる言語は 1 つだけです。 おそらくそれは en-US です。 ただし、最終的にマニフェストを手動で構成するか、または翻訳済みのリソースをプロジェクトに追加すると、リストは大きくなります。

アプリが Microsoft Store にある場合、アプリ マニフェスト言語の一覧の言語は、お客様に表示される言語です。 Microsoft Store で特別にサポートされている BCP-47 言語タグのリストについては、「サポートされている言語」を参照してください。

コードでは、 ApplicationLanguages.ManifestLanguagesプロパティを使用して、アプリ マニフェスト言語リストに文字列の読み取り専用リストとしてアクセスできます。各文字列は単一の BCP-47 言語タグです。

    IReadOnlyList<string> userLanguages = Windows.Globalization.ApplicationLanguages.ManifestLanguages;

アプリ ランタイム言語の一覧

3 番目の言語リストは、先ほど説明した 2 つのリストの共通部分です。 実行時に、アプリがサポートを宣言した言語の一覧(アプリ マニフェスト言語リスト)が、ユーザーが基本設定を宣言した言語の一覧(ユーザー プロファイル言語リスト)と比較されます。 アプリのランタイム言語の一覧は、この交差部分 (交差部分が空でない場合) またはアプリのデフォルトの言語 (交差部分が空の場合) に設定されます。

具体的には、アプリ ランタイム言語の一覧は、これらの項目で構成されます。

  1. (省略可能)プライマリ言語のオーバーライドPrimaryLanguageOverride は、ユーザーが独自の言語を選択できるようにするアプリ、またはデフォルトの言語の選択をオーバーライドする強い理由があるアプリの単純なオーバーライド設定です。 詳細については、アプリケーション リソースとローカライズのサンプルを参照してください。
  2. アプリでサポートされているユーザーの言語。 これは、アプリ マニフェスト言語リストでフィルター処理されたユーザー プロファイル言語リストです。 アプリでサポートされている言語でユーザーの言語をフィルター処理メインソフトウェア開発キット (SDK)、クラス ライブラリ、依存フレームワーク パッケージ、アプリ間の整合性が維持されます。
  3. 1 と 2 が空の場合、アプリでサポートされるデフォルトの言語または最初の言語。 アプリがサポートする言語がユーザー プロファイル言語リストに含まれていない場合、アプリのランタイム言語はアプリでサポートされている最初の言語になります。

コードでは、ResourceContext.QualifierValues プロパティを使用して、BCP-47 言語タグのセミコロン区切りリストを含む文字列の形式でアプリ ランタイム言語リストにアクセスできます。

    string runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues["Language"];

また、1 つの BCP-47 言語タグを含む文字列の読み取り専用リストとしてアクセスすることもできます。 これを行うには、ResourceContext.Languages プロパティまたは ApplicationLanguages.Languages プロパティを使用できます。

    IReadOnlyList<string> runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Languages;

    runtimeLanguages = Windows.Globalization.ApplicationLanguages.Languages;

アプリランタイム言語の一覧は、Windows がアプリに読み込むリソースと、日付、時刻、数値、およびその他のコンポーネントの書式設定に使用される言語を決定します。 「日付、時刻、数値の形式のグローバル化」を参照してください。

 ユーザー プロファイル言語とアプリ マニフェスト言語が互いの地域バリアントである場合、ユーザーの地域バリアントがアプリランタイム言語として使用されます。 たとえば、ユーザーが en-GB を優先し、アプリが en-US をサポートしている場合、アプリのランタイム言語は en-GB になります。 これにより、日付、時刻、および数値はユーザーの期待値 (en-GB) により近い形式になりますが、ローカライズされたリソースは (言語照合により) アプリのサポートされている言語 (en-US) に読み込まれます。

言語でリソース ファイルを修飾する

言語リソース修飾子を使用して、リソース ファイルまたはそのフォルダーに名前を付けます。 詳細については、「言語、スケール、ハイ コントラスト、その他の修飾子用にリソースを調整する」を参照してください。 リソース ファイルにはイメージ (またはその他のアセット) を指定できます。また、リソース コンテナー ファイル (テキスト文字列を含む .resw など) を指定することもできます。

アプリのデフォルトの言語のリソースであっても、言語修飾子を指定する必要があります。 たとえば、アプリのデフォルトの言語が英語 (米国) である場合、アセットを \Assets\Images\en-US\logo.png のように修飾する必要があります。

  • Windows では地域バリアント間の場合 (en-US および en-GB など) も含む複雑な対応付けを行います。 そのため、必要に応じて地域のサブタグを含めます。 リソース管理システムが言語タグを照合する方法を参照してください。
  • 言語に Suppress-Script 値が定義されていない場合は、修飾子に言語スクリプトのサブタグを指定します。 たとえば、zh-CN や zh-TW ではなく、zh-Hant、zh-Hant-TW、zh-Hans を使用します (詳細については、「IANA language subtag registry」を参照してください)。
  • 標準語が 1 つだけの言語では、地域修飾子を追加する必要はありません。 たとえば、ja-JP ではなく ja を使用します。
  • 一部のツールやその他のコンポーネント (機械翻訳ツールなど) では、地域の方言情報など、特定の言語タグがデータの理解に役立つ場合があります。

すべてのリソースをローカライズする必要はない

すべてのリソースでローカライズが必要とは限りません。

  • 少なくとも、デフォルトの言語ですべてのリソースが存在することを確認してください。
  • 関係が深い言語の場合は、一部のリソースだけで十分かもしれません (部分的なローカライズ)。 たとえば、アプリにスペイン語のリソースの完全なセットがある場合、アプリのすべての UI をカタロニア語にローカライズできない可能性があります。 カタルニア語を話し、スペイン語も話すユーザーの場合、カタルニア語で利用できないリソースはスペイン語で表示されます。
  • 一部のリソースは例外として特定の言語が必要で、それ以外の大部分のリソースは共通のリソースに対応付けることができるかもしれません。 この場合、すべての言語で使用するリソースには未定義の言語タグ 'und' を付けます。 Windows では 'und' 言語タグはワイルドカード ('\*' と同様) として解釈され、特定の言語への対応付けの後で、最上位のアプリの言語に対応付けられます。 たとえば、いくつかのリソースがフィンランド語で異なるが、残りのリソースがすべての言語で同じである場合、フィンランド語のリソースはフィンランド語タグでマークし、残りは「und」でマークする必要があります。
  • 言語スクリプトに基づくリソースの場合 (テキストのフォントや高さなど)、'und-<script>' のように、指定されたスクリプトと共に未定義の言語タグを使います。 たとえば、ラテン語フォントの場合は und-Latn\\fonts.css を使用し、キリル文字フォントの場合は und-Cryl\\fonts.css を使用します。 B

HTTP Accept-Language リクエストヘッダーを設定する

呼び出す Web サービスのローカリゼーションの範囲がアプリと同じかどうかを検討します。 通常の Web 要求で Windows アプリが行う HTTP 要求と、XMLHttpRequest (XHR) では、標準の HTTP Accept-Language 要求ヘッダーを使用します。 デフォルトでは、HTTP ヘッダーはユーザー プロファイル言語リストに設定されます。 リスト内の各言語は、言語のニュートラルと重み付け (q) を含むようにさらに拡張されます。 たとえば、fr-FR と en-US のユーザーの言語リストでは、fr-FR、fr、en-US、en (「fr-FR,fr、q=0.8,en-US、q=0.5,en、q=0.3」)。 ただし、天気アプリ (たとえば) がフランス語 (フランス) で UI を表示しているが、ユーザーの優先リストのユーザーの最上位言語がドイツ語である場合は、アプリ内で一貫性をメインするために、サービスにフランス語 (フランス) を明示的に要求する必要があります。

Windows.Globalization 名前空間の API

通常、Windows.Globalization名前空間のAPI は、アプリ ランタイム言語の一覧を使用して言語を決定します。 どの言語にも一致する形式がない場合は、ユーザーロケールが使用されます。 これは、システム クロックに使用されるのと同じロケールです。 ユーザー ロケールは、[設定]>[時刻と言語]>[地域と言語]>[日付、時刻 地域の追加設定]>[地域:日付、時刻、または数値の形式の変更] で確認できます。 Windows.Globalization API には、アプリランタイム言語リストではなく、使用する言語の一覧を指定するためのオーバーライドもあります。

Languageクラスを使用すると、言語のスクリプト、表示名、ネイティブ名など、特定の言語に関する詳細を調べることができます。

必要に応じて地理的リージョンを使用する

[設定]>[時刻と言語]>[地域と言語]>[国/地域]で、自分の地域として世界中の場所を指定できます。 この設定は、言語ではなく、ユーザーに表示するコンテンツを選択するために使用できます。 たとえば、ニュース アプリでは、デフォルトでこのリージョンのコンテンツが表示される場合があります。

コードでは、GlobalizationPreferences.HomeGeographicRegion プロパティを使用してこの設定にアクセスできます。

GeographRegion クラスを使用すると、表示名、ネイティブ名、使用中の通貨など、特定のリージョンに関する詳細を調べることができます。

次の表に、さまざまな言語とリージョンの設定でアプリの UI にユーザーが表示する内容の例を示します。

アプリ マニフェスト言語の一覧 ユーザー プロファイルの言語一覧 アプリのプライマリ言語のオーバーライド (省略可能) アプリ ランタイム言語の一覧 アプリでユーザーに表示される内容
英語 (GB) (デフォルト値)、ドイツ語 (ドイツ) 英語 (英国) なし 英語 (英国) 英語 (en-GB)
日付/時刻/数値:英語 (GB)
ドイツ語 (ドイツ) (デフォルト)、フランス語 (フランス)、イタリア語 (イタリア) フランス語 (オーストリア) なし フランス語 (オーストリア) UI:フランス語 (フランス) (フランス語 (オーストリア) からのフォールバック)
日付/時刻/数値:フランス語 (オーストリア)
英語 (米国) (デフォルト)、フランス語 (フランス)、英語 (GB) 英語 (カナダ)、フランス語 (カナダ) なし 英語 (カナダ)、フランス語 (カナダ) UI:英語 (米国) (英語 (カナダ) からのフォールバック)
日付/時刻/数値:英語 (カナダ)
スペイン語 (スペイン) (デフォルト)、スペイン語 (メキシコ)、スペイン語 (ラテン アメリカ)、ポルトガル語 (ブラジル) 英語 (米国) なし スペイン語 (スペイン) UI:スペイン語 (スペイン) (英語で利用できるフォールバックがないため、デフォルト値を使用)
日付/時刻/数字 スペイン語 (スペイン)
カタロニア語 (デフォルト値)、スペイン語 (スペイン)、フランス語 (フランス) カタロニア語、フランス語 (フランス) なし カタロニア語、フランス語 (フランス) UI:ほとんどのカタロニア語と一部のフランス語(フランス)は、すべての文字列がカタロニア語にあるわけではないので
日付/時刻/数値:カタロニア語
英語 (GB) (デフォルト値)、フランス語 (フランス)、ドイツ語 (ドイツ) ドイツ語 (ドイツ)、英語 (GB) 英語 (GB) (アプリの UI でユーザーが選択) 英語 (GB)、ドイツ語 (ドイツ) UI:英語 (GB) (言語のオーバーライド)
日付/時刻/数値 英語 (GB)

Note

Microsoft が使用する標準の国/地域コードの一覧については、公式の国/地域の一覧を参照してください。

重要な API

サンプル