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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: tr() и static const char *  (Прочитано 11900 раз)
kirill
Гость
« : Сентябрь 08, 2009, 15:41 »

Почему не работает такая конструкция?
Код
C++ (Qt)
static const char * c_Sentence = "My Sentence";
 
MyClass::MyClass() : QObject()
{
     QLabel * label = new QLabel(tr(c_Sentence), this);
}
 
запускаю lupdate -verbose на данный код и вижу 0 новых строк для перевода. tr() игнорирует const char *.
Как заставить его это понимать?
С define тоже не прокатило.
Записан
BRE
Гость
« Ответ #1 : Сентябрь 08, 2009, 15:50 »

А ты почитай про Internationalization with Qt в assistent, особое внимание удели макросам QT_TR_NOOP и QT_TRANSLATE_NOOP.  Подмигивающий
Записан
kirill
Гость
« Ответ #2 : Сентябрь 08, 2009, 18:32 »

А ты почитай про Internationalization with Qt в assistent, особое внимание удели макросам QT_TR_NOOP и QT_TRANSLATE_NOOP.  Подмигивающий
Читал.
Делал так.
Код
C++ (Qt)
static const char * c_Sentence = QT_TR_NOOP("My Sentence");
MyClass::MyClass() : QObject()
{
     QLabel * label = new QLabel(tr(c_Sentence), this);
}


lupdate тогда видит "My Sentence", НО tr(c_Sentence) игнорируется. Ставлю напрямую tr("My Sentence") - все работает.
Что не так?
Записан
BRE
Гость
« Ответ #3 : Сентябрь 08, 2009, 18:37 »

Читал.
Делал так.
Код
C++ (Qt)
static const char * c_Sentence = QT_TR_NOOP("My Sentence");
MyClass::MyClass() : QObject()
{
     QLabel * label = new QLabel(tr(c_Sentence), this);
}


lupdate тогда видит "My Sentence", НО tr(c_Sentence) игнорируется. Ставлю напрямую tr("My Sentence") - все работает.
Что не так?
А вот это читал?  Подмигивающий
Код
C++ (Qt)
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]);
}
 
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Сентябрь 08, 2009, 23:27 »

>>НО tr(c_Sentence) игнорируется.
А оно и должно игнорироватся, см. описание функции QObject::tr(const char * sourceText, const char * disambiguation = 0, int n = -1)

Т.е. переменные она не принимает
Записан

Юра.
kirill
Гость
« Ответ #5 : Сентябрь 09, 2009, 05:29 »

>>НО tr(c_Sentence) игнорируется.
А оно и должно игнорироватся, см. описание функции QObject::tr(const char * sourceText, const char * disambiguation = 0, int n = -1)

Т.е. переменные она не принимает

А где у меня переменные? static const char * передаю
Записан
kirill
Гость
« Ответ #6 : Сентябрь 09, 2009, 05:35 »


А вот это читал?  Подмигивающий

Спасибо, ступил, так все работает.
Записан
SASA
Гость
« Ответ #7 : Сентябрь 09, 2009, 14:18 »

Код
C++ (Qt)
static const char c_Sentence[] = QT_TRANSLATE_NOOP("MyContext","My Sentence");
MyClass::MyClass() : QObject()
{
  QLabel * label = new QLabel(tr(c_Sentence), this);
}


QT_TR_NOOP не нужен, т.к. мы используем tr(c_Sentence).
« Последнее редактирование: Сентябрь 09, 2009, 16:52 от SASA » Записан
kirill
Гость
« Ответ #8 : Сентябрь 09, 2009, 14:24 »


QT_TR_NOOP не нужен, т.к. мы используем tr(c_Sentence).

Да я просто для QT_TRANSLATE_NOOP неправильно задал context
Записан
BRE
Гость
« Ответ #9 : Сентябрь 09, 2009, 14:39 »

Код
C++ (Qt)
static const char c_Sentence[] = "My Sentence";
MyClass::MyClass() : QObject()
{
    QLabel * label = new QLabel(tr(c_Sentence), this);
}


QT_TR_NOOP не нужен, т.к. мы используем tr(c_Sentence).
А у тебя это работает? Ты проверял или так думаешь?
Записан
SASA
Гость
« Ответ #10 : Сентябрь 09, 2009, 16:48 »

А у тебя это работает? Ты проверял или так думаешь?

Пардон, пардон. Фигню сморозил.
lupdate ничего нового не покажет.
Иммено для таких ситуаций и нужны QT_TR_NOOP QT_TRANSLATE_NOOP.
Записан
cdsmika
Гость
« Ответ #11 : Октябрь 14, 2009, 01:49 »

Пардон, что вмешиваюсь, а как указать контекст для main?
Записан
cdsmika
Гость
« Ответ #12 : Октябрь 14, 2009, 02:03 »

А нет способа как-нибудь поэлегантнее (не через индекс) обращаться к этой константе?
Записан
Bojo
Гость
« Ответ #13 : Октябрь 17, 2009, 14:18 »

А мне непонятно зачем нужен параметр context в QT_TRANSLATE_NOOP ( context, sourceText ) и QT_TRANSLATE_NOOP3?
Записан
SASA
Гость
« Ответ #14 : Октябрь 18, 2009, 11:57 »

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


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