Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2015, 18:42   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию Qt перевод

Код:
idget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowTitle(tr("Test translate"));

    QPushButton *btn_ok = new QPushButton(tr("Ok"));
    QPushButton *btn_cncel = new QPushButton(tr("Cancel"));

    QRadioButton *rad_en = new QRadioButton(tr("English"));
    rad_en->setChecked(true);
    QRadioButton *rad_ru = new QRadioButton(tr("Russian"));
    QGroupBox *gb = new QGroupBox(tr("language"));
    QVBoxLayout *vb_rad = new QVBoxLayout;
    vb_rad->addWidget(rad_en);
    vb_rad->addWidget(rad_ru);
    gb->setLayout(vb_rad);

    connect(rad_en, SIGNAL(toggled(bool)), SLOT(slotRetranslate(bool)));

    QVBoxLayout *vb = new QVBoxLayout;
    vb->addWidget(new QLabel(tr("Hello World")));
    vb->addWidget(new QLabel(tr("My programm")));
    QHBoxLayout *hb = new QHBoxLayout;
    hb->addWidget(btn_ok);
    hb->addWidget(btn_cncel);
    hb->addWidget(gb);
    vb->addLayout(hb);
    setLayout(vb);
}

void Widget::slotRetranslate(bool b)
{
    if(!b)
    {
    }
}
Делаю как написано, то что надо перевести передал в функцию tr.
Как я понял далее мне надо запустить утилиту lupdate, которая должна сгенерировать файл .ts. Только вот сколько я ни читал, так и не понял как мне ее запустить
Ткните пальцем, пожалуйста

Последний раз редактировалось SAMOUCHKA; 01.09.2015 в 18:45.
SAMOUCHKA вне форума Ответить с цитированием
Старый 01.09.2015, 19:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

http://doc.qt.io/qt-4.8/linguist-manager.html
p51x вне форума Ответить с цитированием
Старый 20.10.2015, 11:10   #3
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Все равно не переводит.
В Qt Creator, нажал инструменты-внешние-Linguist-обновить перевод. Получился файл test_ru.ts. Открыл его в Qt Linguist.
В Qt Linguist перевел каждую фразу, скомпилировал. Получился файл test_ru.qm.

Код:
#-------------------------------------------------
#
# Project created by QtCreator 2015-10-20T09:49:38
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

TRANSLATIONS = test_ru.ts
Код:
#include "widget.h"
#include <QApplication>
#include <QTranslator>
#include <QDebug>

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

    QString system_name = QLocale::system().name();
    qDebug()<<"system loc:"<<system_name;
    QTranslator translator;
    translator.load("test_" + system_name);
    a.installTranslator(&translator);

    Widget w;
    w.show();

    return a.exec();
}
Код:
#include "widget.h"
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QLabel *lbl = new QLabel(tr("Helo world"));

    QPushButton *btn = new QPushButton(tr("Button"));

    QVBoxLayout *vb = new QVBoxLayout;
    vb->addWidget(lbl);
    vb->addWidget(btn);
    setLayout(vb);
}
В чем проблема?
ОС Ubuntu
SAMOUCHKA вне форума Ответить с цитированием
Старый 20.10.2015, 13:21   #4
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

вот файл .ts
Код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
    <name>Widget</name>
    <message>
        <location filename="widget.cpp" line="9"/>
        <source>Helo world</source>
        <translation>Здравствуй мир</translation>
    </message>
    <message>
        <location filename="widget.cpp" line="11"/>
        <source>Button</source>
        <translation>Кнопка</translation>
    </message>
    <message>
        <location filename="widget.cpp" line="13"/>
        <source>RU</source>
        <translation>РУ</translation>
    </message>
    <message>
        <location filename="widget.cpp" line="16"/>
        <source>EN</source>
        <translation>ЕН</translation>
    </message>
</context>
</TS>
к стати translation.load(), возвращает false
может еще и в файле .pro файл .qm прописывать надо?

Проблему решил. Файл перевода не в том месте лежал

Последний раз редактировалось SAMOUCHKA; 20.10.2015 в 15:36.
SAMOUCHKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод на с++ kostan3 Общие вопросы C/C++ 2 19.03.2014 22:21
Перевод на С++ spinogryz_ua Помощь студентам 2 25.12.2012 06:52
Перевод на Си istavzev Помощь студентам 1 23.05.2012 21:04
Перевод AdDa Помощь студентам 1 01.06.2011 03:22
перевод historic Помощь студентам 0 05.10.2010 00:12