Приложение многоязычное. Нужно реализовать возможность выбора языков.
Сам процесс расширения доступных языков должен быть минимально простым, а именно создание папки с названием культуры и добавлением переведенных в нее ресурсов.
Мне нужно определить какие сателитные сборки имеются и для каких культур. Покопался в классах типа ResourceManager и Assembly.GetManifestResourceInfo. Не могу найти подходящих методов. Я конечно могу пройтись по подпапкам output-папки и искать локализированные ресурсы в ручную, но может быть есть уже методы для извлечения этой информации?
Сам написал. Может кому понадобиться
private List<CultureInfo> GetInstalledCultures() {
// declare result
List<CultureInfo> result = new List<CultureInfo>();
// define paths
String rootPath = Path.GetDirectoryName(this.GetType().Assembly.Location);
String assemblyName = this.GetType().Assembly.GetName().Name;
String satAssemblyName = assemblyName + ".resources.dll";
// scan directory for sat assemblies
DirectoryInfo root_di = new DirectoryInfo(rootPath);
foreach (DirectoryInfo di in root_di.GetDirectories()) {
String satAssemblyPath = Path.Combine(di.FullName, satAssemblyName);
if (File.Exists(satAssemblyPath)) {
try {
// check that folder contains the correct data
CultureInfo ci = new CultureInfo(di.Name);
Assembly satAssembly = this.GetType().Assembly.GetSatelliteAssembly(ci);
// successful
result.Add(ci);
}
catch {
// Nothing. Test for the creating the CultureInfo and Assembly objects;
}
}
}
// result
return result;
}