feat: 支持替换绑定内容
This commit is contained in:
@@ -3,7 +3,7 @@ using Avalonia.Data.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)
|
||||
{
|
||||
@@ -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)
|
||||
return values[1];
|
||||
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);
|
||||
else if (bindingValues.Length > 0)
|
||||
value = string.Format(str, values.Skip(2).ToArray());
|
||||
return binding.ValueConverter.Convert(value, null!, null, culture);
|
||||
}
|
||||
}
|
@@ -19,5 +19,7 @@ internal class I18NBinding : MultiBinding
|
||||
ValueConverter = new I18NValueConverter();
|
||||
Bindings.Add(new Binding { Source = I18NConfig.Manager, Path = nameof(I18NConfig.Manager.Culture) });
|
||||
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;
|
||||
|
||||
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, 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)
|
||||
{
|
||||
return new I18NBinding(key, values);
|
||||
|
Reference in New Issue
Block a user