Вопрос по ruby, windows – Чтение региональных настроек местоположения (код страны) в Windows с использованием Ruby?

1

Я пытаюсь получить доступ кControl Panel: Region and Language: Location: Current location настройка с использованием Ruby. Меня интересует только код страны.

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

`systeminfo | findstr /B /C:"System Locale"`.to_s.upcase.strip[30..31]

Я надеюсь, что кто-то там может знать. Благодарю.

Ваш Ответ

1   ответ
3

Использование Win32 API:

require 'Win32API'

# Set up some Win32 constants
GEOCLASS_NATION  = 16
GEO_ISO2         = 4
GEO_FRIENDLYNAME = 8

# Set up some API calls
GetUserGeoID = Win32API.new('kernel32', 'GetUserGeoID', ['L'], 'L')
GetGeoInfo   = Win32API.new('kernel32', 'GetGeoInfoA', ['L', 'L', 'P', 'L', 'L'], 'L')

# Get user's GEOID
geoid = GetUserGeoID.call(GEOCLASS_NATION)
=> 77

# Get ISO name
buffer = " " * 100
GetGeoInfo.call(geoid, GEO_ISO2, buffer, buffer.length, 0)
geo_iso = buffer.strip
=> "FI"

# Get friendly name
buffer = " " * 100
GetGeoInfo.call(geoid, GEO_FRIENDLYNAME, buffer, buffer.length, 0)
geo_name = buffer.strip
=> "Finland"

Документация дляGetUserGeoID:
http://msdn.microsoft.com/en-us/library/dd318138.aspx

Документация дляGetGeoInfo:
https://docs.microsoft.com/en-us/windows/desktop/api/winnls/nf-winnls-getgeoinfoa

Чтобы преобразовать GEOID в имя местоположения, вы также можете использовать эту таблицу:
http://msdn.microsoft.com/en-us/library/dd374073.aspx

Нить:GetUserGeoID не возвращаетLCID, он возвращаетGEOID, Если ваши клиенты работают на Windows 10, вы можете перейти наGetUserDefaultGeoName вместо этого и пропустите этот шаг.
Это было намного больше работы, чем я ожидал. Но это было правильное решение. Спасибо. Aeyoun

Похожие вопросы