Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 78, средняя оценка - 4.71
kripa
Сообщений: n/a
#1

Русификация консольных приложений - C++

04.08.2009, 19:59. Просмотров 10273. Ответов 16
Метки нет (Все метки)

Народ, помогите плиз. Есть ли прога, позволяющая русифицировать консольные приложения на с++? Заранее простите за безграмотность. Изучаю с++ всего 2-й день
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2009, 19:59     Русификация консольных приложений
Посмотрите здесь:

Разработка консольных приложений - Visual C++
Как в консольном приложении обеспечить вывод текста в кодировке 866 (MS-DOS) при наборе его в кодировке OEM. Без применения классов MFC

Компиляция консольных приложений VC 6.0 - C++
Может быть я совсем дурак, но программировать ни разу не пробовал и даже не знаю с чего начать. Вот купил книгу "Как программировать на...

Создание консольных приложений Windows - C++ Builder
Когда-то у меня был Microsoft Visual C++ и я лишь клацал F5 для компиляции консольных приложений. Но счастье часто непродолжительно, и уже...

Ошибки при создании НЕ-консольных приложений - Visual C++
Если создавать консольное приложение, то всё отлично. А вот если создавать Win32 Project или MFC APLLICATION, то даже ничего ен меняя в...

Помогите с заданием роектирование та реализация консольных приложений - C++
Мне тут дали задание по С++, сам только начинаю эго учить. :dash2:Помогите. Задание: Конференция (Название конференции, Странна с...

Дату текущего дня присвоить string переменной (для консольных приложений) - Visual C++
извеняюсь, но не покажете как дату текущего дня присвоить к string переменной для консольных приложений(cmd.exe)?:D очень надо!

Что стоит изучить, что перейти от консольных приложений к оконным - C++
Здравствуйте, изучал С/С++ по книге Харви Дейтела "Как программировать на С". Посоветуйте, пожалуйста, что стоит изучить, что перейти от...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.08.2009, 20:21     Русификация консольных приложений #2
Ты имеешь в виду кракозябры вместо русских букв, тогда тебе сюда
Русские шрифты в консоли
PB
Просто прогер
1278 / 1065 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
04.08.2009, 20:38     Русификация консольных приложений #3
Создавай Unicode приложение и текст будет нормально отображаться.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
04.08.2009, 20:53     Русификация консольных приложений #4
вставляй вначале мейна
C++
1
setlocale( LC_ALL,"Russian" );
и будет тебе счастье
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.08.2009, 22:08     Русификация консольных приложений #5
setlocale ( LC_ALL, "" );
Тогда и на китайском будет работать
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
04.08.2009, 22:13     Русификация консольных приложений #6
odip, не понял?
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.08.2009, 22:16     Русификация консольных приложений #7
Если тебе нужен именно русский - то сойдет второй аргумент "Russian".
Но вообще говоря если ты пишешь локализованную программу - можно указать второй аргумент - "". Это значит что будет браться значение локали, установленное в системе.
В число английской системе - это будет English. Для русских обычно ставят Russian по умолчанию.
Ну а в китайской системе это тоже будет работать
PB
Просто прогер
1278 / 1065 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 09:27     Русификация консольных приложений #8
Цитата Сообщение от odip Посмотреть сообщение
Тогда и на китайском будет работать
Чтобы гарантировано работало на китайском, надо создавать Unicode приложение.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.08.2009, 09:31     Русификация консольных приложений #9
надо создавать Unicode приложение
То что приложение консольное, это еще не значит, что оно не может пользоваться Unicode.
YurA_280784
Заблокирован
05.08.2009, 10:00     Русификация консольных приложений #10
Можно также подключить russian.h - фурічит только для потоков iostream, т.е. printf не покатит, а также есть универсальная функция CharToOem(LPCTSTR sSrs, char * sDst); (чтобі юзать функцию нужно пожключить windows.h)
Юзаем функцию так
C++
1
2
3
char * chBuf = "Текст по русски";
CharToOem((LPCTSTR)chBuf,chBuf);
printf(chBuf);
листинг russian.h ниже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef RUS_H
#define RUS_H
#include <iostream.h>
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
#endif
kripa
Сообщений: n/a
05.08.2009, 16:55     Русификация консольных приложений #11
Спасибо
AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73
10.11.2009, 05:18     Русификация консольных приложений #12
русские библиотеки для MFC - http://www.flint-inc.ru/rus/info/rusmfc.html
aynash
Сообщений: n/a
09.01.2011, 15:51     Русификация консольных приложений #13
Цитата Сообщение от M128K145 Посмотреть сообщение
вставляй вначале мейна
C++
1
setlocale( LC_ALL,"Russian" );
и будет тебе счастье
СПАСИБО!!!!
AlexRyzhenko
0 / 0 / 0
Регистрация: 29.07.2009
Сообщений: 119
09.01.2011, 19:08     Русификация консольных приложений #14
А я делаю так. Подключаю Windows.h. В начале мейна пишу:
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Когда запускаю прогу в свойства окна ставлю шрифт Lucida Console. И всё норм.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.01.2011, 03:35     Русификация консольных приложений #15
C++
1
std::locale().global(std::locale(""));
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string>
#include <windows.h>
 
std::string ToRus(const std::string& one)
{
     std::string res;
     res.resize(one.size());
     CharToOem(const_cast<char*>(one.c_str()), const_cast<char*>(res.c_str()));
     return res;
}
 
std::string RusToChar(const std::string& one)
{
    std::string res;
    res.resize(one.size());
    OemToChar(const_cast<char*>(one.c_str()), const_cast<char*>(res.c_str()));
    return res;
}
 
int main()
{
     std::string str="Привет";
     std::cout<<ToRus(str)<<'\n';
     std::string some;
     std::cin>>some;
     std::cout<<ToRus(RusToChar(some))<<'\n';
     return 0;
}
Persk
Модератор
Эксперт Windows
7324 / 3161 / 193
Регистрация: 25.10.2010
Сообщений: 12,718
11.01.2011, 23:37     Русификация консольных приложений #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream.h>  void main ()
{int a,b,c;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
char name[128];
CharToOem("Проверка суммирования двух целых чисел",name); //Заголовок в активном окне//
char ls[512]="Программу написал:\nВвод своих инициалов\n";
CharToOem(ls,ls);
cout<<ls<<endl;
SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY | FOREGROUND_GREEN); //Вывод зелёным цветом//
char start[512]="Программа проверки суммирования двух целых чисел\nЕсли результат будет больше чем 32767, будет выведено сообщение об ошибке\n";
CharToOem(start,start);
cout<<start<<endl;
//Вывод голубым цветом
SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_INTENSITY | FOREGROUND_BLUE); 
char enter[512]="Пожайлуста, введите число №1 и нажмите Enter,\n затем введите число №2 и нажмите Enter\n";
CharToOem(enter,enter);
cout<<enter<<endl;
SetConsoleTitle(name);//Дополнения к активному заголовку
PCONSOLE_SCREEN_BUFFER_INFO bu=(PCONSOLE_SCREEN_BUFFER_INFO)malloc(sizeof(PCONSOLE_SCREEN_BUFFER_INFO));
//Вывод желтым цветом цветом
SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_INTENSITY | FOREGROUND_RED);
scanf("%d%d",&a,&b);
c=a+b;
if (a,b,c <= 32767)
{
c=a+b;
printf ("\n  %d+%d",a,b);
printf ("\n  %d",c);
}
else
//Вывод красным цветом 
{
SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY | FOREGROUND_RED); 
    char enter1[512]="\aОшибка! Результат сложения приводит к переполнению!\n";
    CharToOem(enter1,enter1);
    cout<<enter1<<endl;
} 
getch();
}
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream.h>  void main ()
{int a,b,c;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
char name[128];
CharToOem("Проверка суммирования двух целых чисел",name); //Заголовок в активном окне//
char ls[512]="Программу написал:\nВвод своих инициалов\n";
CharToOem(ls,ls);
cout<<ls<<endl;
SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY | FOREGROUND_GREEN); //Вывод зелёным цветом//
char start[512]="Программа проверки суммирования двух целых чисел\nЕсли результат будет больше чем 32767, будет выведено сообщение об ошибке\n";
CharToOem(start,start);
cout<<start<<endl;
//Вывод голубым цветом
SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_INTENSITY | FOREGROUND_BLUE); 
char enter[512]="Пожайлуста, введите число №1 и нажмите Enter,\n затем введите число №2 и нажмите Enter\n";
CharToOem(enter,enter);
cout<<enter<<endl;
SetConsoleTitle(name);//Дополнения к активному заголовку
PCONSOLE_SCREEN_BUFFER_INFO bu=(PCONSOLE_SCREEN_BUFFER_INFO)malloc(sizeof(PCONSOLE_SCREEN_BUFFER_INFO));
//Вывод желтым цветом цветом
SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_INTENSITY | FOREGROUND_RED);
scanf("%d%d",&a,&b);
c=a+b;
if (a,b,c <= 32767)
{
c=a+b;
printf ("\n  %d+%d",a,b);
printf ("\n  %d",c);
}
else
//Вывод красным цветом 
{
SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY | FOREGROUND_RED); 
    char enter1[512]="\aОшибка! Результат сложения приводит к переполнению!\n";
    CharToOem(enter1,enter1);
    cout<<enter1<<endl;
} 
getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2011, 23:45     Русификация консольных приложений
Еще ссылки по теме:

