Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Asp.Net内核的Razor类库中使用本地化_Razor_Asp.net Core_Asp.net Core Localization - Fatal编程技术网

如何在Asp.Net内核的Razor类库中使用本地化

如何在Asp.Net内核的Razor类库中使用本地化,razor,asp.net-core,asp.net-core-localization,Razor,Asp.net Core,Asp.net Core Localization,我已尝试在以下项目结构中使用Asp.Net Core创建Razor类库: 在我的web应用程序中,我在Startup类中使用了这些本地化设置: services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1) .AddViewLocalization( LanguageViewLocationExpanderFor

我已尝试在以下项目结构中使用Asp.Net Core创建Razor类库:

在我的web应用程序中,我在
Startup
类中使用了这些本地化设置:

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
                    .AddViewLocalization(
                        LanguageViewLocationExpanderFormat.Suffix,
                        opts => { opts.ResourcesPath = "Resources"; })
                    .AddDataAnnotationsLocalization();

                services.Configure<RequestLocalizationOptions>(
                    opts =>
                    {
                        var supportedCultures = new[]
                        {
                            new CultureInfo("en-US"),
                            new CultureInfo("en")
                        };

                        opts.DefaultRequestCulture = new RequestCulture("en");
                        opts.SupportedCultures = supportedCultures;
                        opts.SupportedUICultures = supportedCultures;
                    });

....

var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(options.Value);
不幸的是,结果只是字符串“Title”。我无法从Razor类库加载这些resx文件

如何在Razor类库中使用上述本地化


更新:这是一个非常相似的用例--它提供了一些示例。

您似乎忘记了使用
添加本地化
正确配置本地化

使用文档中提供的详细信息

参考文献

配置本地化 本地化是在
ConfigureServices
方法中配置的:

示例图像中显示的资源文件的路径遵循给定的路径命名约定 您正在使用设置为“资源”的
ResourcesPath
选项。这应该允许视图在“Resources”文件夹的相对路径中找到资源文件

另一种方法是不使用
ResourcesPath
选项,并按照命名约定将.resx文件放置在与视图相同的文件夹中

根据提供的其他详细信息,表明UI项目将打包为nuget包

然后将资源文件打包到nuget包中,并在安装时将其解压缩到目标项目的resources文件夹中

这些资源必须位于站点根目录中,才能供视图使用,因此您需要引用
中的所有文件。nuspec


...

参考资料

我还没有尝试过公认的答案,根据评论,OP似乎没有成功。我实现了一个类似于MVC/Razor Pages使用的视图/页面定位器模式的模式,即资源可以在RCL或单独的程序集中提供,并使用
ViewLocalizer
,它只会从最高优先级的资源中找到匹配的资源字符串。您可以阅读我的实现,看看它是否适合您


我尝试了您的代码片段,但毫无疑问,它不起作用。我有两个项目-第一个项目是web应用程序,第二个是RazorUI,其中是带有“资源”的文件夹。我已将razor UI引用到我使用您的设置的web应用程序项目。资源与web项目引用的razor ui程序集是否存在问题?@Jenan resources(.resx)需要位于根项目库中才能访问。所以这就意味着他们需要在web项目中。@Jenan我以为你在使用RazorPages项目,而不仅仅是引用另一个项目中的razor页面。这将导致引用资源文件时出现问题。我的想法是使用UI创建一个单独的DLL-它提供了新的razor类库,但问题是共享资源文件。如何解决?与UI razor类库共享resx文件?只是为了测试,请尝试将资源放在根项目中,并将视图保留在单独的库中,然后查看它是否有效。
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer


<h1>@Localizer["Title"]</h1>
services.AddLocalization(options => options.ResourcesPath = "Resources"); //<<< This is required

services
    .AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
    .AddDataAnnotationsLocalization();
    
var supportedCultures = new[] {
    new CultureInfo("en-US"),
    new CultureInfo("en")
};

app.UseRequestLocalization(new RequestLocalizationOptions{
    DefaultRequestCulture = new RequestCulture("en"),
    // Formatting numbers, dates, etc.
    SupportedCultures = supportedCultures,
    // UI strings that we have localized.
    SupportedUICultures = supportedCultures;
});

//...other middleware

app.UseMvcWithDefaultRoute();