Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: перевод меню ....
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
KLIF
У меня есть мое контекстное меню , я написал его пункты на украинском языке а оно мне выдает только знаки вопросов ..
Что нужно сделать что бы отображалось на украинском ... и то же самое для контекстного меню по дефолту ... ?

хотя на английском все коректно все отображает , а стоит сменить на урк. или рус сразу заменяет на знаки вопроса или левые символы ...

я делал :
1) QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

2) через QTranslator ;

3) QAction *edit = new QAction (tr("&??????????") , this ) ;

4) QAction *edit = new QAction (QObject::tr("&??????????") , this ) ;

Причем заменило все не англ. слова во всем коде ....
не могу ни чего сделать ....
abc
во всех прогах делаю так в конструкторе класса:
codec=QTextCodec::codecForName("Windows-1251");
QTextCodec::setCodecForTr(codec);
Всё русское в tr() будет русским, украинским не знаю
Алексей1153
Насчёт украинского не знаю тоже, но вот с русским на "ура" прокатило следующее:

1) все файлы проекта - в кодировке UTF-8
2) кодировка среды по умолчанию - UTF-8
3) строки оборачиваю в QString::fromUtf8("русский текст")

- наткнулся на этот вариант, пытаясь сделать универсально для винды и для линукса. Больше вроде не было проблем :)

Кстати, интересно, правильно ли я сделал, или оно "просто пока работает" ?
KLIF
Цитата(Алексей1153 @ 5.2.2011, 17:28) *
Насчёт украинского не знаю тоже, но вот с русский на "ура" прокатило следующее:

1) все файлы проекта - в кодировке UTF-8
2) кодировка среды по умолчанию - UTF-8
3) строки оборачиваю в QString::fromUtf8("русский текст")

- наткнулся на этот вариант, пытаясь сделать универсально для винды и для линукса. Больше вроде не было проблем :)

Кстати, интересно, правильно ли я сделал, или оно "просто пока работает" ?

Все вопрос решет ... Прошу прощения за свою не терпимость и панику , просто сроки сдачи проекта поджимают ...
это был лаг среды , пере собрал , пере запустил Qt и все пошло ....

П.С
Всем спасибо !!!
Litkevich Yuriy
Цитата(abc @ 5.2.2011, 18:30) *
во всех прогах делаю так в конструкторе класса:
а зачем в конструкторе класса?
Это надо делать в функции main(), и желательно до создания окна.
abc
Цитата(Litkevich Yuriy @ 5.2.2011, 19:06) *
а зачем в конструкторе класса?
Это надо делать в функции main(), и желательно до создания окна.

Так работает только для окна, создаваемого в main
Почему желательно до?
Litkevich Yuriy
Цитата(abc @ 5.2.2011, 21:49) *
Почему желательно до?
потому-что в реальной программе могут быть и константы строковые, которые создаются до создания окна.
abc
сделал в main до создания QApplication - заработало во всём приложении
Obey-Kun
Цитата
Кстати, интересно, правильно ли я сделал, или оно "просто пока работает" ?

Всё правильно, юникод это хорошо.
Litkevich Yuriy
Цитата(Алексей1153 @ 5.2.2011, 19:28) *
Кстати, интересно, правильно ли я сделал, или оно "просто пока работает" ?
троли утверждают, что в коде не должно быть не ASCII символов. А если их сильно надо тужа воткнуть, то нужно использовать их коды.
Но я пока игнорирую это. Т.к. в GCC всё нормально кушается, если код в UTF-8 без маркера.
Алексей1153
Цитата(Litkevich Yuriy @ 6.2.2011, 9:46) *
троли утверждают

Вот , к примеру, был бы конвертер - выделил мышой строку, нажал кнопку трансформации "эксейп-октанты"<->"читабельный вид" . Это было бы дело. Вопрос только - куда его и как прикручивать
Litkevich Yuriy
Цитата(Алексей1153 @ 6.2.2011, 13:47) *
Вот , к примеру, был бы конвертер - выделил мышой строку, нажал кнопку трансформации "эксейп-октанты"<->"читабельный вид" . Это было бы дело. Вопрос только - куда его и как прикручивать
да, возможно, еслиб так было, я бы не писал по-русски в коде :)
Алексей1153
кстати, с неделю назад, когда боролся с кодировками, была отчаянная попытка такой конвертер сделать. Сейчас на скорую руку доделал - можно потестировать (под винду, писалось в студии)

