Continuité de la globalisation avec un bug sur la vue EmployeeData

master
Johnny RATTON 1 year ago
parent 5309f461a2
commit 5e8ebf7e2a

@ -16,16 +16,40 @@
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Pages\FetchData.cs"> <Compile Update="Pages\FetchData.cs">
<DependentUpon>FetchData.razor</DependentUpon> <DependentUpon>FetchData.razor</DependentUpon>
</Compile> </Compile>
<Compile Update="Ressources\App.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>App.resx</DependentUpon>
</Compile>
<Compile Update="Ressources\App.fr.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>App.fr.resx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="wwwroot\images\" /> <Folder Include="wwwroot\images\" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Ressources\App.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>App.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Ressources\App.fr.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>App.fr.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
</Project> </Project>

@ -1,4 +1,5 @@
@inherits LayoutComponentBase @using System.Globalization
@inherits LayoutComponentBase
<div class="page"> <div class="page">
<div class="sidebar"> <div class="sidebar">
<NavMenu /> <NavMenu />
@ -6,7 +7,11 @@
<main> <main>
<div class="top-row px-4"> <div class="top-row px-4">
<LanguageSelector/>
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a> <a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
</div> </div>
<article class="content px-4"> <article class="content px-4">

@ -34,6 +34,11 @@
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> FetchData <span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> FetchData
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="employee">
<span class="oi oi-list-rich" aria-hidden="true"></span> Employee data
</NavLink>
</div>
</nav> </nav>
</div> </div>

@ -0,0 +1,11 @@
namespace BlazorProject.Models;
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string City { get; set; }
public int Salary { get; set; }
public DateTime JoiningDate { get; set; }
}

@ -0,0 +1,65 @@
@page "/employee"
@using BlazorProject.Models
<h1>@title</h1>
<br />
<EditForm Model="@employee" OnSubmit="SaveEmployeeToLocalStorage">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-12">@Localize["Name"]</label>
<input class="form-control" @bind="employee.Name"/>
</div>
<div class="form-group">
<label class="control-label col-md-12">@Localize["Gender"]</label>
<select class="form-control" @bind="employee.Gender">
<option value="">@Localize["Select Gender"]</option>
<option value="Male">@Localize["Male"]</option>
<option value="Female">@Localize["Female"]</option>
</select>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-12">@Localize["City"]</label>
<input class="form-control" @bind="employee.City" />
</div>
<div class="form-group">
<label class="control-label col-md-12">@Localize["Salary"]</label>
<input type="number" class="form-control" @bind="employee.Salary" />
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">@Localize["Save"]</button>
</EditForm>
<hr />
<div class="row">
<div class="col-md-8">
<table class='table'>
<thead class="table-active">
<tr>
@foreach (string header in TableHeader)
{
<th>
@Localize[header]
</th>
}
</tr>
</thead>
<tbody>
@foreach (Employee emp in lstEmployees)
{
<tr>
<td>@emp.Name</td>
<td>@Localize[emp.Gender]</td>
<td>@emp.City</td>
<td>@emp.Salary.ToString("C2")</td>
<td>@emp.JoiningDate</td>
</tr>
}
</tbody>
</table>
</div>
</div>

@ -0,0 +1,54 @@
using BlazorProject.Models;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Localization;
using Microsoft.JSInterop;
using Newtonsoft.Json;
namespace BlazorProject.Pages;
public partial class EmployeeData
{
[Inject] public IStringLocalizer<App> Localize { get; set; }
[Inject] public IJSRuntime JSRuntime { get; set; }
Employee employee = new Employee();
List<Employee> lstEmployees = new List<Employee>();
string title;
string companyName = "Phrase";
string[] TableHeader = { "Name", "Gender", "City", "Salary", "Joining Date" };
protected override async Task OnInitializedAsync()
{
setTitle();
var empGetJS = (IJSInProcessRuntime)JSRuntime;
var empList = await empGetJS.InvokeAsync<string>("employeeData.get");
FetchEmployeeFromLocalStorage(empList);
}
void SaveEmployeeToLocalStorage()
{
employee.JoiningDate = DateTime.Now;
lstEmployees.Add(employee);
var empSetJS = (IJSInProcessRuntime)JSRuntime;
empSetJS.InvokeVoid("employeeData.set", JsonConvert.SerializeObject(lstEmployees));
employee = new Employee();
}
void FetchEmployeeFromLocalStorage(string empList)
{
if (empList != null)
{
lstEmployees = JsonConvert.DeserializeObject<List<Employee>>(empList);
}
}
void setTitle()
{
string localizedTitle = Localize["EmployeeData"];
title = string.Format(localizedTitle, companyName);
}
}

@ -18,14 +18,13 @@
<DataGridColumn TItem="Item" Field="@nameof(Item.Id)" Caption="#" /> <DataGridColumn TItem="Item" Field="@nameof(Item.Id)" Caption="#" />
<DataGridColumn TItem="Item" Field="@nameof(Item.Id)" Caption="Image"> <DataGridColumn TItem="Item" Field="@nameof(Item.Id)" Caption="Image">
<DisplayTemplate> <DisplayTemplate>
@if (File.Exists($"{WebHostEnvironment.BaseAddress}/images/{context.Name}.png")) <img
{ src=@($"{WebHostEnvironment.BaseAddress}/images/{context.Name}.png")
<img src="images/@(context.Name).png" class="img-thumbnail" title="@context.DisplayName" alt="@context.DisplayName" style="max-width: 150px"/> class="img-thumbnail"
} title="@(context.Name)"
else alt="@(context.Name)"
{ style="max-width: 150px"
<img src="images/default.png" class="img-thumbnail" title="@context.DisplayName" alt="@context.DisplayName" style="max-width: 150px"/> onerror="this.onerror=null;this.src='images/default.png'"/>
}
</DisplayTemplate> </DisplayTemplate>
</DataGridColumn> </DataGridColumn>
<DataGridColumn TItem="Item" Field="@nameof(Item.DisplayName)" Caption="Display name" /> <DataGridColumn TItem="Item" Field="@nameof(Item.DisplayName)" Caption="Display name" />

