~aleteoryx/muditaos

ref: sign_test muditaos/module-utils/language/LanguageUtils.cpp -rw-r--r-- 3.1 KiB
a217eeb3 — Dawid Wojtas [BH-2024] Fix lack of alarm directory after updating software 1 year, 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "LanguageUtils.hpp"
#include <i18n/i18n.hpp>

namespace
{
    constexpr auto polishLanguageName = "Polski";

    std::string transformNumeral(std::uint32_t val,
                                 const std::string &minuteLower,
                                 const std::string &minutesLower,
                                 const std::string &minutesLowerGenitive)
    {
        if (val == 1) {
            return minuteLower;
        }
        auto core = val % 100;
        if (utils::getDisplayLanguage() == polishLanguageName) {
            if (core < 10 || core > 20) {
                if ((core % 10) == 2 || (core % 10) == 3 || (core % 10) == 4) {
                    return minutesLower;
                }
            }
            return minutesLowerGenitive;
        }
        return minutesLower;
    }

    std::string transformAccusative(std::uint32_t val,
                                    const std::string &minuteLower,
                                    const std::string &minuteAccusative,
                                    const std::string &minutesLower,
                                    const std::string &minutesLowerGenitive)
    {
        if ((val == 1) && (utils::getDisplayLanguage() == polishLanguageName)) {
            return minuteAccusative;
        }
        return transformNumeral(val, minuteLower, minutesLower, minutesLowerGenitive);
    }

    std::string transformMultiplicity(std::uint32_t val, const std::string &once, const std::string &many)
    {
        return (val == 1) ? once : many;
    }
} // namespace

namespace utils::language
{
    auto getCorrectMinutesNumeralForm(std::uint32_t val) -> std::string
    {
        return transformNumeral(val,
                                utils::translate("common_minute_lower"),
                                utils::translate("common_minutes_lower"),
                                utils::translate("common_minutes_lower_genitive"));
    }

    auto getCorrectSecondsNumeralForm(std::uint32_t val) -> std::string
    {
        return transformNumeral(val,
                                utils::translate("common_second_lower"),
                                utils::translate("common_seconds_lower"),
                                utils::translate("common_seconds_lower_genitive"));
    }

    auto getCorrectMinutesAccusativeForm(std::uint32_t val) -> std::string
    {
        return transformAccusative(val,
                                   utils::translate("common_minute_lower"),
                                   utils::translate("common_minute_lower_accusative"),
                                   utils::translate("common_minutes_lower"),
                                   utils::translate("common_minutes_lower_genitive"));
    }

    auto getCorrectMultiplicityForm(std::uint32_t val) -> std::string
    {
        return transformMultiplicity(
            val, utils::translate("common_multiplicity_once"), utils::translate("common_multiplicity_many"));
    }
} // namespace utils::language