OLD | NEW |
| (Empty) |
1 // Copyright 2013 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 "chrome/common/translate/translate_util.h" | |
6 | |
7 #include "base/basictypes.h" | |
8 #include "base/command_line.h" | |
9 #include "base/logging.h" | |
10 #include "base/strings/string_split.h" | |
11 #include "chrome/common/chrome_switches.h" | |
12 #include "url/gurl.h" | |
13 | |
14 namespace { | |
15 | |
16 // Split the |language| into two parts. For example, if |language| is 'en-US', | |
17 // this will be split into the main part 'en' and the tail part '-US'. | |
18 void SplitIntoMainAndTail(const std::string& language, | |
19 std::string* main_part, | |
20 std::string* tail_part) { | |
21 DCHECK(main_part); | |
22 DCHECK(tail_part); | |
23 | |
24 std::vector<std::string> chunks; | |
25 base::SplitString(language, '-', &chunks); | |
26 if (chunks.size() == 0u) | |
27 return; | |
28 | |
29 *main_part = chunks[0]; | |
30 *tail_part = language.substr(main_part->size()); | |
31 } | |
32 | |
33 } // namespace | |
34 | |
35 namespace TranslateUtil { | |
36 | |
37 struct LanguageCodePair { | |
38 // Code used in supporting list of Translate. | |
39 const char* const translate_language; | |
40 | |
41 // Code used in Chrome internal. | |
42 const char* const chrome_language; | |
43 }; | |
44 | |
45 // Some languages are treated as same languages in Translate even though they | |
46 // are different to be exact. | |
47 // | |
48 // If this table is updated, please sync this with the synonym table in | |
49 // chrome/browser/resources/options/language_options.js | |
50 const LanguageCodePair kLanguageCodeSimilitudes[] = { | |
51 {"no", "nb"}, | |
52 {"tl", "fil"}, | |
53 }; | |
54 | |
55 // Some languages have changed codes over the years and sometimes the older | |
56 // codes are used, so we must see them as synonyms. | |
57 // | |
58 // If this table is updated, please sync this with the synonym table in | |
59 // chrome/browser/resources/options/language_options.js | |
60 const LanguageCodePair kLanguageCodeSynonyms[] = { | |
61 {"iw", "he"}, | |
62 {"jw", "jv"}, | |
63 }; | |
64 | |
65 const char kSecurityOrigin[] = "https://translate.googleapis.com/"; | |
66 | |
67 void ToTranslateLanguageSynonym(std::string* language) { | |
68 for (size_t i = 0; i < arraysize(kLanguageCodeSimilitudes); ++i) { | |
69 if (*language == kLanguageCodeSimilitudes[i].chrome_language) { | |
70 *language = kLanguageCodeSimilitudes[i].translate_language; | |
71 return; | |
72 } | |
73 } | |
74 | |
75 std::string main_part, tail_part; | |
76 SplitIntoMainAndTail(*language, &main_part, &tail_part); | |
77 if (main_part.empty()) | |
78 return; | |
79 | |
80 // Apply liner search here because number of items in the list is just four. | |
81 for (size_t i = 0; i < arraysize(kLanguageCodeSynonyms); ++i) { | |
82 if (main_part == kLanguageCodeSynonyms[i].chrome_language) { | |
83 main_part = std::string(kLanguageCodeSynonyms[i].translate_language); | |
84 break; | |
85 } | |
86 } | |
87 | |
88 *language = main_part + tail_part; | |
89 } | |
90 | |
91 void ToChromeLanguageSynonym(std::string* language) { | |
92 for (size_t i = 0; i < arraysize(kLanguageCodeSimilitudes); ++i) { | |
93 if (*language == kLanguageCodeSimilitudes[i].translate_language) { | |
94 *language = kLanguageCodeSimilitudes[i].chrome_language; | |
95 return; | |
96 } | |
97 } | |
98 | |
99 std::string main_part, tail_part; | |
100 SplitIntoMainAndTail(*language, &main_part, &tail_part); | |
101 if (main_part.empty()) | |
102 return; | |
103 | |
104 // Apply liner search here because number of items in the list is just four. | |
105 for (size_t i = 0; i < arraysize(kLanguageCodeSynonyms); ++i) { | |
106 if (main_part == kLanguageCodeSynonyms[i].translate_language) { | |
107 main_part = std::string(kLanguageCodeSynonyms[i].chrome_language); | |
108 break; | |
109 } | |
110 } | |
111 | |
112 *language = main_part + tail_part; | |
113 } | |
114 | |
115 GURL GetTranslateSecurityOrigin() { | |
116 std::string security_origin(kSecurityOrigin); | |
117 CommandLine* command_line = CommandLine::ForCurrentProcess(); | |
118 if (command_line->HasSwitch(switches::kTranslateSecurityOrigin)) { | |
119 security_origin = | |
120 command_line->GetSwitchValueASCII(switches::kTranslateSecurityOrigin); | |
121 } | |
122 return GURL(security_origin); | |
123 } | |
124 | |
125 } // namespace TranslateUtil | |
OLD | NEW |