문제

Windows 8.1용 Windows 스토어 앱을 만들기 시작했는데 현지화와 관련된 문제가 발생했습니다.

디자인 타임에 .resw 파일의 문자열 리소스를 표시하고 싶지만 런타임에 작동하더라도 모든 시도가 실패했습니다.

x:Uid 특성을 사용할 때 여전히 Text 속성을 제공해야 합니다(예:TextBlock의 경우) 텍스트를 두 번 쓰는 것을 좋아하지 않습니다.

또한 viewmodel에서 문자열에 대한 속성을 생성해 보았습니다.

public string Title
{
    get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}

런타임에는 작동하지만 디자인 타임에는 비어 있습니다.

그렇다면 문제는 XAML 디자이너에서 .resw 파일의 리소스를 표시하는 방법이 있느냐는 것입니다.

보다 구체적으로 말하면 ResourceManager 클래스를 사용하면 디자인 타임에 .resw 파일을 읽을 수 있습니까?

도와 주셔서 감사합니다, Lucas

도움이 되었습니까?

해결책

기존 방법

그래서, 당신이 할 수 있는 몇 가지 일이 있습니다.

첫 번째(그리고 가장 간단한, 사용 중인 경우) x:Uid 이미) 텍스트 필드에 텍스트를 제공하는 것입니다.그만큼 x:Uid-관련 값은 거기에 있는 모든 것을 덮어씁니다.

<TextBlock Text="MyText" x:Uid="MainView_Title"/>

두 번째 방법은 이미 가지고 있는 속성을 사용한 다음 앱이 디자인 타임에 있는지 확인하고(몇 가지 다른 방법을 통해), 그렇다면 상수 값을 반환하고, 그렇지 않으면 리소스를 반환하는 것입니다.

public string Title
{
     if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
         return "My Text";
     return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}

이것이 도움이 되기를 바라며 즐거운 코딩을 하세요!

편집하다:적어도 Windows 8.1부터 이를 수행하는 새로운 방법이 있는 것으로 보입니다.

새로운 방법

  • 다음을 참조하는 클래스를 만듭니다. ResourceLoader (위에서 설명한 속성과 유사)
  • 문자열 키를 받아들이고 값을 반환하는 인덱싱된 속성 접근자를 만듭니다. ResourceLoader.

    public class LocalizedStrings
    {
        public string this[string key]
        {
            get
            {
                return App.ResourceLoader.GetForViewIndependentUse().GetString(key);
            }
        }
    }
    
  • 당신의 App.xaml, 정의 StaticResource 이 유형의.

    <Application.Resources>
        <ResourceDictionary>
            <common:LocalizedStrings x:Key="Localized"/>
        </ResourceDictionary>
    </Application.Resources>
    

이제 출입키로 숙소에 출입하고 싶을 때 MainView_Title, 이것을 사용하세요.좀 더 장황하지만 디자이너와 앱 자체 모두에서 번역되어야 합니다.

<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />

원하는 경우 다음과 같이 좀 더 읽기 쉽게 섞을 수 있습니다.

<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />

다른 팁

이것은 오래된 스레드이지만 Nate는 Win8.1에 대한 문제에 대한 우아한 솔루션을 제공했습니다. 나는 여기서 묻습니다.

많은 조사와 실험 이후, NATE의 솔루션은 VS2017 커뮤니티에서 Win10의 UWP 앱에서 작동하지 않습니다.LocalizedString 접근 방식은 런타임에 잘 작동하지만

가 나타납니다.
App.ResourceLoader.GetForViewIndependentUse().GetString(key);
.

는 디자인 시간 동안 string.Empty를 제외하고 아무 것도 반환하는 것을 거부합니다.나는 많은 실험을했고

와 같은 것들이있었습니다.
ResourceContext.GetForViewIndependentUse().QualifierValues
.

는 런타임 (작업)과 디자인 시간 (작동하지 않음)과 동일한 것처럼 보입니다.

누군가가 이것을 마주 쳤고 그것을 해결했는지 궁금해하고있었습니다.네이트?:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top