src/Library/Localization.SqlLocalizer/DbStringLocalizer/SqlStringLocalizerFactory.cs
(开头部分) 7KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Options;
namespace Localization.SqlLocalizer.DbStringLocalizer
{
public class SqlStringLocalizerFactory : IStringLocalizerFactory, IStringExtendedLocalizerFactory
{
private readonly DevelopmentSetup _developmentSetup;
private readonly LocalizationModelContext _context;
private static readonly ConcurrentDictionary<string, IStringLocalizer> _resourceLocalizations = new ConcurrentDictionary<string, IStringLocalizer>();
private readonly IOptions<SqlLocalizationOptions> _options;
private const string Global = "global";
public SqlStringLocalizerFactory(
LocalizationModelContext context,
DevelopmentSetup developmentSetup,
IOptions<SqlLocalizationOptions> localizationOptions)
{
_options = localizationOptions ?? throw new ArgumentNullException(nameof(localizationOptions));
_context = context ?? throw new ArgumentNullException(nameof(LocalizationModelContext));
_developmentSetup = developmentSetup;
}
public IStringLocalizer Create(Type resourceSource)
{
var returnOnlyKeyIfNotFound = _options.Value.ReturnOnlyKeyIfNotFound;
var createNewRecordWhenLocalisedStringDoesNotExist = _options.Value.CreateNewRecordWhenLocalisedStringDoesNotExist;
SqlStringLocalizer sqlStringLocalizer;
if (_options.Value.UseOnlyPropertyNames)
{
if (_resourceLocalizations.Keys.Contains(Global))
{
return _resourceLocalizations[Global];
}
sqlStringLocalizer = new SqlStringLocalizer(GetAllFromDatabaseForResource(Global), _developmentSetup, Global, returnOnlyKeyIfNotFound, createNewRecordWhenLocalisedStringDoesNotExist);
return _resourceLocalizations.GetOrAdd(Global, sqlStringLocalizer);
}
else if (_options.Value.UseTypeFullNames)
{
if (_resourceLocalizations.Keys.Contains(resourceSource.FullName))
{
return _resourceLocalizations[resourceSource.FullName];
}
sqlStringLocalizer = new SqlStringLocalizer(GetAllFromDatabaseForResource(resourceSource.FullName), _developmentSetup, resourceSource.FullName, returnOnlyKeyIfNotFound, createNewRecordWhenLocalisedStringDoesNotExist);
return _resourceLocalizations.GetOrAdd(resourceSource.FullName, sqlStringLocalizer);
}
if (_resourceLocalizations.Keys.Contains(resourceSource.Name))
{
return _resourceLocalizations[resourceSource.Name];
后面还有 127 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。