3

私の知る限り、MvvmCross ローカリゼーション プラグインは「静的」エンジンを提供します。Conference の例として、次のバインディングを使用します。

local:MvxBind="{'Text'{'Path':'TextSource','Converter':'Language','ConverterParameter':'SQLBitsXApp'}}"

動的SQLBitsXAppに変更できるようにしたい。SQLBitsXApp2目標は、日の列挙に関連するローカライズされたテキストを見つけることです。

これを動的に行う方法はありますか?

4

1 に答える 1

1

その通りです。そのバインディングで使用されるデフォルトの MvxLanguageConverter は、実際には単純な静的テキストに対してのみ存在します。

より複雑な状況では、ケースごとに独自のコンバーターを作成する必要がありますが、うまくいけば、これらのいくつかは再利用可能になります。

最初の例として、Conference サンプルがTimeAgoConverter.csを使用してツイート時間を表示する方法を確認してください。

public class TimeAgoValueConverter
    : MvxBaseValueConverter
      , IMvxServiceConsumer<IMvxTextProvider>
{
    private IMvxTextProvider _textProvider;
    private IMvxTextProvider TextProvider
    {
        get
        {
            if (_textProvider == null)
            {
                _textProvider = this.GetService<IMvxTextProvider>();
            }
            return _textProvider;
        }
    }

    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var when = (DateTime)value;

        string whichFormat;
        int valueToFormat;

        if (when == DateTime.MinValue)
        {
            whichFormat = "TimeAgo.Never";
            valueToFormat = 0;
        }
        else
        {
            var whenUtc = when.ToUniversalTime();
            var difference = (DateTime.UtcNow - whenUtc).TotalSeconds;
            if (difference < 30.0)
            {
                whichFormat = "TimeAgo.JustNow";
               valueToFormat = 0;
            }
            // ... etc
        }

        var format = TextProvider.GetText(Constants.GeneralNamespace, Constants.Shared, whichFormat);
        return string.Format(format, valueToFormat);
    }
}

これは、 https : //github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Resources/Layout/ListItem_Tweet.xmlのように Android axml で使用されます。

<TextView
 android:id="@+id/TimeTextView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textSize="10dip"
 android:textColor="@color/icongrey"
  local:MvxBind="{'Text':{'Path':'Item.Timestamp','Converter':'TimeAgo'}}"
   />
于 2012-11-20T12:38:42.380 に答える