WPFローカライゼーション拡張の概要と例

WPFローカライゼーション拡張の概要と例

WPFローカライゼーションは、アプリケーションリソースをそのアプリケーションがサポートする特定の地域向けのローカライズ版に変換することです。

最終更新 2021/04/05 22:34
沙漠尽头的狼
読了目安 5 分
カテゴリ
WPF
タグ
.NET WPF ローカライゼーション

WPF ローカリゼーションの概要

WPF ローカリゼーションとは、アプリケーションのリソースを特定のカルチャ向けに変換し、ローカライズされたバージョンを作成することです。適切な情報を得るために、データを適切な言語に変換する必要があります。

WPF ローカリゼーションの目的は何ですか?

  • アプリケーションを開発し、そのアプリケーションが1つの言語のみで利用可能な場合、多くのユーザーがそのアプリケーションを使用できないため、顧客ベースとビジネス規模が制限されます。
  • 顧客ベースとビジネスを拡大したい場合、製品が利用可能であり、適切な言語のシンプルな情報を通じてグローバルな視聴者にアクセスできるようにする必要があります。コスト効率の高い製品ローカリゼーションは、より多くの顧客と連絡を取り、アプリケーションに参加してもらうための最良かつ最も経済的な方法の1つです。
  • ご存知の通り、この世界には非常に多くの人々と多くの言語が存在します。このような状況において、WPF ローカリゼーションは顕著な影響を与えます。
  • 人々は、プロジェクト内の有用な情報と優れた機能が、何の障壁もなく利用できることを望んでいるからです。
  • 適切なユーザー言語に関するすべての情報を提供できます。

WPF ローカリゼーションにはどのような種類がありますか?

WPF には2種類の WPF ローカリゼーションがあります。

  1. 静的 WPF ローカリゼーション
  2. 動的 WPF ローカリゼーション

静的 WPF ローカリゼーション

  • 静的 WPF ローカリゼーションは、静的なデータを別の言語に変換するのに非常に便利です。
  • 静的なプロジェクトに有用で、別の言語に翻訳する必要のあるすべての情報として定義できます。多くの人がインターネットを利用して情報を得ているため、これは他国の居住者にとって、情報を簡単に取得できるという点で有用です。

動的 WPF ローカリゼーション

  • 動的なデータに対する動的 WPF ローカリゼーションです。
  • このタイプのローカリゼーションは、データを動的フォーマットで取得するのに非常に便利です。
  • 動的フォーマットでは取得すべき情報が多すぎるため、ユーザーのニーズに応じて別の言語に簡単に翻訳できます。したがって、これらの機能は重要な役割を果たします。
  • 動的 WPF ローカリゼーションは、リソースディクショナリファイルを利用してデータを取得し、ある言語から別の言語に翻訳します。

リソースディクショナリファイルの例

コード

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
</ResourceDictionary>

名前空間を追加してリソースディクショナリを使用します。

名前空間

xmlns:sys="clr-namespace:System;assembly=mscorlib"

リソースディクショナリファイルのデータを以下のコードのように追加します。

コード

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
  <sys:String x:Key="ResourceDictionaryName">Loc-en-US</sys:String>
  <sys:String x:Key="WindowTitle">Dynamic Localization in WPF</sys:String>
  <sys:String x:Key="FirstNameLabel">First Name</sys:String>
  <sys:String x:Key="LastNameLabel">Last Name</sys:String>
</ResourceDictionary>

プロジェクトで WPF ローカリゼーションを使用する方法

ステップ 1

WPF ローカリゼーション用の新しいプロジェクトを作成します。

ステップ 2

次に、最新バージョンの WPF ローカリゼーション拡張パッケージ WPFLocalizeExtension をインストールします。

WPFローカリゼーション拡張パッケージ: WPFLocalizeExtension

ステップ 3

リソースファイルを追加します。

リソースファイルの追加

インストール後、リソースファイルを追加し(上図参照)、Resources.resx ファイルを開きます。

新しく追加されたリソースファイル:

新しく追加されたリソースファイル

ステップ 4

アクセス修飾子を public に変更する必要があります。これで、メインページで追加したリソースを使用できます(つまり、リソースファイルのプロパティを右クリックし、カスタムツールを PublicResXFileCodeGenerator に変更します。そうしないと、プログラム実行時にエラーが発生します)。

ステップ 5

resources.resx ファイルでユーザーのデザインを確認できます。

ステップ 6

新しいファイルを作成するには、次の手順に従います。

"プロジェクト名を右クリック → 追加ボタンをクリック → 新しい項目をクリック → Visual C# プロジェクトをクリック → リソースファイルを検索 → ファイル名を定義します。"

注意

ただし、ファイル名は Resources.fr-FR.resx や Resources.gr-GR のように宣言します。

ファイル名: 以下の Resources.resx ファイル

Resources.resx

ファイル名: 以下の Resources.fr-FR.resx ファイル

Resources.fr-FR.resx

ステップ 7

次に、以下の名前空間を使用して、MainWindow.xaml ファイルにそのファイルを追加します。

"xmlns:CC="clr-namespace:WpfApp1Localization.Properties"

ステップ 8

次に、App.xaml.cs ファイルを使用してリソースファイルを呼び出します。つまり、プロジェクトの起動時にローカル言語を読み取り、言語を切り替えます。

コード

namespace WpfApp1Localization {
    public partial class App: Application {
        App() {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("gr-GR");
            //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
        }
    }
}

ステップ 9

プロジェクトのすべてのファイルを保存し、プロジェクトを実行します。

ステップ 10

WPF ローカリゼーションで静的 WPF ローカリゼーションを使用してプロジェクトを出力します。

出力

静的WPFローカリゼーションの出力

WPF ローカリゼーションのサンプルプロジェクト

  • まず、新しいプロジェクトを作成します。プロジェクト名は WPFLocalizationDemo です。
  • 次に、Resources.en.resx と Resources.gr-GR.resx の2つのファイルを作成します。
  • 2つのファイルにデータフィールドを追加します。

Resources.en.resx

Resources.en.resx

Resources.gr-Gr.resx

Resources.gr-Gr.resx

リソースファイル内のテーブルデータの説明

ボタン1 – 送信テキストは送信されます。

ボタン2 – ユーザー登録。

ボタン3 – ログインフォームのデータをキャンセルまたはリセットします。

ラベル1 – ログインフォームのタイトルとプロンプト。

ラベル2 – ユーザー名入力用のラベルプロンプト。

ラベル3 – パスワード入力用のラベルプロンプト。

  • 以下の XAML ファイルで、名前空間を追加してリソースファイルを追加します。

コード

<Window
  x:Class="WpfApp1Localization.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:local="clr-namespace:WpfApp1Localization"
  xmlns:CC="clr-namespace:WpfApp1Localization.Properties"
  mc:Ignorable="d"
  Title="{x:Static CC:Resources.Log_In}"
  Height="450"
  Width="800"
  Background="Chocolate"
>
  <Grid>
    <TextBox
      HorizontalAlignment="Left"
      Height="23"
      FontSize="12"
      Margin="412,152,0,0"
      TextWrapping="Wrap"
      VerticalAlignment="Top"
      Width="120"
    />
    <TextBox
      HorizontalAlignment="Left"
      Height="23"
      FontSize="12"
      Margin="412,233,0,0"
      TextWrapping="Wrap"
      VerticalAlignment="Top"
      Width="120"
    />
    <label
      x:Name="label1"
      Content="{x:Static CC:Resources.Log_In}"
      HorizontalAlignment="Left"
      FontSize="18"
      Margin="338,72,0,0"
      VerticalAlignment="Top"
      RenderTransformOrigin="0.526,2.491"
    />
    <label
      x:Name="label2"
      Content="{x:Static CC:Resources.User_Name}"
      HorizontalAlignment="Left"
      FontSize="12"
      Margin="245,152,0,0"
      VerticalAlignment="Top"
    />
    <label
      x:Name="label3"
      Content="{x:Static CC:Resources.Password}"
      HorizontalAlignment="Left"
      FontSize="12"
      Margin="245,233,0,0"
      VerticalAlignment="Top"
    />
    <button
      x:Name="button1"
      Content="{x:Static CC:Resources.Submit}"
      HorizontalAlignment="Left"
      Margin="338,330,0,0"
      VerticalAlignment="Top"
      Width="75"
    />
    <button
      x:Name="Button2"
      Content="{x:Static CC:Resources.Registration}"
      HorizontalAlignment="Left"
      Margin="245,340,0,0"
      VerticalAlignment="Top"
      Width="75"
    />
    <button
      x:Name="Button3"
      Content="{x:Static CC:Resources.Cancel}"
      HorizontalAlignment="Left"
      Margin="532,335,0,0"
      VerticalAlignment="Top"
      Width="75"
    />
  </Grid>
</Window>

app.xaml.cs ファイルを使用してリソースファイルを呼び出します。

コード

namespace WpfApp1Localization {
    public partial class App: Application {
        App() {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("gr-GR");
            //System.Threading.Thread.CurrentThread.CurrentUICulture =
            new System.Globalization.CultureInfo("en");
        }
    }
}

プログラムまたはプロジェクトの出力

出力デザインに関しては、以下のようになります。

英語のログインフォーム:

英語のログインフォーム

ドイツ語のログインフォーム:

ドイツ語のログインフォーム

結論

このブログでは、WPF ローカリゼーション、その重要性、種類、そして実際の動作について学びました。これは WPF の概要を理解するための主要な概念の1つであり、アプリケーションが言語の壁の問題を解決するのに役立ちます。

原文リンク:https://www.c-sharpcorner.com/blogs/an-overview-of-wpf-localization-extension-with-an-example

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/09/13

WPF から Avalonia への移行シリーズ:なぜ WPF プログラムを Avalonia に移行しなければならないのか

過去数年間、当社の上位機ソフトウェアは主に WPF と WinForm で開発されてきました。これらの技術は Windows プラットフォームで非常に便利であり、小規模試作から現在の規模拡大による納品まで、私たちを支えてきました。しかし、ビジネスの発展や顧客ニーズの変化に伴い、単一の Windows テクノロジースタックは私たちが必ず乗り越えなければならない壁となってきました。

続きを読む
同じカテゴリ / 同じタグ 2025/01/26

WPF カスタムXMLファイルによる国際化

この記事では、WPFプログラムでカスタムXMLファイルを使用して国際化を実現する方法について詳しく説明します。必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードおよびXAMLインターフェースでの翻訳文字列の使用などを含み、ソースコードのリンクも提供し、開発者がWPFアプリケーションの国際化を簡単に実装できるように支援します。

続きを読む