{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "VniDrop localization source",
  "type": "object",
  "required": ["sourceLanguage", "supportedLanguages", "strings"],
  "additionalProperties": false,
  "properties": {
    "sourceLanguage": { "type": "string", "description": "Default/base language code, e.g. \"en\"." },
    "supportedLanguages": {
      "type": "array",
      "items": { "type": "string" },
      "minItems": 1,
      "uniqueItems": true
    },
    "strings": {
      "type": "object",
      "additionalProperties": { "$ref": "#/definitions/entry" }
    }
  },
  "definitions": {
    "entry": {
      "type": "object",
      "required": ["context"],
      "additionalProperties": false,
      "oneOf": [
        { "required": ["translations"] },
        { "required": ["plural"] },
        { "not": { "anyOf": [{ "required": ["translations"] }, { "required": ["plural"] }] } }
      ],
      "properties": {
        "context": { "type": "string" },
        "targets": {
          "type": "array",
          "items": { "enum": ["kmp", "apple"] },
          "uniqueItems": true
        },
        "args": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["name", "type"],
            "additionalProperties": false,
            "properties": {
              "name": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
              "type": { "enum": ["string", "int", "double"] }
            }
          }
        },
        "translations": {
          "type": "object",
          "additionalProperties": { "type": "string" }
        },
        "plural": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "required": ["other"],
            "additionalProperties": false,
            "properties": {
              "zero": { "type": "string" },
              "one": { "type": "string" },
              "two": { "type": "string" },
              "few": { "type": "string" },
              "many": { "type": "string" },
              "other": { "type": "string" }
            }
          }
        }
      }
    }
  }
}
