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

Side by Side Diff: ui/base/l10n/formatter.h

Issue 147443007: Add support for localized time strings with two units, eg. "2 hours 17 minutes" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Bartosz' comments Created 6 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_BASE_L10N_FORMATTER_H_
6 #define UI_BASE_L10N_FORMATTER_H_
7
8 #include "base/basictypes.h"
9 #include "base/lazy_instance.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "third_party/icu/source/i18n/unicode/plurfmt.h"
12 #include "third_party/icu/source/i18n/unicode/plurrule.h"
13 #include "ui/base/l10n/time_format.h"
14 #include "ui/base/ui_base_export.h"
15
16 namespace ui {
17
18 struct Pluralities;
19
20 // Formatter for a (format, length) combination. May either be instantiated
21 // with four parameters for use in TimeFormat::Simple() or with ten parameters
22 // for use in TimeFormat::Detailed().
23 class Formatter {
24 public:
25 enum Unit {
26 UNIT_SEC,
27 UNIT_MIN,
28 UNIT_HOUR,
29 UNIT_DAY,
30 UNIT_COUNT // Enum size counter, not a unit. Must be last.
31 };
32 enum TwoUnits {
33 TWOUNITS_MIN_SEC,
bartfab (slow) 2014/02/20 16:31:23 Nit: s/TWOUNITS/TWO_UNITS/
Thiemo Nagel 2014/02/22 21:44:10 Done.
34 TWOUNITS_HOUR_MIN,
35 TWOUNITS_DAY_HOUR,
36 TWOUNITS_COUNT // Enum size counter, not a unit pair. Must be last.
bartfab (slow) 2014/02/20 16:31:23 Nit: Two spaces before inline comment.
Thiemo Nagel 2014/02/22 21:44:10 Done.
37 };
38
39 Formatter(const Pluralities& sec_pluralities,
40 const Pluralities& min_pluralities,
41 const Pluralities& hour_pluralities,
42 const Pluralities& day_pluralities);
43
44 Formatter(const Pluralities& sec_pluralities,
45 const Pluralities& min_pluralities,
46 const Pluralities& hour_pluralities,
47 const Pluralities& day_pluralities,
48 const Pluralities& min_sec_pluralities1,
49 const Pluralities& min_sec_pluralities2,
50 const Pluralities& hour_min_pluralities1,
51 const Pluralities& hour_min_pluralities2,
52 const Pluralities& day_hour_pluralities1,
53 const Pluralities& day_hour_pluralities2);
54
55 void Format(Unit unit, int value, icu::UnicodeString& formatted_string) const;
56
57 void Format(TwoUnits units,
58 int value1,
bartfab (slow) 2014/02/20 16:31:23 Nit: s/value1/value_1/
Thiemo Nagel 2014/02/22 21:44:10 Done.
59 int value2,
bartfab (slow) 2014/02/20 16:31:23 Nit: s/value2/value_2/
Thiemo Nagel 2014/02/22 21:44:10 Done.
60 icu::UnicodeString& formatted_string) const;
61
62 private:
63 friend class FormatterContainer; // allow access to force_fallback_
bartfab (slow) 2014/02/20 16:31:23 Why not make |Formatter| an inner class of |Format
Thiemo Nagel 2014/02/22 21:44:10 I moved force_fallback_ back to FormatterContainer
64
65 // Create a hard-coded fallback plural format. This will never be called
66 // unless translators make a mistake.
67 scoped_ptr<icu::PluralFormat> CreateFallbackFormat(
68 const icu::PluralRules& rules,
69 const Pluralities& pluralities) const;
70
71 scoped_ptr<icu::PluralFormat> InitFormat(const Pluralities& pluralities);
72
73 scoped_ptr<icu::PluralFormat> simple_format_[UNIT_COUNT];
74 scoped_ptr<icu::PluralFormat> detailed_format_[TWOUNITS_COUNT][2];
75
76 static bool force_fallback_;
77
78 DISALLOW_IMPLICIT_CONSTRUCTORS(Formatter);
79 };
80
81 // Class to hold all Formatters, intended to be used in a global LazyInstance.
82 class UI_BASE_EXPORT FormatterContainer {
83 public:
84 FormatterContainer();
85 ~FormatterContainer();
86
87 const Formatter* Get(TimeFormat::Format format,
88 TimeFormat::Length length) const;
89
90 void SetFallbackForTesting(bool val) {
91 Formatter::force_fallback_ = val;
92 Shutdown();
93 Initialize();
94 }
95
96 private:
97 friend struct base::DefaultLazyInstanceTraits<FormatterContainer>;
98
99 void Initialize();
100 void Shutdown();
101
102 scoped_ptr<Formatter>
103 formatter_[TimeFormat::FORMAT_COUNT][TimeFormat::LENGTH_COUNT];
104
105 DISALLOW_COPY_AND_ASSIGN(FormatterContainer);
106 };
107
108 extern base::LazyInstance<FormatterContainer> g_container;
109
110 } // namespace ui
111
112 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698