代码隐藏中的 Xamarin Forms 本地化
Xamarin Forms Localization in code behind
我已经从 here 实施并遵循了说明。
它仅适用于 xaml 和
<Label Text="{i18n:Translate SelectLanguage}" />
但我的代码后面需要它:
Label selectLabel = new Label
{
Text = "{i18n:Translate SelectLanguage}",
TextColor = Color.Black
};
该标签的输出是:{i18n:Translate SelectLanguage}。
有什么解决方法吗?
更新:
根据要求,我添加了我的代码(代码隐藏和 xaml 页)。如果您需要更多信息,请告诉我。
我刚把xamarin上传到最新版本,还是一样的问题
我的 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());
}
}
Text = Resx.LocalizedString.SelectLanguage,
我很惊讶其他人说你说的很好并且应该有效。
我不知道。反正你在代码里用的时候就这么用。
There is no code-equivalent, the services are only available via 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
我已经从 here 实施并遵循了说明。 它仅适用于 xaml 和
<Label Text="{i18n:Translate SelectLanguage}" />
但我的代码后面需要它:
Label selectLabel = new Label
{
Text = "{i18n:Translate SelectLanguage}",
TextColor = Color.Black
};
该标签的输出是:{i18n:Translate SelectLanguage}。 有什么解决方法吗?
更新: 根据要求,我添加了我的代码(代码隐藏和 xaml 页)。如果您需要更多信息,请告诉我。 我刚把xamarin上传到最新版本,还是一样的问题
我的 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());
}
}
Text = Resx.LocalizedString.SelectLanguage,
我很惊讶其他人说你说的很好并且应该有效。
我不知道。反正你在代码里用的时候就这么用。
There is no code-equivalent, the services are only available via 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