2014-04-03 2 views
3

MyAppResources 클래스의 portable-class-library에 현지화를위한 resx-files가 있습니다. 따라서 코드에서 다음과 같이 지역화 된 문자열을 얻을 수 있습니다.axml에서 pcl의 resx-string을 사용 하시겠습니까?

View.FindViewById<Button>(Resource.Id.btnCacheClear).Text = MyAppResources.TextClearCache; 

그러나이 문자열을 이미 axml에 설정하는 방법이 있습니까?

<Button 
    android:id="@+id/btnCacheClear" 
    android:text= ?? /> 

들으 문자열을 사용 톰

답변

0

은/안드로이드 디자이너에서 RESX 파일에서 모든 자원이 순간에 유일하게 가능한 방법입니다 코드에서 그들을 설정, 지원되지 않습니다.

+0

나는 android : text = "@ string/TextClearCache"로 디자이너에서 작업 한 것을 알게되었습니다. 문자열은 PCL에서 가져오고 Designer의 언어에 따라 올바르게 변경됩니다. 그러나 컴파일되지 않습니다 : 오류 "주어진 이름과 일치하는 리소스를 찾을 수 없습니다 ('텍스트'에서 값 '@ 문자열/TextClearCache') – Tom

1

ResourceManager을 통해 PCL 리소스에서 읽는 사용자 지정 특성을 정의하는 것이 가장 깨끗한 방법이라고 생각합니다.

나는 MvvmCross 함께 일하고, 그리고 사용자 정의 언어 바인딩 파서 작업있어 :

public class CustomLanguageBindingParser : MvxBindingParser , IMvxLanguageBindingParser 
{ 
    protected override MvxSerializableBindingDescription ParseBindingDescription() 
    { 
     this.SkipWhitespace(); 

     string resourceName = (string)this.ReadValue(); 

     // Pass the resource name in as the parameter on the StringResourceConverter. 
     return new MvxSerializableBindingDescription 
     { 
      Converter = "StringResource", 
      ConverterParameter = resourceName, 
      Path = null, 
      Mode = MvxBindingMode.OneTime 
     }; 
    } 

    public string DefaultConverterName { get; set; } 

    public string DefaultTextSourceName { get; set; } 
} 

그리고 컨버터 :

public class StringResourceConverter : IMvxValueConverter 
{ 
    private static ResourceManager manager = new ResourceManager(typeof(AppResources)); 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // Ignore value. We are using parameter only. 
     return manager.GetString((string)parameter); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

이 MvxAndroidSetup 클래스에 파서를 등록

protected override void InitializeIoC() 
    { 
     base.InitializeIoC(); 

     Mvx.RegisterType<IMvxLanguageBindingParser, CustomLanguageBindingParser>(); 
    } 

.axml에 네임 스페이스를 정의하십시오. xmlns:local="http://schemas.android.com/apk/res-auto"

그리고 자원을 호출하십시오. 예를 들어 TextView의 경우 : local:MvxLang="Text MyResourceKey"

이것은 MvvmCross 바인딩 시스템에 연결됩니다. 첫 번째 부분 인 "텍스트"는 대상 속성을 결정하고 두 번째 부분은 리소스 키로 구문 분석합니다. 언어 바인딩 파서는 이것을 사용자 지정 변환기와의 바인딩으로 변환하고 변환기 매개 변수로 키를 변환합니다. 변환기는 변환기 매개 변수를 기반으로 문자열 조회를 수행합니다.