Pregunta

Necesito almacenar productos para una solución de comercio electrónico en una base de datos.Cada producto debe tener información descriptiva, como nombre, descripción, etc.

Necesito que cualquier producto esté localizado a x número de idiomas.

Lo que he hecho hasta ahora es crear cualquier columna que deba estar localizada y nvarchar(MAX) y luego almaceno una cadena XML como esta:

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

Y cuando lo cargo desde la base de datos, en mis objetos de lógica de negocios, analizo la cadena XML en un Dictionary<string, string> donde la clave es el código cultural/idioma.

Entonces, cuando quiero mostrar el nombre de un producto, hago esto:

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

¿Alguien tiene una solución mejor?

¿Fue útil?

Solución

Debes almacenar el idioma actual en algún lugar (en un único, por ejemplo) y en la propiedad product.Name utilice la configuración de idioma para obtener la cadena correcta.De esta manera, solo tendrá que escribir el código específico del idioma una vez para cada campo en lugar de pensar en los idiomas en todos los lugares donde se utiliza el campo.

Por ejemplo, suponiendo que su singleton esté definido en la clase Localizer que almacena una enumeración correspondiente al idioma actual:

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

Donde GetLocalString se parece a:

  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;
    }
  }

Otros consejos

La serie de webcasts MVC Storefront de Rob Conery ha un video sobre este tema (llega a la base de datos alrededor de las 5:30).Almacena una lista de culturas y luego tiene una tabla Producto para datos no localizados y una tabla ProductCultureDetail para texto localizado.

archivos de recursos

Este es básicamente el enfoque que adoptamos con Microsoft Commerce Server 2002.Sí, las vistas indexadas ayudarán a tu rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top