diff --git a/TaikoWebUI/Components/MainLayout.razor b/TaikoWebUI/Components/MainLayout.razor index 2f7bc6c..7040648 100644 --- a/TaikoWebUI/Components/MainLayout.razor +++ b/TaikoWebUI/Components/MainLayout.razor @@ -1,9 +1,13 @@ @inherits LayoutComponentBase @inject Blazored.LocalStorage.ILocalStorageService LocalStorage @inject AuthService AuthService +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer + @using Microsoft.Extensions.Options; @using TaikoWebUI.Settings; + + @@ -11,6 +15,7 @@ + @@ -46,11 +51,14 @@ { title = UiSettings.Value.Title; } - + protected override async Task OnInitializedAsync() { - - + await base.OnInitializedAsync(); + + BreadcrumbsStateContainer.OnChange += StateHasChanged; + + var hasDrawerOpenEntry = await LocalStorage.ContainKeyAsync("drawerOpen"); if (hasDrawerOpenEntry) @@ -73,16 +81,16 @@ } private async Task DrawerToggle() - { - drawerOpen = !drawerOpen; - await LocalStorage.SetItemAsync("drawerOpen", drawerOpen); - } + { + drawerOpen = !drawerOpen; + await LocalStorage.SetItemAsync("drawerOpen", drawerOpen); + } private async Task ToggleDarkMode() - { - isDarkMode = !isDarkMode; - await LocalStorage.SetItemAsync("isDarkMode", isDarkMode); - } + { + isDarkMode = !isDarkMode; + await LocalStorage.SetItemAsync("isDarkMode", isDarkMode); + } private string DarkModeIcon => isDarkMode ? Icons.Material.Filled.BrightnessLow : Icons.Material.Filled.Brightness2; @@ -102,4 +110,9 @@ PrimaryDarken = Colors.Indigo.Accent1, }, }; + + public void Dispose() + { + BreadcrumbsStateContainer.OnChange -= StateHasChanged; + } } \ No newline at end of file diff --git a/TaikoWebUI/Localization/LocalizationResource.Designer.cs b/TaikoWebUI/Localization/LocalizationResource.Designer.cs index 18c5d09..36af31c 100644 --- a/TaikoWebUI/Localization/LocalizationResource.Designer.cs +++ b/TaikoWebUI/Localization/LocalizationResource.Designer.cs @@ -1,9 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. +// Ce code a été généré par un outil. +// Version du runtime :4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si +// le code est régénéré. // //------------------------------------------------------------------------------ @@ -12,12 +13,12 @@ namespace TaikoWebUI.Localization { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées. /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. + // Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder + // à l'aide d'un outil, tel que ResGen ou Visual Studio. + // Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen + // avec l'option /str ou régénérez votre projet VS. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -32,7 +33,7 @@ namespace TaikoWebUI.Localization { } /// - /// Returns the cached ResourceManager instance used by this class. + /// Retourne l'instance ResourceManager mise en cache utilisée par cette classe. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -46,8 +47,8 @@ namespace TaikoWebUI.Localization { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// Remplace la propriété CurrentUICulture du thread actuel pour toutes + /// les recherches de ressources à l'aide de cette classe de ressource fortement typée. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -60,7 +61,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _1_Star { get { @@ -69,7 +70,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _10_Star { get { @@ -78,7 +79,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _2_Star { get { @@ -87,7 +88,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _3_Star { get { @@ -96,7 +97,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _4_Star { get { @@ -105,7 +106,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _5_Star { get { @@ -114,7 +115,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _6_Star { get { @@ -123,7 +124,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _7_Star { get { @@ -132,7 +133,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _8_Star { get { @@ -141,7 +142,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _8bittaiko { get { @@ -150,7 +151,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _9_Star { get { @@ -159,7 +160,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string _Invite_Code__Optional__ { get { @@ -168,7 +169,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code { get { @@ -177,7 +178,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Already_Bound_Error { get { @@ -186,7 +187,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Bound_Success { get { @@ -195,7 +196,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Delete_Confirm { get { @@ -204,7 +205,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Delete_Last_Access_Code_Error { get { @@ -213,7 +214,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Delete_Success { get { @@ -222,7 +223,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Empty_Error { get { @@ -231,7 +232,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_is_Required { get { @@ -240,7 +241,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Not_Admin_Error { get { @@ -249,7 +250,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Not_Registered_Error { get { @@ -258,7 +259,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Code_Upper_Limit_Error { get { @@ -267,7 +268,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Access_Codes { get { @@ -276,7 +277,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Achievement_Panel { get { @@ -285,7 +286,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Achievement_Panel_Difficulty { get { @@ -294,7 +295,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Add { get { @@ -303,7 +304,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Add_Access_Code { get { @@ -312,7 +313,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string AI_Battle_Data { get { @@ -321,7 +322,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Akemi { get { @@ -330,7 +331,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string And { get { @@ -339,7 +340,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Bad { get { @@ -348,7 +349,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Best_Crown { get { @@ -357,7 +358,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Best_Rank { get { @@ -366,7 +367,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Cancel { get { @@ -375,7 +376,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Change_Password_Different_Confirm_Password_Error { get { @@ -384,7 +385,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Change_Password_Success { get { @@ -393,7 +394,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Change_Password_Wrong_Current_Password_Error { get { @@ -402,7 +403,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Chinese_Simplified { get { @@ -411,7 +412,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Chinese_Traditional { get { @@ -420,7 +421,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Chojin { get { @@ -429,7 +430,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Clapping { get { @@ -438,7 +439,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Confirm_New_Password { get { @@ -447,7 +448,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Confirm_Password { get { @@ -456,7 +457,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Confirm_Password_is_Required { get { @@ -465,7 +466,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Conga { get { @@ -474,7 +475,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Copy_to_Clipboard { get { @@ -483,7 +484,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Course_Songs { get { @@ -492,7 +493,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Currently_Selected_ { get { @@ -501,7 +502,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Dani_Dojo { get { @@ -510,7 +511,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Dashboard { get { @@ -519,7 +520,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to MM/dd/yyyy h:mm:ss tt. + /// Recherche une chaîne localisée semblable à MM/dd/yyyy h:mm:ss tt. /// internal static string DateFormat { get { @@ -528,7 +529,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Default { get { @@ -537,7 +538,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Delete { get { @@ -546,7 +547,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Delete_User_Confirm { get { @@ -555,7 +556,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Delete_User_Success { get { @@ -564,7 +565,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Dialog_OK { get { @@ -573,7 +574,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Difficulty { get { @@ -582,7 +583,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Drum { get { @@ -591,7 +592,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Easy { get { @@ -600,7 +601,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Edit_Profile { get { @@ -609,7 +610,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Eighth_Dan { get { @@ -618,7 +619,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Electric_Guitar { get { @@ -627,7 +628,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string English { get { @@ -636,7 +637,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Error { get { @@ -645,7 +646,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Fifth_Dan { get { @@ -654,7 +655,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Fifth_Kyuu { get { @@ -663,7 +664,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Filter_by_Genre { get { @@ -672,7 +673,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string First_Dan { get { @@ -681,7 +682,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string First_Kyuu { get { @@ -690,7 +691,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Fourth_Dan { get { @@ -699,7 +700,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Fourth_Kyuu { get { @@ -708,7 +709,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Funassyi { get { @@ -717,7 +718,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Gaiden { get { @@ -726,7 +727,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Generate_Invite_Code { get { @@ -735,7 +736,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Gold_Donderful_Combo { get { @@ -744,7 +745,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Gold_Full_Combo { get { @@ -753,7 +754,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Hard { get { @@ -762,7 +763,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string High_Scores { get { @@ -771,7 +772,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string ID { get { @@ -780,7 +781,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Inuneko { get { @@ -789,7 +790,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Invite_Code { get { @@ -798,7 +799,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Isogai { get { @@ -807,7 +808,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Japanese { get { @@ -816,7 +817,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Korean { get { @@ -825,7 +826,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Kuroto { get { @@ -834,7 +835,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Last_Play_Date { get { @@ -843,7 +844,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Last_Play_Time_5_Min_Around_Credit_End_ { get { @@ -852,7 +853,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Leaderboard { get { @@ -861,7 +862,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Log_In { get { @@ -870,7 +871,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Log_In_First { get { @@ -879,7 +880,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Log_Out { get { @@ -888,7 +889,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Log_Out_Confirm { get { @@ -897,7 +898,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Login_Only_Admin_Error { get { @@ -906,7 +907,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Login_Wrong_Password_Error { get { @@ -915,7 +916,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Matsuri { get { @@ -924,7 +925,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Meijin { get { @@ -933,7 +934,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Mekadon { get { @@ -942,7 +943,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Messy { get { @@ -951,7 +952,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string New_Access_Code { get { @@ -960,7 +961,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string New_Password { get { @@ -969,7 +970,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Ninth_Dan { get { @@ -978,7 +979,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string No_Data { get { @@ -987,7 +988,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string No_Play_History_Found { get { @@ -996,7 +997,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string None { get { @@ -1005,7 +1006,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Normal { get { @@ -1014,7 +1015,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Not_Cleared { get { @@ -1023,7 +1024,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Not_Donderful_Combo { get { @@ -1032,7 +1033,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Not_Full_Combo { get { @@ -1041,7 +1042,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Not_Logged_In_Error { get { @@ -1050,7 +1051,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Not_Passed { get { @@ -1059,7 +1060,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Old_Password { get { @@ -1068,7 +1069,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Oni { get { @@ -1077,7 +1078,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string other_access_code_s_ { get { @@ -1086,7 +1087,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Password { get { @@ -1095,7 +1096,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Password_is_Required { get { @@ -1104,7 +1105,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Play_Data { get { @@ -1113,7 +1114,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Play_History { get { @@ -1122,7 +1123,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Play_Time { get { @@ -1131,7 +1132,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Player_Titles { get { @@ -1149,7 +1150,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string QR_Code { get { @@ -1158,7 +1159,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Rank { get { @@ -1167,7 +1168,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Red_Donderful_Combo { get { @@ -1176,7 +1177,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Red_Full_Combo { get { @@ -1185,7 +1186,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Register { get { @@ -1194,7 +1195,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Register_Already_Registered_Error { get { @@ -1203,7 +1204,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Register_Different_Confirm_Password_Error { get { @@ -1212,7 +1213,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Register_Only_Admin_Error { get { @@ -1221,7 +1222,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Register_Success { get { @@ -1230,7 +1231,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Register_Wrong_Last_Play_Time_Error { get { @@ -1239,7 +1240,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Reset { get { @@ -1248,7 +1249,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Reset_Password_Confirm_1 { get { @@ -1257,7 +1258,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Reset_Password_Confirm_2 { get { @@ -1266,7 +1267,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Rows_Per_Page_ { get { @@ -1275,7 +1276,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Search { get { @@ -1302,7 +1303,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Search_by_Title_or_Artist { get { @@ -1311,7 +1312,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Second_Dan { get { @@ -1320,7 +1321,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Second_Kyuu { get { @@ -1329,7 +1330,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Set_Up_Each_Time { get { @@ -1338,7 +1339,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Settings { get { @@ -1347,7 +1348,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Seventh_Dan { get { @@ -1356,7 +1357,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Shuriken { get { @@ -1365,7 +1366,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Sixth_Dan { get { @@ -1374,7 +1375,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Skip_Song { get { @@ -1383,7 +1384,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Song_List { get { @@ -1392,7 +1393,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Song_Name { get { @@ -1401,7 +1402,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Song_Number { get { @@ -1410,7 +1411,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Song_Title___Artist { get { @@ -1419,7 +1420,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Soya { get { @@ -1428,7 +1429,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Success { get { @@ -1437,7 +1438,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Synthdrum { get { @@ -1446,7 +1447,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Taiko { get { @@ -1455,7 +1456,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Tambourine { get { @@ -1464,7 +1465,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Tatsujin { get { @@ -1473,7 +1474,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Tenth_Dan { get { @@ -1482,7 +1483,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Third_Dan { get { @@ -1491,7 +1492,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Third_Kyuu { get { @@ -1500,7 +1501,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Total_Credits_Played { get { @@ -1509,7 +1510,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string UI { get { @@ -1518,7 +1519,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Unknown_Access_Code_Error { get { @@ -1527,7 +1528,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Unknown_Error { get { @@ -1536,7 +1537,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Unregister { get { @@ -1545,7 +1546,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Ura_Oni { get { @@ -1554,7 +1555,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string UraOni { get { @@ -1563,7 +1564,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string User { get { @@ -1572,7 +1573,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string User_ID { get { @@ -1581,7 +1582,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Users { get { @@ -1590,7 +1591,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string View_Play_Data { get { @@ -1599,7 +1600,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Wadadon { get { @@ -1608,7 +1609,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Whimsical { get { @@ -1617,7 +1618,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Wonderfultaiko { get { @@ -1626,7 +1627,7 @@ namespace TaikoWebUI.Localization { } /// - /// Looks up a localized string similar to . + /// Recherche une chaîne localisée semblable à . /// internal static string Wrap { get { diff --git a/TaikoWebUI/Localization/LocalizationResource.fr-FR.resx b/TaikoWebUI/Localization/LocalizationResource.fr-FR.resx index 06927da..5f1ae20 100644 --- a/TaikoWebUI/Localization/LocalizationResource.fr-FR.resx +++ b/TaikoWebUI/Localization/LocalizationResource.fr-FR.resx @@ -1,689 +1,825 @@  - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - 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 - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + Tableau de bord - + Utilisateurs - - Editer le profil - - - Utilisateur - - - Voir les données de jeu - - - Meilleurs Scores - - - Afficher le Code QR - - - Codes d'accès - - - Changer le mot de passe - - - Réinitialiser le mot de passe - - - Supprimer l'utilisateur - - - Bienvenue sur TaikoWebUI ! - - - Chart - - - Niveau - - - Genre - - - Meilleur score - - - Meilleure couronne - - - Meilleur rank - - - Good - - - OK - - - Bad - - - Drumroll - - - Combo MAX - - - Données du mode IA Battle - - - Joué la dernière fois - - - Nombre total de parties - - - Total Clears - - - Nombre total de Full Combos - - - Nombre total de Combos Donderful - - - Charts - - - Cacher - - - Afficher - - - Numéro de section - - - Résultats - - - Score - - - Couronnes - - - Pas de données - - - Veuillez vous connecter en cliquant d'abord sur l'onglet “Utilisateurs”. - - - Total Hits - - - Jauge d'âme - - - Chansons - - - Conditions - - - Red Clear - - - Gold - - - Not Cleared - - - Pass - - - Totaux - - - Details - - - Stage - - - Dani Dojo - - + Profil - - Options de profil + + Utilisateur - - Costume - - - Options de costume - - - Options de jeu - - - Joueur - - - Tableau d'achèvements - - - Sauvegarder - - - Langue - - - Nom - - - Titre - - - Décor de Plaque - - - Difficulté du tableau d'achèvements - - - Afficher le Dan sur la plaque - - - Afficher le tableau d'achèvements - - - Mode recherche : Difficulté - - - Mode recherche : Etoiles - - - Mode recherche : Tri - - - Sélectionner un titre - - - Tête - - - Corps - - - Visage - - - Kigurumi - - - Puchi - - - Couleur du Corps - - - Couleur du Visage - - - Couleur des Membres - - - Disparition - - - Inverse - - - Abandon - - - Voix - - - Vitesse - - - Aléatoire - - - Son de tambour - - - Position des notes - - - Êtes-vous sûr de vouloir réinitialiser le mot de passe de cet utilisateur ? - - - Le mot de passe actuel de l'utilisateur sera alors supprimé et l'utilisateur devra s'inscrire à nouveau. - - - dd/MM/yyyy h:mm:ss tt - - - Créer un code d'invitation - - - Inscription - - - Connexion - - - Déconnexion - - + Données de jeu - - Ajouter un code d'accès + + Meilleurs Scores - - Nouveau code d'accès + + Afficher le Code QR - - Supprimer + + Codes d'accès - - Code d'accès + + Changer le mot de passe - - Ancien mot de passe + + Réinitialiser le mot de passe - - Nouveau mot de passe + + Supprimer l'utilisateur - - Confirmer le nouveau mot de passe + + Bienvenue sur TaikoWebUI ! - + + Musique + + + Niveau + + + Genre + + + Meilleur score + + + Meilleure couronne + + + Meilleur rank + + + Good + + OK - + + Bad + + + Drumroll + + + Combo MAX + + + Données du mode IA Battle + + + Joué la dernière fois + + + Nombre total de parties + + + Total Clears + + + Nombre total de Full Combos + + + Nombre total de Combos Donderful + + + Musiques + + + Cacher + + + Afficher + + + Numéro de section + + + Résultats + + + Score + + + Couronnes + + + Pas de données + + + Veuillez vous connecter en cliquant d'abord sur l'onglet “Utilisateurs”. + + + Total Hits + + + Jauge d'âme + + + Musiques + + + Conditions + + + Red Clear + + + Gold + + + Pas Clear + + + Pass + + + Totaux + + + Details + + + Stage + + + Dani Dojo + + + Profil + + + Options de profil + + + Costume + + + Options de costume + + + Options de jeu + + + Joueur + + + Tableau de reussite + + + Sauvegarder + + + Langue + + + Nom + + + Titre + + + Décor de Plaque + + + Difficulté du tableau de réussite + + + Afficher le Dan sur la plaque + + + Afficher le tableau de reussite + + + Mode recherche : Difficulté + + + Mode recherche : Etoiles + + + Mode recherche : Tri + + + Sélectionner un titre + + + Tête + + + Corps + + + Visage + + + Kigurumi + + + Puchi + + + Couleur du Corps + + + Couleur du Visage + + + Couleur des Membres + + + Disparition + + + Inverser + + + Voix + + + Vitesse + + + Aléatoire + + + Son de tambour + + + Position des notes + + + Êtes-vous sûr de vouloir réinitialiser le mot de passe de cet utilisateur ? + + + Le mot de passe actuel de l'utilisateur sera alors supprimé et l'utilisateur devra s'inscrire à nouveau. + + + dd/MM/yyyy h:mm:ss tt + + + Créer un code d'invitation + + + Inscription + + + Connexion + + + Déconnexion + + + Données de jeu + + + Ajouter un code d'accès + + + Nouveau code d'accès + + + Supprimer + + + Code d'accès + + + Ancien mot de passe + + + Nouveau mot de passe + + + Confirmer le nouveau mot de passe + + + OK + + Code QR - + Chojin - + 8ème Dan - + 5ème Dan - + 5ème Kyuu - + 1er Dan - + 1er Kyuu - + 4ème Dan - + 4ème Kyuu - + Gaiden - + Kuroto - + Meijin - + 9ème Dan - + 2ème Dan - + 2ème Kyuu - + 7ème Dan - + 6ème Dan - + Tatsujin - + 10ème Dan - + 3ème Dan - + 3ème Kyuu - + Gold Full Combo - + Red Donderful Combo - + Red Full Combo - + Gold Donderful Combo - - Titre / Artiste de la chanson + + Titre / Artiste de la musique - + Recherche par titre ou par artiste - + Filtrer par Genre - + Historique de jeu - + Aucun historique de jeu trouvé - + Mot de passe - + Paramètres - + Date de jeu - + Rank - + Difficulté - + Chart ID - + Recherche par titre, artiste ou date - + Désinscription - + et - + autre(s) code(s) d'accès - + Copier dans le presse papier - + Code d'invitation - + Erreur - + Le code d'accès est requis - - " Code d'invitation (facultatif) " + + "Code d'invitation (facultatif)" - + Date de dernière partie - - Joué la dernière fois (5 minutes près vers la fin du crédit) + + Joué la dernière fois (à 5 minutes près de la fin du crédit) - + Mot de passe est requis - + Confirmer le mot de passe - - La confirmation du mot de passe est requise + + Vous devez confirmer le mot de passe - + Erreur inconnue - + Succès - + Ura - - Extreme + + Oni - + Difficile - + Normal - + Facile - + Rangées par page : - + UI - + Ajouter - + Nouveau code d'accès lié avec succès. - + Vous n'êtes pas connecté.<br />Veuillez d'abord vous connecter et réessayer. - + Le nombre maximal de code d'accès est atteint.<br />Veuillez d'abord supprimer un code d'accès. - + Ce code d'accès a déjà été lié. - + Le code d'accès ne peut pas être vide.<br />Veuillez saisir un code d'accès valide. - + Cette action n'est pas autorisée.<br />Seuls les administrateur pouvent modifier le code d'accès d'un autre utilisateur. - + Seuls les administrateurs peuvent se connecter. - + Mot de passe changé ! - + La confirmation du nouveau mot de passe est différent du nouveau mot de passe.<br />Veuillez réessayer. - + Code d'accès inconnu.<br />Veuillez jouer une partie avec ce code d'accès et réessayer. - + Le mot de passe actuel est erroné.<br />>Veuillez réessayer. - + Code d'accès non enregistré.<br />Veuillez d'abord vous inscrire et réessayer. - + Mot de passe erroné.<br />Vérifiez à nouveau. - + Seuls les administrateurs peuvent s'inscrire. - + Code d'accès enregistré avec succès. - + Le mot de passe de confirmation est différent.<br />Veuillez réessayer. - + Le code d'accès est déjà enregistré.<br />Veuillez utiliser le mot de passe défini pour vous connecter. - + Mauvaise date de dernière partie.<br />Si vous avez oublié la date de votre derniere partie, veuillez en jouer une autre avec ce code d'accès ou contacter l'administrateur du serveur! - + Annuler - + Impossible de supprimer le dernier code d'accès de l'utilisateur. - + Code d'accès supprimé avec succès. - + ID - + Êtes-vous sûr de vouloir supprimer ce code d'accès ? - + Actuellement sélectionné : - + Réinitialiser - + Voulez-vous vraiment supprimer les données de cet utilisateur ? <br />Toutes les données associées seront supprimées et ne pourront pas être récupérées ! - - Utilisateur supprimé ! + + Utilisateur supprimé. + + + ★ 1 + + + ★ 2 + + + ★ 3 + + + ★ 4 + + + ★ 5 + + + ★ 6 + + + ★ 7 + + + ★ 8 + + + ★ 9 + + + ★ 10 + + + Non validé + + + ID de l'utilisateur + + + Classement + + + Êtes-vous sûr de vouloir vous déconnecter ? + + + Taiko 8 bits + + + Akemi + + + Chinois simplifié + + + Chinois traditionnel + + + Applaudissements + + + Conga + + + Défaut + + + Tambour + + + Désactivé + + + Fantaisiste + + + Désordonné + + + Taiko + + + Festival + + + Chiens & Chats + + + Taiko Deluxe + + + Tambourin + + + Wadadon + + + Oh hisse + + + Don Mecha + + + Funassyi + + + Rap + + + Hosogai + + + Tambour Synthétique + + + Shuriken + + + Bubble Pop + + + Guitare électrique + + + Ura + + + Configurer à chaque fois + + + Pas Full Combo + + + Pas Donderful Combo + + + Japonais + + + Anglais + + + Coréen + + + Passer la chanson \ No newline at end of file diff --git a/TaikoWebUI/Pages/AccessCode.razor b/TaikoWebUI/Pages/AccessCode.razor index 88f26b7..07437f4 100644 --- a/TaikoWebUI/Pages/AccessCode.razor +++ b/TaikoWebUI/Pages/AccessCode.razor @@ -3,6 +3,7 @@ @inject IDialogService DialogService @inject AuthService AuthService @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @inject Utilities.StringUtil StringUtil; @if (AuthService.LoginRequired && (!AuthService.IsLoggedIn || (AuthService.GetLoggedInBaid() != Baid && !AuthService.IsAdmin))) { @@ -13,8 +14,6 @@ } else { - - @Localizer["Access Codes"] diff --git a/TaikoWebUI/Pages/AccessCode.razor.cs b/TaikoWebUI/Pages/AccessCode.razor.cs index 8c51583..940b50b 100644 --- a/TaikoWebUI/Pages/AccessCode.razor.cs +++ b/TaikoWebUI/Pages/AccessCode.razor.cs @@ -14,8 +14,6 @@ public partial class AccessCode private UserSetting? userSetting; - private readonly List breadcrumbs = new(); - protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); @@ -29,16 +27,12 @@ public partial class AccessCode userSetting = await Client.GetFromJsonAsync($"api/UserSettings/{Baid}"); - if (AuthService.IsLoggedIn && !AuthService.IsAdmin) - { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); - } - else - { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); - } - breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); - breadcrumbs.Add(new BreadcrumbItem(Localizer["Access Codes"], href: $"/Users/{Baid}/AccessCode", disabled: false)); + BreadcrumbsStateContainer.breadcrumbs.Clear(); + if (AuthService.IsLoggedIn && !AuthService.IsAdmin) BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + else BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Access Codes"], href: $"/Users/{Baid}/AccessCode", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); } private async Task InitializeUser() diff --git a/TaikoWebUI/Pages/ChangePassword.razor b/TaikoWebUI/Pages/ChangePassword.razor index 0bf738e..dbe9c53 100644 --- a/TaikoWebUI/Pages/ChangePassword.razor +++ b/TaikoWebUI/Pages/ChangePassword.razor @@ -2,6 +2,7 @@ @inject IDialogService DialogService @inject AuthService AuthService @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @page "/ChangePassword" diff --git a/TaikoWebUI/Pages/ChangePassword.razor.cs b/TaikoWebUI/Pages/ChangePassword.razor.cs index 33570a3..99d83be 100644 --- a/TaikoWebUI/Pages/ChangePassword.razor.cs +++ b/TaikoWebUI/Pages/ChangePassword.razor.cs @@ -16,6 +16,10 @@ public partial class ChangePassword { await AuthService.LoginWithAuthToken(); } + + BreadcrumbsStateContainer.breadcrumbs.Clear(); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Change Password"], href: "/")); + BreadcrumbsStateContainer.NotifyStateChanged(); } private async Task OnChangePassword() diff --git a/TaikoWebUI/Pages/DaniDojo.razor b/TaikoWebUI/Pages/DaniDojo.razor index d4cde03..7c0a3e8 100644 --- a/TaikoWebUI/Pages/DaniDojo.razor +++ b/TaikoWebUI/Pages/DaniDojo.razor @@ -6,6 +6,7 @@ @inject AuthService AuthService @inject NavigationManager NavigationManager @inject ILocalStorageService LocalStorage +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @page "/Users/{baid:int}/DaniDojo" @@ -22,8 +23,7 @@ } else { - - @Localizer["Dani Dojo"] + diff --git a/TaikoWebUI/Pages/DaniDojo.razor.cs b/TaikoWebUI/Pages/DaniDojo.razor.cs index 960629f..d5480e0 100644 --- a/TaikoWebUI/Pages/DaniDojo.razor.cs +++ b/TaikoWebUI/Pages/DaniDojo.razor.cs @@ -17,12 +17,10 @@ public partial class DaniDojo private Dictionary musicDetailDictionary = new(); private ImmutableDictionary danMap = ImmutableDictionary.Empty; - private readonly List breadcrumbs = new(); - protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - + if (AuthService.LoginRequired && !AuthService.IsLoggedIn) { await AuthService.LoginWithAuthToken(); @@ -39,19 +37,16 @@ public partial class DaniDojo SongNameLanguage = await LocalStorage.GetItemAsync("songNameLanguage"); userSetting = await Client.GetFromJsonAsync($"api/UserSettings/{Baid}"); - + musicDetailDictionary = await GameDataService.GetMusicDetailDictionary(); - if (AuthService.IsLoggedIn && !AuthService.IsAdmin) - { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); - } - else - { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); - }; - breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dani Dojo"], href: $"/Users/{Baid}/DaniDojo", disabled: false)); + // Breadcrumbs + BreadcrumbsStateContainer.breadcrumbs.Clear(); + if (AuthService.IsLoggedIn && !AuthService.IsAdmin) BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + else BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dani Dojo"], href: $"/Users/{Baid}/DaniDojo", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); } private string GetDanClearStateString(DanClearState danClearState) @@ -111,7 +106,7 @@ public partial class DaniDojo private static uint GetSongBestFromData(DanConditionType type, DanBestData data, int songNumber) { songNumber.Throw().IfOutOfRange(0, 2); - + return type switch { DanConditionType.SoulGauge => throw new ArgumentException("Soul gauge should not be here"), diff --git a/TaikoWebUI/Pages/Dashboard.razor b/TaikoWebUI/Pages/Dashboard.razor index 29a5ef6..5cf86b9 100644 --- a/TaikoWebUI/Pages/Dashboard.razor +++ b/TaikoWebUI/Pages/Dashboard.razor @@ -1,15 +1,15 @@ @page "/" -@inject HttpClient Http @using Markdig +@inject HttpClient Http +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer -@Localizer["Dashboard"]
@if (isLoading) { - + } else { @@ -48,5 +48,9 @@ } isLoading = false; + + BreadcrumbsStateContainer.breadcrumbs.Clear(); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + BreadcrumbsStateContainer.NotifyStateChanged(); } } \ No newline at end of file diff --git a/TaikoWebUI/Pages/HighScores.razor b/TaikoWebUI/Pages/HighScores.razor index eb2735e..1df9677 100644 --- a/TaikoWebUI/Pages/HighScores.razor +++ b/TaikoWebUI/Pages/HighScores.razor @@ -4,13 +4,11 @@ @inject HttpClient Client @inject AuthService AuthService @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @inject Blazored.LocalStorage.ILocalStorageService LocalStorage @page "/Users/{baid:int}/HighScores" - -@Localizer["High Scores"] - @if (response is null) { diff --git a/TaikoWebUI/Pages/HighScores.razor.cs b/TaikoWebUI/Pages/HighScores.razor.cs index 7a2ceac..8529f3c 100644 --- a/TaikoWebUI/Pages/HighScores.razor.cs +++ b/TaikoWebUI/Pages/HighScores.razor.cs @@ -8,8 +8,6 @@ public partial class HighScores private SongBestResponse? response; private UserSetting? userSetting; private Dictionary> songBestDataMap = new(); - - private readonly List breadcrumbs = new(); private int selectedDifficultyTab; private Dictionary musicDetailDictionary = new(); @@ -51,16 +49,18 @@ public partial class HighScores selectedDifficultyTab = await LocalStorage.GetItemAsync($"highScoresTab"); // Breadcrumbs + BreadcrumbsStateContainer.breadcrumbs.Clear(); if (AuthService.IsLoggedIn && !AuthService.IsAdmin) { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); } else { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); }; - breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); - breadcrumbs.Add(new BreadcrumbItem(Localizer["High Scores"], href: $"/Users/{Baid}/HighScores", disabled: false)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["High Scores"], href: $"/Users/{Baid}/HighScores", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); } private async Task OnFavoriteToggled(SongBestData data) diff --git a/TaikoWebUI/Pages/Login.razor b/TaikoWebUI/Pages/Login.razor index 5c1fd49..741d27b 100644 --- a/TaikoWebUI/Pages/Login.razor +++ b/TaikoWebUI/Pages/Login.razor @@ -2,6 +2,7 @@ @inject IDialogService DialogService @inject AuthService AuthService @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @page "/Login" diff --git a/TaikoWebUI/Pages/Login.razor.cs b/TaikoWebUI/Pages/Login.razor.cs index bc4a7e2..be4cdaf 100644 --- a/TaikoWebUI/Pages/Login.razor.cs +++ b/TaikoWebUI/Pages/Login.razor.cs @@ -14,6 +14,10 @@ public partial class Login { await AuthService.LoginWithAuthToken(); } + + BreadcrumbsStateContainer.breadcrumbs.Clear(); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Log In"], href: "/Login")); + BreadcrumbsStateContainer.NotifyStateChanged(); } private async Task OnLogin() diff --git a/TaikoWebUI/Pages/PlayHistory.razor b/TaikoWebUI/Pages/PlayHistory.razor index 1882afd..c6d4819 100644 --- a/TaikoWebUI/Pages/PlayHistory.razor +++ b/TaikoWebUI/Pages/PlayHistory.razor @@ -6,12 +6,10 @@ @inject IJSRuntime JsRuntime @inject NavigationManager NavigationManager @inject ILocalStorageService LocalStorage +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @page "/Users/{baid:int}/PlayHistory" - -@Localizer["Play History"] - @if (response is null) { @@ -62,7 +60,7 @@ -
+
@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(context[0].PlayTime.ToString(Localizer["DateFormat"])) @@ -104,7 +102,7 @@ @songHistoryData.MusicArtist
-
+ @*
-
+
*@ diff --git a/TaikoWebUI/Pages/PlayHistory.razor.cs b/TaikoWebUI/Pages/PlayHistory.razor.cs index c0d29a1..d8638a8 100644 --- a/TaikoWebUI/Pages/PlayHistory.razor.cs +++ b/TaikoWebUI/Pages/PlayHistory.razor.cs @@ -1,5 +1,6 @@ using System.Globalization; using Microsoft.JSInterop; +using SharedProject.Models; namespace TaikoWebUI.Pages; @@ -15,10 +16,9 @@ public partial class PlayHistory private string? songNameLanguage; private SongHistoryResponse? response; + private UserSetting? userSetting; private Dictionary> songHistoryDataMap = new(); - - private readonly List breadcrumbs = new(); private Dictionary musicDetailDictionary = new(); @@ -34,7 +34,9 @@ public partial class PlayHistory response = await Client.GetFromJsonAsync($"api/PlayHistory/{(uint)Baid}"); response.ThrowIfNull(); - + + userSetting = await Client.GetFromJsonAsync($"api/UserSettings/{Baid}"); + songNameLanguage = await LocalStorage.GetItemAsync("songNameLanguage"); musicDetailDictionary = await GameDataService.GetMusicDetailDictionary(); @@ -54,6 +56,14 @@ public partial class PlayHistory { songHistoryDataList.Sort((data1, data2) => data1.SongNumber.CompareTo(data2.SongNumber)); } + + //breadcrumbs + BreadcrumbsStateContainer.breadcrumbs.Clear(); + if (AuthService.IsLoggedIn && !AuthService.IsAdmin) BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + else BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Play History"], href: $"/Users/{Baid}/PlayHistory", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); } private static string GetCrownText(CrownType crown) diff --git a/TaikoWebUI/Pages/Profile.razor b/TaikoWebUI/Pages/Profile.razor index 5b5f8ca..d71b68e 100644 --- a/TaikoWebUI/Pages/Profile.razor +++ b/TaikoWebUI/Pages/Profile.razor @@ -5,6 +5,7 @@ @inject AuthService AuthService @inject IJSRuntime JsRuntime @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @if (response is not null) { @@ -21,8 +22,6 @@ } else { - - @Localizer["Profile"] diff --git a/TaikoWebUI/Pages/Profile.razor.cs b/TaikoWebUI/Pages/Profile.razor.cs index 5364e7e..7578a11 100644 --- a/TaikoWebUI/Pages/Profile.razor.cs +++ b/TaikoWebUI/Pages/Profile.razor.cs @@ -169,8 +169,6 @@ public partial class Profile "Not Cleared", "Not Full Combo", "Not Donderful Combo" }; - private readonly List breadcrumbs = new(); - private Dictionary> songBestDataMap = new(); private Difficulty highestDifficulty = Difficulty.Easy; @@ -208,17 +206,19 @@ public partial class Profile musicDetailDictionary = await GameDataService.GetMusicDetailDictionary(); + BreadcrumbsStateContainer.breadcrumbs.Clear(); if (AuthService.IsLoggedIn && !AuthService.IsAdmin) { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); } else { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); } - breadcrumbs.Add(new BreadcrumbItem($"{response.MyDonName}", href: null, disabled: true)); - breadcrumbs.Add(new BreadcrumbItem(Localizer["Profile"], href: $"/Users/{Baid}/Profile", disabled: false)); - + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{response.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Profile"], href: $"/Users/{Baid}/Profile", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); + costumeList = await GameDataService.GetCostumeList(); titleDictionary = await GameDataService.GetTitleDictionary(); lockedCostumeDataDictionary = await GameDataService.GetLockedCostumeDataDictionary(); @@ -374,7 +374,7 @@ public partial class Profile // Adjust breadcrumb if name is changed if (response != null) { - breadcrumbs[^2] = new BreadcrumbItem($"{response.MyDonName}", href: null, disabled: true); + BreadcrumbsStateContainer.breadcrumbs[^2] = new BreadcrumbItem($"{response.MyDonName}", href: null, disabled: true); } } diff --git a/TaikoWebUI/Pages/Register.razor b/TaikoWebUI/Pages/Register.razor index 4f00d99..01e4d3c 100644 --- a/TaikoWebUI/Pages/Register.razor +++ b/TaikoWebUI/Pages/Register.razor @@ -1,6 +1,7 @@ @inject IDialogService DialogService @inject AuthService AuthService @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @page "/Register" diff --git a/TaikoWebUI/Pages/Register.razor.cs b/TaikoWebUI/Pages/Register.razor.cs index 5514ef0..68027fa 100644 --- a/TaikoWebUI/Pages/Register.razor.cs +++ b/TaikoWebUI/Pages/Register.razor.cs @@ -16,6 +16,10 @@ public partial class Register protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); + + BreadcrumbsStateContainer.breadcrumbs.Clear(); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Register"], href: "/Register")); + BreadcrumbsStateContainer.NotifyStateChanged(); } private async Task OnRegister() diff --git a/TaikoWebUI/Pages/Song.razor b/TaikoWebUI/Pages/Song.razor index a8b4a34..0db1846 100644 --- a/TaikoWebUI/Pages/Song.razor +++ b/TaikoWebUI/Pages/Song.razor @@ -7,16 +7,22 @@ @inject AuthService AuthService @inject NavigationManager NavigationManager @inject ILocalStorageService LocalStorage +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer -@if (AuthService.LoginRequired && (!AuthService.IsLoggedIn || (AuthService.GetLoggedInBaid() != Baid && !AuthService.IsAdmin))) +@if (response is null) { - NavigationManager.NavigateTo(AuthService.IsLoggedIn ? "/" : "/Login"); + + + } else { - if (response is not null) + @if (AuthService.LoginRequired && (!AuthService.IsLoggedIn || (AuthService.GetLoggedInBaid() != Baid && !AuthService.IsAdmin))) + { + NavigationManager.NavigateTo(AuthService.IsLoggedIn ? "/" : "/Login"); + } + else { - @songTitle @songArtist diff --git a/TaikoWebUI/Pages/Song.razor.cs b/TaikoWebUI/Pages/Song.razor.cs index c447a6a..70e5476 100644 --- a/TaikoWebUI/Pages/Song.razor.cs +++ b/TaikoWebUI/Pages/Song.razor.cs @@ -11,7 +11,6 @@ public partial class Song private UserSetting? userSetting; private SongHistoryResponse? response; private List? songHistoryData; - private readonly List breadcrumbs = new(); private string songTitle = string.Empty; private string songArtist = string.Empty; @@ -19,7 +18,7 @@ public partial class Song protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - + if (AuthService.LoginRequired && !AuthService.IsLoggedIn) { await AuthService.LoginWithAuthToken(); @@ -32,7 +31,7 @@ public partial class Song // Get user settings userSetting = await Client.GetFromJsonAsync($"api/UserSettings/{Baid}"); - + var musicDetailDictionary = await GameDataService.GetMusicDetailDictionary(); // Get song title and artist @@ -42,21 +41,14 @@ public partial class Song // Breadcrumbs var formattedSongTitle = songTitle; - if (formattedSongTitle.Length > 20) - { - formattedSongTitle = string.Concat(formattedSongTitle.AsSpan(0, 20), "..."); - } + if (formattedSongTitle.Length > 20) formattedSongTitle = string.Concat(formattedSongTitle.AsSpan(0, 20), "..."); - if (AuthService.IsLoggedIn && !AuthService.IsAdmin) - { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); - } - else - { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); - }; - breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); - breadcrumbs.Add(new BreadcrumbItem(Localizer["Song List"], href: $"/Users/{Baid}/Songs", disabled: false)); - breadcrumbs.Add(new BreadcrumbItem(formattedSongTitle, href: $"/Users/{Baid}/Songs/{SongId}", disabled: false)); + BreadcrumbsStateContainer.breadcrumbs.Clear(); + if (AuthService.IsLoggedIn && !AuthService.IsAdmin) BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + else BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Song List"], href: $"/Users/{Baid}/Songs", disabled: false)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(formattedSongTitle, href: $"/Users/{Baid}/Songs/{SongId}", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); } } \ No newline at end of file diff --git a/TaikoWebUI/Pages/SongList.razor b/TaikoWebUI/Pages/SongList.razor index 8b9f3d7..88b97ac 100644 --- a/TaikoWebUI/Pages/SongList.razor +++ b/TaikoWebUI/Pages/SongList.razor @@ -6,12 +6,10 @@ @inject AuthService AuthService @inject ILocalStorageService LocalStorage @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @page "/Users/{baid:int}/Songs" - -@Localizer["Song List"] - @if (response is null) { diff --git a/TaikoWebUI/Pages/SongList.razor.cs b/TaikoWebUI/Pages/SongList.razor.cs index d581e3e..aa50ea5 100644 --- a/TaikoWebUI/Pages/SongList.razor.cs +++ b/TaikoWebUI/Pages/SongList.razor.cs @@ -11,8 +11,6 @@ public partial class SongList private SongBestResponse? response; private UserSetting? userSetting; - - private readonly List breadcrumbs = new(); private Dictionary musicDetailDictionary = new(); @@ -38,16 +36,18 @@ public partial class SongList if (best.SongId == song.Value.SongId) song.Value.IsFavorite = best.IsFavorite; + BreadcrumbsStateContainer.breadcrumbs.Clear(); if (AuthService.IsLoggedIn && !AuthService.IsAdmin) { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Dashboard"], href: "/")); } else { - breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); }; - breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); - breadcrumbs.Add(new BreadcrumbItem(Localizer["Song List"], href: $"/Users/{Baid}/Songs", disabled: false)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem($"{userSetting?.MyDonName}", href: null, disabled: true)); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Song List"], href: $"/Users/{Baid}/Songs", disabled: false)); + BreadcrumbsStateContainer.NotifyStateChanged(); } private bool FilterSongs(MusicDetail musicDetail) diff --git a/TaikoWebUI/Pages/Users.razor b/TaikoWebUI/Pages/Users.razor index ac087c7..80dbdc9 100644 --- a/TaikoWebUI/Pages/Users.razor +++ b/TaikoWebUI/Pages/Users.razor @@ -1,12 +1,12 @@ @inject HttpClient Client @inject AuthService AuthService @inject NavigationManager NavigationManager +@inject BreadcrumbsStateContainer BreadcrumbsStateContainer @using TaikoWebUI.Components; @page "/Users" -@Localizer["Users"] @if (!AuthService.LoginRequired || (AuthService.LoginRequired && AuthService.IsAdmin)) { diff --git a/TaikoWebUI/Pages/Users.razor.cs b/TaikoWebUI/Pages/Users.razor.cs index c6729f8..718ee73 100644 --- a/TaikoWebUI/Pages/Users.razor.cs +++ b/TaikoWebUI/Pages/Users.razor.cs @@ -32,6 +32,10 @@ public partial class Users { await GetUsersData(); } + + BreadcrumbsStateContainer.breadcrumbs.Clear(); + BreadcrumbsStateContainer.breadcrumbs.Add(new BreadcrumbItem(Localizer["Users"], href: "/Users")); + BreadcrumbsStateContainer.NotifyStateChanged(); } private async Task OnPageChange(int page) diff --git a/TaikoWebUI/Program.cs b/TaikoWebUI/Program.cs index f23faad..1f9de19 100644 --- a/TaikoWebUI/Program.cs +++ b/TaikoWebUI/Program.cs @@ -35,6 +35,7 @@ builder.Services.AddLocalization(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddBlazoredLocalStorage(); var host = builder.Build(); diff --git a/TaikoWebUI/Services/BreadcrumbsStateContainer.cs b/TaikoWebUI/Services/BreadcrumbsStateContainer.cs new file mode 100644 index 0000000..a27e44d --- /dev/null +++ b/TaikoWebUI/Services/BreadcrumbsStateContainer.cs @@ -0,0 +1,17 @@ +namespace TaikoWebUI.Services +{ + public class BreadcrumbsStateContainer + { + public List breadcrumbs = new(); + + public event Action? OnChange; + + public void SetBreadcrumbs(List _breadcrumbs) + { + breadcrumbs = _breadcrumbs; + NotifyStateChanged(); + } + + public void NotifyStateChanged() => OnChange?.Invoke(); + } +}