Microsoft.Extensions.Localization.Mvc Microsoft.EntityFrameworkCore.Design Microsoft.EntityFrameworkCore.SqlServer
可以使用以下命令安装它们:
dotnet add package Microsoft.Extensions.Localization.Mvc dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer
public class LocalizedText { public int Id { get; set; } public string Text { get; set; } public string Culture { get; set; } }
public class LocalizationDbContext : DbContext
{
public DbSet
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("{connection_string}");
}
}
services.AddLocalization(options => options.ResourcesPath = "Resources");
注册资源:我们需要创建一个包含文本的资源文件。在这里我们称之为 "Resources.en.resx"。
注册数据库提供程序:我们需要注册一个Entity Framework数据库提供程序。使用以下代码:
services.AddDbContext
public class DBLocalizationManager : IStringLocalizer { private readonly LocalizationDbContext _context;
public DBLocalizationManager(LocalizationDbContext context)
{
_context = context;
}
public LocalizedString this[string name] => new LocalizedString(name, GetString(name));
public LocalizedString this[string name, params object[] arguments] => new LocalizedString(name, GetString(name, arguments));
public IEnumerable GetAllStrings(bool includeParentCultures)
{
var culture = CultureInfo.CurrentCulture;
var texts = _context.Texts.Where(t => t.Culture.Equals(culture.Name)).ToList();
if (includeParentCultures || texts.Count == 0)
{
texts.AddRange(_context.Texts.Where(t => t.Culture.StartsWith(culture.TwoLetterISOLanguageName)).ToList());
}
return texts.Select(t => new LocalizedString(t.Id.ToString(), t.Text));
}
private string GetString(string name)
{
var culture = CultureInfo.CurrentCulture;
var text = _context.Texts.FirstOrDefault(t => t.Culture.Equals(culture.Name) && t.Id.ToString().Equals(name));
if (text == null)
{
text = _context.Texts.FirstOrDefault(t => t.Culture.StartsWith(culture.TwoLetterISOLanguageName) && t.Id.ToString().Equals(name));
if (text == null)
{
return name;
}
}
return text.Text;
}
private string GetString(string name, object[] arguments)
{
var format = GetString(name);
return string.Format(format, arguments);
}
}
services.AddSingleton