Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Cyrax от Декабрь 17, 2007, 19:50



Название: Невозможно вывести русский текст без tr()-ов...
Отправлено: Cyrax от Декабрь 17, 2007, 19:50
Заниматься сейчас переводами и tr-ами (хоть так и правильнее) не буду. Русский текст вывожу открыто, например:
Цитировать
dep.setWindowTitle("русский текст");
Естественно, вместо русского текста каракули (просто не бывает, чтобы сразу было как надо - это факт).
Почитал форум, провёл опыты:
Цитировать
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
- ставлю в самом начале функции main (в этой же функции вывожу текст в заголовок окна) - не работает

Цитировать
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
- тоже не работает

Те же 2 варианта (utf8 и Windows-1251) c setCodecForCStrings тоже не работает (получаю козяблики)...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: pastor от Декабрь 17, 2007, 19:59
Какая ось?

ЗЫ: А что так трудно писать tr? Сегодня не буш заниматься переводом интерфейса, а через меняц нужно будет. И что, буш седеть выискивать текст и добавлять tr? Интересный подход, к томуже неправильный...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: ритт от Декабрь 17, 2007, 20:09
дай угадаю...до кутей делфи мучал?


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Cyrax от Декабрь 17, 2007, 20:39
Цитировать
Какая ось?
Windows XP Pro SP2

Цитировать
ЗЫ: А что так трудно писать tr? Сегодня не буш заниматься переводом интерфейса, а через меняц нужно будет. И что, буш седеть выискивать текст и добавлять tr? Интересный подход, к томуже неправильный...
Возможно, и неправильный. Но сейчас так быстрее (не нужно думать над переводом). Потом время будет, сейчас - 3 недели...

Цитировать
дай угадаю...до кутей делфи мучал?
Неа, "запуздыриванием иконки в трей" не занимаюсь. Delphi и Builder мучал когда-то.
До Qt работал на C#. Сейчас пытаюсь достичь того комфорта, который был при C# (пока безуспешно)...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Icoz от Декабрь 17, 2007, 20:48
Попробуй так:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
dep.setWindowTitle( QString( "русский текст" ) );
Потом, по документации надо юзать не "utf8", а "UTF-8"!

А вообще, тебе что, трудно писать tr()? Всего 4 дополнительных символа. И проблем нет, ни сейчас(по форумам лазить не надо), ни потом (интернационализация).


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: pastor от Декабрь 17, 2007, 21:14
Но сейчас так быстрее (не нужно думать над переводом). Потом время будет, сейчас - 3 недели...

Для того чтобы заключить текст в tr над переводом думать ненужно. Ппереведёшь когда наступит время!


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: pastor от Декабрь 17, 2007, 21:21
Цитировать
дай угадаю...до кутей делфи мучал?
Неа, "запуздыриванием иконки в трей" не занимаюсь. Delphi и Builder мучал когда-то.

Так тогда зачем ты держишь у себя это всё в переенных средах?

Цитировать
C:\GPL\Qt\4.3.1\bin;C:\GPL\MinGW\bin;C:\Program Files\ActiveState Komodo Edit 4.1\;c:\program files\Inprise\vbroker\AppServer\bin;C:\PROGRA~1\Borland\CBUILD~1\Bin;C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl;c:\program files\Inprise\vbroker\bin;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Common Files\Autodesk Shared\;C:\Program Files\backburner 2\;C:\Program Files\Common Files\Adobe\AGL;c:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\GPL\MySQL\MySQL Server 5.0\bin

Также почистить INCLUDE и LIB


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Cyrax от Декабрь 17, 2007, 21:39
Цитировать
Так тогда зачем ты держишь у себя это всё в переенных средах?
Потому что у меня это всё установлено. Не сносил, поскольку может понадобиться...

Цитировать
Также почистить INCLUDE и LIB
У меня нет таких...

Цитировать
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
Сейчас это почему-то работает, даже без QString():
Цитировать
dep.setWindowTitle("русский текст");

Цитировать
Для того чтобы заключить текст в tr над переводом думать ненужно. Ппереведёшь когда наступит время!
Ну ладно, пусть будет tr()...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Hellraiser от Декабрь 17, 2007, 21:44
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"))
- ставлю в самом начале функции main (в этой же функции вывожу текст в заголовок окна) - не работает
Это надо устанавливать после создания объекта QApplication !!!


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Cyrax от Декабрь 17, 2007, 22:35
Цитировать
Это надо устанавливать после создания объекта QApplication !!!
Что будет, если поставить до ?
У меня "до" работает...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: ритт от Декабрь 17, 2007, 23:50
у меня - тоже...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Sergeich от Декабрь 18, 2007, 00:25
Текст куда выводишь в консоль? или в гую?


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: vaprele07 от Декабрь 18, 2007, 04:07
Желательно в нужной кодировке сохранять модули перед компиляцией, важный момент при работе с левыми иде типа Q~


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: AlekSi от Декабрь 18, 2007, 08:42
+1 к написанию tr()
Хотя у меня и так работало.


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Вячеслав от Декабрь 18, 2007, 09:41
Да собственно наплевать когда кодек звать до или после создания QApp'а - он играет со статикой класса ;) Но из веселух - кодек один для всей проги - у меня студенты долго репу чесали почему половина виджетов кракозябами рисуеться ;)
PS Или  в каждом нужном месте setCodec звать - IMHO tr проще ;)


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Cyrax от Декабрь 18, 2007, 10:10
Цитировать
Текст куда выводишь в консоль? или в гую?
Всё в GUI.

