微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 UWP 原生 C# 应用程序中重用 Xamarin.forms resx 文件

如何解决如何在 UWP 原生 C# 应用程序中重用 Xamarin.forms resx 文件

我有适用于 android 和 ios 的 xamarin.forms 应用程序,我也想以 UWP 为目标,但我不想使用 Xamarin.Forms 生成的 UWP,而我将重用 XF 共享库中的 viewmodel 和资源并在本机设计 UWP。

>

共享项目中有作为翻译文件的 resx 文件,我在 TranslatorExtension 的帮助下在 xaml 中使用,如下所示 article

[contentproperty("Text")]
public class TranslateExtension : IMarkupExtension
{
    const string ResourceId = "LocalizationSample.Resources.AppResources";

    static readonly Lazy resmgr = 
        new Lazy(() => 
            new ResourceManager(ResourceId,typeof(TranslateExtension)
                    .GetTypeInfo().Assembly));

    public string Text { get; set; }

    public object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Text == null)
            return "";

        var ci = CrossMultilingual.Current.CurrentCultureInfo;
        var translation = resmgr.Value.GetString(Text,ci);

        if (translation == null)
        {
            translation = Text; // returns the key,which GETS disPLAYED TO THE USER
        }
        return translation;
    }
}

在 ContentPage 中引用 Xaml 代码只需 <Label Text="{i18n:Translate HelloWorld}"

这工作得很好,但我不知道如何在 UWP xaml 页面中使用 translationextension。 它是否仅用于 Xamarin.Forms 应用程序。 UWP 有没有类似的东西。 那么基本上如何在不为 UWP 复制的情况下重用这些 resx 文件

PS,如果我必须使用 Xamarin.forms nuget 和命名空间才能使用 IMarkupExtension,那对我来说仍然没问题。

解决方法

这工作得很好,但我不知道如何在 UWP xaml 页面中使用 translationextension。它是否仅用于 Xamarin.Forms 应用程序。 UWP 有没有类似的东西。那么基本上如何在不为 UWP 复制的情况下重用这些 resx 文件?

恐怕你不能在 UWP Xaml 中使用上面的 TranslateExtension,因为上面的 IMarkupExtension 在特定的表单中,你不能在 UWP Xaml 中使用它。

要进行 UWP 本地化,请参阅此 document 并使用 x:Uid 指令将标记中的控件或其他元素与字符串资源标识符相关联。

XAML

<TextBlock x:Uid="Greeting"/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。