Есть ли способ получить доступ к локали, используемой gettext под Windows? - PullRequest
1 голос
/ 02 мая 2010

У меня есть программа, в которой i18n обрабатывается gettext. Программа работает нормально, однако по какой-то причине мне нужно знать название локали, используемой gettext во время выполнения (что-то вроде 'fr_FR') под win32.

Я изучил источники gettext, и есть довольно пугающая функция, которая вычисляет ее на всех платформах (gl_locale_name, в C-файле с именем "localename.h / c"). Однако этот файл, похоже, не устанавливается вместе с gettext или libintl, поэтому я не могу вызвать функцию. Есть ли другая функция, предоставляемая gettext, чтобы получить это значение? Или в другом пакете (boost, glib, что-нибудь?)

(В связанной заметке в стандартной библиотеке C ++ есть вещь, называемая std :: locale, и в соответствии с документом, вызывающим std :: locale (""), следует создать локаль с настройками системы, если только Я ошибаюсь ... но тогда под окнами имя 'C'. Это жизнеспособный способ получить название локали? Что я делаю не так?)

Ответы [ 3 ]

1 голос
/ 02 мая 2010

В Windows обычно используется функция GetUserDefaultLCID, которая возвращает целочисленное значение идентификатора локали. Чтобы преобразовать LCID в строку типа 'fr_FR', вам необходимо отобразить ее на основе информации из http://msdn.microsoft.com/en-us/library/ms776260

1 голос
/ 04 мая 2010

Оказывается, функция "gl_locale_name" не была частью gettext напрямую, а скорее частью gnulib - http://www.gnu.org/software/gnulib. Я только что обнаружил пакет сегодня.

Таким образом, получение печально известного заголовка localename.h в моем проекте было вопросом

gnulib-tool --import localename

Тогда функция gl_locale_name прекрасно работает при кросс-компиляции.

Спасибо всем за ответы!

0 голосов
/ 02 мая 2010

Вы можете использовать setlocale (NULL), чтобы вытащить локаль из CRT. Но из Windows я понятия не имею. Кроме того, gettext - это довольно общая функция, и вам нужно будет более конкретно определить, что такое gettext.

...