Цитировать
Желательно в нужной кодировке сохранять модули перед компиляцией, важный момент при
работе с левыми иде

Было подобное со скриптами в MySQL. Сохранил скрипт в DOS-кодировке, потом долго мучил MySQL, гадая почему тот русский текст козябликами выводит...

Цитировать
с левыми иде типа Q~
Q~ - это что ?


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: WW от Декабрь 18, 2007, 12:16
Неа, "запуздыриванием иконки в трей" не занимаюсь. Delphi и Builder мучал когда-то.
До Qt работал на C#. Сейчас пытаюсь достичь того комфорта, который был при C# (пока безуспешно)...
Если жмут сроки - посмотри лучше в сторону Mono & Monodevelop. За 3 недели, что тебе отпущено на "большой проект" ИМХО с кути не разберешся и проект не закончишь. А там - пишешь на любимом шарпе в любимой студии, а потом только компилишь в моно.


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: -QT- от Январь 02, 2008, 21:15
Пока Вы .... :D уважаемые не попробуете
действительную кроссплатформенность то эти
вопросы будут возникать постоянно.


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: juvf от Апрель 24, 2008, 09:32
Цитировать
Невозможно вывести русский текст без tr()-ов...

была такая проблема. решил следующим образом:

QMessageBox::warning(this, QString::fromUtf8("Заголовок русскими буквами"), QString::fromUtf8("Не могу загрузить файл.xml")));

а русские стринги я так объявляю

QString(QString::fromUtf8("Русский текст"));

Пишу в FreeBSD, Kdevelop. (я думаю в винде также можно решить). Если не покатит, то нужно попробывать поменять  fromUtf8() на более подходящее.


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Alex03 от Апрель 24, 2008, 11:04
juvf У Вас исходники в UTF8.

И в Вашем случае полезно заменить QString::fromUtf8() на trUtf8(),тогда будущая локализация будет несколько проще. :)


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: juvf от Апрель 25, 2008, 10:55
Alex03 спасибо за совет. попробую как-нибудь


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Примерный ученик от Май 08, 2008, 10:54
Код:
typedef char cKod[64];
QString    UTFkod=QApplication::trUtf8(
"йцукенгС?щзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМР?ТЬБЮ");

char WinKod[]="йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";

QString strUTF8(cKod kod)
{
  QString s;
  bool flag;
  s="";
  for (int i=0;i<255; i++)
  {
  if (kod[i]==0) break;
  flag=false;
  for (int j=0;j<64;j++)
  {
  if (kod[i]==WinKod[j])
  {
s.append(UTFkod[j]);
flag=true;
break;
  }
  }
  if (flag==false)
  s.append(kod[i]);
  }
  return(s);
}

пришем strUTF8("здесь был Вася");

Не очень красиво, зато работает без проблем
VC6+QT338


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Alex03 от Май 08, 2008, 16:26
...
пришем strUTF8("здесь был Вася");

Не очень красиво, зато работает без проблем
tmikola что это? и зачем?
Средствами Qt всё во всё преобразовывается без проблем, зачем такие извращения?
Читайте асистента в конце то концов.


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Примерный ученик от Май 11, 2008, 19:21
А писать по английски, а потом переводить в Лингвисте, лично для меня - лишний гемморой.
Программа будет только на русском языке.

А так, и тексте программы все по-русски, и на экране все по-русски...


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Alex03 от Май 12, 2008, 06:42
tmikola Если Вы не хотите играть по правилам троллтеха то это не значит что надо изобретать свой велосипед, к тому же кривой и не производительный (уж извините)...
Ещё раз повторю что в Qt всё есть, и изобретать свои алгоритмы конвертации строк ......

Ну хотя бы так можно (насколько я понимаю у Вас исходники в вин1251):

Код:
#include <QApplication>
#include <QPushButton>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

    QPushButton hello("Привет Мир!");
    hello.resize(100, 30);

    hello.show();
    return app.exec();
}

Более прямой способ - хранить исходники в UTF-8 и использовать  trUtf8().


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Примерный ученик от Май 14, 2008, 08:49
Я бы с удовольствием так сделал...
Но как заставить Визуал 6 понимать, что исходники на UTF8?


Название: Re: Невозможно вывести русский текст без tr()-ов...
Отправлено: Примерный ученик от Май 14, 2008, 18:01
tmikola Если Вы не хотите играть по правилам троллтеха то это не значит что надо изобретать свой велосипед, к тому же кривой и не производительный (уж извините)...
Ещё раз повторю что в Qt всё есть, и изобретать свои алгоритмы конвертации строк ......

Ну хотя бы так можно (насколько я понимаю у Вас исходники в вин1251):

Код:
#include <QApplication>
#include <QPushButton>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

    QPushButton hello("Привет Мир!");
    hello.resize(100, 30);

    hello.show();
    return app.exec();
}

Более прямой способ - хранить исходники в UTF-8 и использовать  trUtf8().

Этот способ меня полностью устраивает. Спасибо ;D