Как перевести переменный текст в Qt? - PullRequest
0 голосов
/ 15 апреля 2020

У меня сложная проблема, и я перепробовал слишком много вещей, но тщетно. У меня есть 4 файла перевода для 4 разных языков, и всякий раз, когда пользователь меняет язык, мне нужно перевести пользовательский интерфейс.

Фиксированный текст можно перевести следующим образом:

ui->BusinessNameHelpText->setText(tr("Enter the business name."));

Тем не менее, переменный текст, такой как действие над кнопкой, не может быть выполнен таким образом, потому что это, например, «Установить» или «Обновить».

Я пробовал этот блок кода:

QString action = ui->actionButton->text();
ui->retranslateUi(this);
ui->actionButton->setText(trUtf8(action.toUtf8().data()));

И это:

QString action = ui->actionButton->text();
ui->retranslateUi(this);
ui->actionButton->setText(tr(action.toUtf8().data()));

И это:

QString action = ui->actionButton->text();
ui->retranslateUi(this);
ui->actionButton->setText(tr(action.toStdString.c_str()));

Это работает только в первый раз, когда я меняю язык, но после этого не работает.

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Похоже, в вашей программе есть код типа

ui->actionButton->setText(isInstall ? tr("Install") : tr("Update"));

. Вам нужно запустить это снова, в ответ на событие смены языка.

0 голосов
/ 16 апреля 2020

Я нашел сообщение на форуме Qt, в котором показана проблема, подобная моей, и этот ответ говорит о невозможности перевода текста Dynami c.

0 голосов
/ 15 апреля 2020

Хорошо, теперь я понял, в чем на самом деле ваша проблема.

Проблема в том, как вы относитесь к изменению текста кнопки. Это работает только когда вы меняете Engli sh на другой язык. Это происходит потому, что текст Engli sh эквивалентен тексту, который вы использовали в коде в качестве идентификатора перевода.

Когда ваше приложение вызывает это:

QString action = ui->actionButton->text();

, если ранее был выбран Engli sh action будет содержать текст, который совпадает с идентификатором перевода.
, если ранее был другой язык был выбран action будет содержать что-то еще, а затем идентификатор и переводчик не может найти соответствующий перевод. В таком случае переводчик вернет исходное значение.

Для исправления просто оставьте только ui->retranslateUi(this); и thra sh другой код и убедитесь, что в вашем интерфейсе пользователя все соответствующие строки помечены, что они нуждаются в переводе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...