diff --git a/ProjetBlazor/Controllers/CultureController.cs b/ProjetBlazor/Controllers/CultureController.cs
new file mode 100644
index 0000000..4b46a3c
--- /dev/null
+++ b/ProjetBlazor/Controllers/CultureController.cs
@@ -0,0 +1,34 @@
+using Microsoft.AspNetCore.Localization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace ProjetBlazor.Controllers
+{
+ ///
+ /// The culture controller.
+ ///
+ [Route("[controller]/[action]")]
+ public class CultureController : Controller
+ {
+ ///
+ /// Sets the culture.
+ ///
+ /// The culture.
+ /// The redirect URI.
+ ///
+ /// The action result.
+ ///
+ public IActionResult SetCulture(string culture, string redirectUri)
+ {
+ if (culture != null)
+ {
+ // Define a cookie with the selected culture
+ this.HttpContext.Response.Cookies.Append(
+ CookieRequestCultureProvider.DefaultCookieName,
+ CookieRequestCultureProvider.MakeCookieValue(
+ new RequestCulture(culture)));
+ }
+
+ return this.LocalRedirect(redirectUri);
+ }
+ }
+}
diff --git a/ProjetBlazor/Pages/Index.razor b/ProjetBlazor/Pages/Index.razor
index 6085c4a..82b8926 100644
--- a/ProjetBlazor/Pages/Index.razor
+++ b/ProjetBlazor/Pages/Index.razor
@@ -1,4 +1,5 @@
@page "/"
+@using System.Globalization
Index
@@ -7,3 +8,7 @@
Welcome to your new app.
+
+
+ CurrentCulture: @CultureInfo.CurrentCulture
+
\ No newline at end of file
diff --git a/ProjetBlazor/Pages/MusiquesListe.razor b/ProjetBlazor/Pages/MusiquesListe.razor
index 7f89582..a2629e8 100644
--- a/ProjetBlazor/Pages/MusiquesListe.razor
+++ b/ProjetBlazor/Pages/MusiquesListe.razor
@@ -1,7 +1,8 @@
@page "/MusiquesListe"
@using ProjetBlazor.Modeles
-List
+
+@Localizer["MyPlaylist"]
diff --git a/ProjetBlazor/Pages/MusiquesListe.razor.cs b/ProjetBlazor/Pages/MusiquesListe.razor.cs
index d83a883..6fcc66a 100644
--- a/ProjetBlazor/Pages/MusiquesListe.razor.cs
+++ b/ProjetBlazor/Pages/MusiquesListe.razor.cs
@@ -1,5 +1,6 @@
using Blazorise.DataGrid;
using Microsoft.AspNetCore.Components;
+using Microsoft.Extensions.Localization;
using ProjetBlazor.Modeles;
using ProjetBlazor.Services;
@@ -17,6 +18,9 @@ namespace ProjetBlazor.Pages
[Inject]
public IWebHostEnvironment WebHostEnvironment { get; set; }
+ [Inject]
+ public IStringLocalizer Localizer { get; set; }
+
private async Task OnReadData(DataGridReadDataEventArgs e)
{
if (e.CancellationToken.IsCancellationRequested)
diff --git a/ProjetBlazor/Program.cs b/ProjetBlazor/Program.cs
index 65b7322..a57014e 100644
--- a/ProjetBlazor/Program.cs
+++ b/ProjetBlazor/Program.cs
@@ -3,7 +3,10 @@ using Blazorise.Bootstrap;
using Blazorise.Icons.FontAwesome;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
+using Microsoft.AspNetCore.Localization;
+using Microsoft.Extensions.Options;
using ProjetBlazor.Services;
+using System.Globalization;
var builder = WebApplication.CreateBuilder(args);
@@ -18,6 +21,23 @@ builder.Services
builder.Services.AddScoped();
builder.Services.AddHttpClient();
+// Add the controller of the app
+builder.Services.AddControllers();
+
+// Add the localization to the app and specify the resources path
+builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
+
+// Configure the localtization
+builder.Services.Configure(options =>
+{
+ // Set the default culture of the web site
+ options.DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US"));
+
+ // Declare the supported culture
+ options.SupportedCultures = new List { new CultureInfo("en-US"), new CultureInfo("fr-FR") };
+ options.SupportedUICultures = new List { new CultureInfo("en-US"), new CultureInfo("fr-FR") };
+});
+
var app = builder.Build();
// Configure the HTTP request pipeline.
@@ -34,6 +54,22 @@ app.UseStaticFiles();
app.UseRouting();
+// Get the current localization options
+var options = ((IApplicationBuilder)app).ApplicationServices.GetService>();
+
+if (options?.Value != null)
+{
+ // use the default localization
+ app.UseRequestLocalization(options.Value);
+}
+
+// Add the controller to the endpoint
+app.UseEndpoints(endpoints =>
+{
+ endpoints.MapControllers();
+});
+
+
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
diff --git a/ProjetBlazor/Resources/MusiquesListe.fr-FR.resx b/ProjetBlazor/Resources/MusiquesListe.fr-FR.resx
new file mode 100644
index 0000000..26c3d8d
--- /dev/null
+++ b/ProjetBlazor/Resources/MusiquesListe.fr-FR.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Ma playlist
+
+
\ No newline at end of file
diff --git a/ProjetBlazor/Resources/MusiquesListe.resx b/ProjetBlazor/Resources/MusiquesListe.resx
new file mode 100644
index 0000000..8300879
--- /dev/null
+++ b/ProjetBlazor/Resources/MusiquesListe.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Author
+
+
+ My playlist
+
+
+ Title
+
+
\ No newline at end of file
diff --git a/ProjetBlazor/Shared/CultureSelector.razor b/ProjetBlazor/Shared/CultureSelector.razor
new file mode 100644
index 0000000..653175d
--- /dev/null
+++ b/ProjetBlazor/Shared/CultureSelector.razor
@@ -0,0 +1,43 @@
+@using System.Globalization
+@inject NavigationManager NavigationManager
+
+
+
+
+
+@code
+{
+ private CultureInfo[] supportedCultures = new[]
+ {
+ new CultureInfo("en-US"),
+ new CultureInfo("fr-FR")
+ };
+
+ private CultureInfo Culture
+ {
+ get => CultureInfo.CurrentCulture;
+ set
+ {
+ if (CultureInfo.CurrentUICulture == value)
+ {
+ return;
+ }
+
+ var culture = value.Name.ToLower(CultureInfo.InvariantCulture);
+
+ var uri = new Uri(this.NavigationManager.Uri).GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
+ var query = $"?culture={Uri.EscapeDataString(culture)}&" + $"redirectUri={Uri.EscapeDataString(uri)}";
+
+ // Redirect the user to the culture controller to set the cookie
+ this.NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjetBlazor/Shared/MainLayout.razor b/ProjetBlazor/Shared/MainLayout.razor
index 1953e69..91aff6c 100644
--- a/ProjetBlazor/Shared/MainLayout.razor
+++ b/ProjetBlazor/Shared/MainLayout.razor
@@ -7,9 +7,13 @@
-
+
+
+
+
@Body
+