簡體   English   中英

在 UWP 中的 XAML UI 中本地化字符串

[英]Localize strings in XAML UI in UWP

我的 UWP 應用程序的Resources.resw文件中有一個名為info_278的資源條目。 我有 3 個場景需要使用此資源,但看起來我需要復制它以適應不同的場景。 場景如下。

  1. 代碼中的錯誤消息內容

    var displayErrorOnPopup = ResourceHandler.Get("info_278");

  2. 來自 XAML 的 TextBlock Text 屬性(看起來像info_278.Text需要的新條目)

    <TextBlock x:Uid="info_278" Margin="10,0,0,0" />

  3. XAML 的按鈕內容屬性(看起來像info_278.Content需要的新條目)

    <Button x:Uid="info_278" Margin="10,0,0,0" />

如何在不復制.resw文件中的資源的情況下繼續操作?


在此處輸入圖像描述

避免重復的唯一方法是使用ResourceLoader在代碼隱藏中設置字符串值。 因為您可以直接訪問目標控件的特定屬性。 像這樣:

var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
this.TextBlock.Text = resourceLoader.GetString("info_278");

如果不打算在后面的代碼中進行,那我不得不說沒有辦法避免資源字符串的重復。 您應該為不同的 XAML 方案添加info_278.Textinfo_278.Content

您可以創建一個標記擴展。 我在 WinUI 3 中使用過它,但也應該在 UWP 中工作。

using Microsoft.UI.Xaml.Markup;
using Windows.ApplicationModel.Resources;

namespace MyApp;

[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class StringResourceExtension : MarkupExtension
{
    private static readonly ResourceLoader _resourceLoader = new();

    public StringResourceExtension() { }

    public string Key { get; set; } = "";

    protected override object ProvideValue()
    {
        return _resourceLoader.GetString(Key);
    }
}

然后在 XAML 中:

...
local="using:MyApp"
...

<TextBlock Text="{local:StringResource Key=info_278}" />
<Button Content="{local:StringResource Key=info_278}" />

ButtonContent可以是TextBlock

<Button>
  <TextBlock x:Uid="MyTextId" Style="{StaticResource MyTextBlockStyle}" />
</Button>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM