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
resxyerelleştirici isteğinde yanlış yazılmıştır. - Kaynağın bazı dillerde
resxeksik 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
Debugdü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:
- Bir
ResourceLocationAttributesınıf kitaplığında eksik olan kaynaklarıResourceManagerStringLocalizerFactorybulmasını önler. - Kaynak dosyası adlandırma. Daha fazla bilgi için Kaynak dosyası adlandırma sorunları bölümüne bakın.
- Sınıf kitaplığının kök ad alanını değiştirme. Daha fazla bilgi için Kök Ad Alanı sorunları bölümüne bakın.
CustomRequestCultureProvider beklendiği gibi çalışmıyor
sınıfının RequestLocalizationOptions üç varsayılan sağlayıcısı vardır:
QueryStringRequestCultureProviderCookieRequestCultureProviderAcceptLanguageHeaderRequestCultureProvider
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ı
RequestCultureProvidersolmasıdır. Bu sorunu çözmek için:Özel sağlayıcıyı listede 0 konumunda
RequestCultureProvidersaş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
AddInitialRequestCultureProvidersağ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.