Skip to content
This repository was archived by the owner on Dec 14, 2018. It is now read-only.

Commit 47287c5

Browse files
committed
Added new extension methods to configure all MVC localization services
[Fixes #5436] Must call `AddViewLocalization()` to use `IStringLocalizer<T>` in an application
1 parent 23b7d8f commit 47287c5

File tree

8 files changed

+777
-27
lines changed

8 files changed

+777
-27
lines changed

src/Microsoft.AspNetCore.Mvc.Localization/DependencyInjection/MvcLocalizationMvcBuilderExtensions.cs

Lines changed: 234 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
5+
using Microsoft.AspNetCore.Mvc.DataAnnotations;
56
using Microsoft.AspNetCore.Mvc.Localization.Internal;
67
using Microsoft.AspNetCore.Mvc.Razor;
78
using Microsoft.Extensions.Localization;
89

910
namespace Microsoft.Extensions.DependencyInjection
1011
{
1112
/// <summary>
12-
/// Extension methods for configuring MVC view localization.
13+
/// Extension methods for configuring MVC view and data annotations localization services.
1314
/// </summary>
1415
public static class MvcLocalizationMvcBuilderExtensions
1516
{
1617
/// <summary>
17-
/// Adds MVC view localization to the application.
18+
/// Adds MVC view localization services to the application.
1819
/// </summary>
1920
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
2021
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
@@ -29,7 +30,7 @@ public static IMvcBuilder AddViewLocalization(this IMvcBuilder builder)
2930
}
3031

3132
/// <summary>
32-
/// Adds MVC view localization to the application.
33+
/// Adds MVC view localization services to the application.
3334
/// </summary>
3435
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
3536
/// <param name="format">The view format for localized views.</param>
@@ -48,7 +49,7 @@ public static IMvcBuilder AddViewLocalization(
4849
}
4950

5051
/// <summary>
51-
/// Adds MVC view localization to the application.
52+
/// Adds MVC view localization services to the application.
5253
/// </summary>
5354
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
5455
/// <param name="setupAction">An action to configure the <see cref="LocalizationOptions"/>.</param>
@@ -67,7 +68,7 @@ public static IMvcBuilder AddViewLocalization(
6768
}
6869

6970
/// <summary>
70-
/// Adds MVC view localization to the application.
71+
/// Adds MVC view localization services to the application.
7172
/// </summary>
7273
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
7374
/// <param name="format">The view format for localized views.</param>
@@ -86,5 +87,233 @@ public static IMvcBuilder AddViewLocalization(
8687
MvcLocalizationServices.AddLocalizationServices(builder.Services, format, setupAction);
8788
return builder;
8889
}
90+
91+
/// <summary>
92+
/// Adds MVC view and data annotations localization services to the application.
93+
/// </summary>
94+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
95+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
96+
/// <remarks>
97+
/// Adding localization also adds support for views via
98+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
99+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
100+
/// </remarks>
101+
public static IMvcBuilder AddMvcLocalization(this IMvcBuilder builder)
102+
{
103+
if (builder == null)
104+
{
105+
throw new ArgumentNullException(nameof(builder));
106+
}
107+
108+
return AddMvcLocalization(
109+
builder,
110+
localizationOptionsSetupAction: null,
111+
format: LanguageViewLocationExpanderFormat.Suffix,
112+
dataAnnotationsLocalizationOptionsSetupAction: null);
113+
}
114+
115+
/// <summary>
116+
/// Adds MVC view and data annotations localization services to the application.
117+
/// </summary>
118+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
119+
/// <param name="localizationOptionsSetupAction">An action to configure the <see cref="LocalizationOptions"/>.</param>
120+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
121+
/// <remarks>
122+
/// Adding localization also adds support for views via
123+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
124+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
125+
/// </remarks>
126+
public static IMvcBuilder AddMvcLocalization(
127+
this IMvcBuilder builder,
128+
Action<LocalizationOptions> localizationOptionsSetupAction)
129+
{
130+
if (builder == null)
131+
{
132+
throw new ArgumentNullException(nameof(builder));
133+
}
134+
135+
return AddMvcLocalization(
136+
builder,
137+
localizationOptionsSetupAction,
138+
LanguageViewLocationExpanderFormat.Suffix,
139+
dataAnnotationsLocalizationOptionsSetupAction: null);
140+
}
141+
142+
/// <summary>
143+
/// Adds MVC view and data annotations localization services to the application.
144+
/// </summary>
145+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
146+
/// <param name="format">The view format for localized views.</param>
147+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
148+
/// <remarks>
149+
/// Adding localization also adds support for views via
150+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
151+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
152+
/// </remarks>
153+
public static IMvcBuilder AddMvcLocalization(
154+
this IMvcBuilder builder,
155+
LanguageViewLocationExpanderFormat format)
156+
{
157+
if (builder == null)
158+
{
159+
throw new ArgumentNullException(nameof(builder));
160+
}
161+
162+
return AddMvcLocalization(
163+
builder,
164+
localizationOptionsSetupAction: null,
165+
format: format,
166+
dataAnnotationsLocalizationOptionsSetupAction: null);
167+
}
168+
169+
/// <summary>
170+
/// Adds MVC view and data annotations localization services to the application.
171+
/// </summary>
172+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
173+
/// <param name="localizationOptionsSetupAction">An action to configure the
174+
/// <see cref="LocalizationOptions"/>.</param>
175+
/// <param name="format">The view format for localized views.</param>
176+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
177+
/// <remarks>
178+
/// Adding localization also adds support for views via
179+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
180+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
181+
/// </remarks>
182+
public static IMvcBuilder AddMvcLocalization(
183+
this IMvcBuilder builder,
184+
Action<LocalizationOptions> localizationOptionsSetupAction,
185+
LanguageViewLocationExpanderFormat format)
186+
{
187+
if (builder == null)
188+
{
189+
throw new ArgumentNullException(nameof(builder));
190+
}
191+
192+
return AddMvcLocalization(
193+
builder,
194+
localizationOptionsSetupAction: localizationOptionsSetupAction,
195+
format: format,
196+
dataAnnotationsLocalizationOptionsSetupAction: null);
197+
}
198+
199+
/// <summary>
200+
/// Adds MVC view and data annotations localization services to the application.
201+
/// </summary>
202+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
203+
/// <param name="dataAnnotationsLocalizationOptionsSetupAction">An action to configure the
204+
/// <see cref="MvcDataAnnotationsLocalizationOptions"/>.</param>
205+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
206+
/// <remarks>
207+
/// Adding localization also adds support for views via
208+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
209+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
210+
/// </remarks>
211+
public static IMvcBuilder AddMvcLocalization(
212+
this IMvcBuilder builder,
213+
Action<MvcDataAnnotationsLocalizationOptions> dataAnnotationsLocalizationOptionsSetupAction)
214+
{
215+
if (builder == null)
216+
{
217+
throw new ArgumentNullException(nameof(builder));
218+
}
219+
220+
return AddMvcLocalization(
221+
builder,
222+
localizationOptionsSetupAction: null,
223+
format: LanguageViewLocationExpanderFormat.Suffix,
224+
dataAnnotationsLocalizationOptionsSetupAction: dataAnnotationsLocalizationOptionsSetupAction);
225+
}
226+
227+
/// <summary>
228+
/// Adds MVC view and data annotations localization services to the application.
229+
/// </summary>
230+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
231+
/// <param name="localizationOptionsSetupAction">An action to configure the
232+
/// <see cref="LocalizationOptions"/>.</param>
233+
/// <param name="dataAnnotationsLocalizationOptionsSetupAction">An action to configure the
234+
/// <see cref="MvcDataAnnotationsLocalizationOptions"/>.</param>
235+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
236+
/// <remarks>
237+
/// Adding localization also adds support for views via
238+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
239+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
240+
/// </remarks>
241+
public static IMvcBuilder AddMvcLocalization(
242+
this IMvcBuilder builder,
243+
Action<LocalizationOptions> localizationOptionsSetupAction,
244+
Action<MvcDataAnnotationsLocalizationOptions> dataAnnotationsLocalizationOptionsSetupAction)
245+
{
246+
if (builder == null)
247+
{
248+
throw new ArgumentNullException(nameof(builder));
249+
}
250+
251+
return AddMvcLocalization(
252+
builder,
253+
localizationOptionsSetupAction: localizationOptionsSetupAction,
254+
format: LanguageViewLocationExpanderFormat.Suffix,
255+
dataAnnotationsLocalizationOptionsSetupAction: dataAnnotationsLocalizationOptionsSetupAction);
256+
}
257+
258+
/// <summary>
259+
/// Adds MVC view and data annotations localization services to the application.
260+
/// </summary>
261+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
262+
/// <param name="format">The view format for localized views.</param>
263+
/// <param name="dataAnnotationsLocalizationOptionsSetupAction">An action to configure the
264+
/// <see cref="MvcDataAnnotationsLocalizationOptions"/>.</param>
265+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
266+
/// <remarks>
267+
/// Adding localization also adds support for views via
268+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
269+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
270+
/// </remarks>
271+
public static IMvcBuilder AddMvcLocalization(
272+
this IMvcBuilder builder,
273+
LanguageViewLocationExpanderFormat format,
274+
Action<MvcDataAnnotationsLocalizationOptions> dataAnnotationsLocalizationOptionsSetupAction)
275+
{
276+
if (builder == null)
277+
{
278+
throw new ArgumentNullException(nameof(builder));
279+
}
280+
281+
return AddMvcLocalization(
282+
builder,
283+
localizationOptionsSetupAction: null,
284+
format: format,
285+
dataAnnotationsLocalizationOptionsSetupAction: dataAnnotationsLocalizationOptionsSetupAction);
286+
}
287+
288+
/// <summary>
289+
/// Adds MVC view and data annotations localization services to the application.
290+
/// </summary>
291+
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
292+
/// <param name="localizationOptionsSetupAction">An action to configure the <see cref="LocalizationOptions"/>.
293+
/// Can be <c>null</c>.</param>
294+
/// <param name="format">The view format for localized views.</param>
295+
/// <param name="dataAnnotationsLocalizationOptionsSetupAction">An action to configure
296+
/// the <see cref="MvcDataAnnotationsLocalizationOptions"/>. Can be <c>null</c>.</param>
297+
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
298+
/// <remarks>
299+
/// Adding localization also adds support for views via
300+
/// <see cref="MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(IMvcCoreBuilder)"/> and the Razor view engine
301+
/// via <see cref="MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder)"/>.
302+
/// </remarks>
303+
public static IMvcBuilder AddMvcLocalization(
304+
this IMvcBuilder builder,
305+
Action<LocalizationOptions> localizationOptionsSetupAction,
306+
LanguageViewLocationExpanderFormat format,
307+
Action<MvcDataAnnotationsLocalizationOptions> dataAnnotationsLocalizationOptionsSetupAction)
308+
{
309+
if (builder == null)
310+
{
311+
throw new ArgumentNullException(nameof(builder));
312+
}
313+
314+
return builder
315+
.AddViewLocalization(format, localizationOptionsSetupAction)
316+
.AddDataAnnotationsLocalization(dataAnnotationsLocalizationOptionsSetupAction);
317+
}
89318
}
90319
}

0 commit comments

Comments
 (0)