0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BlazorWebAppでリソースファイル(.resx)を参照する方法

Last updated at Posted at 2024-09-21

概要

「メッセージは定数クラスではなくリソースファイル(.resx)ファイルで管理して」という依頼があったので、調査してみた。

リソースファイル(.resx)って、本来は多言語対応するために使用するらしい。

プロジェクトの構成

プロジェクトテンプレート:Blazor Web App
フレームワーク:.NET 8.0
Interactive render mode:Auto
Interactivity location:Per page/component

※本記事では@rendermode InteractiveServerを指定した画面で検証を行った。

手順

①Microsoft.Extensions.Localizationをインストール

②Program.csに下記を追加

builder.Services.AddLocalization();

③プロジェクト直下にResourcesフォルダを追加

④Resourcesフォルダを右クリックしてSharedResources.resxを追加

image.png

⑤SharedResources.resxを右クリックして、「ファイルを開くアプリケーションの選択」

⑥管理対象リソースエディタ(レガシ)を選択→OK ※初回のみ、このエディタを使用

⑦アクセス修飾子をpublicに変更(重要)

※SharedResources.Designer.csが作成される
※ErrorMessageResourceNameからアクセス可能となる

image.png

⑧SharedResources.resxをダブルクリック(リソースエクスプローラーが開く)

⑨SharedResources.resxを編集する

名前:Greeting ※リソースのキー
ニュートラル値:Hello World ※リソースの値

⑩_Imports.razor.csに下記を記載

@using Microsoft.Extensions.Localization
@using AzRefArc.AspNetBlazorUnited.Resources

⑪razorファイルからresxを参照

@inject IStringLocalizer<SharedResources> Loc ※SharedResourcesはSharedResources.Designer.cs内に定義されたクラス

@Loc["Greeting"]

⑫アノテーションからresxを参照

@using プロジェクトのルート名前空間.Resources;

[Required(ErrorMessageResourceName = "Greeting", ErrorMessageResourceType = typeof(SharedResources))]

⑬リソースキーの定数化

下記のようにリソースのキーを定数化すると保守しやすそう。
リソースファイルを扱ってる記事をいくつか読んだ感じ、リソースのキーを定数化については何も言及されてなかった。自分の感覚では定数化するべきかなと思う。リファクタリングしやすいし、タイピングミスが起こらないし。

public static class ResourceKeys
{
    public const string RequiredError = "RequiredError";
}

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?