Silverlight中本地化的实现(语言切换)
对于本地化这个功能我个人一直觉得在需求阶段就要确定该项目需不需要实行本地化,这样后面就可以减轻许多工作量,Sl中对本地化功能的支持与ASP.NET
中一样,主要使用CultureInfo类来完成的。
下面来看实现本地化的具体流程,先来看一看我的项目结构:
这里我是把资源文件放入单独的项目中,这样结构上也比较的清晰。
第一步:
先在Languages项目下添加几个资源文件,这里对于资源的命名要遵循.NET命名规范,比如说当前文化是中文的话,系统就会自动到Localization.zh-CN.resx中获取相关的字符。这里如果对多语言的文化的命名不熟悉的话,可以查看.NET全球化
我们设置一个简单的值,
我们这里定义了一个Country字段,在中文和英文两种文化中值分别为中国与China
第二步:
建立值转化类AppResource.cs
namespace Languages
{
public class AppResource:IValueConverter
{
public readonly static ResourceManager manager = new ResourceManager("Languages.Localization", typeof(Localization).Assembly);
private static CultureInfo culture = Thread.CurrentThread.CurrentCulture;
public static CultureInfo UICultrue
{
get { return culture; }
set { culture = value; }
}
public string Get(string resource)
{
return manager.GetString(resource, UICultrue);
}
public static string GetValue(string resource)
{
return manager.GetString(resource, UICultrue);
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var reader=(AppResource)value;
return reader.Get((string)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
这个类主要使用了ResourceManager对象对本地化进行操作的
第三步:
编译之后,我们在LocalilizationInSilverlight项目中引入Languages.dll
在App.xaml中我们引入这个dll,并且将其设为资源
<Application
x:Class="LocalilizationInSilverlight.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Languages;assembly=Languages"
>
<Application.Resources>
<local:AppResource x:Key="Localization"></local:AppResource>
</Application.Resources>
</Application>
第四步:
这里有一点需要注意的是,当你编译解决方案时,vs并未将资源文件打包至xap中,需要手动修改一下LocalilizationInSilverlight.csproj
中的SupporttedCultures节点
<SupportedCultures>zh-CN,en-GB
</SupportedCultures>
引入资源后,我们就在页面中使用它了
<TextBlock Height="23"
Name="textBlock1"
Text="{Binding ConverterParameter=Country,
Converter={StaticResource Localization},Source={StaticResource Localization}}"
Width="90" />
运行之后我们就可以看到界面上出现中国二字,我们可以改当前文化来测试一下
public MainPage()
{
AppResource.UICultrue = new CultureInfo("en-GB");
InitializeComponent();
}
这样,我们在页面InitializeComponent()之前修改当前文化为en-GB,这时候TextBlock就会出现China这个值了
扩展:对DataGrid的Headers属性应用本地化功能
那么这里我们可以首先在AppResource.cs中添加简单的方法
public static string GetValue(string resource)
{
return manager.GetString(resource, UICultrue);
}
然后UI上添加一个DataGrid
<data:DataGrid AutoGenerateColumns="False"
Height="200"
Name="dataGrid1"
Width="200">
<data:DataGrid.Columns>
<data:DataGridTextColumn CanUserReorder="True"
CanUserResize="True"
CanUserSort="True"
Width="Auto" />
</data:DataGrid.Columns>
</data:DataGrid>
C#代码只要对标题设置一下即可:
this.dataGrid1.Columns[0].Header = AppResource.GetValue("Country");
完成之后可以利用上面的第四步的方法进行测试了
Silverlight中本地化的实现(语言切换)的更多相关文章
- 在SOUI中使用动态多语言切换
动态语言切换是很多国际化产品的需求,SOUI之前的版本支持静态多语言翻译,通过在程序启动时设置好语言翻译模块,在程序中打开的UI都会自动调用该翻译模块进行文字翻译,但是不支持运行进语言切换. 最近几个 ...
- vue-i18n vue-cli项目中实现国际化 多语言切换功能 一
vue-cli项目中引入vue-i18n 安装: npm install vue-i18n可参考vue-i18n官网文档 main.js中引入: import Vue from 'vue' impor ...
- vue-i18n 国际化语言切换
vue-i18n 用于前端vue项目中,需要多语言切换的场景 安装方法(npm) npm install vue-i18n 简单使用 1.在vue项目的main.ts文件中实例化 i18n imp ...
- iOS 语言切换、本地化,国际化
什么是本地化处理? 本地化处理就是我们的应用程序有可能发布到世界的很多国家去,因为每个国家应用的语言是不一样的,所以我们要把我们的应用程序的语言要进行本地化处理一下. 本地化处理需要处理那些文件? ( ...
- 本地化SilverLight应用程序(多语言支持)
原文 http://www.cnblogs.com/seaworm/archive/2010/11/30/1892325.html 利用资源文件(Resources File)使SilverLight ...
- react中多语言切换的实现方式
目前正在进行的项目就是一个多语言切换的项目,有些前情知识我们可以 从https://react.i18next.com/getting-started进行了解. 说到使用方法,当然首先是要$ npm ...
- 动态语言切换(续)-designer中的retranslateUi(带源码)
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息.原文链接.原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途. 谢谢合作.原文链接:动态语言切换(续)-designer中 ...
- vue 双语言切换中,data内翻译文字不正常切换的解决方案
背景 有这么一个登录页面,相关功能如下: 支持双语言,点击切换语言 表单内部有一个自定义的select,里面option的label.value都是的名字由外部提供:其中预设的option的label ...
- 关于在静态html中实现语言切换的思路与实现
在项目中只用到了三种语言:英文.中文简体.中文繁体.所以我首先想到了最笨的方法:1.直接将三种语言写在html中,显示当前设置的语言隐藏其它两种来实现.2.使用css伪元素的content:attr( ...
随机推荐
- tomcat 内存溢出
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入Perm ...
- [ActionScript 3.0] AS3.0 本机鼠标指针
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...
- jquery mobile转场时加载js失效(转)
jquery mobile拦截了所有的http请求,并使用ajax请求取代传统的http.请求发出后,框架会将请求的内容插入到页面中data- role="page"的部分,取代原 ...
- SCI期刊的审稿流程
审稿中涉及到的人: EIC-Editor in Chief 主编, 此人很重要,有稿件最终决定权. ADM- (可能是) Administrator 应该是协助主编日常工作的. AE-Associat ...
- excel数据通过构建sql语句导入到数据库中
拿到一张excel数据表格,数据格式如下图所示: 2.根据excel数据结果,构建保存excel数据的表结构 CREATE TABLE #tmpExcel(IP VARCHAR(100),IPAddr ...
- java内部类的继承
1.public class OuterInnerClass extends ClassA.ClassB{ public OuterInnerClass(ClassA a) ...
- 【摘】linux之shutdown、halt和reboot命令详解
在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用()命令实现 #shutdown -r now #halt #reboot #init3 正确答案:A 在linux命令中reboot是 ...
- 反射IsGenericType
var propertyType = propertyInfo.PropertyType; if (propertyType.IsGenericType && propertyType ...
- Spark ThriftServer使用的大坑
当用beeline连接default后,通过use xxx切换到其他数据库,再退出, 再次使用beeline -u jdbc:hive2://hadoop000:10000/default -n sp ...
- windows中 dll 的解读
背景: dll 可以认为是exe 的分割,分割的好处就是多个exe 可以共用一个dll.所以就有了dll的依赖问题 问题来源: 当我们安装软件时(windows系统下),报出:XX.dll 缺失,或 ...