📝

C# Windows Formアプリで多言語対応する

2024/12/19に公開

事前調査

方法は以下2つがあるようです。

  • Resource.resx ファイルを言語ごとに用意するパターン

  • Form のresx ファイルを言語ごとに用意するパターン

Resource.resx ファイルを言語ごとに用意するパターン

参考

https://www.osadasoft.com/c-windows-formアプリの多言語対応/

概要

Thread.CurrentThread.CurrentUICultureを対応したい言語に変更する
言語ごとにResource.resxファイルを分け、Resources.<言語コード>.resx と命名する

例)
Resources.resx(デフォルト、言語コードなし)
Resources.en.resx(英語)
Resources.ja.resx(日本語)

メリット

  • すべてのローカライズ文字列を一箇所に集められるため、管理が容易
  • 複数のフォームやクラスで同じリソースを再利用可能

デメリット

  • リソースが多すぎるとファイルが膨大になり、整理が困難

フォームに共通するメッセージやテキストに使用するのがいいのかも

Form のresxファイルを言語ごとに用意するパターン

参考

http://kaitei.net/csforms/localization/

概要

Thread.CurrentThread.CurrentUICultureを対応したい言語に変更する
各フォームに対応する .resx ファイルを作成し、ローカライズを管理する
言語ごとにファイルを分け、Form1.<言語コード>.resx と命名する

メリット

  • 各フォームごとにリソースを分割できるため、大規模なアプリでも管理しやすい

デメリット

  • 他のフォームで使いまわせない
  • form自体を切り替えるので対象のformが生成される前にThread.CurrentThread.CurrentUICultureの値を変更する必要がある

UIのローカライズに特化したやり方のようです

Discussion