Bagikan melalui


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 lokalisasi

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 lokalisasi tidak diterapkan.

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

    services.AddMvc();
}

Jalur sumber daya pelokalan tidak ditemukan

Kebudayaan yang Didukung pada RequestCultureProvider tidak sesuai dengan yang telah terdaftar sebelumnya

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 rincian lebih lanjut tentang sumber daya yang hilang.

Petunjuk / Saran

Saat menggunakan CookieRequestCultureProvider, pastikan tanda kutip tunggal tidak digunakan dengan budaya terkait 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:

CustomRequestCultureProvider memungkinkan Anda untuk menyesuaikan bagaimana kultur lokal 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 akar

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

Peringatan

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

Sumber daya dan tindakan build

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

Pengaturan ulang 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