OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // This file contains utility functions for dealing with localized | 5 // This file contains utility functions for dealing with localized |
6 // content. | 6 // content. |
7 | 7 |
8 #ifndef APP_L10N_UTIL_H_ | 8 #ifndef APP_L10N_UTIL_H_ |
9 #define APP_L10N_UTIL_H_ | 9 #define APP_L10N_UTIL_H_ |
10 | 10 |
11 #include <algorithm> | 11 #include <algorithm> |
12 #include <functional> | 12 #include <functional> |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
17 | 17 |
18 #include "base/basictypes.h" | 18 #include "base/basictypes.h" |
19 #include "base/logging.h" | 19 #include "base/logging.h" |
20 #include "base/scoped_ptr.h" | 20 #include "base/scoped_ptr.h" |
21 #include "base/string16.h" | 21 #include "base/string16.h" |
22 #include "base/string_util.h" | 22 #include "base/string_util.h" |
23 | 23 |
24 #if defined(OS_MACOSX) | 24 #if defined(OS_MACOSX) |
25 #include "app/l10n_util_mac.h" | 25 #include "app/l10n_util_mac.h" |
26 #endif // OS_MACOSX | 26 #endif // OS_MACOSX |
27 | 27 |
28 class FilePath; | |
29 class PrefService; | 28 class PrefService; |
30 | 29 |
31 namespace l10n_util { | 30 namespace l10n_util { |
32 | 31 |
33 const char16 kRightToLeftMark = 0x200f; | |
34 const char16 kLeftToRightMark = 0x200e; | |
35 const char16 kLeftToRightEmbeddingMark = 0x202A; | |
36 const char16 kRightToLeftEmbeddingMark = 0x202B; | |
37 const char16 kPopDirectionalFormatting = 0x202C; | |
38 | |
39 // This method is responsible for determining the locale as defined below. In | 32 // This method is responsible for determining the locale as defined below. In |
40 // nearly all cases you shouldn't call this, rather use GetApplicationLocale | 33 // nearly all cases you shouldn't call this, rather use GetApplicationLocale |
41 // defined on browser_process. | 34 // defined on browser_process. |
42 // | 35 // |
43 // Returns the locale used by the Application. First we use the value from the | 36 // Returns the locale used by the Application. First we use the value from the |
44 // command line (--lang), second we try the value in the prefs file (passed in | 37 // command line (--lang), second we try the value in the prefs file (passed in |
45 // as |pref_locale|), finally, we fall back on the system locale. We only return | 38 // as |pref_locale|), finally, we fall back on the system locale. We only return |
46 // a value if there's a corresponding resource DLL for the locale. Otherwise, | 39 // a value if there's a corresponding resource DLL for the locale. Otherwise, |
47 // we fall back to en-us. | 40 // we fall back to en-us. |
48 std::string GetApplicationLocale(const std::wstring& pref_locale); | 41 std::string GetApplicationLocale(const std::wstring& pref_locale); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 // Returns the lower case equivalent of string. | 167 // Returns the lower case equivalent of string. |
175 #if defined(WCHAR_T_IS_UTF32) | 168 #if defined(WCHAR_T_IS_UTF32) |
176 // Deprecated. The string16 version should be used instead. | 169 // Deprecated. The string16 version should be used instead. |
177 std::wstring ToLower(const std::wstring& string); | 170 std::wstring ToLower(const std::wstring& string); |
178 #endif // defined(WCHAR_T_IS_UTF32) | 171 #endif // defined(WCHAR_T_IS_UTF32) |
179 string16 ToLower(const string16& string); | 172 string16 ToLower(const string16& string); |
180 | 173 |
181 // Returns the upper case equivalent of string. | 174 // Returns the upper case equivalent of string. |
182 string16 ToUpper(const string16& string); | 175 string16 ToUpper(const string16& string); |
183 | 176 |
184 // Represents the text direction returned by the GetTextDirection() function. | |
185 enum TextDirection { | |
186 UNKNOWN_DIRECTION, | |
187 RIGHT_TO_LEFT, | |
188 LEFT_TO_RIGHT, | |
189 }; | |
190 | |
191 // Returns the text direction for the default ICU locale. It is assumed | |
192 // that SetICUDefaultLocale has been called to set the default locale to | |
193 // the UI locale of Chrome. Its return is one of the following three: | |
194 // * LEFT_TO_RIGHT: Left-To-Right (e.g. English, Chinese, etc.); | |
195 // * RIGHT_TO_LEFT: Right-To-Left (e.g. Arabic, Hebrew, etc.), and; | |
196 // * UNKNOWN_DIRECTION: unknown (or error). | |
197 TextDirection GetICUTextDirection(); | |
198 | |
199 // Get the application text direction. (This is just the ICU direction, | |
200 // except on GTK.) | |
201 TextDirection GetTextDirection(); | |
202 | |
203 // Returns the text direction for |locale_name|. | |
204 TextDirection GetTextDirectionForLocale(const char* locale_name); | |
205 | |
206 // Given the string in |text|, returns the directionality of the first | |
207 // character with strong directionality in the string. If no character in the | |
208 // text has strong directionality, LEFT_TO_RIGHT is returned. The Bidi | |
209 // character types L, LRE, LRO, R, AL, RLE, and RLO are considered as strong | |
210 // directionality characters. Please refer to http://unicode.org/reports/tr9/ | |
211 // for more information. | |
212 TextDirection GetFirstStrongCharacterDirection(const std::wstring& text); | |
213 | |
214 // Given the string in |text|, this function creates a copy of the string with | |
215 // the appropriate Unicode formatting marks that mark the string direction | |
216 // (either left-to-right or right-to-left). The new string is returned in | |
217 // |localized_text|. The function checks both the current locale and the | |
218 // contents of the string in order to determine the direction of the returned | |
219 // string. The function returns true if the string in |text| was properly | |
220 // adjusted. | |
221 // | |
222 // Certain LTR strings are not rendered correctly when the context is RTL. For | |
223 // example, the string "Foo!" will appear as "!Foo" if it is rendered as is in | |
224 // an RTL context. Calling this function will make sure the returned localized | |
225 // string is always treated as a right-to-left string. This is done by | |
226 // inserting certain Unicode formatting marks into the returned string. | |
227 // | |
228 // TODO(idana) bug# 1206120: this function adjusts the string in question only | |
229 // if the current locale is right-to-left. The function does not take care of | |
230 // the opposite case (an RTL string displayed in an LTR context) since | |
231 // adjusting the string involves inserting Unicode formatting characters that | |
232 // Windows does not handle well unless right-to-left language support is | |
233 // installed. Since the English version of Windows doesn't have right-to-left | |
234 // language support installed by default, inserting the direction Unicode mark | |
235 // results in Windows displaying squares. | |
236 bool AdjustStringForLocaleDirection(const std::wstring& text, | |
237 std::wstring* localized_text); | |
238 | |
239 // Returns true if the string contains at least one character with strong right | |
240 // to left directionality; that is, a character with either R or AL Unicode | |
241 // BiDi character type. | |
242 bool StringContainsStrongRTLChars(const std::wstring& text); | |
243 | |
244 // Wraps a string with an LRE-PDF pair which essentialy marks the string as a | |
245 // Left-To-Right string. Doing this is useful in order to make sure LTR | |
246 // strings are rendered properly in an RTL context. | |
247 void WrapStringWithLTRFormatting(std::wstring* text); | |
248 | |
249 // Wraps a string with an RLE-PDF pair which essentialy marks the string as a | |
250 // Right-To-Left string. Doing this is useful in order to make sure RTL | |
251 // strings are rendered properly in an LTR context. | |
252 void WrapStringWithRTLFormatting(std::wstring* text); | |
253 | |
254 // Wraps file path to get it to display correctly in RTL UI. All filepaths | |
255 // should be passed through this function before display in UI for RTL locales. | |
256 void WrapPathWithLTRFormatting(const FilePath& path, | |
257 string16* rtl_safe_path); | |
258 | |
259 // Given the string in |text|, this function returns the adjusted string having | |
260 // LTR directionality for display purpose. Which means that in RTL locale the | |
261 // string is wrapped with LRE (Left-To-Right Embedding) and PDF (Pop | |
262 // Directional Formatting) marks and returned. In LTR locale, the string itself | |
263 // is returned. | |
264 std::wstring GetDisplayStringInLTRDirectionality(std::wstring* text); | |
265 | |
266 // Returns the default text alignment to be used when drawing text on a | |
267 // gfx::Canvas based on the directionality of the system locale language. This | |
268 // function is used by gfx::Canvas::DrawStringInt when the text alignment is | |
269 // not specified. | |
270 // | |
271 // This function returns either gfx::Canvas::TEXT_ALIGN_LEFT or | |
272 // gfx::Canvas::TEXT_ALIGN_RIGHT. | |
273 int DefaultCanvasTextAlignment(); | |
274 | |
275 // In place sorting of strings using collation rules for |locale|. | 177 // In place sorting of strings using collation rules for |locale|. |
276 // TODO(port): this should take string16. | 178 // TODO(port): this should take string16. |
277 void SortStrings(const std::string& locale, | 179 void SortStrings(const std::string& locale, |
278 std::vector<std::wstring>* strings); | 180 std::vector<std::wstring>* strings); |
279 | 181 |
280 // Returns a vector of available locale codes. E.g., a vector containing | 182 // Returns a vector of available locale codes. E.g., a vector containing |
281 // en-US, es, fr, fi, pt-PT, pt-BR, etc. | 183 // en-US, es, fr, fi, pt-PT, pt-BR, etc. |
282 const std::vector<std::string>& GetAvailableLocales(); | 184 const std::vector<std::string>& GetAvailableLocales(); |
283 | 185 |
284 // Returns a vector of locale codes usable for accept-languages. | 186 // Returns a vector of locale codes usable for accept-languages. |
285 void GetAcceptLanguagesForLocale(const std::string& display_locale, | 187 void GetAcceptLanguagesForLocale(const std::string& display_locale, |
286 std::vector<std::string>* locale_codes); | 188 std::vector<std::string>* locale_codes); |
287 | 189 |
288 | 190 |
289 } // namespace l10n_util | 191 } // namespace l10n_util |
290 | 192 |
291 #endif // APP_L10N_UTIL_H_ | 193 #endif // APP_L10N_UTIL_H_ |
OLD | NEW |