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

Side by Side Diff: ios/chrome/browser/ui/file_locations.mm

Issue 1058933002: [iOS] Upstream //ios/chrome/browser/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@upstreamMemory
Patch Set: Created 5 years, 8 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 2012 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 #include "ios/chrome/browser/ui/file_locations.h"
6
7 #include "base/mac/bundle_locations.h"
8 #include "base/mac/foundation_util.h"
9 #include "base/strings/sys_string_conversions.h"
10 #include "ios/chrome/browser/application_context.h"
11
12 namespace {
13 // English is the default locale for the Terms of Service.
14 const char kEnglishLocale[] = "en";
15 // The prefix of the Chrome Terms of Service file name.
16 const char kChromeTosFilePrefix[] = "terms";
17 // The file name extension for HTML files.
18 const char kHtmlFileExtension[] = "html";
19 } // namespace
20
21 namespace file_locations {
22
23 // iOS uses certain locale initials that are different from Chrome's.
24 // Most notably, "pt" means "pt-BR" (Brazillian Portuguese). This
25 // function normalizes the locale into language-region code used by
26 // Chrome.
27 std::string iosLocaleMapping(const std::string& locale);
sdefresne 2015/04/02 17:20:28 style: this is a c++ function, so should be called
droger 2015/04/03 08:59:07 This function is used in tests, I can't put it in
28
29 // Checks that the requested file exists in the application's resource
30 // bundle and returns the filename. Returns an empty string if resource does not
31 // exist.
32 std::string find_file_in_resource(const std::string& base_name,
sdefresne 2015/04/02 17:20:28 nit: can go in the anonymous namespace.
33 const std::string& language,
34 const std::string& ext) {
35 std::string resource_file(base_name + "_" + language);
36 BOOL exists =
37 [base::mac::FrameworkBundle()
38 URLForResource:[NSString stringWithUTF8String:resource_file.c_str()]
39 withExtension:[NSString stringWithUTF8String:ext.c_str()]] != nil;
40 return exists ? resource_file + "." + ext : "";
41 }
42
43 // Returns a filename based on the base file name and file extension and
44 // localized for the given locale. Checks the existence of the file based on
45 // |locale| as follows:
46 // * if there is a file for file_<locale>.<ext>
47 // * if not, check the language part as follows file_<locale[0..]>.<ext>
48 // * when all else fails, use the English locale, e.g. file_en.<ext>, which
49 // must exist.
50 // |locale| must be a valid Chrome locale as defined in file
51 // ui/base/l10n/l10n_util.cc. This corresponds to a language or a country code,
52 // e.g. "en", "en-US", "fr", etc.
53 std::string localized_file_name(const std::string& base_name,
sdefresne 2015/04/02 17:20:28 nit: can go in the anonymous namespace.
droger 2015/04/03 08:59:07 This function is used in tests, I can't put it in
54 const std::string& locale,
55 const std::string& ext) {
56 std::string mappedLocale = iosLocaleMapping(locale);
57 std::string resource_file =
58 find_file_in_resource(base_name, mappedLocale, ext);
59 if (resource_file.empty() && mappedLocale.length() > 2 &&
60 mappedLocale[2] == '-') {
61 std::string language = mappedLocale.substr(0, 2);
62 resource_file = find_file_in_resource(base_name, language, ext);
63 }
64 if (resource_file.empty()) {
65 // Default to English if resource is still not found.
66 resource_file = find_file_in_resource(base_name, kEnglishLocale, ext);
67 }
68 DCHECK(!resource_file.empty());
69 return resource_file;
70 }
71
72 std::string TermsOfService() {
73 const std::string& locale = GetApplicationContext()->GetApplicationLocale();
74 return localized_file_name(kChromeTosFilePrefix, locale, kHtmlFileExtension);
75 }
76
77 std::string iosLocaleMapping(const std::string& locale) {
78 if (locale == "pt") // Brazillian Portuguese
79 return "pt-BR";
80 else if (locale == "zh-Hans") // Chinese Simplified script
81 return "zh-CN";
82 else if (locale == "zh-Hant") // Chinese Traditional script
83 return "zh-TW";
84 else if (locale == "es-MX")
85 return "es-419";
86 return locale;
87 }
88
89 } // namespace file_locations
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698