gpt4 book ai didi

Xamarin - 使用绑定(bind)和翻译

转载 作者:行者123 更新时间:2023-12-02 12:19:22 24 4
gpt4 key购买 nike

我尝试创建类似的东西:

<Label Text="{Binding oResult.hi, StringFormat='Hallo: {0}'}" />

而且效果很好!但我希望字符串“Hallo”应该从 resx 文件中取出。

像这样:

<Entry Placeholder="{i18n:TranslateExtension Text=password}" IsPassword="true" />

我还将两者结合起来。

谢谢!

最佳答案

您可以通过简单的标记扩展和 resx 文件中的字符串来实现此目的。

Xaml 扩展:

using System;
using Xamarin.Forms.Xaml;
using Xamarin.Forms;
using System.Resources;

namespace i18n
{
[ContentProperty("Key")]
public class TranslateExtension : IMarkupExtension
{
public string Key { get; set; }
static ResourceManager ResourceManagerInstance;

#region IMarkupExtension implementation

public static void Init(ResourceManager r){
ResourceManagerInstance = r;
}

public object ProvideValue(IServiceProvider serviceProvider)
{
if (ResourceManagerInstance == null)
{
throw new InvalidOperationException("Call TranslateExtension.Init(ResourceManager) in your App.cs");
}
return ResourceManagerInstance.GetString(this.Key);
}

#endregion
}
}

示例 App.cs:

using Xamarin.Forms;
using i18n;

namespace ResourceLocalizationMarkup
{
public class App : Application
{
public App()
{
TranslateExtension.Init(Localization.Strings.ResourceManager);
MainPage = new NavigationPage(new MyPage());
}
}
}

Xaml 示例:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:i18n="clr-namespace:i18n"
x:Class="ResourceLocalizationMarkup.MyPage">

<ContentPage.Content>
<StackLayout Orientation="Vertical">
<Label Text="{i18n:TranslateExtension hello_world}"/>
<Label Text="{Binding Name, StringFormat={i18n:TranslateExtension thanks_user}}"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>

关于Xamarin - 使用绑定(bind)和翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com