标签:inf resource eve cti source protected 语言切换 contains 比较
找了好半天资料,没发现什么可以实时切换语言的好办法,没错,是没什么好办法,一些囊肿的办法倒是有,不过我试过后觉得不怎么好用,诸如:用类定义——太麻烦不易修改,绑定麻烦;试过通过自定义主题来实现,比用类来实现好太多了,切换ElementTheme属性就可以实时变更语言,不过怪怪的,而且也是比较麻烦所以不用,那么最后只能用最后这种资源字典来实现,但是却不能实时生效,╮(╯▽╰)╭悲哀,想想微软自家的APP什么msn新闻,自身os也不是得重启生效,索性不去纠结实时不实时的问题。
还是想抱怨一句,为什么在wpf中的动态资源uwp却没了,不然可方便多了,什么实时主题切换,语言切换不在话下,好了回到正题, 使用资源字典实现多国语言切换(重启应用生效)。
在APP.XAML中加入:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="Language" Source="XAMLResources/Languages/Chinese.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然后,根木录新建文件目录:XAMLResources/Languages/,新建两个文件:“Chinese.xaml”中文语言,“English.xaml”英文语言。
文件内容的格式都一样,不过是中文英文不一样而已。
【中文chinese.xaml】
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Udiary.XAMLResources.Languages">
<x:String x:Key="btn_login">登录</x:String>
</ResourceDictionary>
【英文english.xaml】
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Udiary.XAMLResources.Languages">
<x:String x:Key="btn_login">Login</x:String>
</ResourceDictionary>
在APP.Xaml.cs中的 protected override void OnLaunched(LaunchActivatedEventArgs e)方法第一行开始插入以下代码:
//清除现有语言
Application.Current.Resources.MergedDictionaries.Clear();
//切换语言
ResourceDictionary lg = new ResourceDictionary();
//其中的a就是要切换的语言文件名
lg.Source = new Uri("ms-appx:/XAMLResources/Languages/" + a + ".xaml", UriKind.RelativeOrAbsolute);
//添加资源
Application.Current.Resources.MergedDictionaries.Add(lg);
在页面page中,绑定相应数据即可,比如button:
<Button Content="{StaticResource btn_login}"/>
基本搞定。当然还需要完善,比如什么时候切换语言,又怎样保存当前的语言。
很多办法,你可以把当前语言作为一个字符串保存到一个文件内,比如:lg.txt内容是cn代表中文,启动时加载chinese.xaml。我这里是用更简单的方法:“ApplicationDataContainer”来保存语言设置,然后在启动应用时读出来作相应的处理。
关于ApplicationDataContainer的用法如:
读:
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
if (localSettings.Values.ContainsKey(name))
{
return localSettings.Values[name].ToString();
}
else
{
return "";
}
写:
localSettings.Values[name] = value;
最后附上效果图收尾:



标签:inf resource eve cti source protected 语言切换 contains 比较
原文地址:http://www.cnblogs.com/KudouShinichi/p/6224488.html