Add Globalization

pull/1/head
Victor Perez NGOUNOU 2 years ago
parent 81b2650d53
commit 5e4a726390

@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
namespace TP_Blazor.Controllers;
[Route("[controller]/[action]")]
public class CultureController:Controller
{
public IActionResult SetCulture(string culture, string returnUrl)
{
if(culture != null)
{
this.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));
}
return this.LocalRedirect(returnUrl);
}
}

@ -1,8 +1,12 @@
@page "/"
@using System.Globalization
<PageTitle>Index</PageTitle>
<h1>Hello, world!</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
Welcome to your new app.

@ -0,0 +1,48 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TP_Blazor.Ressources {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Pages_List_fr_FR {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Pages_List_fr_FR() {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager {
get {
if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager("TP_Blazor.Ressources.Pages_List_fr_FR", typeof(Pages_List_fr_FR).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

@ -0,0 +1,14 @@
@using System.Globalization
@inject NavigationManager NavigationManager
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>

@ -0,0 +1,32 @@
using System.Globalization;
namespace TP_Blazor.Shared;
public partial class CultureSelector
{
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);
}
}
}

@ -10,6 +10,9 @@
<main>
<div class="top-row px-4">
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
<div class="px-4">
<CultureSelector />
</div>
</div>
<article class="content px-4">

@ -14,6 +14,8 @@
<None Remove="Blazorise.DataGrid" />
<None Remove="Blazorise.Bootstrap" />
<None Remove="Blazored.LocalStorage" />
<None Remove="Ressources\" />
<None Remove="Ressources\Pages.List" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Blazored.Modal" Version="7.1.0" />
@ -25,5 +27,26 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Models\" />
<Folder Include="Ressources\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Ressources\Pages.List.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Pages.List.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Ressources\Pages.List.fr-FR.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Pages.List.fr-FR.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Ressources\Pages.List.Designer.cs">
<DependentUpon>Pages.List.resx</DependentUpon>
</Compile>
<Compile Update="Ressources\Pages.List.fr-FR.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Pages.List.fr-FR.resx</DependentUpon>
</Compile>
</ItemGroup>
</Project>

Loading…
Cancel
Save