ASP.NET Core 3.1 MVC 中的本地化

2024-03-12

我正在尝试将本地化添加到我的 ASP.NET Core 3.1 MVC 项目中,遗憾的是我找不到任何文章或教程来展示如何以简单的方式完成此操作。

每个人都有一些我无法理解的问题。

谁能告诉我一个简单的方法来做到这一点? 好的,我尝试执行syncfusion.com/blogs/post/...,但我遇到了一个问题(options.RequestCultureProviders = new[] { new RouteDataRequestCultureProvider { IndexOfCulture = 1, IndexofUICulture = 1 } };)它说 RequestCultureProviders 不没有 IndexofUICulture......

我已经达到这个水平了:

    @using Microsoft.AspNetCore.Localization
@using Microsoft.Extensions.Localization 
@using System.Resources 
@model Index
@inject IStringLocalizer<Index> localizer 
@inject IHtmlLocalizer<Index> htmlLocalizer
@{
    ViewData["Title"] = "M-POS";
    //Microsoft.AspNetCore.Localization.IRequestCultureFeature requestCultureFeature;
    var requestCulture = CultureInfo.CurrentCulture;
    

}
    <div class="text-center">
        <h1 class="display-4">@localizer["Welcome"]</h1>
        <p>@localizer["Learn"]</p>


        <table class="table culture-table">
            <tr>
                <td style="width:50%;">Culture</td>
                <td>@requestCulture.DisplayName {@requestCulture.Name}</td>
            </tr>
            <tr>
                <td>UI Culture</td>
                <td>@requestCulture.Name</td>
            </tr>
            <tr>
                <td>UICulture Parent</td>
                <td>@requestCulture.Parent</td>
            </tr>
            <tr>
                <td>Date</td>
                <td>@DateTime.Now.ToLongDateString()</td>
            </tr>
            <tr>
                <td>Currency</td>
                <td>
                    @(12345.00.ToString("c"))
                </td>
            </tr>
            <tr>
                <td>Currency</td>
                <td>
                    @(12345.00.ToString("c"))
                </td>
            </tr>
            <tr>
                <td>Number</td>
                <td>
                    @(123.45m.ToString("F2"))
                </td>
            </tr>
        </table>
    </div>

然后我有一个名为 Resources 的文件夹,该文件夹内有一个名为 Resource.resx 和 Resource.en-US.resx 的文件 StartUp.cs 文件是这样的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.EntityFrameworkCore;
using POS3.Data;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Models;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.AspNetCore.Mvc.Razor;
using System.Globalization;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.Options;
using Microsoft.AspNetCore.Localization.Routing;
using Microsoft.AspNetCore.Routing;
using Microsoft.CodeAnalysis.Options;

using Microsoft.AspNetCore.Http;
using System.Xml.Linq;

namespace POS3
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
              options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddDefaultIdentity<UserAccount>()
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>();

            services.AddRazorPages();
            //localization startup

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddLocalization(options => options.ResourcesPath = "Resources");
            services.AddMvc().AddViewLocalization();
            services.AddMvc()
            .AddViewLocalization(options => options.ResourcesPath = "Resources")
            .AddDataAnnotationsLocalization();

            

            services.Configure<RequestLocalizationOptions>(options =>
            {
                var supportedCultures = new[]
                 {
                    
                    new CultureInfo("ar-SA"),
                    new CultureInfo("en-US")
                };
                options.DefaultRequestCulture = new RequestCulture("en-US");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;
            });

            //services.Configure<RequestLocalizationOptions>(options =>
            //{
            //    var supportedCultures = new[]
            //    {
            //    new CultureInfo("en-US"),
            //    new CultureInfo("ar-SA"),
            //    new CultureInfo("es"),
            //};

            //    options.DefaultRequestCulture = new RequestCulture("en-US");
            //    options.SupportedCultures = supportedCultures;
            //    options.SupportedCultures = supportedCultures;
            //    //options.RequestCultureProviders = new[] { new RouteDataRequestCultureProvider { IndexOfCulture = 1, IndexOfCulture = 1 } };
            //});




            services.AddMvcCore();
            services.AddAuthorization(options => {
                options.AddPolicy("readonlypolicy",
                    builder => builder.RequireRole("Admin", "Manager", "Cashier", "User", "Super User"));
                options.AddPolicy("writepolicy",
                    builder => builder.RequireRole("Admin", "Manager", "Super User"));
            });

            

              


            services.Configure<IdentityOptions>(options =>
            {
                // Default Password settings.
                options.Password.RequireDigit = false;
                options.Password.RequiredLength = 6;
                options.Password.RequiredUniqueChars = 1;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase = false;
                options.Password.RequireLowercase = false;
            });

            services.AddControllersWithViews();
            services.AddRazorPages();
            services.AddControllers(config =>
            {
                
                var policy = new AuthorizationPolicyBuilder()
                                 .RequireAuthenticatedUser()
                                 .Build();
                config.Filters.Add(new AuthorizeFilter(policy));
            });

            services.Configure<PasswordHasherOptions>(options =>
            options.CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2
            );
            


            //services.AddSingleton<IEmailSender, EmailSender>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();

            //configer localization
            


            var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
            app.UseRequestLocalization(localizationOptions);

            app.UseAuthentication();
            app.UseAuthorization();           
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                
                endpoints.MapRazorPages();
            });

           
        }
    }
}

