Skip to content

I18N 国际化 ​

想让插件显示不同语言,可以像普通 WinUI 项目一样使用 .resw 文件。工具会帮你生成读取文字的代码。

准备语言文件 ​

先在 Tools.Config.props 中把 AutoGenerateI18N 设为 true,然后按语言创建文件夹:

text
Strings/
  en-us/
    Resources.resw
  zh-cn/
    Resources.resw

在两个 Resources.resw 中都添加 Download 这个键,分别填写对应语言的文字。键名会用来生成 C# 属性,所以尽量使用 Download 这样的合法标识符。

在代码中读取文字 ​

构建一次项目后,就可以使用 {程序集名称}.I18n 下的帮助类了。下面三种写法都能读取 Download:

csharp
using ShadowExample.Plugin.Emoji.I18n;

string first = ResourcesHelper.GetString(ResourceKey.Download);
string second = ResourcesHelper.GetString("Download");
string third = I18N.Download;

通常直接用 I18N.Download 最方便。如果键名是运行时才知道的字符串,就用 ResourcesHelper.GetString(...)。

在 XAML 中使用 ​

引入生成的命名空间,再用 Locale 读取文字:

xml
<UserControl
    x:Class="ShadowExample.Plugin.Emoji.Controls.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i18n="using:ShadowExample.Plugin.Emoji.I18n">
    <TextBlock Text="{i18n:Locale Key=Download}" />
</UserControl>

这里的命名空间跟着程序集名称走。如果你改了程序集名称,也要一起修改 using 和 XAML 中的引用。

Locale 会在加载 XAML 时读取文字。如果应用支持运行中切换语言,需要自己刷新已经显示的内容。

打包时留意 ​

外部插件会从自己的资源文件里读取文字,所以先加载插件,再使用这些帮助类。打包时保留生成的 PRI 和资源文件。

SDK 和标有 [MainPlugin(BuiltIn = true)] 的内置插件会从主程序资源中读取文字,确保资源已经随主程序一起部署即可。