2013-03-26 2 views
1

여러 리소스 파일이 있습니다. 나는 default.aspx.nl.resx가로드 네덜란드의 도메인에있을 때사이트 언어를 변경하지 않고 언어 별 리소스 파일에서 값 가져 오기

default.aspx.resx는 default.aspx.nl.resx 지금

을 default.aspx.en.resx. 하지만 이제 default.aspx.en.resx에서 값에 액세스하여 "title"이라는 이름의 영어 값을 가져 오려고합니다.

지금 값에 액세스, 현재 문화의 서버 측을 변경하여이를 다음과 같이, 다시 변경할 수 있습니다

Dim culture As CultureInfo = New CultureInfo("en") 
Threading.Thread.CurrentThread.CurrentCulture = culture 
Threading.Thread.CurrentThread.CurrentUICulture = culture 
Dim title as String = GetLocalResourceObject("title") 
culture = New CultureInfo("nl") 
Threading.Thread.CurrentThread.CurrentCulture = culture 
Threading.Thread.CurrentThread.CurrentUICulture = culture 

을하지만 더 나은/더 빠른 방법은 무엇입니까? 가급적이면 현재 스레드의 culture를 변경하지 않고도 액세스 할 리소스 파일과 언어를 정의 할 수 있습니다. 당신은 매개 변수 당신 타지 문화에 추가 할 수 있습니다

답변

2

GetLocalResourceObject("title","YourCulture"); 

링크 : http://msdn.microsoft.com/fr-fr/library/ms149953.aspx

+0

감사합니다 ... 당신이 그것을 사용하는 방법에 대한 샘플을 제공 할 수있다? 내가 제공 한 페이지에 예제가 표시되지 않습니다. 다시 한 번 감사드립니다! – Flo

+0

그리고 귀하의 제안을 시도 : GetLocalResourceObject ("제목", "엉"),하지만 작동하지 않습니다. 나는 ASP.NET 4.5를 사용하고있다. btw – Flo

+0

GetLocalResourceObject ("title", "ko-kr")와 함께 시도한다. –

2

편집 : (죄송합니다 나는 당신이에서 다른 방법은 다른 원했다는 것을 몰랐다, 그러나 이것은 유일한 방법이었다

var userLanguage = "en-US"; 

System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(userLanguage); 
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(userLanguage); 

HttpContext.GetGlobalResourceObject("MyAppResource", "KeyThatIWantToGet"); 
을 : 나는 수행하여이 작업을 수행하기 위해 관리

:) 나는 어떻게 관리하는 것이 0

여기서 MyAppResource는 .resx 파일 이름과 KeyThatIWantToGet이 자신을 설명하는 방법입니다.

0

HttpContext를 (일반적인 .NET 응용 프로그램) 나는 다음과 같은 도우미 사용 사용하지 :

/// <summary> 
/// Disposable class that lets us assume a specific culture while executing 
/// a certain block of code. You'd typically use it like this: 
/// 
/// using (new CultureContext("de")) 
/// { 
///  // Will return the German translation of "Please click here" 
///  string text = SharedResource.Please_click_here; 
/// } 
/// </summary> 
public class CultureContext : IDisposable 
{ 
    private readonly CultureInfo _previousCulture; 
    private readonly CultureInfo _previousUiCulture; 

    public CultureContext(CultureInfo culture) 
    { 
     // Save off the previous culture (we'll restore this on disposal) 
     _previousCulture = Thread.CurrentThread.CurrentCulture; 
     _previousUiCulture = Thread.CurrentThread.CurrentUICulture; 
     Thread.CurrentThread.CurrentCulture = culture; 
     Thread.CurrentThread.CurrentUICulture = culture; 
    } 

    public CultureContext(string cultureCode) 
     : this(new CultureInfo(cultureCode)) 
    { 

    } 

    /// <summary> 
    /// Syntactic sugar so that we can switch to a culture context as follows: 
    /// 
    /// using (CultureContext.For("de")) 
    /// { 
    ///  // Will return the German translation of "Please click here" 
    ///  string text = SharedResource.Please_click_here; 
    /// } 
    /// </summary> 
    public static CultureContext For(string cultureCode) 
    { 
     return new CultureContext(cultureCode); 
    } 

    public void Dispose() 
    { 
     // Restore the culture settings that were in place before switching 
     // to this context 
     Thread.CurrentThread.CurrentCulture = _previousCulture; 
     Thread.CurrentThread.CurrentUICulture = _previousUiCulture; 
    } 
}