Silverlight 2中多语言支持实现(下)

引言

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

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

苦笑不得的缺陷

Silverlight 2中多语言支持实现(上)文章的最后,我们通过修改项目文件中SupportedCultures来实现了多语言的支持,之所以能够成功,是因为前面的示例中只有两种语言English和Chinese,现在我们再添加一个资源文件Strings.fr-FR.resx,让它能够支持French,如下图所示:

TerryLee_0022

感谢我的同事Fabien帮我翻译为French,同样我们打开项目文件,在SupportedCultures中添加一种语言文化fr-FR,我们可以用逗号或者分号来分割,如下代码所示:

TerryLee_0023

现在我们解压xap文件,可以看到fr-FR、zh-CN资源文件都正确的打包在了xap文件中,如下图:

TerryLee_0024 

现在运行程序时,却发现中文语言文化无法显示,而法文能够正常显示:

TerryLee_0025

这就是Silverlight 2 Beta 2在本地化方面支持的一个Bug,它只能够支持除默认语言之外的一种语言。有朋友可能会问,既然能够支持除默认语言之外的一种语言,为什么在这个示例中不是中文,而是法文呢?这主要是在SupportedCultures中设置的语言文化,在编译后,打包到AppManifest.xaml中添加AssemblyPart时是按照语言文化的字母顺序排列的,所以会默认支持最上面一种语言文化:

TerryLee_0026

好了,现在大家知道了在Silverlight 2 Beta 2中最多只能支持两种语言,但愿在RTM时该问题已经不复存在。

另类多语言实现

现在我们再来看一种另类的多语言实现,即如果为一个Silverlight项目同时生成支持不同语言文化的多个xap文件。我们可以在解决方案中添加一个新的Build Tag,如下图所示:

TerryLee_0027

然后我们可以编辑Silverlight项目文件.csproj,可以在我们新建的Build Tag下面添加一项SupportedCultures配置,并指定一种语言文化:

TerryLee_0028

现在我们在Web测试项目中,配置一下xap文件的输出,只需要点击Change按钮就可以了,使Configuration Specific Folders变为Yes,如下图所示:

 TerryLee_0031

这样可以我们通过修改Build Tag,来实现在Web测试项目中同时输出多个xap文件,而这些xap文件将支持不同的语言,并且不会互相覆盖,如下图所示:

TerryLee_0032 

这样我们就可以用一个Silverlight项目来输出支持不同的语言文化的xap文件。

总结

通过这两篇文章我分析了Silverlight 2 Beta 2中多语言支持的实现,以及当前版本存在的问题等。希望对大家有所帮助!

示例下载

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: Silverlight
posted @ 2008-06-19 23:00 TerryLee 阅读(4403) 评论(23)  编辑 收藏 网摘 所属分类: [03]  银光点亮世界

  回复  引用  查看    
#1楼 2008-06-19 23:20 | Eeyore      
沙发~
  回复  引用  查看    
#2楼 [楼主]2008-06-19 23:58 | TerryLee      
@Eeyore
:)
  回复  引用  查看    
#3楼 2008-06-20 00:23 | van‘s      
有意思,可以向微软反映这个Bug!
  回复  引用  查看    
#4楼 2008-06-20 00:42 | 萧寒      
多谢了,这种文章可以少走好多弯路了;希望在RTM发布的时候再实测下这个问题
  回复  引用  查看    
#5楼 [楼主]2008-06-20 08:54 | TerryLee      
@van‘s
已经有人向微软反映了:)
  回复  引用  查看    
#6楼 [楼主]2008-06-20 08:55 | TerryLee      
@萧寒
嗯,RTM时候肯定还会再测一下,项目的需要啊:)
  回复  引用  查看    
#7楼 2008-06-20 09:02 | Windie Chai(笑煞天)      
有意思,这个问题一定会得到修正的。
  回复  引用  查看    
#8楼 [楼主]2008-06-20 09:03 | TerryLee      
@Windie Chai(笑煞天)
是的:)
  回复  引用  查看    
#9楼 2008-06-20 09:14 | 丁学      
微软肯定知道这个BUG,只是忙着出release所以没时间去解决
微软那么强大的test group~~~~~~~~
  回复  引用  查看    
#10楼 2008-06-20 09:47 | Jason.Wei      
一觉醒来.竟然出sl多语言实现2..
触动很大........
  回复  引用  查看    
#11楼 2008-06-20 10:24 | 装配脑袋      
感觉不太爽啊。。这个方案。但愿MS真的知道这个问题
  回复  引用  查看    
#12楼 [楼主]2008-06-20 11:07 | TerryLee      
@丁学
但愿微软知道,呵呵
  回复  引用  查看    
#13楼 [楼主]2008-06-20 11:07 | TerryLee      
@Jason.Wei
^_^
  回复  引用  查看    
#14楼 2008-06-20 11:07 | 王德水      
支持
  回复  引用  查看    
#15楼 [楼主]2008-06-20 11:07 | TerryLee      
@装配脑袋
是啊,无奈之举,呵呵

希望微软RTM时解决这个问题:)
  回复  引用  查看    
#16楼 [楼主]2008-06-20 11:08 | TerryLee      
@王德水
:)
  回复  引用    
#17楼 2008-06-21 09:31 | byrybye [未注册用户]
为什么SL的项目不能引用原来FrameWork里的程序集,比如System.Data.dll
有什么原因吗?希望楼主能讲解下。
  回复  引用  查看    
#18楼 [楼主]2008-06-21 16:48 | TerryLee      
@byrybye
Silverlight中支持的CLR只是.NET Framework CLR很小的一部分,是它的一个子集,怎么可能直接引用原来的程序集呢?
  回复  引用    
#19楼 2008-06-21 20:43 | byrybye [未注册用户]
谢谢楼主的解答,可是我实在不明白,为什么SL只能只是一部分CLR?有什么技术上的原因吗?不太理解,希望楼主能解释,或者写篇文章讲解写就更好了。
  回复  引用  查看    
#20楼 [楼主]2008-06-21 21:28 | TerryLee      
@byrybye
如果SL支持所有的CLR,那岂不是用户要下载几十兆的Silverlight Plug-in?再说SL只是一种客户端技术,没必要提供全部支持吧。。
  回复  引用    
#21楼 2008-06-27 02:26 | slyi [未注册用户]
http://wpf-e.spaces.live.com/blog/cns!2B248D261D0E0035!230.entry
  回复  引用  查看    
#22楼 2008-07-29 13:10 | 不若相忘于江湖      
我的也是beat 2 为什么编译通过。页面上却一直出不来。
  回复  引用  查看    
#23楼 [楼主]2008-07-30 00:56 | TerryLee      
@不若相忘于江湖
看看我上一篇中的回复。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索



相关文章:


相关搜索:
Silverlight

相关链接: