OS X 10.11でQT5.5アプリケーションを作成しています。Right-to-Left 言語のQt::LayoutDirectionの設定など、言語を動的に切り替えるメニュー オプションを実装しました。右から左への言語サポートのモックアップとして、アラビア語でテスト アプリケーションと翻訳ファイルを作成しました。スクリーンショットは次のとおりです。
私はアラビア語をまったく知らないので、ここでは役に立ちません。表示される翻訳は Google 翻訳によるものです (アプリが完成したら、専門家に翻訳してもらいます)。それにもかかわらず、動作は部分的にしか正しくないように見えます。
これらの機能は私の期待に一致します。
- 画面右側から「ファイル」「編集」「オプション」メニュー項目
- 「オプション」の「言語」サブメニューは、メインの「オプション」メニューの左側にカスケードします。
ただし、次の機能は私の期待と一致しません。
- 「オプション」メニューの「1 番目」/「2 番目」/「3 番目」/「言語」メニュー項目が、右揃えではなく左揃えになっている
- チェックマークはエントリの右側ではなく左側にあります
- 「Language」サブメニューのサブメニューカスケード矢印が左ではなく右を指す
したがって、私の最初の質問は、私の予想が間違っていて、インターフェイスが実際にアラビア語に対して正しく動作しているのか、それとも何を修正する必要があるのかということです。
更新: アラビア語を話す同僚は、上記のスクリーンショットが私が言及した意味で間違っていることを確認しており、代わりに次のように表示する必要があります。
私の 2 番目の主な質問は、右から左へ記述する言語で Qt カスケード メニューが適切に動作するように、問題を修正する方法です。
以下に、このスタンドアロンの例の完全なコードと、使用した翻訳の Qt ".ts" ファイルを含めます。
#include <QApplication>
#include <QMainWindow>
#include <QtGui>
#include <QTranslator>
#include <QLabel>
#include <QMenuBar>
#include <QMenu>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow* mw = new QMainWindow();
QTranslator* translator = new QTranslator();
translator->load( "translations.qm" );
app.installTranslator( translator );
app.setLayoutDirection( Qt::RightToLeft );
QLabel* aLabel = new QLabel( mw );
mw->menuBar()->setNativeMenuBar( false );
QMenu* fileMenu = new QMenu( QMainWindow::tr( "File" ) );
QMenu* editMenu = new QMenu( QMainWindow::tr( "Edit" ) );
QMenu* optionsMenu = new QMenu( QMainWindow::tr( "Options" ) );
mw->menuBar()->addMenu( fileMenu );
mw->menuBar()->addMenu( editMenu );
mw->menuBar()->addMenu( optionsMenu );
QAction* firstAction = new QAction( QMainWindow::tr( "First" ), optionsMenu );
QAction* secondAction = new QAction( QMainWindow::tr( "Second" ), optionsMenu );
QAction* thirdAction = new QAction( QMainWindow::tr( "Third" ), optionsMenu );
firstAction->setCheckable( true );
firstAction->setChecked( true );
optionsMenu->addAction( firstAction );
optionsMenu->addAction( secondAction );
optionsMenu->addAction( thirdAction );
QMenu* languageMenu = new QMenu( QMainWindow::tr( "Language" ) );
QAction* englishAction = new QAction( QMainWindow::tr( "English" ), languageMenu );
QAction* arabicAction = new QAction( QMainWindow::tr( "Arabic" ), languageMenu );
languageMenu->addAction( englishAction );
languageMenu->addAction( arabicAction );
optionsMenu->addMenu( languageMenu );
mw->show();
return app.exec();
}
そして翻訳ファイル:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>QMainWindow</name>
<message>
<location filename="qt_rtl.cc" line="21"/>
<source>File</source>
<translation>Ù~EÙ~DÙ~A</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="22"/>
<source>Edit</source>
<translation>ØªØØ±Ù~Jر</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="23"/>
<source>Options</source>
<translation>Ø®Ù~Jارات</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="29"/>
<source>First</source>
<translation>اÙ~DØ£Ù~HÙ~D</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="30"/>
<source>Second</source>
<translation>ثاÙ~FÙ~Jا</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="31"/>
<source>Third</source>
<translation>Ø«Ù~DØ«</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="40"/>
<source>Language</source>
<translation>Ù~Dغة</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="41"/>
<source>English</source>
<translation>English</translation>
</message>
<message>
<location filename="qt_rtl.cc" line="42"/>
<source>Arabic</source>
<translation>اÙ~DعربÙ~JØ©</translation>
</message>
</context>
</TS>
この行がすべてのウィジェットとサブウィジェットに対して「正しいことをした」ことを願っていましたapp.setLayoutDirection( Qt::RightToLeft );
が、そうではないようです。おそらくそうでしたか?どんな助けでも大歓迎です。
ありがとう