2016-12-08 10 views
1

Xamarin 응용 프로그램에서 다중 언어 지원을 개발하려고합니다. 영어와 스웨덴어로 키 값을 가진 2 개의 Resx 파일을 사용하고 공통 언어 인 appconfig 클래스에서 선택한 언어에 대한 하나의 전역 변수를 만들었습니다.Xamarin.Forms 응용 프로그램의 다국어 지원

appconfig에서 선택한 언어에 따라 텍스트 변환을 위해 을 상속받은 클래스 TranslateExtension을 생성했습니다.

[ContentProperty("Text")] 
public class TranslateExtension : IMarkupExtension 
    { 
    public string Text { get; set; } 

    public object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (Text == null) 
      return null; 


     ResourceManager rt1 = new ResourceManager(typeof(Resources.AppResources)); 
     if (AppConfig.SelectedLanguage == "Swedish") 
     { 
      rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
     } 

     var translation = rt1.GetString(Text); 
     return translation; 


    } 
} 

는 지금은 XAML 페이지

<StackLayout> 
<Picker x:Name="pickerForLanguage" BackgroundColor="White" HeightRequest="40" Title="Select Language" SelectedIndexChanged="SellectedLanguage"> 
    <Picker.Items> 
    <x:String>English</x:String> 
    <x:String>Swedish</x:String> 
    </Picker.Items> 
</Picker> 
<Label Text="{resources:TranslateExtension Greeting}" /> 

Home.xaml.cs

public void SellectedLanguage(object sender, EventArgs e) 
    { 
     if (pickerForLanguage.SelectedIndex == -1) 
     { 
      AppConfig.SelectedLanguage = "English"; 
     } 
     else 
     { 
      AppConfig.SelectedLanguage = "Swedish"; 
     } 

    } 

텍스트에서 선택한 언어로 변환됩니다이 같은 자사의 텍스트 값을 바인딩하고 페이지가 처음로드 될 때 appconfig. 언어를 드롭 다운에서 변경하면 선택한 언어의 값이 appconfig으로 변경됩니다. TranslateExtension 값을 호출하지 않으며 처음 후에 변경되지 않습니다.

답변

0

문제는 당신이 영어 번역을로드 결코입니다 :

ResourceManager rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
if (AppConfig.SelectedLanguage == "Swedish") 
{ 
    rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
} 

ResourceManager 모두 들어 - 생성자는 AppResources_sd 자원을 설정합니다. 이 코드의 첫 번째 줄을 영어 리소스 파일 (예 : AppResources_en과 같은 것)을 사용하도록 변경하십시오. 아래 그림과 같이

그리고

일부 오버 헤드를 줄이기 위해, 나는 그것을로드합니다 : 사용자가 영어 선택 입력해도
ResourceManager rt1; 
if (AppConfig.SelectedLanguage == "Swedish") 
{ 
    rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
} 
else 
{ 
    rt1 = new ResourceManager(typeof(Resources.AppResources_en)); 
} 

그렇지 않으면 당신은 스웨덴 자원 매번로드합니다.

+0

oh.thats 문제가 아닙니다 .i는 테스트 용으로 변경했습니다. so는 그것을 취소하는 것을 잊었습니다. 다른 말로하면, 기본적으로 영어를 설정했고 스웨덴어로 선택했습니다. 여전히 작동하지 않습니다. –

+0

문제는 코드는 한 페이지 만로드됩니다. 드롭 다운 선택 디버거가 그곳에 가지 않을 것입니다. 그런 변화가 없습니다. 명백한 것입니다. 그러나 해결책을 찾지 못했습니다. 알아낼 수 없습니다. –