Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: kirill от Сентябрь 08, 2009, 15:41



Название: tr() и static const char *
Отправлено: 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 тоже не прокатило.


Название: Re: tr() и static const char *
Отправлено: BRE от Сентябрь 08, 2009, 15:50
А ты почитай про Internationalization with Qt в assistent, особое внимание удели макросам QT_TR_NOOP и QT_TRANSLATE_NOOP.  ;)


Название: Re: tr() и static const char *
Отправлено: kirill от Сентябрь 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") - все работает.
Что не так?


Название: Re: tr() и static const char *
Отправлено: BRE от Сентябрь 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]);
}
 


Название: Re: tr() и static const char *
Отправлено: lit-uriy от Сентябрь 08, 2009, 23:27
>>НО tr(c_Sentence) игнорируется.
А оно и должно игнорироватся, см. описание функции QObject::tr(const char * sourceText, const char * disambiguation = 0, int n = -1)

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


Название: Re: tr() и static const char *
Отправлено: kirill от Сентябрь 09, 2009, 05:29
>>НО tr(c_Sentence) игнорируется.
А оно и должно игнорироватся, см. описание функции QObject::tr(const char * sourceText, const char * disambiguation = 0, int n = -1)

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

А где у меня переменные? static const char * передаю


Название: Re: tr() и static const char *
Отправлено: kirill от Сентябрь 09, 2009, 05:35

А вот это читал?  ;)

Спасибо, ступил, так все работает.


Название: Re: tr() и static const char *
Отправлено: SASA от Сентябрь 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).


Название: Re: tr() и static const char *
Отправлено: kirill от Сентябрь 09, 2009, 14:24

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

Да я просто для QT_TRANSLATE_NOOP неправильно задал context


Название: Re: tr() и static const char *
Отправлено: BRE от Сентябрь 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).
А у тебя это работает? Ты проверял или так думаешь?


Название: Re: tr() и static const char *
Отправлено: SASA от Сентябрь 09, 2009, 16:48
А у тебя это работает? Ты проверял или так думаешь?

Пардон, пардон. Фигню сморозил.
lupdate ничего нового не покажет.
Иммено для таких ситуаций и нужны QT_TR_NOOP QT_TRANSLATE_NOOP.


Название: Re: tr() и static const char *
Отправлено: cdsmika от Октябрь 14, 2009, 01:49
Пардон, что вмешиваюсь, а как указать контекст для main?


Название: Re: tr() и static const char *
Отправлено: cdsmika от Октябрь 14, 2009, 02:03
А нет способа как-нибудь поэлегантнее (не через индекс) обращаться к этой константе?


Название: Re: tr() и static const char *
Отправлено: Bojo от Октябрь 17, 2009, 14:18
А мне непонятно зачем нужен параметр context в QT_TRANSLATE_NOOP ( context, sourceText ) и QT_TRANSLATE_NOOP3?


Название: Re: tr() и static const char *
Отправлено: SASA от Октябрь 18, 2009, 11:57
Контекст - это произвольное имя, имя группы, куда будут сложены слова для перевода. Если вы используете tr() в классе, то имя контекста есть имя класса.