2017-04-06 6 views
2

DynamicResource 및 MergedDictionary에 문제가 있습니다. 다른 언어 (영어, 스페인어, 독일어)로 표시 할 수있는 소프트웨어가 있으며 많은 ResourceDictionaries가 있습니다. 내가 당신에게 "Documentation.xaml"라고 사전의 하나의 예를 제공합니다 : DynamicResource에 올바른 값이 표시되지 않습니다.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:system="clr-namespace:System;assembly=mscorlib"> 

    <system:String x:Key="ProductNumber">Product Number</system:String> 
    <system:String x:Key="Notes">Notes</system:String> 
    <system:String x:Key="Logo">Logo</system:String> 
    <system:String x:Key="InspectionTask">Inspection task</system:String> 
    <system:String x:Key="ProductDescription">Product Description</system:String> 
</ResourceDictionary> 

이 내 "기본"ResourceDictionary에

. 독일어와 영어 용으로 "Documentation.de-DE.xaml"과 "Documentation-es-ES.xaml"이라는 다른 두 개의 사전이 있습니다 그들은 기본 사전과 거의 같습니다. 유일한 차이점은 표시된 문자열입니다 .

내 문제 : "DynamicResource"를 통해 ressource에 액세스하면 활성 사전에서 결과를 얻습니다 (예 : 스페인어로 된 "ProductDescription"에 대해 "Descripcion de producto"를 얻음). 다음 상황을 전제로 : 스페인어로 소프트웨어를 실행 중이고 독일어로 변경하고 싶지만 사전에있는 항목 중 하나만 사용할 수 있습니다. 에이 vailable이면 소프트웨어는 기본 항목을 사용하지 않습니다. 나는 아직도 스페인어 사전의 가치가있다.

제 생각에는 DynamicResource가이 경우 충돌하고 변경되지 않습니다. 나는 그것이 정말로 부서지고 있다는 증거가 없다. 내가 가진 유일한 사실은 항목이 존재하지 않으면 텍스트 상자가 변경되지 않는다는 것입니다! 이 충돌을 처리 할 수있는 방법이 있습니까? (해당하는 경우)

필요한 모든 정보를 얻길 바랍니다. 알려지지 않은 경우 알려주십시오

+0

실제로 "충돌"하거나 TextBlock이 변경되지 않습니까? – mm8

+0

@ mm8 내가 말한 것처럼 그것은 내 의견 일 뿐이다. 나는 그것이 충돌하는지 모른다. 내가 아는 유일한 것은 그것이 변하지 않는다는 것입니다. 항목을 사용할 수 있으면 제대로 작동하고 텍스트 상자가 변경됩니다. 나는 또한 그것을 명확하게하기 위해 질문을 편집했다. – Evosoul

답변

2

다음과 같은 상황을 가정. 나는 아직도 스페인어 사전의 가치가있다.

이것은 예상되는 동작입니다. DynamicResource 태그 확장자를 사용하여 설정된 대상 속성은 리소스가 변경 될 때만 변경됩니다. 리소스가 이 제거 된 경우이 제거되면 대상 속성이 다시 설정되지 않습니다.

ResourceDictionary에는 정확히 동일한 번역 키가 포함되어 있어야합니다.

다른 옵션은 사용자 정의 마크 업 확장을 구현하는 것입니다. 자세한 내용은 다음 링크를 참조하십시오.

https://wpftutorial.net/LocalizeMarkupExtension.html http://10rem.net/blog/2011/03/09/creating-a-custom-markup-extension-in-wpf-and-soon-silverlight https://github.com/SeriousM/WPFLocalizationExtension https://www.codeproject.com/articles/35159/wpf-localization-using-resx-files

+0

아 좋아. 나는 이미 구현 된 방법이 있다고 생각했다. 나는 이것을 들여다 볼 것이다! 감사! – Evosoul

+1

나는 대답을 upvoted – Evosoul

0

언어를 변경하면 이러한 모든 문화권 설정을 변경합니까? 나는 스페인어에서 소프트웨어를 실행하고 독일어로 변경하고자하고 있지만, 사전에 하나 개의 항목은 다음 소프트웨어가에 대한 기본 항목을 사용하지 않는, 사용할 수 없습니다 :

CultureInfo.DefaultThreadCurrentCulture = newCultureInfo; 
CultureInfo.DefaultThreadCurrentUICulture = newCultureInfo; 
Thread.CurrentThread.CurrentCulture = newCultureInfo; 
Thread.CurrentThread.CurrentUICulture = newCultureInfo; 
0

다음과 같은 상황을 가정 : 나는 스페인어에서 소프트웨어를 실행하고 독일어로 변경하고자하고 있지만, 사전에 하나의 항목을 사용할 수없는 다음 소프트웨어입니다 기본 항목을 사용하지 않습니다. 나는 아직도 스페인어 사전의 가치가있다.

의미가 있습니다. 입장이 전혀 없으면 왜 가치가 바뀌어야합니까!

각 '언어'리소스 사전에 누락 된 항목을 빈 문자열 값으로 추가하는 것이 좋습니다.

관련 문제