// Copyright (c) 2012 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.

[
  {
    "namespace": "manifest",
    "types": [
      {
        "$extend": "WebExtensionManifest",
        "properties": {
          "default_locale": {
            "type": "string",
            "optional": "true"
          }
        }
      }
    ]
  },
  {
    "namespace": "i18n",
    "allowedContexts": ["content"],
    "defaultContexts": ["content"],
    "description": "Use the <code>browser.i18n</code> infrastructure to implement internationalization across your whole app or extension.",
    "types": [
      {
        "id": "LanguageCode",
        "type": "string",
        "description": "An ISO language code such as <code>en</code> or <code>fr</code>. For a complete list of languages supported by this method, see <a href='http://src.chromium.org/viewvc/chrome/trunk/src/third_party/cld/languages/internal/languages.cc'>kLanguageInfoTable</a>. For an unknown language, <code>und</code> will be returned, which means that [percentage] of the text is unknown to CLD"
      }
    ],
    "functions": [
      {
        "name": "getAcceptLanguages",
        "type": "function",
        "description": "Gets the accept-languages of the browser. This is different from the locale used by the browser; to get the locale, use $(ref:i18n.getUILanguage).",
        "async": "callback",
        "parameters": [
          {
            "type": "function",
            "name": "callback",
            "parameters": [
              {"name": "languages", "type": "array", "items": {"$ref": "LanguageCode"}, "description": "Array of LanguageCode"}
            ]
          }
        ]
      },
      {
        "name": "getMessage",
        "type": "function",
        "description": "Gets the localized string for the specified message. If the message is missing, this method returns an empty string (''). If the format of the <code>getMessage()</code> call is wrong &mdash; for example, <em>messageName</em> is not a string or the <em>substitutions</em> array has more than 9 elements &mdash; this method returns <code>undefined</code>.",
        "parameters": [
          {
            "type": "string",
            "name": "messageName",
            "description": "The name of the message, as specified in the <code>$(topic:i18n-messages)[messages.json]</code> file."
          },
          {
            "type": "any",
            "name": "substitutions",
            "optional": true,
            "description": "Substitution strings, if the message requires any."
          }
        ],
        "returns": {
          "type": "string",
          "description": "Message localized for current locale."
        }
      },
      {
        "name": "getUILanguage",
        "type": "function",
        "description": "Gets the browser UI language of the browser. This is different from $(ref:i18n.getAcceptLanguages) which returns the preferred user languages.",
        "parameters": [],
        "returns": {
          "type": "string",
          "description": "The browser UI language code such as en-US or fr-FR."
        }
      },
      {
        "name": "detectLanguage",
        "type": "function",
        "description": "Detects the language of the provided text using CLD.",
        "async": "callback",
        "parameters": [
          {
            "type": "string",
            "name": "text",
            "description": "User input string to be translated."
          },
          {
            "type": "function",
            "name": "callback",
            "parameters": [
              {
                "type": "object",
                "name": "result",
                "description": "LanguageDetectionResult object that holds detected langugae reliability and array of DetectedLanguage",
                "properties": {
                  "isReliable": { "type": "boolean", "description": "CLD detected language reliability" },
                  "languages":
                    {
                      "type": "array",
                      "description": "array of detectedLanguage",
                      "items":
                        {
                          "type": "object",
                          "description": "DetectedLanguage object that holds detected ISO language code and its percentage in the input string",
                          "properties":
                            {
                              "language":
                                {
                                  "$ref": "LanguageCode"
                                },
                              "percentage":
                                {
                                  "type": "integer",
                                  "description": "The percentage of the detected language"
                                }
                            }
                        }
                    }
                }
              }
            ]
          }
        ]
      }
    ],
    "events": []
  }
]