Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Mikor от Октябрь 15, 2007, 13:53



Название: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Mikor от Октябрь 15, 2007, 13:53
Вот есть QFileDialog, он конечно английский. У меня в программе используется свой *.ts файл для перевода своих строчек. В Qt валяется еще qt_ru.ts с переводом всего, что есть в самих Qt*.dll. Как сделать, чтобы в программе объединялся мой собственный перевод и стандартный Qt?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: QCasper от Октябрь 15, 2007, 14:12
Скопировать qt_ru.ts к себе в папку (или в одну из подпапок) с проектом и проделать с ним те же манипуляции, что и с Вашим файлом перевода.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Sergey B. от Октябрь 15, 2007, 14:35
Вам нужны файлы с расширением qm.
qt_ru.qm
и ваш_файл_перевода_проги.qm.
Просто скопируйте в папку с программой и напишите код загрузки в ассистенте есть пример.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: alex12 от Октябрь 15, 2007, 15:42
Я делаю так:

в main()
Код:
int main(int argc, char *argv[])
{
  QApplication application( argc, argv);
  QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

  QTranslator *qt_translator = new QTranslator;
  if ( qt_translator->load( ":tr/qt_ru.qm" ) )
  { application.installTranslator( qt_translator );
  }
 
  ...

}

и в .qrc
Код:
<RCC>
    <qresource prefix="/tr" >
        <file>qt_ru.qm</file>
    </qresource>
</RCC>

Все работает правильно.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: QCasper от Октябрь 15, 2007, 21:47
не понимаю какое отношение к теме имеют строки:

Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Sergey B. от Октябрь 15, 2007, 22:25
Мне кажется никакого, если писать всё на английском, а потом лингвистом пройтись, то всё работает прекрасно и без установки кодеков.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Mikor от Октябрь 16, 2007, 00:36
Ну один QTranslator я могу загрузить. Мне надо чтобы qt_ru.qm и мойфайл.qm грузились вместе в программе


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: pastor от Октябрь 16, 2007, 01:13
Ну один QTranslator я могу загрузить. Мне надо чтобы qt_ru.qm и мойфайл.qm грузились вместе в программе

А какая проблема использовать несколько QTranslator для подгрузки qt_ru.qm и мойфайл.qm?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Mikor от Октябрь 16, 2007, 03:15
Извините, не обратил внимание на то, что можно несколько одновременно устанавливать


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: juvf от Октябрь 16, 2007, 06:42
подгрузил qt_ru.qm который находился в исходниках qt (qt-x11-opensource-src-4.2.2). Но там не полный перевод. только процентов 50 переведено. Например в QPrintDialog нет перевода "Print to file". Сижу с лингвистом и перевожу недостающий перевод. А есть qt_ru.qm или qt_ru.ts c полным переводов всех текстов диалогов Qt?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: juvf от Октябрь 16, 2007, 08:57
И вот ище:
как заставить QFile::errorString() возвращять не "No such file or directory", а "Не могу найти файл или папку"?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: QCasper от Октябрь 16, 2007, 12:31
И вот ище:
как заставить QFile::errorString() возвращять не "No such file or directory", а "Не могу найти файл или папку"?


Перевести QFile :)


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: juvf от Октябрь 18, 2007, 07:59
Цитировать
Перевести QFile

