5

を使用するIViewLocalizer編集、追加、削除などの複数のページに表示される単語やフレーズのデフォルトまたはフォールバックリソースファイルを使用してビューのローカリゼーションを実装したいと思います。これらの反復的なフレーズを、表示されるすべてのビューのリソースファイルに追加したいので、フォールバックのrecourceファイルが本当に便利になるでしょうが、それを行う方法に関する解決策を見つけることができないようです。ビューのフォールバックリソースファイルを設定する方法

現在、私は私の意見で@inject IViewLocalizer Localizerを使用していると私は、リソースファイルから@Localizer["ResourceName"]でローカライズされたフレーズを取得しています:

リソース/ビュー/ {コントローラ名}/{ビュー名} {langCode}。。 resx

これは、それぞれ別々のビューと部分的なビューでうまく機能します。今度は、代替リソースファイルとして機能するResources/ViewsまたはResourcesフォルダにリソースファイルを格納したいと考えています。私は私のすべてのビューでこれを使用できるように

だから例えば、私は私の意見の一つと「編集」リソース上@Localizer["Edit"]Resources/Views/{ControllerName}/{ViewName}.{langCode}.resxまたはResources/Views/{ControllerName}/{ViewName}.resxで発見されていないと言うならば、それは戻って、このデフォルトのファイルへ落下しますリソース "編集"が必要です。

私はすでにResources/Resource.{langCode}.resxで試してみましたが、効果がないようです。

+0

これは良い質問です。この質問をGitHub –

+0

のaspnet/MVCリポジトリに投稿してみてください。これまでの.NETフレームワーク/スタックのデフォルトの動作では、リソースファイルにカルチャがない、つまりResource.resxがありました。また、適切なロケールがない場合、 '@Localizer [" string "]'に置かれた文字列が返されることに注意してください。これは公式のサンプルiircでも使われます:意味:メッセージ文字列の代わりに、デフォルト@Localizer ["これはデフォルトのロケール文字列"] 'であり、これをロケールでオーバーライドします。例:https://github.com/aspnet/Localization/blob/dev/samples/LocalizationSample/Startupcs#L74 – Tseng

+0

私はキーとしてデフォルトの文字列を使用することについて知っていますが、それは繰り返しフレーズをローカライズするのに役立ちません!それはまさに私がしたくないことです。私は、特定のビューのロケールでそのフレーズをオーバーライドしたくないのは、私の意見の大部分でそれが繰り返されるからです。私は、敬虔なフレーズが出てくるすべてのビューのデフォルトのリソースファイルが必要なので、あなたが言及したResource.resxに興味があります。私は、各lanaguageのデフォルトのresource.resxが欲しいです。 –

答えて

0

ローカリゼーションを開始したときも同様の問題がありました。あなたのサイトに繰り返しフレーズや言葉がたくさんある場合は、それらをSharedResourceファイルに入れるのが最善です。

SharedResource.[LANG_CODE].resxファイルをResourcesフォルダに作成します。次に、SharedResourceという名前のダミークラスを作成し、それをプロジェクト名前空間のルートに配置する必要があります。だからあなたのプロジェクトがLocalizationTest呼び出された場合、クラスはそのようになります:

namespace LocalizationTest 
{ 
    public class SharedResource 
    { 
    } 
} 

を次に、あなたがあなたのモデルやビュー内の共有リソースにアクセスするために必要なすべてがIStringLocalizer<SharedResources>を作成し、それを使用することです。

public class HomeController : Controller 
{ 
    private readonly IStringLocalizer<HomeController> _localizer; 
    private readonly IStringLocalizer<SharedResource> _sharedLocalizer; 

    public HomeController(IStringLocalizer<HomeController> localizer, 
        IStringLocalizer<SharedResource> sharedLocalizer) 
    { 
     _localizer = localizer; 
     _sharedLocalizer = sharedLocalizer; 
    } 

    public IActionResult Index() 
    { 
     ViewData["message"] = _sharedLocalizer["Hello!"]; 
     return View(); 
    } 
} 

またはビュー内:このようIViewLocalizerローカライザー@Inject

IStringLocalizer SharedLocalizer @Inject
@{ 
    ViewData["Title"] = SharedLocalizer["Hello!"]; 
} 

<h1>@Localizer["Welcome message"]</h1> 

私はインポートをスキップしたと簡潔にするためのステートメントを使用して。

SharedResourceと一般的なローカライゼーションの詳細については、Microsoft Documentationまたはここに投稿した質問My questions and answersの回答をご覧ください。

関連する問題