LocalizationProvider.razor.cs
using System;
using BetterUI.Extensions;
using Sandbox.Localization;
namespace BetterUI;
/// <summary>
/// A panel that manages the global language.
/// </summary>
/// <remarks>
/// Use this panel to set the language of your UI.
/// </remarks>
public sealed partial class LocalizationProvider : Panel
{
/// <summary>
/// The default language to use if no language is set.
/// </summary>
/// <remarks>
/// Defaults to "en-us".
/// </remarks>
public const string DefaultLanguageCode = "en";
/// <summary>
/// The current language.
/// </summary>
public LanguageInformation? Language { get; set; }
protected override void OnAfterTreeRender( bool firstTime )
{
if ( firstTime && Language is null )
{
// Language = Sandbox.Language.Current;
SetLanguage( Sandbox.Language.Current.Abbreviation );
}
}
/// <summary>
/// Sets the language.
/// </summary>
/// <param name="languageCode">The language to set.</param>
public void SetLanguage( string languageCode )
{
// Facepunch made it readonly now
// Sandbox.Language.SelectedCode = languageCode;
Language = Languages.Find( languageCode );
Scene.RunSceneEvent<ILocalizationEvent>( x => x.OnLanguageChanged( Language! ) );
}
/// <summary>
/// Gets the localized string for the given key.
/// </summary>
/// <param name="key">The key of the string to get.</param>
/// <returns>The localized string.</returns>
public static string GetValue( string key ) => Sandbox.Language.GetPhrase( key );
protected override int BuildHash() => HashCode.Combine( Language );
}