http://files.shelek.su/limited/private-fil...ustext_octo.zip


\320\272\321\201\321\202\320\260\321\202\320\270, \321\201 \320\275\320\265\320\264\320\265\320\273\321\216 \320\275\320\260\320\267\320\260\320\264, \320\272\320\276\320\263\320\264\320\260 \320\261\320\276\321\200\320\276\320\273\321\201\321\217 \321\201 \320\272\320\276\320\264\320\270\321\200\320\276\320\262\320\272\320\260\320\274\320\270, \320\261\321\213\320\273\320\260 \320\276\321\202\321\207\320\260\321\217\320\275\320\275\320\260\321\217 \320\277\320\276\320\277\321\213\321\202\320\272\320\260 \321\202\320\260\320\272\320\276\320\271 \320\272\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200 \321\201\320\264\320\265\320\273\320\260\321\202\321\214. \320\241\320\265\320\271\321\207\320\260\321\201 \320\275\320\260 \321\201\320\272\320\276\321\200\321\203\321\216 \321\200\321\203\320\272\321\203 \320\264\320\276\320\264\320\265\320\273\320\260\320\273 - \320\274\320\276\320\266\320\275\320\276 \320\277\320\276\321\202\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\321\202\321\214 (\320\277\320\276\320\264 \320\262\320\270\320\275\320\264\321\203, \320\277\320\270\321\201\320\260\320\273\320\276\321\201\321\214 \320\262 \321\201\321\202\321\203\320\264\320\270\320\270)

:)
Litkevich Yuriy
Цитата(Алексей1153 @ 6.2.2011, 16:12) *
под винду, писалось в студии
бинарь, чтоли?
Алексей1153
ага, экзешник
rrmini
сделал так:
int main(int argc, char *argv[])
{


    QTextCodec *russianCodec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(russianCodec);

    QTranslator qtTranslator;
         qtTranslator.load("qt_" + QLocale::system().name(),
                 QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    QApplication a(argc, argv);
         a.installTranslator(&qtTranslator);

         QTranslator myappTranslator;
         myappTranslator.load("myapp_" + QLocale::system().name());
         a.installTranslator(&myappTranslator);

    MainWindow w;
    w.resize(900, 600);
    w.show();
    return a.exec();
}


все хорошо работает, т.е. все надписи tr("русские буквы") отображаются нормально.

без перевода остались только кнопки :
QMessageBox::StandardButton ret;
    ret = QMessageBox::warning(this, tr("Внимание"),
                 tr("Закончить рабоу ?"),
                 QMessageBox::Yes | QMessageBox::No
                 );

народ хочет видеть "Да" или "нет", а слово "Cancel" вообще тоску наводит :)
в убунте как то без проблем все перевелось, а вот с виндой затрудняюсь.
помогите пожалуйста.
спасибо!
Kagami
В QLibraryInfo::TranslationsPath есть файлик qt_ru.qm?
rrmini
не совсем понял вопрос.
qt_ru.qm не нашел. есть в C:\Qt\4.6.3\translations qt_ru.ts

файл qt_ru.ts добавил в каталог своего проекта.
в файл проекта .pro добавил строку

TRANSLATIONS = qt_ru.ts

очистил, выполнил qmake, все пересобрал.
вроде как работает.
Litkevich Yuriy
rrmini, надо было его просто скомпилировать в qm-файл. Лингвистом (меню "Файл") или консольной программой lrelease (из %QTDIR%\bin)
rrmini
удалил строку TRANSLATIONS = qt_ru.ts из файла проекта
в каталог проекта скопировал из usr/share/qt4/translations/ qm-файл

пересобрал.
тоже работает.
rrmini
Еще исправления:

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

    QTextCodec *russianCodec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(russianCodec);

    QTranslator qtTranslator;
    qtTranslator.load("qt_ru.qm"/* + QLocale::system().name()*/,""
                 /*QLibraryInfo::location(QLibraryInfo::TranslationsPath)*/);
         a.installTranslator(&qtTranslator);

         QTranslator myappTranslator;
         myappTranslator.load("myapp_" + QLocale::system().name());
         a.installTranslator(&myappTranslator);

    MainWindow w;
    w.resize(900, 600);
    w.show();
    return a.exec();
}


теперь при переносе на другой комп. тоже работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.