SharePoint程序中的多语言支持

前些天 kaneboy 在博客中写了一篇关于SharePoint UI多语言支持的博客:《SharePoint 2010多语言UI,以及开发人员需要注意的》,本篇内容是对这篇Blog的一些补充和完善。

涂总的blog中主要是在介绍关于列表名称、字段名称等这些内容的多语言设置,在用程序创建一个列表/字段的时候,为了能够支持多语言,应该使用XXXResource属性来代替XXX属性(例如TitleResource代替Title)。实际上,如果我们是在网站中直接创建的这个列表/字段,例如在中文网站中(默认语言),创建了一个叫“QQ号码”的字段;而当我们切换到另一种语言的时候(比如英文),我们直接对这个字段改名为“QQ Number”,这个时候并不会覆盖中文语言的名称,而是只改变当前语言下的字段名称设置。通过这种方式,我们也可以在不同的语言环境中对同一个字段使用不同的名称。

需要注意的是,如果我们在网站设置 - 语言设置中,将“覆盖翻译”设置为“是”的时候,一旦我们在默认语言的网站中更改了字段名称,那么会覆盖掉其他语言网站的名称设置,我们需要重新切换语言,再进行一次设置。见下图:

image

下面介绍一些SharePoint中和多语言编程相关的对象模型

1、如何获取不同语言下,网站中一些默认文本?

通过使用SPResouce的静态方法GetString,该方法有两种重载:

   1: public static string GetString(string name, params Object[] values);
   2: public static string GetString(CultureInfo culture, string name, params Object[] values);

第一种方法是获取当前语言下指定的字符串,第二种是获取指定语言下指定的字符串(通过第一个参数)。

第二个参数就是资源字符串的名称,例如“LanguageNameInLocalizedLanguage”就是使用的语言,如果环境是简体中文,取到的就是“中文 - 简体”,如果环境是英文,取到的就是“English”。

第三个参数是使用的值,如果第二个参数中的字符串包含诸如{0}、{1}这样的占位符,则在第三个参数中指定这些占位符的具体值。

2、如何知道服务器上安装了哪些语言包?

有两种方法可以取得:

   1: spRegionalSettings.InstalledLanguages;
   2: SPRegionalSettings.GlobalInstalledLanguages;

第一种方法要先获取一个SPRegionalSettings对象,可以通过spWeb的RegionalSettings属性获取或者直接使用SPContext.Current.RegionalSettings;第二种方法是SPRegionalSettings的一个静态属性。

两种方法返回的都是SPLanguageCollection类型的对象,在SPLanguage中包含了LCID属性和DisplayName属性可以分别取得语言的lcid和显示名称(经测试,这个显示名称好像就是在默认语言下的显示名称,不会跟着当前环境语言而改变)

3、如何知道当前网站可以使用哪些语言?

在网站设置 - 语言设置中,可以选择当前网站中可以使用的语言,包括默认语言,以及备用语言(如果这边不选中对应的备用语言的话,即使安装了语言包,在网站中也用不了这个语言)。

通过使用spWeb的SupportedUICultures属性,可以获取到当前网站可以使用的语言,这个属性是一个IEnumerable<CultureInfo>类型的对象。需要注意的是,这个属性在沙盒解决方案中是不可用的。

4、如何得知网站的默认语言?

在后台程序中,可以通过spWeb的Language属性(int类型),获取默认语言的lcid。

在前台JavaScript程序中,可以通过_spPageContextInfo.webLanguage来获取这个lcid。

5、如何得知当前网站上正在使用哪种语言?

在后台程序中,可以通过Thread.CurrentThread.CurrentUICulture来获取当前环境的语言地区设置。

在前台JavaScript程序中,可以通过变量g_wsaLCID或者_spPageContextInfo.currentLanguage获取到当前语言的lcid。

 

那么,SharePoint网站支持多语言有哪些方式呢?

一种方式就是从2007沿用下来的,使用变体的方式(仅在server版中才有),这种方式是为每个语言创建一个独立的网站。

另一种方式,就是2010新增的,在同一个网站中对多语言的支持(也是上文反复说明的)。在这种方式下,网站的标题、描述信息,列表的标题、描述信息,字段的标题、描述信息,导航结点,托管元数据都是有多语言支持的。如果想要让一个普通的列表字段内容也支持多语言(在不同语言环境中显示不同的值),那就需要开发自定义字段类型了(2010中,只有托管元数据字段类型是包含多语言支持的),下图是一个开发好的一个多语言单行文本的效果:

编辑画面:

image

中文下的显示画面:

image

英文下的显示画面:

image

posted on 2011-02-22 16:23  Erucy  阅读(1520)  评论(0编辑  收藏  举报

导航