QTextCodec::setCodecForCStrings(QTextCodec::codecForName("EUC-JP"));
Описанные выше методы можно применять к любому языку, алфавит которого выходит за рамки кодировки Latin-1,
включая языки китайский, греческий, корейский и русский.Ниже приводится список кодировок, поддерживаемых Qt 4:
• Apple Roman
• Big5
• Big5-HKSCS
• EUC-JP
• EUC-KR
• GB18030-0
• IBM 850
• IBM 866
• IBM 874
• ISO 2022-JP
• ISO 8859-1
• ISO 8859-2
• ISO 8859-3
• ISO 8859-4
• ISO 8859-5
• ISO 8859-6
• ISO 8859-7
• ISO 8859-8
• ISO 8859-9
• ISO 8859-10
• ISO 8859-13
• ISO 8859-14
• ISO 8859-15
• ISO 8859-16
• Iscii-Bng
• Iscii-Dev
• Iscii-Gjr
• Iscii-Knd
• Iscii-Mlm
• Iscii-Ori
• Iscii-Pnj
• Iscii-Tlg
• Iscii-Tml
• JIS X 0201
• JIS X 0208
• KOI8-R
• KOI8-U
• MuleLao-1
• ROMAN8
• Shift-JIS
• TIS-620
• TSCII
• UTF-8
• UTF-16
• UTF-16BE
• UTF-16LE
• Windows-1250
• Windows-1251
• Windows-1252
• Windows-1253
• Windows-1254
• Windows-1255
• Windows-1256
• Windows-1257
• Windows-1258
• WINSAMI2
Для всех этих кодировок функция QTextCodec::codecForName
всегда будет возвращать достоверный указатель. Другие кодировки можно обеспечить путем создания подкласса QTextCodec.Создание переводимого интерфейса приложения
Если мы хотим иметь многоязыковую версию нашего приложения, мы должны сделать две вещи:
• убедиться, что все строки, которые видит пользователь, проходят через функцию tr;
• загрузить файл перевода (.qm)
при запуске приложения.Ничего подобного не надо делать, если приложения никогда не будут переводиться на другой язык. Однако применение функции tr
почти не требует дополнительных усилий и оставляет дверь открытой для их перевода когда-нибудь в будущем.Функция tr
является статической функцией, определенной в классе QObject и переопределяемой в каждом подклассе, в котором встречается макрос Q_OBJECT. При ее использовании в рамках подкласса QObject мы можем вызывать tr без ограничений. Вызов tr возвращает перевод строки, если он имеется, и первоначальный текст в противном случае.Для подготовки файлов переводов мы должны запустить утилиту Qt lupdate.
Эта утилита собирает все строковые константы, которые встречаются в вызовах tr, и формирует файлы переводов, содержащие все эти подготовленные к переводу строки. Эти файлы могут затем быть переданы переводчику для добавления к ним перевода строк. Эта процедура рассматривается позже в данной главе в разделе «Перевод приложений».В общем виде вызов tr
имеет следующий синтаксис:Контекст::tr(исходныйТекст, комментарий)
Здесь Контекст —
имя подкласса QObject, в котором используется макрос Q_OBJECT. Нам не требуется его указывать, если мы вызываем tr в функции—члене рассматриваемого класса. Аргумент исходныйТекст — текстовая константа, которую нужно будет переводить. Аргумент комментарий является необязательным, и он может использоваться для предоставления переводчику дополнительной информации.Ниже приводится несколько примеров:
01 RockyWidget::RockyWidget(QWidget *parent)
02 : QWidget(parent)
03 {
04 QString str1 = tr("Letter");
05 QString str2 = RockyWidget::tr("Letter");
06 QString str3 = SnazzyDialog::tr("Letter");
07 QString str4 = SnazzyDialog::tr("Letter", "US paper size");
08 }
Первые два вызова tr
выполняются в контексте объекта RockyWidget (скалистый виджет), а вторые два — в контексте объекта SnazzyDialog (притягательное диалоговое окно). В качестве исходного текста во всех четырех случаях используется слово «Letter» (буква). Последний вызов имеет также комментарий, помогающий переводчику точнее понять смысл исходного текста.Строки в различных контекстах (классах) переводятся независимо друг от друга. Переводчики, как правило, одновременно работают только с одним контекстом, причем часто при этом работает приложение и на экране отображается виджет или диалоговое окно, которые необходимо перевести.