# 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, "-", "_") ]
    }
  }
}
