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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QObject::tr() и lupdate  (Прочитано 15038 раз)
QCasper
Гость
« Ответ #15 : Сентябрь 08, 2006, 13:54 »

Цитата: "bigirbis"
Можно попробовать вызвать
QString QObject::tr ( const char * sourceText, const char * comment )
и установить второй параметр, что-то вроде того:

Код:
class A
{
...
 QString tr( const char * sourceText ) { return QObject::tr( sourceText, "A" ); }
...
}


не помогает
Записан
itan
Гость
« Ответ #16 : Сентябрь 08, 2006, 14:05 »

По идее, должно помочь вот это:
QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * comment, Encoding encoding, int n )  [static]
Записан
QCasper
Гость
« Ответ #17 : Сентябрь 08, 2006, 14:10 »

Цитата: "itan"
По идее, должно помочь вот это:
QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * comment, Encoding encoding, int n )  [static]


ты сам пробовал?
Записан
itan
Гость
« Ответ #18 : Сентябрь 08, 2006, 14:20 »

нет еще не пробывал, это всего лишь предположение
Записан
bigirbis
Гость
« Ответ #19 : Сентябрь 08, 2006, 14:24 »

Нет, это все не пройдет. Надо внимательнее читать Assistant.
Вот работающий пример:
Код:
QString str = QT_TRANSLATE_NOOP( "class A", "A" );

Вот цитата из Assistant
Цитировать
const char * QT_TRANSLATE_NOOP ( const char * context, const char * sourceText )
Marks the string literal sourceText for dynamic translation in the given context, i.e the stored sourceText will not be altered. The context is typically a class. For example:
    static const char *greeting_strings[] = {
        QT_TRANSLATE_NOOP("FriendlyConversation", "Hello"),
        QT_TRANSLATE_NOOP("FriendlyConversation", "Goodbye")
    };

    QString FriendlyConversation::greeting(int type)
    {
        return tr(greeting_strings[type]);
    }

    QString global_greeting(int type)
    {
        return qApp->translate("FriendlyConversation",
                               greeting_strings[type]);
    }
The macro expands to sourceText.
Записан
noosooth
Гость
« Ответ #20 : Сентябрь 08, 2006, 15:02 »

Цитата: "itan"
А что мне делать, если эта группа классов ни каким боком не наследует QObject (т.е. функция tr() в них не определена) ?


Посмотрите в Assistant макрос Q_DECLARE_TR_FUNCTIONS.
Он вроде как раз для Вашего случая.
Записан
QCasper
Гость
« Ответ #21 : Сентябрь 08, 2006, 15:45 »

вот код

Код:
static const char *pluginName = QT_TRANSLATE_NOOP("PluginName", "TVChat");

extern "C" QString CSISPluginName() {
//return c_PluginName;
return qApp->translate("PluginName", pluginName);
}


- не переводит

эмм... забыл трансляторный файл инсталировать, теперь все работает:

Код:
extern "C" QString CSISPluginName() {
QTranslator myappTranslator;
myappTranslator.load(":translations/tvchat_ru.qm");
qApp->installTranslator(&myappTranslator);
//return c_PluginName;
return qApp->translate("PluginName", pluginName);
}


это мне в каждой функции подобного рода придется инсталить его?

добавлено спустя 18 минут:

 хех Улыбающийся а почему, когда я пихаю

Код:
QTranslator myappTranslator;
myappTranslator.load(":translations/tvchat_ru.qm"); qApp->installTranslator(&myappTranslator);


в глобальную функцию, оно перестает работать? Улыбающийся (в смысле не переводит)
Записан
bigirbis
Гость
« Ответ #22 : Сентябрь 08, 2006, 15:52 »

Инсталлировать транслятор нужно только в main, приблизительно так:
Код:
QApplication a(argc, argv);

QTranslator translator;
translator.load(QString("applicationName_") + QLocale::system().name());
a.installTranslator(&translator);
Записан
QCasper
Гость
« Ответ #23 : Сентябрь 08, 2006, 17:50 »

Цитата: "bigirbis"
Инсталлировать транслятор нужно только в main, приблизительно так:
Код:
QApplication a(argc, argv);

QTranslator translator;
translator.load(QString("applicationName_") + QLocale::system().name());
a.installTranslator(&translator);


ну во-первых не обязательно, а во-вторых, если у меня библиотечка, динамически подключаемая? где там мэйн?
Записан
Вячеслав
Гость
« Ответ #24 : Сентябрь 08, 2006, 20:18 »

Цитата: "QCasper"
Цитата: "bigirbis"
Инсталлировать транслятор нужно только в main, приблизительно так:
Код:
QApplication a(argc, argv);

QTranslator translator;
translator.load(QString("applicationName_") + QLocale::system().name());
a.installTranslator(&translator);


ну во-первых не обязательно, а во-вторых, если у меня библиотечка, динамически подключаемая? где там мэйн?

Да все прекрасон работает и без майна Подмигивающий
Кусок одной из первых поделок на QT было написано для тренеровки - 4 осваивал ...
Код:

bool ClockPlugin::initPlugin(QMainWindow *parent,void* session,QString& intName)
{
_mParent=parent;
QCoreApplication* app=QCoreApplication::instance();

QString locale = QLocale::system().name();
translator=new QTranslator;

if (translator->load(QString("df_iClock_") + locale))
app->installTranslator(translator);

это иницализация плагина - код был содран из assistanta в лоб и заработал Подмигивающий
Записан
bigirbis
Гость
« Ответ #25 : Сентябрь 09, 2006, 13:41 »

Цитировать
Инсталлировать транслятор нужно только в main

Согласен, погорячился, возможна инсталляция нескольких файлов перевода в одном приложении. Но в этом случае во всех фразах должен быть тем или иным способом прописан контекст, т.к. Если вы вызвали статику QObject::tr вне контекста, то все фразы будут в контексте QObject. В этом случае приоритетным является перевод из последнего инсталлированного файла.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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