feat: 支持替换绑定内容
This commit is contained in:
@@ -3,7 +3,7 @@ using Avalonia.Data.Converters;
|
|||||||
|
|
||||||
namespace JackCraft.I18N.Converters;
|
namespace JackCraft.I18N.Converters;
|
||||||
|
|
||||||
internal class I18NConverter(I18NBinding binding, object[] bindingValues) : IMultiValueConverter
|
internal class I18NConverter(I18NBinding binding, dynamic[] bindingValues) : IMultiValueConverter
|
||||||
{
|
{
|
||||||
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
@@ -12,8 +12,11 @@ internal class I18NConverter(I18NBinding binding, object[] bindingValues) : IMul
|
|||||||
if (binding.KeyConverter.Convert(values[1], null!, null, culture) is not string key)
|
if (binding.KeyConverter.Convert(values[1], null!, null, culture) is not string key)
|
||||||
return values[1];
|
return values[1];
|
||||||
var value = I18NConfig.Manager.Get<object>(key, values[0] as CultureInfo);
|
var value = I18NConfig.Manager.Get<object>(key, values[0] as CultureInfo);
|
||||||
if (value is string str && bindingValues.Length > 0)
|
if (value is not string str) return binding.ValueConverter.Convert(value, null!, null, culture);
|
||||||
|
if (bindingValues is string[] && bindingValues.Length > 0)
|
||||||
value = string.Format(str, bindingValues);
|
value = string.Format(str, bindingValues);
|
||||||
|
else if (bindingValues.Length > 0)
|
||||||
|
value = string.Format(str, values.Skip(2).ToArray());
|
||||||
return binding.ValueConverter.Convert(value, null!, null, culture);
|
return binding.ValueConverter.Convert(value, null!, null, culture);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -19,5 +19,7 @@ internal class I18NBinding : MultiBinding
|
|||||||
ValueConverter = new I18NValueConverter();
|
ValueConverter = new I18NValueConverter();
|
||||||
Bindings.Add(new Binding { Source = I18NConfig.Manager, Path = nameof(I18NConfig.Manager.Culture) });
|
Bindings.Add(new Binding { Source = I18NConfig.Manager, Path = nameof(I18NConfig.Manager.Culture) });
|
||||||
Bindings.Add(new Binding { Source = key });
|
Bindings.Add(new Binding { Source = key });
|
||||||
|
foreach (var value in values)
|
||||||
|
Bindings.Add(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -2,12 +2,35 @@ using Avalonia.Markup.Xaml;
|
|||||||
|
|
||||||
namespace JackCraft.I18N;
|
namespace JackCraft.I18N;
|
||||||
|
|
||||||
public class I18NExtension(string key, params object[] values) : MarkupExtension
|
public class I18NExtension(string key, params dynamic[] values) : MarkupExtension
|
||||||
{
|
{
|
||||||
public I18NExtension(string key) : this(key, [])
|
public I18NExtension(string key) : this(key, [])
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public I18NExtension(string key, dynamic value1) : this(key, [value1])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public I18NExtension(string key, dynamic value1, dynamic value2) : this(key, [value1, value2])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public I18NExtension(string key, dynamic value1, dynamic value2, dynamic value3) : this(key,
|
||||||
|
[value1, value2, value3])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public I18NExtension(string key, dynamic value1, dynamic value2, dynamic value3, dynamic value4) : this(key,
|
||||||
|
[value1, value2, value3, value4])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public I18NExtension(string key, dynamic value1, dynamic value2, dynamic value3, dynamic value4, dynamic value5) :
|
||||||
|
this(key, [value1, value2, value3, value4, value5])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public override object ProvideValue(IServiceProvider serviceProvider)
|
public override object ProvideValue(IServiceProvider serviceProvider)
|
||||||
{
|
{
|
||||||
return new I18NBinding(key, values);
|
return new I18NBinding(key, values);
|
||||||
|
Reference in New Issue
Block a user