AMcoder - javascript, python, java, html, php, sql

Դինամիկ ռեսքս թարգմանություն Xamarin ձևերում՝ օգտագործելով MVVM

Մենք ունենք հավելված՝ գրված Pages-ով և առանց օրինաչափության, և ես ուզում եմ այն ​​նորից գրել MVVM-ի միջոցով: Ներկայումս մենք օգտագործում ենք Picker-ը լեզվի ընտրության համար, և երբ մշակույթը փոխվում է, մենք նորից սահմանում ենք label.Text կառավարները՝ դրանք նոր լեզվով վերագրելու համար: Ես նորից գրեցի նույն էջը՝ օգտագործելով MVVM, և այժմ SelectedItemPicker-ում կապված է Language օբյեկտի հետ: SelectedItem-ի սեթերում ես նաև փոխում եմ իմ resx-ի մշակույթը (AppResources.Culture), բայց դրանով կապված միջերեսը (օրինակ՝ Text="{x:Static resources:AppResources.Title) չի փոխում լեզուն:

Ամբողջական կոդը իմ SelectedItem սեթերում.

            SetProperty(ref selectedLanguage, value);
            AppResources.Culture = value.Culture;
            cultureManager.SetLocale(value.Culture);

Ինչպե՞ս պետք է թարմացնեմ իմ UI-ի բոլոր Text-երը: Կա՞ արդյոք նման բան անելու որևէ մաքուր միջոց, կարծես թարգմանության հիմնական կարիք կա... կամ դա նախատեսված չէր, հատկապես ոչ առանց դիտումը/հավելվածը փակելու:

Տեղայնացման համար ես գտա մոտեցումները՝ օգտագործելով IMarkupExtension և այս թեման Xamarin ֆորումներում որը գտնվում է end-ը արդյունավետ կերպով վերստեղծում է էջը...

Իմ նպատակն է իդեալականորեն վերաբեռնել տեքստը՝ առանց տեսքը նորից ստեղծելու/փակելու հավելվածը՝ օգտագործելով MVVM և մաքուր կոդը: Ես ունեմ մոտ 10 դիտում, ուստի այն պետք է լինի մի քանի անգամ օգտագործելի:


Պատասխանները:


1

Սկզբում ստեղծեք ձեր RESX ռեսուրսները: Ես օրինակ օգտագործում եմ en, nl, fr:

մուտքագրեք պատկերի նկարագրությունը այստեղ

Ստեղծեք դիտման մոդելը, որը կապում է LocalizedResources-ը:

 public class ViewModelBase : INotifyPropertyChanged
{
    public LocalizedResources Resources
    {
        get;
        private set;
    }

    public ViewModelBase()
    {
        Resources = new LocalizedResources(typeof(LocalizationDemoResources), App.CurrentLanguage);
    }

    public void OnPropertyChanged([CallerMemberName]string property = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

SettingsPage-ում օգտագործեք ընտրիչ՝ լեզուն ընտրելու համար:

   <StackLayout>
        <Label Text="{Binding Resources[PickLng]}" />
        <Picker ItemsSource="{Binding Languages}" SelectedItem="{Binding SelectedLanguage, Mode=TwoWay}" />
    </StackLayout>

Դիտեք SettingsPage-ի մոդելը:

public class SettingsViewModel : ViewModelBase
{
    public List<string> Languages { get; set; } = new List<string>()
    {
        "EN",
        "NL",
        "FR"
    };

    private string _SelectedLanguage;

    public string SelectedLanguage
    {
        get { return _SelectedLanguage; }
        set
        {
            _SelectedLanguage = value;
            SetLanguage();
        }
    }

    public SettingsViewModel()
    {
        _SelectedLanguage = App.CurrentLanguage;
    }

    private void SetLanguage()
    {
        App.CurrentLanguage = SelectedLanguage;
        MessagingCenter.Send<object, CultureChangedMessage>(this,
                string.Empty, new CultureChangedMessage(SelectedLanguage));
    }
}

Մի մոռացեք կապել համատեքստը:

Ես վերբեռնել եմ GitHub-ում, դուք կարող եք ներբեռնել իմ GitHub-ի DynamicallyBindingRESXResources պանակից՝ հղում ստանալու համար:

https://github.com/WendyZang/Test.git

մուտքագրեք պատկերի նկարագրությունը այստեղ

20.03.2020
  • Կարո՞ղ եք տեղեկացնել ինձ, թե ինչպես կօգտագործվի այս տեխնիկան, երբ ցանկանում եք պիտակի հետ անել այնպիսի մի բան. զամբյուղում կա {0} խնձոր, appleCount: Ես տեսնում եմ, որ մարդիկ դա անում են {Binding count, StringFormat={x.Static resx:res.applemessage}}-ով, բայց դա չի աշխատում LocalizedResource-ի հետ: 25.03.2020
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..