| # Copyright 2014 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/config/chromeos/ui_mode.gni") |
| |
| # This file creates |platform_pak_locales| which is the set of packed locales |
| # based on the current platform. Locales in this list are formatted based on |
| # what .pak files expect. The |platform_pak_locales| variable *may* contain |
| # pseudolocales, depending on the |enable_pseudolocales| flag. |
| # If you specifically want to have the locales variable with or without |
| # pseudolocales, then use |locales_with_pseudolocales| or |
| # |locales_without_pseudolocales|. |
| |
| # The following additional platform specific lists are created: |
| # - |extended_locales| list of locales not shipped on desktop builds |
| # - |android_bundle_locales_as_resources| locales formatted for XML output names |
| # - |locales_as_apple_outputs| formatted for mac output bundles |
| |
| pseudolocales = [ |
| "ar-XB", |
| "en-XA", |
| ] |
| |
| # Superset of all locales used in Chrome with platform specific changes noted. |
| all_chrome_locales = |
| [ |
| "af", |
| "am", |
| "ar", |
| "as", |
| "az", |
| "be", |
| "bg", |
| "bn", |
| "bs", |
| "ca", |
| "cs", |
| "cy", |
| "da", |
| "de", |
| "el", |
| "en-GB", |
| "en-US", |
| "es", |
| "es-419", # "es-MX" in iOS (Mexico vs Latin America) "es-US" on Android |
| "et", |
| "eu", |
| "fa", |
| "fi", |
| "fil", # "tl" in .xml but "fil" in TC and .pak |
| "fr", |
| "fr-CA", |
| "gl", |
| "gu", |
| "he", # "iw" in .xml and TC but "he" in .pak |
| "hi", |
| "hr", |
| "hu", |
| "hy", |
| "id", # "in" in .xml but "id" in TC and .pak |
| "is", |
| "it", |
| "ja", |
| "ka", |
| "kk", |
| "km", |
| "kn", |
| "ko", |
| "ky", |
| "lo", |
| "lt", |
| "lv", |
| "mk", |
| "ml", |
| "mn", |
| "mr", |
| "ms", |
| "my", |
| "nb", # "no" in TC but "nb" in .xml and .pak |
| "ne", |
| "nl", |
| "or", |
| "pa", |
| "pl", |
| "pt-BR", # just "pt" in iOS |
| "pt-PT", |
| "ro", |
| "ru", |
| "si", |
| "sk", |
| "sl", |
| "sq", |
| "sr", |
| "sr-Latn", # -b+sr+Latn in .xml |
| "sv", |
| "sw", |
| "ta", |
| "te", |
| "th", |
| "tr", |
| "uk", |
| "ur", |
| "uz", |
| "vi", |
| "zh-CN", |
| "zh-HK", |
| "zh-TW", |
| "zu", |
| ] + pseudolocales |
| |
| if (is_ios) { |
| # Chrome on iOS uses "es-MX" and "pt" for "es-419" and "pt-BR". |
| all_chrome_locales -= [ |
| "es-419", |
| "pt-BR", |
| ] |
| all_chrome_locales += [ |
| "es-MX", |
| "pt", |
| ] |
| } |
| |
| # Chrome locales not on Windows, Mac, or Linux. |
| # This list is used for all platforms except Android. On Android, this list is |
| # modified to exclude locales that are not used on Android, so |
| # `platform_pak_locales - extended_locales` works as expected. |
| extended_locales = [ |
| "as", |
| "az", |
| "be", |
| "bs", |
| "cy", |
| "eu", |
| "fr-CA", |
| "gl", |
| "hy", |
| "is", |
| "ka", |
| "kk", |
| "km", |
| "ky", |
| "lo", |
| "mk", |
| "mn", |
| "my", |
| "ne", |
| "or", |
| "pa", |
| "si", |
| "sq", |
| "sr-Latn", |
| "uz", |
| "zh-HK", |
| "zu", |
| ] |
| |
| # Chrome locales not on Android. |
| # These locales have not yet been tested yet. Specifically, AOSP has not been |
| # translated to Welsh at the time of writing (April 2022): |
| # https://cs.android.com/android/platform/superproject/+/master:build/make/target/product/languages_default.mk |
| # Due to this, the only way a user could see Welsh strings - assuming they were |
| # built - would be to manually switch their "Chrome language" in Chrome's |
| # language settings to Welsh, so Welsh usage would probably be very low. |
| _non_android_locales = [ "cy" ] |
| |
| # Setup |platform_pak_locales| for each platform. |
| platform_pak_locales = all_chrome_locales |
| if (is_android) { |
| platform_pak_locales -= _non_android_locales |
| extended_locales -= _non_android_locales |
| } else { |
| platform_pak_locales -= extended_locales |
| } |
| |
| # The base list for all platforms except Android excludes the extended locales. |
| # Add or subtract platform specific locales below. |
| if (is_chromeos) { |
| platform_pak_locales += [ |
| "cy", |
| "eu", |
| "gl", |
| "is", |
| "zu", |
| ] |
| platform_pak_locales -= [ "ur" ] |
| } else if (is_ios) { |
| platform_pak_locales -= [ |
| "af", |
| "am", |
| "bn", |
| "et", |
| "fil", |
| "gu", |
| "kn", |
| "lv", |
| "ml", |
| "mr", |
| "sl", |
| "sw", |
| "ta", |
| "te", |
| "ur", |
| ] |
| } |
| |
| # List for Android locale names in .xml exports. Note: needs to stay in sync |
| # with |ToAndroidLocaleName| in build/android/gyp/util/resource_utils.py. |
| if (is_android) { |
| # - add r: (e.g. zh-HK -> zh-rHK ) |
| android_bundle_locales_as_resources = [] |
| foreach(_locale, platform_pak_locales) { |
| android_bundle_locales_as_resources += |
| [ string_replace(_locale, "-", "-r") ] |
| } |
| |
| # - remove en-US |
| # - swap: (he, id, en-419, fil) -> (iw, in, es-rUS, tl) |
| # - sr-rLatn -> -b+sr+Latn |
| android_bundle_locales_as_resources -= [ |
| "en-rUS", |
| "es-r419", |
| "fil", |
| "he", |
| "id", |
| "sr-rLatn", |
| ] |
| android_bundle_locales_as_resources += [ |
| "b+sr+Latn", |
| "es-rUS", |
| "in", |
| "iw", |
| "tl", |
| ] |
| } |
| |
| locales_without_pseudolocales = platform_pak_locales - pseudolocales |
| locales_with_pseudolocales = platform_pak_locales |
| |
| declare_args() { |
| # We want to give pseudolocales to everyone except end-users (devs & QA). |
| # Note that this only packages the locales in, and doesn't add the ui to enable them. |
| enable_pseudolocales = !is_official_build |
| } |
| |
| if (!enable_pseudolocales) { |
| platform_pak_locales -= pseudolocales |
| } |
| |
| if (is_apple) { |
| # Same as the locales list but in the format Mac expects for output files: |
| # it uses underscores instead of hyphens, and "en" instead of "en-US". |
| locales_as_apple_outputs = [] |
| foreach(locale, platform_pak_locales) { |
| if (locale == "en-US") { |
| locales_as_apple_outputs += [ "en" ] |
| } else { |
| locales_as_apple_outputs += [ string_replace(locale, "-", "_") ] |
| } |
| } |
| } |