2011-10-26 4 views
0

SQL 데이터베이스에 모든 텍스트가있는 MVC 3 응용 프로그램이 있습니다. 텍스트에는 각 언어의 이름과 값이 있습니다. 캐시 개체에 텍스트를 저장하고 어떻게 든 내보기 및 일부 세션 변수를 기반으로 내 컨트롤러에서 가져오고 싶습니다.MVC 3 캐시 기반의 세계화

내 첫번째 해결책은 캐시에 개체 TextHandler를 저장하는 것이 었습니다. TextHandler에는 텍스트로 이름을 (문자열로) 추출하고 다른 값으로 추출하는 데 도움이되는 모든 텍스트와 메소드가 있습니다. 또한 세션 변수를 기반으로 TextHandler에서 텍스트를 가져 오는 컨트롤러 메서드 및 도우미가 있습니다. 나는이 해결책으로 만족하지 않는다.

나는 이것을위한 몇 가지 가이드를 찾았지만 실제로 필요한 코드는 실제 코드가 아닌 실제 코드가 필요하다.

답변

0

당신은 메모리 캐시에 저장할 수 있다고 생각합니다. (얼마나 많은 언어와 사전 값을 가지고 있느냐에 따라 분산되거나 로컬로 저장 될 수 있습니다.)

언어 코드 | 이름 키를 사용할 수 있으며 값은 해당 언어의 단어입니다.

그래서 우리는 키로 header_name을, 예를 들어 "My Header"를 가질 수 있습니다.

이러한 값을 저장할 수있는 곳에서 언급했듯이 요구 사항에 따라 다릅니다. 로컬 메모리에 속하지 않는다고 생각한다면 항상 memcache 구조체 또는 LRU 캐시를 설정하여 많이 사용되는 상위 N 개의 가장 널리 사용되는 값을 보유 할 수 있으며 캐시 미스가 있으면 데이터베이스로 이동합니다 (모든 언어로 된 귀하의 사전이 포함되어 있음)를 사용하여 주어진 이름과 언어의 값을 찾으십시오.

어떻게 든 도움이 되길 바랍니다.

0

일반적인 방법은 URL에 코드를 제공하고 컨트롤러에서 매개 변수로 사용하는 것입니다. 이 언어 코드는 데이터베이스에서 쿼리하는 문자열과 함께 사용됩니다. 당신이 리소스 파일을 고려할 경우

이 솔루션은 이미 당신을 위해 설정됩니다 http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

다른 것은이 브라우저가 문화를 설정하는 요청 무엇을 기반으로합니다. 이 이름을 사용하여 데이터베이스를 조회하십시오. 이제

 
public static string GetCurrentCulture() 
{ 
    return Thread.CurrentThread.CurrentCulture.Name; 
} 

(How to pass CultureInfo to partialView for ajax call?에서) 문화 이름은 단순히 저장소 패턴을 구현, 캐시 특정 이동합니다. '언어'와 '문자열'로 쿼리하면 캐시에 캐시가 있는지 확인하십시오. 그럴 경우 반환하고 그렇지 않으면 데이터베이스로 이동하여 검색하십시오. 이것은 리포지토리 패턴을 사용하는 큰 이점이며 캐시 세부 정보는 호출자에서 제거됩니다. 리소스 파일 구현으로 이동하기로 결정한 경우 문화적 지원이 내장되어 있으므로 아무 것도 필요하지 않습니다.