Memecahkan masalah pelokalan ASP.NET Core

Oleh Hisham Bin Ateya

Artikel ini menyediakan instruksi tentang cara mendiagnosis masalah pelokalan aplikasi ASP.NET Core.

Masalah konfigurasi pelokalan

Urutan middleware pelokalan
Aplikasi mungkin tidak melokalisasi karena middleware pelokalan tidak diurutkan seperti yang diharapkan.

Untuk mengatasi masalah ini, pastikan middleware pelokalan terdaftar sebelum middleware MVC. Jika tidak, middleware pelokalan tidak diterapkan.

public void ConfigureServices(IServiceCollection services)
{
    services.AddLocalization(options => options.ResourcesPath = "Resources");

    services.AddMvc();
}

Jalur sumber daya pelokalan tidak ditemukan

Budaya yang Didukung di RequestCultureProvider tidak cocok dengan terdaftar sekali

Masalah penamaan file sumber daya

ASP.NET Core memiliki aturan dan panduan yang telah ditentukan sebelumnya untuk penamaan file sumber daya pelokalan, yang dijelaskan dalam Globalisasi dan pelokalan di ASP.NET Core.

Sumber daya hilang

Penyebab umum sumber daya yang tidak ditemukan meliputi:

  • Nama sumber daya salah eja dalam file sumber daya .NET XML (.resx) atau permintaan localizer.
  • Sumber daya hilang dari file sumber daya untuk beberapa bahasa, tetapi ada di bahasa lain.
  • Jika Anda masih mengalami masalah, periksa pesan log pelokalan (dicatat di Debug tingkat log) untuk detail selengkapnya tentang sumber daya yang hilang.

Tip

Saat menggunakan CookieRequestCultureProvider, verifikasi tanda kutip tunggal tidak digunakan dengan budaya di dalam nilai pelokalan cookie . Misalnya, c='en-UK'|uic='en-US' adalah nilai yang tidak cookie valid, sementara c=en-UK|uic=en-US valid.

Masalah sumber daya dan pustaka kelas

ASP.NET Core secara default menyediakan cara untuk memungkinkan pustaka kelas menemukan file sumber daya mereka melalui ResourceLocationAttribute.

Masalah umum dengan pustaka kelas meliputi:

CustomRequestCultureProvider tidak berfungsi seperti yang diharapkan

Kelas RequestLocalizationOptions ini memiliki tiga penyedia default:

Memungkinkan CustomRequestCultureProvider Anda untuk menyesuaikan bagaimana budaya pelokalan disediakan. CustomRequestCultureProvider digunakan ketika penyedia default tidak memenuhi kebutuhan Anda.

Alasan umum penyedia kustom tidak berfungsi dengan baik adalah bahwa penyedia tersebut bukan penyedia pertama dalam RequestCultureProviders daftar. Untuk mengatasi masalah ini:

  • Sisipkan penyedia kustom pada posisi nol dalam RequestCultureProviders daftar:

    options.AddInitialRequestCultureProvider(
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    
  • Sisipkan penyedia kustom pada posisi nol dalam RequestCultureProviders daftar:

    options.RequestCultureProviders.Insert(0, 
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    

Masalah namespace layanan akar

Ketika namespace layanan akar rakitan berbeda dari nama rakitan, pelokalan tidak berfungsi secara default. Untuk menghindari masalah ini, gunakan RootNamespace atribut , yang dijelaskan dalam Globalisasi dan pelokalan di ASP.NET Core.

Peringatan

Masalah namespace layanan akar dapat terjadi ketika nama proyek bukan pengidentifikasi .NET yang valid. Misalnya, my-project-name.csproj menggunakan namespace my_project_name layanan akar dan nama my-project-namerakitan , yang menghasilkan kesalahan ini.

Sumber daya dan tindakan build

Jika Anda menggunakan file sumber daya untuk pelokalan, penting bagi mereka untuk memiliki tindakan build yang sesuai. Gunakan Sumber Daya Tersemat; jika tidak, ResourceStringLocalizer sumber daya ini tidak dapat ditemukan.

Penimpaan lokasi menggunakan panel "Sensor" di alat pengembang

Saat menggunakan penimpaan lokasi menggunakan panel Sensor di Google Chrome atau alat pengembang Microsoft Edge, bahasa fallback diatur ulang setelah prarender. Hindari mengatur bahasa menggunakan panel Sensor saat pengujian. Atur bahasa menggunakan pengaturan bahasa browser.

Untuk informasi selengkapnya, lihat Blazor Pelokalan tidak berfungsi dengan InteractiveServer (dotnet/aspnetcore #53707).

Masalah GitHub dengan tips pemecahan masalah yang bermanfaat