Я пытаюсь разработать поддержку нескольких языков в своем приложении Xamarin. Я использовал 2 файла Resx, имеющих ключевое значение на английском и шведском языках, и создал одну глобальную переменную для выбранного языка общего класса appconfig
.Многоязыковая поддержка в приложении Xamarin.Forms
Я создал класс TranslateExtension
, который наследует Imarkupextension
для преобразования текста в соответствии с выбранным языком от appconfig
.
[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, привязывая его к sweden.если его не работает –
проблема в том, что код будет выполняться только после того, как будет загружена страница whn. После этого на выпадающем меню отладчик не пойдет туда. Так что это не change.thts очевидным .. но whts solution.of it.i cnt выяснить –