Проблема в том, что на некоторых машинах он возвращает «арабский», хотя у меня нет такого ресурса, а на моем (так как я установил VS 2012) он возвращает все ( для меня это имеет больше смысла, чем возврат только двух реальных культур плюс арабский, но кажется, что ResourceManager просто не был разработан для того, чтобы позволить мне получить эту информацию, поэтому мне, вероятно, не следует жаловаться). Вот схема...
(у меня есть файл Strings.resx и файл Strings.de.resx)
Код: Выделить всё
IEnumerable cultures =
CultureInfo.GetCultures(CultureTypes.NeutralCultures)
.Where(c =>
{
// Exclude the invariant culture and then load up
// an arbitrary string so the resource manager
// loads a resource set, then get the set for the
// current culture specifically and it is, sometimes
// (I thought always but I was wrong) null if no
// set exists
if (c.LCID == CultureInfo.InvariantCulture.LCID)
return false;
var rm = Strings.ResourceManager;
rm.GetString("HELLO", c);
return rm.GetResourceSet(c, false, false) != null;
});
Код: Выделить всё
var neutralCulture = new[]
{
CultureInfo
.CreateSpecificCulture(((NeutralResourcesLanguageAttribute)
Assembly
.GetExecutingAssembly()
.GetCustomAttributes(
typeof (NeutralResourcesLanguageAttribute),
false)[0])
.CultureName)
};
IEnumerable cultures =
CultureInfo.GetCultures(CultureTypes.NeutralCultures)
.Where(c => Directory.Exists(c.TwoLetterISOLanguageName))
.Union(neutralCulture);
Верно теперь я подумываю о том, чтобы просто использовать файл конфигурации и сделать его максимально простым, поскольку мне не очень нравится, куда я попал, но есть ли лучший способ сделать это (или: можно ли это сделать автоматически и безопасным способом)?
Подробнее здесь: https://stackoverflow.com/questions/120 ... rcemanager