Files
ECommerce.Module/Components/Shared/MultiLangInput.razor
T

64 lines
2.1 KiB
Plaintext

@using System.Globalization
<div class="space-y-2">
<div>DEBUG: ActiveCulture=@ActiveCulture, HideTabs=@HideTabs, IsTextArea=@IsTextArea</div>
<div class="relative">
@if (IsTextArea)
{
<textarea value="@CurrentValue" @oninput="OnInput" class="textarea textarea-bordered w-full h-24"
placeholder="@(Placeholder)"></textarea>
}
else
{
<input type="text" value="@CurrentValue" @oninput="OnInput" class="input input-bordered w-full"
placeholder="@(Placeholder)" />
}
</div>
</div>
@code {
[Parameter] public Dictionary<string, string> Value { get; set; } = new();
[Parameter] public EventCallback<Dictionary<string, string>> ValueChanged { get; set; }
[Parameter] public string Placeholder { get; set; } = "";
[Parameter] public bool IsTextArea { get; set; } = false;
[Parameter] public string ActiveCulture { get; set; } = "en";
[Parameter] public EventCallback<string> ActiveCultureChanged { get; set; }
[Parameter] public bool HideTabs { get; set; } = false;
private static readonly Dictionary<string, string> SupportedCultures = new()
{
{ "en", "English" },
{ "ar", "العربية" },
{ "es", "Español" },
{ "de", "Deutsch" }
};
protected override void OnInitialized()
{
if (string.IsNullOrEmpty(ActiveCulture))
{
var current = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
if (SupportedCultures.ContainsKey(current))
{
ActiveCulture = current;
}
}
}
private string CurrentValue => Value != null && Value.TryGetValue(ActiveCulture, out var v) ? v : "";
private void OnInput(ChangeEventArgs e)
{
var value = e.Value?.ToString() ?? "";
if (Value == null) Value = new();
Value[ActiveCulture] = value;
ValueChanged.InvokeAsync(Value);
}
private async Task SelectCulture(string culture)
{
ActiveCulture = culture;
await ActiveCultureChanged.InvokeAsync(culture);
}
}