Globalização arquitetura
-
09-06-2019 - |
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?
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.