LINUX.ORG.RU

QMessageBox. Вывод русским языком.


0

0

Здравствуйте...

void Form::on_pushButton_clicked()
{
	QMessageBox::information(this, tr("Русские буквы"), tr("Русские буквы"));
	pushButton->setText(tr("Русские буквы"));
}

Почему то выводит всевозможные аброкатабры (что на кнопку, что на Мессагу)... Как быть правильно? Прошу помощи...
anonymous

потому что должно быть так:
        QMessageBox::information(this, tr("English letters"), tr("English letters"));
	pushButton->setText(tr("English letters"));
И делается файл перевода!

UVV ★★★★★
()
Ответ на: комментарий от anonymous

Может поможет что то  типа:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));

Поддерживаются:
Apple Roman 
Big5 
Big5-HKSCS 
EUC-JP 
EUC-KR 
GB18030-0 
IBM 850 
IBM 866 
IBM 874 
ISO 2022-JP 
ISO 8859-1 to 10 
ISO 8859-13 to 16 
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml 
JIS X 0201 
JIS X 0208 
KOI8-R 
KOI8-U 
MuleLao-1 
ROMAN8 
Shift-JIS 
TIS-620 
TSCII 
UTF-8 
UTF-16 
UTF-16BE 
UTF-16LE 
UTF-32 
UTF-32BE 
UTF-32LE 
Windows-1250 to 1258 
WINSAMI2 

Fastman
()
Ответ на: комментарий от anonymous

> Может на лету можно как-то в UTF перегнать?
Можно, но не нужно. Как - написали выше. Не создавайте проблем ни себе, ни другим!

UVV ★★★★★
()
Ответ на: комментарий от UVV

Спасибо большое. Помогло QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));

Но вопрос... Я сейчас под виндой. Аброкотабр при таком подходу под линуксом не будет?

Так всё же что лучше? Файл перевода делать или QTextCodec.

Приложение переводиться на другие языки не планируется.. Но должно работать одинаково красиво под Вин и Лин.

anonymous
()
Ответ на: комментарий от anonymous

Именно поэтому UVV тебе изначально правильно объяснил
что нужно сделать. Внимательно читаем Internationalization with Qt.

Fastman
()
Ответ на: комментарий от Fastman

Человек простым русским языком говорит - интернационализация ему не нужна! Нафига такой геморой - писать на английском + отдельный файл перевода!

anonymous
()
Ответ на: комментарий от anonymous

Так будет с QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251")); работать под Linux? Нет возможности сейчас попробовать... Просто смущает cp1251. Ведь под линем UTF-8 или 16. Не знаю точно... Под Windows только cp1251 работает.

anonymous
()
Ответ на: комментарий от anonymous

Нормально будет, до тех пор пока у тебя в исходниках русский текст набран в этой кодировке. Но вообще текст прям в программе - это не очень хорошо, лучше когда в ресурсах...

imp ★★
()
Ответ на: комментарий от anonymous

под Мас-ом работает, под FreeBSD 6.3- тоже работает, нет причин по которым под Linux не будет работать.

Fastman
()
Ответ на: комментарий от anonymous

> Приложение переводиться на другие языки не планируется.
> Так будет с QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251")); работать под Linux?
Вообще это два противоречащих друг другу утверждения. Если в линуксе окружение cp1251 (что вряд ли), то работать будет. У меня koi8-r, у кого-то utf-8. И что же делать? Будете каждый раз проверять, у кого какое окружение? Зачем. В qt уже это реализовали за вас. А файл перевода пишется за 10-15 минут вместе с чтением документации, как это делается.

UVV ★★★★★
()
Ответ на: комментарий от anonymous

> Человек простым русским языком говорит - интернационализация ему не нужна! Нафига такой геморой - писать на английском + отдельный файл перевода!
Детсад, младшая группа. Честное слово.

UVV ★★★★★
()
Ответ на: комментарий от imp

> Нормально будет, до тех пор пока у тебя в исходниках русский текст набран в этой кодировке. Но вообще текст прям в программе - это не очень хорошо, лучше когда в ресурсах...
+1

UVV ★★★★★
()
Ответ на: комментарий от anonymous

>>Человек простым русским языком говорит - интернационализация ему не нужна!

он хочет вывести текст на русском. Это называется интернационализация. Следовательно интернационализация ему нужна.

>>Нафига такой геморой - писать на английском + отдельный файл перевода!

мухи отдельно, котлеты отдельно. Это только в винде в exe-шник пихают всё подряд, и не брезгуют в билдере русские мессаджбоксы делать. А здесь - exe-шник, переводы и документация - разные сущности.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Да, реально знания Qt у меня на уровне детского сада. Изучил документацию - использовать файл переводов - никаких проблем. Но мне ближе, чтобы основной интерфейс был на русском языке. Т.е. если делать перевод, то с русского на английский. (Русский больше английского уважаю).

План действий.

1. Задаём QTextCodec::codecForName("CP1251")); 2. Везде в tr передаём русский. 3. Потом создаём файл перевода и т.д..

В моём представлении именно так должно быть.

Попутно вопрос...

pushButton->setText(tr("%1").arg(lineEdit->text())); //извращенский способ

Как по другому в tr передать содержимое lineEdit? По всей видимости было бы правильно lineEdit->text() преобразовать в QString.

Как быть в общем правильно?

anonymous
()
Ответ на: комментарий от anonymous

Твоя проблема решается только хирургическим вмешательством :-(

r_asian ★☆☆
()
Ответ на: комментарий от anonymous

>2. Везде в tr передаём русский.

А зачем тебе в этом случае tr?

V_L_A_D ★★
()
Ответ на: комментарий от UVV

> Если в линуксе окружение cp1251 (что вряд ли), то работать будет. У меня koi8-r, у кого-то utf-8. И что же делать? Будете каждый раз проверять, у кого какое окружение?

каким боком QTextCodec::setCodecForCStrings относится к вашей локали?

uj2 ★★★
()
Ответ на: комментарий от uj2

> каким боком QTextCodec::setCodecForCStrings относится к вашей локали?
Не относится. Это я сам себя запутал! ;)

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