/ / Translate standardButton in QDialogButtonBox - internacionalização, pyqt, translation

Traduzir standardButton em QDialogButtonBox - internacionalização, pyqt, tradução

estou usando pyqt e desenhista. traduzi todas as strings do meu aplicativo com self.tr () + pylupdate4 e lrelease

aqui está o trecho de código no meu main ():

app = QtGui.QApplication(sys.argv)
app.setApplicationName("Mental Calculation")

# initialize locale and load translation files if available
locale = QtCore.QLocale()
LOCALENAME = str(locale.system().name())
translator = QtCore.QTranslator()
translator.load("mentalcalculation_%s" % LOCALENAME)
app.installTranslator(translator)

Eu uso um QDialogButtonBox em um QDialog com um QtGui.QDialogButtonBox.Cancel e um QtGui.QDialogButtonBox.Ok

e as strings nesses botões não são traduzidas. Porque pylupdate4 escolhe qualquer string para eles.

Eu perdi uma etapa de configuração no meu aplicativo para que eles sejam traduzidos? Eu não entendo como a string para botões padrão de QDialogButtonBox devem ser traduzidos e não podem encontrar documentos sobre isso.

Respostas:

10 para resposta № 1

Use o método abaixo para definir os botões "text:

buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Ok"));
buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));

em seguida, lupdate arquivo .ts, abra-o com linguista e você encontrará as seqüências de caracteres.


3 para resposta № 2

Para carregar as traduções nativas do QT de maneira portátil, você pode usar a seguinte chamada de função:

translator.load("qt_" + QLocale::system().name(),QLibraryInfo::location(QLibraryInfo::TranslationsPath));

Os dois (ou mais) tradutores, conforme explicado anteriormente, são a maneira padrão se você quiser evitar a solução alternativa.


2 para resposta № 3

Eu finalmente encontrei o que fazer: de http://qt.nokia.com/developer/faqs/faq.2008-05-06.6265952148 e http://qt.nokia.com/developer/faqs/705

então eu só preciso copiar, por exemplo francês, o qt_fr.qm que encontrei em QTDIR / traduções (aqui / usr / share / qt / translations) no diretório do meu aplicativo e adicione

translator.load("qt_%s" % LOCALENAME)

ou até copiar todo o arquivo qt _ *. qm QTDIR / traduções para realmente suportar o máximo de localidades.

NÃO ESTE NÃO ESTÁ FUNCIONANDO. Apenas um dos dois arquivos está sendo carregado. então eu não posso ter minha string traduzida ou o QDailogButtonBox.

Droga. esta coisa está ficando nervosa.


2 para resposta № 4

você deve instalar dois tradutores diferentes:

app = QtGui.QApplication(sys.argv)

translator_my = QtCore.QTranslator()
translator_my.load("i18n/i18n_" + QtCore.QLocale.system().name() + ".qm")
#translator_my.load("i18n/i18n_ru_Ru.qm")
app.installTranslator(translator_my)

translator_qt = QtCore.QTranslator()
translator_qt.load("i18n/qt_" + QtCore.QLocale.system().name()[:2] + ".qm")
#translator_qt.load("i18n/qt_ru.qm")
app.installTranslator(translator_qt)

myApp = MyMainWindow()
myApp.show()
sys.exit(app.exec_())

onde i18n / i18n_ru_Ru.qm é o caminho para o seu arquivo i18n e qt_ru.qm foi copiado de usr / share / qt4 / translations (no meu caso).


0 para a resposta № 5

De docs, você deve criar o objeto tradutor antesos widgets da aplicação. Não posso ter certeza de que esse é o seu problema, já que você omitiu o código onde seus widgets são criados, mas certifique-se de garantir que não os está criando antes do tradutor.


-1 para resposta № 6

sim. logo abaixo do trecho que eu dei, eu crio meu diálogo principal.

O problema é que o Qtranslator não pôde traduziro botão QDialogButtonBox porque não há string para traduzir. então deve ser qt que faz esse trabalho internamente. ou com algum mecanismo que não conheço.

aqui está outro trecho de código gerado pelo pyuic4

self.buttonBox = QtGui.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.gridLayout.addWidget(self.buttonBox, 8, 0, 1, 1)

Como QtGui.QDialogButtonBox.Cancel string poderia ser traduzido quando não há nenhuma string no código ???

É porque eu não crio uma mainwindow e só uso o QDialog ??

Não posso comentar a resposta da Swanson!