From be70cf3b5b7db59b5e4170517769226230d6b0eb Mon Sep 17 00:00:00 2001 From: Lucie GOIGOUX Date: Tue, 9 Jan 2024 15:30:40 +0100 Subject: [PATCH] mise en place de la traduction --- .../Controllers/CultureController.cs | 32 +++++++++++++ Project/adminBlazor/adminBlazor/Program.cs | 35 ++++++++++++++ .../adminBlazor/Shared/CultureSelector.razor | 43 ++++++++++++++++++ .../adminBlazor/Shared/MainLayout.razor | 3 ++ .../wwwroot/img/logoTraduction.png | Bin 0 -> 13870 bytes 5 files changed, 113 insertions(+) create mode 100644 Project/adminBlazor/adminBlazor/Controllers/CultureController.cs create mode 100644 Project/adminBlazor/adminBlazor/Shared/CultureSelector.razor create mode 100644 Project/adminBlazor/adminBlazor/wwwroot/img/logoTraduction.png diff --git a/Project/adminBlazor/adminBlazor/Controllers/CultureController.cs b/Project/adminBlazor/adminBlazor/Controllers/CultureController.cs new file mode 100644 index 0000000..06c6901 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Controllers/CultureController.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc; + + +/// +/// 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); + } +} \ No newline at end of file diff --git a/Project/adminBlazor/adminBlazor/Program.cs b/Project/adminBlazor/adminBlazor/Program.cs index ade9f6f..918ed6c 100644 --- a/Project/adminBlazor/adminBlazor/Program.cs +++ b/Project/adminBlazor/adminBlazor/Program.cs @@ -7,6 +7,9 @@ using Blazorise.Icons.FontAwesome; using Blazored.LocalStorage; using adminBlazor.Services; using Blazored.Modal; +using Microsoft.AspNetCore.Localization; +using System.Globalization; +using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); builder.Services.AddScoped(); @@ -19,6 +22,23 @@ builder.Services.AddHttpClient(); builder.Services.AddBlazoredLocalStorage(); builder.Services.AddBlazoredModal(); +// 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") }; +}); + builder.Services .AddBlazorise() @@ -42,6 +62,21 @@ 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/Project/adminBlazor/adminBlazor/Shared/CultureSelector.razor b/Project/adminBlazor/adminBlazor/Shared/CultureSelector.razor new file mode 100644 index 0000000..577c261 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/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); + } + } +} diff --git a/Project/adminBlazor/adminBlazor/Shared/MainLayout.razor b/Project/adminBlazor/adminBlazor/Shared/MainLayout.razor index edca698..9f46626 100644 --- a/Project/adminBlazor/adminBlazor/Shared/MainLayout.razor +++ b/Project/adminBlazor/adminBlazor/Shared/MainLayout.razor @@ -5,6 +5,9 @@
diff --git a/Project/adminBlazor/adminBlazor/wwwroot/img/logoTraduction.png b/Project/adminBlazor/adminBlazor/wwwroot/img/logoTraduction.png new file mode 100644 index 0000000000000000000000000000000000000000..743053a4f6e7804a531266413fa201ded9ebd4fa GIT binary patch literal 13870 zcmeHN3s_ZE7T)&-7c4IzhUO#}Lm&wy?BSRW7X?94xsY=4l_-`LG&+byO?8iEijP8k zTNKzhX-+!e_$YM>^M#s$&FH04p%D|s8bwgAUSQVRXYYH@E+BKhX{P!3{66nFXYGIe z>#^55d+);n^T^mcJ@57;gxonaE;@-2ywnlB27Y#baua{FQ=>*i5mKDn!7)h(_r|oi zq!EO?5JZSHmyjFqNU9-ZRyZLSQVHq5nh?Jk`8yK_fMBnA_^6oNg01J5zF9mv^U$Z2 zTgJ>fdh8!%AD5pzeWBuH?d2=iPrSFYB4Ltk0IGmplMOOK!NsVO-l{&ys3RC9ClXWl^-r)$U0eE;;B@1A_I zSQ~65fiIoESife&k(B8hM?bTn%r~@RNJ>RaO6BCt$|*Bz^78HfsJ{N?>6*o>%kBz0 zHTLPNf3ww>9zFTklC&Z3@N?$oSqJ_*^Hum?(_o-#a(rxb_e@V?DBQSb4IL5V z{*9)Kr=eHw40kgj4@M4+jvAHy<+l}It(@>g*O+4qBZB<}|UOFG_Xidw!b^M&U1 zbtm4ObMf$RH$8p4rqSc`UN;LWr=?ppz0(cSq8Gj!She)!2FLhxFUd&OF1H%G>rHqW zu)?bL(i-)qoU;W)tJ15zCfkEa6q!TjrZjoTLsqsAX^%_$WcdFs68p6mza1?Xd>+(0 z_J+28wMJRq`mf%!g!PTqeygG5VC!k?SEZNbt^cacM`mpId%Qk#^R-KPatoW-Jm_?D z)!t?Doqg5ekNKtTa3uCPt+B2T?`qW(?{7vcyrj~PdCSYQ7CSmY1focfX5J5@oA%cw zKws3VavY0zv$XpiX;%mtYLB5@FzwR@D&&_`DIv|Sxm%aZ>;J4jPvqf9UjNIj`&j*l zH1oxhxyhT=f1%@E-canZyrJBV!b8p`bhg0p=v&xdqsZY%Sd^)tbD5hCLBGLfRhIy7 zWD`Vtxm7kxTj*Fu8?KQ661$g51>VtBo!(>*=1mS&;rcF`s)Alv=orji?q~g-9`c?{ zac!C4B}unrg4%rkP+Qamj={9Kg312!iu6aRZ^QdK1M?oDW}t5ZjGDX@hNwABU~i@$ zHNi_7a(7#SpQ4d7ruK@{@%$|DKGmec4ZnR@Z0%^oFZJBp~^a|SlanaOo*3bZR^ zxd~t~G?76ph7y^}Vh9z(VyISo@fd22JcfD`Pl}hslL9-Uc7>gwrf)ljbXQ4Z7yx}n zP72nQtZ+WA$!Jn&`O&1%dY6-e3o$tS3M7XHF-xrY4p7$_FhNVKFjl3n zGhk+-npD`XOCzxxg9h45T^isiYCsUakN|`lOh~KJBW-IM2+~&jBQ0nUXz4q#6~obn zV4zpn(uO91zU2@w2h`<7#^zhq)Dk^7Erucoy~0h@j|Q_1T16-@9TL3NAsw)lfpkC) zc{RvF&?7(Lmua-mXp>x4>iv2j+tgWs6hqWELVVF z!`8-Z`=NW){uouzfV6p5LbrUa1c({l+H6x8UT44nf$KQQOCy=#nAuhhSA~piyxFzq?ri85V9#~5GRoUa#k5Pd^yesSV6a#&096xRb^(J4<=Z(feoongja+tO{7J!W6zXIE8T`1``_hCJeS5BeWX-{e7!Eu6at~~` zC3qkZtjF}H!N&0|BSv;H9RB?b0~h`N%4@p@n$%v%dB;nQog}(ABQt+)L;i~~_}{0l z))evCvQJaAicOq#nxfV0a;~Om4ZED8DSCrlMr(@RWS4=OqI`C#)fBzOF00i=Z?nsN zP>>#`kKy$|H&euy@6J>qxT40*l-i7|JuFIXA-Lb)eDh> z5*Vn%uU-wshr9bXTHp~)-*dBHF%pBX6bzI!)0Mi{XOjV=2*~Bkz1`@gFL^~*2xidi z|8q>PLUC9;0cqWhW?}G_1d8mMVL?;z|AbZdt1AT*Z?s%gFn(_hxcfQ(X|?Cw(aU z;t9SD8Be~E2Zz9v?>a-Zx&t)%c-%dOxXGzNm$x0XkRaFXiuo2Y#C1C>)c`uG@wo$>bZ??Qyqc;^~a7UpI>?#2MR(87aC#S5k@-J4>#l z>~|Y203Q>8(7zQxZxJ|3044~)egg2AufX`20E`!aAp$T@1SScVfdbjDFbFwpf_iffx{Va z0|oYBz;`I{0|s0w`{=`b>_r*l8E_*7hBDwr3f#beTVx*@uvP{RW5D+*Fqi?iP~d6? z{9N{tGlo*ep$xd00`FzOofMeEfOWEuoKXhGF<=n|`ZM4s6qwC`J{{n10UV27d!6`V zGaj1;Cpdlk74PwuonCZ59OWDcdiY_r8Qc4`6*^;GS^2(sLzwEnz|lo6(DrFGccWUf?J7 z>?kTvMO6e|Q(J2gd_N48!!ipk^M#?b--PW#W)B!j-8wM=HP3~iv=}<{L9?S^D2>Sq zKZwa*BMil^QvNyh8E7vBs$P9tyY(s(!TuhEai&ESYLZztz5ILw{em@*JqWXA*x^B6 zH7uj39he)3Z?goe)$SkRk`zmImGM~*I8C@xg9|fE z`A)aubo_ql-UnB*Xktvx1U$bO@GNY5sDqmaUF-$N1LxM_$_~Sm)phbJJT}N3k857c zyms*fcf`z)G12M+z2_qD4w<)yD$Ozo0ETfgAWtfe4*=5GFqt&2q+%Ny{t7N6As>OM z7bhd*1CP$<_fO+}z`bY@YM+nVAK=0lP^fYWb5IB`dRfy#6n;(TAR-r_FpLY|K;a&z za3KmqsSp+)X_go?x-)p4C;5awI|d^c2h-CFg*Gbm<-$oQ?8k+cA&Bh6g-@X{gbQs{ z=);A-Ltz&#w8SFPn+u;up`HtERESfY8Z;Y)*I_nMgDi1~G;rYp6xMK|jS4$*VIB%A zxX>~bk#}<88Wfgtp^Xaf;KH>i{D2EB!w}hl3*STG1}?Nwp(hs>qi{7BTH+CjRYYC+ z5QRBhXrn?s7w$n}HWylkBNFDDj68(GXP1ib*_!KF1*^?S`+VXHjl!eLu6eNGJQN8f8?7EzQW4{e z-?gFD8KI;PY<>r(F??-jlwD~XaZ-i|lyL&(Fp)Azpj;_X?iVTF6)1l#Qr;&}ngz;* zA|?Hh?DXek4%J?^|9dMPRt<+6UXB$T zCHzwx=h&X%aN{iGKe+`p!zznac}C|waN}$Nn|iH=8(yqMqut=fS;^Zkqza?~3evG2 z{ahqZ^{jF!UAIDVDOr-N9_g}F2H}Dt(6~vP56rMKG5WAUbb7{xs?c^C1zD4UcA3wI zm4J`#v^mLiayQ)SGXrd#P5Y8UePMYzwTZRNB5D(A(t1=lHOvc%RpY34 zXy_8jWoTT9>kFE(CjVAMA} zF={_WFDBf0;>i=LwXn1)4@bHie h{yPQ0Gt;L$_2l!d1IFxF?*;%eG-hP<=0T}*{spX~EB*ig literal 0 HcmV?d00001