• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2014 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/config/chromeos/ui_mode.gni")
6
7# This file creates |platform_pak_locales| which is the set of packed locales
8# based on the current platform. Locales in this list are formatted based on
9# what .pak files expect. The |platform_pak_locales| variable *may* contain
10# pseudolocales, depending on the |enable_pseudolocales| flag.
11# If you specifically want to have the locales variable with or without
12# pseudolocales, then use |locales_with_pseudolocales| or
13# |locales_without_pseudolocales|.
14
15# The following additional platform specific lists are created:
16# - |extended_locales| list of locales not shipped on desktop builds
17# - |android_bundle_locales_as_resources| locales formatted for XML output names
18# - |locales_as_apple_outputs| formatted for mac output bundles
19
20pseudolocales = [
21  "ar-XB",
22  "en-XA",
23]
24
25# Superset of all locales used in Chrome with platform specific changes noted.
26all_chrome_locales =
27    [
28      "af",
29      "am",
30      "ar",
31      "as",
32      "az",
33      "be",
34      "bg",
35      "bn",
36      "bs",
37      "ca",
38      "cs",
39      "cy",
40      "da",
41      "de",
42      "el",
43      "en-GB",
44      "en-US",
45      "es",
46      "es-419",  # "es-MX" in iOS (Mexico vs Latin America) "es-US" on Android
47      "et",
48      "eu",
49      "fa",
50      "fi",
51      "fil",  # "tl" in .xml but "fil" in TC and .pak
52      "fr",
53      "fr-CA",
54      "gl",
55      "gu",
56      "he",  # "iw" in .xml and TC but "he" in .pak
57      "hi",
58      "hr",
59      "hu",
60      "hy",
61      "id",  # "in" in .xml but "id" in TC and .pak
62      "is",
63      "it",
64      "ja",
65      "ka",
66      "kk",
67      "km",
68      "kn",
69      "ko",
70      "ky",
71      "lo",
72      "lt",
73      "lv",
74      "mk",
75      "ml",
76      "mn",
77      "mr",
78      "ms",
79      "my",
80      "nb",  # "no" in TC but "nb" in .xml and .pak
81      "ne",
82      "nl",
83      "or",
84      "pa",
85      "pl",
86      "pt-BR",  # just "pt" in iOS
87      "pt-PT",
88      "ro",
89      "ru",
90      "si",
91      "sk",
92      "sl",
93      "sq",
94      "sr",
95      "sr-Latn",  # -b+sr+Latn in .xml
96      "sv",
97      "sw",
98      "ta",
99      "te",
100      "th",
101      "tr",
102      "uk",
103      "ur",
104      "uz",
105      "vi",
106      "zh-CN",
107      "zh-HK",
108      "zh-TW",
109      "zu",
110    ] + pseudolocales
111
112if (is_ios) {
113  # Chrome on iOS uses "es-MX" and "pt" for "es-419" and "pt-BR".
114  all_chrome_locales -= [
115    "es-419",
116    "pt-BR",
117  ]
118  all_chrome_locales += [
119    "es-MX",
120    "pt",
121  ]
122}
123
124# Chrome locales not on Windows, Mac, or Linux.
125# This list is used for all platforms except Android. On Android, this list is
126# modified to exclude locales that are not used on Android, so
127# `platform_pak_locales - extended_locales` works as expected.
128extended_locales = [
129  "as",
130  "az",
131  "be",
132  "bs",
133  "cy",
134  "eu",
135  "fr-CA",
136  "gl",
137  "hy",
138  "is",
139  "ka",
140  "kk",
141  "km",
142  "ky",
143  "lo",
144  "mk",
145  "mn",
146  "my",
147  "ne",
148  "or",
149  "pa",
150  "si",
151  "sq",
152  "sr-Latn",
153  "uz",
154  "zh-HK",
155  "zu",
156]
157
158# Chrome locales not on Android.
159# These locales have not yet been tested yet. Specifically, AOSP has not been
160# translated to Welsh at the time of writing (April 2022):
161# https://cs.android.com/android/platform/superproject/+/master:build/make/target/product/languages_default.mk
162# Due to this, the only way a user could see Welsh strings - assuming they were
163# built - would be to manually switch their "Chrome language" in Chrome's
164# language settings to Welsh, so Welsh usage would probably be very low.
165_non_android_locales = [ "cy" ]
166
167# Setup |platform_pak_locales| for each platform.
168platform_pak_locales = all_chrome_locales
169if (is_android) {
170  platform_pak_locales -= _non_android_locales
171  extended_locales -= _non_android_locales
172} else {
173  platform_pak_locales -= extended_locales
174}
175
176# The base list for all platforms except Android excludes the extended locales.
177# Add or subtract platform specific locales below.
178if (is_chromeos) {
179  platform_pak_locales += [
180    "cy",
181    "eu",
182    "gl",
183    "is",
184    "zu",
185  ]
186  platform_pak_locales -= [ "ur" ]
187} else if (is_ios) {
188  platform_pak_locales -= [
189    "af",
190    "am",
191    "bn",
192    "et",
193    "fil",
194    "gu",
195    "kn",
196    "lv",
197    "ml",
198    "mr",
199    "sl",
200    "sw",
201    "ta",
202    "te",
203    "ur",
204  ]
205}
206
207# List for Android locale names in .xml exports. Note: needs to stay in sync
208# with |ToAndroidLocaleName| in build/android/gyp/util/resource_utils.py.
209if (is_android) {
210  #  - add r: (e.g. zh-HK -> zh-rHK )
211  android_bundle_locales_as_resources = []
212  foreach(_locale, platform_pak_locales) {
213    android_bundle_locales_as_resources +=
214        [ string_replace(_locale, "-", "-r") ]
215  }
216
217  #  - remove en-US
218  #  - swap: (he, id, en-419, fil) -> (iw, in, es-rUS, tl)
219  #  - sr-rLatn -> -b+sr+Latn
220  android_bundle_locales_as_resources -= [
221    "en-rUS",
222    "es-r419",
223    "fil",
224    "he",
225    "id",
226    "sr-rLatn",
227  ]
228  android_bundle_locales_as_resources += [
229    "b+sr+Latn",
230    "es-rUS",
231    "in",
232    "iw",
233    "tl",
234  ]
235}
236
237locales_without_pseudolocales = platform_pak_locales - pseudolocales
238locales_with_pseudolocales = platform_pak_locales
239
240declare_args() {
241  # We want to give pseudolocales to everyone except end-users (devs & QA).
242  # Note that this only packages the locales in, and doesn't add the ui to enable them.
243  enable_pseudolocales = !is_official_build
244}
245
246if (!enable_pseudolocales) {
247  platform_pak_locales -= pseudolocales
248}
249
250if (is_apple) {
251  # Same as the locales list but in the format Mac expects for output files:
252  # it uses underscores instead of hyphens, and "en" instead of "en-US".
253  locales_as_apple_outputs = []
254  foreach(locale, platform_pak_locales) {
255    if (locale == "en-US") {
256      locales_as_apple_outputs += [ "en" ]
257    } else {
258      locales_as_apple_outputs += [ string_replace(locale, "-", "_") ]
259    }
260  }
261}
262