// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Globalization; using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.ViewFeatures.Internal; using Microsoft.Extensions.Localization; using Microsoft.Extensions.PlatformAbstractions; namespace Microsoft.AspNet.Mvc.Localization { /// /// A implementation that provides localized strings for views. /// public class ViewLocalizer : IViewLocalizer, ICanHasViewContext { private readonly IHtmlLocalizerFactory _localizerFactory; private readonly string _applicationName; private IHtmlLocalizer _localizer; /// /// Creates a new . /// /// The . /// The . public ViewLocalizer(IHtmlLocalizerFactory localizerFactory, IApplicationEnvironment applicationEnvironment) { if (localizerFactory == null) { throw new ArgumentNullException(nameof(localizerFactory)); } if (applicationEnvironment == null) { throw new ArgumentNullException(nameof(applicationEnvironment)); } _applicationName = applicationEnvironment.ApplicationName; _localizerFactory = localizerFactory; } /// public virtual LocalizedHtmlString this[string key] { get { if (key == null) { throw new ArgumentNullException(nameof(key)); } return _localizer[key]; } } /// public virtual LocalizedHtmlString this[string key, params object[] arguments] { get { if (key == null) { throw new ArgumentNullException(nameof(key)); } return _localizer[key, arguments]; } } /// public LocalizedString GetString(string name) => _localizer.GetString(name); /// public LocalizedString GetString(string name, params object[] values) => _localizer.GetString(name, values); /// public IHtmlLocalizer WithCulture(CultureInfo culture) => _localizer.WithCulture(culture); /// public IEnumerable GetAllStrings(bool includeParentCultures) => _localizer.GetAllStrings(includeParentCultures); /// /// Apply the specified . /// /// The . public void Contextualize(ViewContext viewContext) { if (viewContext == null) { throw new ArgumentNullException(nameof(viewContext)); } var baseName = viewContext.View.Path.Replace('/', '.').Replace('\\', '.'); if (baseName.StartsWith(".", StringComparison.OrdinalIgnoreCase)) { baseName = baseName.Substring(1); } _localizer = _localizerFactory.Create(baseName, _applicationName); } } }