C ++ Win32 API эквивалент CultureInfo.TwoLetterISOLanguageName - PullRequest
1 голос
/ 16 апреля 2010

.NET Framework позволяет легко получать информацию о различных локалях; API-интерфейсы Win32 C ++ немного сложнее понять.

Существует ли в Win32 эквивалентная функция для получения двухбуквенного имени языка ISO с целочисленным идентификатором локали?

В C # я бы сделал:

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(1034);
string iso = ci.TwoLetterISOLanguageName;
// iso == "es" now.

Код должен работать на XP и новее.

Ответы [ 3 ]

3 голосов
/ 16 апреля 2010

Спасибо Тревору за то, что он направил меня к этому ответу в предыдущем ответе.

Вызов GetLocaleInfo с параметром LOCALE_SISO639LANGNAME .

1 голос
/ 16 апреля 2010

См. Функцию GetLocaleInfo . Вас могут заинтересовать 2 LCType значения: LOCALE_SABBREVCTRYNAME и LOCALE_SABBREVLANGNAME. Я провел быстрый тест на Windows 7, и обе вернули 3 строки символов, хотя ISO 3166 использует 2 символа. В документации LOCALE_SABBREVLANGNAME говорится, что она начинается с двухсимвольного кода ISO 3166 и добавляет третий символ для подъязыка.

0 голосов
/ 16 апреля 2010

Это одна из областей, где Win API сильно изменилась со времен XP. Я не думаю, что вы найдете для этого функцию, которая была бы доступна вплоть до XP. Я полагаю, что .NET Framework имеет свои собственные встроенные таблицы (по крайней мере, для версий до Vista). GetUserDefaultLocaleName даже недоступно в XP, и это не делает то, что вам нужно, и даже если бы оно было, оно, вероятно, не будет таким полным в XP, как в более новых версиях .

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

...