3

據我所知,MvvmCross本地化插件提供了「靜態」引擎。我用下面的結合從會議爲例:MvvmCross動態文本值轉換

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

我希望能夠改變SQLBitsXAppSQLBitsXApp2動態。 目標是找到與天數相關的本地化文本。

有沒有辦法動態地做到這一點?

回答

1

你是對的 - 在該綁定中使用的默認MvxLanguageConverter實際上只適用於簡單的靜態文本。

對於更多的相關情況,您需要爲每種情況構建自己的轉換器 - 但希望其中的一些可以重用。

作爲起始例如,檢查出的會議樣品顯示使用如何鳴叫倍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); 
    } 
} 

這是Android axml使用像在https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Resources/Layout/ListItem_Tweet.xml

<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'}}" 
    /> 
+0

我定義包含一個LocalizationBag類LanguageBinder和一個stringtofind屬性,並將一個新的屬性CustomBag添加到AboutViewModel以將TextView文本綁定到它。在MvxLanguageBinderConverter中,我檢查值是IMvxLanguageBinder還是LocalizationBag。如果使用IMvxLanguageBinder,則使用靜態引擎,但如果使用LocalizationBag,則將statict參數替換爲stringtofind以提供動態引擎。使用會議樣本進行測試,我將嘗試使用我的枚舉運行。 – Alphapage

+0

很想看到你的博客一些這個地方;) – Stuart

+0

沒有博客對我抱歉!我會用我的代碼發佈一個新的評論功能給github。我的枚舉翻譯現在正在努力。感謝您的幫助。 – Alphapage