@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using BlazorProject; using BlazorProject;
using BlazorProject.Services; using BlazorProject.Services;
using Microsoft.Extensions.Localization;
using Microsoft.JSInterop;
var builder = WebAssemblyHostBuilder.CreateDefault(args); var builder = WebAssemblyHostBuilder.CreateDefault(args);
@ -26,4 +28,19 @@ builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddLocalization(options => options.ResourcesPath = "Ressources");
builder.Services.AddScoped<IStringLocalizer<App>, StringLocalizer<App>>();
var jsInterop = builder.Build().Services.GetRequiredService<IJSRuntime>();
var appLanguage = await jsInterop.InvokeAsync<string>("appCulture.get");
if (appLanguage != null)
{
CultureInfo cultureInfo = new CultureInfo(appLanguage);
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
}
await builder.Build().RunAsync(); await builder.Build().RunAsync();

@ -0,0 +1,102 @@
//------------------------------------------------------------------------------
// <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 BlazorProject.Ressources {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class App {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal App() {
}
[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("BlazorProject.Ressources.App", typeof(App).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static string City {
get {
return ResourceManager.GetString("City", resourceCulture);
}
}
internal static string Gender {
get {
return ResourceManager.GetString("Gender", resourceCulture);
}
}
internal static string Salary {
get {
return ResourceManager.GetString("Salary", resourceCulture);
}
}
internal static string EmployeeData {
get {
return ResourceManager.GetString("EmployeeData", resourceCulture);
}
}
internal static string Male {
get {
return ResourceManager.GetString("Male", resourceCulture);
}
}
internal static string Female {
get {
return ResourceManager.GetString("Female", resourceCulture);
}
}
internal static string Name {
get {
return ResourceManager.GetString("Name", resourceCulture);
}
}
internal static string Joining_Date {
get {
return ResourceManager.GetString("Joining Date", resourceCulture);
}
}
internal static string Save {
get {
return ResourceManager.GetString("Save", resourceCulture);
}
}
}
}

@ -0,0 +1,108 @@
//------------------------------------------------------------------------------
// <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 BlazorProject.Ressources {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class App_fr {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal App_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("BlazorProject.Ressources.App_fr", typeof(App_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;
}
}
internal static string City {
get {
return ResourceManager.GetString("City", resourceCulture);
}
}
internal static string Gender {
get {
return ResourceManager.GetString("Gender", resourceCulture);
}
}
internal static string Salary {
get {
return ResourceManager.GetString("Salary", resourceCulture);
}
}
internal static string EmployeeData {
get {
return ResourceManager.GetString("EmployeeData", resourceCulture);
}
}
internal static string Male {
get {
return ResourceManager.GetString("Male", resourceCulture);
}
}
internal static string Female {
get {
return ResourceManager.GetString("Female", resourceCulture);
}
}
internal static string Joining_Date {
get {
return ResourceManager.GetString("Joining Date", resourceCulture);
}
}
internal static string Name {
get {
return ResourceManager.GetString("Name", resourceCulture);
}
}
internal static string Save {
get {
return ResourceManager.GetString("Save", resourceCulture);
}
}
internal static string Title {
get {
return ResourceManager.GetString("Title", resourceCulture);
}
}
}
}

@ -0,0 +1,48 @@
<?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>
<data name="City" xml:space="preserve">
<value>Ville</value>
</data>
<data name="Gender" xml:space="preserve">
<value>Genre</value>
</data>
<data name="Salary" xml:space="preserve">
<value>Salaire</value>
</data>
<data name="EmployeeData" xml:space="preserve">
<value>Données des employés</value>
</data>
<data name="Male" xml:space="preserve">
<value>Homme</value>
</data>
<data name="Female" xml:space="preserve">
<value>Femme</value>
</data>
<data name="Joining Date" xml:space="preserve">
<value>Date d'arrivée</value>
</data>
<data name="Name" xml:space="preserve">
<value>Nom</value>
</data>
<data name="Save" xml:space="preserve">
<value>Sauvegarder</value>
</data>
</root>

@ -0,0 +1,48 @@
<?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>
<data name="City" xml:space="preserve">
<value>City</value>
</data>
<data name="Gender" xml:space="preserve">
<value>Gender</value>
</data>
<data name="Salary" xml:space="preserve">
<value>Salary</value>
</data>
<data name="EmployeeData" xml:space="preserve">
<value>EmployeeData</value>
</data>
<data name="Male" xml:space="preserve">
<value>Male</value>
</data>
<data name="Female" xml:space="preserve">
<value>Female</value>
</data>
<data name="Name" xml:space="preserve">
<value>Name</value>
</data>
<data name="Joining Date" xml:space="preserve">
<value>Joining Date</value>
</data>
<data name="Save" xml:space="preserve">
<value>Save</value>
</data>
</root>

@ -32,6 +32,18 @@
<a class="dismiss">🗙</a> <a class="dismiss">🗙</a>
</div> </div>
<script src="_framework/blazor.webassembly.js"></script> <script src="_framework/blazor.webassembly.js"></script>
<script>
window.appCulture = {
get: () => window.localStorage['AppLanguage'],
set: (value) => window.localStorage['AppLanguage'] = value
};
</script>
<script>
window.employeeData = {
get: () => window.localStorage['empData'],
set: (value) => window.localStorage['empData'] = value
};
</script>
</body> </body>
</html> </html>

Loading…
Cancel
Save