我正在尝试本地化我的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;
}
如果问题太笨拙无法理解我的目的,我很抱歉,我是这个领域的新手,任何形式的帮助或编辑建议都可以。
答案 0 :(得分:1)
从App.xaml.cs类中检索LocalStorageSettings的值:
string value= IsolatedStorageSettings.ApplicationSettings["userData"] as string;
在App.xaml.cs
中,我在方法InitializeLanguage()
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
文件的方式。