如何在Windows Phone 8中保存用户的语言选择并更改整体应用语言?

时间:2017-03-06 08:04:31

标签: wpf silverlight windows-phone-8 localization isolatedstorage

我正在尝试本地化我的Windows Phone 8.0应用程序(SilverLight)。我想根据用户选择更改默认的Appresources.resx文件。当用户从设置页面更改语言时,我想在IsolatedStorageSettings中保存它,然后在我Appresources的构造函数中调用的InitializeLanguage()方法中指示保存的语言app.xaml.cs文件}类。

我学会了理论过程,但我无法进一步了解如何接近。

以下是代码片段,以便更好地理解我的问题。

private void InitializeLanguage()
        {
            try
            {
                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
                RootFrame.FlowDirection = flow;
            }
            catch
            {
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }
                throw;
            }
        }

这是设置页面代码,我最初更改了用于测试目的的文本框的语言,它在运行时更改了TextBox的语言。

 protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            ChangeLanguageCombo.Items.Add(new LanguageComboBox
            {
                Name = "English",
                Code = "en-US"
            });

            ChangeLanguageCombo.Items.Add(new LanguageComboBox
            {
                Name = "Bangla",
                Code = "bn"
            }); 
        }

    public static IsolatedStorageSettings ChangedLanguage = IsolatedStorageSettings.ApplicationSettings;

    private void ChangeLanguageCombo_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var languageComboBox = ChangeLanguageCombo.SelectedItem as LanguageComboBox;
        ApplyChange(new CultureInfo(languageComboBox.Code.ToString()));
        //now I want to save the user choice to the `IsolatedStorageSettings ChangedLanguage` and restart the app to take place the changes.
        MessageBox.Show("Restart");
        //after restart I want to indicate the Appresources file to the new selected one,(in InitializeLang() method) RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage); in this line
        }

    }

    private void ApplyChange(CultureInfo culInfo)
    {
        Thread.CurrentThread.CurrentCulture = culInfo;
        Thread.CurrentThread.CurrentUICulture = culInfo;
        textBlockHello.Text = AppResources.Salutation;
    }

如果问题太笨拙无法理解我的目的,我很抱歉,我是这个领域的新手,任何形式的帮助或编辑建议都可以。

1 个答案:

答案 0 :(得分:1)

从App.xaml.cs类中检索LocalStorageSettings的值:

string value= IsolatedStorageSettings.ApplicationSettings["userData"] as string;

App.xaml.cs中,我在方法InitializeLanguage()

的try块下添加了以下代码
private void InitializeLanguage()
{
    try
    {
        if (IsolatedStorageSettings.ApplicationSettings.Contains("selectedLang"))
        {
             var changedLang = IsolatedStorageSettings.ApplicationSettings["selectedLang"] as string;
             if (changedLang != null) ApplyChange(new CultureInfo(changedLang));
        }            
     }
     //rest of the part in this method remained same 
}
private void ApplyChange(CultureInfo culInfo)
{
     Thread.CurrentThread.CurrentCulture = culInfo;
     Thread.CurrentThread.CurrentUICulture = culInfo;
}

在我的设置页面中,当用户选择首选语言时:

        public static IsolatedStorageSettings ChangedLanguage = IsolatedStorageSettings.ApplicationSettings;
        private void ChangeLanguageCombo_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var languageComboBox = ChangeLanguageCombo.SelectedItem as LanguageComboBox;

            if (languageComboBox != null)
            {
                if (!ChangedLanguage.Contains("selectedLang"))
                {
                    ChangedLanguage.Add("selectedLang", languageComboBox.Code.ToString());
                }
                else
                {
                    ChangedLanguage["selectedLang"] = languageComboBox.Code.ToString();
                }
                ChangedLanguage.Save();
                MessageBox.Show("Restart");
            }

        }

重新启动应用后,默认Appresources文件将是新语言的Appresources文件,因为它已保存在IsolatedStorageSettings上,并且启动App.xaml.cs页面的应用调用了InitializeLanguage()方法。
因此,当用户从设置页面更改我的应用程序的语言时,这就是我能够更改默认Appresources文件的方式。