2010-01-08 2 views
4

현지화에 대한 조언이 필요합니다. 문자열의 약 95 %를 처리하는 일반적인 형식 (즉, .resx 파일)으로 현지화 된 앱이 있습니다. 그러나 여전히 데이터베이스에 저장된 범주 이름에 대해 일부 문자열을 지역화해야합니다.ASP.NET 지역화에 대한 조언 - 데이터베이스에 저장된 문자열 및 gridview에 표시됩니다.

저는 categoryname_ES, categoryname_FR 등 15 개의 새 열을 추가하지 말고 동적으로 오른쪽 열을 가져오고 싶습니다. 데이터를 가져올 방법이있을 경우 코드에서 대입을 수행하면 조금 덜 어둡습니다. 어쩌면의 라인을 따라 : 선택한 언어가 영어가 아닌 경우

  • 가있는 gridview 행을 통해 이동, 글로벌 리소스 파일에서이 텍스트 값을 찾아서 교체하십시오.

누구나이 작업을 수행하는 좋은 방법이 있습니까? 또는 각 언어별로 많은 카테고리 이름 열을 추가하는 것입니다 (ewww).

+0

몇 줄의 문자열을 말하고 있습니까? – jim

답변

3

설명하는 리소스 파일 방법을 사용합니다.

  1. 각 범주에 대한 행이있는 CategoryName.resx 파일을 추가하십시오. "이름"이 데이터베이스 값과 정확히 일치하는지 확인하십시오. "번역"에 번역을 넣으십시오.
  2. resx의 생성 된 코드 파일을 통해 코드 문자열을 가져옵니다. Resources.CategoryName.ResourceManager.GetString(categoryName, new CultureInfo("fr"));

사용자 정의 클래스에 바인딩하는 경우, 또 다른 속성을 만드는 대신 해당 속성에 바인딩 (는 C# 죄송합니다). DataSet에 바인딩하는 경우 RowDataBound 이벤트를 사용하여 대체 작업을 수행 할 수 있습니다.

+0

이것은 내가 결국 사용하는 해결책입니다 - 매력처럼 작동합니다.내가 수정해야만했던 유일한 것은 내 범주 이름에 .resx 파일의 "Name"필드에서 유효하지 않은 공백과 대시가 있었기 때문에 .Replace ("", String.Empty) .Replace ("-", String.Empty). 입력 해 주셔서 감사합니다. – Bryan

1

당신은 세 개의 테이블을 만들 수 있습니다

Category 
    Category_ID (identity) 
    Category_Name (string) 

Language 
    Language_ID (identity) 
    Language_Name (string) 

CategoryLanguage 
    Category_ID (FK) 
    Language_ID (FK) 
    Translation (string) 

카테고리 테이블은 영어 이름을 가질 것이다. 언어 테이블에는 응용 프로그램이 지원하는 언어가 있습니다. 연관 테이블은 선택된 언어에 기초하여 번역 된 카테고리 이름이 존재할 경우이를 제공 할 수 있습니다. 존재하지 않으면 단순히 영어 버전을 기본값으로 표시하십시오.

3

당신은 네 개의 데이터베이스 컬럼으로 작업을 수행 할 수 있습니다

ID (unique primary key) 
CultureCode 
ProductID 
ProductName 

난 당신이 데이터베이스에서 귀하의 제품을 선택하는 것을 가정한다. UI culture를 저장 프로 시저의 일부로 전달한 다음 제품 테이블에서 제품 ID 및 UICulture에 대한 Culture 테이블에 조인을 선택합니다. 다음과 같이 SELECT를 사용합니다.

SELECT ProductID 
     ,another field 
     ,IsNull(Culture.ProductName, Product.ProductName) 
     ,etc 
FROM Product 
    LEFT JOIN Culture 
     ON Product.ProductID = Culture.ProductID 
     AND Culture.CultureCode = @UICulture 

아이디어를 얻습니다. UICulture에서 하이픈 (예 : fr-CA)을 확인하고 다른 변수로 분할 한 다음 Culture 테이블에 두 개의 조인을 수행 할 수 있습니다. 하나는 정확한 culture 용이고 다른 하나는 대체 문화 용이므로이 예제에서는 첫 번째 참여자는 fr-CA이고 두 번째 참여자는 fr에 대체됩니다. 문화권에 조울 (Zulu)이 없기 때문에 모든 문화 조인이 실패하면 IsNull은 평범한 ProductName (아마도 영어 임)을 사용합니다.

관련 문제