locale: Support distributions without locale-gen.

If /etc/locale.gen (or the configured localeGenPath) does not exist,
assume that all the supported languages are already built into the
locale archive, and retrieve the list from "locale -a".

The list will then contain lines with only the locale rather than
locale + space + encoding, but that should not affect any of the rest of
the code. UTF-8 locales will still contain the string "UTF-8" (as part
of the ".UTF-8" suffix), we will not write a locale.gen file if we don't
have locale-gen, and everything else just strips away the encoding.
This commit is contained in:
Kevin Kofler 2014-11-25 20:03:37 +01:00
parent 440b38addf
commit e7d0f205a4

View File

@ -30,6 +30,7 @@
#include <QComboBox> #include <QComboBox>
#include <QLabel> #include <QLabel>
#include <QPushButton> #include <QPushButton>
#include <QProcess>
LocalePage::LocalePage( QWidget* parent ) LocalePage::LocalePage( QWidget* parent )
@ -226,12 +227,22 @@ LocalePage::init( const QString& initialRegion,
// Fill in meaningful locale/charset lines from locale.gen // Fill in meaningful locale/charset lines from locale.gen
m_localeGenLines.clear(); m_localeGenLines.clear();
QFile localeGen( localeGenPath ); QFile localeGen( localeGenPath );
if ( !localeGen.open( QIODevice::ReadOnly | QIODevice::Text ) ) QByteArray ba;
if ( localeGen.open( QIODevice::ReadOnly | QIODevice::Text ) )
{ {
cDebug() << "ERROR: Cannot open file" << localeGenPath << "."; ba = localeGen.readAll();
return; localeGen.close();
}
else
{
cDebug() << "Cannot open file" << localeGenPath
<< ". Assuming the supported languages are already built into "
"the locale archive.";
QProcess localeA;
localeA.start( "locale", QStringList() << "-a" );
localeA.waitForFinished();
ba = localeA.readAllStandardOutput();
} }
QByteArray ba = localeGen.readAll();
foreach ( QByteArray line, ba.split( '\n' ) ) foreach ( QByteArray line, ba.split( '\n' ) )
{ {
if ( line.startsWith( "# " ) || line.simplified() == "#" ) if ( line.startsWith( "# " ) || line.simplified() == "#" )