В итоге я просто использовал быстрый взлом:
public class Export
{
public string Run()
{
var resources = new StringBuilder();
var assembly = Assembly.GetExecutingAssembly();
var types = from t in assembly.GetTypes()
where t != typeof(Export)
select t;
foreach (Type t in types)
{
resources.AppendLine(t.Name);
resources.AppendLine("Key, Value");
var props = from p in t.GetProperties()
where !p.CanWrite && p.Name != "ResourceManager"
select p;
foreach (PropertyInfo p in props)
{
resources.AppendFormat("\"{0}\",\"{1}\"\n", p.Name, p.GetValue(null));
}
resources.AppendLine();
}
return resources.ToString();
}
}
Добавьте этот код в проект, который содержит ваши файлы .resx (мои находятся в отдельном проекте «Языки»), а затем используйте следующий код для сохранения результата в .csv, чтобы его можно было загрузить с помощью редактора электронных таблиц.
var hack = new Languages.Export();
var resourcesSummary = hack.Run();
var cultureName = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
using (TextWriter file = File.CreateText(@"C:\resources." + cultureName + ".csv"))
{
file.Write(resourcesSummary);
}
Это не позволяет вам импортировать файлы из .csv обратно в ваши файлы .resx, чтобы их можно было компилировать. Было бы неплохо иметь утилиту, которая бы это делала.