引言

最近项目要在Silverlight 2应用程序中实现本地化,原以为这个过程非常简单,却没想到实现的时候一波三折,好在结果还算不错。需求是这样的,用户第一次访问的时候,默认为英文,当用户选择一种显示语言后,记录在本地,下次用户访问时直接显示已经选择的语言。现在我把整个实现的过程记录下来,希望对大家有所帮助。

本文为Silverlight 2中多语言支持实现第一部分。

准备工作

我们发现在Silverlight 2中提供了ResourceManager类,这意味着可以通过资源文件来实现,首先在Silverlight项目中建立一个文件夹,命名为Resources,添加一个资源文件Strings.resx,并添加几个值,如下图所示:

该文件将作为默认资源文件,设置Access Modifier为Public,它将会生成Strings.Designer.cs文件,如下图所示:

现在再创建几个其它语言的资源文件,如中文、法语、挪威语等,注意资源文件的命名方式,都是以Strings+语言文化构成,有关每一种语言文件的代码,大家可以查阅MSDN。

其它这些文件的Access Modifier的设置为No Code generation。有了前面这些准备工作,接下来进行实现。

实现

有了上面这些资源,我们很容易想到利用Silverlight中的静态资源来绑定到UI控件上面,首先定义资源文件:

绑定到UI控件上,如我们放置三个按钮:

最后我们只剩下一步工作,就是指定当前线程的语言文化和UI语言文化,这一点我们可以在Application_Startup事件中来实现,我们设置为zh-CN,如下代码所示:

至此工作完成,可是当我们编译时却发现有这样的错误:

Type 'Strings' is not usable as an object element because it is not public or does not define a public parameterless constructor or a type converter

很明显Strings类型的构造函数访问性不是public,打开Strings.Design.cs文件可以看到,它的构造函数是internal的,这一点好办,手工修改为public(也许该问题将会在RTM中解决)。但是要注意,每次当修改完Resource文件后,它会再次变为internal类型。

问题出现

现在编译成功,可是当运行时却并没有出现我们想要的结果。我们首先会想到,资源文件编译后是否下载到了本地,也就是是否打包到了xap文件中,这一点很好证实,我们可以解压xap文件来看看,果然不出所料,如下图所示:

在xap文件中,除了Silverlight项目程序集之外,并没有任何与资源文件有关的东西。有一种“暴力”的办法可以解决这个问题,那就是我们拷贝Silverlight项目bin\Debug文件夹下的资源文件,手工进行打包xap文件,并且需要在xap文件的AppManifest.xaml文件夹中手工加入AssemblyPart,如下代码所示:

事实证明,这样确实可以得到多语言的支持,问题在于每次编译后,xap文件都会重新生成一次。总是这样手工打包也不是长久之计,所以必须想办法彻底解决问题,也许到了Silverlight 2.0 RTM,这个问题已经不存在了。

问题解决

我们打开Silverlight项目文件(.csproj),可以看到有SupportedCultures这样一项,如果在这里进行了设置,再编译Silverlight项目时将会自动打包资源文件,如下图所示,我们添加一项zh-CN:

现在再解压xap文件看看效果,可以看到,现在zh-CH资源文件已经打包在了xap文件中:

运行程序,可以看到已经显示为中文了:

到这里,终于可以松一口气了,下面接着实现其它功能。

添加本地存储

现在我们要实现本地存储功能,这个不是什么难事,可以通过Silverlight 2中的隔离存储来实现。在用户选择一种语言后保存到本地:

然后在应用程序启动时,读取该配置:

好了,现在我们来看一下效果:

英文

中文:

总结

至此,简单的多语言支持算是实现了,其实还有其它的问题没有解决,我将在下一篇分析。最后再啰唆一句:Silverlight 2 Beta 2对于多语言支持的支持实在是...

转载于:https://www.cnblogs.com/Terrylee/archive/2008/06/19/localization-in-silverlight-2-beta-2-part1.html

