代码之家  ›  专栏  ›  技术社区  ›  Stefan0309

Xamarin在代码隐藏中形成本地化

  •  2
  • Stefan0309  · 技术社区  · 7 年前

    here 并遵循指示。 它仅适用于具有

    <Label Text="{i18n:Translate SelectLanguage}"  />
    

    但我需要它在我的代码背后:

     Label selectLabel = new Label
            {
                Text = "{i18n:Translate SelectLanguage}",
                TextColor = Color.Black
            };
    

    该标签的输出为:{i18n:Translate-SelectLanguage}。

    更新:

    我的xaml页面:

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyProj.Forms.Pages.TestPages.ChangeLanguagePage"
             xmlns:i18n="clr-namespace:MyProj.Forms.Helpers"
             Title="{i18n:Translate ChangeLanguage}">>
    <ContentPage.Content>
        <StackLayout Padding="20" VerticalOptions="CenterAndExpand">
            <Label   Text="{i18n:Translate SelectLanguage}"  />
            <Picker x:Name="picker" />
            <Button Text="{i18n:Translate Save}" Clicked="OnUpdateLangugeClicked" BackgroundColor="Black" TextColor="White"/>
        </StackLayout>
    </ContentPage.Content>
    </ContentPage>
    

    我的代码隐藏页:

        [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class ChangeLanguagePage : ContentPage
    {
        Picker picker;
        public ChangeLanguagePage()
        {
            InitializeComponent();
            StackLayout main = new StackLayout();
    
            Label selectLabel = new Label
            {
                //Text = "Select Language",
                Text = "{i18n:Translate SelectLanguage}",
                TextColor = Color.Black
            };
    
            picker = new Picker();
    
            Button btn = new Button
            {
                Text = "SAVE",
                TextColor = Color.White,
                BackgroundColor = Color.Black
            };
            btn.Clicked += Btn_Clicked;
            picker.Items.Add("English");
            picker.Items.Add("Spanish");
            picker.Items.Add("Portuguese");
            picker.Items.Add("French");
            picker.SelectedItem = CrossMultilingual.Current.CurrentCultureInfo.EnglishName;
    
            main.Children.Add(selectLabel);
            main.Children.Add(picker);
            main.Children.Add(btn);
    
            Content = main;
        }
    
        private void Btn_Clicked(object sender, EventArgs e)
        {
            CrossMultilingual.Current.CurrentCultureInfo = CrossMultilingual.Current.NeutralCultureInfoList.ToList().First(element => element.EnglishName.Contains(picker.SelectedItem.ToString()));
            AppResources.Culture = CrossMultilingual.Current.CurrentCultureInfo;
            App.Current.MainPage = new NavigationPage(new HomePage());
        }
    
        void OnUpdateLangugeClicked(object sender, System.EventArgs e)
        {
    
            CrossMultilingual.Current.CurrentCultureInfo = CrossMultilingual.Current.NeutralCultureInfoList.ToList().First(element => element.EnglishName.Contains(picker.SelectedItem.ToString()));
            AppResources.Culture = CrossMultilingual.Current.CurrentCultureInfo;
            App.Current.MainPage = new NavigationPage(new HomePage());
    
        }
    }
    
    2 回复  |  直到 5 年前
        1
  •  2
  •   Jesus Angulo    7 年前

    没有等效的代码,这些服务只能通过XAML提供

    但是你可以很容易地替换它。

    const string ResourceId = "$rootnamespace$.AppResources";
    var resmgr = new ResourceManager(ResourceId,typeof(TranslateExtension).GetTypeInfo().Assembly));        
    var ci = CrossMultilingual.Current.CurrentCultureInfo;
    Label selectLabel = new Label
    {
      Text = resmgr.GetString("SelectLanguage",ci),
      TextColor = Color.Black
    };
    

    $rootnamespace$ 使用项目命名空间。

    https://github.com/CrossGeeks/MultilingualPlugin/blob/master/content/TranslateExtension.txt.pp

        2
  •  0
  •   Bright Lee    7 年前
    Text = Resx.LocalizedString.SelectLanguage,
    

    我很惊讶其他人说你说的很好,应该有效。

    我不知道。无论如何,当你在代码中使用它时,你可以这样使用它。