Pergunta

Eu preciso loja de produtos para uma solução de e-commerce em um banco de dados.Cada produto deve ter informações descritivas, tais como nome, descrição, etc.

Eu preciso de qualquer produto para ser localizadas em x número de idiomas.

O que eu tenho feito até agora, é fazer com que qualquer coluna que deve ser localizado e nvarchar(MAX) e então eu armazenar uma cadeia de caracteres XML como este:

<cultures>
    <culture code="en-us">Super fast laptop</culture>
    <culture code="da-dk">Super hurtig bærbar</culture>
</cultures>

E quando eu carregá-lo a partir do banco de dados, para o meu negócio, lógica de objetos, analisar a cadeia de caracteres XML para um Dictionary<string, string> onde a chave é a cultura/código da língua.

Então, quando eu quero exibir o nome de um produto, eu faço isso:

lblName.Text = product.Name["en-us"];

Alguém tem uma solução melhor?

Foi útil?

Solução

Você deve armazenar o idioma atual em algum lugar (em um singleton, por exemplo) e no produto.Nome do uso da propriedade, a definição de idioma para obter a seqüência correta.Desta forma, só tem que escrever o idioma de código específico, uma vez para cada campo, em vez de pensar sobre as línguas em todos os lugares do campo é usado.

Por exemplo, supondo que o singleton é definido no Localizador de classe que armazena um enum correspondente ao idioma atual:

public class Product
{
  private idType id;
  public string Name
  {
    get
    {
      return Localizer.Instance.GetLocalString(id, "Name");
    }
  }
}

Onde GetLocalString se parece com algo como:

  public string GetLocalString(idType objectId, string fieldName)
  {
    switch (_currentLanguage)
    {
      case Language.English:
        // db access code to retrieve your string, may need to include the table
        // the object is in (e.g. "Products" "Orders" etc.)
        db.GetValue(objectId, fieldName, "en-us");
        break;
    }
  }

Outras dicas

Rob Conery do MVC Loja webcast da série tem um vídeo sobre esta questão (ele fica para o banco de dados de cerca de 5:30).Ele armazena uma lista de culturas e, em seguida, tem uma tabela de Produtos para os não-localizados de dados e um ProductCultureDetail tabela para texto localizado.

arquivos de recursos

Este é, basicamente, a abordagem que teve com o Microsoft Commerce Server 2002.Sim modos de exibição indexados vai ajudar o seu desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top