2009-06-25 3 views
1

나는 만족스럽고 다루기 쉬운 해결책이없는 것 같습니다. Silverlight 및 국제화 - 제작에있어서의 수렁입니다.Silverlight - 국제화를위한 매개 변수화 된 가치

번역 된 문자열이 들어있는 리소스 파일 집합이 있습니다.

단순한 경우 언어 리소스 등을 선언하고 강력한 형식의 리소스 내에서 값의 콘텐츠/텍스트를 바인딩 할 수 있습니다. 그게 전부예요.

덜 간단한 경우는 문자열에 매개 변수가있을 수 있으므로 문자열 표시에 값을 삽입해야합니다. 문자열 자체는 데이터 바인딩 일 수 있습니다.

더 복잡한 시나리오는 여러 매개 변수가있는 문자열입니다.

VM이이 기능을 제공해야한다고 주장 할 수는 있지만 개발자가 UX 디자이너와 개발자 사이의 구분을 깨뜨리고 개발자가 모든 문자열을 지원하기 위해 VM에서 속성/메소드를 구현해야하므로 불만 스럽습니다. UI가 필요합니다.

예를 들어 디자이너는 사용자 의견을 바탕으로 사용자 정의 툴팁에 추가 정보를 추가하기로 결정합니다. 툴팁은 선언적으로 수행되며 datacontext의 값과 더 나은 설명을 결합합니다. 설명은 자원에 저장되며 사용되는 값은 기존 데이터 컨텍스트 또는 요소에서 요소 바인딩으로 제공됩니다.

VM을 통해 모든 문자열을 실행해야한다면 VM을 변경해야합니다. 마찬가지로 매개 변수의 소스가 다른 요소의 소스 일 경우 VM은 반드시 형식화 된 문자열을 제공 할 위치에 있지 않습니다.

사람들이이 문제에 어떻게 접근 했습니까? 내가 완벽하게 대답 할 수있는 것보다

A.

답변

0

이 문제는 더 복잡하지만, 당신이 원하는 경우 바인딩은 당신이 당신의 UI 컨테이너 (어쩌면 당신의 최고 수준의 UserControl 클래스)의 언어 속성을 설정해야합니다 특정 지역화를 고려. 그런 다음 모든 바인딩에서 요청한 현지화를 사용해야합니다. WPF와 관련이 있지만 Silverlight에 적용 할 수있는 기술을 사용하는이 기사를 확인하십시오. http://www.west-wind.com/weblog/posts/796725.aspx

0

나는 당신이 원하는 것을 정확히 모르고 있지만 몇 가지 해결책이 있습니다.

  • 당신의 VM에 새 문자열을 만들고 만드는 그것에서 INotifyPropertyChanged-수

    • 만들기 (응용 프로그램에서)

      public string MyTranslatedString 
      { 
          get 
          { 
           return string.Format("{0} Someone", LocalizedResource.Hello; 
          } 
      }; 
      

    그리고 현지화 변경 이벤트를 수신 여러 텍스트 블록을 사용하고 현지화 된 항목을 바인딩합니다.

    <TextBlock HorizontalAlignment="Stretch" Foreground="Black" Text="{Binding Path=Resource.CurrentlyLoggedInAs, Source={StaticResource LocalizedStrings }}" VerticalAlignment="Center" Margin="0,0,5,0" /> 
    <TextBlock HorizontalAlignment="Stretch" Foreground="Black" Text="{Binding Path=Username}" VerticalAlignment="Center" Margin="0,0,5,0" /> 
    <Button Commands:Click.Command="{Binding Path=LogOutCommand}" Commands:Click.CommandParameter="" Content="{Binding Path=Resource.LogOut, Source={StaticResource LocalizedStrings }}" /> 
    

당신은 당신의 주요 응용 프로그램에 추가 할 필요가

:

<Application.Resources> 
    <local:LocalizedStrings 
     xmlns:local="clr-namespace:Localization.Silverlight;assembly=Localization.Silverlight" 
     x:Key="LocalizedStrings" /> 
</Application.Resources> 

이 내가 생각 해낸 가장 쉬운 방법이 있지만 내가 가진 아주 행복 해요 나에게 뭔가 더 간단한 것을 제공하는 것.

+0

그 해결책은 원래의 문제 인 모든 것을 VM에 되돌려 놓고 피하려고합니다. VM이보기에 의해 소비 될 것이라는 점을 알아야합니다. VM에서 나오는 VM을 소비하는 모든보기의 문자열은 작동하지 않으며, VM에서 가져 오지 않은 요소 바인딩에 대한 요소는 없습니다. 사용할 수 있습니다. 예 : "현재 값은 {0}"이고 텍스트 블록은보기의 슬라이더에서 오는 자리 표시 자입니다. VM은 영속적이지 않은 순수한 UX 조각이기 때문에 슬라이더에 대한 지식이 없을 수도 있습니다. (현재 줌 레벨을 가정 해 봅시다.) – Andrew

+0

해결책을 시도했지만 ResourceDictionary가 내 에 기본으로 설정되어 있습니다 스타일 시트. 그 때문에 "ResourceDictionary"유형이 ResourceDictionary 안에 있으며 키가 없습니다 "라는 오류가 발생합니다." 당신이 그 문제를 해결하기 위해 무엇을 할 수 있는지 아십니까? 제가 열쇠를 꼈을 때 나는 스타일을 앱 전체에 사용할 수 없기 때문입니다. http://msdn.microsoft.com/en-us/library/dd882554(VS.96).aspx – Nordes

+0

에 설명 된 단계를 사용하고 있습니다. 스타일을 사전으로 포함해야합니다. <에 Application.Resources이> : 나를 위해 는 절 그렇게 보이는 자원을 의미 xmlns : local = "clr-namespace : WfW.Localization.Silverlight; assembly = WfW.Localization.Silverlight" x : Key = "LocalizedStrings"/> R4cOON

관련 문제