# Copyright 2015 The Chromium Authors. All rights reserved.
# 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")

resources_locale_dir = "$root_gen_dir/remoting/resources/_locales"

# See also remoting_locales_with_underscores below.
remoting_locales = [
  "am",
  "ar",
  "bg",

  "bn",
  "ca",
  "cs",
  "da",
  "de",
  "el",
  "en",
  "en-GB",
  "es",
  "et",

  "fa",
  "fi",
  "fil",
  "fr",

  "gu",
  "he",
  "hi",
  "hr",
  "hu",
  "id",
  "it",
  "ja",

  "kn",
  "ko",
  "lt",
  "lv",

  "ml",
  "mr",
  "ms",
  "nb",
  "nl",
  "pl",
  "pt-PT",
  "ro",
  "ru",
  "sk",
  "sl",
  "sr",
  "sv",

  "sw",
  "ta",
  "te",
  "th",
  "tr",
  "uk",
  "vi",
  "zh-CN",
  "zh-TW",
]

# Some locales have hyphens in the names but for some uses underscores are
# needed.
remoting_locales_with_underscores = remoting_locales
remoting_locales_with_underscores -= [
  "en-GB",

  "pt-PT",
  "zh-CN",
  "zh-TW",
]
remoting_locales_with_underscores += [
  "en_GB",

  "pt_PT",
  "zh_CN",
  "zh_TW",
]

# The fake-bidi locale isn't accepted by the app store.
if (!is_ios || !is_official_build) {
  remoting_locales += [ "fake-bidi" ]
  remoting_locales_with_underscores += [ "fake_bidi" ]
}

# An additional locale "en-US" is generated for ChromeOS and Chrome on iOS.
# TODO(yuweih): Our build script doesn't seem to work with en-US and Chrome
# on iOS doesn't seem to have en-US.lproj. Add is_ios back if we do need to
# work with en-US.
if (is_chromeos_ash) {
  remoting_locales += [ "en-US" ]
  remoting_locales_with_underscores += [ "en_US" ]
}

# Locales "pt-BR" and "es-419" are named "pt" and "es-MX" respectively on iOS.
if (!is_ios) {
  remoting_locales += [
    "pt-BR",
    "es-419",
  ]
  remoting_locales_with_underscores += [
    "pt_BR",
    "es_419",
  ]
} else {
  remoting_locales += [
    "pt",
    "es-MX",
  ]
  remoting_locales_with_underscores += [
    "pt",
    "es_MX",
  ]
}

messages_locales = remoting_locales_with_underscores

remoting_android_locales = [
  "am",
  "ar",
  "bg",
  "ca",
  "cs",
  "da",
  "de",
  "el",
  "en-rGB",
  "es",
  "es-rUS",
  "fa",
  "fi",
  "fr",
  "hi",
  "hr",
  "hu",
  "in",
  "it",
  "iw",
  "ja",
  "ko",
  "lt",
  "lv",
  "nb",
  "nl",
  "pl",
  "pt-rBR",
  "pt-rPT",
  "ro",
  "ru",
  "sk",
  "sl",
  "sr",
  "sv",
  "sw",
  "th",
  "tl",
  "tr",
  "uk",
  "vi",
  "zh-rCN",
  "zh-rTW",
]

# The list of .json files generated by remoting_strings.grd.
remoting_resources_locale_files =
    process_file_template(
        messages_locales,
        [ "remoting/resources/_locales/{{source_name_part}}/messages.json" ])
