乐叶 發表於 2026-3-8 12:37:00

[Maui] 造轮子——前言、本地化

<h1 id="前言">前言</h1>
<p>新的一年开始了,公司提了新的要求:</p>
<ol>
<li>国产化</li>
<li>国际化</li>
</ol>
<p>开发部的应对是:从wpf转换Maui:</p>
<ol>
<li>安卓版也是国产化</li>
<li>国际化就是本地化,弄个多国语言的事情</li>
</ol>
<p>话说华为的鸿蒙,为了国产化,在华为P40手机上运行了Maui的缺省项目,天真的以为鸿蒙支持Maui Android。于是去买了个华为的平板,然后悲剧了。亲测:P40手机的鸿蒙4.2支持,新平板的5.0、6.0不支持。要不要为了这个牛绳去买头牛,学一般华为的那什么javascript的超集typescript的超集,叫什么来着?</p>
<p>谁能推荐个安卓平板?</p>
<p>华为的事情是个庭外话,题内化就是开始新一轮的造轮子。</p>
<p>你说,轮子到处都是,非得自己造?</p>
<p>是的,有毛病: 不相信别人,别人走过的路,自己也要走,除非自己不会走。</p>
<p>废话到此为止。</p>
<h1 id="本地化">本地化</h1>
<p>微软本地化文档,报了个到。</p>
<p><strong>一、准备工作</strong></p>
<ol>
<li>新建项目两个,分别为LunZi和Demo;删除iOS、MacCatalyst相关的东西。(话说微软就不能让我选择一下要支持的操作系统吗?非得让我手动删除?)</li>
<li>LunZi项目新建文件夹Resources,并添加三个资源文件(Resource.resx,Resource.en.resx,Resource.zh-Hans.resx)</li>
<li>修改 Demo 项目的 Windows 的 Package.appxmanifest文件,将</li>
</ol>
<pre><code>&lt;Resources&gt;
    &lt;Resource Language="x-generate"/&gt;
&lt;/Resources&gt;
</code></pre>
<p>替换为</p>
<pre><code>        &lt;Resources&gt;
                &lt;Resource Language="en-US"/&gt;
                &lt;Resource Language="zh-CN"/&gt;
        &lt;/Resources&gt;
</code></pre>
<p>表示本Demo支持中英文。</p>
<p><strong>二、LunZi添加资源</strong></p>
<ol>
<li>双击 Resource.resx文件</li>
<li>单击 +</li>
<li>输入<br>
<img src="https://img2024.cnblogs.com/blog/10915/202603/10915-20260308114703826-235861313.png" alt="image" loading="lazy"></li>
<li>添加后编辑<br>
<img src="https://img2024.cnblogs.com/blog/10915/202603/10915-20260308114850780-1994865278.png" alt="image" loading="lazy"></li>
<li>将资源的属性从internal改为public<br>
如此循环往复,便是添加资源。</li>
</ol>
<p>备注一下:回头弄个程序来添加资源。</p>
<p><strong>三、Demo使用资源</strong></p>
<ol>
<li>添加项目引用,引用LunZi</li>
<li>修改MainPage.xaml<br>
添加命名空间</li>
</ol>
<pre><code>    xmlns:lunzi="clr-namespace:LunZi.Resouces;assembly=LunZi"
</code></pre>
<p>使用资源</p>
<pre><code>      &lt;Label Text="{x:Static lunzi:Resource.Test}"/&gt;
</code></pre>
<p>整个文件变成</p>
<pre><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:lunzi="clr-namespace:LunZi.Resouces;assembly=LunZi"
             x:Class="Demo.MainPage"&gt;
    &lt;VerticalStackLayout&gt;
      &lt;Label Text="{x:Static lunzi:Resource.Test}"/&gt;
    &lt;/VerticalStackLayout&gt;
&lt;/ContentPage&gt;

</code></pre>
<ol start="3">
<li>运行<br>
<img src="https://img2024.cnblogs.com/blog/10915/202603/10915-20260308121229794-777613244.png" alt="image" loading="lazy"><br>
看样子,使用了本地是中国</li>
</ol>
<p><strong>四、中英文动态切换</strong></p>
<ol>
<li>修改页面</li>
</ol>
<pre><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:lunzi="clr-namespace:LunZi.Resouces;assembly=LunZi"
             x:Class="Demo.MainPage"&gt;
    &lt;VerticalStackLayout HorizontalOptions="Center" VerticalOptions="Center" Spacing="10"&gt;
      &lt;Label x:Name="LabelTest"/&gt;
      &lt;HorizontalStackLayout Spacing="10"&gt;
            &lt;Button Text="中文" Clicked="BtnCn_Clicked"/&gt;
            &lt;Button Text="English" Clicked="BtnEn_Clicked"/&gt;
      &lt;/HorizontalStackLayout&gt;
    &lt;/VerticalStackLayout&gt;
&lt;/ContentPage&gt;
</code></pre>
<ol>
<li>修改代码</li>
</ol>
<pre><code>using System.Globalization;

namespace Demo;

public partial class MainPage : ContentPage
{

    public MainPage()
    {
      InitializeComponent();
      this.LabelTest.Text = LunZi.Resouces.Resource.Test;
    }

    private void BtnEn_Clicked(object sender, EventArgs e)
    {
      SetCulture("en-US");
      this.LabelTest.Text = LunZi.Resouces.Resource.Test;
    }
    private void BtnCn_Clicked(object sender, EventArgs e)
    {
      SetCulture("zh-Hans");
      this.LabelTest.Text = LunZi.Resouces.Resource.Test;
    }

    private void SetCulture(string cultureCode)
    {
      var culture = new CultureInfo(cultureCode);
      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;
    }
}

</code></pre>
<ol>
<li>运行<br>
<img src="https://img2024.cnblogs.com/blog/10915/202603/10915-20260308123526109-1669912343.png" alt="image" loading="lazy"><br>
单击 English<br>
<img src="https://img2024.cnblogs.com/blog/10915/202603/10915-20260308123612093-916568580.png" alt="image" loading="lazy"></li>
</ol>
<p>好了,就这样了。</p><br><br>
来源:https://www.cnblogs.com/catzhou/p/19685427
頁: [1]
查看完整版本: [Maui] 造轮子——前言、本地化