1f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// Copyright (C) 2013 Google Inc.
2f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org//
3f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License");
4f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// you may not use this file except in compliance with the License.
5f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// You may obtain a copy of the License at
6f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org//
7f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0
8f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org//
9f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// Unless required by applicable law or agreed to in writing, software
10f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS,
11f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// See the License for the specific language governing permissions and
13f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// limitations under the License.
14f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
15f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org#ifndef I18N_ADDRESSINPUT_LOCALIZATION_H_
16f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org#define I18N_ADDRESSINPUT_LOCALIZATION_H_
17f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
18e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com#include <libaddressinput/address_field.h>
19e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com#include <libaddressinput/address_problem.h>
206c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com#include <libaddressinput/util/basictypes.h>
21e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com
22f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org#include <string>
23f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
24f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.orgnamespace i18n {
25f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.orgnamespace addressinput {
26f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
27e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.comstruct AddressData;
28e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com
290286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org// The object to retrieve localized strings based on message IDs. It returns
300286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org// English by default. Sample usage:
31f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org//    Localization localization;
32947ce24396bbb66ec5fcd14a73f85f4e32c3dcc0rouslan@chromium.org//    std::string best_language_tag;
330286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org//    Process(BuildComponents("CA", localization, "en-US", &best_language_tag));
34f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org//
35f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org// Alternative usage:
36f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org//    Localization localization;
370286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org//    localization.SetGetter(&MyStringGetter);
38947ce24396bbb66ec5fcd14a73f85f4e32c3dcc0rouslan@chromium.org//    std::string best_language_tag;
390286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org//    Process(BuildComponents("CA", localization, "fr-CA", &best_language_tag));
40f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.orgclass Localization {
41f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org public:
42f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  // Initializes with English messages by default.
43f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  Localization();
44f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  ~Localization();
45f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
46f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  // Returns the localized string for |message_id|. Returns an empty string if
47f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  // there's no message with this identifier.
48f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  std::string GetString(int message_id) const;
49f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
50e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // Returns the error message. If |enable_examples| is false, then the error
51e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // message will not contain examples of valid input. If |enable_links| is
52e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // false, then the error message will not contain HTML links. (Some error
53e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // messages contain postal code examples or link to post office websites to
54e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // look up the postal code for an address). Vector field values (e.g. for
55e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // street address) should not be empty if problem is UNKNOWN_VALUE. The
56e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // POSTAL_CODE field should only be used with MISSING_REQUIRED_FIELD,
57e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // INVALID_FORMAT, and MISMATCHING_VALUE problem codes. All other fields
58e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // should only be used with MISSING_REQUIRED_FIELD, UNKNOWN_VALUE, and
59e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // USES_P_O_BOX problem codes.
60e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  std::string GetErrorMessage(const AddressData& address,
61e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com                              AddressField field,
62e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com                              AddressProblem problem,
63e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com                              bool enable_examples,
6499f34084b65e13adc4553d93409318384c4906aekeghani@google.com                              bool enable_links) const;
65e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com
66f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  // Sets the string getter that takes a message identifier and returns the
670286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org  // corresponding localized string. For example, in Chromium there is
680286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org  // l10n_util::GetStringUTF8 which always returns strings in the current
690286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org  // application locale.
700286d15a542e34d770d366f84fbc8c1d2116d970rouslan@chromium.org  void SetGetter(std::string (*getter)(int));
71f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
72f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org private:
73e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // Returns the error message where the address field is a postal code. Helper
74e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // to |GetErrorMessage|. If |postal_code_example| is empty, then the error
75e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // message will not contain examples of valid postal codes. If
76e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // |post_service_url| is empty, then the error message will not contain a post
77e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // service URL. The problem should only be one of MISSING_REQUIRED_FIELD,
78e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  // INVALID_FORMAT, or MISMATCHING_VALUE.
79e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com  std::string GetErrorMessageForPostalCode(const AddressData& address,
80e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com                                           AddressProblem problem,
81e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com                                           bool uses_postal_code_as_label,
82e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com                                           std::string postal_code_example,
8399f34084b65e13adc4553d93409318384c4906aekeghani@google.com                                           std::string post_service_url) const;
84e66bf12636bf12067bd8b199b8e6c1035315d2aakeghani@google.com
85f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  // The string getter.
86f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org  std::string (*get_string_)(int);
876c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com
886c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com  DISALLOW_COPY_AND_ASSIGN(Localization);
89f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org};
90f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
91f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org}  // namespace addressinput
92f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org}  // namespace i18n
93f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org
94f80a0c70943fe82b268e14c4173a7f1ee2304ecbrouslan@chromium.org#endif  // I18N_ADDRESSINPUT_LOCALIZATION_H_
95