2014-10-07 2 views
1

저는 현재 현지화의 특별한 경우에 어려움을 겪고 있습니다. WPF 응용 프로그램을 지역화하는 여러 가지 방법에 대해 읽었으며 "locbaml"에 의해 생성 된 위성 어셈블리를 사용하기로 결정했습니다. http://msdn.microsoft.com/en-us/library/bb613547%28v=vs.110%29.aspx
그래서 나는이 리소스 사전이 :리소스 사전에 locbaml 사용

<ResourceDictionary x:Uid="ResourceDictionary_1" 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:Uid="system:String_1" x:Key="TestKey">Development</system:String> 
</ResourceDictionary> 

을 내가 app.xaml 내에서 병합 :

여기에 설명 된대로 은 C#을 -code에서 문자열을 지역화 할 수 있도록하기 위해 나는 resourcedictionaries를 사용하기로 결정

this.Message = (string)Application.Current.FindResource("TestKey"); 

그리고 :

Application x:Uid="Application_1" x:Class="LocalizationIssue.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary x:Uid="ResourceDictionary_1"> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary x:Uid="ResourceDictionary_2" Source="Localization.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

이 그런 일을 저를 활성화해야 않습니다. 응용 프로그램을 실행하면 "개발"을 볼 수 있습니다. 샘플 프로젝트에는 두 개의 TextBlock이 있습니다. TextBlock의 TextProperty는 "Message"라는 속성에 바인딩됩니다. 다른 하나는 "StaticDevelopment"로 정적으로 설정됩니다. 그래서 MainWindow.xaml은 다음과 같습니다

<Window x:Uid="Window_1" x:Class="LocalizationIssue.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel x:Uid="StackPanel_1"> 
     <TextBlock x:Uid="TextBlock_1" FontSize="20" Text="{Binding Message}" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
     <TextBlock x:Uid="TextBlock_2" FontSize="20" Text="StaticDevelopment" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
    </StackPanel> 
</Window> 

가 그럼 난 locbaml 위성 어셈블리를 생성하기위한 모든 단계를 따라 여기에 설명 된대로 : http://msdn.microsoft.com/en-us/library/ms746621%28v=vs.110%29.aspx
예 : 1. 어셈블리 정보도 파일을 프로젝트 (하고 UICulture 추가)
2. UID를 만들기 : LocalizationIssue.csproj
3. CSV 파일을 만듭니다 updateuid : msbuild를/t locbaml/구문 분석 LocalizationIssue.resources.dll /out:loc.csv
4. loc.csv
에 값을 번역 5. 위성 만들기 : locbaml/generate LocalizationIssue.resources.dll/t 트랜스 포메이션 : loc.csv/out : c : \/cul : en-US
이제 UI culture를 프랑스어로 전환하면 바인딩이있는 TextBlock의 영어 번역이 표시되지만 다른 텍스트 블록의 현지화 된 값은 표시됩니다.
내가 잘못하고있는 아이디어가 있습니까? "locbaml"- 접근 방식에 대한 귀하의 경험은 무엇입니까? 우리는 resx-file로 전통적인 방식으로 가야할까요? 모든 입력에 대한

감사합니다;) 새로운 파일로

답변

0

시도 복사는 loc_us.csv 및 변경 후 실행되도록 할 수있다 locbaml/생성 LocalizationIssue.resources.dll /trans:loc_us.csv/아웃 : C : \/cul : ko-US