2015-07-30 29 views
17

Varolan ASP.NET MVC 5 projemi MVC 6 vNext projesine taşımaya çalışıyorum, ancak bu sorunların çoğunu çözebildiğim ve çözebildiğim için, RESX kaynağının nasıl kullanılacağına dair herhangi bir belge bulamıyorum. RESX düzgün dahil edilmiş ve erişim değiştiricileri doğru ayarlanmış gibi MVC 6'da lokalizasyonu için dosyalarıMVC 6: RESX dosyaları nasıl kullanılır?

Benim ViewModels Bu sürece MVC 5'de iyi çalıştı

[Required(ErrorMessageResourceType = typeof(Resources.MyProj.Messages), ErrorMessageResourceName = "FieldRequired")] 

ifadeleri kullanıyor, ancak hiç görünmüyor vNext projesinde çalışma RESX'in MVC 6 vNext projelerinde nasıl kullanılabileceğini bilen var mı?

Burada ve GIT hub sitesinde, ASP.NET 5/MVC 6 için yerelleştirme öyküsünün tamamlandığını söyleyen birkaç kaynak gördüm, ancak kaynak dizilerinin kullanıldığı herhangi bir iyi örnek bulamıyorum. Yukarıdaki kodu kullanarak

bana tür veya ad alanı adı 'Kaynaklar' bulunamadı

Hata CS0246 bir hata veriyor (bir kullanarak yönergesi veya bir derleme başvurusu eksik?)

Düzenleme: Değiştirilen metin ben vNext (MVC 6) projelerinde yerelleştirme uygulanması için arıyorum olduğunu netleştirmek için, bunu MVC 5. çalışmak yapmak mümkün

Düzenleme 2: yerelleştirme bit çalışan bir Got Muhammed’in cevabını uyguluyor ama şimdi yeni bir hatayım. Ben

"Microsoft.AspNet.Localization": "1.0.0-beta7-10364", 
    "Microsoft.Framework.Localization": "1.0.0-beta7-10364", 

paketleri dahil ve Startup.cs

services.AddMvcLocalization(); 

yılında ConfigureServices aşağıdaki satırı ekledikten sonra aşağıdaki kod çalıştırıldığında elde edildiğinde

Yeni hatası alıyorum.

