LINUX.ORG.RU

std::locale


0

0

Привет.
Почитал про возможности интернационализации в С++ с помощью классов Facet. Есть вопрос: хочу реализовать вывод определённого класса в двух локалях, как следует поступить?
Реализовать Facet для каждой локали или как?

★★★★★

Не совсем понял суть вопроса, но

#include <iostream>
#include <locale>
#include <string>

#define CAT_NAME "test"
#define CAT_DIR "./"

int main(int, char**)
{
        typedef std::messages<char>::catalog catalog;
        const std::locale loc_ru("ru_RU.UTF-8");
        const std::messages<char>& msgs_ru = std::use_facet<std::messages<char> >(loc_ru);

        catalog cat_ru(msgs_ru.open(CAT_NAME, loc_ru, CAT_DIR));
        std::string hello(msgs_ru.get(cat_ru, 0, 0, "hello"));
        std::string bye(msgs_ru.get(cat_ru, 0, 0, "bye"));

        std::cout << hello << std::endl;
        std::cout << bye << std::endl;

        msgs_ru.close(cat_ru);

        return 0;
}

Это если для поддержки нескольких языков. Если же нужно выводить данные с использованием установок для конкретной локали (сортировка, десятичный разделитель, разделитель групп и пр.), то можно использовать stream.imbue.

sjinks ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.