diff --git a/osu.Game/Localisation/Common.ja.resx b/osu.Game/Localisation/Common.ja.resx
new file mode 100644
index 0000000000..174751c455
--- /dev/null
+++ b/osu.Game/Localisation/Common.ja.resx
@@ -0,0 +1,17 @@
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ やめとくわ
+
+
diff --git a/osu.Game/Localisation/Common.resx b/osu.Game/Localisation/Common.resx
new file mode 100644
index 0000000000..f63fb90086
--- /dev/null
+++ b/osu.Game/Localisation/Common.resx
@@ -0,0 +1,17 @@
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Cancel
+
+
diff --git a/osu.Game/Localisation/CommonStrings.cs b/osu.Game/Localisation/CommonStrings.cs
new file mode 100644
index 0000000000..f448158191
--- /dev/null
+++ b/osu.Game/Localisation/CommonStrings.cs
@@ -0,0 +1,19 @@
+// 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 CommonStrings
+ {
+ private const string prefix = "osu.Game.Localisation.Common";
+
+ ///
+ /// "Cancel"
+ ///
+ public static LocalisableString Cancel => new TranslatableString(getKey("cancel"), "Cancel");
+
+ private static string getKey(string key) => $"{prefix}:{key}";
+ }
+}
diff --git a/osu.Game/Localisation/Language.cs b/osu.Game/Localisation/Language.cs
new file mode 100644
index 0000000000..edcf264c7f
--- /dev/null
+++ b/osu.Game/Localisation/Language.cs
@@ -0,0 +1,16 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System.ComponentModel;
+
+namespace osu.Game.Localisation
+{
+ public enum Language
+ {
+ [Description("English")]
+ en,
+
+ [Description("日本語")]
+ ja
+ }
+}
diff --git a/osu.Game/Localisation/MainMenu.ja.resx b/osu.Game/Localisation/MainMenu.ja.resx
new file mode 100644
index 0000000000..20c85110ad
--- /dev/null
+++ b/osu.Game/Localisation/MainMenu.ja.resx
@@ -0,0 +1,17 @@
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ ソロ
+
+
\ No newline at end of file
diff --git a/osu.Game/Localisation/MainMenu.resx b/osu.Game/Localisation/MainMenu.resx
new file mode 100644
index 0000000000..845b412d88
--- /dev/null
+++ b/osu.Game/Localisation/MainMenu.resx
@@ -0,0 +1,17 @@
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ solo
+
+
diff --git a/osu.Game/Localisation/MainMenuStrings.cs b/osu.Game/Localisation/MainMenuStrings.cs
new file mode 100644
index 0000000000..fd9647467a
--- /dev/null
+++ b/osu.Game/Localisation/MainMenuStrings.cs
@@ -0,0 +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 osu.Framework.Localisation;
+
+namespace osu.Game.Localisation
+{
+ public static class MainMenuStrings
+ {
+ private const string prefix = "osu.Game.Localisation.MainMenu";
+
+ ///
+ /// "solo"
+ ///
+ public static LocalisableString Solo => new TranslatableString(getKey("solo"), "solo");
+
+ ///
+ /// "multi"
+ ///
+ public static LocalisableString Multi => new TranslatableString(getKey("multi"), "multi");
+
+ private static string getKey(string key) => $"{prefix}:{key}";
+ }
+}
diff --git a/osu.Game/Overlays/Dialog/ConfirmDialog.cs b/osu.Game/Overlays/Dialog/ConfirmDialog.cs
index a87c06ffdf..d1c0d746d1 100644
--- a/osu.Game/Overlays/Dialog/ConfirmDialog.cs
+++ b/osu.Game/Overlays/Dialog/ConfirmDialog.cs
@@ -33,7 +33,7 @@ namespace osu.Game.Overlays.Dialog
},
new PopupDialogCancelButton
{
- Text = @"Cancel",
+ Text = Localisation.CommonStrings.Cancel,
Action = onCancel
},
};
diff --git a/osu.Game/Screens/Menu/Button.cs b/osu.Game/Screens/Menu/Button.cs
index d956394ebb..26f26d1304 100644
--- a/osu.Game/Screens/Menu/Button.cs
+++ b/osu.Game/Screens/Menu/Button.cs
@@ -19,6 +19,7 @@ using osu.Game.Graphics.Containers;
using osu.Framework.Graphics.Effects;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Input.Events;
+using osu.Framework.Localisation;
using osu.Game.Beatmaps.ControlPoints;
namespace osu.Game.Screens.Menu
@@ -50,7 +51,7 @@ namespace osu.Game.Screens.Menu
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => box.ReceivePositionalInputAt(screenSpacePos);
- public Button(string text, string sampleName, IconUsage symbol, Color4 colour, Action clickAction = null, float extraWidth = 0, Key triggerKey = Key.Unknown)
+ public Button(LocalisableString text, string sampleName, IconUsage symbol, Color4 colour, Action clickAction = null, float extraWidth = 0, Key triggerKey = Key.Unknown)
{
this.sampleName = sampleName;
this.clickAction = clickAction;
diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs
index 81b1cb0bf1..ff5ad37b9d 100644
--- a/osu.Game/Screens/Menu/ButtonSystem.cs
+++ b/osu.Game/Screens/Menu/ButtonSystem.cs
@@ -15,6 +15,7 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
+using osu.Framework.Localisation;
using osu.Framework.Logging;
using osu.Framework.Platform;
using osu.Framework.Threading;
@@ -22,6 +23,7 @@ using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Input;
using osu.Game.Input.Bindings;
+using osu.Game.Localisation;
using osu.Game.Online.API;
using osu.Game.Overlays;
using osu.Game.Overlays.Notifications;
@@ -121,10 +123,10 @@ namespace osu.Game.Screens.Menu
private LoginOverlay loginOverlay { get; set; }
[BackgroundDependencyLoader(true)]
- private void load(AudioManager audio, IdleTracker idleTracker, GameHost host)
+ private void load(AudioManager audio, IdleTracker idleTracker, GameHost host, LocalisationManager strings)
{
- buttonsPlay.Add(new Button(@"solo", @"button-solo-select", FontAwesome.Solid.User, new Color4(102, 68, 204, 255), () => OnSolo?.Invoke(), WEDGE_WIDTH, Key.P));
- buttonsPlay.Add(new Button(@"multi", @"button-generic-select", FontAwesome.Solid.Users, new Color4(94, 63, 186, 255), onMultiplayer, 0, Key.M));
+ buttonsPlay.Add(new Button(MainMenuStrings.Solo, @"button-solo-select", FontAwesome.Solid.User, new Color4(102, 68, 204, 255), () => OnSolo?.Invoke(), WEDGE_WIDTH, Key.P));
+ buttonsPlay.Add(new Button(MainMenuStrings.Multi, @"button-generic-select", FontAwesome.Solid.Users, new Color4(94, 63, 186, 255), onMultiplayer, 0, Key.M));
buttonsPlay.Add(new Button(@"playlists", @"button-generic-select", OsuIcon.Charts, new Color4(94, 63, 186, 255), onPlaylists, 0, Key.L));
buttonsPlay.ForEach(b => b.VisibleState = ButtonSystemState.Play);