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 바인딩 시스템에 연결됩니다. 첫 번째 부분 인 "텍스트"는 대상 속성을 결정하고 두 번째 부분은 리소스 키로 구문 분석합니다. 언어 바인딩 파서는 이것을 사용자 지정 변환기와의 바인딩으로 변환하고 변환기 매개 변수로 키를 변환합니다. 변환기는 변환기 매개 변수를 기반으로 문자열 조회를 수행합니다.
나는 android : text = "@ string/TextClearCache"로 디자이너에서 작업 한 것을 알게되었습니다. 문자열은 PCL에서 가져오고 Designer의 언어에 따라 올바르게 변경됩니다. 그러나 컴파일되지 않습니다 : 오류 "주어진 이름과 일치하는 리소스를 찾을 수 없습니다 ('텍스트'에서 값 '@ 문자열/TextClearCache') – Tom