2008-08-26 6 views
3

전자 상거래 솔루션 용 제품을 데이터베이스에 저장해야합니다. 각 제품에는 이름, 설명 등의 정보가 있어야합니다.세계화 아키텍처

x 개의 언어로 현지화 할 제품이 필요합니다. 내가 지금까지했던 어떤

는 지역화 및 nvarchar(MAX)해야 모든 열을 확인하는 것입니다 그리고 나는이 같은 XML 문자열 저장 :

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

을 그리고 난에 데이터베이스에서로드 할 때 내 비즈니스 논리 개체 인 XML 문자열을 Dictionary<string, string>으로 구문 분석합니다. 여기서 키는 문화권/언어 코드입니다.

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

사람이 더 나은 솔루션이 있습니까 : 나는이 제품의 이름을 표시 할 때

그래서, 나는 이렇게?

답변

2

당신은 (예를 들면, singleton에서) 어딘가에 현재 언어를 저장하고 product.Name 속성에 올바른 문자열을 얻기 위해 언어 설정을 사용해야합니다. 이렇게하면 필드가 사용되는 모든 곳의 언어에 대해 생각하기보다는 각 필드에 대해 언어 특정 코드를 한 번만 작성하면됩니다. GetLocalString이 같은 형태

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

는 :

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

Rob Conery의 MVC Storefront 웹 캐스트 시리즈에는 a video on this issue (데이터베이스에 약 5:30에 도착 함)이 있습니다. 그는 문화권 목록을 저장 한 다음 지역화되지 않은 데이터 용 Product 테이블과 지역화 된 텍스트 용 ProductCultureDetail 테이블을 보유합니다.

+0

표의 내용을 지역화 된 데이터로 구분하기 위해 표 이름에 "문화권"을 남겨 두는 것이 좋습니다. – y0mbo

1

리소스 파일

+0

최상의 솔루션, 최악의 답변 :) – Ropstah

0

이 기본적입니다

는 예를 들어, 싱글을 가정하면 현재 언어에 해당 열거를 저장하는 로컬 라이저 클래스에 정의되어 있습니다 우리는 Microsoft Commerce Server 2002를 사용하여 접근했습니다. 예를 들어 인덱싱 된보기가 실적에 도움이됩니다.