• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Return-To-The-Roots / s25client / 24151579386

08 Apr 2026 06:24PM UTC coverage: 50.371% (+0.03%) from 50.337%
24151579386

push

github

Flow86
Use `helpers::sort` consistently

14 of 18 new or added lines in 12 files covered. (77.78%)

840 existing lines in 36 files now uncovered.

23069 of 45798 relevant lines covered (50.37%)

45802.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.33
/libs/s25main/languages.cpp
1
// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org)
2
//
3
// SPDX-License-Identifier: GPL-2.0-or-later
4

5
#include "languages.h"
6
#include "Loader.h"
7
#include "RttrConfig.h"
8
#include "files.h"
9
#include "helpers/containerUtils.h"
10
#include "mygettext/mygettext.h"
11
#include "libsiedler2/ArchivItem_Ini.h"
12
#include "libsiedler2/ArchivItem_Text.h"
13
#include <algorithm>
14

15
static bool operator<(const Language& o1, const Language& o2) noexcept
121✔
16
{
17
    if(o1.name < o2.name)
121✔
18
        return true;
74✔
19

20
    if(o1.name == o2.name)
47✔
UNCOV
21
        return o1.code < o2.code;
×
22
    return false;
47✔
23
}
24

25
Languages::Languages() : loaded(false)
6✔
26
{
27
    const char* domain = "rttr";
6✔
28
    mygettext::bind_textdomain_codeset(domain, "UTF-8");
6✔
29
    mygettext::bindtextdomain(domain, RTTRCONFIG.ExpandPath(s25::folders::languages).string().c_str());
6✔
30
    mygettext::textdomain(domain);
6✔
31
}
6✔
32

33
void Languages::loadLanguages()
1✔
34
{
35
    const libsiedler2::Archiv& langInfo =
36
      dynamic_cast<const libsiedler2::ArchivItem_Ini&>(*LOADER.GetArchive("languages").find("Languages"));
2✔
37
    unsigned count = langInfo.size();
1✔
38

39
    for(unsigned i = 0; i < count; i++)
24✔
40
    {
41
        const auto& langEntry = dynamic_cast<const libsiedler2::ArchivItem_Text&>(*langInfo[i]);
23✔
42
        Language lang(langEntry.getName(), langEntry.getText());
69✔
43
        RTTR_Assert(!lang.name.empty());
23✔
44
        languages.push_back(lang);
23✔
45
    }
46

47
    // Sprachen sortieren
48
    helpers::sort(languages);
1✔
49

50
    // Systemsprache hinzufügen
51
    Language l(gettext_noop("System language"), "");
2✔
52
    languages.insert(languages.begin(), l);
1✔
53

54
    loaded = true;
1✔
55
}
1✔
56

57
const Language& Languages::getLanguage(unsigned i)
72✔
58
{
59
    if(!loaded)
72✔
UNCOV
60
        loadLanguages();
×
61

62
    if(i >= languages.size())
72✔
UNCOV
63
        i = 0;
×
64

65
    return languages.at(i);
72✔
66
}
67

68
unsigned Languages::size()
3✔
69
{
70
    if(!loaded)
3✔
71
        loadLanguages();
1✔
72

73
    return static_cast<unsigned>(languages.size());
3✔
74
}
75

76
void Languages::setLanguage(const std::string& lang_code)
8✔
77
{
78
    mygettext::setlocale(LC_ALL, lang_code.c_str());
8✔
79
}
8✔
80

UNCOV
81
std::string Languages::setLanguage(unsigned i)
×
82
{
83
    const Language& l = getLanguage(i);
×
84
    setLanguage(l.code);
×
UNCOV
85
    return l.code;
×
86
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc