# Copyright 2014 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/locales.gni")
import("//tools/grit/grit_rule.gni")

# Meta target that includes both ui_strings and app_locale_settings. Most
# targets want both. You can depend on the individually if you need to.
group("strings") {
  public_deps = [
    ":app_locale_settings",
    ":ui_strings",
  ]
}

grit("ui_strings") {
  source = "ui_strings.grd"
  outputs = [
    "grit/ui_strings.h",
  ]
  foreach(locale, locales_with_fake_bidi) {
    outputs += [ "ui_strings_$locale.pak" ]
  }
}

grit("app_locale_settings") {
  source = "app_locale_settings.grd"
  outputs = [
    "grit/app_locale_settings.h",
  ]
  foreach(locale, locales_with_fake_bidi) {
    outputs += [ "app_locale_settings_$locale.pak" ]
  }
}
