Merge pull request #36 from admsasha/master
- better handling of fonts - dynamic localization of widgets - fix the way tutorhtml is read - fix translate warning messages
This commit is contained in:
commit
fbae727a3b
|
@ -30,6 +30,11 @@ PROJECT( pianobooster )
|
|||
# enable warnings
|
||||
add_compile_options(-Wall)
|
||||
|
||||
|
||||
if(USE_FONT)
|
||||
add_compile_options("-DUSE_FONT=\"${USE_FONT}\"")
|
||||
endif()
|
||||
|
||||
FIND_PACKAGE( OpenGL REQUIRED )
|
||||
|
||||
include(FindPkgConfig)
|
||||
|
@ -210,6 +215,14 @@ INSTALL( FILES ../README.md DESTINATION share/games/pianobooster/doc/ )
|
|||
|
||||
INSTALL ( FILES images/pianobooster.png DESTINATION share/pixmaps )
|
||||
|
||||
if(USE_FONT)
|
||||
INSTALL ( FILES ${USE_FONT} DESTINATION share/games/pianobooster/fonts)
|
||||
endif()
|
||||
|
||||
if(NOT USE_SYSTEM_FONT)
|
||||
INSTALL ( FILES fonts/DejaVuSans.ttf DESTINATION share/games/pianobooster/fonts)
|
||||
endif()
|
||||
|
||||
#INSTALL( FILES "${CMAKE_CURRENT_BINARY_DIR}/translations/*.qm DESTINATION share/pianobooster/translations/ )
|
||||
|
||||
|
||||
|
|
|
@ -81,10 +81,10 @@ void CDraw::drawStaveExtentsion(CSymbol symbol, float x, int noteWidth, bool pl
|
|||
|
||||
void CDraw::renderText(float x, float y, const char* s)
|
||||
{
|
||||
double w = font.Advance(s);
|
||||
double h = font.Descender();
|
||||
double w = font->Advance(s);
|
||||
double h = font->Descender();
|
||||
glRasterPos2f(x - w/2, y - h);
|
||||
font.Render(s);
|
||||
font->Render(s);
|
||||
}
|
||||
|
||||
void CDraw::drawNoteName(int midiNote, float x, float y, int type)
|
||||
|
|
35
src/Draw.h
35
src/Draw.h
|
@ -37,9 +37,10 @@
|
|||
#endif
|
||||
#include <FTGL/ftgl.h>
|
||||
#include <QObject>
|
||||
#include <QFile>
|
||||
#include <QApplication>
|
||||
|
||||
#define HORIZONTAL_SPACING_FACTOR (0.75) // defines the speed of the scrolling
|
||||
#define FONT_TTF "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
|
||||
#define FONT_SIZE 16
|
||||
|
||||
#include "StavePosition.h"
|
||||
|
@ -67,13 +68,39 @@ class CDraw : public QObject
|
|||
{
|
||||
public:
|
||||
CDraw(CSettings* settings)
|
||||
:font(FONT_TTF)
|
||||
:font(nullptr)
|
||||
{
|
||||
QStringList listPathFonts;
|
||||
#if defined(USE_FONT)
|
||||
listPathFonts.push_back(USE_FONT);
|
||||
#endif
|
||||
listPathFonts.push_back("/usr/share/games/pianobooster/fonts/DejaVuSans.ttf");
|
||||
listPathFonts.push_back(QApplication::applicationDirPath() + "/fonts/DejaVuSans.ttf");
|
||||
listPathFonts.push_back("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf");
|
||||
listPathFonts.push_back("/usr/share/fonts/dejavu/DejaVuSans.ttf");
|
||||
listPathFonts.push_back("/usr/share/fonts/TTF/dejavu/DejaVuSans.ttf");
|
||||
|
||||
for (int i=0;i<listPathFonts.size();i++){
|
||||
QFile file(listPathFonts.at(i));
|
||||
if (file.exists()){
|
||||
font = new FTGLPixmapFont(listPathFonts.at(i).toStdString().c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (font==nullptr){
|
||||
ppLogError("Font DejaVuSans.ttf was not found !");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
m_settings = settings;
|
||||
m_displayHand = PB_PART_both;
|
||||
m_forceCompileRedraw = 1;
|
||||
m_scrollProperties = &m_scrollPropertiesHorizontal;
|
||||
font.FaceSize(FONT_SIZE, FONT_SIZE);
|
||||
font->FaceSize(FONT_SIZE, FONT_SIZE);
|
||||
}
|
||||
|
||||
~CDraw(){
|
||||
if (font!=nullptr) delete font;
|
||||
}
|
||||
|
||||
void scrollVertex(float x, float y)
|
||||
|
@ -121,7 +148,7 @@ private:
|
|||
CScrollProperties *m_scrollProperties;
|
||||
CScrollProperties m_scrollPropertiesHorizontal;
|
||||
CScrollProperties m_scrollPropertiesVertical;
|
||||
FTGLPixmapFont font;
|
||||
FTGLPixmapFont *font;
|
||||
};
|
||||
|
||||
#endif //__DRAW_H__
|
||||
|
|
|
@ -25,6 +25,9 @@
|
|||
*/
|
||||
|
||||
#include <QtWidgets>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonValue>
|
||||
|
||||
#include "GuiPreferencesDialog.h"
|
||||
#include "GlView.h"
|
||||
|
@ -45,6 +48,85 @@ GuiPreferencesDialog::GuiPreferencesDialog(QWidget *parent)
|
|||
videoOptimiseCombo->addItem(tr("None"));
|
||||
}
|
||||
|
||||
void GuiPreferencesDialog::initLanguageCombo(){
|
||||
QString localeDirectory =
|
||||
#ifdef Q_OS_WIN32
|
||||
QApplication::applicationDirPath() + "/translations/";
|
||||
#endif
|
||||
#ifdef Q_OS_LINUX
|
||||
QApplication::applicationDirPath() + "/../share/games/" + QSTR_APPNAME + "/translations/";
|
||||
#endif
|
||||
#ifdef Q_OS_DARWIN
|
||||
QApplication::applicationDirPath() + "/../Resources/translations/";
|
||||
#endif
|
||||
|
||||
// read langs.json
|
||||
QJsonObject rootLangs;
|
||||
QFile file;
|
||||
file.setFileName(localeDirectory+"/langs.json");
|
||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
|
||||
ppLogError("Error while opening langs.json");
|
||||
return;
|
||||
}else{
|
||||
QByteArray val = file.readAll();
|
||||
file.close();
|
||||
|
||||
QJsonDocument document = QJsonDocument::fromJson(val);
|
||||
if (document.isEmpty()){
|
||||
ppLogError("langs.json is not valid");
|
||||
return;
|
||||
}else{
|
||||
rootLangs = document.object();
|
||||
}
|
||||
}
|
||||
|
||||
// loading languages
|
||||
languageCombo->clear();
|
||||
languageCombo->addItem("English","en");
|
||||
|
||||
QDir dirLang(localeDirectory);
|
||||
dirLang.setFilter(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot);
|
||||
QFileInfoList listLang = dirLang.entryInfoList();
|
||||
for (int i = 0; i < listLang.size(); ++i) {
|
||||
QFileInfo fileInfo = listLang.at(i);
|
||||
QRegExp rx("(pianobooster_)(.*)(.qm)");
|
||||
if (rx.indexIn(fileInfo.fileName())!=-1){
|
||||
QString lang_code = rx.cap(2);
|
||||
|
||||
if (lang_code=="blank") continue;
|
||||
|
||||
QString lang_code_loc = lang_code;
|
||||
if (lang_code_loc.indexOf("_")==-1) lang_code_loc+="_"+lang_code_loc.toUpper();
|
||||
|
||||
QString languageName = "";
|
||||
|
||||
if (rootLangs.value(lang_code).toObject().value("nativeName").isString()){
|
||||
languageName = rootLangs.value(lang_code).toObject().value("nativeName").toString();
|
||||
}
|
||||
|
||||
if (languageName.isEmpty()){
|
||||
QLocale loc(lang_code_loc);
|
||||
languageName = loc.nativeLanguageName();
|
||||
|
||||
if (languageName.isEmpty()){
|
||||
languageName=QLocale::languageToString(loc.language());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
languageName[0]=languageName[0].toUpper();
|
||||
|
||||
if (languageName.isEmpty() or languageName=="C"){
|
||||
languageName=lang_code;
|
||||
}
|
||||
|
||||
languageCombo->addItem(languageName,lang_code);
|
||||
if (m_settings->value("General/lang",QLocale::system().bcp47Name()).toString()==lang_code){
|
||||
languageCombo->setCurrentIndex(languageCombo->count()-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GuiPreferencesDialog::init(CSong* song, CSettings* settings, CGLView * glView)
|
||||
{
|
||||
|
@ -62,6 +144,8 @@ void GuiPreferencesDialog::init(CSong* song, CSettings* settings, CGLView * glVi
|
|||
courtesyAccidentalsCheck->setChecked(m_settings->displayCourtesyAccidentals());
|
||||
showTutorPagesCheck->setChecked(m_settings->isTutorPagesEnabled());
|
||||
followStopPointCombo->setCurrentIndex(m_song->cfg_stopPointMode);
|
||||
|
||||
initLanguageCombo();
|
||||
}
|
||||
|
||||
void GuiPreferencesDialog::accept()
|
||||
|
@ -77,5 +161,7 @@ void GuiPreferencesDialog::accept()
|
|||
m_settings->setValue("Score/StopPointMode", m_song->cfg_stopPointMode );
|
||||
m_song->refreshScroll();
|
||||
|
||||
m_settings->setValue("General/lang",languageCombo->currentData().toString());
|
||||
|
||||
this->QDialog::accept();
|
||||
}
|
||||
|
|
|
@ -53,6 +53,8 @@ private slots:
|
|||
void accept();
|
||||
|
||||
private:
|
||||
void initLanguageCombo();
|
||||
|
||||
CSettings* m_settings;
|
||||
CSong* m_song;
|
||||
CGLView *m_glView;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>339</width>
|
||||
<height>331</height>
|
||||
<height>368</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
|
@ -165,6 +165,29 @@
|
|||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="title">
|
||||
<string>Language</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Language:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="languageCombo"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -204,6 +204,55 @@ void GuiSidePanel::setCurrentHand(QString hand)
|
|||
bothHandsRadio->setChecked(true);
|
||||
}
|
||||
|
||||
void GuiSidePanel::updateTranslate(){
|
||||
// save original
|
||||
if (listWidgetsRetranslateUi.size()==0){
|
||||
QList<QWidget*> l2 = this->findChildren<QWidget *>();
|
||||
for (auto &w:l2){
|
||||
QMap<QString,QString> m;
|
||||
m["toolTip"]=w->toolTip();
|
||||
m["whatsThis"]=w->whatsThis();
|
||||
m["windowTitle"]=w->windowTitle();
|
||||
m["statusTip"]=w->statusTip();
|
||||
listWidgetsRetranslateUi[w]=m;
|
||||
}
|
||||
|
||||
QList<QAction*> l = this->findChildren<QAction *>();
|
||||
for (auto &w:l){
|
||||
QMap<QString,QString> m;
|
||||
m["toolTip"]=w->toolTip();
|
||||
m["whatsThis"]=w->whatsThis();
|
||||
m["statusTip"]=w->statusTip();
|
||||
m["text"]=w->text();
|
||||
listActionsRetranslateUi[w]=m;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// retranslate UI
|
||||
QList<QWidget*> l2 = this->findChildren<QWidget *>();
|
||||
for (auto &w:l2){
|
||||
if (!w->toolTip().isEmpty()) w->setToolTip(tr(listWidgetsRetranslateUi[w]["toolTip"].toStdString().c_str()));
|
||||
if (!w->whatsThis().isEmpty()) w->setWhatsThis(tr(listWidgetsRetranslateUi[w]["whatsThis"].toStdString().c_str()));
|
||||
if (!w->windowTitle().isEmpty()) w->setWindowTitle(tr(listWidgetsRetranslateUi[w]["windowTitle"].toStdString().c_str()));
|
||||
if (!w->statusTip().isEmpty()) w->setStatusTip(tr(listWidgetsRetranslateUi[w]["statusTip"].toStdString().c_str()));
|
||||
}
|
||||
|
||||
QList<QAction*> l = this->findChildren<QAction *>();
|
||||
for (auto &w:l){
|
||||
if (!w->toolTip().isEmpty()) w->setToolTip(tr(listActionsRetranslateUi[w]["toolTip"].toStdString().c_str()));
|
||||
if (!w->whatsThis().isEmpty()) w->setWhatsThis(tr(listActionsRetranslateUi[w]["whatsThis"].toStdString().c_str()));
|
||||
if (!w->statusTip().isEmpty()) w->setStatusTip(tr(listActionsRetranslateUi[w]["statusTip"].toStdString().c_str()));
|
||||
if (!w->text().isEmpty()) w->setText(tr(listActionsRetranslateUi[w]["text"].toStdString().c_str()));
|
||||
}
|
||||
|
||||
rhythmTappingCombo->setItemText(0,tr("Drums"));
|
||||
rhythmTappingCombo->setItemText(1,tr("Melody"));
|
||||
|
||||
retranslateUi(this);
|
||||
}
|
||||
|
||||
|
||||
void GuiSidePanel::on_rhythmTappingCombo_activated (int index)
|
||||
{
|
||||
|
|
|
@ -58,6 +58,8 @@ public:
|
|||
void setSongIndex(int index){songCombo->setCurrentIndex(index);}
|
||||
void setCurrentHand(QString hand);
|
||||
|
||||
void updateTranslate();
|
||||
|
||||
void setActiveHand(whichPart_t hand)
|
||||
{
|
||||
if (hand == PB_PART_right) rightHandRadio->setChecked(true);
|
||||
|
@ -172,6 +174,9 @@ private slots:
|
|||
private:
|
||||
void autoSetMuteYourPart();
|
||||
|
||||
QMap<QWidget*,QMap<QString,QString>> listWidgetsRetranslateUi;
|
||||
QMap<QAction*,QMap<QString,QString>> listActionsRetranslateUi;
|
||||
|
||||
CSong* m_song;
|
||||
CScore* m_score;
|
||||
CTrackList* m_trackList;
|
||||
|
|
|
@ -176,6 +176,36 @@ void GuiTopBar::setPlayButtonState(bool checked, bool atTheEnd)
|
|||
}
|
||||
}
|
||||
|
||||
void GuiTopBar::updateTranslate(){
|
||||
// save original
|
||||
if (listWidgetsRetranslateUi.size()==0){
|
||||
QList<QWidget*> l2 = this->findChildren<QWidget *>();
|
||||
for (auto &w:l2){
|
||||
QMap<QString,QString> m;
|
||||
m["toolTip"]=w->toolTip();
|
||||
m["whatsThis"]=w->whatsThis();
|
||||
m["windowTitle"]=w->windowTitle();
|
||||
m["statusTip"]=w->statusTip();
|
||||
listWidgetsRetranslateUi[w]=m;
|
||||
}
|
||||
}
|
||||
|
||||
// retranslate UI
|
||||
QList<QWidget*> l2 = this->findChildren<QWidget *>();
|
||||
for (auto &w:l2){
|
||||
if (!w->toolTip().isEmpty()) w->setToolTip(tr(listWidgetsRetranslateUi[w]["toolTip"].toStdString().c_str()));
|
||||
if (!w->whatsThis().isEmpty()) w->setWhatsThis(tr(listWidgetsRetranslateUi[w]["whatsThis"].toStdString().c_str()));
|
||||
if (!w->windowTitle().isEmpty()) w->setWindowTitle(tr(listWidgetsRetranslateUi[w]["windowTitle"].toStdString().c_str()));
|
||||
if (!w->statusTip().isEmpty()) w->setStatusTip(tr(listWidgetsRetranslateUi[w]["statusTip"].toStdString().c_str()));
|
||||
}
|
||||
|
||||
majorCombo->setItemText(0,tr("Major"));
|
||||
majorCombo->setItemText(1,tr("Minor"));
|
||||
majorCombo->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);
|
||||
|
||||
retranslateUi(this);
|
||||
}
|
||||
|
||||
|
||||
void GuiTopBar::on_playButton_clicked(bool clicked)
|
||||
{
|
||||
|
|
|
@ -53,6 +53,8 @@ public:
|
|||
void setSpeed(int value){ speedSpin->setValue(value); }
|
||||
int getSpeed(){return speedSpin->value();}
|
||||
|
||||
void updateTranslate();
|
||||
|
||||
public slots:
|
||||
void on_playFromStartButton_clicked(bool clicked);
|
||||
void on_playButton_clicked(bool clicked);
|
||||
|
@ -80,6 +82,9 @@ private:
|
|||
CSong* m_song;
|
||||
CSettings* m_settings;
|
||||
|
||||
QMap<QWidget*,QMap<QString,QString>> listWidgetsRetranslateUi;
|
||||
QMap<QAction*,QMap<QString,QString>> listActionsRetranslateUi;
|
||||
|
||||
bool m_atTheEndOfTheSong;
|
||||
};
|
||||
|
||||
|
|
|
@ -31,32 +31,6 @@ int main(int argc, char *argv[])
|
|||
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QString locale = QLocale::system().name();
|
||||
printf("locale = %s\n", qPrintable(locale));
|
||||
|
||||
QString localeDirectory =
|
||||
#ifdef Q_OS_WIN32
|
||||
QApplication::applicationDirPath() + "/translations/";
|
||||
#endif
|
||||
#ifdef Q_OS_LINUX
|
||||
QApplication::applicationDirPath() + "/../share/games/" + QSTR_APPNAME + "/translations/";
|
||||
#endif
|
||||
#ifdef Q_OS_DARWIN
|
||||
QApplication::applicationDirPath() + "/../Resources/translations/";
|
||||
#endif
|
||||
|
||||
|
||||
QTranslator translator;
|
||||
if (!translator.load(QSTR_APPNAME + QString("_") + locale , localeDirectory))
|
||||
if (!translator.load(QSTR_APPNAME + QString("_") + locale, QApplication::applicationDirPath() + "/translations/"))
|
||||
translator.load(QSTR_APPNAME + QString("_") + locale, QApplication::applicationDirPath());
|
||||
|
||||
app.installTranslator(&translator);
|
||||
|
||||
QTranslator qtTranslator;
|
||||
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
|
||||
app.installTranslator(&qtTranslator);
|
||||
|
||||
if (!QGLFormat::hasOpenGL()) {
|
||||
QMessageBox::information(0, QMessageBox::tr("OpenGL support"),
|
||||
QMessageBox::tr("This system does not support OpenGL which is needed to run Piano Booster."));
|
||||
|
|
|
@ -155,6 +155,7 @@ QtWindow::QtWindow()
|
|||
|
||||
m_song->openMidiPort(CMidiDevice::MIDI_INPUT, midiInputName);
|
||||
m_song->openMidiPort(CMidiDevice::MIDI_OUTPUT,m_settings->value("midi/output").toString());
|
||||
|
||||
}
|
||||
|
||||
void QtWindow::init()
|
||||
|
@ -166,6 +167,7 @@ void QtWindow::init()
|
|||
createMenus();
|
||||
readSettings();
|
||||
|
||||
refreshTranslate();
|
||||
show();
|
||||
}
|
||||
|
||||
|
@ -727,11 +729,96 @@ void QtWindow::loadTutorHtml(const QString & name)
|
|||
}
|
||||
else
|
||||
{
|
||||
m_tutorWindow->setSource(QUrl("file:///" + name));
|
||||
QFile file(name);
|
||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
|
||||
|
||||
QTextStream out(&file);
|
||||
out.setCodec("UTF-8");
|
||||
|
||||
m_tutorWindow->setHtml(out.readAll());
|
||||
m_tutorWindow->setFixedHeight(104);
|
||||
m_tutorWindow->show();
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void QtWindow::refreshTranslate(){
|
||||
QString localeDirectory =
|
||||
#ifdef Q_OS_WIN32
|
||||
QApplication::applicationDirPath() + "/translations/";
|
||||
#endif
|
||||
#ifdef Q_OS_LINUX
|
||||
QApplication::applicationDirPath() + "/../share/games/" + QSTR_APPNAME + "/translations/";
|
||||
#endif
|
||||
#ifdef Q_OS_DARWIN
|
||||
QApplication::applicationDirPath() + "/../Resources/translations/";
|
||||
#endif
|
||||
|
||||
QString locale = m_settings->value("General/lang",QLocale::system().bcp47Name()).toString();
|
||||
|
||||
qApp->removeTranslator(&translator);
|
||||
qApp->removeTranslator(&qtTranslator);
|
||||
|
||||
// save original
|
||||
if (listWidgetsRetranslateUi.size()==0){
|
||||
QList<QWidget*> l2 = this->findChildren<QWidget *>();
|
||||
for (auto &w:l2){
|
||||
QMap<QString,QString> m;
|
||||
m["toolTip"]=w->toolTip();
|
||||
m["whatsThis"]=w->whatsThis();
|
||||
m["windowTitle"]=w->windowTitle();
|
||||
m["statusTip"]=w->statusTip();
|
||||
listWidgetsRetranslateUi[w]=m;
|
||||
}
|
||||
|
||||
QList<QAction*> l = this->findChildren<QAction *>();
|
||||
for (auto &w:l){
|
||||
QMap<QString,QString> m;
|
||||
m["toolTip"]=w->toolTip();
|
||||
m["whatsThis"]=w->whatsThis();
|
||||
m["statusTip"]=w->statusTip();
|
||||
m["text"]=w->text();
|
||||
listActionsRetranslateUi[w]=m;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// set translator for app
|
||||
if (!translator.load(QSTR_APPNAME + QString("_") + locale , localeDirectory))
|
||||
if (!translator.load(QSTR_APPNAME + QString("_") + locale, QApplication::applicationDirPath() + "/translations/"))
|
||||
translator.load(QSTR_APPNAME + QString("_") + locale, QApplication::applicationDirPath());
|
||||
qApp->installTranslator(&translator);
|
||||
|
||||
// set translator for default widget's text (for example: QMessageBox's buttons)
|
||||
#ifdef __WIN32
|
||||
qtTranslator.load("qt_"+locale,localeDirectory);
|
||||
#else
|
||||
qtTranslator.load("qt_"+locale,QLibraryInfo::location(QLibraryInfo::TranslationsPath));
|
||||
#endif
|
||||
qApp->installTranslator(&qtTranslator);
|
||||
|
||||
|
||||
// retranslate UI
|
||||
QList<QWidget*> l2 = this->findChildren<QWidget *>();
|
||||
for (auto &w:l2){
|
||||
if (!w->toolTip().isEmpty()) w->setToolTip(tr(listWidgetsRetranslateUi[w]["toolTip"].toStdString().c_str()));
|
||||
if (!w->whatsThis().isEmpty()) w->setWhatsThis(tr(listWidgetsRetranslateUi[w]["whatsThis"].toStdString().c_str()));
|
||||
if (!w->windowTitle().isEmpty()) w->setWindowTitle(tr(listWidgetsRetranslateUi[w]["windowTitle"].toStdString().c_str()));
|
||||
if (!w->statusTip().isEmpty()) w->setStatusTip(tr(listWidgetsRetranslateUi[w]["statusTip"].toStdString().c_str()));
|
||||
}
|
||||
|
||||
QList<QAction*> l = this->findChildren<QAction *>();
|
||||
for (auto &w:l){
|
||||
if (!w->toolTip().isEmpty()) w->setToolTip(tr(listActionsRetranslateUi[w]["toolTip"].toStdString().c_str()));
|
||||
if (!w->whatsThis().isEmpty()) w->setWhatsThis(tr(listActionsRetranslateUi[w]["whatsThis"].toStdString().c_str()));
|
||||
if (!w->statusTip().isEmpty()) w->setStatusTip(tr(listActionsRetranslateUi[w]["statusTip"].toStdString().c_str()));
|
||||
if (!w->text().isEmpty()) w->setText(tr(listActionsRetranslateUi[w]["text"].toStdString().c_str()));
|
||||
}
|
||||
|
||||
m_sidePanel->updateTranslate();
|
||||
m_topBar->updateTranslate();
|
||||
m_settings->updateWarningMessages();
|
||||
m_settings->updateTutorPage();
|
||||
}
|
||||
|
|
|
@ -89,6 +89,8 @@ private slots:
|
|||
GuiPreferencesDialog preferencesDialog(this);
|
||||
preferencesDialog.init(m_song, m_settings, m_glWidget);
|
||||
preferencesDialog.exec();
|
||||
|
||||
refreshTranslate();
|
||||
}
|
||||
|
||||
void showSongDetailsDialog()
|
||||
|
@ -169,6 +171,8 @@ private:
|
|||
void addShortcutAction(const QString & key, const char * method);
|
||||
void updateRecentFileActions();
|
||||
QString strippedName(const QString &fullFileName);
|
||||
void refreshTranslate();
|
||||
|
||||
|
||||
void displayUsage();
|
||||
void createActions();
|
||||
|
@ -182,6 +186,11 @@ private:
|
|||
GuiTopBar *m_topBar;
|
||||
QTextBrowser *m_tutorWindow;
|
||||
|
||||
QTranslator translator;
|
||||
QTranslator qtTranslator;
|
||||
|
||||
QMap<QWidget*,QMap<QString,QString>> listWidgetsRetranslateUi;
|
||||
QMap<QAction*,QMap<QString,QString>> listActionsRetranslateUi;
|
||||
|
||||
CGLView *m_glWidget;
|
||||
QAction *m_openAct;
|
||||
|
|
|
@ -266,7 +266,7 @@ void CSettings::updateTutorPage()
|
|||
|
||||
QString fileBase = fileInfo.absolutePath() + "/InfoPages/" + fileInfo.completeBaseName() + "_";
|
||||
|
||||
QString locale = QLocale::system().name();
|
||||
QString locale = value("General/lang",QLocale::system().bcp47Name()).toString();
|
||||
|
||||
if (m_tutorPagesEnabled)
|
||||
{
|
||||
|
|
BIN
src/fonts/DejaVuSans.ttf
Normal file
BIN
src/fonts/DejaVuSans.ttf
Normal file
Binary file not shown.
|
@ -10,17 +10,25 @@ SET( TRANSLATIONS_FILES
|
|||
pianobooster_ru.ts
|
||||
)
|
||||
|
||||
if(INSTALL_ALL_LANGS)
|
||||
file (GLOB TRANSLATIONS_FILES "*.ts")
|
||||
endif()
|
||||
|
||||
get_filename_component(full_path_blank_ts ${CMAKE_CURRENT_SOURCE_DIR}/pianobooster_blank.ts ABSOLUTE)
|
||||
list(REMOVE_ITEM TRANSLATIONS_FILES ${full_path_blank_ts})
|
||||
|
||||
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS LinguistTools)
|
||||
|
||||
QT5_ADD_TRANSLATION(QM_FILES ${TRANSLATIONS_FILES})
|
||||
ADD_CUSTOM_TARGET(translations ALL DEPENDS ${QM_FILES})
|
||||
|
||||
IF (UNIX AND NOT APPLE)
|
||||
INSTALL( FILES ${QM_FILES}
|
||||
DESTINATION share/games/pianobooster/translations )
|
||||
INSTALL( FILES ${QM_FILES} DESTINATION share/games/pianobooster/translations )
|
||||
INSTALL( FILES langs.json DESTINATION share/games/pianobooster/translations )
|
||||
ENDIF (UNIX AND NOT APPLE)
|
||||
|
||||
IF (WIN32)
|
||||
INSTALL( FILES ${QM_FILES}
|
||||
DESTINATION . )
|
||||
INSTALL( FILES ${QM_FILES} DESTINATION . )
|
||||
INSTALL( FILES langs.json DESTINATION . )
|
||||
ENDIF (WIN32)
|
||||
|
||||
|
|
742
translations/langs.json
Normal file
742
translations/langs.json
Normal file
|
@ -0,0 +1,742 @@
|
|||
{
|
||||
"aa": {
|
||||
"name": "Afar",
|
||||
"nativeName": "afaraf"
|
||||
},
|
||||
"ab": {
|
||||
"name": "Abkhaz",
|
||||
"nativeName": "аҧсуа"
|
||||
},
|
||||
"ae": {
|
||||
"name": "Avestan",
|
||||
"nativeName": "avesta"
|
||||
},
|
||||
"af": {
|
||||
"name": "Afrikaans",
|
||||
"nativeName": "afrikaans"
|
||||
},
|
||||
"ak": {
|
||||
"name": "Akan",
|
||||
"nativeName": "akan"
|
||||
},
|
||||
"am": {
|
||||
"name": "Amharic",
|
||||
"nativeName": "አማርኛ"
|
||||
},
|
||||
"an": {
|
||||
"name": "Aragonese",
|
||||
"nativeName": "aragonés"
|
||||
},
|
||||
"ar": {
|
||||
"name": "Arabic",
|
||||
"nativeName": "العربية"
|
||||
},
|
||||
"as": {
|
||||
"name": "Assamese",
|
||||
"nativeName": "অসমীয়া"
|
||||
},
|
||||
"av": {
|
||||
"name": "Avaric",
|
||||
"nativeName": "авар"
|
||||
},
|
||||
"ay": {
|
||||
"name": "Aymara",
|
||||
"nativeName": "aymar"
|
||||
},
|
||||
"az": {
|
||||
"name": "Azerbaijani",
|
||||
"nativeName": "azərbaycanca"
|
||||
},
|
||||
"ba": {
|
||||
"name": "Bashkir",
|
||||
"nativeName": "башҡорт"
|
||||
},
|
||||
"be": {
|
||||
"name": "Belarusian",
|
||||
"nativeName": "беларуская"
|
||||
},
|
||||
"bg": {
|
||||
"name": "Bulgarian",
|
||||
"nativeName": "български"
|
||||
},
|
||||
"bh": {
|
||||
"name": "Bihari",
|
||||
"nativeName": "भोजपुरी"
|
||||
},
|
||||
"bi": {
|
||||
"name": "Bislama",
|
||||
"nativeName": "bislama"
|
||||
},
|
||||
"bm": {
|
||||
"name": "Bambara",
|
||||
"nativeName": "bamanankan"
|
||||
},
|
||||
"bn": {
|
||||
"name": "Bengali",
|
||||
"nativeName": "বাংলা"
|
||||
},
|
||||
"bo": {
|
||||
"name": "Tibetan Standard, Tibetan, Central",
|
||||
"nativeName": "བོད་ཡིག"
|
||||
},
|
||||
"br": {
|
||||
"name": "Breton",
|
||||
"nativeName": "brezhoneg"
|
||||
},
|
||||
"bs": {
|
||||
"name": "Bosnian",
|
||||
"nativeName": "bosanski"
|
||||
},
|
||||
"ca": {
|
||||
"name": "Catalan; Valencian",
|
||||
"nativeName": "català"
|
||||
},
|
||||
"ce": {
|
||||
"name": "Chechen",
|
||||
"nativeName": "нохчийн"
|
||||
},
|
||||
"ch": {
|
||||
"name": "Chamorro",
|
||||
"nativeName": "chamoru"
|
||||
},
|
||||
"co": {
|
||||
"name": "Corsican",
|
||||
"nativeName": "corsu"
|
||||
},
|
||||
"cr": {
|
||||
"name": "Cree",
|
||||
"nativeName": "ᓀᐦᐃᔭᐍᐏᐣ"
|
||||
},
|
||||
"cs": {
|
||||
"name": "Czech",
|
||||
"nativeName": "čeština"
|
||||
},
|
||||
"cu": {
|
||||
"name": "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic",
|
||||
"nativeName": "словѣньскъ"
|
||||
},
|
||||
"cv": {
|
||||
"name": "Chuvash",
|
||||
"nativeName": "чӑвашла"
|
||||
},
|
||||
"cy": {
|
||||
"name": "Welsh",
|
||||
"nativeName": "cymraeg"
|
||||
},
|
||||
"da": {
|
||||
"name": "Danish",
|
||||
"nativeName": "dansk"
|
||||
},
|
||||
"de": {
|
||||
"name": "German",
|
||||
"nativeName": "deutsch"
|
||||
},
|
||||
"dv": {
|
||||
"name": "Divehi; Dhivehi; Maldivian",
|
||||
"nativeName": "ދިވެހި"
|
||||
},
|
||||
"dz": {
|
||||
"name": "Dzongkha",
|
||||
"nativeName": "རྫོང་ཁ"
|
||||
},
|
||||
"ee": {
|
||||
"name": "Ewe",
|
||||
"nativeName": "eʋegbe"
|
||||
},
|
||||
"el": {
|
||||
"name": "Greek, Modern",
|
||||
"nativeName": "ελληνικά"
|
||||
},
|
||||
"en": {
|
||||
"name": "English",
|
||||
"nativeName": "english"
|
||||
},
|
||||
"eo": {
|
||||
"name": "Esperanto",
|
||||
"nativeName": "esperanto"
|
||||
},
|
||||
"es": {
|
||||
"name": "Spanish; Castilian",
|
||||
"nativeName": "español"
|
||||
},
|
||||
"et": {
|
||||
"name": "Estonian",
|
||||
"nativeName": "eesti"
|
||||
},
|
||||
"eu": {
|
||||
"name": "Basque",
|
||||
"nativeName": "euskara"
|
||||
},
|
||||
"fa": {
|
||||
"name": "Persian",
|
||||
"nativeName": "فارسی"
|
||||
},
|
||||
"ff": {
|
||||
"name": "Fula; Fulah; Pulaar; Pular",
|
||||
"nativeName": "pulaar"
|
||||
},
|
||||
"fi": {
|
||||
"name": "Finnish",
|
||||
"nativeName": "suomi"
|
||||
},
|
||||
"fj": {
|
||||
"name": "Fijian",
|
||||
"nativeName": "वोस वाकविता"
|
||||
},
|
||||
"fo": {
|
||||
"name": "Faroese",
|
||||
"nativeName": "føroyskt"
|
||||
},
|
||||
"fr": {
|
||||
"name": "French",
|
||||
"nativeName": "français"
|
||||
},
|
||||
"fy": {
|
||||
"name": "Western Frisian",
|
||||
"nativeName": "frysk"
|
||||
},
|
||||
"ga": {
|
||||
"name": "Irish",
|
||||
"nativeName": "gaeilge"
|
||||
},
|
||||
"gd": {
|
||||
"name": "Scottish Gaelic; Gaelic",
|
||||
"nativeName": "gàidhlig"
|
||||
},
|
||||
"gl": {
|
||||
"name": "Galician",
|
||||
"nativeName": "galego"
|
||||
},
|
||||
"gn": {
|
||||
"name": "Guaraní",
|
||||
"nativeName": "avañe'ẽ"
|
||||
},
|
||||
"gu": {
|
||||
"name": "Gujarati",
|
||||
"nativeName": "ગુજરાતી"
|
||||
},
|
||||
"gv": {
|
||||
"name": "Manx",
|
||||
"nativeName": "gaelg"
|
||||
},
|
||||
"ha": {
|
||||
"name": "Hausa",
|
||||
"nativeName": "هَوُسَ"
|
||||
},
|
||||
"he": {
|
||||
"name": "Hebrew (modern)",
|
||||
"nativeName": "עברית"
|
||||
},
|
||||
"hi": {
|
||||
"name": "Hindi",
|
||||
"nativeName": "हिन्दी"
|
||||
},
|
||||
"ho": {
|
||||
"name": "Hiri Motu",
|
||||
"nativeName": "Hiri Motu"
|
||||
},
|
||||
"hr": {
|
||||
"name": "Croatian",
|
||||
"nativeName": "hrvatski"
|
||||
},
|
||||
"ht": {
|
||||
"name": "Haitian; Haitian Creole",
|
||||
"nativeName": "kreyòl ayisyen"
|
||||
},
|
||||
"hu": {
|
||||
"name": "Hungarian",
|
||||
"nativeName": "magyar"
|
||||
},
|
||||
"hy": {
|
||||
"name": "Armenian",
|
||||
"nativeName": "Հայերեն"
|
||||
},
|
||||
"hz": {
|
||||
"name": "Herero",
|
||||
"nativeName": "otjiherero"
|
||||
},
|
||||
"ia": {
|
||||
"name": "Interlingua",
|
||||
"nativeName": "interlingua"
|
||||
},
|
||||
"id": {
|
||||
"name": "Indonesian",
|
||||
"nativeName": "bahasa Indonesia"
|
||||
},
|
||||
"ie": {
|
||||
"name": "Interlingue",
|
||||
"nativeName": "interlingue"
|
||||
},
|
||||
"ig": {
|
||||
"name": "Igbo",
|
||||
"nativeName": "igbo"
|
||||
},
|
||||
"ii": {
|
||||
"name": "Nuosu",
|
||||
"nativeName": "ꆈꌠꉙ"
|
||||
},
|
||||
"ik": {
|
||||
"name": "Inupiaq",
|
||||
"nativeName": "iñupiaq"
|
||||
},
|
||||
"io": {
|
||||
"name": "Ido",
|
||||
"nativeName": "ido"
|
||||
},
|
||||
"is": {
|
||||
"name": "Icelandic",
|
||||
"nativeName": "íslenska"
|
||||
},
|
||||
"it": {
|
||||
"name": "Italian",
|
||||
"nativeName": "italiano"
|
||||
},
|
||||
"iu": {
|
||||
"name": "Inuktitut",
|
||||
"nativeName": "ᐃᓄᒃᑎᑐᑦ"
|
||||
},
|
||||
"ja": {
|
||||
"name": "Japanese",
|
||||
"nativeName": "日本語"
|
||||
},
|
||||
"jv": {
|
||||
"name": "Javanese",
|
||||
"nativeName": "ꦧꦱꦗꦮ"
|
||||
},
|
||||
"ka": {
|
||||
"name": "Georgian",
|
||||
"nativeName": "ქართული"
|
||||
},
|
||||
"kg": {
|
||||
"name": "Kongo",
|
||||
"nativeName": "kikongo"
|
||||
},
|
||||
"ki": {
|
||||
"name": "Kikuyu, Gikuyu",
|
||||
"nativeName": "gĩkũyũ"
|
||||
},
|
||||
"kj": {
|
||||
"name": "Kwanyama, Kuanyama",
|
||||
"nativeName": "kuanyama"
|
||||
},
|
||||
"kk": {
|
||||
"name": "Kazakh",
|
||||
"nativeName": "қазақша"
|
||||
},
|
||||
"kl": {
|
||||
"name": "Kalaallisut, Greenlandic",
|
||||
"nativeName": "kalaallisut"
|
||||
},
|
||||
"km": {
|
||||
"name": "Khmer",
|
||||
"nativeName": "ភាសាខ្មែរ"
|
||||
},
|
||||
"kn": {
|
||||
"name": "Kannada",
|
||||
"nativeName": "ಕನ್ನಡ"
|
||||
},
|
||||
"ko": {
|
||||
"name": "Korean",
|
||||
"nativeName": "한국어"
|
||||
},
|
||||
"kr": {
|
||||
"name": "Kanuri",
|
||||
"nativeName": "kanuri"
|
||||
},
|
||||
"ks": {
|
||||
"name": "Kashmiri",
|
||||
"nativeName": "कॉशुर"
|
||||
},
|
||||
"ku": {
|
||||
"name": "Kurdish",
|
||||
"nativeName": "kurdî"
|
||||
},
|
||||
"kv": {
|
||||
"name": "Komi",
|
||||
"nativeName": "коми"
|
||||
},
|
||||
"kw": {
|
||||
"name": "Cornish",
|
||||
"nativeName": "kernowek"
|
||||
},
|
||||
"ky": {
|
||||
"name": "Kirghiz, Kyrgyz",
|
||||
"nativeName": "кыргызча"
|
||||
},
|
||||
"la": {
|
||||
"name": "Latin",
|
||||
"nativeName": "latine"
|
||||
},
|
||||
"lb": {
|
||||
"name": "Luxembourgish, Letzeburgesch",
|
||||
"nativeName": "lëtzebuergesch"
|
||||
},
|
||||
"lg": {
|
||||
"name": "Luganda",
|
||||
"nativeName": "luganda"
|
||||
},
|
||||
"li": {
|
||||
"name": "Limburgish, Limburgan, Limburger",
|
||||
"nativeName": "lèmburgs"
|
||||
},
|
||||
"ln": {
|
||||
"name": "Lingala",
|
||||
"nativeName": "lingála"
|
||||
},
|
||||
"lo": {
|
||||
"name": "Lao",
|
||||
"nativeName": "ພາສາລາວ"
|
||||
},
|
||||
"lt": {
|
||||
"name": "Lithuanian",
|
||||
"nativeName": "lietuvių"
|
||||
},
|
||||
"lu": {
|
||||
"name": "Luba-Katanga",
|
||||
"nativeName": "kiluba"
|
||||
},
|
||||
"lv": {
|
||||
"name": "Latvian",
|
||||
"nativeName": "latviešu"
|
||||
},
|
||||
"mg": {
|
||||
"name": "Malagasy",
|
||||
"nativeName": "malagasy"
|
||||
},
|
||||
"mh": {
|
||||
"name": "Marshallese",
|
||||
"nativeName": "ebon"
|
||||
},
|
||||
"mi": {
|
||||
"name": "Māori",
|
||||
"nativeName": "māori"
|
||||
},
|
||||
"mk": {
|
||||
"name": "Macedonian",
|
||||
"nativeName": "македонски"
|
||||
},
|
||||
"ml": {
|
||||
"name": "Malayalam",
|
||||
"nativeName": "മലയാളം"
|
||||
},
|
||||
"mn": {
|
||||
"name": "Mongolian",
|
||||
"nativeName": "монгол"
|
||||
},
|
||||
"mr": {
|
||||
"name": "Marathi (Marāṭhī)",
|
||||
"nativeName": "मराठी"
|
||||
},
|
||||
"ms": {
|
||||
"name": "Malay",
|
||||
"nativeName": "bahasa Melayu"
|
||||
},
|
||||
"mt": {
|
||||
"name": "Maltese",
|
||||
"nativeName": "malti"
|
||||
},
|
||||
"my": {
|
||||
"name": "Burmese",
|
||||
"nativeName": "ဗမာစာ"
|
||||
},
|
||||
"na": {
|
||||
"name": "Nauru",
|
||||
"nativeName": "ekakairũ naoero"
|
||||
},
|
||||
"nb": {
|
||||
"name": "Norwegian Bokmål",
|
||||
"nativeName": "bokmål"
|
||||
},
|
||||
"nd": {
|
||||
"name": "North Ndebele",
|
||||
"nativeName": "isiNdebele saseNyakatho"
|
||||
},
|
||||
"ne": {
|
||||
"name": "Nepali",
|
||||
"nativeName": "नेपाली"
|
||||
},
|
||||
"ng": {
|
||||
"name": "Ndonga",
|
||||
"nativeName": "owambo"
|
||||
},
|
||||
"nl": {
|
||||
"name": "Dutch",
|
||||
"nativeName": "nederlands"
|
||||
},
|
||||
"nn": {
|
||||
"name": "Norwegian Nynorsk",
|
||||
"nativeName": "nynorsk"
|
||||
},
|
||||
"no": {
|
||||
"name": "Norwegian",
|
||||
"nativeName": "norsk"
|
||||
},
|
||||
"nr": {
|
||||
"name": "South Ndebele",
|
||||
"nativeName": "isiNdebele seSewula"
|
||||
},
|
||||
"nv": {
|
||||
"name": "Navajo, Navaho",
|
||||
"nativeName": "dinékʼehǰí"
|
||||
},
|
||||
"ny": {
|
||||
"name": "Chichewa; Chewa; Nyanja",
|
||||
"nativeName": "chiсheŵa"
|
||||
},
|
||||
"oc": {
|
||||
"name": "Occitan",
|
||||
"nativeName": "occitan"
|
||||
},
|
||||
"oj": {
|
||||
"name": "Ojibwe, Ojibwa",
|
||||
"nativeName": "ᐊᓂᔑᓈᐯᒧᐎᓐ"
|
||||
},
|
||||
"om": {
|
||||
"name": "Oromo",
|
||||
"nativeName": "oromoo"
|
||||
},
|
||||
"or": {
|
||||
"name": "Oriya",
|
||||
"nativeName": "ଓଡ଼ିଆ"
|
||||
},
|
||||
"os": {
|
||||
"name": "Ossetian, Ossetic",
|
||||
"nativeName": "иронау"
|
||||
},
|
||||
"pa": {
|
||||
"name": "Panjabi; Punjabi",
|
||||
"nativeName": "ਪੰਜਾਬੀ"
|
||||
},
|
||||
"pi": {
|
||||
"name": "Pāli",
|
||||
"nativeName": "पाऴि"
|
||||
},
|
||||
"pl": {
|
||||
"name": "Polish",
|
||||
"nativeName": "polski"
|
||||
},
|
||||
"ps": {
|
||||
"name": "Pashto, Pushto",
|
||||
"nativeName": "پښتو"
|
||||
},
|
||||
"pt": {
|
||||
"name": "Portuguese",
|
||||
"nativeName": "português"
|
||||
},
|
||||
"qu": {
|
||||
"name": "Runa Simi, Kichwa",
|
||||
"nativeName": "quechua"
|
||||
},
|
||||
"rm": {
|
||||
"name": "Romansh",
|
||||
"nativeName": "rumantsch"
|
||||
},
|
||||
"rn": {
|
||||
"name": "Kirundi; Rundi",
|
||||
"nativeName": "ikirundi"
|
||||
},
|
||||
"ro": {
|
||||
"name": "Romanian, Moldavian, Moldovan",
|
||||
"nativeName": "română"
|
||||
},
|
||||
"ru": {
|
||||
"name": "Russian",
|
||||
"nativeName": "русский"
|
||||
},
|
||||
"rw": {
|
||||
"name": "Kinyarwanda",
|
||||
"nativeName": "kinyarwanda"
|
||||
},
|
||||
"sa": {
|
||||
"name": "Sanskrit (Saṁskṛta)",
|
||||
"nativeName": "संस्कृतम्"
|
||||
},
|
||||
"sc": {
|
||||
"name": "Sardinian",
|
||||
"nativeName": "sardu"
|
||||
},
|
||||
"sd": {
|
||||
"name": "Sindhi",
|
||||
"nativeName": "سنڌي"
|
||||
},
|
||||
"se": {
|
||||
"name": "Northern Sami",
|
||||
"nativeName": "davvisámegiella"
|
||||
},
|
||||
"sg": {
|
||||
"name": "Sango",
|
||||
"nativeName": "sängö"
|
||||
},
|
||||
"sh": {
|
||||
"name": "Serbo-Croatian",
|
||||
"nativeName": "српскохрватски"
|
||||
},
|
||||
"si": {
|
||||
"name": "Sinhala, Sinhalese",
|
||||
"nativeName": "සිංහල"
|
||||
},
|
||||
"sk": {
|
||||
"name": "Slovak",
|
||||
"nativeName": "slovenčina"
|
||||
},
|
||||
"sl": {
|
||||
"name": "Slovene",
|
||||
"nativeName": "slovenščina"
|
||||
},
|
||||
"sm": {
|
||||
"name": "Samoan",
|
||||
"nativeName": "gagana Sāmoa"
|
||||
},
|
||||
"sn": {
|
||||
"name": "Shona",
|
||||
"nativeName": "chiShona"
|
||||
},
|
||||
"so": {
|
||||
"name": "Somali",
|
||||
"nativeName": "soomaaliga"
|
||||
},
|
||||
"sq": {
|
||||
"name": "Albanian",
|
||||
"nativeName": "shqip"
|
||||
},
|
||||
"sr": {
|
||||
"name": "Serbian",
|
||||
"nativeName": "српски"
|
||||
},
|
||||
"ss": {
|
||||
"name": "Swati",
|
||||
"nativeName": "siSwati"
|
||||
},
|
||||
"st": {
|
||||
"name": "Southern Sotho",
|
||||
"nativeName": "sesotho"
|
||||
},
|
||||
"su": {
|
||||
"name": "Sundanese",
|
||||
"nativeName": "basa Sunda"
|
||||
},
|
||||
"sv": {
|
||||
"name": "Swedish",
|
||||
"nativeName": "svenska"
|
||||
},
|
||||
"sw": {
|
||||
"name": "Swahili",
|
||||
"nativeName": "kiswahili"
|
||||
},
|
||||
"ta": {
|
||||
"name": "Tamil",
|
||||
"nativeName": "தமிழ்"
|
||||
},
|
||||
"te": {
|
||||
"name": "Telugu",
|
||||
"nativeName": "తెలుగు"
|
||||
},
|
||||
"tg": {
|
||||
"name": "Tajik",
|
||||
"nativeName": "тоҷикӣ"
|
||||
},
|
||||
"th": {
|
||||
"name": "Thai",
|
||||
"nativeName": "ไทย"
|
||||
},
|
||||
"ti": {
|
||||
"name": "Tigrinya",
|
||||
"nativeName": "ትግርኛ"
|
||||
},
|
||||
"tk": {
|
||||
"name": "Turkmen",
|
||||
"nativeName": "türkmençe"
|
||||
},
|
||||
"tl": {
|
||||
"name": "Tagalog",
|
||||
"nativeName": "tagálog"
|
||||
},
|
||||
"tn": {
|
||||
"name": "Tswana",
|
||||
"nativeName": "setswana"
|
||||
},
|
||||
"to": {
|
||||
"name": "Tonga (Tonga Islands)",
|
||||
"nativeName": "faka Tonga"
|
||||
},
|
||||
"tr": {
|
||||
"name": "Turkish",
|
||||
"nativeName": "türkçe"
|
||||
},
|
||||
"ts": {
|
||||
"name": "Tsonga",
|
||||
"nativeName": "xitsonga"
|
||||
},
|
||||
"tt": {
|
||||
"name": "Tatar",
|
||||
"nativeName": "татарча"
|
||||
},
|
||||
"tw": {
|
||||
"name": "Twi",
|
||||
"nativeName": "twi"
|
||||
},
|
||||
"ty": {
|
||||
"name": "Tahitian",
|
||||
"nativeName": "reo Tahiti"
|
||||
},
|
||||
"ug": {
|
||||
"name": "Uighur; Uyghur",
|
||||
"nativeName": "ئۇيغۇرچە"
|
||||
},
|
||||
"uk": {
|
||||
"name": "Ukrainian",
|
||||
"nativeName": "українська"
|
||||
},
|
||||
"ur": {
|
||||
"name": "Urdu",
|
||||
"nativeName": "اردو"
|
||||
},
|
||||
"uz": {
|
||||
"name": "Uzbek",
|
||||
"nativeName": "ўзбекча"
|
||||
},
|
||||
"ve": {
|
||||
"name": "Venda",
|
||||
"nativeName": "tshivenḓa"
|
||||
},
|
||||
"vi": {
|
||||
"name": "Vietnamese",
|
||||
"nativeName": "tiếng Việt"
|
||||
},
|
||||
"vo": {
|
||||
"name": "Volapük",
|
||||
"nativeName": "volapük"
|
||||
},
|
||||
"wa": {
|
||||
"name": "Walloon",
|
||||
"nativeName": "walon"
|
||||
},
|
||||
"wo": {
|
||||
"name": "Wolof",
|
||||
"nativeName": "wolof"
|
||||
},
|
||||
"xh": {
|
||||
"name": "Xhosa",
|
||||
"nativeName": "isiXhosa"
|
||||
},
|
||||
"yi": {
|
||||
"name": "Yiddish",
|
||||
"nativeName": "ייִדיש"
|
||||
},
|
||||
"yo": {
|
||||
"name": "Yoruba",
|
||||
"nativeName": "yorùbá"
|
||||
},
|
||||
"za": {
|
||||
"name": "Zhuang, Chuang",
|
||||
"nativeName": "sawcuengh"
|
||||
},
|
||||
"zh": {
|
||||
"name": "Chinese",
|
||||
"nativeName": "中文"
|
||||
},
|
||||
"zu": {
|
||||
"name": "Zulu",
|
||||
"nativeName": "isiZulu"
|
||||
}
|
||||
}
|
|
@ -1107,37 +1107,47 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="39"/>
|
||||
<source>Preferences</source>
|
||||
<location filename="../src/GuiPreferencesDialog.ui" line="171"/>
|
||||
<source>Language</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="40"/>
|
||||
<source>Automatic (Recommended)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="41"/>
|
||||
<source>On the Beat</source>
|
||||
<location filename="../src/GuiPreferencesDialog.ui" line="179"/>
|
||||
<source>Language:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="42"/>
|
||||
<source>After the Beat</source>
|
||||
<source>Preferences</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="43"/>
|
||||
<source>Full (Recommended)</source>
|
||||
<source>Automatic (Recommended)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="44"/>
|
||||
<source>Medium</source>
|
||||
<source>On the Beat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="45"/>
|
||||
<source>After the Beat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="46"/>
|
||||
<source>Full (Recommended)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="47"/>
|
||||
<source>Medium</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiPreferencesDialog.cpp" line="48"/>
|
||||
<source>None</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1236,11 +1246,13 @@
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiSidePanel.cpp" line="57"/>
|
||||
<location filename="../src/GuiSidePanel.cpp" line="250"/>
|
||||
<source>Drums</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiSidePanel.cpp" line="58"/>
|
||||
<location filename="../src/GuiSidePanel.cpp" line="251"/>
|
||||
<source>Melody</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1365,11 +1377,13 @@
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiTopBar.cpp" line="55"/>
|
||||
<location filename="../src/GuiTopBar.cpp" line="202"/>
|
||||
<source>Major</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GuiTopBar.cpp" line="56"/>
|
||||
<location filename="../src/GuiTopBar.cpp" line="203"/>
|
||||
<source>Minor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1505,12 +1519,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtMain.cpp" line="61"/>
|
||||
<location filename="../src/QtMain.cpp" line="35"/>
|
||||
<source>OpenGL support</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtMain.cpp" line="62"/>
|
||||
<location filename="../src/QtMain.cpp" line="36"/>
|
||||
<source>This system does not support OpenGL which is needed to run Piano Booster.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1546,317 +1560,317 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="232"/>
|
||||
<location filename="../src/QtWindow.cpp" line="240"/>
|
||||
<location filename="../src/QtWindow.cpp" line="264"/>
|
||||
<location filename="../src/QtWindow.cpp" line="234"/>
|
||||
<location filename="../src/QtWindow.cpp" line="242"/>
|
||||
<location filename="../src/QtWindow.cpp" line="266"/>
|
||||
<source>PianoBooster Midi File Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="233"/>
|
||||
<location filename="../src/QtWindow.cpp" line="235"/>
|
||||
<source>Cannot Open"</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="241"/>
|
||||
<location filename="../src/QtWindow.cpp" line="243"/>
|
||||
<source>Not a Midi File "</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="265"/>
|
||||
<location filename="../src/QtWindow.cpp" line="267"/>
|
||||
<source>Not a valid MIDI file "</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="341"/>
|
||||
<location filename="../src/QtWindow.cpp" line="343"/>
|
||||
<source>&Open...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="342"/>
|
||||
<location filename="../src/QtWindow.cpp" line="344"/>
|
||||
<source>Ctrl+O</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="343"/>
|
||||
<location filename="../src/QtWindow.cpp" line="345"/>
|
||||
<source>Open an existing file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="346"/>
|
||||
<location filename="../src/QtWindow.cpp" line="348"/>
|
||||
<source>E&xit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="347"/>
|
||||
<location filename="../src/QtWindow.cpp" line="349"/>
|
||||
<source>Ctrl+Q</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="348"/>
|
||||
<location filename="../src/QtWindow.cpp" line="350"/>
|
||||
<source>Exit the application</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="351"/>
|
||||
<location filename="../src/QtWindow.cpp" line="353"/>
|
||||
<source>&About</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="352"/>
|
||||
<location filename="../src/QtWindow.cpp" line="354"/>
|
||||
<source>Show the application's About box</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="355"/>
|
||||
<location filename="../src/QtWindow.cpp" line="357"/>
|
||||
<source>&PC Shortcut Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="356"/>
|
||||
<location filename="../src/QtWindow.cpp" line="358"/>
|
||||
<source>The PC Keyboard shortcut keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="359"/>
|
||||
<location filename="../src/QtWindow.cpp" line="361"/>
|
||||
<source>&Midi Setup ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="360"/>
|
||||
<location filename="../src/QtWindow.cpp" line="386"/>
|
||||
<location filename="../src/QtWindow.cpp" line="362"/>
|
||||
<location filename="../src/QtWindow.cpp" line="388"/>
|
||||
<source>Ctrl+S</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="361"/>
|
||||
<location filename="../src/QtWindow.cpp" line="363"/>
|
||||
<source>Setup the Midi input an output</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="364"/>
|
||||
<location filename="../src/QtWindow.cpp" line="366"/>
|
||||
<source>Piano &Keyboard Setting ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="365"/>
|
||||
<location filename="../src/QtWindow.cpp" line="367"/>
|
||||
<source>Ctrl+K</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="366"/>
|
||||
<location filename="../src/QtWindow.cpp" line="368"/>
|
||||
<source>Change the piano keyboard settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="369"/>
|
||||
<location filename="../src/QtWindow.cpp" line="371"/>
|
||||
<source>&Fullscreen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="370"/>
|
||||
<location filename="../src/QtWindow.cpp" line="372"/>
|
||||
<source>F11</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="374"/>
|
||||
<location filename="../src/QtWindow.cpp" line="376"/>
|
||||
<source>&Show the Side Panel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="375"/>
|
||||
<location filename="../src/QtWindow.cpp" line="377"/>
|
||||
<source>F12</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="381"/>
|
||||
<location filename="../src/QtWindow.cpp" line="383"/>
|
||||
<source>&Preferences ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="382"/>
|
||||
<location filename="../src/QtWindow.cpp" line="384"/>
|
||||
<source>Ctrl+P</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="385"/>
|
||||
<location filename="../src/QtWindow.cpp" line="387"/>
|
||||
<source>&Song Details ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="390"/>
|
||||
<location filename="../src/QtWindow.cpp" line="392"/>
|
||||
<source>Shift+F1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="395"/>
|
||||
<location filename="../src/QtWindow.cpp" line="397"/>
|
||||
<source>Alt+F1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="424"/>
|
||||
<location filename="../src/QtWindow.cpp" line="426"/>
|
||||
<source>&File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="433"/>
|
||||
<location filename="../src/QtWindow.cpp" line="436"/>
|
||||
<source>&View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="437"/>
|
||||
<location filename="../src/QtWindow.cpp" line="441"/>
|
||||
<source>&Song</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="440"/>
|
||||
<location filename="../src/QtWindow.cpp" line="445"/>
|
||||
<source>Set&up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="445"/>
|
||||
<location filename="../src/QtWindow.cpp" line="448"/>
|
||||
<location filename="../src/QtWindow.cpp" line="451"/>
|
||||
<location filename="../src/QtWindow.cpp" line="455"/>
|
||||
<source>&Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="452"/>
|
||||
<location filename="../src/QtWindow.cpp" line="459"/>
|
||||
<source>&Website</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="475"/>
|
||||
<location filename="../src/QtWindow.cpp" line="482"/>
|
||||
<source>&%1 %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="524"/>
|
||||
<location filename="../src/QtWindow.cpp" line="531"/>
|
||||
<source>Piano Booster Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="526"/>
|
||||
<location filename="../src/QtWindow.cpp" line="533"/>
|
||||
<source><h3>Getting Started</h3><p>You need a <b>MIDI Piano Keyboard </b> and a <b>MIDI interface</b> for the PC. If you don't have a MIDI keyboard you can still try out PianoBooster using the PC keyboard, 'X' is middle C.</p><p>To hear the music you will need a <b>General Midi sound synthesizer</b>. The "Microsoft GS Wavetable software synthesizer" that comes with Windows can be used but it introduces an unacceptable delay (latency). In Linux you can use <a href="www.fluidsynth.org">FluidSynth</a> or <a href="http://timidity.sourceforge.net/">Timidity</a></p><p>PianoBooster does not come with any <b>MIDI Files</b> and so you will need to get them from the net. See the <a href="http://pianobooster.sourceforge.net/faq.html" ><b>PianoBooster FAQ</b></a> for where to get MIDI files. PianoBooster works best with MIDI files that have separate left and right piano parts using MIDI channels 3 and 4.<h3>Setting Up</h3><p>First use the <i>Setup/Midi Setup</i> menu and in the dialog box select the MIDI input and MIDI output interfaces that match your hardware. Next use <i>File/Open</i> to open the MIDI file ".mid" or a karaoke ".kar" file. Now select whether you want to just <i>listen</i> to the music or <i>play along</i> on the piano keyboard by setting the <i>skill</i> level on the side panel. Finally when you are ready click the <i>play icon</i> (or press the <i>space bar</i>) to roll the music.<h3>Hints on Playing the Piano</h3><p>For hints on how to play the piano see: <a href="http://pianobooster.sourceforge.net/pianohints.html" ><b>Piano Hints</b></a></p><h3>More Information</h3><p>For more help please visit the PianoBooster <a href="http://pianobooster.sourceforge.net/" ><b>website</b></a>, the PianoBooster <a href="http://pianobooster.sourceforge.net/faq.html" ><b>FAQ</b></a> and the <a href="http://n2.nabble.com/Piano-Booster-Users-f1591936.html" ><b>user forum</b></a>. </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="575"/>
|
||||
<location filename="../src/QtWindow.cpp" line="582"/>
|
||||
<source>About Piano Booster</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="577"/>
|
||||
<location filename="../src/QtWindow.cpp" line="584"/>
|
||||
<source><b>PianoBooster - Version %1</b> <br><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="578"/>
|
||||
<location filename="../src/QtWindow.cpp" line="585"/>
|
||||
<source><b>Boost</b> your <b>Piano</b> playing skills!<br><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="579"/>
|
||||
<location filename="../src/QtWindow.cpp" line="586"/>
|
||||
<source><a href="http://pianobooster.sourceforge.net/" ><b>http://pianobooster.sourceforge.net</b></a><br><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="580"/>
|
||||
<location filename="../src/QtWindow.cpp" line="587"/>
|
||||
<source>Copyright(c) L. J. Barman, 2008-2009; All rights reserved.<br><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="581"/>
|
||||
<location filename="../src/QtWindow.cpp" line="588"/>
|
||||
<source>Copyright(c) Olivier Humbert, 2018 pour la traduction en français (for the French translation).<br><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="582"/>
|
||||
<location filename="../src/QtWindow.cpp" line="589"/>
|
||||
<source>This program is made available under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.<br><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="586"/>
|
||||
<location filename="../src/QtWindow.cpp" line="593"/>
|
||||
<source>This program also contains RtMIDI: realtime MIDI i/o C++ classes<br>Copyright(c) 2003-2007 Gary P. Scavone</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="607"/>
|
||||
<location filename="../src/QtWindow.cpp" line="614"/>
|
||||
<source>PC Keyboard Short Cuts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="609"/>
|
||||
<location filename="../src/QtWindow.cpp" line="616"/>
|
||||
<source><h2><center>Keyboard short cuts</center></h2><p>The following PC keyboard short cuts have been defined.</p><center><table border='1' cellspacing='0' cellpadding='4' ></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="615"/>
|
||||
<location filename="../src/QtWindow.cpp" line="622"/>
|
||||
<source><tr><th>Action</th><th>Key</th></tr></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="621"/>
|
||||
<location filename="../src/QtWindow.cpp" line="628"/>
|
||||
<source>Choose the right hand</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="622"/>
|
||||
<location filename="../src/QtWindow.cpp" line="629"/>
|
||||
<source>Choose both hands</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="623"/>
|
||||
<location filename="../src/QtWindow.cpp" line="630"/>
|
||||
<source>Choose the left Hand</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="624"/>
|
||||
<location filename="../src/QtWindow.cpp" line="631"/>
|
||||
<source>Play from start toggle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="625"/>
|
||||
<location filename="../src/QtWindow.cpp" line="632"/>
|
||||
<source>Play Pause Toggle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="626"/>
|
||||
<location filename="../src/QtWindow.cpp" line="627"/>
|
||||
<location filename="../src/QtWindow.cpp" line="633"/>
|
||||
<location filename="../src/QtWindow.cpp" line="634"/>
|
||||
<source>Increase the speed by 5%</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="628"/>
|
||||
<location filename="../src/QtWindow.cpp" line="635"/>
|
||||
<source>Change to the Next Song</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="629"/>
|
||||
<location filename="../src/QtWindow.cpp" line="636"/>
|
||||
<source>Change to the Previous Song</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="630"/>
|
||||
<location filename="../src/QtWindow.cpp" line="637"/>
|
||||
<source>Change to the Next Book</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="631"/>
|
||||
<location filename="../src/QtWindow.cpp" line="638"/>
|
||||
<source>Change to the Previous Book</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="633"/>
|
||||
<location filename="../src/QtWindow.cpp" line="640"/>
|
||||
<source><tr><td>Fake Piano keys</td><td>X is middle C</td></tr></table> </center><br></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="654"/>
|
||||
<location filename="../src/QtWindow.cpp" line="661"/>
|
||||
<source>Open Midi File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/QtWindow.cpp" line="655"/>
|
||||
<location filename="../src/QtWindow.cpp" line="662"/>
|
||||
<source>Midi Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
Loading…
Reference in New Issue
Block a user