Просмотр исходного кода

LibLocale: Add a method to convert LanguageID to a String

Timothy Flynn 2 лет назад
Родитель
Сommit
edfdade9e9
2 измененных файлов с 19 добавлено и 10 удалено
  1. 16 10
      Userland/Libraries/LibLocale/Locale.cpp
  2. 3 0
      Userland/Libraries/LibLocale/Locale.h

+ 16 - 10
Userland/Libraries/LibLocale/Locale.cpp

@@ -906,25 +906,31 @@ DeprecatedString resolve_most_likely_territory_alias(LanguageID const& language_
     return aliases[0].to_deprecated_string();
 }
 
-DeprecatedString LanguageID::to_deprecated_string() const
+ErrorOr<String> LanguageID::to_string() const
 {
     StringBuilder builder;
 
-    auto append_segment = [&](Optional<DeprecatedString> const& segment) {
+    auto append_segment = [&](Optional<DeprecatedString> const& segment) -> ErrorOr<void> {
         if (!segment.has_value())
-            return;
+            return {};
         if (!builder.is_empty())
-            builder.append('-');
-        builder.append(*segment);
+            TRY(builder.try_append('-'));
+        TRY(builder.try_append(*segment));
+        return {};
     };
 
-    append_segment(language);
-    append_segment(script);
-    append_segment(region);
+    TRY(append_segment(language));
+    TRY(append_segment(script));
+    TRY(append_segment(region));
     for (auto const& variant : variants)
-        append_segment(variant);
+        TRY(append_segment(variant));
 
-    return builder.build();
+    return builder.to_string();
+}
+
+DeprecatedString LanguageID::to_deprecated_string() const
+{
+    return MUST(to_string()).to_deprecated_string();
 }
 
 DeprecatedString LocaleID::to_deprecated_string() const

+ 3 - 0
Userland/Libraries/LibLocale/Locale.h

@@ -8,7 +8,9 @@
 
 #include <AK/CharacterTypes.h>
 #include <AK/DeprecatedString.h>
+#include <AK/Error.h>
 #include <AK/Optional.h>
+#include <AK/String.h>
 #include <AK/StringView.h>
 #include <AK/Variant.h>
 #include <AK/Vector.h>
@@ -17,6 +19,7 @@
 namespace Locale {
 
 struct LanguageID {
+    ErrorOr<String> to_string() const;
     DeprecatedString to_deprecated_string() const;
     bool operator==(LanguageID const&) const = default;