现在我看不到 resources.en-US.resx 文件值,我想我错过了一些东西。


Q1:这个问题(options.RequestCultureProviders = new[] { new RouteDataRequestCultureProvider { IndexOfCulture = 1, IndexofUICulture = 1 } };)它说RequestCultureProviders没有IndexofUICulture......

下载样品 https://github.com/RaguMP/Samples你会找到RouteDataRequestCultureProvider.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;

namespace LocalizationSampleSingleResxFile
{
    public class RouteDataRequestCultureProvider : RequestCultureProvider
    {
        public int IndexOfCulture;
        public int IndexofUICulture;

        public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
        {
            if (httpContext == null)
                throw new ArgumentNullException(nameof(httpContext));

            string culture = null;
            string uiCulture = null;

            culture = uiCulture = httpContext.Request.Path.Value.Split('/')[IndexOfCulture]?.ToString();

            var providerResultCulture = new ProviderCultureResult(culture, uiCulture);

            return Task.FromResult(providerResultCulture);
        }
    }
}

Q2:更改资源名称

You already named en-US, so your resource file name must format with en-US.
enter image description here
Index.cshtml:
enter image description here

Screenshots of test:
enter image description here


ASP.NET Core 中的全球化和本地化 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1
将本地化添加到 ASP.NET Core 应用程序 https://andrewlock.net/adding-localisation-to-an-asp-net-core-application/
如何在 ASP.NET Core Web API 中使用本地化 https://www.syncfusion.com/blogs/post/how-to-use-localization-in-an-asp-net-core-web-api.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 3.1 MVC 中的本地化 的相关文章

  • 如何在 VB.NET 中单击按钮切换表单语言?

    我想创建本地化应用程序并想要实现语言切换器 例如特殊按钮 我使用 Visual Studio 2010 Express VB NET 我创建了带有一个标签和一个按钮的简单测试应用程序 我将表单的属性 Localized 设置为 True 并
  • 在 Blazor/Razor 中单击按钮时调用函数 - ASP.NET Core 3

    我刚刚开始学习 ASP NET Core 并且正在关注 Microsoft 的 YouTube 教程 并且当我尝试在单击按钮时调用该函数时 它不起作用 代码如下 HTML 中的按钮
  • 如何检测 JSF 应用程序中的客户端区域设置?

    我该如何使用ServletRequest getLocale 在 JSF 应用程序中 当Servlet我的代码中不存在并且由 JSF 实现提供 我正在尝试使用ServletContextListener 但是有可能达到ServletRequ
  • WinForms 本地化。该语言不反映默认的 resx 文件

    我正在尝试在 winform 应用程序中使用本地化 但有几个问题 我本想问最复杂的问题 但现在我遇到了一个基本问题 我已经构建了一个带有表单 标签和菜单条的基本 winform 我已将表单本地化设置为 true 并将标签文本设置为三种不同的
  • 在 xcode 中,有没有办法验证所有 NSLocalizedStrings 的密钥?

    除了运行其中包含 NSLocalizedString 的每个代码路径之外 是否有一种方法可以验证所有 NSLocalizedString 是否都具有实际存在于所有捆绑包的所有 Localized strings 文件中的密钥 例如 一个键中
  • ASP.NET MVC 6 中的属性路由正则表达式约束错误

    我添加以下路由属性 HttpGet Route add Route id int inn regex 0 9 incBalance range 0 1 dateSet datetime dateNext datetime public IA
  • 本地化 ASP.NET 资源的滑动过期

    假设我们有 2 个站点 myDomain AU 和 myDomain RU 具有相同的代码和本地化资源文件 resx 和 ru resx 我们预计大多数英语用户将使用 AU 网站 大多数俄语用户将使用 RU 网站 但是 如果 AU 域的某些
  • 如何在Asp.Net Core中自定义开发者异常页面?

    这常见于ConfigureStartup cs 文件的方法具有如下所示的代码 if env IsDevelopment app UseDeveloperExceptionPage new DeveloperExceptionPageOpti
  • 无论 DataAnnotations 属性如何,ModelState.IsValid 始终为 true

    我在 Visual Studio 2015 中使用新的 MVC6 框架 突然我所有的数据注释都停止工作 所有这些 无需我更改代码 public sealed class RegisterUser Required ErrorMessage
  • .Net Core 数据注释 - 使用共享资源进行本地化

    我想使用共享的 resx 文件来指定所有可翻译的字符串 既是为了翻译方便 更重要的是为了避免出现与 DRY 原则冲突的数十个单独的 resx 文件 我让它与 IStringLocalizer 一起用于控制器和视图 但我只是不知道如何为模型的
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • 从类型获取 DbSet

    我正在尝试为 MVC 6 应用程序制作通用表查看器 编辑器 我目前使用 Context GetEntityTypes 返回给我一份表格列表 现在我需要获取特定类型的数据 我当前的实现是 On my context public IQuery
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 在 MVC 控制器内打开 websocket 通道

    有没有人有在 MVC 控制器内打开 websocket 连接的良好经验 技术栈 ASPNET Core 1 0 RC1 MVC dnx46 System Net WebSockets 为什么使用 MVC 而不是中间件 为了整体一致性 路由
  • iPhone en_* 子语言本地化

    我想在我的 iphone 应用程序中将字符串本地化为 en GB 和其他 en 子语言 但 XCode 和 iphone 拒绝让这种情况发生 我已经为 en GB 和 en US 创建了 Localized strings 的本地化 我尝试
  • 让 NUMBERFMT 填充默认值的简单方法?

    我正在使用 Windows API获取数字格式Ex http msdn microsoft com en us library dd318113 28v vs 85 29 aspx使用当前用户的适当本地化选项来格式化一些数字以进行显示 例如
  • 如何用日语创建 ggplot2 标题?

    我正在准备日语演示文稿 并希望图像的标题和图例名称为日语 我可以让文本在 RStudio 中渲染得很好 但是当渲染图像时 日语字符仅显示为方框 x 10 10 y x x df data frame x y ggplot df aes x
  • 如何在 Laravel 视图中找到当前语言?

    我正在使用 Laravel Lang 类来本地化我的网络应用程序 我已将两种语言添加到语言数组中application config application php 这会将用于本地化的默认语言更改为 URI 第一部分指示的任何内容 例如 b
  • IOptions 不包含 ASP.NET 5 Beta 8 中的定义“选项”

    Problem 我在将 beta7 应用程序升级到 beta8 时遇到问题 我最初有超过 50 个错误 但现在基本上只剩下两个我无法解决的持续错误 一种是带有选项 选项缺失错误 这是错误 错误 CS1061 IOptions 不包含 Opt
  • 有没有办法在.NET Core FilterAttribute 中获取请求正文?

    我的请求示例 http localhost 8065 api note POST content type application json request body id 1234 title test status draft 响应应该

随机推荐

  • Python机械化表单提交不起作用

    我正在尝试编写一个简单的机器人 它可以在页面上登录我的帐户 然后评论其他用户的图像 但是我无法正确获取提交工作的评论表单 评论表单如下所示
  • 我在 DELETE 语句中遇到 SQLite 语法错误

    我有一个非常奇怪的 sqlite 语法错误 const char statement DELETE FROM quotes t1 WHERE t1 id 127 int returnCode sqlite3 exec database st
  • 如何根据特定键获取 MongoDB 中的最大值和最小值?

    我想获得 emp 的最大值和最小值salary基于currency 每个员工的薪资范围基于currency此外 响应中的所有详细信息都应该是唯一的 虽然我使用聚合函数 min 和 max 但它获取工资金额的最大值和最小值 但我需要根据cur
  • JSDoc - 如何记录原型方法

    我一直在尝试使用 JSDoc 记录以下代码 module person A human being class param string name function Person name this name name Person pro
  • 我不明白以下指针变量声明在 c 中的含义

    char p 15 char p int a int pt char int pt char 有人帮忙吗 基本规则 从标识符开始 可以时右读 必须时左读 从标识符 开始 说出来 然后是 是 将您的 左脚 放在其左侧一个字符 Read rig
  • 从 Visual Studio Team Services 部署到本地 IIS - VPN 连接

    最近 我们开始在线使用 Visual Studio Team Services VSTS 作为源代码控制和 DevOps 持续集成 我们开始构建 VisualStudio com 我们需要远程构建才能将包 IIS 站点 部署到我们的本地服务
  • Eclipse 每次创建项目来运行单个文件?

    我是一个使用 eclipse CDT 的初学者 通常在 DEVc 或其他轻量级 IDE 中 我们可以直接从桌面打开和编辑单个 cpp 文件并运行它 另一方面 我在 eclipse CDT 中找不到这个简单的功能 每次我需要运行一个 cpp
  • 如何在executeCommands()中查找VSCode命令的参数

    我想写一个 vscode 扩展并使用vscode commands executeCommands 但我不知道我要使用的命令采用哪些参数 例如 当我想使用 actions find 命令 如何找出该特定 API 接受哪些参数 我认为没有综合
  • CSS:视图高度 (vh) 和视图宽度 (vw) 单位是否得到广泛支持?

    我使用 100vh 将 div 与行高垂直居中 这个网站 http caniuse com viewport unitsvh 和 vw 的支持率约为 70 这是一个公平的评估吗 您会建议在构建网站时使用视口单位吗 我知道这有点主观 我只是在
  • 使用没有组织或文件夹的服务帐户创建 GCP 和 Firebase 项目

    我需要使用 Google Cloud Platform GCP 服务帐户通过资源管理器 REST API 以编程方式创建项目 我想以无头方式创建 Firebase 项目 我们当前的解决方案涉及模仿用户和浏览器来实现此目的 因为在没有组织 或
  • HMAC 解决方案中的密钥使用什么(最佳/良好实践)?

    我正在根据另一家公司提供给我的规范实施类似 HMAC 的解决方案 散列参数和密钥的使用不是问题 密钥本身的分发也不是问题 因为我们联系密切且地理位置接近 但是 实际密钥的最佳实践是什么value 由于两家公司正在合作 看起来 c9ac56d
  • 在 Android 谷歌地图 v2 上保存标记

    我正在使用 Android Google 地图 v2 API 并将其设置为在长按时添加标记 我需要一种方法来保存这些标记并在应用程序再次恢复时重新加载它们 做到这一点的最佳方法是什么 请帮忙 目前我添加标记如下 map addMarker
  • 在shared_ptr的自定义删除器中检查nullptr是否有意义?

    我见过一些使用的代码std shared ptr使用自定义删除器来测试 nullptr 的参数 例如 MyClass其中有一个close 方法并用一些构造CreateMyClass auto pMyClass std shared ptr
  • 如何用背景颜色填充整个div

    我试图获取背景颜色来填充 bootstrap 中子 div 中的整个 div 但我完全陷入困境 我希望右侧部分为黄色 但它仅突出显示 div 中的文本 这是一个fiddle https jsfiddle net hcgriggs yjcrc
  • 如何在不创建 new Form() 的情况下从 Form2 访问 Form1 函数;

    我是 C 新手 正如我现在面临的问题 public void snz btn Click object sender EventArgs e this Close beside than this Form1 fs new Form1 fs
  • 如何在Python中生成唯一ID? [复制]

    这个问题在这里已经有答案了 我需要根据随机值生成一个唯一的 ID Perhaps uuid uuid4 可能会完成这项工作 看uuid http docs python org library uuid html了解更多信息
  • 如何将来自其他分叉的未合并的上游拉取请求应用到我的分叉中?

    我在 GitHub 上有一个分叉的项目有一个新的拉取请求 我想将其拉入我的分叉中 但作者尚未拉入 有没有一种简单的方法可以将其他分叉的拉取请求应用到我的分叉中 我还缺少其他东西吗 更新 通过网页 您还可以通过 github 网页执行此操作
  • Python Pandas:根据时间范围删除时间序列的行

    我有以下时间序列 start pd to datetime 2016 1 1 end pd to datetime 2016 1 15 rng pd date range start end freq 2h df pd DataFrame
  • 单一职责和混合

    鉴于Mixins http en wikipedia org wiki Mixin通常会在类中引入新的行为 这通常意味着一个类将具有多个行为 如果一个类具有单一职责 则这被定义为该类只有一个变更原因 所以 我可以从两个不同的角度来看待这个问
  • ASP.NET Core 3.1 MVC 中的本地化

    我正在尝试将本地化添加到我的 ASP NET Core 3 1 MVC 项目中 遗憾的是我找不到任何文章或教程来展示如何以简单的方式完成此操作 每个人都有一些我无法理解的问题 谁能告诉我一个简单的方法来做到这一点 好的 我尝试执行syncf