Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: nitro2005 от Октябрь 19, 2010, 09:38



Название: [решено] Перевод с русского на английский
Отправлено: nitro2005 от Октябрь 19, 2010, 09:38
Кто-нибудь сталкивался?
Есть довольно здоровый проект на русском, весь текст в tr(). Кодировка везде - UTF-8.
Сгенерил перевод, предварительно вставив в pro строчки:
CODECFORSRC=UTF-8
TRANSLATIONS=../bin/gui_en.ts

При старте делаю setCodecForTr, setCodecForCString в UTF-8.
Потом:
QTranslator appTranslator;
appTranslator.load("gui_en");
app->installTranslator(&appTranslator);

Не переводит :-(
Проверил appTranslator.translate() - обрабатывает нормально только те фразы, которые в исходнике также на английском. Если sourceText на русском (подсовываю тоже в UTF-8) - возвращает пустую строку.

Переводить исходник на английский не вариант - слишком большой объем.

Заранее спасибо!


Название: Re: Перевод с русского на английский
Отправлено: lit-uriy от Октябрь 19, 2010, 11:44
у меня всё в исходниках на русском, всё нормально переводится на английский


Название: Re: Перевод с русского на английский
Отправлено: nitro2005 от Октябрь 19, 2010, 13:46
у меня всё в исходниках на русском, всё нормально переводится на английский

а кодировку какую использовали? У меня ощущение, что не хочет переводчик UTF-8 в сырце переводить...
Причем в используемой версии Qt 4.4.3 - и лингвист отказывался нормально понимать сырцы.
Обновил до 4.6.3, вставил CODECFORSRC - лингвист заработал нормально, но в QTranslator не хочет переводить :(


Название: Re: Перевод с русского на английский
Отправлено: crossly от Октябрь 20, 2010, 16:47
а *.qm создался нормально??


Название: Re: Перевод с русского на английский
Отправлено: lit-uriy от Октябрь 20, 2010, 17:35
>>а кодировку какую использовали?
Utf-8


Название: Re: Перевод с русского на английский
Отправлено: nitro2005 от Октябрь 21, 2010, 17:17
а *.qm создался нормально??
qm создался, а нормально или нет - не знаю :)


Название: Re: Перевод с русского на английский
Отправлено: nitro2005 от Ноябрь 22, 2010, 12:26
Отчаялся... Может кто кинуть работающий пример? Или подсказать как тестовый заставить работать?

main.cpp:
Код:
#include <QtGui/QApplication>
#include <QTextCodec>
#include <QTranslator>
#include <QLocale>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTranslator qtTranslator;
    if (!qtTranslator.load("test_" + QLocale::system().name()))
      printf("error!\r\n");
    printf("%s\r\n", (const char *)QLocale::system().name().toUtf8());
    app.installTranslator(&qtTranslator);
    MainWindow w;
    w.setWindowTitle(QObject::tr("Фигня"));
    w.show();
    return app.exec();
}

test.pro:
Код:
TARGET = test
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp
HEADERS  += mainwindow.h
FORMS    += mainwindow.ui
TRANSLATIONS = test_en.ts
CODECFORSRC = UTF-8
CODECFORTR = UTF-8

test_en.ts:
Код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en_US">
<defaultcodec>UTF-8</defaultcodec>
<context>
    <name>QObject</name>
    <message>
        <location filename="main.cpp" line="10"/>
        <source>Фигня</source>
        <translation>Fignya</translation>
    </message>
</context>
</TS>

Перед запуском делаю
Код:
export LANG=en_US.UTF-8
Даже если в коде сделаю:
Код:
    QTranslator qtTranslator;
    if (!qtTranslator.load("test_en"))
      printf("error!\r\n");
    app.installTranslator(&qtTranslator);
- ошибок не выводит, и все равно не работает :(


Название: Re: Перевод с русского на английский
Отправлено: serkol от Ноябрь 22, 2010, 16:48
У вас есть в main такое?

Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));


Название: Re: Перевод с русского на английский
Отправлено: nitro2005 от Ноябрь 23, 2010, 09:26
У вас есть в main такое?

Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

Попробовал добавить - эффекта нет.


Название: Re: Перевод с русского на английский
Отправлено: nitro2005 от Ноябрь 23, 2010, 09:28
Прикладываю сырцы тестового проекта.


Название: Re: Перевод с русского на английский
Отправлено: uriel от Ноябрь 23, 2010, 10:24
Qm-файл в архиве почему-то неправильный. Русская строка там явно не в UTF-8, поэтому он и не может найти соответствия в рантайме. Если сделать ещё раз "lrelease test.pro" и насильно заставить грузить нужный файл, то всё заработает.

P.S. Странно, но у меня он вообще не собирался без включения <cstdio> в main.cpp


Название: Re: Перевод с русского на английский
Отправлено: nitro2005 от Ноябрь 23, 2010, 10:34
Большое Человеческое Спасибо!
На компутере стояла версия Qt 4.4.3 как основная, на ней переводы в Utf-8 не работали. Использовал qmake и linguist 4.7.0 - ts сгенерился нормально, а вместо lrelease из 4.7.0 делал "Скомпилировать" в linguist-е из 4.7.0, а он видимо вызывал старый lrelease.

Еще раз спасибо!