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;
}
* This source code was highlighted with Source Code Highlighter.
вторник, 23 марта 2010 г.
Автоматическое определение CultureInfo для установленных сателитных сборок
На днях понадобилось в программе автоматически определять, для каких языков в программе существуют сателитные сборки (Satellite Assemblies). Для чего это нужно? А понадобилось для того, что бы процесс локализации приложения на новый язык был максимально простым. В установленную программу просто добавляются локализированные ресурсы в виде сателитных сборок, и никаких перекомпиляций уже не требуется. Т.к. я не нашел штатных средств для извлечения информации об установленных сборках, написал свою реализацию.
Подписаться на:
Сообщения (Atom)