Localizer 方法与适当路径中的 .resx 文件结合使用。这一切都是开箱即用的,几乎不需要任何配置,只需在我的 Program.cs 中
.AddViewLocalization()
但是我想修改它以便转换本地化字符串,例如我想对它们应用
.ToUpper()
以及其他一些调整。
如何覆盖默认行为?我知道我可能需要创建某种自定义本地化程序,但我无法弄清楚如何或如何实现它并使其在现有设置中以最少的配置工作。
您可以通过创建包装默认字符串本地化程序的自定义字符串本地化程序来转换所有本地化字符串。这保留了所有现有的 .resx 功能,同时允许您修改输出字符串。
public class CustomStringLocalizer : IStringLocalizer
{
private readonly IStringLocalizer _inner;
public CustomStringLocalizer(IStringLocalizer inner) => _inner = inner;
public LocalizedString this[string name]
{
get {
var original = _inner[name];
return new LocalizedString(
name,
original.Value?.ToUpper(), // Your transformation here
original.ResourceNotFound,
original.SearchedLocation
);
}
}
}
然后只需将其注册到您的program.cs中
builder.Services.AddSingleton<IStringLocalizerFactory>(sp => {
var options = sp.GetRequiredService<IOptions<LocalizationOptions>>();
var logger = sp.GetRequiredService<ILoggerFactory>();
var factory = new ResourceManagerStringLocalizerFactory(options, logger);
return new CustomStringLocalizerFactory(factory);
});
这应该拦截所有本地化字符串并通过转换运行它们。您可以修改转换逻辑来执行您需要的任何操作。