Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 93

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QTranslator::load() являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ, Π³Π΄Π΅ функция load() Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π³Π΄Π΅ находится исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π’ самих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Qt содСрТится нСсколько строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСвСсти. Компания Β«TrolltechΒ» располагаСт ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ Π½Π° французский, Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΈΠΉ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ китайский языки Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Qt translations. Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки, Π½ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Qt ΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ. НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Qt:

QTranslator qtTranslator;

qtTranslator.load("qt_" + QLocale::system().name(),

qApp->applicationDirPath());

app.installTranslator(&qtTranslator);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ QTranslator ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, ΠΈ поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ QTranslator для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния Qt. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½Π΅ составляСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ любоС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π½Π°ΠΌ ΠΈΡ… количСство. QApplication Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ всС Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΈ поискС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

НСкоторыС языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ арабский ΠΈ ΠΈΠ²Ρ€ΠΈΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ запись справа Π½Π°Π»Π΅Π²ΠΎ, Π° Π½Π΅ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. Для Ρ‚Π°ΠΊΠΈΡ… языков общая ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° прилоТСния Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π½Π° Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ, Ρ‡Ρ‚ΠΎ дСлаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QApplication::setLayoutDirection(Qt::RightToLeft). Π€Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Qt содСрТат ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° Β«LTRΒ», ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Qt Π½Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ записи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка β€” слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΈΠ»ΠΈ справа Π½Π°Π»Π΅Π²ΠΎ, ΠΈ поэтому Π½Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ приходится самим Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setLayoutDirection().

Для Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ссли Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅ΡΡƒΡ€ΡΠ½ΡƒΡŽ систСму Qt. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сниТаСт количСство Ρ„Π°ΠΉΠ»ΠΎΠ² Π² дистрибутивС прилоТСния, Π½ΠΎ ΠΏΡ€ΠΈ этом сниТаСтся риск случайной ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΈΠ»ΠΈ удалСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ².

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ .qm Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ translations исходного Π΄Π΅Ρ€Π΅Π²Π°, Ρ‚ΠΎΠ³Π΄Π° Ρ„Π°ΠΉΠ» myapp.qrc Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>

<file>translations/myapp_de.qm</file>

<file>translations/myapp_fr.qm</file>

<file>translations/myapp_zh.qm</file>

<file>translations/qt_de.qm</file>

<file>translations/qt_fr.qm</file>

<file>translations/qt_zh.qm</file>

</qresource>

</RCC>

Π€Π°ΠΉΠ» .pro Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт:

RESOURCES = myapp.qrc

НаконСц, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main() ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ :/translations Π² качСствС ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ². ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΏΡƒΡ‚ΡŒ ΠΊ рСсурсу, Π° Π½Π΅ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½ΠΎΠΌΡƒ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌΠΈ рассмотрСно всС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для обСспСчСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки. Но язык ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ записи Π½Π΅ СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ страны ΠΈ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹. Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ мСстныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π΄Π°Ρ‚ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†, чисСл ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ². Qt содСрТит класс QLocale, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ чисСл ΠΈ Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Для получСния Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠΉ для Π΄Π°Π½Π½ΠΎΠΉ мСстности, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘++ setlocale() ΠΈ localeconv().

ПовСдСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… классов ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Qt зависит ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

β€’ сравнСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ осущСствляСт функция QString::localeAwareCompare(), зависит ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для упорядочивания элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ;

β€’ функция toString() для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² QDate, QTime ΠΈ QDateTime Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π² Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Ссли вызываСтся с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Qt::LocalDate;

β€’ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ QDateEdit ΠΈ QDateTimeEdit ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Π°Ρ‚Ρ‹ Π² Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

НаконСц, Π² ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии прилоТСния. НапримСр, стрСлки Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… Back ΠΈ Forward (Π½Π°Π·Π°Π΄ ΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄) Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами для языка с записью справа Π½Π°Π»Π΅Π²ΠΎ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

if (QApplication::isRightToLeft())

{

backAction->setIcon(forwardIcon);

forwardAction->setIcon(backIcon);

} else {

backAction->setIcon(backIcon);

forwardAction->setIcon(forwardIcon);

}

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ приходится ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, содСрТащиС Π±ΡƒΠΊΠ²Ρ‹ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. НапримСр, Π±ΡƒΠΊΠ²Π° Β«IΒ» Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΠΎΠΏΡ†ΠΈΡŽ Italic (курсив) тСкстового процСссора, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π±ΡƒΠΊΠ²ΠΎΠΉ Β«Π‘Β» для испанского языка (Cursivo) ΠΈ Π±ΡƒΠΊΠ²ΠΎΠΉ «К» для языков датского, голландского, Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΎΠ³ΠΎ, норвСТского ΠΈ швСдского (Kursiv). НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

if (tr("Italic")[0] == 'C') {

italicAction->setIcon(iconC);

} else if (tr("Italic")[0] == 'K') {

italicAction->setIcon(iconK);

} else {

italicAction->setIcon(iconI);

}

МоТно ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСдства рСсурсной систСмы, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. Π’ Ρ„Π°ΠΉΠ»Π΅ .qrc ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для рСсурса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ lang. НапримСр:

<qresource>

<file>italic.png</file>

</qresource>

<qresource lang="es">

<file alias="italic.png">cursivo.png</file>

</qresource>

<qresource lang="sv">

<file alias="italic.png'">kursiv.png</file>

</qresource>

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ являСтся es (Espanol), :/italic.png становится ссылкой Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ cursivo.png. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ являСтся sv (Svenska), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ kursiv.png. Для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ italic.png.

ДинамичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ языков

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ языка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main() ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚Π°ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² .qm. Но Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСского ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ языка. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ постоянно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ языка Π±Π΅Π· пСрСзапуска прилоТСния. НапримСр, это часто трСбуСтся для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, примСняСмых ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² Π·Π°ΠΊΠ°Π·ΠΎΠ², синхронными ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… кассовых Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ².

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ возмоТности динамичСского ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ языков Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большСго, Ρ‡Π΅ΠΌ просто Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ запускС прилоТСния, Π½ΠΎ это Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

β€’ прСдусмотритС срСдство, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ;

β€’ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈΠ»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ всС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (эта функция часто называСтся retranslateUi()), ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ всякий Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ языка.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ исходного ΠΊΠΎΠ΄Π° прилоТСния Β«call centerΒ» (Ρ†Π΅Π½Ρ‚Ρ€ Π·Π°ΠΊΠ°Π·ΠΎΠ²). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ содСрТит мСню Language (язык), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ язык Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ примСняСтся английский язык.

Рис. 17.1. ДинамичСскоС мСню Language.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ язык Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ послС запуска прилоТСния, ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main(). ВмСсто этого ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ динамичСски ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, ΠΈ поэтому ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² классах Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим подкласс QMainWindow этого прилоТСния:

01 MainWindow::MainWindow()

02 {

03 journalView = new JournalView;

04 setCentralWidget(journalView);

05 qApp->installTranslator(&appTranslator);

06 qApp->installTranslator(&qtTranslator);

07 qmPath = qApp->applicationDirPath() + "/translations";

08 createActions();

09 createMenus();

10 retranslateUi();

11 }

Π’ конструкторС ΠΌΡ‹ устанавливаСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ JournalView ΠΊΠ°ΠΊ подкласс QTableWidget. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ настраиваСм нСсколько Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…β€”Ρ‡Π»Π΅Π½ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ:

β€’ пСрСмСнная appTranslator являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ QTranslator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния;

β€’ пСрСмСнная qtTranslator являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ QTranslator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Qt;