В данный момент работаю над приложением, которое должно стать универсальным приложением Windows 10. В целом все приятно, НО. Локализация теперь делается по-другому. Нужно создать ResourceLoader и из него брать по строке нужные ресурсы. Но это не очень удобно, потому что по умолчанию вам предлагается создавать элементы в XAML, и используя x:uid их локализовывать. В файле ресурса при этом надо использовать что-то вроде TextView1.Content ну и справа значение. По мне так это не очень удобно, потому что слегка лишает ресурсы семантичности (смысла) + есть уже наработанные ресурсы (при портировании), которые организованы по-другому.
Но из этой ситуации есть простой выход: создаем конвертер.
То есть, в нашей вьюмодели создаем некое проперти, например LS (Localized String), тип которого это класс следующего вида:
Но из этой ситуации есть простой выход: создаем конвертер.
То есть, в нашей вьюмодели создаем некое проперти, например LS (Localized String), тип которого это класс следующего вида:
public class LocalizationHelper : INotifyPropertyChanged {
private string _localizedString;
public string LocalizedString {
get { return _localizedString; }
set {
if ( value != _localizedString ) {
_localizedString = value;
NotifyPropertyChanged( "LocalizedString" );
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged( String propertyName ) {
PropertyChangedEventHandler handler = PropertyChanged;
if ( null != handler ) {
handler( this, new PropertyChangedEventArgs( propertyName ) );
}
}
}
Далее создаем конвертер: public sealed class StringToLocalizedStringConverter : IValueConverter {
public object Convert( object value, Type targetType, object parameter, string language ) {
if ( parameter == null ) {
return "";
}
else {
return App.RsLoader.GetString( ( string ) parameter ); // У меня в APP лежит ResourceLoader
}
}
public object ConvertBack( object value, Type targetType, object parameter, string language ) {
throw new NotImplementedException();
}
}
Ну и в конце концов в XAML вставляем следующее: Text="{Binding LS.LocalizedString, Converter={StaticResource StringToLocalizedStringConverter}, ConverterParameter='СТРОКА_В_РЕСУРСЕ'}" Обратите внимание на то, что в конце применяются одинарные кавычки - с двойными будет ошибка.
В дезайн моде ничего не видно, это один из недостатков данного способа.
P.S. В блоггере неудобно код писать, надо видимо переходить на новую блог платформу. Я часто пробовал Ghost... да и на английском учится писать надо.
В дезайн моде ничего не видно, это один из недостатков данного способа.
P.S. В блоггере неудобно код писать, надо видимо переходить на новую блог платформу. Я часто пробовал Ghost... да и на английском учится писать надо.
Комментариев нет:
Отправить комментарий