# 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.

webapp_locale_dir = "$root_gen_dir/remoting/webapp/_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) {
  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_webapp_locale_files =
    process_file_template(
        messages_locales,
        [ "remoting/webapp/_locales/{{source_name_part}}/messages.json" ])
