为了能够方便地在不同语言间切换,我们需要一个MOSS2007下的多国语言跳转菜单。(关于如何配置多国语言,可以参考MSDN
Creating Site Variations 。)在网上查过一些资料后发现,微软已经默认提供了一个这样的控件,其使用方法如方法一。通过反编译微软实现的控件的DLL文件,我查出了实现该功能的WSS API(在WSS的SDK中居然查不到这个DLL的API说明,害我在上面苦查了半天!),利用这些API,我实现了自己的多国语言跳转菜单控件。其实现代码如方法二。
方法一(如何使用微软提供的控件):
Open your master page either within SharePoint Designer, Visual Studio, Notepad, etc. Add a Register TagPrefix to the page (if it isn’t already present)
<%@ Register TagPrefix=”PublishingVariations” TagName=”VariationsLabelMenu” src=”~/_controltemplates/VariationsLabelMenu.ascx” %> Place the Variation Menu Label (where you would like it to show up) between the <Form></Form> as follows:
<PublishingVariations:VariationsLabelMenu id=”labelmenu1″ runat=”server”/> Check In & Publish the Master page On your sharepoint server(s) open the ‘VariationsLabelMenu.ascx’ file in notepad - file location: %DRIVE%\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\ You will see that the cms:VariationsLabelIEcbMenu is outcommented with <%– –%> comments. Remove these comment tags and save the file. Your VariationsLabelMenu works fine now!
注:经过测试发现,其实不需要自行在MasterPage中添加该控件,MasterPage已经包含一段显示该控件的代码:<SharePoint:DelegateControl runat="server" ControlId="GlobalSiteLink0"/>
方法二(我自己实现的控件):
<%
@ Control Language
=
"
C#
"
ClassName
=
"
MultiLanguageMenu
"
%>
<%
@ Assembly Name
=
"
Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c
"
%>
<%
@ Import Namespace
=
"
System
"
%>
<%
@ Import Namespace
=
"
System.Collections
"
%>
<%
@ Import Namespace
=
"
System.Web.UI
"
%>
<%
@ Import Namespace
=
"
System.Web.UI.WebControls
"
%>
<%
@ Import Namespace
=
"
Microsoft.SharePoint
"
%>
<%
@ Import Namespace
=
"
Microsoft.SharePoint.Publishing
"
%>
![](/Images/OutliningIndicators/None.gif)
<
script runat
=
"
server
"
>
![](/Images/OutliningIndicators/None.gif)
private
bool
visable
=
true
;
private
string
itemCssClass
=
string
.Empty;
private
string
menuCssClass
=
string
.Empty;
private
string
normalCssClass
=
string
.Empty;
private
string
activeCssClass
=
string
.Empty;
private
string
mLeaveScript
=
string
.Empty;
private
string
mEnterScript
=
string
.Empty;
private
string
mClickScript
=
string
.Empty;
![](/Images/OutliningIndicators/None.gif)
protected
void
Page_Load(
object
sender, EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if (!Page.IsPostBack)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
mLeaveScript = "document.getElementById('{0}').className = '{1}'; document.getElementById('{2}').style.display = 'none';";
mEnterScript = "document.getElementById('{0}').className = '{1}';";
mClickScript = "document.getElementById('{0}').style.display = 'block';";
pnlItem.Attributes.Add("onmouseleave", string.Format(mLeaveScript, pnlCurVariation.ClientID, normalCssClass, pnlMenuHold.ClientID));
pnlCurVariation.Attributes.Add("onmouseenter", string.Format(mEnterScript, pnlCurVariation.ClientID, activeCssClass));
pnlCurVariation.Attributes.Add("onclick", string.Format(mClickScript, pnlMenuHold.ClientID));
![](/Images/OutliningIndicators/InBlock.gif)
pnlItem.Visible = visable;
pnlItem.CssClass = itemCssClass;
pnlCurVariation.CssClass = normalCssClass;
pnlMenu.CssClass = menuCssClass;
![](/Images/OutliningIndicators/InBlock.gif)
CreateMenu();
}
catch (Exception ex)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
lblCurVariation.Text = ex.Message;
}
}
}
![](/Images/OutliningIndicators/None.gif)
public
bool
Visable
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return visable; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ visable = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
ItemCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return itemCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ itemCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
MenuCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return menuCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ menuCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
NormalCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return normalCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ normalCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
ActiveCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return activeCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ activeCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
private
void
CreateMenu()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
ArrayList varList = new ArrayList();
foreach (VariationLabel varLabel in Variations.Current.UserAccessibleLabels)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (varLabel.Locale == SPContext.Current.Web.Locale.LCID.ToString())
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
lblCurVariation.Text = varLabel.DisplayName;
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
varList.Add(varLabel);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
dlVariations.DataSource = varList;
dlVariations.DataBind();
}
![](/Images/OutliningIndicators/None.gif)
</
script
>
![](/Images/OutliningIndicators/None.gif)
<
asp:Panel ID
=
"
pnlItem
"
runat
=
"
server
"
>
<
asp:Panel ID
=
"
pnlCurVariation
"
runat
=
"
server
"
>
<
asp:Label ID
=
"
lblCurVariation
"
runat
=
"
server
"
Text
=
"
Language Not Found
"
></
asp:Label
><
asp:Image ID
=
"
Image1
"
runat
=
"
server
"
ImageUrl
=
"
~/_layouts/images/menudark.gif
"
ImageAlign
=
"
textTop
"
/><
br
/>
</
asp:Panel
>
<
asp:Panel ID
=
"
pnlMenuHold
"
runat
=
"
server
"
Style
=
"
display: none; position: absolute;
z
-
index:
20
;
"
>
<
iframe style
=
"
position: absolute; z-index: -1; filter: alpha(opacity=0);
"
></
iframe
>
<
asp:Panel ID
=
"
pnlMenu
"
runat
=
"
server
"
>
<
asp:DataList ID
=
"
dlVariations
"
runat
=
"
server
"
RepeatLayout
=
"
Flow
"
>
<
ItemTemplate
>
<
asp:HyperLink ID
=
"
HyperLink1
"
NavigateUrl
=
'
<%# DataBinder.Eval(Container, "DataItem.TopWebUrl")%>
'
runat
=
"
server
"
Width
=
"
100%
"
><%
# DataBinder.Eval(Container,
"
DataItem.DisplayName
"
)
%></
asp:HyperLink
>
</
ItemTemplate
>
</
asp:DataList
>
</
asp:Panel
>
</
asp:Panel
>
</
asp:Panel
>
![](/Images/OutliningIndicators/None.gif)