Russian Qt Forum
Ноябрь 23, 2024, 01:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено] Перевод с русского на английский  (Прочитано 8496 раз)
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) - возвращает пустую строку.

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

Заранее спасибо!
« Последнее редактирование: Ноябрь 23, 2010, 11:11 от nitro2005 » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Октябрь 19, 2010, 11:44 »

у меня всё в исходниках на русском, всё нормально переводится на английский
Записан

Юра.
nitro2005
Гость
« Ответ #2 : Октябрь 19, 2010, 13:46 »

у меня всё в исходниках на русском, всё нормально переводится на английский

а кодировку какую использовали? У меня ощущение, что не хочет переводчик UTF-8 в сырце переводить...
Причем в используемой версии Qt 4.4.3 - и лингвист отказывался нормально понимать сырцы.
Обновил до 4.6.3, вставил CODECFORSRC - лингвист заработал нормально, но в QTranslator не хочет переводить Грустный
« Последнее редактирование: Октябрь 19, 2010, 13:48 от nitro2005 » Записан
crossly
Гость
« Ответ #3 : Октябрь 20, 2010, 16:47 »

а *.qm создался нормально??
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Октябрь 20, 2010, 17:35 »

>>а кодировку какую использовали?
Utf-8
Записан

Юра.
nitro2005
Гость
« Ответ #5 : Октябрь 21, 2010, 17:17 »

а *.qm создался нормально??
qm создался, а нормально или нет - не знаю Улыбающийся
Записан
nitro2005
Гость
« Ответ #6 : Ноябрь 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);
- ошибок не выводит, и все равно не работает Грустный
« Последнее редактирование: Ноябрь 22, 2010, 12:35 от nitro2005 » Записан
serkol
Гость
« Ответ #7 : Ноябрь 22, 2010, 16:48 »

У вас есть в main такое?

Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
Записан
nitro2005
Гость
« Ответ #8 : Ноябрь 23, 2010, 09:26 »

У вас есть в main такое?

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

Попробовал добавить - эффекта нет.
Записан
nitro2005
Гость
« Ответ #9 : Ноябрь 23, 2010, 09:28 »

Прикладываю сырцы тестового проекта.
Записан
uriel
Гость
« Ответ #10 : Ноябрь 23, 2010, 10:24 »

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

P.S. Странно, но у меня он вообще не собирался без включения <cstdio> в main.cpp
Записан
nitro2005
Гость
« Ответ #11 : Ноябрь 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.

Еще раз спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.