diff --git a/JackCraft.I18N/Converters/I18NConverter.cs b/JackCraft.I18N/Converters/I18NConverter.cs index 3f29d8b..b618482 100644 --- a/JackCraft.I18N/Converters/I18NConverter.cs +++ b/JackCraft.I18N/Converters/I18NConverter.cs @@ -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 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(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); } } \ No newline at end of file diff --git a/JackCraft.I18N/I18NBinding.cs b/JackCraft.I18N/I18NBinding.cs index 1e91511..fbecfec 100644 --- a/JackCraft.I18N/I18NBinding.cs +++ b/JackCraft.I18N/I18NBinding.cs @@ -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); } } \ No newline at end of file diff --git a/JackCraft.I18N/I18NExtension.cs b/JackCraft.I18N/I18NExtension.cs index 67fe230..5a4a8be 100644 --- a/JackCraft.I18N/I18NExtension.cs +++ b/JackCraft.I18N/I18NExtension.cs @@ -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);