romkaromka пишет:Нужны патчи для klest-crossword, klen-library, shelk-test чтобы язык определялся автоматически и не было ручного выбора языка при старте.
Патч не получился, поэтому новый исходник: http://labfreetech.org/f/klest-crosswor … src.tar.gz
Desktop-файл теперь выглядит так:
[Desktop Entry]
Categories=Game;BoardGame;
Comment=On Qt-based, cross-platform software is designed for creating and guessing the classic crossword puzzles.
Comment[ru]=Кроссплатформенная программа для создания и отгадывания классических кроссвордов. Основана на Qt.
Encoding=UTF-8
Exec=klest-crossword-1.2.3
GenericName=Klest-crossword
GenericName[ru]=Клёст-кроссворд
Icon=/usr/share/klest-crossword-1.2.3/klest-crossword.png
Name=Klest-crossword
Name[ru]=Клёст-кроссворд
Path=/usr/share/klest-crossword-1.2.3
StartupNotify=true
Terminal=false
Type=Application
X-KDE-SubstituteUID=false
Закомментирован код, необходимый для использования с установщиком:
////Загрузка языка установщика
//unsigned char loadLanguage()
//{
// QString sLanguage;
// QFile frLnguage(QDir::tempPath() + "/lang.txt");
// QTextStream tsLnguage(&frLnguage);
// tsLnguage.setCodec("UTF-8");
// if (frLnguage.open(QIODevice::ReadOnly) == true)
// {
// sLanguage = tsLnguage.readLine();
// frLnguage.close();
// QDir dFile;
// dFile.remove(frLnguage.fileName());
// if (sLanguage.indexOf("ru") != -1) return 1;
// else
// if (sLanguage.indexOf("en") != -1) return 2;
// else
// return 2;
// }
// return 0;
//}
Добавлена функция для определния языка системы:
//Загрузка языка системы
unsigned char loadLanguage()
{
switch (QLocale::system().country())
{
case QLocale::RussianFederation:
return 1;
break;
case QLocale::Ukraine:
return 1;
break;
case QLocale::Kazakhstan:
return 1;
break;
case QLocale::Moldova:
return 1;
break;
case QLocale::Belarus:
return 1;
break;
case QLocale::Tatar:
return 1;
break;
case QLocale::Macedonia:
return 1;
break;
case QLocale::Serbia:
return 1;
break;
case QLocale::Croatia:
return 1;
break;
case QLocale::UnitedStates:
return 2;
break;
case QLocale::UnitedKingdom:
return 2;
break;
default:
return 2;
break;
}
return 0;
}
Так как сейчас всего 2 языка, то для уменьшения кода сделал определение по странам, если не русскоговорящие, то грузится английский язык.
Запускается только один раз, при отсутствии файла свойств(первый запуск):
//Если нет файла свойств программы(первый запуск), то показывается окно приветствия
if (!bState)
{
//Загрузка языка установщика / языка системы
switch (loadLanguage())
{
case 1:
FileOptions->setLanguageProgram(TFileOptions::LANGUAGE_RUSSIAN);
break;
case 2:
FileOptions->setLanguageProgram(TFileOptions::LANGUAGE_ENGLISH);
break;
}
FormKlestCrossword.showWelcome();
FileOptions->write();
}
Далее, если захочет, пользователь может сменить язык на другой из свойств игры. Если всё ровно, делаю следующий.