LoginSignup
16
7

More than 3 years have passed since last update.

ASP.NET MVC ベリーシンプル多言語対応【2019 アドカレ】

Last updated at Posted at 2019-12-10

概要

ASP.NET MVC で多言語対応をこころみてみます。多言語対応だけシンプルにこころみます。

(2020-03-07)アップグレード版を書きました。

ベリーシンプル多言語対応

  1. 各言語リソースファイル作成
  2. http リクエストの Accept-Language に応じて言語を切り替えるよう設定

これだけやります。

今回やることを図にして整理

図にするとこうですね。

1.png

解説していきます。

今回使うプロジェクト

今回使うプロジェクトは次のように New しました。

  • ASP.NET Web Application (.NET Framework)
  • .NET Framework 4.7.2
  • MVC
  • Authentication: No Authentication

各言語リソースファイル作成

リソースファイルは拡張子 resx のファイルですね。多言語対応のためのリソースファイルは xxxx.[culture name].resx という名称でつくります。デフォルトの言語リソースと、多言語のリソースは同じ階層に並べましょう。リソースファイルのアクセス修飾子は忘れず Public にします。

  • Localize.resx: デフォルトで使うもの
  • Localize.ja.resx: ja カルチャで使うもの
  • Localize.en.resx: en カルチャで使うもの

場所は?

場所はどこでもよさそうです。私は Resource/I18n/Foo/Localize.resx みたいなフォルダ階層をつくって置きます。 I18n は internationalization の略です。

カルチャ?

カルチャというのは、 http リクエストヘッダ Accept-Language の値のことみたいです。サイトの閲覧者さんが、何語を求めているかということですね。

resx なくない?

ないですね。

1.png

ないときもあるみたいです。そういうときはリストにとらわれず resx の拡張子を手打ちしてファイルを作成すれば OK です。(えぇー?!
あるいはすでにある resx ファイルをどこかから見つけてきて、 Add Existing Item から追加することもできます。

1.png

リソースに書いたテキストを使うには?

String1 というテキストを用意したなら……

2.png

こういうふうに呼び出します。

Views/Home/Index.cshtml
@MyApp.Resources.I18n.Foo.Localize.String1

実はこの時点で CurrentUICulture の値に応じた言語スイッチが可能になっています。 CurrentUICulture というのは System.Threading.Thread.CurrentThread.CurrentUICulture のことで、上述したカルチャの情報を設定する項目みたいですね。値を en-GB とかにすると Localize.en.resx の String1 が呼び出されます。

Controllers/HomeController.cs
// CurrentUICulture の変更。
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-GB");

プログラム内で言語を切り替えるだけでよいのならここでおしまいです。

Accept-Language に応じた言語切り替え

トップディレクトリの Web.config の system.web タグ内に <globalization culture="auto" uiCulture="auto" /> を記述します。

Web.config
<system.web>
  <compilation debug="true" targetFramework="4.7.2" />
  <httpRuntime targetFramework="4.7.2" />
  <globalization culture="auto" uiCulture="auto" />  <!-- 追加 -->
</system.web>

リクエスト・ヘッダの Accept-Language に応じて、自動で CurrentUICulture が変わるようになります。ということはつまり、 Accept-Language に応じて言語が切り替わるようになるってことですね。

Accept-Language はどう変更する?

  • Chrome: メニュー > 設定 > 詳細設定 > 言語
  • Firefox: メニュー > オプション > 言語

毎回ブラウザの再起動が必要になってしまうので、ふたつ開いてそれぞれでアクセスして確認するとラクでした。

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7