mirror of
https://github.com/ppy/osu.git
synced 2025-01-29 06:33:21 +08:00
Merge pull request #20340 from azutake/localisation-settings
Localize non-localizable setting items
This commit is contained in:
commit
bda97b407b
@ -89,6 +89,11 @@ namespace osu.Game.Localisation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString Collections => new TranslatableString(getKey(@"collections"), @"Collections");
|
public static LocalisableString Collections => new TranslatableString(getKey(@"collections"), @"Collections");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Mod presets"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString ModPresets => new TranslatableString(getKey(@"mod_presets"), @"Mod presets");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// "Name"
|
/// "Name"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -44,11 +44,6 @@ namespace osu.Game.Localisation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString ClearAllCaches => new TranslatableString(getKey(@"clear_all_caches"), @"Clear all caches");
|
public static LocalisableString ClearAllCaches => new TranslatableString(getKey(@"clear_all_caches"), @"Clear all caches");
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// "Compact realm"
|
|
||||||
/// </summary>
|
|
||||||
public static LocalisableString CompactRealm => new TranslatableString(getKey(@"compact_realm"), @"Compact realm");
|
|
||||||
|
|
||||||
private static string getKey(string key) => $"{prefix}:{key}";
|
private static string getKey(string key) => $"{prefix}:{key}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,11 @@ namespace osu.Game.Localisation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString RunSetupWizard => new TranslatableString(getKey(@"run_setup_wizard"), @"Run setup wizard");
|
public static LocalisableString RunSetupWizard => new TranslatableString(getKey(@"run_setup_wizard"), @"Run setup wizard");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "You are running the latest release ({0})"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString RunningLatestRelease(string version) => new TranslatableString(getKey(@"running_latest_release"), @"You are running the latest release ({0})", version);
|
||||||
|
|
||||||
private static string getKey(string key) => $"{prefix}:{key}";
|
private static string getKey(string key) => $"{prefix}:{key}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,41 @@ namespace osu.Game.Localisation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString SelectDirectory => new TranslatableString(getKey(@"select_directory"), @"Select directory");
|
public static LocalisableString SelectDirectory => new TranslatableString(getKey(@"select_directory"), @"Select directory");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Migration in progress"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString MigrationInProgress => new TranslatableString(getKey(@"migration_in_progress"), @"Migration in progress");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "This could take a few minutes depending on the speed of your disk(s)."
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString MigrationDescription => new TranslatableString(getKey(@"migration_description"), @"This could take a few minutes depending on the speed of your disk(s).");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Please avoid interacting with the game!"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString ProhibitedInteractDuringMigration => new TranslatableString(getKey(@"prohibited_interact_during_migration"), @"Please avoid interacting with the game!");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Some files couldn't be cleaned up during migration. Clicking this notification will open the folder so you can manually clean things up."
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString FailedCleanupNotification => new TranslatableString(getKey(@"failed_cleanup_notification"), @"Some files couldn't be cleaned up during migration. Clicking this notification will open the folder so you can manually clean things up.");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Please select a new location"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString SelectNewLocation => new TranslatableString(getKey(@"select_new_location"), @"Please select a new location");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "The target directory already seems to have an osu! install. Use that data instead?"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString TargetDirectoryAlreadyInstalledOsu => new TranslatableString(getKey(@"target_directory_already_installed_osu"), @"The target directory already seems to have an osu! install. Use that data instead?");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "To complete this operation, osu! will close. Please open it again to use the new data location."
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString RestartAndReOpenRequiredForCompletion => new TranslatableString(getKey(@"restart_and_re_open_required_for_completion"), @"To complete this operation, osu! will close. Please open it again to use the new data location.");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// "Import beatmaps from stable"
|
/// "Import beatmaps from stable"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -84,6 +119,26 @@ namespace osu.Game.Localisation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString RestoreAllRecentlyDeletedModPresets => new TranslatableString(getKey(@"restore_all_recently_deleted_mod_presets"), @"Restore all recently deleted mod presets");
|
public static LocalisableString RestoreAllRecentlyDeletedModPresets => new TranslatableString(getKey(@"restore_all_recently_deleted_mod_presets"), @"Restore all recently deleted mod presets");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Deleted all collections!"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString DeletedAllCollections => new TranslatableString(getKey(@"deleted_all_collections"), @"Deleted all collections!");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Deleted all mod presets!"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString DeletedAllModPresets => new TranslatableString(getKey(@"deleted_all_mod_presets"), @"Deleted all mod presets!");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Restored all deleted mod presets!"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString RestoredAllDeletedModPresets => new TranslatableString(getKey(@"restored_all_deleted_mod_presets"), @"Restored all deleted mod presets!");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "Please select your osu!stable install location"
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString StableDirectorySelectHeader => new TranslatableString(getKey(@"stable_directory_select_header"), @"Please select your osu!stable install location");
|
||||||
|
|
||||||
private static string getKey(string key) => $"{prefix}:{key}";
|
private static string getKey(string key) => $"{prefix}:{key}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,11 @@ namespace osu.Game.Localisation
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static LocalisableString NoTabletDetected => new TranslatableString(getKey(@"no_tablet_detected"), @"No tablet detected!");
|
public static LocalisableString NoTabletDetected => new TranslatableString(getKey(@"no_tablet_detected"), @"No tablet detected!");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// "If your tablet is not detected, please read [this FAQ]({0}) for troubleshooting steps."
|
||||||
|
/// </summary>
|
||||||
|
public static LocalisableString NoTabletDetectedDescription(string url) => new TranslatableString(getKey(@"no_tablet_detected_description"), @"If your tablet is not detected, please read [this FAQ]({0}) for troubleshooting steps.", url);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// "Reset to full area"
|
/// "Reset to full area"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Localisation;
|
||||||
using osu.Game.Resources.Localisation.Web;
|
using osu.Game.Resources.Localisation.Web;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Dialog
|
namespace osu.Game.Overlays.Dialog
|
||||||
@ -20,7 +21,7 @@ namespace osu.Game.Overlays.Dialog
|
|||||||
/// <param name="message">The description of the action to be displayed to the user.</param>
|
/// <param name="message">The description of the action to be displayed to the user.</param>
|
||||||
/// <param name="onConfirm">An action to perform on confirmation.</param>
|
/// <param name="onConfirm">An action to perform on confirmation.</param>
|
||||||
/// <param name="onCancel">An optional action to perform on cancel.</param>
|
/// <param name="onCancel">An optional action to perform on cancel.</param>
|
||||||
public ConfirmDialog(string message, Action onConfirm, Action onCancel = null)
|
public ConfirmDialog(LocalisableString message, Action onConfirm, Action onCancel = null)
|
||||||
{
|
{
|
||||||
HeaderText = message;
|
HeaderText = message;
|
||||||
BodyText = "Last chance to turn back";
|
BodyText = "Last chance to turn back";
|
||||||
|
@ -35,7 +35,7 @@ namespace osu.Game.Overlays.Settings.Sections.DebugSettings
|
|||||||
},
|
},
|
||||||
new SettingsButton
|
new SettingsButton
|
||||||
{
|
{
|
||||||
Text = DebugSettingsStrings.CompactRealm,
|
Text = "Compact realm",
|
||||||
Action = () =>
|
Action = () =>
|
||||||
{
|
{
|
||||||
// Blocking operations implicitly causes a Compact().
|
// Blocking operations implicitly causes a Compact().
|
||||||
|
@ -54,7 +54,7 @@ namespace osu.Game.Overlays.Settings.Sections.General
|
|||||||
{
|
{
|
||||||
notifications?.Post(new SimpleNotification
|
notifications?.Post(new SimpleNotification
|
||||||
{
|
{
|
||||||
Text = $"You are running the latest release ({game.Version})",
|
Text = GeneralSettingsStrings.RunningLatestRelease(game.Version),
|
||||||
Icon = FontAwesome.Solid.CheckCircle,
|
Icon = FontAwesome.Solid.CheckCircle,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ namespace osu.Game.Overlays.Settings.Sections.Input
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours, LocalisationManager localisation)
|
||||||
{
|
{
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
@ -110,11 +110,10 @@ namespace osu.Game.Overlays.Settings.Sections.Input
|
|||||||
if (RuntimeInfo.OS == RuntimeInfo.Platform.Windows || RuntimeInfo.OS == RuntimeInfo.Platform.Linux)
|
if (RuntimeInfo.OS == RuntimeInfo.Platform.Windows || RuntimeInfo.OS == RuntimeInfo.Platform.Linux)
|
||||||
{
|
{
|
||||||
t.NewLine();
|
t.NewLine();
|
||||||
t.AddText("If your tablet is not detected, please read ");
|
var formattedSource = MessageFormatter.FormatText(localisation.GetLocalisedBindableString(TabletSettingsStrings.NoTabletDetectedDescription(RuntimeInfo.OS == RuntimeInfo.Platform.Windows
|
||||||
t.AddLink("this FAQ", LinkAction.External, RuntimeInfo.OS == RuntimeInfo.Platform.Windows
|
|
||||||
? @"https://opentabletdriver.net/Wiki/FAQ/Windows"
|
? @"https://opentabletdriver.net/Wiki/FAQ/Windows"
|
||||||
: @"https://opentabletdriver.net/Wiki/FAQ/Linux");
|
: @"https://opentabletdriver.net/Wiki/FAQ/Linux")).Value);
|
||||||
t.AddText(" for troubleshooting steps.");
|
t.AddLinks(formattedSource.Text, formattedSource.Links);
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
public class BeatmapSettings : SettingsSubsection
|
public class BeatmapSettings : SettingsSubsection
|
||||||
{
|
{
|
||||||
protected override LocalisableString Header => "Beatmaps";
|
protected override LocalisableString Header => CommonStrings.Beatmaps;
|
||||||
|
|
||||||
private SettingsButton importBeatmapsButton = null!;
|
private SettingsButton importBeatmapsButton = null!;
|
||||||
private SettingsButton deleteBeatmapsButton = null!;
|
private SettingsButton deleteBeatmapsButton = null!;
|
||||||
|
@ -12,7 +12,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
public class CollectionsSettings : SettingsSubsection
|
public class CollectionsSettings : SettingsSubsection
|
||||||
{
|
{
|
||||||
protected override LocalisableString Header => "Collections";
|
protected override LocalisableString Header => CommonStrings.Collections;
|
||||||
|
|
||||||
private SettingsButton importCollectionsButton = null!;
|
private SettingsButton importCollectionsButton = null!;
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
private void deleteAllCollections()
|
private void deleteAllCollections()
|
||||||
{
|
{
|
||||||
realm.Write(r => r.RemoveAll<BeatmapCollection>());
|
realm.Write(r => r.RemoveAll<BeatmapCollection>());
|
||||||
notificationOverlay?.Post(new ProgressCompletionNotification { Text = "Deleted all collections!" });
|
notificationOverlay?.Post(new ProgressCompletionNotification { Text = MaintenanceSettingsStrings.DeletedAllCollections });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ using osu.Framework.Screens;
|
|||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
|
using osu.Game.Localisation;
|
||||||
using osu.Game.Overlays.Notifications;
|
using osu.Game.Overlays.Notifications;
|
||||||
using osu.Game.Screens;
|
using osu.Game.Screens;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
@ -71,14 +72,14 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Text = "Migration in progress",
|
Text = MaintenanceSettingsStrings.MigrationInProgress,
|
||||||
Font = OsuFont.Default.With(size: 40)
|
Font = OsuFont.Default.With(size: 40)
|
||||||
},
|
},
|
||||||
new OsuSpriteText
|
new OsuSpriteText
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Text = "This could take a few minutes depending on the speed of your disk(s).",
|
Text = MaintenanceSettingsStrings.MigrationDescription,
|
||||||
Font = OsuFont.Default.With(size: 30)
|
Font = OsuFont.Default.With(size: 30)
|
||||||
},
|
},
|
||||||
new LoadingSpinner(true)
|
new LoadingSpinner(true)
|
||||||
@ -89,7 +90,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Text = "Please avoid interacting with the game!",
|
Text = MaintenanceSettingsStrings.ProhibitedInteractDuringMigration,
|
||||||
Font = OsuFont.Default.With(size: 30)
|
Font = OsuFont.Default.With(size: 30)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -111,7 +112,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
notifications.Post(new SimpleNotification
|
notifications.Post(new SimpleNotification
|
||||||
{
|
{
|
||||||
Text = "Some files couldn't be cleaned up during migration. Clicking this notification will open the folder so you can manually clean things up.",
|
Text = MaintenanceSettingsStrings.FailedCleanupNotification,
|
||||||
Activated = () =>
|
Activated = () =>
|
||||||
{
|
{
|
||||||
originalStorage.PresentExternally();
|
originalStorage.PresentExternally();
|
||||||
|
@ -12,6 +12,7 @@ using osu.Framework.Logging;
|
|||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
using osu.Framework.Screens;
|
using osu.Framework.Screens;
|
||||||
using osu.Game.IO;
|
using osu.Game.IO;
|
||||||
|
using osu.Game.Localisation;
|
||||||
using osu.Game.Overlays.Dialog;
|
using osu.Game.Overlays.Dialog;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
||||||
@ -35,7 +36,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
|
|
||||||
public override bool HideOverlaysOnEnter => true;
|
public override bool HideOverlaysOnEnter => true;
|
||||||
|
|
||||||
public override LocalisableString HeaderText => "Please select a new location";
|
public override LocalisableString HeaderText => MaintenanceSettingsStrings.SelectNewLocation;
|
||||||
|
|
||||||
protected override void OnSelection(DirectoryInfo directory)
|
protected override void OnSelection(DirectoryInfo directory)
|
||||||
{
|
{
|
||||||
@ -51,9 +52,9 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
// Quick test for whether there's already an osu! install at the target path.
|
// Quick test for whether there's already an osu! install at the target path.
|
||||||
if (fileInfos.Any(f => f.Name == OsuGameBase.CLIENT_DATABASE_FILENAME))
|
if (fileInfos.Any(f => f.Name == OsuGameBase.CLIENT_DATABASE_FILENAME))
|
||||||
{
|
{
|
||||||
dialogOverlay.Push(new ConfirmDialog("The target directory already seems to have an osu! install. Use that data instead?", () =>
|
dialogOverlay.Push(new ConfirmDialog(MaintenanceSettingsStrings.TargetDirectoryAlreadyInstalledOsu, () =>
|
||||||
{
|
{
|
||||||
dialogOverlay.Push(new ConfirmDialog("To complete this operation, osu! will close. Please open it again to use the new data location.", () =>
|
dialogOverlay.Push(new ConfirmDialog(MaintenanceSettingsStrings.RestartAndReOpenRequiredForCompletion, () =>
|
||||||
{
|
{
|
||||||
(storage as OsuStorage)?.ChangeDataPath(target.FullName);
|
(storage as OsuStorage)?.ChangeDataPath(target.FullName);
|
||||||
game.Exit();
|
game.Exit();
|
||||||
|
@ -16,7 +16,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
public class ModPresetSettings : SettingsSubsection
|
public class ModPresetSettings : SettingsSubsection
|
||||||
{
|
{
|
||||||
protected override LocalisableString Header => "Mod presets";
|
protected override LocalisableString Header => CommonStrings.ModPresets;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private RealmAccess realm { get; set; } = null!;
|
private RealmAccess realm { get; set; } = null!;
|
||||||
@ -64,7 +64,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
deleteAllButton.Enabled.Value = true;
|
deleteAllButton.Enabled.Value = true;
|
||||||
|
|
||||||
if (deletionTask.IsCompletedSuccessfully)
|
if (deletionTask.IsCompletedSuccessfully)
|
||||||
notificationOverlay?.Post(new ProgressCompletionNotification { Text = "Deleted all mod presets!" });
|
notificationOverlay?.Post(new ProgressCompletionNotification { Text = MaintenanceSettingsStrings.DeletedAllModPresets });
|
||||||
else if (deletionTask.IsFaulted)
|
else if (deletionTask.IsFaulted)
|
||||||
Logger.Error(deletionTask.Exception, "Failed to delete all mod presets");
|
Logger.Error(deletionTask.Exception, "Failed to delete all mod presets");
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
undeleteButton.Enabled.Value = true;
|
undeleteButton.Enabled.Value = true;
|
||||||
|
|
||||||
if (undeletionTask.IsCompletedSuccessfully)
|
if (undeletionTask.IsCompletedSuccessfully)
|
||||||
notificationOverlay?.Post(new ProgressCompletionNotification { Text = "Restored all deleted mod presets!" });
|
notificationOverlay?.Post(new ProgressCompletionNotification { Text = MaintenanceSettingsStrings.RestoredAllDeletedModPresets });
|
||||||
else if (undeletionTask.IsFaulted)
|
else if (undeletionTask.IsFaulted)
|
||||||
Logger.Error(undeletionTask.Exception, "Failed to restore mod presets");
|
Logger.Error(undeletionTask.Exception, "Failed to restore mod presets");
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
public class ScoreSettings : SettingsSubsection
|
public class ScoreSettings : SettingsSubsection
|
||||||
{
|
{
|
||||||
protected override LocalisableString Header => "Scores";
|
protected override LocalisableString Header => CommonStrings.Scores;
|
||||||
|
|
||||||
private SettingsButton importScoresButton = null!;
|
private SettingsButton importScoresButton = null!;
|
||||||
private SettingsButton deleteScoresButton = null!;
|
private SettingsButton deleteScoresButton = null!;
|
||||||
|
@ -12,7 +12,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
{
|
{
|
||||||
public class SkinSettings : SettingsSubsection
|
public class SkinSettings : SettingsSubsection
|
||||||
{
|
{
|
||||||
protected override LocalisableString Header => "Skins";
|
protected override LocalisableString Header => CommonStrings.Skins;
|
||||||
|
|
||||||
private SettingsButton importSkinsButton = null!;
|
private SettingsButton importSkinsButton = null!;
|
||||||
private SettingsButton deleteSkinsButton = null!;
|
private SettingsButton deleteSkinsButton = null!;
|
||||||
|
Loading…
Reference in New Issue
Block a user