Yerelleştirme ASP.NET Core giderme

Hisham BinÂya tarafından

Bu makalede, uygulama yerelleştirme sorunlarını ASP.NET Core tanılama yönergeleri ve sağlar.

Yerelleştirme yapılandırma sorunları

Yerelleştirme ara yazılımı sırası
Yerelleştirme ara yazılımı beklendiği gibi sıralanmaz ve uygulama yerelleştirilemeyebilirsiniz.

Bu sorunu çözmek için yerelleştirme ara yazılımlarının MVC ara yazılımı öncesinde kaydedildiklerine emin olun. Aksi takdirde, yerelleştirme ara yazılımı uygulanmaz.

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

    services.AddMvc();
}

Yerelleştirme kaynakları yolu bulunamadı

RequestCultureProvider'da Desteklenen Kültürler, bir kez kaydedilmiş kültürlerle eş değil

Kaynak dosyası adlandırma sorunları

ASP.NET Core, burada ayrıntılı olarak açıklanan yerelleştirme kaynakları dosya adlandırma için önceden tanımlanmış kurallar ve yönergeler içerir.

Eksik kaynaklar

Kaynakların bulunamama nedenlerinden bazıları şunlardır:

  • Kaynak adları dosyada veya resx yerelleştirici isteğinde yanlış yazılmıştır.
  • Kaynağın bazı dillerde resx eksik olduğu, ancak diğer dillerde var olduğu.
  • Sorun devam ediyorsanız, eksik kaynaklar hakkında daha fazla ayrıntı için yerelleştirme günlüğü iletilerini (günlük Debug düzeyindedir) kontrol edin.

İpucu: kullanırken, CookieRequestCultureProvider tek tırnakların yerelleştirme değerinin içindeki kültürlerle birlikte kullanılmamalarını cookie doğrulayın. Örneğin, c='en-UK'|uic='en-US' geçersiz bir cookie değer, ise c=en-UK|uic=en-US geçerli bir değerdir.

Kaynak & Kitaplıkları sorunları

ASP.NET Core varsayılan olarak, sınıf kitaplıklarının ResourceLocationAttributearacılığıyla kaynak dosyalarını bulmalarına izin vermek için bir yol sağlar.

Sınıf kitaplıkları ile ilgili yaygın sorunlar şunlardır:

CustomRequestCultureProvider beklendiği gibi çalışmıyor

sınıfının RequestLocalizationOptions üç varsayılan sağlayıcısı vardır:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

CustomRequestCultureProvider, yerelleştirme kültürünün uygulamanıza nasıl sağlanacaklarını özelleştirmenize olanak sağlar. CustomRequestCultureProvider, varsayılan sağlayıcılar gereksinimlerinizi karşılamazken kullanılır.

  • Özel sağlayıcının düzgün çalışmama nedeninin genellikle listede ilk sağlayıcı RequestCultureProviders olmasıdır. Bu sorunu çözmek için:

  • Özel sağlayıcıyı listede 0 konumunda RequestCultureProviders aşağıdaki gibi ekleyin:

options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
    {
        // My custom request culture logic
        return new ProviderCultureResult("en");
    }));
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
    {
        // My custom request culture logic
        return new ProviderCultureResult("en");
    }));
  • Özel AddInitialRequestCultureProvider sağlayıcıyı ilk sağlayıcı olarak ayarlamak için uzantı yöntemini kullanın.

Kök Ad Alanı sorunları

Bir derlemenin kök ad alanı derlemeden farklı olduğunda, yerelleştirme varsayılan olarak çalışmaz. Bu sorunu önlemek için burada ayrıntılı olarak açıklanan RootNamespacekullanın.

Uyarı

Bir projenin adı geçerli bir .NET tanımlayıcısı değilse bu durum oluşabilir. Örneğin, my-project-name.csproj kök ad alanını ve bu my_project_name hataya neden olan derleme adını my-project-name kullanır.

Kaynaklar & Derleme Eylemi

Yerelleştirme için kaynak dosyaları kullanıyorsanız, bunların uygun bir derleme eylemi olması önemlidir. Bunlar Embedded Resource (Katıştırılmış Kaynak) olması ResourceStringLocalizer gerekir, aksi takdirde bu kaynaklar bulunamaz.