Выполнение консольных команд - C++
Преподаватель дал задание написать программу поиска файлов в папке, перенаправления потока, чтобы потом сделать некий консольный скролл....

Русский язык в консольных приложениях! - C++
Здравствуйте форумчане, у меня возник такой вопрос, вообщем когда я вывожу командой cout то русские символы переводятся в кракозяблики ))...

Идеи простых консольных программ на C++ - C++
Здравствуйте я начал изучать C++ недавно, знаю типы данных, операторы и управляющие конструкции for, if, while, do-while. Решал задачи...

Графический интерфейс в консольных программах - C++
Насколько я понял, чтоб создать граф. интерфейс, нужна библиотека curses.h. Но в ней довольно низкоуровневые команды, вроде передвижения...

Руссификация в консольных программах на Visual C++ - Visual C++
Подскажите пожалуйста. Проблема вот в чем: Учусь программировать на С++, пользуюсь компилятором Visual C++ 6.0. Делаю пока еще только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
12.01.2011, 23:45     Русификация консольных приложений #17
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
А я делаю так. Подключаю Windows.h. В начале мейна пишу:
Код C++
1
2
SetConsoleCP(1251); SetConsoleOutputCP(1251);

Когда запускаю прогу в свойства окна ставлю шрифт Lucida Console. И всё норм.
Я тоже, хорошо бы это дело автоматизировать.
Yandex
Объявления
12.01.2011, 23:45     Русификация консольных приложений
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru