OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/extensions/extension_l10n_util.h" | 5 #include "chrome/common/extensions/extension_l10n_util.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/file_util.h" | 12 #include "base/file_util.h" |
13 #include "base/json/json_value_serializer.h" | 13 #include "base/json/json_value_serializer.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/memory/linked_ptr.h" | 15 #include "base/memory/linked_ptr.h" |
16 #include "base/stringprintf.h" | 16 #include "base/stringprintf.h" |
17 #include "base/values.h" | 17 #include "base/values.h" |
18 #include "chrome/common/extensions/extension.h" | 18 #include "chrome/common/extensions/extension.h" |
19 #include "chrome/common/extensions/extension_constants.h" | 19 #include "chrome/common/extensions/extension_constants.h" |
20 #include "chrome/common/extensions/extension_file_util.h" | 20 #include "chrome/common/extensions/extension_file_util.h" |
21 #include "chrome/common/extensions/extension_message_bundle.h" | 21 #include "chrome/common/extensions/extension_message_bundle.h" |
22 #include "chrome/common/url_constants.h" | 22 #include "chrome/common/url_constants.h" |
23 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
24 #include "unicode/uloc.h" | 24 #include "unicode/uloc.h" |
25 | 25 |
26 namespace errors = extension_manifest_errors; | 26 namespace errors = extension_manifest_errors; |
27 namespace keys = extension_manifest_keys; | 27 namespace keys = extension_manifest_keys; |
28 | 28 |
29 static std::string* GetProcessLocale() { | 29 static std::string& GetProcessLocale() { |
30 static std::string locale; | 30 CR_DEFINE_STATIC_LOCAL(std::string, locale, ()); |
31 return &locale; | 31 return locale; |
32 } | 32 } |
33 | 33 |
34 namespace extension_l10n_util { | 34 namespace extension_l10n_util { |
35 | 35 |
36 void SetProcessLocale(const std::string& locale) { | 36 void SetProcessLocale(const std::string& locale) { |
37 *(GetProcessLocale()) = locale; | 37 GetProcessLocale() = locale; |
38 } | 38 } |
39 | 39 |
40 std::string GetDefaultLocaleFromManifest(const DictionaryValue& manifest, | 40 std::string GetDefaultLocaleFromManifest(const DictionaryValue& manifest, |
41 std::string* error) { | 41 std::string* error) { |
42 std::string default_locale; | 42 std::string default_locale; |
43 if (manifest.GetString(keys::kDefaultLocale, &default_locale)) | 43 if (manifest.GetString(keys::kDefaultLocale, &default_locale)) |
44 return default_locale; | 44 return default_locale; |
45 | 45 |
46 *error = errors::kInvalidDefaultLocale; | 46 *error = errors::kInvalidDefaultLocale; |
47 return ""; | 47 return ""; |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 } else { | 176 } else { |
177 *error = base::StringPrintf("Catalog file is missing for locale %s.", | 177 *error = base::StringPrintf("Catalog file is missing for locale %s.", |
178 locale_name.c_str()); | 178 locale_name.c_str()); |
179 return false; | 179 return false; |
180 } | 180 } |
181 | 181 |
182 return true; | 182 return true; |
183 } | 183 } |
184 | 184 |
185 std::string CurrentLocaleOrDefault() { | 185 std::string CurrentLocaleOrDefault() { |
186 std::string current_locale = l10n_util::NormalizeLocale(*GetProcessLocale()); | 186 std::string current_locale = l10n_util::NormalizeLocale(GetProcessLocale()); |
187 if (current_locale.empty()) | 187 if (current_locale.empty()) |
188 current_locale = "en"; | 188 current_locale = "en"; |
189 | 189 |
190 return current_locale; | 190 return current_locale; |
191 } | 191 } |
192 | 192 |
193 void GetAllLocales(std::set<std::string>* all_locales) { | 193 void GetAllLocales(std::set<std::string>* all_locales) { |
194 const std::vector<std::string>& available_locales = | 194 const std::vector<std::string>& available_locales = |
195 l10n_util::GetAvailableLocales(); | 195 l10n_util::GetAvailableLocales(); |
196 // Add all parents of the current locale to the available locales set. | 196 // Add all parents of the current locale to the available locales set. |
197 // I.e. for sr_Cyrl_RS we add sr_Cyrl_RS, sr_Cyrl and sr. | 197 // I.e. for sr_Cyrl_RS we add sr_Cyrl_RS, sr_Cyrl and sr. |
198 for (size_t i = 0; i < available_locales.size(); ++i) { | 198 for (size_t i = 0; i < available_locales.size(); ++i) { |
199 std::vector<std::string> result; | 199 std::vector<std::string> result; |
200 l10n_util::GetParentLocales(available_locales[i], &result); | 200 l10n_util::GetParentLocales(available_locales[i], &result); |
201 all_locales->insert(result.begin(), result.end()); | 201 all_locales->insert(result.begin(), result.end()); |
202 } | 202 } |
203 } | 203 } |
204 | 204 |
205 bool GetValidLocales(const FilePath& locale_path, | 205 bool GetValidLocales(const FilePath& locale_path, |
206 std::set<std::string>* valid_locales, | 206 std::set<std::string>* valid_locales, |
207 std::string* error) { | 207 std::string* error) { |
208 static std::set<std::string> chrome_locales; | 208 std::set<std::string> chrome_locales; |
209 GetAllLocales(&chrome_locales); | 209 GetAllLocales(&chrome_locales); |
210 | 210 |
211 // Enumerate all supplied locales in the extension. | 211 // Enumerate all supplied locales in the extension. |
212 file_util::FileEnumerator locales(locale_path, | 212 file_util::FileEnumerator locales(locale_path, |
213 false, | 213 false, |
214 file_util::FileEnumerator::DIRECTORIES); | 214 file_util::FileEnumerator::DIRECTORIES); |
215 FilePath locale_folder; | 215 FilePath locale_folder; |
216 while (!(locale_folder = locales.Next()).empty()) { | 216 while (!(locale_folder = locales.Next()).empty()) { |
217 std::string locale_name = locale_folder.BaseName().MaybeAsASCII(); | 217 std::string locale_name = locale_folder.BaseName().MaybeAsASCII(); |
218 if (locale_name.empty()) { | 218 if (locale_name.empty()) { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 if (std::find(subdir.begin(), subdir.end(), '.') != subdir.end()) | 306 if (std::find(subdir.begin(), subdir.end(), '.') != subdir.end()) |
307 return true; | 307 return true; |
308 | 308 |
309 if (all_locales.find(subdir) == all_locales.end()) | 309 if (all_locales.find(subdir) == all_locales.end()) |
310 return true; | 310 return true; |
311 | 311 |
312 return false; | 312 return false; |
313 } | 313 } |
314 | 314 |
315 } // namespace extension_l10n_util | 315 } // namespace extension_l10n_util |
OLD | NEW |