1
我想在我的Xamarin应用程序中开发多语言支持。 我使用了2个Resx文件,这些文件在英语和瑞典语中具有键值,并为共同的appconfig
类中的所选语言创建了一个全局变量。Xamarin.Forms应用程序支持多语言
我根据从appconfig
选择的语言创建的类TranslateExtension
这对于文本转换继承Imarkupextension
。
[ContentProperty("Text")]
public class TranslateExtension : IMarkupExtension
{
public string Text { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Text == null)
return null;
ResourceManager rt1 = new ResourceManager(typeof(Resources.AppResources));
if (AppConfig.SelectedLanguage == "Swedish")
{
rt1 = new ResourceManager(typeof(Resources.AppResources_sd));
}
var translation = rt1.GetString(Text);
return translation;
}
}
现在我在XAML页面
<StackLayout>
<Picker x:Name="pickerForLanguage" BackgroundColor="White" HeightRequest="40" Title="Select Language" SelectedIndexChanged="SellectedLanguage">
<Picker.Items>
<x:String>English</x:String>
<x:String>Swedish</x:String>
</Picker.Items>
</Picker>
<Label Text="{resources:TranslateExtension Greeting}" />
Home.xaml.cs
public void SellectedLanguage(object sender, EventArgs e)
{
if (pickerForLanguage.SelectedIndex == -1)
{
AppConfig.SelectedLanguage = "English";
}
else
{
AppConfig.SelectedLanguage = "Swedish";
}
}
文本会从转换到所选择的语言结合这样的文本值appconfig
第一次加载页面时。当我从下拉菜单中更改语言时,它将仅在appconfig
中更改所选语言的值。它不会调用TranslateExtension
值,并且在第一次后不会更改。
oh.thats不是问题。我只是改变了测试..我忘了撤消它。其他我已经设置了英语默认和选定的索引m chnging它sweden.still它不工作 –
问题是,代码只会在页面加载时执行一次,之后在下拉选择调试器将不会去那里。因此它不会改变。这显而易见..但它的解决方案明白了吗? –