Введение в разработку приложений на платформе Atom/MeeGo. Граничин О.Н - 110 стр.

UptoLike

110
Заметим также, что для перевода текста в UTF-8 есть очень удобное сокращение
QString::toUtf8().
9.4.4. Локализация
Локализацияэто процесс адаптации к имеющимся локальным предпочтениям. Например,
представления даты и времени в официальном для данного региона формате.
Подобного рода локализация осуществляется по средствам строкового метода tr().
void Clock::setTime(const QTime &time)
{
if (tr("AMPM") == "AMPM") {
// 12-х часовое время
} else {
// 24-х часовое время
}
}
В этом примере для США мы оставим как есть перевод "AMPM", и таким образом будем
использовать 12-часовую ветку, но в Европе мы переведём его другим способом, что позволит
использовать 24-хчасовую ветку.
Для локализации чисел используется класс QLocale.
Заметим также, что в MeeGo SDK возможно использовать разные изображения (и другие
подключаемые ресурсы) для различных локалей. Однако, использовать локализованные изображения
всё же не рекомендуется. Предпочтительно использовать общепонятные изображения, вместо того,
чтобы опираться на странные метафоры и местные смыслы. Исключением являются изображения
стрелок вперёд и назад (в большинстве случаев их необходимо перевернуть для Арабских и
Израильских локалей).
9.4.5. Динамическая трансляция
Некоторым приложениям может потребоваться изменять язык в процессе работы программы.
Чтобы оповестить виджеты об изменениях необходимо использовать метод changeEvent() для
проверки того, что состоялось событие LanguageChang и обновлять отображаемый текст, используя
фукнкцию tr().
Например:
void MyWidget::changeEvent(QEvent *event)
{
if (e->type() == QEvent::LanguageChange) {
titleLabel->setText(tr("Document Title"));
...
okPushButton->setText(tr("&OK"));
} else
QWidget::changeEvent(event);
}
Все остальные события должны быть передано по средствам вызова реализации функции по
умолчанию.
Список установленных переводчиков может измениться в ответ на событие LocaleChange, или
приложение может предоставлять пользователю интерфейс, который даст пользователю возможность
изменять текущий язык. Обработчик событий по умолчанию для подклассов QWidget реагирует на
событие QEvent:: LanguageChange, и вызовет эту функцию при необходимости.
Событие LanguageChange выбросится, когда пользователь установит новый перевод (выполнится
функция QCoreApplication::installTranslator()). Кроме того, другие компоненты приложения
могут заставить виджеты обновить себя, отправив им событие LanguageChange.