2014-10-12 2 views
1

Я пытаюсь использовать поддержку локализации. Я написал:Понятие locale class, locale :: facet :: _ S_create_c_locale имя недействительно

#include <locale> 

auto my_loc = std::locale(""); // OK 
auto mm_loc = std::locale("POSIX"); // OK 

auto an_loc = std::locale("en");// terminate called after throwing an instance of 
           //'std::runtime_error' what():     
           //locale::facet::_S_create_c_locale name not valid 

auto ann_loc = std::locale("jp");// terminate called after throwing an instance of 
           //'std::runtime_error' what():     
           //locale::facet::_S_create_c_locale name not valid 
int main() 
{ 
} 

Не могли бы вы объяснить в двух словах, для чего это язык? Почему мы не можем построить его с помощью "en", "jp", "us" или других строк?

+1

Локали являются контейнерами граней, которые используются для интернационализации функций ввода-вывода ваших потоков. – 0x499602D2

ответ

2

Почему мы не можем построить его с помощью «en», «jp», «us» или других строк?

Потому что это недействительные обозначения на вашей машине. Набор допустимых имен локалей никоим образом не указан стандартом. На машине Linux используйте

$ locale -a 

, чтобы распечатать все действующие названия локали. Это отпечатки

C 
POSIX 
de_DE 
de_DE.iso88591 
[email protected] 
de_DE.utf8 
[email protected] 
deutsch 
german 

в моем случае. Каждый зарегистрированный локаль отлично работает с std::locale.

Вы введете std::locale s в потоки, такие как cout. Затем вы используете грани, такие как std::money_put, для вставки данных локальным способом - для нас, немцев, он будет использовать . в качестве разделителя тысяч и , в качестве десятичной точки.

Смежные вопросы