в исходниках Qt чтоли? и перекомпилять qt (((. А других путей нет?



Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: QCasper от Октябрь 18, 2007, 08:29
Цитировать
Перевести QFile

в исходниках Qt чтоли? и перекомпилять qt (((. А других путей нет?



Ой, не QFile, а QIODevice. Зачем в исходниках, всё в том же самом qt_ru.ts.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: juvf от Октябрь 18, 2007, 09:47
В qt_ru.ts у меня вот что.

Цитировать
<context>
    <name>QIODevice</name>
....
   <message>
        <source>No such file or directory</source>
        <translation>Нет такого файла или папки</translation>
    </message>
....
</context>

С помощью лингвиста перевел qt_ru.ts и сделал qt_ru.qm и подгрузил к приложению. Все равно не работает. ((


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: QCasper от Октябрь 18, 2007, 10:37
В qt_ru.ts у меня вот что.

Цитировать
<context>
    <name>QIODevice</name>
....
   <message>
        <source>No such file or directory</source>
        <translation>Нет такого файла или папки</translation>
    </message>
....
</context>

С помощью лингвиста перевел qt_ru.ts и сделал qt_ru.qm и подгрузил к приложению. Все равно не работает. ((

Не работает только этот перевод, или вообще никакие?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: juvf от Октябрь 18, 2007, 11:39
не знаю.
сообщения от QFileDialog и от QFilePrinter - работают на русском. А из сообщений от QIODevice я другие сообщения не проверял, т.к. у меня есть функция на открытие файла, на запись нет. А другие сообщения от QOIDevice - это запись. Надо код править чтоб ошибку создать. Ну если это поможет делу то вызову все сообщения(кроме unknow error)  от QIODevice и проверю. Но мне кажется что они тоже будут на аглицком.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: QCasper от Октябрь 18, 2007, 12:15
Хм, действительно не работает. Значит, судя по всему, баг. Подобный баг есть и в QHttp. Выход я нашел один: в случае с errorString() можно переводить так:

Код:
QFile f;
qApp->translate("QIODevice", f.errorString().toAscii().constData());


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Emc от Октябрь 18, 2007, 17:02
только что заметил, под виндой не работает след. перевод
<message>
<source>Ctrl+Space</source>
<translation>Ctrl+Пробел</translation>
</message>
после перевода выглядит как "Ctrl+"
(под linux все нормально) или shortcut'ы вообще нельзя переводить?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Примерный ученик от Май 11, 2008, 12:05
В qt_ru.ts у меня вот что.

Цитировать
<context>
    <name>QIODevice</name>
....
   <message>
        <source>No such file or directory</source>
        <translation>Нет такого файла или папки</translation>
    </message>
....
</context>

С помощью лингвиста перевел qt_ru.ts и сделал qt_ru.qm и подгрузил к приложению. Все равно не работает. ((

подгрузил к приложению - это положил в папку с исполняемым файлом?

if ( qt_translator->load( "с:/myfolder/qt_ru.qm" ) )
Важно, чтобы при загрузке транслятора файл был найден!!!

У меня все сработало... VC60, QT338, winxp


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Hort от Октябрь 14, 2008, 22:31
А какая проблема использовать несколько QTranslator для подгрузки qt_ru.qm и мойфайл.qm?
а можно необходимые строки скопировать в свой файл. просто желательно чтобы 1 файлом перевод был


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: ритт от Октябрь 15, 2008, 02:05
а где такое сказано?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Alex03 от Октябрь 15, 2008, 05:40
И вот ище:
как заставить QFile::errorString() возвращять не "No such file or directory", а "Не могу найти файл или папку"?
Это не qt-ошибка а системная. Под *nix-ами как правило используют strerror(errno).
Линуксячий man говорит:
Цитировать
The  strerror()  function  returns  a  string describing the error code passed in the argument errnum, possibly using the LC_MESSAGES part of the current  locale to select the appropriate language. This string must not be modified by the application, but may be modified by a subsequent call to perror() or strerror().  No library function will modify this string.

Т.е. если у Вас нормально настроены локали, в том числе LC_MESSAGES (или LC_ALL) и если в системе установлены файлы переводов сообщений то всё должно быть ОК. Просто в шеле "cat non_existing_file" на каком языке матерится?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: Alex03 от Октябрь 15, 2008, 06:22
Упс....
Посмотрел QString qt_error_string(int errorCode)...
для четырёх кодов есть:
Код:
switch (errorCode) {
    case 0:
        break;
    case EACCES:
        s = QT_TRANSLATE_NOOP("QIODevice", "Permission denied");
        break;
    case EMFILE:
        s = QT_TRANSLATE_NOOP("QIODevice", "Too many open files");
        break;
    case ENOENT:
        s = QT_TRANSLATE_NOOP("QIODevice", "No such file or directory");
        break;
    case ENOSPC:
        s = QT_TRANSLATE_NOOP("QIODevice", "No space left on device");
        break;
для всего остального берётся из системы... НО вот дальше....

Код:
    if (s)
        // ######## this breaks moc build currently
//         ret = QCoreApplication::translate("QIODevice", s);
        ret = QString::fromLatin1(s);
Т.е. именно эти 4 сообщения гарантированно никогда не переводятся!!! (по крайней мере в 4.3.3)



Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: olegmar от Февраль 23, 2009, 09:20
Вообще-то работает, но только для кутёвых диалогов (почему-то!?!). То есть для QPrintPreviewDialog всё отлично, а вот для PrintDialog уже не работает((


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: faithman от Март 03, 2009, 18:12
У меня тож проблема:
Связка QFileSystemModel+QTreeView: файл перевода библиотеки стоит,транслятор для Qt подключен,переключение на русский работает,но интересует
,в каком месте искать такие строки выдаваемые в QTreeView в колонке "Тип" - Drive , File Folder , ini File , jpg File...

Искал в QFileSystemModel там перевёл только колонки,а эти вещи где ? Случаем это не из винды инфа берётся ?


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: lit-uriy от Март 03, 2009, 18:41
2 faithman, запусти поиск в Лингвисте, если нету, то может из ОСьки, а может надоступно для перевода.


Название: Re: Подскажите с локализацией строк самой библиотеки Qt
Отправлено: faithman от Март 03, 2009, 20:45
2 faithman, запусти поиск в Лингвисте, если нету, то может из ОСьки, а может надоступно для перевода.

Нашёл методом тыка:

Это QFileDialog.Надо было только глянуть в Assistant и почитать.