public class HomeController : Controller 
    { 
     private readonly IHtmlLocalizer _localizer; 

     public HomeController(IHtmlLocalizer<HomeController> localizer) 
     { 
      _localizer = localizer; 
     } 
      .... 

hatası: isteği işlenirken

işlenmemiş bir özel durum oluştu.

ınvalidoperationexception: 'Microsoft.Framework.Localization.ResourceManagerStringLocalizerFactory' etkinleştirmek için çalışırken tip 'Microsoft.Framework.Runtime.IApplicationEnvironment' hizmet çözülemiyor.

eğer onun bir bağımlılık anlamaya Cant Microsoft.Framework.DependencyInjection.ServiceLookup.Service.CreateCallSite (ServiceProvider sağlayıcı, ISet`1 callSiteChain) i özlüyorum veya sorunun kodda

orada Düzenleme 3:

Herkese bir çözüm arıyor. Bu noktada, CSHTML'nize yerelleştirme desteği almak için cevabın kodunu Muhammad Rehan Saee ile kullanabilirsiniz.doğrulamasında yerelleştirme etkinleştirme hikaye henüz (bu düzenleme sırasında:/2015 08/Eylül) yapılmazsa niteliklerini Ancak:

https://github.com/aspnet/Mvc/issues/2766#issuecomment-137192942

aşağıda mvc için Github sitesinde konuyla göz at

Not: InvalidOperationException düzeltmek için yaptım tüm içeriğini benim C beta7- * gibi tüm bağımlılıkları alarak ve takas

aşağıdaki: \ Users \ .dnx \ paketleri hata kurtuldum. Ben kaldırdı konuda

Detayları:

https://github.com/aspnet/Mvc/issues/2893#issuecomment-127164729

Düzenleme: 25/Aralık/2015

Bu nihayet şimdi MVC 6 çalışmaktadır.

burada hızlı bir blog yazısı yazdı: http://pratikvasani.github.io/archive/2015/12/25/MVC-6-localization-how-to/

+1

@Coulton "Ayarı Dil ve Giriş" tercih altına dili ekleyerek krom kültür değiştirebilirsiniz: Bu sözü gibi benim mevcut MVC 5 projesinde ResX kullanmak mümkün Yukarıdaki bağlantı, benim sorunum yeni vNext projeleri ile MVC 6'da çalışmıyor. MVC 6 – Pratik

cevap

4

Sen ASP.NET MVC GitHub proje here üzerinde tam örnek bir göz alabilir. Yazım sırasında bu tamamen yeni bir kod ve değişime tabidir. Eğer başlangıçta aşağıdaki eklemeniz gerekir:

public class Startup 
{ 
    // Set up application services 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // Add MVC services to the services container 
     services.AddMvc(); 
     services.AddMvcLocalization(); 

     // Adding TestStringLocalizerFactory since ResourceStringLocalizerFactory uses ResourceManager. DNX does 
     // not support getting non-enu resources from ResourceManager yet. 
     services.AddSingleton<IStringLocalizerFactory, TestStringLocalizerFactory>(); 
    } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseCultureReplacer(); 

     app.UseRequestLocalization(); 

     // Add MVC to the request pipeline 
     app.UseMvcWithDefaultRoute(); 
    } 
} 

IStringLocalizerFactory ResX türlerinden IStringLocalizer örneklerini oluşturmak için kullanılacak gibi görünüyor. Yerelleştirilmiş dizelerinizi almak için IStringLocalizer'u kullanabilirsiniz. İşte tam arayüzü (LocalizedString sadece bir isim değer çifti edilir) 'dir:

/// <summary> 
/// Represents a service that provides localized strings. 
/// </summary> 
public interface IStringLocalizer 
{ 
    /// <summary> 
    /// Gets the string resource with the given name. 
    /// </summary> 
    /// <param name="name">The name of the string resource.</param> 
    /// <returns>The string resource as a <see cref="LocalizedString"/>.</returns> 
    LocalizedString this[string name] { get; } 

    /// <summary> 
    /// Gets the string resource with the given name and formatted with the supplied arguments. 
    /// </summary> 
    /// <param name="name">The name of the string resource.</param> 
    /// <param name="arguments">The values to format the string with.</param> 
    /// <returns>The formatted string resource as a <see cref="LocalizedString"/>.</returns> 
    LocalizedString this[string name, params object[] arguments] { get; } 

    /// <summary> 
    /// Gets all string resources. 
    /// </summary> 
    /// <param name="includeAncestorCultures"> 
    /// A <see cref="System.Boolean"/> indicating whether to include 
    /// strings from ancestor cultures. 
    /// </param> 
    /// <returns>The strings.</returns> 
    IEnumerable<LocalizedString> GetAllStrings(bool includeAncestorCultures); 

    /// <summary> 
    /// Creates a new <see cref="ResourceManagerStringLocalizer"/> for a specific <see cref="CultureInfo"/>. 
    /// </summary> 
    /// <param name="culture">The <see cref="CultureInfo"/> to use.</param> 
    /// <returns>A culture-specific <see cref="IStringLocalizer"/>.</returns> 
    IStringLocalizer WithCulture(CultureInfo culture); 
} 

Son olarak bu kadar sevdiği Kontrolör içine IStringLocalizer enjekte edebilir (Not IStringLocalizer den IHtmlLocalizer<HomeController> devralır):

public class HomeController : Controller 
{ 
    private readonly IHtmlLocalizer _localizer; 

    public HomeController(IHtmlLocalizer<HomeController> localizer) 
    { 
     _localizer = localizer; 
    } 

    public IActionResult Index() 
    { 
     return View(); 
    } 

    public IActionResult Locpage() 
    { 
     ViewData["Message"] = _localizer["Learn More"]; 
     return View(); 
    } 
} 
+1

'daki mevcut Resx dosyaları ile çalışmak için bir yol arıyorum. Bilgi için teşekkürler, şimdi kaynak işleme ile ne yapmaya çalıştığını anlıyorum, maalesef başka bir konuya girdim. Paketlerde çakışma var gibi görünüyor. "Microsoft.Framework.Localization" eklediğim anda: "1.0.0-beta7-10364", bağımlılık olarak, hata almaya başladım: ** Yöntem Bulunan: 'Boolean Microsoft.Framework.DependencyInjection.ServiceCollectionExtensions.TryAdd ** Bu hatayı daha önce hiç gördünüz mü? – Pratik

+0

Tüm Beta 7 bitlerini kullanıyor musunuz? Kabul etmeliyim, henüz yerelleştirme bitlerini deneme şansım olmadı. –

+1

Kullanabileceğim beta7 kullanıyorum. Aslında ben de Microsoft.Framework.Localization beta5 sürümü ile çalıştı. Bu, aşağıdaki gibi görünmüyor :( MVC 6 ile bu kadar çok temel özelliğin eksik olması şaşırtıcı. RTM – Pratik

3

şeyler mvc 6.0.0-rc1-finalinde değiştirildi. Diğer birçok forumdan geçtikten sonra, yerelleştirme özelliğindeki en son değişikliklerle çalışmayı planlayan herkes aşağıdaki yapılandırmada çalışır. startup.cs ise

public void ConfigureServices(IServiceCollection services) 
    {   
     services.AddMvc();   
     services.AddMvc().AddViewLocalization().AddDataAnnotationsLocalization(); 
     services.AddSingleton<IStringLocalizerFactory, CustomStringLocalizerFactory>(); 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    {   
     var requestLocalizationOptions = new RequestLocalizationOptions 
     {     
      SupportedCultures = new List<CultureInfo>{ 
       new CultureInfo("en-US"),  
       new CultureInfo("fr-CH") 
      }, 
      SupportedUICultures = new List<CultureInfo> 
      { 
       new CultureInfo("en-US"),      
       new CultureInfo("fr-CH")      
      } 
     }; 
     app.UseRequestLocalization(requestLocalizationOptions, new RequestCulture(new CultureInfo("en-US")));   
    } 

yapılandırmak ve denetleyici içinde IHtmlLocalizer kullanmaya başlayabilirsiniz.

ve querystring http://localhost:5000/Home/Contact?culture=fr-CH ile test etmek veya

+4

Neden eksik kod gönderiliyor? Ne zamandan beri bir 'CustomStringLocalizerFactory' atlama başarısız olur? –

İlgili konular