首页 > 其他分享 >MAUI Blazor学习8-支持多语言

MAUI Blazor学习8-支持多语言

时间:2023-05-26 21:55:05浏览次数:38  
标签:语言 AppRes 字符串 MAUI Blazor com

MAUI Blazor学习8-支持多语言

 

MAUI Blazor系列目录

  1. MAUI Blazor学习1-移动客户端Shell布局 - SunnyTrudeau - 博客园 (cnblogs.com)
  2. MAUI Blazor学习2-创建移动客户端Razor页面 - SunnyTrudeau - 博客园 (cnblogs.com)
  3. MAUI Blazor学习3-绘制ECharts图表 - SunnyTrudeau - 博客园 (cnblogs.com)
  4. MAUI Blazor学习4-绘制BootstrapBlazor.Chart图表 - SunnyTrudeau - 博客园 (cnblogs.com)
  5. MAUI Blazor学习5-BLE低功耗蓝牙 - SunnyTrudeau - 博客园 (cnblogs.com)
  6. MAUI Blazor学习6-扫描二维码 - SunnyTrudeau - 博客园 (cnblogs.com)
  7. MAUI Blazor学习7-实现登录跳转页面 - SunnyTrudeau - 博客园 (cnblogs.com)

 

 

微软官网有Blazor项目多语言方案的详细介绍。

https://learn.microsoft.com/zh-cn/aspnet/core/blazor/globalization-localization?view=aspnetcore-7.0&pivots=server

《ASP.NET Core Blazor 全球化和本地化 _ Microsoft Learn.html》

 

试验发现,MAUI Blazor不支持注册服务builder.Services.AddLocalization,也不支持使用中间件app.UseRequestLocalization,所以不能使用Blazor Server的IStringLocalizer多语言方案。但是,MAUI Blazor可以使用Windows软件传统的设置语言方案:直接修改CultureInfo.CurrentCulture。

 

创建语言帮助类

LangHelper主要功能包括读写语言配置,设置软件当前的语言。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Data\LangHelper.cs

 

/// <summary>
/// 语言帮助类
/// </summary>
public static class LangHelper
{
    /// <summary>
    /// 软件当前的语言
    /// </summary>
    public static string CurrentLang
    {
        get => Preferences.Get(nameof(CurrentLang), "en-US");
        set => Preferences.Set(nameof(CurrentLang), value);
    }

    /// <summary>
    /// 软件支持的语言
    /// </summary>
    public static string[] SupportLangs = new string[] { "en-US", "zh-CN", };

    /// <summary>
    /// 设置软件语言
    /// </summary>
    public static void SetCurrentLang(string lang)
    {
        var cultureInfo = new CultureInfo(lang);

        //影响razor页面字符串
        CultureInfo.CurrentCulture = cultureInfo;

        //影响类库字符串
        CultureInfo.CurrentUICulture = cultureInfo;

        System.Diagnostics.Debug.WriteLine($"{DateTimeOffset.Now}, 设置软件语言{lang}");
    }
}

 

 

增加语言字符串文件

在项目的Resources目录下再新建Langs目录,新建默认语言字符串文件AppRes.resx,文件名随意,但是文件名不能含有语言类型。添加几个英文字符串。访问修饰符选择Public,它会自动生成每个语言字符串的静态变量。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Resources\Langs\AppRes.resx

然后新建中文语言字符串文件AppRes.zh-CN.resx,文件名跟默认语言字符串文件相比,多了中间的zh-CN语言类型。访问修饰符选择无代码生成。

 

使用语言字符串

在_Imports.razor添加对语言字符串命名空间的全局引用

D:\Software\gitee\mauiblazorapp\MaBlaApp\_Imports.razor

@using Resources.Langs

 

在项目中可以直接@AppRes.xxx的方式使用语言字符串。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Shared\NavMenu.razor

                <span class="navbarApp-linkLabel">@AppRes.Home</span>

                <span class="navbarApp-linkLabel">@AppRes.Chart</span>

                <span class="navbarApp-linkLabel">@AppRes.Todo</span>

 

增加选择语言UI

在主页增加一个菜单,可以打开选择语言页面

D:\Software\gitee\mauiblazorapp\MaBlaApp\Pages\Index.razor

<li class="list-group-item">

        <a href="selectlang" class="btn btn-primary btn-sm">@AppRes.SelectLang</a>

    </li>

 

增加选择语言页面,显示当前CurrentCulture,通过select组件选择语言后,保存到Preferences

D:\Software\gitee\mauiblazorapp\MaBlaApp\Pages\SelectLang.razor

 

@page "/selectlang"
@using System.Globalization

<h3>设置语言(重启APP生效)</h3>

<ul class="list-group">
    <li class="list-group-item d-flex justify-content-between mb-1">
        <strong>CurrentCulture</strong>
        <small>@CultureInfo.CurrentCulture</small>
    </li>
    <li class="list-group-item d-flex justify-content-between mb-1">
        <strong>CurrentUICulture</strong>
        <small>@CultureInfo.CurrentUICulture</small>
    </li>

    <li class="list-group-item d-flex justify-content-between mb-1">
        <strong class="align-self-center">@AppRes.SelectLang</strong>
        <select class="form-control" style="width: 50%;" @bind="LangHelper.CurrentLang">
            @foreach (var item in LangHelper.SupportLangs)
            {
                <option value=@item>@item</option>
            }
        </select>
    </li>
</ul>

 

软件启动时设置语言

在MauiProgram的CreateMauiApp()函数最后面设置软件的当前语言。在初始化阶段其他位置设置语言可能也行,没试。

D:\Software\gitee\mauiblazorapp\MaBlaApp\MauiProgram.cs

//设置软件语言

        LangHelper.SetCurrentLang(LangHelper.CurrentLang);

 

        return builder.Build();

 

测试选择语言

首次运行导航栏菜单是英文的语言字符串。

选择中文语言后,重启软件,导航栏菜单引用语言字符串的文本,显示为中文了。

 

问题

目前这个方案改变语言需要重启软件。在运行时改变语言,页面字符串并不会改变。如果需要运行时动态切换语言字符串,可以参考这个文章,使用I18nText方案。

MAUI 第四天 使用MASA Blazor 中英文切换_为风而战的博客-CSDN博客

 

DEMO代码地址:https://gitee.com/woodsun/mauiblazorapp

 

标签:语言,AppRes,字符串,MAUI,Blazor,com
From: https://www.cnblogs.com/sunnytrudeau/p/17435904.html

相关文章

  • C语言程序设计-谭浩强(第五版)
    第1章程序设计和C语言1.1什么是计算机程序1.2什么是计算机语言1.3C语言的发展及其特点1.4最简单的C语言程序1.4.1最简单的C语言程序举例1.4.2C语言程序的结构1.5运行C程序的步骤与方法1.6程序设计的任务第2章算法——程序的灵魂2.1程序=算法+数据结构2.2什么是算法......
  • C语言函数大全-- y 开头的函数
    (C语言函数大全)y开头的函数1.yperror1.1函数说明函数声明函数功能voidyperror(char*msg);在UNIX和Linux系统中用于将NIS(NetworkInformationService)错误代码转换为相应的错误信息参数:msg:指向一个字符数组的指针,表示附加的消息yperror()函......
  • C语言学习日志07
    现在就是有个疑惑,不知道C语言学习完之后还要不要学习一些衔接的东西还是直接学习python,因为我本身是一个带专哥们,专升本需求python占了60分,现在大一,感觉学习完C语言后就得马不停蹄的学习python了。--------------------------------------------------------------------------然后......
  • Thread Exercises C语言线程
    1/4Assignment4:ThreadsDue11Junby23:59Points10Availableuntil15Junat23:59Assignment4-ThreadExercisesDuedate11:59pm-SundayWeek13.Thisassignmentisdesignedtotestyourunderstandingofthreads,mutexesandsignalling.Download......
  • 全国计算机等级考试二级C++语言 程序设计考试大纲
    一、C++语言概述1.了解C++语言的基本符号。2.了解C++语言的词汇(关键字、标识符、常量、运算符、标点符号等)。3.掌握C++程序的基本框架。4.能够使用VisualC++2010学习版集成开发环境编辑、编译、运行与调试程序。二、数据类型、表达式和基本运算1.掌握C++数据类型(基本类型,指针类型)及其定义......
  • MASM汇编语言知识
    遇到的坑 注意在写$时,一定要加上‘’否则会爆constantexpected的错误,同时也会附带一些其他神奇的错误 MOVAX,BX与MOVAX,[BX]的区别是什么?前者是将BX中保存的值直接给AX后者是通过BX中保存的值寻址后将找的地址中的内容给AX那么也就能够理解MOV......
  • 全国计算机等级考试二级C语言程序设计考试大纲
    一、C语言程序的结构1.程序的构成,main函数和其他函数。2.头文件,数据说明,函数的开始和结束标志以及程序中的注释。3.源程序的书写格式。4.C语言的风格。二、数据类型及其运算1.C的数据类型(基本类型,构造类型,指针类型,无值类型)及其定义方法。2.C运算符的种类、运算优先级和结合性......
  • MAUI Android 关联文件类型
    实现效果打开某个文件,后缀是自己想要的类型,在弹出的窗口(用其它应用打开)的列表中显示自己的应用图标点击后可以获得文件信息以便于后续的操作实现步骤以注册.bin后缀为例,新建一个MAUI项目调整启动模式修改Platforms\Android\MainActivity.cs[Activity(Theme="@style......
  • Go 语言 - 自定义 log
    Go语言-自定义logCode/go/go_log_demovia......
  • JAVA语言springboot框架实现的求职招聘管理系统
    技术架构技术框架:SpringBoot+FreeMarker+JPA+MySQL5.7运行环境:jdk8+IntelliJIDEA+maven3+宝塔面板宝塔部署教程回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件。宝塔新建一个数据库,导入数据库文件......