mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:37:44 +00:00
LibLocale: Add a method to convert LocaleID to a String
This commit is contained in:
parent
f3c6510b83
commit
618714e29a
2 changed files with 32 additions and 22 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021-2022, Tim Flynn <trflynn89@serenityos.org>
|
* Copyright (c) 2021-2023, Tim Flynn <trflynn89@serenityos.org>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -933,53 +933,62 @@ DeprecatedString LanguageID::to_deprecated_string() const
|
||||||
return MUST(to_string()).to_deprecated_string();
|
return MUST(to_string()).to_deprecated_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
DeprecatedString LocaleID::to_deprecated_string() const
|
ErrorOr<String> LocaleID::to_string() const
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
|
|
||||||
auto append_segment = [&](Optional<DeprecatedString> const& segment) {
|
auto append_segment = [&](Optional<DeprecatedString> const& segment) -> ErrorOr<void> {
|
||||||
if (!segment.has_value() || segment->is_empty())
|
if (!segment.has_value() || segment->is_empty())
|
||||||
return;
|
return {};
|
||||||
if (!builder.is_empty())
|
if (!builder.is_empty())
|
||||||
builder.append('-');
|
TRY(builder.try_append('-'));
|
||||||
builder.append(*segment);
|
TRY(builder.try_append(*segment));
|
||||||
|
return {};
|
||||||
};
|
};
|
||||||
|
|
||||||
append_segment(language_id.to_deprecated_string());
|
TRY(append_segment(language_id.to_deprecated_string()));
|
||||||
|
|
||||||
for (auto const& extension : extensions) {
|
for (auto const& extension : extensions) {
|
||||||
extension.visit(
|
TRY(extension.visit(
|
||||||
[&](LocaleExtension const& ext) {
|
[&](LocaleExtension const& ext) -> ErrorOr<void> {
|
||||||
builder.append("-u"sv);
|
builder.append("-u"sv);
|
||||||
for (auto const& attribute : ext.attributes)
|
for (auto const& attribute : ext.attributes)
|
||||||
append_segment(attribute);
|
TRY(append_segment(attribute));
|
||||||
for (auto const& keyword : ext.keywords) {
|
for (auto const& keyword : ext.keywords) {
|
||||||
append_segment(keyword.key);
|
TRY(append_segment(keyword.key));
|
||||||
append_segment(keyword.value);
|
TRY(append_segment(keyword.value));
|
||||||
}
|
}
|
||||||
|
return {};
|
||||||
},
|
},
|
||||||
[&](TransformedExtension const& ext) {
|
[&](TransformedExtension const& ext) -> ErrorOr<void> {
|
||||||
builder.append("-t"sv);
|
builder.append("-t"sv);
|
||||||
if (ext.language.has_value())
|
if (ext.language.has_value())
|
||||||
append_segment(ext.language->to_deprecated_string());
|
TRY(append_segment(ext.language->to_deprecated_string()));
|
||||||
for (auto const& field : ext.fields) {
|
for (auto const& field : ext.fields) {
|
||||||
append_segment(field.key);
|
TRY(append_segment(field.key));
|
||||||
append_segment(field.value);
|
TRY(append_segment(field.value));
|
||||||
}
|
}
|
||||||
|
return {};
|
||||||
},
|
},
|
||||||
[&](OtherExtension const& ext) {
|
[&](OtherExtension const& ext) -> ErrorOr<void> {
|
||||||
builder.appendff("-{}", ext.key);
|
builder.appendff("-{}", ext.key);
|
||||||
append_segment(ext.value);
|
TRY(append_segment(ext.value));
|
||||||
});
|
return {};
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!private_use_extensions.is_empty()) {
|
if (!private_use_extensions.is_empty()) {
|
||||||
builder.append("-x"sv);
|
builder.append("-x"sv);
|
||||||
for (auto const& extension : private_use_extensions)
|
for (auto const& extension : private_use_extensions)
|
||||||
append_segment(extension);
|
TRY(append_segment(extension));
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.build();
|
return builder.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
DeprecatedString LocaleID::to_deprecated_string() const
|
||||||
|
{
|
||||||
|
return MUST(to_string()).to_deprecated_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021-2022, Tim Flynn <trflynn89@serenityos.org>
|
* Copyright (c) 2021-2023, Tim Flynn <trflynn89@serenityos.org>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -58,6 +58,7 @@ struct OtherExtension {
|
||||||
using Extension = AK::Variant<LocaleExtension, TransformedExtension, OtherExtension>;
|
using Extension = AK::Variant<LocaleExtension, TransformedExtension, OtherExtension>;
|
||||||
|
|
||||||
struct LocaleID {
|
struct LocaleID {
|
||||||
|
ErrorOr<String> to_string() const;
|
||||||
DeprecatedString to_deprecated_string() const;
|
DeprecatedString to_deprecated_string() const;
|
||||||
|
|
||||||
template<typename ExtensionType>
|
template<typename ExtensionType>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue