1

Тема: Динамічна зміна мов з gettext i Windows 11

Зробив локалізацію для своєї бібліотеки за допомогою gettext.
Поточна локаль розпізнається та завантажується український переклад.
Але коли намагаюся змінити локаль на англійську, щоб відображалася англомовна версія,
нічого не відбувається.
Ось так намагаюся зробити:

    const auto error { _putenv_s("LANGUAGE", "en_US.utf8") };
    if (error) {
        std::cout << "Error: " << error << "\n";
    } else {
        auto set_en = setlocale(LC_ALL, "en_US.utf8");
        std::cout << "Set en: " << set_en << "\n";
        std::cout << gettext("My text.") << "\n";
    }

Ані _put_env_s, ані setlocale не видають помилки чи nullptr.
На Лінуксі з setenv і setlocale усе працює чудово.
Це якась особливість роботи gettext на Windows 11, ніяк не можу розібратися.
Пробував замість "en_US" писати en-US, en, English і т.д. — результат той самий.

2

Re: Динамічна зміна мов з gettext i Windows 11

Підозрюю, що проблема саме у мішанині POSIX/Linux API та Win32 API. Як я розумію, ви використовуєте портовану версію бібліотеки gettext під вінду?
Загалом, якщо ви більш-менш серйозно хочете за це взятися, то я рекомендував би вам імплементувати це, використовуючи виключно нативний Win32 API для Windows. Без зайвої мішанини або взяти вже якусь готову бібліотеку, яка точно вміє коректно працювати з кросплатформністю.

P.S. Просто нагадую, що Windows нативно працює у UTF-16, відповідно, інші формати будуть так чи інакше перекодовуватися.

Подякували: Teg Miles1

3

Re: Динамічна зміна мов з gettext i Windows 11

wander написав:

Підозрюю, що проблема саме у мішанині POSIX/Linux API та Win32 API. Як я розумію, ви використовуєте портовану версію бібліотеки gettext під вінду?
Загалом, якщо ви більш-менш серйозно хочете за це взятися, то я рекомендував би вам імплементувати це, використовуючи виключно нативний Win32 API для Windows. Без зайвої мішанини або взяти вже якусь готову бібліотеку, яка точно вміє коректно працювати з кросплатформністю.

P.S. Просто нагадую, що Windows нативно працює у UTF-16, відповідно, інші формати будуть так чи інакше перекодовуватися.

Тоді буде версія лише під Лінукс, усе одно Віндовс я майже не користуюсь.