Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改Windows Phone上C#的本地化?_C#_Localization_Windows Phone - Fatal编程技术网

如何更改Windows Phone上C#的本地化?

如何更改Windows Phone上C#的本地化?,c#,localization,windows-phone,C#,Localization,Windows Phone,我有两种语言的资源文件,我的应用程序已经读取其中一种语言的值。我希望能够在C#中更改应用程序的语言(使用其他资源文件),而不是在“设置”中更改整个手机的语言 这可能吗?如果是,如何进行?在App.xaml.cs中,在初始化手机应用程序方法中: private void InitializePhoneApplication() { Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); Thread.Curre

我有两种语言的资源文件,我的应用程序已经读取其中一种语言的值。我希望能够在C#中更改应用程序的语言(使用其他资源文件),而不是在“设置”中更改整个手机的语言


这可能吗?如果是,如何进行?

App.xaml.cs
中,在
初始化手机应用程序
方法中:

private void InitializePhoneApplication()
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
    .......
}

限制是它需要在应用程序初始化中进行,因此如果用户更改了语言,则需要重新启动才能生效。

您可以通过重新加载用户更改语言的页面并维护页面布局的RTL/LTR来执行此操作,而无需重新启动

我在App.xaml.cs中添加了此函数

public static void ChangeAppLanguage(string CultureName)
    {
        App.RootFrame.Language = XmlLanguage.GetLanguage(CultureName);
        FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
        App.RootFrame.FlowDirection = flow;
        App.Current.RootVisual.UpdateLayout();
        App.RootFrame.UpdateLayout();
        var ReloadUri =( App.RootFrame.Content as PhoneApplicationPage).NavigationService.CurrentSource;
        (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(ReloadUri + "?no-cache=" + Guid.NewGuid(), UriKind.Relative));
    }
那里的文化名称是这样的:“ar SA”,“en US”

我这样打电话

private void EnglishMenuItem_Click(object sender, EventArgs e)
    {            
        try
        {
            if(Thread.CurrentThread.CurrentCulture.Name == "en-US")
                Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");
            else
                Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

            AppResources.Culture = Thread.CurrentThread.CurrentCulture;

            App.ChangeAppLanguage(Thread.CurrentThread.CurrentCulture.Name);

            //this._contentLoaded = false; //this way does not refresh appBar
            //this.InitializeComponent();

            //this way work for one time only => if user change language more thane once the api does NOT call constructor
            //NavigationService.Navigate(new System.Uri("/PhoneApp2;component/MainPage.xaml", System.UriKind.Relative));

        }
        catch (Exception ex)
        {
            MessageBox.Show("error:\n\n" + ex.Message);
        }
    }

好问题,虽然我不了解windows phone,但您是否尝试过在线程上设置当前区域性?谢谢,这就成功了。我将进行实验,看看是否可以用另一种方法来完成。我想,一旦开始了一种文化,改变文化的唯一方法就是重新启动它……亲爱的扎卡里亚,我尝试了你提供的解决方案。它在每次点击时创建历史记录时不起作用,例如,如果我5次尝试更改语言,然后想返回,则必须按emulator的“后退”按钮5次,才能返回。这不是翻译。但这似乎是一个极好的方法。