Файлы ресурсов из папки ресурсов - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть 3 файла ресурсов:

/Resources/Values.en-US.resx
/Resources/Values.es-ES.resx
/Resources/Values.fr-FR.resx


(English, Spanish, French)

Здесь я хочу «просканировать», какие языки (из этих файлов ресурсов) доступны, чтобы я мог поместить их в список и отобразить их пользователюдля выбора.После выпуска моей программы люди смогут добавлять больше языков.Программа выполнит поиск новых языков и сделает их доступными из списка.

Есть ли способ получить файлы из папки Resources?

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете перебирать файлы, расположенные в каталоге содержимого приложения, затем выбирать файлы ресурсов, извлекать фрагмент культуры из имени файла и в конце концов создавать список культур.

Сначала введите 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));
...