Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: ui/base/l10n/formatter.cc

Issue 1140153005: ICU msg format support with more than one arguments (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mark's review comments Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/BUILD.gn ('k') | ui/base/l10n/l10n_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/l10n/formatter.cc
diff --git a/ui/base/l10n/formatter.cc b/ui/base/l10n/formatter.cc
index 7f719330459173e195f656ff7c35d248cfee2419..298646d9e2c61245113821ea2aaf929435e74a08 100644
--- a/ui/base/l10n/formatter.cc
+++ b/ui/base/l10n/formatter.cc
@@ -7,10 +7,10 @@
#include <vector>
#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
#include "third_party/icu/source/common/unicode/unistr.h"
#include "third_party/icu/source/i18n/unicode/msgfmt.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/l10n/l10n_util_plurals.h"
#include "ui/strings/grit/ui_strings.h"
namespace ui {
@@ -139,6 +139,33 @@ static const Pluralities IDS_DURATION_HOUR_2ND = {
" other{# hours}"
};
+namespace {
+
+scoped_ptr<icu::PluralRules> BuildPluralRules() {
+ UErrorCode err = U_ZERO_ERROR;
+ scoped_ptr<icu::PluralRules> rules(
+ icu::PluralRules::forLocale(icu::Locale::getDefault(), err));
+ if (U_FAILURE(err)) {
+ err = U_ZERO_ERROR;
+ icu::UnicodeString fallback_rules("one: n is 1", -1, US_INV);
+ rules.reset(icu::PluralRules::createRules(fallback_rules, err));
+ DCHECK(U_SUCCESS(err));
+ }
+ return rules.Pass();
+}
+
+void FormatNumberInPlural(const icu::MessageFormat& format, int number,
+ icu::UnicodeString* result, UErrorCode* err) {
+ if (U_FAILURE(*err)) return;
+ icu::Formattable formattable(number);
+ icu::FieldPosition ignore(icu::FieldPosition::DONT_CARE);
+ format.format(&formattable, 1, *result, ignore, *err);
+ DCHECK(U_SUCCESS(*err));
+ return;
+}
+
+} // namespace
+
Formatter::Formatter(const Pluralities& sec_pluralities,
const Pluralities& min_pluralities,
const Pluralities& hour_pluralities,
@@ -177,8 +204,8 @@ void Formatter::Format(Unit unit,
DCHECK(simple_format_[unit]);
DCHECK(formatted_string->isEmpty() == TRUE);
UErrorCode error = U_ZERO_ERROR;
- l10n_util::FormatNumberInPlural(*simple_format_[unit],
- value, formatted_string, &error);
+ FormatNumberInPlural(*simple_format_[unit],
+ value, formatted_string, &error);
DCHECK(U_SUCCESS(error)) << "Error in icu::PluralFormat::format().";
return;
}
@@ -193,11 +220,11 @@ void Formatter::Format(TwoUnits units,
<< "Detailed() not implemented for your (format, length) combination!";
DCHECK(formatted_string->isEmpty() == TRUE);
UErrorCode error = U_ZERO_ERROR;
- l10n_util::FormatNumberInPlural(*detailed_format_[units][0], value_1,
- formatted_string, &error);
+ FormatNumberInPlural(*detailed_format_[units][0], value_1,
+ formatted_string, &error);
DCHECK(U_SUCCESS(error));
- l10n_util::FormatNumberInPlural(*detailed_format_[units][1], value_2,
- formatted_string, &error);
+ FormatNumberInPlural(*detailed_format_[units][1], value_2,
+ formatted_string, &error);
DCHECK(U_SUCCESS(error));
return;
}
@@ -230,7 +257,7 @@ scoped_ptr<icu::MessageFormat> Formatter::InitFormat(
return format.Pass();
}
- scoped_ptr<icu::PluralRules> rules(l10n_util::BuildPluralRules());
+ scoped_ptr<icu::PluralRules> rules(BuildPluralRules());
return CreateFallbackFormat(*rules, pluralities);
}
« no previous file with comments | « ui/base/BUILD.gn ('k') | ui/base/l10n/l10n_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698