24 using callback_ptr_type =
typename notifier<void()>::callback_ptr_type;
36 [[nodiscard]]
ssize_t plurality(
long long n,
ssize_t max)
const noexcept {
39 r = plurality_func(narrow_cast<int>(n % 1'000'000));
42 r =
static_cast<int>(n == 1);
44 return std::clamp(narrow_cast<ssize_t>(r),
ssize_t{0}, max - 1);
48 ttlet lock = std::scoped_lock(_mutex);
50 ttlet i = _languages.find(tag);
51 if (i != _languages.end()) {
52 return i->second.get();
60 if (start_subsystem(_is_running,
false, subsystem_init, subsystem_deinit)) {
61 ttlet lock = std::scoped_lock(_mutex);
62 return _preferred_languages;
70 ttlet lock = std::scoped_lock(_mutex);
74 auto tmp = std::make_unique<language>(tag);
89 for (ttlet &tag: tags) {
90 ttlet short_tag = tag.short_tag();
92 if (prev_short_tag && short_tag != prev_short_tag) {
102 prev_short_tag = short_tag;
105 if (prev_short_tag) {
115 ttlet lock = std::scoped_lock(_mutex);
122 if (compare_then_assign(_preferred_languages, tmp)) {
124 for (ttlet &language : tmp) {
125 if (language_order_string.size() != 0) {
126 language_order_string +=
", ";
128 language_order_string +=
to_string(language->tag);
130 tt_log_info(
"Setting preferred language in order: ", language_order_string);
139 [[nodiscard]] static callback_ptr_type subscribe(callback_ptr_type const &callback) noexcept
141 return _notifier.subscribe(callback);
144 template<
typename Callback>
requires(std::is_invocable_v<Callback>)
145 [[nodiscard]]
static callback_ptr_type subscribe(Callback &&callback)
noexcept
147 return _notifier.subscribe(std::forward<Callback>(callback));
150 static void unsubscribe(callback_ptr_type
const &callback)
noexcept
152 _notifier.unsubscribe(callback);
161 inline static notifier<void()> _notifier;
162 inline static typename timer::callback_ptr_type _languages_maintenance_callback;
164 [[nodiscard]]
static bool subsystem_init() noexcept
166 _languages_maintenance_callback = timer::global().add_callback(1s, [](
auto...) {
169 if (language::_preferred_language_tags != new_preferred_language_tags) {
170 language::_preferred_language_tags = new_preferred_language_tags;
171 set_preferred_languages(language::_preferred_language_tags);
172 language::_notifier();
179 static void subsystem_deinit() noexcept
static std::vector< language_tag > add_short_names(std::vector< language_tag > tags) noexcept
Add short language names to the list of names.
Definition language.hpp:84