Pergunta

Estou tentando personalizar o texto exibido na caixa de pesquisa do meu site do SharePoint.O padrão é "Pesquisar neste site...".

Encontrei vários artigos que explicam como fazer isso (substituindo o controle delegado por um número de sequência inferior) e funciona bem.

Meu XML fica assim:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Control
        Id="SmallSearchInputBox"
        Sequence="10"
        ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.Office.Server.Search, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
        <Property Name="GoImageUrl">/_layouts/images/gosearch15.png</Property>
        <Property Name="GoImageUrlRTL">/_layouts/images/gosearchrtl15.png</Property>
        <Property Name="GoImageActiveUrl">/_layouts/images/gosearchhover15.png</Property>
        <Property Name="GoImageActiveUrlRTL">/_layouts/images/gosearchrtlhover15.png</Property>
        <Property Name="DropDownMode">ShowDD</Property>
        <Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
        <Property Name="ScopeDisplayGroupName"></Property>
        <Property Name="FrameType">None</Property>
        <Property Name="QueryPromptString">DO A SEARCH!</Property>
    </Control>
</Elements>

Isso funciona bem, a caixa de pesquisa exibe "faça uma pesquisa!" como esperado.No entanto, quero que essa string seja localizada.Quando eu faço

<Property Name="QueryPromptString">$Resources:MyResourceFile,CustomText;</Property>

A caixa de pesquisa exibe $Resources:MyResourceFile,CustomeText;literalmente em vez de avaliá-lo.

Como coloco strings localizadas lá?

Obrigado!

Foi útil?

Solução

A linha <Property Name="QueryPromptString">$Resources:MyResourceFile,ResourceKey</Property> funciona bem para mim.Eu acho que você deveria verificar seu arquivo de recursos.Este arquivo deve conter ResourceKey que você tenta usar nesta propriedade.

Se você usar o arquivo de recursos e a chave corretos, o controle de pesquisa exibirá o texto dependendo do idioma do site.Se desejar alterar este texto dinamicamente como você vê na imagem abaixo, você deve seguir alguns passos mais complexos.

enter image description here

passos:

  1. Crie sua classe personalizada e herde-a de SearchBoxEx
  2. Crie uma nova propriedade QueryPromptString
  3. Definir controle seguro
  4. Criar controle delegado

código para etapas:

public class SearchBox : SearchBoxEx
{
    [Browsable(false)]
    public new string QueryPromptString
    {
        get
        {
            return base.QueryPromptString;
        }
        set
        {
            string fullKey = string.Format("$Resources:{0}", value);
            base.QueryPromptString = SPUtility.GetLocalizedString(fullKey, null, (uint)Thread.CurrentThread.CurrentUICulture.LCID);
        }
    }
}

<Control Id="SmallSearchInputBox"
           Sequence="10"
           ControlClass="LocalizedSearch.SearchBox"
           ControlAssembly="LocalizedSearch, Version=1.0.0.0, Culture=neutral, PublicKeyToken=71df3f77c17b7c69">
        <Property Name="GoImageUrl">/_layouts/images/gosearch15.png</Property>
        <Property Name="GoImageUrlRTL">/_layouts/images/gosearchrtl15.png</Property>
        <Property Name="GoImageActiveUrl">/_layouts/images/gosearchhover15.png</Property>
        <Property Name="GoImageActiveUrlRTL">/_layouts/images/gosearchrtlhover15.png</Property>
        <Property Name="DropDownMode">ShowDD</Property>
        <Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
        <Property Name="ScopeDisplayGroupName"></Property>
        <Property Name="FrameType">None</Property>
        <Property Name="QueryPromptString">filename,key</Property>
  </Control>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top