diff --git a/osu.Android.props b/osu.Android.props
index c1075cfb17..1866acd248 100644
--- a/osu.Android.props
+++ b/osu.Android.props
@@ -51,8 +51,8 @@
-
-
+
+
diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs
index 7584d67afe..21c5d89aca 100644
--- a/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestSceneSpectator.cs
@@ -13,6 +13,7 @@ using osu.Game.Online.Spectator;
using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Osu.Replays;
using osu.Game.Rulesets.UI;
+using osu.Game.Screens;
using osu.Game.Screens.Play;
using osu.Game.Tests.Beatmaps.IO;
using osu.Game.Tests.Visual.Multiplayer;
@@ -25,41 +26,43 @@ namespace osu.Game.Tests.Visual.Gameplay
{
private readonly User streamingUser = new User { Id = MultiplayerTestScene.PLAYER_1_ID, Username = "Test user" };
- [Cached(typeof(SpectatorClient))]
- private TestSpectatorClient testSpectatorClient = new TestSpectatorClient();
-
[Cached(typeof(UserLookupCache))]
private UserLookupCache lookupCache = new TestUserLookupCache();
// used just to show beatmap card for the time being.
protected override bool UseOnlineAPI => true;
- private SoloSpectator spectatorScreen;
-
[Resolved]
private OsuGameBase game { get; set; }
- private BeatmapSetInfo importedBeatmap;
+ private TestSpectatorClient spectatorClient;
+ private SoloSpectator spectatorScreen;
+ private BeatmapSetInfo importedBeatmap;
private int importedBeatmapId;
- public override void SetUpSteps()
+ [SetUpSteps]
+ public void SetupSteps()
{
- base.SetUpSteps();
+ DependenciesScreen dependenciesScreen = null;
+
+ AddStep("load dependencies", () =>
+ {
+ spectatorClient = new TestSpectatorClient();
+
+ // The screen gets suspended so it stops receiving updates.
+ Child = spectatorClient;
+
+ LoadScreen(dependenciesScreen = new DependenciesScreen(spectatorClient));
+ });
+
+ AddUntilStep("wait for dependencies to load", () => dependenciesScreen.IsLoaded);
AddStep("import beatmap", () =>
{
importedBeatmap = ImportBeatmapTest.LoadOszIntoOsu(game, virtualTrack: true).Result;
importedBeatmapId = importedBeatmap.Beatmaps.First(b => b.RulesetID == 0).OnlineBeatmapID ?? -1;
});
-
- AddStep("add streaming client", () =>
- {
- Remove(testSpectatorClient);
- Add(testSpectatorClient);
- });
-
- finish();
}
[Test]
@@ -206,22 +209,36 @@ namespace osu.Game.Tests.Visual.Gameplay
private void waitForPlayer() => AddUntilStep("wait for player", () => (Stack.CurrentScreen as Player)?.IsLoaded == true);
- private void start(int? beatmapId = null) => AddStep("start play", () => testSpectatorClient.StartPlay(streamingUser.Id, beatmapId ?? importedBeatmapId));
+ private void start(int? beatmapId = null) => AddStep("start play", () => spectatorClient.StartPlay(streamingUser.Id, beatmapId ?? importedBeatmapId));
- private void finish() => AddStep("end play", () => testSpectatorClient.EndPlay(streamingUser.Id));
+ private void finish() => AddStep("end play", () => spectatorClient.EndPlay(streamingUser.Id));
private void checkPaused(bool state) =>
AddUntilStep($"game is {(state ? "paused" : "playing")}", () => player.ChildrenOfType().First().IsPaused.Value == state);
private void sendFrames(int count = 10)
{
- AddStep("send frames", () => testSpectatorClient.SendFrames(streamingUser.Id, count));
+ AddStep("send frames", () => spectatorClient.SendFrames(streamingUser.Id, count));
}
private void loadSpectatingScreen()
{
- AddStep("load screen", () => LoadScreen(spectatorScreen = new SoloSpectator(streamingUser)));
+ AddStep("load spectator", () => LoadScreen(spectatorScreen = new SoloSpectator(streamingUser)));
AddUntilStep("wait for screen load", () => spectatorScreen.LoadState == LoadState.Loaded);
}
+
+ ///
+ /// Used for the sole purpose of adding as a resolvable dependency.
+ ///
+ private class DependenciesScreen : OsuScreen
+ {
+ [Cached(typeof(SpectatorClient))]
+ public readonly TestSpectatorClient Client;
+
+ public DependenciesScreen(TestSpectatorClient client)
+ {
+ Client = client;
+ }
+ }
}
}
diff --git a/osu.Game.Tests/Visual/Online/TestSceneCurrentlyPlayingDisplay.cs b/osu.Game.Tests/Visual/Online/TestSceneCurrentlyPlayingDisplay.cs
index 30785fd163..2f11fec6d1 100644
--- a/osu.Game.Tests/Visual/Online/TestSceneCurrentlyPlayingDisplay.cs
+++ b/osu.Game.Tests/Visual/Online/TestSceneCurrentlyPlayingDisplay.cs
@@ -1,13 +1,12 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using NUnit.Framework;
-using osu.Framework.Allocation;
using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
using osu.Framework.Testing;
using osu.Game.Database;
using osu.Game.Online.Spectator;
@@ -21,51 +20,44 @@ namespace osu.Game.Tests.Visual.Online
{
private readonly User streamingUser = new User { Id = 2, Username = "Test user" };
- [Cached(typeof(SpectatorClient))]
- private TestSpectatorClient testSpectatorClient = new TestSpectatorClient();
-
+ private TestSpectatorClient spectatorClient;
private CurrentlyPlayingDisplay currentlyPlaying;
- [Cached(typeof(UserLookupCache))]
- private UserLookupCache lookupCache = new TestUserLookupCache();
-
- private Container nestedContainer;
-
[SetUpSteps]
public void SetUpSteps()
{
AddStep("add streaming client", () =>
{
- nestedContainer?.Remove(testSpectatorClient);
- Remove(lookupCache);
+ spectatorClient = new TestSpectatorClient();
+ var lookupCache = new TestUserLookupCache();
Children = new Drawable[]
{
lookupCache,
- nestedContainer = new Container
+ spectatorClient,
+ new DependencyProvidingContainer
{
RelativeSizeAxes = Axes.Both,
- Children = new Drawable[]
+ CachedDependencies = new (Type, object)[]
{
- testSpectatorClient,
- currentlyPlaying = new CurrentlyPlayingDisplay
- {
- RelativeSizeAxes = Axes.Both,
- }
+ (typeof(SpectatorClient), spectatorClient),
+ (typeof(UserLookupCache), lookupCache)
+ },
+ Child = currentlyPlaying = new CurrentlyPlayingDisplay
+ {
+ RelativeSizeAxes = Axes.Both,
}
},
};
});
-
- AddStep("Reset players", () => testSpectatorClient.EndPlay(streamingUser.Id));
}
[Test]
public void TestBasicDisplay()
{
- AddStep("Add playing user", () => testSpectatorClient.StartPlay(streamingUser.Id, 0));
+ AddStep("Add playing user", () => spectatorClient.StartPlay(streamingUser.Id, 0));
AddUntilStep("Panel loaded", () => currentlyPlaying.ChildrenOfType()?.FirstOrDefault()?.User.Id == 2);
- AddStep("Remove playing user", () => testSpectatorClient.EndPlay(streamingUser.Id));
+ AddStep("Remove playing user", () => spectatorClient.EndPlay(streamingUser.Id));
AddUntilStep("Panel no longer present", () => !currentlyPlaying.ChildrenOfType().Any());
}
diff --git a/osu.Game.Tests/Visual/Online/TestSceneNewsHeader.cs b/osu.Game.Tests/Visual/Online/TestSceneNewsHeader.cs
index 78288bf6e4..994c4fce53 100644
--- a/osu.Game.Tests/Visual/Online/TestSceneNewsHeader.cs
+++ b/osu.Game.Tests/Visual/Online/TestSceneNewsHeader.cs
@@ -29,7 +29,7 @@ namespace osu.Game.Tests.Visual.Online
[Test]
public void TestControl()
{
- AddAssert("Front page selected", () => header.Current.Value == "frontpage");
+ AddAssert("Front page selected", () => header.Current.Value == NewsHeader.FrontPageString);
AddAssert("1 tab total", () => header.TabCount == 1);
AddStep("Set article 1", () => header.SetArticle("1"));
@@ -41,7 +41,7 @@ namespace osu.Game.Tests.Visual.Online
AddAssert("2 tabs total", () => header.TabCount == 2);
AddStep("Set front page", () => header.SetFrontPage());
- AddAssert("Front page selected", () => header.Current.Value == "frontpage");
+ AddAssert("Front page selected", () => header.Current.Value == NewsHeader.FrontPageString);
AddAssert("1 tab total", () => header.TabCount == 1);
}
diff --git a/osu.Game.Tests/Visual/Online/TestSceneWikiHeader.cs b/osu.Game.Tests/Visual/Online/TestSceneWikiHeader.cs
index e7e6030c66..08e61d19f4 100644
--- a/osu.Game.Tests/Visual/Online/TestSceneWikiHeader.cs
+++ b/osu.Game.Tests/Visual/Online/TestSceneWikiHeader.cs
@@ -44,7 +44,7 @@ namespace osu.Game.Tests.Visual.Online
[Test]
public void TestWikiHeader()
{
- AddAssert("Current is index", () => checkCurrent("index"));
+ AddAssert("Current is index", () => checkCurrent(WikiHeader.IndexPageString));
AddStep("Change wiki page data", () => wikiPageData.Value = new APIWikiPage
{
@@ -54,8 +54,8 @@ namespace osu.Game.Tests.Visual.Online
AddAssert("Current is welcome", () => checkCurrent("Welcome"));
AddAssert("Check breadcrumb", checkBreadcrumb);
- AddStep("Change current to index", () => header.Current.Value = "index");
- AddAssert("Current is index", () => checkCurrent("index"));
+ AddStep("Change current to index", () => header.Current.Value = WikiHeader.IndexPageString);
+ AddAssert("Current is index", () => checkCurrent(WikiHeader.IndexPageString));
AddStep("Change wiki page data", () => wikiPageData.Value = new APIWikiPage
{
@@ -71,7 +71,7 @@ namespace osu.Game.Tests.Visual.Online
AddAssert("Check breadcrumb", checkBreadcrumb);
}
- private bool checkCurrent(string expectedCurrent) => header.Current.Value == expectedCurrent;
+ private bool checkCurrent(LocalisableString expectedCurrent) => header.Current.Value == expectedCurrent;
private bool checkBreadcrumb()
{
diff --git a/osu.Game/Beatmaps/BeatmapSetOnlineStatus.cs b/osu.Game/Beatmaps/BeatmapSetOnlineStatus.cs
index 6003e23a84..edaf044466 100644
--- a/osu.Game/Beatmaps/BeatmapSetOnlineStatus.cs
+++ b/osu.Game/Beatmaps/BeatmapSetOnlineStatus.cs
@@ -1,22 +1,34 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Beatmaps
{
- [LocalisableEnum(typeof(BeatmapSetOnlineStatusEnumLocalisationMapper))]
public enum BeatmapSetOnlineStatus
{
None = -3,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusGraveyard))]
Graveyard = -2,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusWip))]
WIP = -1,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusPending))]
Pending = 0,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusRanked))]
Ranked = 1,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusApproved))]
Approved = 2,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusQualified))]
Qualified = 3,
+
+ [LocalisableDescription(typeof(BeatmapsetsStrings), nameof(BeatmapsetsStrings.ShowStatusLoved))]
Loved = 4,
}
@@ -25,40 +37,4 @@ namespace osu.Game.Beatmaps
public static bool GrantsPerformancePoints(this BeatmapSetOnlineStatus status)
=> status == BeatmapSetOnlineStatus.Ranked || status == BeatmapSetOnlineStatus.Approved;
}
-
- public class BeatmapSetOnlineStatusEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(BeatmapSetOnlineStatus value)
- {
- switch (value)
- {
- case BeatmapSetOnlineStatus.None:
- return string.Empty;
-
- case BeatmapSetOnlineStatus.Graveyard:
- return BeatmapsetsStrings.ShowStatusGraveyard;
-
- case BeatmapSetOnlineStatus.WIP:
- return BeatmapsetsStrings.ShowStatusWip;
-
- case BeatmapSetOnlineStatus.Pending:
- return BeatmapsetsStrings.ShowStatusPending;
-
- case BeatmapSetOnlineStatus.Ranked:
- return BeatmapsetsStrings.ShowStatusRanked;
-
- case BeatmapSetOnlineStatus.Approved:
- return BeatmapsetsStrings.ShowStatusApproved;
-
- case BeatmapSetOnlineStatus.Qualified:
- return BeatmapsetsStrings.ShowStatusQualified;
-
- case BeatmapSetOnlineStatus.Loved:
- return BeatmapsetsStrings.ShowStatusLoved;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Localisation/NamedOverlayComponentStrings.cs b/osu.Game/Localisation/NamedOverlayComponentStrings.cs
new file mode 100644
index 0000000000..475bea2a4a
--- /dev/null
+++ b/osu.Game/Localisation/NamedOverlayComponentStrings.cs
@@ -0,0 +1,44 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using osu.Framework.Localisation;
+
+namespace osu.Game.Localisation
+{
+ public static class NamedOverlayComponentStrings
+ {
+ private const string prefix = @"osu.Game.Resources.Localisation.NamedOverlayComponent";
+
+ ///
+ /// "browse for new beatmaps"
+ ///
+ public static LocalisableString BeatmapListingDescription => new TranslatableString(getKey(@"beatmap_listing_description"), @"browse for new beatmaps");
+
+ ///
+ /// "track recent dev updates in the osu! ecosystem"
+ ///
+ public static LocalisableString ChangelogDescription => new TranslatableString(getKey(@"changelog_description"), @"track recent dev updates in the osu! ecosystem");
+
+ ///
+ /// "view your friends and other information"
+ ///
+ public static LocalisableString DashboardDescription => new TranslatableString(getKey(@"dashboard_description"), @"view your friends and other information");
+
+ ///
+ /// "find out who's the best right now"
+ ///
+ public static LocalisableString RankingsDescription => new TranslatableString(getKey(@"rankings_description"), @"find out who's the best right now");
+
+ ///
+ /// "get up-to-date on community happenings"
+ ///
+ public static LocalisableString NewsDescription => new TranslatableString(getKey(@"news_description"), @"get up-to-date on community happenings");
+
+ ///
+ /// "knowledge base"
+ ///
+ public static LocalisableString WikiDescription => new TranslatableString(getKey(@"wiki_description"), @"knowledge base");
+
+ private static string getKey(string key) => $"{prefix}:{key}";
+ }
+}
diff --git a/osu.Game/Overlays/BeatmapListing/BeatmapListingHeader.cs b/osu.Game/Overlays/BeatmapListing/BeatmapListingHeader.cs
index 6a9a71210a..3568fe9e4f 100644
--- a/osu.Game/Overlays/BeatmapListing/BeatmapListingHeader.cs
+++ b/osu.Game/Overlays/BeatmapListing/BeatmapListingHeader.cs
@@ -1,6 +1,9 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using osu.Game.Localisation;
+using osu.Game.Resources.Localisation.Web;
+
namespace osu.Game.Overlays.BeatmapListing
{
public class BeatmapListingHeader : OverlayHeader
@@ -11,8 +14,8 @@ namespace osu.Game.Overlays.BeatmapListing
{
public BeatmapListingTitle()
{
- Title = "beatmap listing";
- Description = "browse for new beatmaps";
+ Title = PageTitleStrings.MainBeatmapsetsControllerIndex;
+ Description = NamedOverlayComponentStrings.BeatmapListingDescription;
IconTexture = "Icons/Hexacons/beatmap";
}
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchCategory.cs b/osu.Game/Overlays/BeatmapListing/SearchCategory.cs
index 8a9df76af3..d6ae41aba1 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchCategory.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchCategory.cs
@@ -1,69 +1,42 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchCategoryEnumLocalisationMapper))]
public enum SearchCategory
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusAny))]
Any,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusLeaderboard))]
[Description("Has Leaderboard")]
Leaderboard,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusRanked))]
Ranked,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusQualified))]
Qualified,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusLoved))]
Loved,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusFavourites))]
Favourites,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusPending))]
[Description("Pending & WIP")]
Pending,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusGraveyard))]
Graveyard,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.StatusMine))]
[Description("My Maps")]
Mine,
}
-
- public class SearchCategoryEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchCategory value)
- {
- switch (value)
- {
- case SearchCategory.Any:
- return BeatmapsStrings.StatusAny;
-
- case SearchCategory.Leaderboard:
- return BeatmapsStrings.StatusLeaderboard;
-
- case SearchCategory.Ranked:
- return BeatmapsStrings.StatusRanked;
-
- case SearchCategory.Qualified:
- return BeatmapsStrings.StatusQualified;
-
- case SearchCategory.Loved:
- return BeatmapsStrings.StatusLoved;
-
- case SearchCategory.Favourites:
- return BeatmapsStrings.StatusFavourites;
-
- case SearchCategory.Pending:
- return BeatmapsStrings.StatusPending;
-
- case SearchCategory.Graveyard:
- return BeatmapsStrings.StatusGraveyard;
-
- case SearchCategory.Mine:
- return BeatmapsStrings.StatusMine;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchExplicit.cs b/osu.Game/Overlays/BeatmapListing/SearchExplicit.cs
index 78e6a4e094..80482b32a0 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchExplicit.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchExplicit.cs
@@ -1,34 +1,17 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchExplicitEnumLocalisationMapper))]
public enum SearchExplicit
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.NsfwExclude))]
Hide,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.NsfwInclude))]
Show
}
-
- public class SearchExplicitEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchExplicit value)
- {
- switch (value)
- {
- case SearchExplicit.Hide:
- return BeatmapsStrings.NsfwExclude;
-
- case SearchExplicit.Show:
- return BeatmapsStrings.NsfwInclude;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchExtra.cs b/osu.Game/Overlays/BeatmapListing/SearchExtra.cs
index 4b3fb6e833..e54632acd8 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchExtra.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchExtra.cs
@@ -1,38 +1,20 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchExtraEnumLocalisationMapper))]
public enum SearchExtra
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ExtraVideo))]
[Description("Has Video")]
Video,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ExtraStoryboard))]
[Description("Has Storyboard")]
Storyboard
}
-
- public class SearchExtraEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchExtra value)
- {
- switch (value)
- {
- case SearchExtra.Video:
- return BeatmapsStrings.ExtraVideo;
-
- case SearchExtra.Storyboard:
- return BeatmapsStrings.ExtraStoryboard;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchGeneral.cs b/osu.Game/Overlays/BeatmapListing/SearchGeneral.cs
index b4c629f7fa..d334b82e88 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchGeneral.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchGeneral.cs
@@ -1,44 +1,24 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchGeneralEnumLocalisationMapper))]
public enum SearchGeneral
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GeneralRecommended))]
[Description("Recommended difficulty")]
Recommended,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GeneralConverts))]
[Description("Include converted beatmaps")]
Converts,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GeneralFollows))]
[Description("Subscribed mappers")]
Follows
}
-
- public class SearchGeneralEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchGeneral value)
- {
- switch (value)
- {
- case SearchGeneral.Recommended:
- return BeatmapsStrings.GeneralRecommended;
-
- case SearchGeneral.Converts:
- return BeatmapsStrings.GeneralConverts;
-
- case SearchGeneral.Follows:
- return BeatmapsStrings.GeneralFollows;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchGenre.cs b/osu.Game/Overlays/BeatmapListing/SearchGenre.cs
index b2709ecd2e..08855284cb 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchGenre.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchGenre.cs
@@ -1,87 +1,56 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchGenreEnumLocalisationMapper))]
public enum SearchGenre
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreAny))]
Any = 0,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreUnspecified))]
Unspecified = 1,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreVideoGame))]
[Description("Video Game")]
VideoGame = 2,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreAnime))]
Anime = 3,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreRock))]
Rock = 4,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenrePop))]
Pop = 5,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreOther))]
Other = 6,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreNovelty))]
Novelty = 7,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreHipHop))]
[Description("Hip Hop")]
HipHop = 9,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreElectronic))]
Electronic = 10,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreMetal))]
Metal = 11,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreClassical))]
Classical = 12,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreFolk))]
Folk = 13,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.GenreJazz))]
Jazz = 14
}
-
- public class SearchGenreEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchGenre value)
- {
- switch (value)
- {
- case SearchGenre.Any:
- return BeatmapsStrings.GenreAny;
-
- case SearchGenre.Unspecified:
- return BeatmapsStrings.GenreUnspecified;
-
- case SearchGenre.VideoGame:
- return BeatmapsStrings.GenreVideoGame;
-
- case SearchGenre.Anime:
- return BeatmapsStrings.GenreAnime;
-
- case SearchGenre.Rock:
- return BeatmapsStrings.GenreRock;
-
- case SearchGenre.Pop:
- return BeatmapsStrings.GenrePop;
-
- case SearchGenre.Other:
- return BeatmapsStrings.GenreOther;
-
- case SearchGenre.Novelty:
- return BeatmapsStrings.GenreNovelty;
-
- case SearchGenre.HipHop:
- return BeatmapsStrings.GenreHipHop;
-
- case SearchGenre.Electronic:
- return BeatmapsStrings.GenreElectronic;
-
- case SearchGenre.Metal:
- return BeatmapsStrings.GenreMetal;
-
- case SearchGenre.Classical:
- return BeatmapsStrings.GenreClassical;
-
- case SearchGenre.Folk:
- return BeatmapsStrings.GenreFolk;
-
- case SearchGenre.Jazz:
- return BeatmapsStrings.GenreJazz;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchLanguage.cs b/osu.Game/Overlays/BeatmapListing/SearchLanguage.cs
index fc176c305a..7ffa0282b7 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchLanguage.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchLanguage.cs
@@ -1,117 +1,73 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Localisation;
using osu.Framework.Utils;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchLanguageEnumLocalisationMapper))]
[HasOrderedElements]
public enum SearchLanguage
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageAny))]
[Order(0)]
Any,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageUnspecified))]
[Order(14)]
Unspecified,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageEnglish))]
[Order(1)]
English,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageJapanese))]
[Order(6)]
Japanese,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageChinese))]
[Order(2)]
Chinese,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageInstrumental))]
[Order(12)]
Instrumental,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageKorean))]
[Order(7)]
Korean,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageFrench))]
[Order(3)]
French,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageGerman))]
[Order(4)]
German,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageSwedish))]
[Order(9)]
Swedish,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageSpanish))]
[Order(8)]
Spanish,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageItalian))]
[Order(5)]
Italian,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageRussian))]
[Order(10)]
Russian,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguagePolish))]
[Order(11)]
Polish,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.LanguageOther))]
[Order(13)]
Other
}
-
- public class SearchLanguageEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchLanguage value)
- {
- switch (value)
- {
- case SearchLanguage.Any:
- return BeatmapsStrings.LanguageAny;
-
- case SearchLanguage.Unspecified:
- return BeatmapsStrings.LanguageUnspecified;
-
- case SearchLanguage.English:
- return BeatmapsStrings.LanguageEnglish;
-
- case SearchLanguage.Japanese:
- return BeatmapsStrings.LanguageJapanese;
-
- case SearchLanguage.Chinese:
- return BeatmapsStrings.LanguageChinese;
-
- case SearchLanguage.Instrumental:
- return BeatmapsStrings.LanguageInstrumental;
-
- case SearchLanguage.Korean:
- return BeatmapsStrings.LanguageKorean;
-
- case SearchLanguage.French:
- return BeatmapsStrings.LanguageFrench;
-
- case SearchLanguage.German:
- return BeatmapsStrings.LanguageGerman;
-
- case SearchLanguage.Swedish:
- return BeatmapsStrings.LanguageSwedish;
-
- case SearchLanguage.Spanish:
- return BeatmapsStrings.LanguageSpanish;
-
- case SearchLanguage.Italian:
- return BeatmapsStrings.LanguageItalian;
-
- case SearchLanguage.Russian:
- return BeatmapsStrings.LanguageRussian;
-
- case SearchLanguage.Polish:
- return BeatmapsStrings.LanguagePolish;
-
- case SearchLanguage.Other:
- return BeatmapsStrings.LanguageOther;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SearchPlayed.cs b/osu.Game/Overlays/BeatmapListing/SearchPlayed.cs
index f24cf46c2d..3b04ac01ca 100644
--- a/osu.Game/Overlays/BeatmapListing/SearchPlayed.cs
+++ b/osu.Game/Overlays/BeatmapListing/SearchPlayed.cs
@@ -1,38 +1,20 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SearchPlayedEnumLocalisationMapper))]
public enum SearchPlayed
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.PlayedAny))]
Any,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.PlayedPlayed))]
Played,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.PlayedUnplayed))]
Unplayed
}
-
- public class SearchPlayedEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SearchPlayed value)
- {
- switch (value)
- {
- case SearchPlayed.Any:
- return BeatmapsStrings.PlayedAny;
-
- case SearchPlayed.Played:
- return BeatmapsStrings.PlayedPlayed;
-
- case SearchPlayed.Unplayed:
- return BeatmapsStrings.PlayedUnplayed;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapListing/SortCriteria.cs b/osu.Game/Overlays/BeatmapListing/SortCriteria.cs
index 5ea885eecc..871b3c162b 100644
--- a/osu.Game/Overlays/BeatmapListing/SortCriteria.cs
+++ b/osu.Game/Overlays/BeatmapListing/SortCriteria.cs
@@ -1,58 +1,35 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.BeatmapListing
{
- [LocalisableEnum(typeof(SortCriteriaLocalisationMapper))]
public enum SortCriteria
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingTitle))]
Title,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingArtist))]
Artist,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingDifficulty))]
Difficulty,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingRanked))]
Ranked,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingRating))]
Rating,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingPlays))]
Plays,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingFavourites))]
Favourites,
+
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.ListingSearchSortingRelevance))]
Relevance
}
-
- public class SortCriteriaLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(SortCriteria value)
- {
- switch (value)
- {
- case SortCriteria.Title:
- return BeatmapsStrings.ListingSearchSortingTitle;
-
- case SortCriteria.Artist:
- return BeatmapsStrings.ListingSearchSortingArtist;
-
- case SortCriteria.Difficulty:
- return BeatmapsStrings.ListingSearchSortingDifficulty;
-
- case SortCriteria.Ranked:
- return BeatmapsStrings.ListingSearchSortingRanked;
-
- case SortCriteria.Rating:
- return BeatmapsStrings.ListingSearchSortingRating;
-
- case SortCriteria.Plays:
- return BeatmapsStrings.ListingSearchSortingPlays;
-
- case SortCriteria.Favourites:
- return BeatmapsStrings.ListingSearchSortingFavourites;
-
- case SortCriteria.Relevance:
- return BeatmapsStrings.ListingSearchSortingRelevance;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/BeatmapSet/BeatmapSetHeader.cs b/osu.Game/Overlays/BeatmapSet/BeatmapSetHeader.cs
index 4b26b02a8e..4a0c0e9f75 100644
--- a/osu.Game/Overlays/BeatmapSet/BeatmapSetHeader.cs
+++ b/osu.Game/Overlays/BeatmapSet/BeatmapSetHeader.cs
@@ -7,6 +7,7 @@ using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Effects;
using osu.Game.Beatmaps;
+using osu.Game.Resources.Localisation.Web;
using osu.Game.Rulesets;
using osuTK;
using osuTK.Graphics;
@@ -54,7 +55,7 @@ namespace osu.Game.Overlays.BeatmapSet
{
public BeatmapHeaderTitle()
{
- Title = "beatmap info";
+ Title = PageTitleStrings.MainBeatmapsetsControllerShow;
IconTexture = "Icons/Hexacons/beatmap";
}
}
diff --git a/osu.Game/Overlays/Changelog/ChangelogHeader.cs b/osu.Game/Overlays/Changelog/ChangelogHeader.cs
index f4be4328e7..52dea63ab7 100644
--- a/osu.Game/Overlays/Changelog/ChangelogHeader.cs
+++ b/osu.Game/Overlays/Changelog/ChangelogHeader.cs
@@ -9,7 +9,10 @@ using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
+using osu.Framework.Localisation;
+using osu.Game.Localisation;
using osu.Game.Online.API.Requests.Responses;
+using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.Changelog
{
@@ -21,16 +24,16 @@ namespace osu.Game.Overlays.Changelog
public ChangelogUpdateStreamControl Streams;
- private const string listing_string = "listing";
+ public static LocalisableString ListingString => LayoutStrings.HeaderChangelogIndex;
private Box streamsBackground;
public ChangelogHeader()
{
- TabControl.AddItem(listing_string);
+ TabControl.AddItem(ListingString);
Current.ValueChanged += e =>
{
- if (e.NewValue == listing_string)
+ if (e.NewValue == ListingString)
ListingSelected?.Invoke();
};
@@ -63,7 +66,7 @@ namespace osu.Game.Overlays.Changelog
}
else
{
- Current.Value = listing_string;
+ Current.Value = ListingString;
Streams.Current.Value = null;
}
}
@@ -114,8 +117,8 @@ namespace osu.Game.Overlays.Changelog
{
public ChangelogHeaderTitle()
{
- Title = "changelog";
- Description = "track recent dev updates in the osu! ecosystem";
+ Title = PageTitleStrings.MainChangelogControllerDefault;
+ Description = NamedOverlayComponentStrings.ChangelogDescription;
IconTexture = "Icons/Hexacons/devtools";
}
}
diff --git a/osu.Game/Overlays/Dashboard/DashboardOverlayHeader.cs b/osu.Game/Overlays/Dashboard/DashboardOverlayHeader.cs
index 056d4ad6f7..2c8db14950 100644
--- a/osu.Game/Overlays/Dashboard/DashboardOverlayHeader.cs
+++ b/osu.Game/Overlays/Dashboard/DashboardOverlayHeader.cs
@@ -1,9 +1,9 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
+using osu.Game.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.Dashboard
@@ -16,37 +16,19 @@ namespace osu.Game.Overlays.Dashboard
{
public DashboardTitle()
{
- Title = HomeStrings.UserTitle;
- Description = "view your friends and other information";
+ Title = PageTitleStrings.MainHomeControllerIndex;
+ Description = NamedOverlayComponentStrings.DashboardDescription;
IconTexture = "Icons/Hexacons/social";
}
}
}
- [LocalisableEnum(typeof(DashboardOverlayTabsEnumLocalisationMapper))]
public enum DashboardOverlayTabs
{
+ [LocalisableDescription(typeof(FriendsStrings), nameof(FriendsStrings.TitleCompact))]
Friends,
[Description("Currently Playing")]
CurrentlyPlaying
}
-
- public class DashboardOverlayTabsEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(DashboardOverlayTabs value)
- {
- switch (value)
- {
- case DashboardOverlayTabs.Friends:
- return FriendsStrings.TitleCompact;
-
- case DashboardOverlayTabs.CurrentlyPlaying:
- return @"Currently Playing";
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/Dashboard/Friends/OnlineStatus.cs b/osu.Game/Overlays/Dashboard/Friends/OnlineStatus.cs
index 4b5a7ef066..853c94d8ae 100644
--- a/osu.Game/Overlays/Dashboard/Friends/OnlineStatus.cs
+++ b/osu.Game/Overlays/Dashboard/Friends/OnlineStatus.cs
@@ -1,38 +1,20 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.Dashboard.Friends
{
- [LocalisableEnum(typeof(OnlineStatusEnumLocalisationMapper))]
public enum OnlineStatus
{
+ [LocalisableDescription(typeof(UsersStrings), nameof(UsersStrings.StatusAll))]
All,
+
+ [LocalisableDescription(typeof(UsersStrings), nameof(UsersStrings.StatusOnline))]
Online,
+
+ [LocalisableDescription(typeof(UsersStrings), nameof(UsersStrings.StatusOffline))]
Offline
}
-
- public class OnlineStatusEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(OnlineStatus value)
- {
- switch (value)
- {
- case OnlineStatus.All:
- return SortStrings.All;
-
- case OnlineStatus.Online:
- return UsersStrings.StatusOnline;
-
- case OnlineStatus.Offline:
- return UsersStrings.StatusOffline;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/Dashboard/Friends/UserSortTabControl.cs b/osu.Game/Overlays/Dashboard/Friends/UserSortTabControl.cs
index dc756e2957..7fee5f4668 100644
--- a/osu.Game/Overlays/Dashboard/Friends/UserSortTabControl.cs
+++ b/osu.Game/Overlays/Dashboard/Friends/UserSortTabControl.cs
@@ -1,7 +1,6 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
@@ -12,33 +11,16 @@ namespace osu.Game.Overlays.Dashboard.Friends
{
}
- [LocalisableEnum(typeof(UserSortCriteriaEnumLocalisationMappper))]
public enum UserSortCriteria
{
+ [LocalisableDescription(typeof(SortStrings), nameof(SortStrings.LastVisit))]
[Description(@"Recently Active")]
LastVisit,
+
+ [LocalisableDescription(typeof(SortStrings), nameof(SortStrings.Rank))]
Rank,
+
+ [LocalisableDescription(typeof(SortStrings), nameof(SortStrings.Username))]
Username
}
-
- public class UserSortCriteriaEnumLocalisationMappper : EnumLocalisationMapper
- {
- public override LocalisableString Map(UserSortCriteria value)
- {
- switch (value)
- {
- case UserSortCriteria.LastVisit:
- return SortStrings.LastVisit;
-
- case UserSortCriteria.Rank:
- return SortStrings.Rank;
-
- case UserSortCriteria.Username:
- return SortStrings.Username;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/News/NewsHeader.cs b/osu.Game/Overlays/News/NewsHeader.cs
index 56c54425bd..35e3c7755d 100644
--- a/osu.Game/Overlays/News/NewsHeader.cs
+++ b/osu.Game/Overlays/News/NewsHeader.cs
@@ -4,12 +4,15 @@
using System;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
+using osu.Framework.Localisation;
+using osu.Game.Localisation;
+using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.News
{
public class NewsHeader : BreadcrumbControlOverlayHeader
{
- private const string front_page_string = "frontpage";
+ public static LocalisableString FrontPageString => NewsStrings.IndexTitleInfo;
public Action ShowFrontPage;
@@ -17,7 +20,7 @@ namespace osu.Game.Overlays.News
public NewsHeader()
{
- TabControl.AddItem(front_page_string);
+ TabControl.AddItem(FrontPageString);
article.BindValueChanged(onArticleChanged, true);
}
@@ -28,7 +31,7 @@ namespace osu.Game.Overlays.News
Current.BindValueChanged(e =>
{
- if (e.NewValue == front_page_string)
+ if (e.NewValue == FrontPageString)
ShowFrontPage?.Invoke();
});
}
@@ -49,7 +52,7 @@ namespace osu.Game.Overlays.News
}
else
{
- Current.Value = front_page_string;
+ Current.Value = FrontPageString;
}
}
@@ -61,8 +64,8 @@ namespace osu.Game.Overlays.News
{
public NewsHeaderTitle()
{
- Title = "news";
- Description = "get up-to-date on community happenings";
+ Title = PageTitleStrings.MainNewsControllerDefault;
+ Description = NamedOverlayComponentStrings.NewsDescription;
IconTexture = "Icons/Hexacons/news";
}
}
diff --git a/osu.Game/Overlays/OverlayPanelDisplayStyleControl.cs b/osu.Game/Overlays/OverlayPanelDisplayStyleControl.cs
index c2268ff43c..d7a3b052ae 100644
--- a/osu.Game/Overlays/OverlayPanelDisplayStyleControl.cs
+++ b/osu.Game/Overlays/OverlayPanelDisplayStyleControl.cs
@@ -12,7 +12,6 @@ using osu.Framework.Allocation;
using osuTK.Graphics;
using osu.Framework.Graphics.Cursor;
using osu.Framework.Localisation;
-using System;
using osu.Game.Resources.Localisation.Web;
using osu.Framework.Extensions;
@@ -101,32 +100,15 @@ namespace osu.Game.Overlays
}
}
- [LocalisableEnum(typeof(OverlayPanelDisplayStyleEnumLocalisationMapper))]
public enum OverlayPanelDisplayStyle
{
+ [LocalisableDescription(typeof(UsersStrings), nameof(UsersStrings.ViewModeCard))]
Card,
+
+ [LocalisableDescription(typeof(UsersStrings), nameof(UsersStrings.ViewModeList))]
List,
+
+ [LocalisableDescription(typeof(UsersStrings), nameof(UsersStrings.ViewModeBrick))]
Brick
}
-
- public class OverlayPanelDisplayStyleEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(OverlayPanelDisplayStyle value)
- {
- switch (value)
- {
- case OverlayPanelDisplayStyle.Card:
- return UsersStrings.ViewModeCard;
-
- case OverlayPanelDisplayStyle.List:
- return UsersStrings.ViewModeList;
-
- case OverlayPanelDisplayStyle.Brick:
- return UsersStrings.ViewModeBrick;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/Rankings/RankingsOverlayHeader.cs b/osu.Game/Overlays/Rankings/RankingsOverlayHeader.cs
index 1d6d884d58..417b33ddf6 100644
--- a/osu.Game/Overlays/Rankings/RankingsOverlayHeader.cs
+++ b/osu.Game/Overlays/Rankings/RankingsOverlayHeader.cs
@@ -1,13 +1,12 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using osu.Framework.Graphics;
using osu.Framework.Bindables;
+using osu.Game.Localisation;
+using osu.Game.Resources.Localisation.Web;
+using osu.Framework.Graphics;
using osu.Game.Rulesets;
using osu.Game.Users;
-using osu.Game.Resources.Localisation.Web;
-using osu.Framework.Localisation;
-using System;
namespace osu.Game.Overlays.Rankings
{
@@ -33,42 +32,9 @@ namespace osu.Game.Overlays.Rankings
public RankingsTitle()
{
Title = PageTitleStrings.MainRankingControllerDefault;
- Description = "find out who's the best right now";
+ Description = NamedOverlayComponentStrings.RankingsDescription;
IconTexture = "Icons/Hexacons/rankings";
}
}
}
-
- [LocalisableEnum(typeof(RankingsScopeEnumLocalisationMapper))]
- public enum RankingsScope
- {
- Performance,
- Spotlights,
- Score,
- Country
- }
-
- public class RankingsScopeEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(RankingsScope value)
- {
- switch (value)
- {
- case RankingsScope.Performance:
- return RankingsStrings.TypePerformance;
-
- case RankingsScope.Spotlights:
- return RankingsStrings.TypeCharts;
-
- case RankingsScope.Score:
- return RankingsStrings.TypeScore;
-
- case RankingsScope.Country:
- return RankingsStrings.TypeCountry;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/Rankings/RankingsScope.cs b/osu.Game/Overlays/Rankings/RankingsScope.cs
new file mode 100644
index 0000000000..e660c2898a
--- /dev/null
+++ b/osu.Game/Overlays/Rankings/RankingsScope.cs
@@ -0,0 +1,23 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using osu.Framework.Localisation;
+using osu.Game.Resources.Localisation.Web;
+
+namespace osu.Game.Overlays.Rankings
+{
+ public enum RankingsScope
+ {
+ [LocalisableDescription(typeof(RankingsStrings), nameof(RankingsStrings.TypePerformance))]
+ Performance,
+
+ [LocalisableDescription(typeof(RankingsStrings), nameof(RankingsStrings.TypeCharts))]
+ Spotlights,
+
+ [LocalisableDescription(typeof(RankingsStrings), nameof(RankingsStrings.TypeScore))]
+ Score,
+
+ [LocalisableDescription(typeof(RankingsStrings), nameof(RankingsStrings.TypeCountry))]
+ Country
+ }
+}
diff --git a/osu.Game/Overlays/Rankings/RankingsSortTabControl.cs b/osu.Game/Overlays/Rankings/RankingsSortTabControl.cs
index c04eb5bdd1..f05795b2a2 100644
--- a/osu.Game/Overlays/Rankings/RankingsSortTabControl.cs
+++ b/osu.Game/Overlays/Rankings/RankingsSortTabControl.cs
@@ -1,7 +1,6 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using osu.Framework.Extensions.LocalisationExtensions;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
@@ -16,28 +15,12 @@ namespace osu.Game.Overlays.Rankings
}
}
- [LocalisableEnum(typeof(RankingsSortCriteriaEnumLocalisationMapper))]
public enum RankingsSortCriteria
{
+ [LocalisableDescription(typeof(SortStrings), nameof(SortStrings.All))]
All,
+
+ [LocalisableDescription(typeof(SortStrings), nameof(SortStrings.Friends))]
Friends
}
-
- public class RankingsSortCriteriaEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(RankingsSortCriteria value)
- {
- switch (value)
- {
- case RankingsSortCriteria.All:
- return SortStrings.All;
-
- case RankingsSortCriteria.Friends:
- return SortStrings.Friends;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/Overlays/Wiki/WikiHeader.cs b/osu.Game/Overlays/Wiki/WikiHeader.cs
index fb87486b4e..3e81d2cffe 100644
--- a/osu.Game/Overlays/Wiki/WikiHeader.cs
+++ b/osu.Game/Overlays/Wiki/WikiHeader.cs
@@ -6,15 +6,18 @@ using System.Linq;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Localisation;
+using osu.Game.Localisation;
using osu.Game.Online.API.Requests.Responses;
+using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Overlays.Wiki
{
public class WikiHeader : BreadcrumbControlOverlayHeader
{
- private const string index_page_string = "index";
private const string index_path = "Main_Page";
+ public static LocalisableString IndexPageString => LayoutStrings.HeaderHelpIndex;
+
public readonly Bindable WikiPageData = new Bindable();
public Action ShowIndexPage;
@@ -22,8 +25,8 @@ namespace osu.Game.Overlays.Wiki
public WikiHeader()
{
- TabControl.AddItem(index_page_string);
- Current.Value = index_page_string;
+ TabControl.AddItem(IndexPageString);
+ Current.Value = IndexPageString;
WikiPageData.BindValueChanged(onWikiPageChange);
Current.BindValueChanged(onCurrentChange);
@@ -37,11 +40,11 @@ namespace osu.Game.Overlays.Wiki
TabControl.Clear();
Current.Value = null;
- TabControl.AddItem(index_page_string);
+ TabControl.AddItem(IndexPageString);
if (e.NewValue.Path == index_path)
{
- Current.Value = index_page_string;
+ Current.Value = IndexPageString;
return;
}
@@ -57,7 +60,7 @@ namespace osu.Game.Overlays.Wiki
if (e.NewValue == TabControl.Items.LastOrDefault())
return;
- if (e.NewValue == index_page_string)
+ if (e.NewValue == IndexPageString)
{
ShowIndexPage?.Invoke();
return;
@@ -74,8 +77,8 @@ namespace osu.Game.Overlays.Wiki
{
public WikiHeaderTitle()
{
- Title = "wiki";
- Description = "knowledge base";
+ Title = PageTitleStrings.MainWikiControllerDefault;
+ Description = NamedOverlayComponentStrings.WikiDescription;
IconTexture = "Icons/Hexacons/wiki";
}
}
diff --git a/osu.Game/Scoring/ScoreRank.cs b/osu.Game/Scoring/ScoreRank.cs
index f3b4551ff8..64f7da9ba3 100644
--- a/osu.Game/Scoring/ScoreRank.cs
+++ b/osu.Game/Scoring/ScoreRank.cs
@@ -1,74 +1,44 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.ComponentModel;
using osu.Framework.Localisation;
using osu.Game.Resources.Localisation.Web;
namespace osu.Game.Scoring
{
- [LocalisableEnum(typeof(ScoreRankEnumLocalisationMapper))]
public enum ScoreRank
{
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankD))]
[Description(@"D")]
D,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankC))]
[Description(@"C")]
C,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankB))]
[Description(@"B")]
B,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankA))]
[Description(@"A")]
A,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankS))]
[Description(@"S")]
S,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankSH))]
[Description(@"S+")]
SH,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankX))]
[Description(@"SS")]
X,
+ [LocalisableDescription(typeof(BeatmapsStrings), nameof(BeatmapsStrings.RankXH))]
[Description(@"SS+")]
XH,
}
-
- public class ScoreRankEnumLocalisationMapper : EnumLocalisationMapper
- {
- public override LocalisableString Map(ScoreRank value)
- {
- switch (value)
- {
- case ScoreRank.XH:
- return BeatmapsStrings.RankXH;
-
- case ScoreRank.X:
- return BeatmapsStrings.RankX;
-
- case ScoreRank.SH:
- return BeatmapsStrings.RankSH;
-
- case ScoreRank.S:
- return BeatmapsStrings.RankS;
-
- case ScoreRank.A:
- return BeatmapsStrings.RankA;
-
- case ScoreRank.B:
- return BeatmapsStrings.RankB;
-
- case ScoreRank.C:
- return BeatmapsStrings.RankC;
-
- case ScoreRank.D:
- return BeatmapsStrings.RankD;
-
- default:
- throw new ArgumentOutOfRangeException(nameof(value), value, null);
- }
- }
- }
}
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index 7e32f1e9fd..4b0edf990e 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -36,8 +36,8 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/osu.iOS.props b/osu.iOS.props
index 7b7d5f80fe..e4992e1132 100644
--- a/osu.iOS.props
+++ b/osu.iOS.props
@@ -70,8 +70,8 @@
-
-
+
+
@@ -93,7 +93,7 @@
-
+