设为首页 收藏本站
查看: 1018|回复: 0

[经验分享] SharePoint 2010多语言UI,以及开发人员需要注意的

[复制链接]

尚未签到

发表于 2015-9-28 13:18:29 | 显示全部楼层 |阅读模式
  SharePoint 2010支持同一个网站呈现出不同语言的UI。比如,一个中文版的SharePoint 2010系统,管理员可以在服务器上安装SharePoint 2010英文语言包,然后在网站设置的“语言设置”中,选择“英语”为备用语言。
DSC0000.png
  然后用户就可以随时使用页面右上角的用户菜单,将当前网站的显示UI,在多个语言之间进行切换。
DSC0001.png
  如果你尝试一下这个功能,就会发现一个有趣的现象。对于SharePoint 2010的内置列表和文档库,它们的名称,以及所有字段的名称,都会根据当前的UI语言,显示成不同的语言文字。比如,这是“共享文档”在中文UI语言下所显示的样子:
DSC0002.png
  如果这时将UI切换成英文,那么它就会变成:
DSC0003.png
  嗯,就如你所见,无论是文档库的名称(“共享文档”->“Shared Documents”),还是字段的名称(“类型”->“Type”),它们都可以很好的适应当前的语言UI,自动显示成不同语言的文本。
  那么,对于自定义的列表和文档库,它们也会具备这种能力吗?不用试就知道,除非我们进行额外的处理,SharePoint 2010不可能知道应该如何将自定义列表的名称和字段名称,显示成不同语言的文本。
  假设我们有一个自定义列表,“公司客户”,它包含有一个自定义字段,“客户地址”,此列表在中文UI下显示成这样:
DSC0004.png
  如果希望“公司客户”列表具备多语言显示能力,可以通过如下的代码实现:
DSC0005.png
  上面代码的作用,就是将列表名称的英文版本(en-US),设置为“Company Customers”,并且将“客户地址”字段的英文版本,设置为“Customer’s Address”。下面的截图就是运行了上面的代码后,这个列表在英文UI下的显示:
DSC0006.png
  通过代码你应该看出来了,SPList和SPField都有一个TitleResource属性,通过这个属性,我们可以获取或设置在不同语言中,列表或字段的Title值。那么如果在代码中直接获取或设置SPList和SPField的Title属性,会怎么样呢?答案就是,这时SharePoint对象模型会根据当前代码所在线程的UI Culture,来自动获取不同语言版本的Title值。下面的代码就示范了这个用法:
DSC0007.png
  两次调用SPList.Title属性,由于分别为当前线程设置了不同的UI Culture,Title属性就会返回不同的值。
  由于这个特性的存在,在某些事情,如果没有考虑周全,就会在你的自定义代码中产生一些bug。让我们想象这样的一个场景:你的SharePoint 2010是中文版,但是SharePoint服务器上的Windows Server是英文版本。你需要写一些代码,为某个列表添加一个字段:“QQ号码”。你非常清楚字段的显示名称(Title)和内部名称(InternalName)的区别,你不想SharePoint 2010自动为你的新字段生成一个稀奇古怪的内部名称,于是聪明的你决定这样来创建这个字段:
DSC0008.png
  在你的设想中,这个新字段的显示名称将是“QQ号码”,它的内部名称将是“QQNumber”。于是,你兴高采烈的在一个Console程序中加上了如上代码,运行了它,然后惊奇的发现这个新字段的显示名称居然仍然显示为“QQNumber”:
DSC0009.png
  发生错误的原因在于,代码运行在一个Console程序中,也就是说,它运行在SharePoint Context之外。在运行代码的线程中,UI Culture是英文(因为Windows Server是英文版),所以虽然代码通过SPField.Title属性将字段显示名称设置为“QQ号码”,但实际上它设置的是这个字段的英文版本显示名称。于是,在中文版本的SharePoint 2010网站上,这个字段的显示名称仍然保持为“QQNumber”。同时由于你的代码的作用,如果以后有人将UI切换成英文,会惊奇的发现这个字段居然在英文UI下显示成“QQ号码”。
  正确的创建这个字段的代码应该是:
DSC00010.png
  在第一行,代码将当前线程的UI Culture设置为了网站的UI Culture(SPWeb.UICulture),这样无论这个代码是在什么语言版本的Windows Server中运行,都会得到我们想要的结果。如果你的代码会运行在SharePoint Context之外,这一点非常重要。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120034-1-1.html 上篇帖子: 利用Microsoft.SharePoint.Administration 来管理WSS(sharepoint) 下篇帖子: SharePoint自动登录问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表