Search code examples
asp.net-core.net-coreasp.net-core-webapi

Language Resource is not working in .NET Core API


Code in Program.cs:

builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

var supportedCultures = new[]
            {
                new CultureInfo("en-US"),
                new CultureInfo("zh-CN")
            };

builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    options.DefaultRequestCulture = new RequestCulture(supportedCultures.FirstOrDefault());
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});

builder.Services.AddAuthorization();
builder.Services.AddControllers();

var app = builder.Build();

var localizationOptions = app.Services.GetService<IOptions<RequestLocalizationOptions>>()?.Value;
localizationOptions.FallBackToParentCultures = true;
localizationOptions.FallBackToParentUICultures = true;
app.UseRequestLocalization(localizationOptions);

app.UseHttpsRedirection();
app.UseAuthorization();

app.MapControllers();

Folder structure:\

  1. MyProject (API)
  2. ├── Controllers
  3. │ ├── TestController.cs
  4. ├── Resources
  5. │ ├── Shared
  6. │ --├── SharedResource.cs
  7. │ --├── SharedResources.en-US.resx
  8. │ --└── SharedResources.zh-CN.resx

Code in API controller:

public class TestController : ControllerBase
{
    private readonly IStringLocalizer<ResourcesController> _localizer;

    public TestController(IStringLocalizer<ResourcesController> localizer)
    {
        _localizer = localizer;
    }

    [HttpGet("TestCulture")]
    public async Task<IActionResult> TestCulture()
    {
        var testMsg = _localizer["NotFound"].Value;

        return Ok(testMsg);
    }
}

I basically tried the tutorial and even chatGPT to the letter, but it doesn't work. Any tips on how I can tackle this? Much appreciated!


Solution

  • It is a project structure issue. After my test , please follow this structure. Meanwhile , please check your file name to be correct.

    MyProject (API)
    ├── Controllers
    │ ├── TestController.cs
    │
    ├── Resources
    │ ├── SharedResources.en-US.resx
    │ ├── SharedResources.zh-CN.resx
    ├── SharedResources.cs
    

    enter image description here enter image description here