{
  "custom": {},
  "events": {
    "system": {
      "onStartup": {
        "config": {
          "script": "\tif(self.session.props.locale) \u003d\u003d \"en-US\":\n\t\tself.getChild(\"root\").getChild(\"flx_drop\").getChild(\"Dropdown\").props.value \u003d \"en\"\n\telse:\n\t\tself.getChild(\"root\").getChild(\"flx_drop\").getChild(\"Dropdown\").props.value \u003d self.session.props.locale\n\t\t\n\tsystem.perspective.sendMessage(\"update-translation-table\",{\u0027locale\u0027:self.getChild(\"root\").getChild(\"flx_drop\").getChild(\"Dropdown\").props.value})"
        },
        "scope": "G",
        "type": "script"
      }
    }
  },
  "params": {},
  "props": {},
  "root": {
    "children": [
      {
        "children": [
          {
            "meta": {
              "name": "Label_0"
            },
            "position": {
              "basis": "50px",
              "grow": 1
            },
            "type": "ia.display.label"
          },
          {
            "events": {
              "component": {
                "onActionPerformed": {
                  "config": {
                    "script": "\t#\t#set locale\n\tself.session.props.locale \u003d self.props.value\n\tself.parent.parent.getChild(\"flx_translation\").getChild(\"tbl_translation\").updateTable(self.props.value)"
                  },
                  "scope": "G",
                  "type": "script"
                }
              }
            },
            "meta": {
              "name": "Dropdown"
            },
            "position": {
              "basis": "336px"
            },
            "propConfig": {
              "props.value": {
                "persistent": false
              }
            },
            "props": {
              "options": [
                {
                  "label": "English",
                  "value": "en"
                }
              ],
              "placeholder": {
                "text": "Select Language"
              }
            },
            "type": "ia.input.dropdown"
          },
          {
            "meta": {
              "name": "Label"
            },
            "position": {
              "basis": "10px",
              "grow": 1
            },
            "type": "ia.display.label"
          },
          {
            "events": {
              "dom": {
                "onClick": {
                  "config": {
                    "script": "\timport csv\n\timport io\n\tvalue \u003d self.parent.parent.getChild(\"flx_translation\").getChild(\"tbl_translation\").props.data\n\theaders \u003d [\u0027Term\u0027,\u0027Translated\u0027]\n\tdatasetData \u003d []\n\treadData \u003d []\n\toutput \u003d \u0027\u0027\n\t\n\tfor row in range(len(value)):\t\n\t\trowData \u003d []\n\t\tfor col in range(len(headers)):\n\t\t\trowData.append(value[row][headers[col]])\n\t\tdatasetData.append(rowData)\n\t\t\n\tfinalDataset \u003d system.dataset.toDataSet(headers,datasetData)\n\tcsvdata \u003d system.dataset.toCSV(finalDataset, 1, 0, 0)\n\tfilename \u003d system.file.getTempFile(\u0027csv\u0027)\n\tsystem.file.writeFile(filename, csvdata,0,\"UTF-8\")\n\n\twith open(filename, \"r\") as file:\n\t\treadData \u003d file.readlines()\n\t\t\n\tfor index, line in enumerate(readData):\n\t\tmodifiedLine \u003d line\n\t\tmodifiedLine \u003d modifiedLine.lstrip(\u0027\\\"\u0027)\n\t\tmodifiedLine \u003d modifiedLine.replace(\u0027\\\"\\n\u0027,\u0027\\n\u0027)\n\t\tmodifiedLine \u003d modifiedLine.replace(\u0027\\\",\\\"\u0027, \u0027,\u0027)\n\t\toutput \u003d output+ str(modifiedLine).decode(\"UTF-8\")\n\tsystem.perspective.download(filename, output)\n"
                  },
                  "scope": "G",
                  "type": "script"
                }
              }
            },
            "meta": {
              "name": "Icon"
            },
            "position": {
              "basis": "56px"
            },
            "props": {
              "path": "material/cloud_download",
              "style": {
                "backgroundColor": "#00000005",
                "borderBottomLeftRadius": 5,
                "borderBottomRightRadius": 5,
                "borderColor": "#0000002B",
                "borderStyle": "dashed",
                "borderTopLeftRadius": 5,
                "borderTopRightRadius": 5,
                "borderWidth": 1,
                "cursor": "pointer",
                "paddingLeft": 15,
                "paddingRight": 15
              }
            },
            "type": "ia.display.icon"
          },
          {
            "meta": {
              "name": "Label_2"
            },
            "position": {
              "basis": "10px"
            },
            "type": "ia.display.label"
          },
          {
            "events": {
              "component": {
                "onFileReceived": {
                  "config": {
                    "script": "\tstr_data \u003d event.file.getString()\n\tdata \u003d []\n\theaders \u003d []\n\tfor i,line in enumerate(str_data.split(\u0027\\n\u0027)):\n\t\tif len(line.split(\u0027,\u0027)) \u003e 1:\n\t\t\tif i \u003d\u003d 0:\n\t\t\t\theaders \u003d line.split(\u0027,\u0027)\n\t\t\telse:\n\t\t\t\tdata.append(line.split(\u0027,\u0027))\n\t\n\tds \u003d system.dataset.toDataSet(headers,data)\n\tsystem.perspective.openPopup(\u0027BulkTerms\u0027, \u0027Language/BulkAddTerms\u0027, params \u003d {\u0027data\u0027:ds}, title \u003d\u0027Bulk Add Terms\u0027, overlayDismiss \u003dTrue, modal \u003d True, showCloseIcon \u003d False, resizable \u003d True)"
                  },
                  "scope": "G",
                  "type": "script"
                }
              }
            },
            "meta": {
              "name": "FileUpload"
            },
            "position": {
              "basis": "55px"
            },
            "props": {
              "fileSizeLimit": 50,
              "fileUploadIcon": {
                "color": "#000000",
                "style": {
                  "backgroundColor": "#FFFFFF00",
                  "borderBottomWidth": 0,
                  "borderLeftWidth": 0,
                  "borderRightWidth": 0,
                  "borderTopColor": "#FFFFFF00",
                  "borderTopWidth": 0,
                  "cursor": "pointer"
                }
              },
              "supportedFileTypes": [
                "csv"
              ]
            },
            "type": "ia.input.fileupload"
          },
          {
            "meta": {
              "name": "Label_1"
            },
            "position": {
              "basis": "10px"
            },
            "type": "ia.display.label"
          }
        ],
        "meta": {
          "name": "flx_drop"
        },
        "position": {
          "basis": "35px"
        },
        "props": {
          "style": {
            "marginBottom": 20,
            "marginTop": 10
          }
        },
        "type": "ia.container.flex"
      },
      {
        "children": [
          {
            "events": {
              "dom": {
                "onClick": {
                  "config": {
                    "script": "\t\n\tsystem.perspective.openPopup(\u0027TermEditor\u0027, \u0027Language/AddEdit Term\u0027, params \u003d {\u0027isEdit\u0027:False}, title \u003d\u0027Add Term\u0027, overlayDismiss \u003dTrue, modal \u003d True, showCloseIcon \u003d False, resizable \u003d True)"
                  },
                  "scope": "G",
                  "type": "script"
                }
              }
            },
            "meta": {
              "name": "Add Term"
            },
            "position": {
              "basis": "170px"
            },
            "props": {
              "image": {
                "height": 20,
                "icon": {
                  "color": "#FFFDFD",
                  "path": "material/add_box"
                },
                "width": 20
              },
              "style": {
                "backgroundColor": "004A98",
                "classes": "Buttons/Medium_Button",
                "height": "50px",
                "marginRight": 22
              },
              "text": "Add Term"
            },
            "type": "ia.input.button"
          },
          {
            "events": {
              "dom": {
                "onClick": {
                  "config": {
                    "script": "\tterm \u003d self.parent.parent.getChild(\"flx_translation\").getChild(\"tbl_translation\").props.selection.data[0].Term\n\ttranslated \u003d self.parent.parent.getChild(\"flx_translation\").getChild(\"tbl_translation\").props.selection.data[0].Translated\n\n\tsystem.perspective.openPopup(\u0027TermEditor\u0027, \u0027Language/AddEdit Term\u0027, params \u003d {\u0027term\u0027:term,\u0027translated\u0027:translated, \u0027isEdit\u0027:True}, title \u003d\u0027Term Editor\u0027, overlayDismiss \u003dTrue, modal \u003d True, showCloseIcon \u003d False, resizable \u003d True)"
                  },
                  "scope": "G",
                  "type": "script"
                }
              }
            },
            "meta": {
              "name": "Edit User"
            },
            "position": {
              "basis": "170px"
            },
            "propConfig": {
              "props.enabled": {
                "binding": {
                  "config": {
                    "expression": "!isNull({.../flx_translation/tbl_translation.props.selection.selectedRow})"
                  },
                  "type": "expr"
                },
                "persistent": true
              }
            },
            "props": {
              "enabled": false,
              "image": {
                "height": 20,
                "icon": {
                  "color": "#FFFDFD",
                  "path": "material/edit"
                },
                "width": 20
              },
              "style": {
                "backgroundColor": "004A98",
                "classes": "Buttons/Medium_Button",
                "height": "50px",
                "marginRight": 22
              },
              "text": "Edit Term",
              "textStyle": {
                "textAlign": "center"
              }
            },
            "type": "ia.input.button"
          },
          {
            "events": {
              "component": {
                "onActionPerformed": {
                  "config": {
                    "draggable": true,
                    "id": "Confirm",
                    "modal": true,
                    "overlayDismiss": false,
                    "resizable": false,
                    "showCloseIcon": true,
                    "type": "open",
                    "viewParams": {
                      "event_message_type": "delete-term",
                      "event_payload": "{/root/flx_translation/tbl_translation.props.selection.data[0].Term}",
                      "text": "Delete Term {/root/flx_translation/tbl_translation.props.selection.data[0].Term}"
                    },
                    "viewPath": "Popup/Confirm",
                    "viewportBound": false
                  },
                  "scope": "C",
                  "type": "popup"
                }
              }
            },
            "meta": {
              "name": "Delete User"
            },
            "position": {
              "basis": "170px"
            },
            "propConfig": {
              "props.enabled": {
                "binding": {
                  "config": {
                    "expression": "!isNull({.../flx_translation/tbl_translation.props.selection.selectedRow})"
                  },
                  "type": "expr"
                },
                "persistent": true
              }
            },
            "props": {
              "enabled": false,
              "image": {
                "height": 20,
                "icon": {
                  "color": "#FFFDFD",
                  "path": "material/delete_forever"
                },
                "width": 20
              },
              "style": {
                "backgroundColor": "004A98",
                "classes": "Buttons/Medium_Button",
                "height": "50px",
                "marginRight": 22
              },
              "text": "Delete Term",
              "textStyle": {
                "textAlign": "center"
              }
            },
            "scripts": {
              "customMethods": [],
              "extensionFunctions": null,
              "messageHandlers": [
                {
                  "messageType": "delete-term",
                  "pageScope": true,
                  "script": "\tsystem.perspective.sendMessage(\"update-translation-table\",{\u0027locale\u0027:self.parent.parent.getChild(\"flx_drop\").getChild(\"Dropdown\").props.value,\"delete-term\":payload})",
                  "sessionScope": false,
                  "viewScope": false
                }
              ]
            },
            "type": "ia.input.button"
          }
        ],
        "meta": {
          "name": "Header"
        },
        "props": {
          "justify": "center",
          "style": {
            "marginBottom": 15,
            "marginTop": 15
          }
        },
        "type": "ia.container.flex"
      },
      {
        "children": [
          {
            "events": {
              "component": {
                "onEditCellCommit": {
                  "config": {
                    "script": "\tif event.column \u003d\u003d \u0027Translated\u0027:\n\t\tterm \u003d self.props.data[event.row][\u0027Term\u0027]\n\t\t\n\t\t#translate existing term\n\t\tif term:\n\t\t\tproject \u003d system.util.getProjectName()\n\t\t\tpayload \u003d {\u0027locale\u0027:self.session.props.locale,\u0027term\u0027:term,\u0027translation\u0027:event.value, \u0027project\u0027:project}\n\t\t\tsystem.util.sendMessage(project, \u0027modifyTranslation\u0027, payload)\n\t\t\tself.props.data[event.rowIndex][event.column] \u003d event.value\n\t\t\n\t\t#add new term"
                  },
                  "scope": "G",
                  "type": "script"
                }
              }
            },
            "meta": {
              "name": "tbl_translation"
            },
            "position": {
              "basis": "400px",
              "grow": 1
            },
            "propConfig": {
              "props.data": {
                "persistent": false
              }
            },
            "props": {
              "columns": [
                {
                  "align": "center",
                  "boolean": "checkbox",
                  "dateFormat": "MM/DD/YYYY",
                  "editable": false,
                  "field": "Term",
                  "footer": {
                    "align": "center",
                    "justify": "left",
                    "style": {
                      "classes": ""
                    },
                    "title": ""
                  },
                  "header": {
                    "align": "center",
                    "justify": "left",
                    "style": {
                      "classes": ""
                    },
                    "title": ""
                  },
                  "justify": "auto",
                  "number": "value",
                  "numberFormat": "0,0.##",
                  "progressBar": {
                    "bar": {
                      "color": "",
                      "style": {
                        "classes": ""
                      }
                    },
                    "max": 100,
                    "min": 0,
                    "track": {
                      "color": "",
                      "style": {
                        "classes": ""
                      }
                    },
                    "value": {
                      "enabled": true,
                      "format": "0,0.##",
                      "justify": "center",
                      "style": {
                        "classes": ""
                      }
                    }
                  },
                  "render": "auto",
                  "resizable": true,
                  "sort": "none",
                  "sortable": false,
                  "strictWidth": false,
                  "style": {
                    "classes": ""
                  },
                  "toggleSwitch": {
                    "color": {
                      "selected": "",
                      "unselected": ""
                    }
                  },
                  "viewParams": {},
                  "viewPath": "",
                  "visible": true,
                  "width": ""
                },
                {
                  "align": "center",
                  "boolean": "checkbox",
                  "dateFormat": "MM/DD/YYYY",
                  "editable": false,
                  "field": "Translated",
                  "footer": {
                    "align": "center",
                    "justify": "left",
                    "style": {
                      "classes": ""
                    },
                    "title": ""
                  },
                  "header": {
                    "align": "center",
                    "justify": "left",
                    "style": {
                      "classes": ""
                    },
                    "title": ""
                  },
                  "justify": "auto",
                  "number": "value",
                  "numberFormat": "0,0.##",
                  "progressBar": {
                    "bar": {
                      "color": "",
                      "style": {
                        "classes": ""
                      }
                    },
                    "max": 100,
                    "min": 0,
                    "track": {
                      "color": "",
                      "style": {
                        "classes": ""
                      }
                    },
                    "value": {
                      "enabled": true,
                      "format": "0,0.##",
                      "justify": "center",
                      "style": {
                        "classes": ""
                      }
                    }
                  },
                  "render": "auto",
                  "resizable": true,
                  "sort": "none",
                  "sortable": false,
                  "strictWidth": false,
                  "style": {
                    "classes": ""
                  },
                  "toggleSwitch": {
                    "color": {
                      "selected": "",
                      "unselected": ""
                    }
                  },
                  "viewParams": {},
                  "viewPath": "",
                  "visible": true,
                  "width": ""
                }
              ],
              "filter": {
                "enabled": true,
                "results": {
                  "enabled": true
                }
              },
              "rows": {
                "style": {
                  "textIndent": 10
                }
              },
              "style": {
                "fontFamily": "Verdana"
              }
            },
            "scripts": {
              "customMethods": [
                {
                  "name": "updateTable",
                  "params": [
                    "locale_str"
                  ],
                  "script": "\t# implement your method here\n\t\n\tfrom com.inductiveautomation.ignition.gateway import IgnitionGateway\n\tfrom com.inductiveautomation.ignition.gateway.script import GatewaySystemUtilities\n\tpackage \u003d IgnitionGateway.get().getLocalizationManager().loadFullPackage()\n\t\n\t\"\"\"\n\tpackage directory:\n\t[\u0027__class__\u0027, \u0027__copy__\u0027, \u0027__deepcopy__\u0027, \u0027__delattr__\u0027, \u0027__doc__\u0027, \u0027__ensure_finalizer__\u0027, \u0027__eq__\u0027, \u0027__format__\u0027, \n\t\u0027__getattribute__\u0027, \u0027__hash__\u0027, \u0027__init__\u0027, \u0027__ne__\u0027, \u0027__new__\u0027, \u0027__reduce__\u0027, \u0027__reduce_ex__\u0027, \u0027__repr__\u0027, \u0027__setattr__\u0027, \n\t\u0027__str__\u0027, \u0027__subclasshook__\u0027, \u0027__unicode__\u0027, \u0027addTerm\u0027, \u0027addTranslation\u0027, \u0027addTranslations\u0027, \u0027allTranslations\u0027, \n\t\u0027applyPackage\u0027, \u0027availableKeys\u0027, \u0027availableLocales\u0027, \u0027baseLocale\u0027, \u0027class\u0027, \u0027createDiff\u0027, \u0027ensureLocaleExists\u0027, \u0027equals\u0027, \n\t\u0027get\u0027, \u0027getAllTranslations\u0027, \u0027getAvailableKeys\u0027, \u0027getAvailableLocales\u0027, \u0027getBaseLocale\u0027, \u0027getBundle\u0027, \u0027getClass\u0027, \u0027getIndex\u0027,\n\t \u0027getKeyHashRule\u0027, \u0027getOrCreateBundle\u0027, \u0027getStrict\u0027, \u0027getTranslationsFor\u0027, \u0027hashCode\u0027, \u0027index\u0027, \u0027isDefined\u0027, \u0027keyHashRule\u0027, \n\t \u0027notify\u0027, \u0027notifyAll\u0027, \u0027removeKey\u0027, \u0027removeLocale\u0027, \u0027removeTranslation\u0027, \u0027setBaseLocale\u0027, \u0027setIndex\u0027, \u0027setKeyHashRule\u0027, \n\t \u0027toString\u0027, \u0027updateIndex\u0027, \u0027wait\u0027]\n\t\"\"\"\n\t\n\tdef translate(terms, strict\u003dFalse, locale\u003dNone):\n\t\t#https://forum.inductiveautomation.com/t/perspective-system-util-translate-poor-inconsistent-performance/45134/6\n\t\t\n\t\tif locale is None:\n\t\t\tlocale \u003d GatewaySystemUtilities.LOCAL_LOCALE.get()\n\t\t\t\n\t\tfn \u003d package.getStrict if strict else package.get\n\t\treturn [fn(locale, term) for term in terms]\n\t\n\t\n\tdef getColumnDataStructure(name):\n\t\treturn\t  {\n\t\t\"field\": name,\n\t\t\"visible\": True,\n\t\t\"editable\": False,\n\t\t\"render\": \"auto\",\n\t\t\"justify\": \"auto\",\n\t\t\"align\": \"center\",\n\t\t\"resizable\": True,\n\t\t\"sortable\": False,\n\t\t\"sort\": \"none\",\n\t\t\"viewPath\": \"\",\n\t\t\"viewParams\": {},\n\t\t\"boolean\": \"checkbox\",\n\t\t\"number\": \"value\",\n\t\t\"progressBar\": {\n\t\t  \"max\": 100,\n\t\t  \"min\": 0,\n\t\t  \"bar\": {\n\t\t\t\"color\": \"\",\n\t\t\t\"style\": {\n\t\t\t  \"classes\": \"\"\n\t\t\t}\n\t\t  },\n\t\t  \"track\": {\n\t\t\t\"color\": \"\",\n\t\t\t\"style\": {\n\t\t\t  \"classes\": \"\"\n\t\t\t}\n\t\t  },\n\t\t  \"value\": {\n\t\t\t\"enabled\": True,\n\t\t\t\"format\": \"0,0.##\",\n\t\t\t\"justify\": \"center\",\n\t\t\t\"style\": {\n\t\t\t  \"classes\": \"\"\n\t\t\t}\n\t\t  }\n\t\t},\n\t\t\"toggleSwitch\": {\n\t\t  \"color\": {\n\t\t\t\"selected\": \"\",\n\t\t\t\"unselected\": \"\"\n\t\t  }\n\t\t},\n\t\t\"numberFormat\": \"0,0.##\",\n\t\t\"dateFormat\": \"MM/DD/YYYY\",\n\t\t\"width\": \"\",\n\t\t\"strictWidth\": False,\n\t\t\"style\": {\n\t\t  \"classes\": \"\"\n\t\t},\n\t\t\"header\": {\n\t\t  \"title\": \"\",\n\t\t  \"justify\": \"left\",\n\t\t  \"align\": \"center\",\n\t\t  \"style\": {\n\t\t\t\"classes\": \"\"\n\t\t  }\n\t\t},\n\t\t\"footer\": {\n\t\t  \"title\": \"\",\n\t\t  \"justify\": \"left\",\n\t\t  \"align\": \"center\",\n\t\t  \"style\": {\n\t\t\t\"classes\": \"\"\n\t\t  }\n\t\t}\n\t  }\n\t\n\t\n\tterms \u003d sorted(package.availableKeys)\n\tif locale_str:\n\t\timport java\n\t\tlocaleObj \u003d java.util.Locale(locale_str)\n\t\ttranslated \u003d translate(terms, False, localeObj)\n\t\n\telse:\n\t\ttranslated \u003d translate(terms)\n\td \u003d []\n\tself.props.data \u003d d\n\tcolumns \u003d [getColumnDataStructure(\u0027Term\u0027),getColumnDataStructure(\u0027Translated\u0027)]\n\t\n\tfor i,t_term in enumerate(translated):\n\t\td.append({\"Term\":terms[i],\u0027Translated\u0027:t_term.replace(\"\\r\",\"\")})\n\t\t\n\tself.props.data \u003d d\n\tself.props.columns \u003d columns"
                }
              ],
              "extensionFunctions": null,
              "messageHandlers": [
                {
                  "messageType": "update-translation-table",
                  "pageScope": true,
                  "script": "\tfrom com.inductiveautomation.ignition.gateway import IgnitionGateway\n\ttranslationManager \u003d IgnitionGateway.get().getTranslationManager()\n\t\n\tlocale \u003d payload[\u0027locale\u0027]\n\n\tif (\"pending_translations\" in payload.keys()):\n\t\tfor term,translation in payload[\u0027pending_translations\u0027].items():\n\t\t\tif not str(translation) or str(translation) \u003d\u003d \u0027\u0027:\n\t\t\t\ttranslation \u003d term\n\t\t\tsystem.util.modifyTranslation(term, translation, locale)\n\t\t\t\n\telif(\"delete-term\" in payload.keys()):\n\t\ttranslationManager.removeTerm(payload[\"delete-term\"])\n\t\t\n\tself.updateTable(locale)",
                  "sessionScope": true,
                  "viewScope": true
                }
              ]
            },
            "type": "ia.display.table"
          }
        ],
        "meta": {
          "name": "flx_translation"
        },
        "position": {
          "basis": "427px",
          "grow": 1
        },
        "props": {
          "direction": "column",
          "style": {
            "marginLeft": 10,
            "marginRight": 10
          }
        },
        "type": "ia.container.flex"
      },
      {
        "meta": {
          "name": "flx_spacer1"
        },
        "position": {
          "basis": "30px"
        },
        "type": "ia.container.flex"
      },
      {
        "meta": {
          "name": "Dropdown"
        },
        "position": {
          "basis": "36px"
        },
        "props": {
          "options": [
            {
              "label": "",
              "value": ""
            }
          ]
        },
        "type": "ia.input.dropdown"
      }
    ],
    "events": {
      "system": {
        "onStartup": {
          "config": {
            "script": "\tfrom com.inductiveautomation.ignition.gateway import IgnitionGateway\n\tfrom com.inductiveautomation.ignition.gateway.script import GatewaySystemUtilities\n\tpackage \u003d IgnitionGateway.get().getLocalizationManager().loadFullPackage()\n\t\n\t\"\"\"\n\tpackage directory:\n\t[\u0027__class__\u0027, \u0027__copy__\u0027, \u0027__deepcopy__\u0027, \u0027__delattr__\u0027, \u0027__doc__\u0027, \u0027__ensure_finalizer__\u0027, \u0027__eq__\u0027, \u0027__format__\u0027, \n\t\u0027__getattribute__\u0027, \u0027__hash__\u0027, \u0027__init__\u0027, \u0027__ne__\u0027, \u0027__new__\u0027, \u0027__reduce__\u0027, \u0027__reduce_ex__\u0027, \u0027__repr__\u0027, \u0027__setattr__\u0027, \n\t\u0027__str__\u0027, \u0027__subclasshook__\u0027, \u0027__unicode__\u0027, \u0027addTerm\u0027, \u0027addTranslation\u0027, \u0027addTranslations\u0027, \u0027allTranslations\u0027, \n\t\u0027applyPackage\u0027, \u0027availableKeys\u0027, \u0027availableLocales\u0027, \u0027baseLocale\u0027, \u0027class\u0027, \u0027createDiff\u0027, \u0027ensureLocaleExists\u0027, \u0027equals\u0027, \n\t\u0027get\u0027, \u0027getAllTranslations\u0027, \u0027getAvailableKeys\u0027, \u0027getAvailableLocales\u0027, \u0027getBaseLocale\u0027, \u0027getBundle\u0027, \u0027getClass\u0027, \u0027getIndex\u0027,\n\t \u0027getKeyHashRule\u0027, \u0027getOrCreateBundle\u0027, \u0027getStrict\u0027, \u0027getTranslationsFor\u0027, \u0027hashCode\u0027, \u0027index\u0027, \u0027isDefined\u0027, \u0027keyHashRule\u0027, \n\t \u0027notify\u0027, \u0027notifyAll\u0027, \u0027removeKey\u0027, \u0027removeLocale\u0027, \u0027removeTranslation\u0027, \u0027setBaseLocale\u0027, \u0027setIndex\u0027, \u0027setKeyHashRule\u0027, \n\t \u0027toString\u0027, \u0027updateIndex\u0027, \u0027wait\u0027]\n\t\"\"\"\n\t\n\t\n\tlocales \u003d package.getAvailableLocales()\n\t\n\t\"\"\"\n\t\tlocale object directory:\n\t\t[\u0027Builder\u0027, \u0027CANADA\u0027, \u0027CANADA_FRENCH\u0027, \u0027CHINA\u0027, \u0027CHINESE\u0027, \u0027Category\u0027, \u0027ENGLISH\u0027, \u0027FRANCE\u0027, \u0027FRENCH\u0027, \u0027FilteringMode\u0027, \n\t\t\u0027GERMAN\u0027, \u0027GERMANY\u0027, \u0027ISO3Country\u0027, \u0027ISO3Language\u0027, \u0027ITALIAN\u0027, \u0027ITALY\u0027, \u0027IsoCountryCode\u0027, \u0027JAPAN\u0027, \u0027JAPANESE\u0027, \u0027KOREA\u0027, \n\t\t\u0027KOREAN\u0027, \u0027LanguageRange\u0027, \u0027PRC\u0027, \u0027PRIVATE_USE_EXTENSION\u0027, \u0027ROOT\u0027, \u0027SIMPLIFIED_CHINESE\u0027, \u0027TAIWAN\u0027, \u0027TRADITIONAL_CHINESE\u0027, \n\t\t\u0027UK\u0027, \u0027UNICODE_LOCALE_EXTENSION\u0027, \u0027US\u0027, \u0027__class__\u0027, \u0027__copy__\u0027, \u0027__deepcopy__\u0027, \u0027__delattr__\u0027, \u0027__doc__\u0027, \u0027__ensure_finalizer__\u0027, \n\t\t\u0027__eq__\u0027, \u0027__format__\u0027, \u0027__getattribute__\u0027, \u0027__hash__\u0027, \u0027__init__\u0027, \u0027__ne__\u0027, \u0027__new__\u0027, \u0027__reduce__\u0027, \u0027__reduce_ex__\u0027, \n\t\t\u0027__repr__\u0027, \u0027__setattr__\u0027, \u0027__str__\u0027, \u0027__subclasshook__\u0027, \u0027__unicode__\u0027, \u0027class\u0027, \u0027clone\u0027, \u0027country\u0027, \u0027displayCountry\u0027, \n\t\t\u0027displayLanguage\u0027, \u0027displayName\u0027, \u0027displayScript\u0027, \u0027displayVariant\u0027, \u0027equals\u0027, \u0027extensionKeys\u0027, \u0027filter\u0027, \u0027filterTags\u0027, \n\t\t\u0027forLanguageTag\u0027, \u0027getAvailableLocales\u0027, \u0027getClass\u0027, \u0027getCountry\u0027, \u0027getDefault\u0027, \u0027getDisplayCountry\u0027, \u0027getDisplayLanguage\u0027, \n\t\t\u0027getDisplayName\u0027, \u0027getDisplayScript\u0027, \u0027getDisplayVariant\u0027, \u0027getExtension\u0027, \u0027getExtensionKeys\u0027, \u0027getISO3Country\u0027, \u0027getISO3Language\u0027, \n\t\t\u0027getISOCountries\u0027, \u0027getISOLanguages\u0027, \u0027getLanguage\u0027, \u0027getScript\u0027, \u0027getUnicodeLocaleAttributes\u0027, \u0027getUnicodeLocaleKeys\u0027,\n\t\t \u0027getUnicodeLocaleType\u0027, \u0027getVariant\u0027, \u0027hasExtensions\u0027, \u0027hashCode\u0027, \u0027language\u0027, \u0027lookup\u0027, \u0027lookupTag\u0027, \u0027notify\u0027, \u0027notifyAll\u0027, \n\t\t \u0027script\u0027, \u0027setDefault\u0027, \u0027stripExtensions\u0027, \u0027toLanguageTag\u0027, \u0027toString\u0027, \u0027unicodeLocaleAttributes\u0027, \u0027unicodeLocaleKeys\u0027, \u0027variant\u0027, \n\t\t \u0027wait\u0027]\n\t\n\t\"\"\"\n\t\n\tlocale_list \u003d [{\u0027label\u0027:loc.getDisplayName(),\u0027value\u0027:loc.toLanguageTag()} for loc in locales if loc.getDisplayName() !\u003d \u0027English (United States)\u0027]\n\tself.getChild(\"flx_drop\").getChild(\"Dropdown\").props.options \u003d locale_list "
          },
          "scope": "G",
          "type": "script"
        }
      }
    },
    "meta": {
      "name": "root"
    },
    "props": {
      "direction": "column"
    },
    "type": "ia.container.flex"
  }
}