Локализация для метки StringFormat в Xamarin.Forms - PullRequest
0 голосов
/ 12 июня 2018

В формах xamarin я могу локализовать текст в метке, например:
<Label Text="{x:Static resources:AppResources.Text}"/>

С пространством имен для ресурсов:
<ContentView ... xmlns:resources="clr-namespace:ProjectName.Resources;assembly=ProjectName">

Я также могупривязать какое-либо значение и добавить строковый формат к метке:
<Label Text="{Binding Value, StringFormat='The value is: {0}' }"/>

Проблема в том, что текст Значение: не локализовано.

Кто я могу сделать оба, связать значение и локализовать StringFormat?

1 Ответ

0 голосов
/ 12 июня 2018

Я нашел ответ в Локализация XAML

Мне пришлось добавить текст Значение: {0} в файл ресурсов.
Iнеобходимо добавить IMarkupExtension для перевода.Я добавил класс в то же пространство имен, что и файл ресурсов.

[ContentProperty("Text")]
public class TranslateExtension : IMarkupExtension
{
    private readonly CultureInfo _ci;

    static readonly Lazy<ResourceManager> ResMgr = new Lazy<ResourceManager>(
        () => new ResourceManager(typeof(AppResources).FullName, typeof(TranslateExtension).GetTypeInfo().Assembly));

    public string Text { get; set; }

    public TranslateExtension()
    {
        if (Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Android)
        {
            _ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
        }
    }

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

        return ResMgr.Value.GetString(Text, _ci) ?? Text;
    }
}

и использую его следующим образом:

<Label Text="{Binding Value, StringFormat={resources:Translate LabelTextTheValueIs}}" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...