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

C++

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

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

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

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

Помогите с заданием роектирование та реализация консольных приложений C++
C++ Компиляция консольных приложений VC 6.0
C++ Графический интерфейс в консольных программах
Ошибки при создании НЕ-консольных приложений Visual C++
Дату текущего дня присвоить string переменной (для консольных приложений) Visual C++
Visual C++ Разработка консольных приложений
Создание консольных приложений Windows C++ Builder
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3030 / 2351 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.08.2009, 20:21     Русификация консольных приложений #2
Ты имеешь в виду кракозябры вместо русских букв, тогда тебе сюда
Русские шрифты в консоли
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
04.08.2009, 20:38     Русификация консольных приложений #3
Создавай Unicode приложение и текст будет нормально отображаться.
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
04.08.2009, 20:53     Русификация консольных приложений #4
вставляй вначале мейна
C++
1
setlocale( LC_ALL,"Russian" );
и будет тебе счастье
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.08.2009, 22:08     Русификация консольных приложений #5
setlocale ( LC_ALL, "" );
Тогда и на китайском будет работать
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
04.08.2009, 22:13     Русификация консольных приложений #6
odip, не понял?
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.08.2009, 22:16     Русификация консольных приложений #7
Если тебе нужен именно русский - то сойдет второй аргумент "Russian".
Но вообще говоря если ты пишешь локализованную программу - можно указать второй аргумент - "". Это значит что будет браться значение локали, установленное в системе.
В число английской системе - это будет English. Для русских обычно ставят Russian по умолчанию.
Ну а в китайской системе это тоже будет работать
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 09:27     Русификация консольных приложений #8
Цитата Сообщение от odip Посмотреть сообщение
Тогда и на китайском будет работать
Чтобы гарантировано работало на китайском, надо создавать Unicode приложение.
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 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
 Аватар для 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
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
Модератор
 Аватар для Persk
7257 / 3094 / 188
Регистрация: 25.10.2010
Сообщений: 12,437
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++ Выполнение консольных команд в программе
C++ Что стоит изучить, что перейти от консольных приложений к оконным
C++ Идеи простых консольных программ на C++
Выполнение консольных команд C++

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

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

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

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