-namespace {
-
-class Sorter
-{
-public:
-#if !defined(USE_WCHAR_T) && defined(__GNUC__)
- bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const
- {
- return lhs.first < rhs.first;
- }
-#else
- Sorter() : loc_ok(true)
- {
- try {
- loc_ = locale("");
- } catch (...) {
- loc_ok = false;
- }
- }
-
- bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const
- {
- // FIXME: would that be "QString::localeAwareCompare()"?
- if (loc_ok)
- return loc_(fromqstr(lhs.first), fromqstr(rhs.first));
- else
- return lhs.first < rhs.first;
- }
-private:
- locale loc_;
- bool loc_ok;
-#endif
-};
-
-
-} // namespace anon
-
-
-QList<LanguagePair> languageData(bool character_dlg)
-{
- size_t const offset = character_dlg ? 2 : 0;
- vector<LanguagePair> langs(languages.size() + offset);
-
- if (character_dlg) {
- langs[0].first = qt_("No change");
- langs[0].second = "ignore";
- langs[1].first = qt_("Reset");
- langs[1].second = "reset";
- }
-
- Languages::const_iterator it = languages.begin();
- for (size_t i = 0; i != languages.size(); ++i, ++it) {
- langs[i + offset].first = qt_(it->second.display());
- langs[i + offset].second = toqstr(it->second.lang());
- }
-
- // Don't sort "ignore" and "reset"
- vector<LanguagePair>::iterator begin = langs.begin() + offset;
- sort(begin, langs.end(), Sorter());
-
- QList<LanguagePair> list;
- foreach (LanguagePair const & l, langs)
- list.append(l);
- return list;
-}
-