为了能够方便地在不同语言间切换,我们需要一个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!
<%@ 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)
{
if (!Page.IsPostBack)
{
try
{
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)
{
lblCurVariation.Text = ex.Message;
}
}
}
![](/Images/OutliningIndicators/None.gif)
public bool Visable
{
get { return visable; }
set { visable = value; }
}
![](/Images/OutliningIndicators/None.gif)
public string ItemCssClass
{
get { return itemCssClass; }
set { itemCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public string MenuCssClass
{
get { return menuCssClass; }
set { menuCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public string NormalCssClass
{
get { return normalCssClass; }
set { normalCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public string ActiveCssClass
{
get { return activeCssClass; }
set { activeCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
private void CreateMenu()
{
ArrayList varList = new ArrayList();
foreach (VariationLabel varLabel in Variations.Current.UserAccessibleLabels)
{
if (varLabel.Locale == SPContext.Current.Web.Locale.LCID.ToString())
{
lblCurVariation.Text = varLabel.DisplayName;
}
else
{
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)
方法一(如何使用微软提供的控件):
<%@ Register TagPrefix=”PublishingVariations” TagName=”VariationsLabelMenu” src=”~/_controltemplates/VariationsLabelMenu.ascx” %>
<PublishingVariations:VariationsLabelMenu id=”labelmenu1″ runat=”server”/>
注:经过测试发现,其实不需要自行在MasterPage中添加该控件,MasterPage已经包含一段显示该控件的代码:<SharePoint:DelegateControl runat="server" ControlId="GlobalSiteLink0"/>
方法二(我自己实现的控件):
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)