Silverlight 2中多语言支持实现(上)相关推荐

  1. [Toolkit]最新Silverlight Toolkit中的DragDrop支持

    我在昨天的文章中介绍了Silverlight Toolkit最新更新的一些情况,其中最令人兴奋的就是其拖拽(Drag&Drop)操作的支持. 由于项目原因,我还未安装toolkit的十月份更新 ...

  2. 微软在动态语言支持上超越了Java?

    当.NET在2000/2001年第一次发布的时候,Java社区认为它仅仅是从语言以及标准库上对Java的一个"克隆".我们把二者的简单实例代码进行比较以后就可以很轻易地得出这样一个 ...

  3. 您对TOP Server的德语、中文和日语语言支持了解吗?(二)

    2019独角兽企业重金招聘Python工程师标准>>> 下载TOP Server OPC Server最新版本 TOP Server文档支持 除了特定于驱动程序的属性/设置之外,还包 ...

  4. c语言中 允许函数重载么,简述C++语言支持函数重载问题介绍

    对于C++语言作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言和特点,foo_int_int这样的名字包含了函数名.函数参数数量及类型信息,C++语言就是靠这种机制来实现函数重载的. 因而它 ...

  5. c 程序多语言,怎样在程序中利用C支持多国语言

    怎样在程序中利用C支持多国语言 本文以emule为例,探讨一下多国语言支持的实现.选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换.而且最关键,它是开源的,可以直接通过源码来研究它的 ...

  6. 解决openwrt页面升级中“不支持所上传的文件格式”问题

    本文转自http://www.openwrtdl.com/ 我们在页面升级的时候,可能会遇到"不支持所上传的文件格式请确认选择的文件无误"这个问题,今天说说这个错误的原因和解决方法 ...

  7. qt支持的html5,用 Qt 5 中实现多国语言支持

    Qt5 实现多国语言 引言 目的:自用/笔记 时间:2018-02-13 01:13 平台: Windows 7 项目:将英语界面添加德语和土耳其语翻译 步骤 使用默认语言写出整个工程,这里使用英语作 ...

  8. WPF使用X:Static做多语言支持

    原文:WPF使用X:Static做多语言支持 让程序支持多语言,一般把需要显示的字符串保存在一个资源类的static属性中. <!--[if !supportLists]--> <! ...

  9. WP7多国语言支持 from:http://blog.csdn.net/lee353086/article/details/6260676

    WP7多国语言支持 Kagula 2011/3/17 前言 本文阅读对象是有一定Visual Studio 2010使用经验的程序员. 这里通过一些示例介绍如何让你的Windows Phone7 Wi ...

最新文章

  1. 【开发技术】视频URL采集
  2. Java 实现 SSH 协议的客户端登录认证方式--转载
  3. 40岁了,还要跟小年青一样埋头敲代码吗?
  4. Spring依赖注入(DI)
  5. 1133:输出亲朋字符串
  6. 拍乐云基于AV1的实时视频系统技术实践
  7. Opportunity search in backend for status - some default system status
  8. linux中创建目录树,如何在C/Linux中创建目录树?
  9. 计算机网络基础:TCP/IP协议相关知识笔记​
  10. UITableView 系列三 :分类显示和改变外观 (实例)
  11. Android 系统(214)---Android 7.1.1时间更新NITZ和NTP详解
  12. 为了中性含义替换man,英文可以引入拼音ren
  13. 数字信号处理实验——语音信号的数字滤波
  14. 基本计算机编程术语,计算机编程术语,你记住了吗?
  15. ValueError: Input 0 of node ... was passed float from ... incompatible with expected float_ref.
  16. APNG替代GIF制作完美动效
  17. HTML将div层级升到最高,CSS层级嵌套关系详解
  18. 计算机专业的大一学生暑假6,一个计算机专业大三学生的一天 Day6
  19. python求周长_作业-python面向对象编程-计算周长和面积
  20. 5分钟理解Focal Loss与GHM

热门文章

  1. 对象检测工具包mmdetection简介、安装及测试代码
  2. Microsoft Platform SDK Febrary 2003更新vc6的SDK网址
  3. 【OpenCV】cv::VideoCapture 多线程测试
  4. linux驱动:音频驱动(一)ALSA
  5. springboot取yml中的值_SpringBoot 中从yml配置文件中读取常用的参数值
  6. joc杂志影响因子2019_2019年放射学领域SCI主要杂志影响因子汇总
  7. python wget_python-如何获取wget下载的文件的文件名
  8. k8s service type_k8s重器之Service
  9. C++为什么空格无法输出_数据的输入输出举例
  10. array column函数php,php array_column 函数实例应用