Вы можете перебирать файлы, расположенные в каталоге содержимого приложения, затем выбирать файлы ресурсов, извлекать фрагмент культуры из имени файла и в конце концов создавать список культур.
Сначала введите IHostingEnvironment для использования предоставляемого им свойства ContentRootPath
.
private readonly IHostingEnvironment _hostingEnvironment;
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
Пока вы храните все свои файлы ресурсов в каталоге ./Resources/
, все будет в порядке.
Далее создайте DirectoryInfo :
var contentRootPath = Path.Combine(_hostingEnvironment.ContentRootPath, "Resources");
DirectoryInfo contentDirectoryInfo;
try
{
contentDirectoryInfo = new DirectoryInfo(contentRootPath);
}
catch (DirectoryNotFoundException)
{
// Here you should handle "Resources" directory not found exception.
throw;
}
Получите имена файлов ресурсов:
var resoruceFilesInfo = contentDirectoryInfo.GetFiles("*.resx", SearchOption.AllDirectories);
var resoruceFileNames = resoruceFilesInfo.Select(info => info.Name);
Все три примера файлов ресурсов, которые вы предоставили, следуют шаблону именования культур.То есть сочетание двухбуквенного строчного кода культуры ISO 639, связанного с языком, и двухбуквенного кода субкультуры ISO 3166, связанного со страной или регионом.Для правильного извлечения фрагмента культуры я предлагаю использовать Регулярное выражение , как показано ниже:
var regex = new Regex(@"(?<=\.)[a-z]{2}-[A-Z]{2}(?=\.resx$)");
var culturePrefixes = resoruceFileNames.Select(fileName => regex.Match(fileName).Value);
Наконец, создайте коллекцию культур:
var cultureList = culturePrefixes.Select(prefix => new CultureInfo(prefix));