diff --git a/README.md b/README.md
index 02413cbdb2..da612ac25a 100644
--- a/README.md
+++ b/README.md
@@ -125,7 +125,7 @@ Follow [the job submission tutorial](docs/user/job_submission.md) to learn more
### Client tool
-[OpenPAI VS Code Client](contrib/pai_vscode/VSCodeExt.md) is a friendly, GUI based client tool of OpenPAI, and it's highly recommended. It's an extension of Visual Studio Code. It can submit job, simulate jobs locally, manage multiple OpenPAI environments, and so on.
+[OpenPAI VS Code Client](https://github.com/Microsoft/openpaivscode/blob/master/VSCodeExt.md) is a friendly, GUI based client tool of OpenPAI, and it's highly recommended. It's an extension of Visual Studio Code. It can submit job, simulate jobs locally, manage multiple OpenPAI environments, and so on.
### Troubleshooting job failure
@@ -143,7 +143,7 @@ Refer to [here](docs/user/troubleshooting_job.md) for more information about tro
### Users
-* [Client tool](contrib/pai_vscode/VSCodeExt.md)
+* [Client tool](https://github.com/Microsoft/openpaivscode/blob/master/VSCodeExt.md)
* [Use Storage](docs/user/storage.md)
* [Job configuration](docs/job_tutorial.md)
* [RESTful API](docs/rest-server/API.md)
diff --git a/README_zh_CN.md b/README_zh_CN.md
index 35b9ef973a..16a8a87949 100644
--- a/README_zh_CN.md
+++ b/README_zh_CN.md
@@ -119,7 +119,7 @@ OpenPAI 的一般用法是提交 Job 请求,等到 Job 获得计算资源后
### 客户端
-[OpenPAI VS Code Client](contrib/pai_vscode/VSCodeExt_zh_CN.md) 是推荐的 OpenPAI 客户端工具,其基于图形界面,易于使用。 它是 Visual Studio Code 的扩展。 支持提交 Job,在本地模拟运行 Job,管理多个 OpenPAI 环境等等。
+[OpenPAI VS Code Client](https://github.com/microsoft/openpaivscode/blob/master/VSCodeExt_zh_CN.md) 是推荐的 OpenPAI 客户端工具,其基于图形界面,易于使用。 它是 Visual Studio Code 的扩展。 支持提交 Job,在本地模拟运行 Job,管理多个 OpenPAI 环境等等。
### 调研 Job 错误
@@ -137,7 +137,7 @@ Web 界面和 Job 日志有助于分析错误,OpenPAI 也支持通过 SSH 登
### 用户
-* [客户端](contrib/pai_vscode/VSCodeExt_zh_CN.md)
+* [客户端](https://github.com/microsoft/openpaivscode/blob/master/VSCodeExt_zh_CN.md)
* [使用存储](docs/zh_CN/user/storage.md)
* [Job 配置](docs/zh_CN/job_tutorial.md)
* [RESTful API](docs/zh_CN/rest-server/API.md)
@@ -176,4 +176,4 @@ Web 界面和 Job 日志有助于分析错误,OpenPAI 也支持通过 SSH 登
OpenPAI 的一个重要目标是支持学术界和工业界非常多样化的需求。 OpenPAI 是完全开放的:它采用了 MIT 许可证。 这使得 PAI 特别适合用来探索各种研究想法,例如[这些模块](./docs/zh_CN/research_education.md)。
-OpenPAI 采用开放的形式来合作。 由[微软研究院(MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/)和[微软互联网工程院](https://www.microsoft.com/en-us/ard/company/introduction.aspx) AI 平台团队联合设计开发。 很高兴能有北京大学、西安交通大学、浙江大学、中国科学技术大学等高校加入平台开发。 无论是来自从学术界还是工业界的贡献,都非常欢迎。
\ No newline at end of file
+OpenPAI 采用开放的形式来合作。 由[微软研究院(MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/)和[微软互联网工程院](https://www.microsoft.com/en-us/ard/company/introduction.aspx) AI 平台团队联合设计开发。 很高兴能有北京大学、西安交通大学、浙江大学、中国科学技术大学等高校加入平台开发。 无论是来自从学术界还是工业界的贡献,都非常欢迎。
diff --git a/RELEASE_NOTE.md b/RELEASE_NOTE.md
index 7515727e82..a3dad20d2b 100644
--- a/RELEASE_NOTE.md
+++ b/RELEASE_NOTE.md
@@ -7,7 +7,7 @@ Welcome to the July 2019 release of OpenPAI. There are a number of updates in th
- [New webportal job submission experience](./docs/user/job_submission.md) - Update submit job UI to version 2.
- [Python sdk of openpai is now ready!](https://github.com/microsoft/pai/tree/master/contrib/python-sdk) - You can config, submit and debug your job easily with python sdk.
- [New yarn schedular to improve resource efficiency](./docs/tools/dedicated_vc.md) - Admin can bind dedicated Virtual Cluster to 1 or more physical nodes.
-- [vscode extension now supports submitting v2 job](https://github.com/microsoft/pai/tree/master/contrib/pai_vscode).
+- [vscode extension now supports submitting v2 job](https://github.com/microsoft/openpaivscode/tree/master).
- [Provide team storage plugin to manage data shared by team](https://github.com/microsoft/pai/tree/master/contrib/storage_plugin).
- [How to upgrade to OpenPAI v-0.14.0?](./docs/upgrade/upgrade_to_v0.14.0.md)
diff --git a/RELEASE_NOTE_zh_CN.md b/RELEASE_NOTE_zh_CN.md
index a6d10f2174..a3dad20d2b 100644
--- a/RELEASE_NOTE_zh_CN.md
+++ b/RELEASE_NOTE_zh_CN.md
@@ -7,7 +7,7 @@ Welcome to the July 2019 release of OpenPAI. There are a number of updates in th
- [New webportal job submission experience](./docs/user/job_submission.md) - Update submit job UI to version 2.
- [Python sdk of openpai is now ready!](https://github.com/microsoft/pai/tree/master/contrib/python-sdk) - You can config, submit and debug your job easily with python sdk.
- [New yarn schedular to improve resource efficiency](./docs/tools/dedicated_vc.md) - Admin can bind dedicated Virtual Cluster to 1 or more physical nodes.
-- [vscode extension now supports submitting v2 job](https://github.com/microsoft/pai/tree/master/contrib/pai_vscode).
+- [vscode extension now supports submitting v2 job](https://github.com/microsoft/openpaivscode/tree/master).
- [Provide team storage plugin to manage data shared by team](https://github.com/microsoft/pai/tree/master/contrib/storage_plugin).
- [How to upgrade to OpenPAI v-0.14.0?](./docs/upgrade/upgrade_to_v0.14.0.md)
@@ -114,4 +114,4 @@ For more details about this release, please refer to [detailed release note](htt
- New UI for user management: Now the console for administrators to manage PAI users has got a new UI.
- Documentation: Significant changes on documents -- more comprehensive, more structured, and easier to follow.
-For more details about this release, please refer to [detailed release note](https://github.com/microsoft/pai/releases/tag/v0.6.1).
\ No newline at end of file
+For more details about this release, please refer to [detailed release note](https://github.com/microsoft/pai/releases/tag/v0.6.1).
diff --git a/contrib/pai_vscode/.gitattributes b/contrib/pai_vscode/.gitattributes
deleted file mode 100644
index f073758cb7..0000000000
--- a/contrib/pai_vscode/.gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-# Set default behavior to automatically normalize line endings.
-* text=auto
-*.ts text eol=lf
diff --git a/contrib/pai_vscode/.gitignore b/contrib/pai_vscode/.gitignore
deleted file mode 100644
index ec0e293215..0000000000
--- a/contrib/pai_vscode/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-out
-node_modules
-.vscode-test/
-*.vsix
-*.log
-!.vscode/
-.vscode/extensions.json
-.vscode/settings.json
diff --git a/contrib/pai_vscode/.vscode/launch.json b/contrib/pai_vscode/.vscode/launch.json
deleted file mode 100644
index c174db304c..0000000000
--- a/contrib/pai_vscode/.vscode/launch.json
+++ /dev/null
@@ -1,36 +0,0 @@
-// A launch configuration that compiles the extension and then opens it inside a new window
-// Use IntelliSense to learn about possible attributes.
-// Hover to view descriptions of existing attributes.
-// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-{
- "version": "0.2.0",
- "configurations": [
- {
- "name": "Extension",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": [
- "--extensionDevelopmentPath=${workspaceFolder}"
- ],
- "outFiles": [
- "${workspaceFolder}/out/**/*.js"
- ],
- "preLaunchTask": "npm: watch"
- },
- {
- "name": "Extension Tests",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": [
- "--extensionDevelopmentPath=${workspaceFolder}",
- "--extensionTestsPath=${workspaceFolder}/out/test"
- ],
- "outFiles": [
- "${workspaceFolder}/out/test/**/*.js"
- ],
- "preLaunchTask": "npm: watch"
- }
- ]
-}
diff --git a/contrib/pai_vscode/.vscode/tasks.json b/contrib/pai_vscode/.vscode/tasks.json
deleted file mode 100644
index 604e38f5ad..0000000000
--- a/contrib/pai_vscode/.vscode/tasks.json
+++ /dev/null
@@ -1,20 +0,0 @@
-// See https://go.microsoft.com/fwlink/?LinkId=733558
-// for the documentation about the tasks.json format
-{
- "version": "2.0.0",
- "tasks": [
- {
- "type": "npm",
- "script": "watch",
- "problemMatcher": "$tsc-watch",
- "isBackground": true,
- "presentation": {
- "reveal": "never"
- },
- "group": {
- "kind": "build",
- "isDefault": true
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/contrib/pai_vscode/.vscodeignore b/contrib/pai_vscode/.vscodeignore
deleted file mode 100644
index 8557178967..0000000000
--- a/contrib/pai_vscode/.vscodeignore
+++ /dev/null
@@ -1,9 +0,0 @@
-.vscode/**
-.vscode-test/**
-out/test/**
-out/**/*.map
-src/**
-.gitignore
-tsconfig.json
-vsc-extension-quickstart.md
-tslint.json
\ No newline at end of file
diff --git a/contrib/pai_vscode/CHANGELOG.md b/contrib/pai_vscode/CHANGELOG.md
deleted file mode 100644
index 509ac2cf91..0000000000
--- a/contrib/pai_vscode/CHANGELOG.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [0.1.0] - 2019-01
-
-### Added
-
-- Open job pages and dashboard pages in VS Code
-- Submit job to PAI cluster from VS Code
-- Open PAI's hdfs as a workspace folder
-
-## [0.2.0] - 2019-03
-
-### Added
-
-- Generate jsonc job config by default
-- Add a PAI view container (sidebar), includes
- - Job list view
- - Auto refresh enabled
- - HDFS explorer
- - You can choose where hdfs explorer will be shown (view container or workspace folder)
-
-## [0.2.1] - 2019-06
-
-### Added
-
-- Generate YAML job config file for Protocol V2
- - Submit YAML job file
- - Snippets and autocomplete for YAML job config
-
-## [0.2.2] - 2019-11
-
-### Added
-
-- Support AAD login to OpenPAI cluster
- - User can use access token instead of password in cluster config file.
-
-## [0.2.3] - 2019-12
-
-### Added
-
-- Add local simulation for YAML job config file
-- Add https in cluster config
- - User can use https connect to OpenPAI cluster
-
-## [0.3.0] - 2020-03
-
-### Added
-
-- Add storage explorer
- - User can use storage explorer to manage data in OpenPAI teamwise storage
- - User can add personal storage to storage explorer
-- Add auto upload feature to teamwise storage and personal storage
-- New job list auto refresh rule
- - Job list auto refresh will be trigger only when the `PAI JOB LIST` view is visible.
-- Add notification to website after AAD login success
diff --git a/contrib/pai_vscode/CHANGELOG_zh_CN.md b/contrib/pai_vscode/CHANGELOG_zh_CN.md
deleted file mode 100644
index d44e14dabc..0000000000
--- a/contrib/pai_vscode/CHANGELOG_zh_CN.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [0.1.0] - 2019-01
-
-### Added
-
-- Open job pages and dashboard pages in VS Code
-- Submit job to PAI cluster from VS Code
-- Open PAI's hdfs as a workspace folder
-
-## [0.2.0] - 2019-03
-
-### Added
-
-- Generate jsonc job config by default
-- Add a PAI view container (sidebar), includes
- - Job list view
- - Auto refresh enabled
- - HDFS explorer
- - You can choose where hdfs explorer will be shown (view container or workspace folder)
-
-## [0.2.1] - 2019-06
-
-### Added
-
-- Generate YAML job config file for Protocol V2
- - Submit YAML job file
- - Snippets and autocomplete for YAML job config
-
-## [0.2.2] - 2019-11
-
-### Added
-
-- Support AAD login to OpenPAI cluster
- - User can use access token instead of password in cluster config file.
-
-## [0.3.0] - 2020-03
-
-### Added
-
-- Add storage explorer
- - User can use storage explorer to manage data in OpenPAI teamwise storage
- - User can add personal storage to storage explorer
-- Add auto upload feature to teamwise storage and personal storage
-- New job list auto refresh rule
- - Job list auto refresh will be trigger only when the `PAI JOB LIST` view is visible.
-- Add notification to website after AAD login success
diff --git a/contrib/pai_vscode/LICENSE b/contrib/pai_vscode/LICENSE
deleted file mode 100644
index 21071075c2..0000000000
--- a/contrib/pai_vscode/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation. All rights reserved.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/contrib/pai_vscode/README.md b/contrib/pai_vscode/README.md
deleted file mode 100644
index be9dca089e..0000000000
--- a/contrib/pai_vscode/README.md
+++ /dev/null
@@ -1,206 +0,0 @@
-# OpenPAI VS Code Client
-
-OpenPAI VS Code Client is an extension to connect OpenPAI clusters, submit AI jobs, simulate jobs locally, manage files, and so on.
-
-- [OpenPAI VS Code Client](#openpai-vs-code-client)
- - [Connect to an OpenPAI cluster](#connect-to-an-openpai-cluster)
- - [Basic login](#basic-login)
- - [AAD login](#aad-login)
- - [Submit job](#submit-job)
- - [Local simulation](#local-simulation)
- - [Prerequisites](#prerequisites)
- - [Steps](#steps)
- - [Limitations](#limitations)
- - [Source code auto upload](#source-code-auto-upload)
- - [Reference](#reference)
- - [GUI](#gui)
- - [Command Palette](#command-palette)
- - [PAI Cluster Explorer](#pai-cluster-explorer)
- - [Settings](#settings)
- - [Issue and suggestions](#issue-and-suggestions)
- - [Contribution](#contribution)
- - [License](#license)
-
-## Connect to an OpenPAI cluster
-
-Before using OpenPAI VS Code Client, follow below steps connecting to an OpenPAI cluster.
-
-### Basic login
-
-Notice, the version of OpenPAI cluster must equal or greater than 0.8.0, and the `authn_type` of the cluster should be `basic`.
-
-1. Use shortcut key Ctrl+Shift+P to open command palette.
-2. Input and look for *PAI: Add PAI Cluster* as below.
-
- 
-
-3. Press Enter, and input the host of an OpenPAI cluster. It can be domain name or IP Address. After that, press Enter again.
-
- 
-
-4. A configuration file is opened, and username and password fields are needed at least. Once it completes, click *Finish* button at right bottom corner. Notice, it won't be effect, if you save and close the file directly.
-
- 
-
-If there are multiple OpenPAI clusters, you can follow above steps again to connect with them.
-
-### AAD login
-
-Notice, the version of OpenPAI cluster must equal or greater than 0.14.0, and the `authn_type` of the cluster should be `OIDC`.
-
-1. Use shortcut key Ctrl+Shift+P to open command palette.
-2. Input and look for *PAI: Add PAI Cluster* as below.
-
- 
-
-3. Press Enter, and input the host of an OpenPAI cluster. It can be domain name or IP Address. After that, press Enter again.
-
- 
-
-4. If the `authn_type` of the cluster is `OIDC`, a webside will be open and ask you to login, after that a configuration file is opened, and if your login was successful the username and token fields are auto filled, you can change it if needed. Once it completes, click *Finish* button at right bottom corner. Notice, it won't be effect, if you save and close the file directly.
-
- 
-
-If there are multiple OpenPAI clusters, you can follow above steps again to connect with them.
-
-## Submit job
-
-There is a tutorial for OpenPAI job submission, please refer to [Submit job to OpenPAI](documentation/submit_job.md).
-After added a cluster configuration, you can find the cluster in *PAI CLUSTER EXPLORER* pane as below.
-
-
-
-Submit V2 job (For OpenPAI v0.13.0 and above):
-
-You can create a job v2 configuration and submit to OpenPAI as below steps.
-
-1. Create job config file:
- 1. Double click `Create Job Config...` in OpenPAI cluster Explorer, and then specify file name and location to create a job configuration file (Make sure the value of `protocol_version` property in cluster configuration is `'2'`).
- 2. Right click python or cntk file in VSCode Explorer and select `Create PAI Job Config V2`, and then specify file name and location to create a job configuration file.
-2. Update job configuration as needed. If you are not familiar with this configuration file, learn from [here](https://github.com/microsoft/pai/blob/master/docs/marketplace-and-submit-job-v2/marketplace-and-submit-job-v2.md#introduction-to-yaml-file).
-3. Right click on the created job v2 configuration file, then click on `Submit Job to PAI Cluster`. The client will upload files to OpenPAI and create a job. Once it's done, there is a notification at right bottom corner, you can click to open the job detail page.
-
- If there are multiple OpenPAI clusters, you need to choose one.
-
- This animation shows above steps.
- 
-
-Submit V1 Job (deprecating, only for OpenPAI version under 0.13.0):
-
-You can create a job configuration and submit to OpenPAI as below steps.
-
-1. Create job config file:
- 1. Double click `Create Job Config...` in OpenPAI cluster Explorer, and then specify file name and location to create a job configuration file (Make sure the value of `protocol_version` property in cluster configuration is `'1'`).
- 2. Right click python or cntk file in VSCode Explorer and select `Create PAI Job Config V1`, and then specify file name and location to create a job configuration file.
-2. Update job configuration as needed. If you are not familiar with this configuration file, learn from [here](https://github.com/Microsoft/pai/blob/master/docs/user/training.md#learn-hello-world-job).
-3. Right click on the created job configuration file, then click on `Submit Job to PAI Cluster`. The client will upload files to OpenPAI and create a job. Once it's done, there is a notification at right bottom corner, you can click to open the job detail page.
-
- If there are multiple OpenPAI clusters, you need to choose one.
-
- This animation shows above steps.
- 
-
-## Local simulation
-
-As it needs sometime to wait job starting in OpenPAI cluster, local simulation can help identifying and debugging most code, environment and configuration issues quickly.
-
-### Prerequisites
-
-[Docker](https://docs.docker.com/install/) MUST be installed to use local simulation.
-
-### Steps
-
-1. As submit a job, you can right click a configuration file to find local simulation.
-2. Click *Simulate PAI Job Running*, after a while below notification shows.
-
- 
-
-3. you can click on *Simulate first task in VS Code terminal* to simulate directly, or *Reveal in Explorer* to view created docker files and start simulation manually.
-
-This animation shows above steps.
-
-
-### Limitations
-
-As local simulation is a close but still different environment with OpenPAI cluster, there are some issues cannot be found by simulation. Some examples,
-
-- The job may need much more memory or distributed environments. It cannot be simulated locally.
-- The job may need GPU, but local computer may not have one. It may need code logic to handle this situation. It also needs a different docker image if you are using TensorFlow. As TensorFlow has different package for GPU and non-GPU runtime.
-- The job may run much more time locally. In most case, the computing power of local computer is much lower than servers in the OpenPAI cluster. If you need to simulate a job end-to-end, it may need to reduce iterations to get result faster.
-- Local machine may not be able to access some storage. The OpenPAI cluster may be deployed in a private environment, so that local computer may not able to access resource of cluster.
-- Local simulated can't support OpenPAI cluster runtime plugin (e.g. SSH plugin, teamwise storage plugin, tensorboard plugin), user should install them manully.
-
-## Source code auto upload
-
-Please refer to [Auto Upload](https://raw.githubusercontent.com/Microsoft/pai/master/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md#Auto-Upload).
-
-## Reference
-
-### GUI
-
-The client has two GUI parts. First is the *PAI CLUSTER EXPLORER* in explorer and used in above introduction. Second can be opened by the icon in activity bar.
-
-
-
-There are three parts in the side bar.
-
-- Storage Explorer (For PAI > 0.14.0)
-
- Please refer to [Storage Explorer](https://raw.githubusercontent.com/Microsoft/pai/master/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md#Storage-Explorer).
-
-- HDFS Explorer (For PAI <= 0.14.0)
-
- You can view, upload and download folder and files of the OpenPAI cluster storage.
-
-- Job List
-
- You can view jobs in OpenPAI cluster. The lists refresh periodically, and the icon shows the status of each job. You can open a job in browser with double clicking it.
-
-
-
-### Command Palette
-
-| Name | Description |
-| ------------------------------- | ----------------------------------------- |
-| PAI: Add PAI Cluster | Add a new OpenPAI cluster |
-| PAI: Open Website | View OpenPAI cluster in browser |
-| PAI: Submit Job to PAI Cluster | Submit an OpenPAI job |
-| PAI: Create PAI Job Config File | Create an OpenPAI configuration file |
-| PAI: Simulate PAI Job Running | Generate Docker file for local simulation |
-
-### PAI Cluster Explorer
-
-| Name | Description |
-| ----------------------- | --------------------------------------------- |
-| Open Web Portal... | Browse to OpenPAI's web portal |
-| List Jobs... | Open PAI's job list page in VS Code |
-| Create Job Config... | Create an OpenPAI configuration file |
-| Submit Job... | Submit an OpenPAI job |
-| Simulate Job Running... | Generate Docker file for local simulation |
-| Edit Configuration... | Edit OpenPAI cluster configuration |
-| Open HDFS... | Open HDFS storage explorer of OpenPAI cluster |
-
-### Settings
-
-| ID | Description |
-| -------------------------------- | ------------------------------------------------------- |
-| pai.job.upload.enabled | Whether will upload files to codeDir of configuration |
-| pai.job.upload.exclude | Excluded files and folders for uploading |
-| pai.job.upload.include | Included files and folders for uploading |
-| pai.job.generateJobName.enabled | Whether add a random suffix to job name when submitting |
-| pai.job.jobList.recentJobsLength | The number in *Recent Submitted Jobs from VS Code* |
-| pai.job.jobList.allJobsPageSize | The page size of the *All Jobs* list |
-| pai.job.jobList.refreshInterval | The refresh interval of job list (in seconds) |
-| pai.hdfs.location | Where HDFS storage will be shown |
-
-## Issue and suggestions
-
-Submit at [GitHub](https://github.com/Microsoft/pai/issues)
-
-## Contribution
-
-https://github.com/Microsoft/pai#how-to-contribute
-
-## License
-
-MIT
diff --git a/contrib/pai_vscode/README_zh_CN.md b/contrib/pai_vscode/README_zh_CN.md
deleted file mode 100644
index 8999816f63..0000000000
--- a/contrib/pai_vscode/README_zh_CN.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# OpenPAI VS Code Client
-
-OpenPAI VS Code Client 是一个 Visual Studio Code 的扩展组件,可以连接 OpenPAI 集群,提交 Job,在本地模拟运行 Job,管理文件等等。
-
-- [OpenPAI VS Code Client](#openpai-vs-code-client)
- - [连接到 OpenPAI 集群](#%e8%bf%9e%e6%8e%a5%e5%88%b0-openpai-%e9%9b%86%e7%be%a4)
- - [提交 Job](#%e6%8f%90%e4%ba%a4-job)
- - [本机模拟](#%e6%9c%ac%e6%9c%ba%e6%a8%a1%e6%8b%9f)
- - [先决条件](#%e5%85%88%e5%86%b3%e6%9d%a1%e4%bb%b6)
- - [步骤](#%e6%ad%a5%e9%aa%a4)
- - [局限性](#%e5%b1%80%e9%99%90%e6%80%a7)
- - [任务代码自动上传](#%e4%bb%bb%e5%8a%a1%e4%bb%a3%e7%a0%81%e8%87%aa%e5%8a%a8%e4%b8%8a%e4%bc%a0)
- - [参考](#%e5%8f%82%e8%80%83)
- - [GUI](#gui)
- - [命令面板](#%e5%91%bd%e4%bb%a4%e9%9d%a2%e6%9d%bf)
- - [PAI 集群浏览器](#pai-%e9%9b%86%e7%be%a4%e6%b5%8f%e8%a7%88%e5%99%a8)
- - [设置](#%e8%ae%be%e7%bd%ae)
- - [问题和建议](#%e9%97%ae%e9%a2%98%e5%92%8c%e5%bb%ba%e8%ae%ae)
- - [贡献](#%e8%b4%a1%e7%8c%ae)
- - [许可证](#%e8%ae%b8%e5%8f%af%e8%af%81)
-
-## 连接到 OpenPAI 集群
-
-使用 OpenPAI VS Code Client 之前,按照以下步骤连接到 OpenPAI 集群。
-
-注意, OpenPAI 集群的版本必须大于或等于 0.8.0。
-
-1. 使用快捷键 Ctrl+Shift+P 打开命令面板。
-2. 如下输入并查找 *PAI: 添加 PAI 集群*。
-
- 
-
-
-3. 按下 Enter,并输入 OpenPAI 集群的地址。 可以是域名或者 IP 地址。 然后,再次按下 Enter。
-
- 
-
-
-4. 配置文件将会被打开,至少需要填入 username 和 password 字段。 完成后,点击右下角的 *完成* 按钮。 注意,如果直接保存并关闭文件,则无法生效。
-
- 
-
-
-如果有多个 OpenPAI 集群,可以多次按照上述步骤进行。
-
-## 提交 Job
-
-添加完集群配置后,可以在*PAI 集群浏览器* 面板找到该集群。
-
-
-
-提交 v2 Job (OpenPAI >= v0.13.0):
-
-可通过以下步骤创建 v2 Job 配置,并提交到 OpenPAI。
-
-1. 创建 Job 配置文件:
- 1. 在 `PAI 集群浏览器` 中双击 `创建任务配置文件...`, 并指定文件名和路径来创建 Job 配置文件(请确保集群配置中的 `protocol_version` 属性的值为 `'2'`)。
- 2. 在 `VSCode 资源管理器` 中右击 python 或 cntk 文件,并选取 `创建 PAI 任务配置文件 V2`, 并指定文件名和路径来创建 Job 配置文件。
-2. 根据需要更新 Job 配置。 如果不熟悉配置文件,可参考[这里](https://github.com/microsoft/pai/blob/master/docs/zh_CN/marketplace-and-submit-job-v2/marketplace-and-submit-job-v2.md#introduction-to-yaml-file)。
-3. 右击创建的 Job v2 配置文件,然后点击 `在 PAI 集群上提交任务`。 客户端会将文件上传到 OpenPAI 并创建 Job。 完成后,在右下角会有通知,可点击打开 Job 详情页面。
-
- 如果有多个 OpenPAI 集群,需要选择其中一个。
-
- 此动画显示了上述步骤。
- 
-
-提交 v1 Job (deprecating, OpenPAI < 0.13.0):
-
-可通过以下步骤创建 Job 配置,并提交到 OpenPAI。
-
-1. 创建 Job 配置文件:
- 1. 在 `PAI 集群浏览器` 中双击 `创建任务配置文件...`, 并指定文件名和路径来创建 Job 配置文件(请确保集群配置中的 `protocol_version` 属性的值为 `'1'`)。
- 2. 在 `VSCode 资源管理器` 中右击 python 或 cntk 文件,并选取 `创建 PAI 任务配置文件 V1`, 并指定文件名和路径来创建 Job 配置文件。
-2. 根据需要更新 Job 配置。 如果不熟悉配置文件,可参考[这里](https://github.com/Microsoft/pai/blob/master/docs/zh_CN/user/training.md)。
-3. 右击创建的 Job 配置文件,然后点击 `Submit Job to PAI Cluster`。 客户端会将文件上传到 OpenPAI 并创建 Job。 完成后,在右下角会有通知,可点击打开 Job 详情页面。
-
- 如果有多个 OpenPAI 集群,需要选择其中一个。
-
- 此动画显示了上述步骤。
- 
-
-
-## 本机模拟
-
-在 OpenPAI 集群中运行 Job 需要额外花费一些时间,因此在本机模拟可以更快的找到代码,以及环境和配置的问题。
-
-### 先决条件
-
-必须安装 [Docker](https://docs.docker.com/install/) 才能使用本机模拟。
-
-### 步骤
-
-1. 与提交 Job 一样,可右击配置文件来找到本机模拟功能。
-2. 点击 *Simulate PAI Job Running*,过一小会儿,就会看到如下的通知。
-
- 
-
-
-3. 可点击 *Simulate first task in VS Code terminal* 直接模拟运行,或点击 *Reveal in Explorer* 来查看创建的 Docker 文件,并手动运行模拟。
-
-此动画显示了上述步骤。 
-
-### 局限性
-
-本机模拟与在 OpenPAI 集群中运行相近,但仍有些区别,因此有些问题无法通过模拟来发现。 比如:
-
-- Job 可能需要大量的内存或分布式的环境。 无法在本机进行模拟。
-- Job 可能需要 GPU,但本机可能没有。 同时,可能需要更多的代码逻辑来处理这种情况。 如果使用 TensorFlow,可能还需要不同的 Docker 映像。 这是因为 TensorFlow 在 GPU 和非 GPU 场景下需要不同的运行包。
-- Job 可能会在本地运行很长的时间。 在大多数情况下,本机的算力都远低于 OpenPAI 集群中的服务器。 如果需要端到端的模拟 Job,则需要减少迭代次数来更快的获得结果。
-- 本机可能无法访问一些存储。 OpenPAI 集群有可能部署在私有环境中,因此本机可能无法访问一些集群的存储。
-
-## 任务代码自动上传
-
-请参考 [Auto Upload](https://raw.githubusercontent.com/Microsoft/pai/master/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md#Auto-Upload).
-
-## 参考
-
-### GUI
-
-客户端有两部分用户界面。 首先是资源管理器中的 *PAI CLUSTER EXPLORER*,在上述章节已介绍过。 可通过活动栏中图标打开第二部分。
-
-
-
-打开后可看到两个部分。
-
-- 存储浏览器 (PAI > 0.14.0)
-
- 请参考 [Storage Explorer](https://raw.githubusercontent.com/Microsoft/pai/master/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md#Storage-Explorer).
-
-- HDFS 浏览器 (PAI <= 0.14.0)
-
- 可查看、上传或下载 OpenPAI 集群存储中的文件。
-
-- PAI 任务列表
-
- 可查看 OpenPAI 集群中的 Job。 列表会定期刷新,前面的图标显示了 Job 的状态。 可双击 Job 在浏览器中查看。
-
-
-
-### 命令面板
-
-| 名称 | 说明 |
-| ------------------------------- | ------------------- |
-| PAI: Add PAI Cluster | 添加新的 OpenPAI 集群 |
-| PAI: Open Website | 在浏览器中查看 OpenPAI 集群 |
-| PAI: Submit Job to PAI Cluster | 提交 OpenPAI Job |
-| PAI: Create PAI Job Config File | 创建 OpenPAI 配置文件 |
-| PAI: Simulate PAI Job Running | 生成 Docker 文件并进行本机模拟 |
-
-### PAI 集群浏览器
-
-| 名称 | 说明 |
-| ----------------------- | ------------------------- |
-| Open Web Portal... | 浏览 OpenPAI 的门户网站 |
-| List Jobs... | 列出 Job |
-| Create Job Config... | 创建 OpenPAI 配置文件 |
-| Submit Job... | 提交 OpenPAI Job |
-| Simulate Job Running... | 生成 Docker 文件并进行本机模拟 |
-| Edit Configuration... | 编辑 OpenPAI 集群配置 |
-| Open HDFS... | 打开 OpenPAI 集群的 HDFS 存储管理器 |
-
-### 设置
-
-| 标识 | 说明 |
-| -------------------------------- | ------------------------------------------ |
-| pai.job.upload.enabled | 是否将文件上载到配置的 codeDir |
-| pai.job.upload.exclude | 上载时排除的文件和文件夹 |
-| pai.job.upload.include | 上载时包含的文件和文件夹 |
-| pai.job.generateJobName.enabled | 是否在提交时为 Job 名称添加随机后缀 |
-| pai.job.jobList.recentJobsLength | *Recent Submitted Jobs from VS Code* 显示的数量 |
-| pai.job.jobList.allJobsPageSize | *All Jobs* 的页面条数 |
-| pai.job.jobList.refreshInterval | Job 列表的刷新间隔(秒) |
-| pai.hdfs.location | 显示 HDFS 存储的位置 |
-
-## 问题和建议
-
-提交到 [GitHub](https://github.com/Microsoft/pai/issues)
-
-## 贡献
-
-https://github.com/microsoft/pai/blob/master/README_zh_CN.md#参与贡献
-
-## 许可证
-
-MIT
diff --git a/contrib/pai_vscode/VSCodeExt.md b/contrib/pai_vscode/VSCodeExt.md
deleted file mode 100644
index 046beb366d..0000000000
--- a/contrib/pai_vscode/VSCodeExt.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# OpenPAI VS Code Client
-
-OpenPAI VS Code Client is the dedicated client tool for OpenPAI. It's an extension of [Visual Studio Code](https://code.visualstudio.com/). Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux.
-
-With OpenPAI VS Code Client, you can submit jobs, simulate jobs locally, manage files, and etc. OpenPAI VS Code Client supports Windows, macOS, and Linux like Visual Studio Code.
-
-## Installation
-
-1. Install and launch [Visual Studio Code](https://code.visualstudio.com). Click green button to download and install Visual Studio Code if it's not installed yet.
-
- 
-
-1. Click the *Extensions* icon on left side, after Visual Studio Code launched. And input *openpai* to search OpenPAI VS Code Client.
-
- 
-
-1. Click the **Install** button, and wait installation completes.
-
-## How-to
-
-Learn how to [use OpenPAI VS Code Client](./README.md).
diff --git a/contrib/pai_vscode/VSCodeExt_zh_CN.md b/contrib/pai_vscode/VSCodeExt_zh_CN.md
deleted file mode 100644
index 64cda69156..0000000000
--- a/contrib/pai_vscode/VSCodeExt_zh_CN.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# OpenPAI VS Code 客户端
-
-OpenPAI VS Code Client 是专用于 OpenPAI 的客户端工具。 它是 [Visual Studio Code](https://code.visualstudio.com/) 的扩展组件。 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在主流桌面平台上运行,支持 Windows,macOS 和 Linux。
-
-使用 OpenPAI VS Code Client,可以提交作业,在本地模拟作业,管理文件等。 OpenPAI VS Code Client 与 Visual Studio Code 一样,支持 Windows,macOS 和 Linux。
-
-## 安装
-
-1. 安装并运行 [Visual Studio Code](https://code.visualstudio.com)。 如果未安装,单击绿色按钮以下载并安装 Visual Studio Code。
-
- 
-
-2. 启动 Visual Studio Code 后,单击左侧的 *Extensions* 图标。 并输入 *openpai* 来搜索 OpenPAI VS Code Client。
-
- 
-
-3. 点击 **Install** 按钮,并等待完成安装。
-
-## 入门
-
-了解如何[使用 OpenPAI VS Code Client](./README.md)。
\ No newline at end of file
diff --git a/contrib/pai_vscode/assets/activity_bar.png b/contrib/pai_vscode/assets/activity_bar.png
deleted file mode 100644
index b9f7f1cd68..0000000000
Binary files a/contrib/pai_vscode/assets/activity_bar.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/add-cluster-finish.png b/contrib/pai_vscode/assets/add-cluster-finish.png
deleted file mode 100644
index 8f01948440..0000000000
Binary files a/contrib/pai_vscode/assets/add-cluster-finish.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/add_aad_cluster.gif b/contrib/pai_vscode/assets/add_aad_cluster.gif
deleted file mode 100644
index 7cec7b6048..0000000000
Binary files a/contrib/pai_vscode/assets/add_aad_cluster.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/add_cluster.png b/contrib/pai_vscode/assets/add_cluster.png
deleted file mode 100644
index cc946e5065..0000000000
Binary files a/contrib/pai_vscode/assets/add_cluster.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/add_cluster_host.png b/contrib/pai_vscode/assets/add_cluster_host.png
deleted file mode 100644
index 144434ad8d..0000000000
Binary files a/contrib/pai_vscode/assets/add_cluster_host.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/add_personal_storage.gif b/contrib/pai_vscode/assets/add_personal_storage.gif
deleted file mode 100644
index 7aa6955ed5..0000000000
Binary files a/contrib/pai_vscode/assets/add_personal_storage.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/auto_completion_code_snippets.gif b/contrib/pai_vscode/assets/auto_completion_code_snippets.gif
deleted file mode 100644
index 4dc0011057..0000000000
Binary files a/contrib/pai_vscode/assets/auto_completion_code_snippets.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/auto_completion_property.gif b/contrib/pai_vscode/assets/auto_completion_property.gif
deleted file mode 100644
index f2d31836ee..0000000000
Binary files a/contrib/pai_vscode/assets/auto_completion_property.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/auto_completion_runtime_plugin_right_click.gif b/contrib/pai_vscode/assets/auto_completion_runtime_plugin_right_click.gif
deleted file mode 100644
index 5943d3519d..0000000000
Binary files a/contrib/pai_vscode/assets/auto_completion_runtime_plugin_right_click.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/auto_completion_runtime_plugin_snippet.gif b/contrib/pai_vscode/assets/auto_completion_runtime_plugin_snippet.gif
deleted file mode 100644
index 1c03305fa8..0000000000
Binary files a/contrib/pai_vscode/assets/auto_completion_runtime_plugin_snippet.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/auto_completion_snippet_right_click.gif b/contrib/pai_vscode/assets/auto_completion_snippet_right_click.gif
deleted file mode 100644
index 28ae732203..0000000000
Binary files a/contrib/pai_vscode/assets/auto_completion_snippet_right_click.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/connect.gif b/contrib/pai_vscode/assets/connect.gif
deleted file mode 100644
index c99eb0fa3a..0000000000
Binary files a/contrib/pai_vscode/assets/connect.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/create_job.gif b/contrib/pai_vscode/assets/create_job.gif
deleted file mode 100644
index 0419165fb9..0000000000
Binary files a/contrib/pai_vscode/assets/create_job.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/create_job_config_command.gif b/contrib/pai_vscode/assets/create_job_config_command.gif
deleted file mode 100644
index 6b9eb7b0dd..0000000000
Binary files a/contrib/pai_vscode/assets/create_job_config_command.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/create_job_config_double_click.gif b/contrib/pai_vscode/assets/create_job_config_double_click.gif
deleted file mode 100644
index 2b236ae1b2..0000000000
Binary files a/contrib/pai_vscode/assets/create_job_config_double_click.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/create_job_config_right_click.gif b/contrib/pai_vscode/assets/create_job_config_right_click.gif
deleted file mode 100644
index c6613993f4..0000000000
Binary files a/contrib/pai_vscode/assets/create_job_config_right_click.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/download_vscode.png b/contrib/pai_vscode/assets/download_vscode.png
deleted file mode 100644
index ad1e788ce7..0000000000
Binary files a/contrib/pai_vscode/assets/download_vscode.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/ext-install-1.png b/contrib/pai_vscode/assets/ext-install-1.png
deleted file mode 100644
index 0e0949dfe2..0000000000
Binary files a/contrib/pai_vscode/assets/ext-install-1.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/install.png b/contrib/pai_vscode/assets/install.png
deleted file mode 100644
index 66871eabdd..0000000000
Binary files a/contrib/pai_vscode/assets/install.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/job-list.png b/contrib/pai_vscode/assets/job-list.png
deleted file mode 100644
index 19c7d43c9c..0000000000
Binary files a/contrib/pai_vscode/assets/job-list.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/pai_cluster_explorer.png b/contrib/pai_vscode/assets/pai_cluster_explorer.png
deleted file mode 100644
index 486e66f1e6..0000000000
Binary files a/contrib/pai_vscode/assets/pai_cluster_explorer.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/pai_logo.png b/contrib/pai_vscode/assets/pai_logo.png
deleted file mode 100644
index a8763cb33d..0000000000
Binary files a/contrib/pai_vscode/assets/pai_logo.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/simulate-job.gif b/contrib/pai_vscode/assets/simulate-job.gif
deleted file mode 100644
index 665d619ee9..0000000000
Binary files a/contrib/pai_vscode/assets/simulate-job.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/simulate_running.png b/contrib/pai_vscode/assets/simulate_running.png
deleted file mode 100644
index 4b5088d410..0000000000
Binary files a/contrib/pai_vscode/assets/simulate_running.png and /dev/null differ
diff --git a/contrib/pai_vscode/assets/source_code_auto_upload.gif b/contrib/pai_vscode/assets/source_code_auto_upload.gif
deleted file mode 100644
index 2521ad94e7..0000000000
Binary files a/contrib/pai_vscode/assets/source_code_auto_upload.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage.gif b/contrib/pai_vscode/assets/storage.gif
deleted file mode 100644
index 54e49c0bcf..0000000000
Binary files a/contrib/pai_vscode/assets/storage.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_active_bar.gif b/contrib/pai_vscode/assets/storage_active_bar.gif
deleted file mode 100644
index 2f9692baa1..0000000000
Binary files a/contrib/pai_vscode/assets/storage_active_bar.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_delete_file.gif b/contrib/pai_vscode/assets/storage_delete_file.gif
deleted file mode 100644
index 6f7450400a..0000000000
Binary files a/contrib/pai_vscode/assets/storage_delete_file.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_download_file.gif b/contrib/pai_vscode/assets/storage_download_file.gif
deleted file mode 100644
index 69dda7670c..0000000000
Binary files a/contrib/pai_vscode/assets/storage_download_file.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_new_folder.gif b/contrib/pai_vscode/assets/storage_new_folder.gif
deleted file mode 100644
index 15b9bd1baa..0000000000
Binary files a/contrib/pai_vscode/assets/storage_new_folder.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_remote_edit.gif b/contrib/pai_vscode/assets/storage_remote_edit.gif
deleted file mode 100644
index 7bbe8e6060..0000000000
Binary files a/contrib/pai_vscode/assets/storage_remote_edit.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_setup_auto_upload.gif b/contrib/pai_vscode/assets/storage_setup_auto_upload.gif
deleted file mode 100644
index 5dc1e2d8ee..0000000000
Binary files a/contrib/pai_vscode/assets/storage_setup_auto_upload.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/storage_upload_file.gif b/contrib/pai_vscode/assets/storage_upload_file.gif
deleted file mode 100644
index abf97af256..0000000000
Binary files a/contrib/pai_vscode/assets/storage_upload_file.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/submit-job-v2.gif b/contrib/pai_vscode/assets/submit-job-v2.gif
deleted file mode 100644
index 53e4f50068..0000000000
Binary files a/contrib/pai_vscode/assets/submit-job-v2.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/submit-job.gif b/contrib/pai_vscode/assets/submit-job.gif
deleted file mode 100644
index c9a9169f1e..0000000000
Binary files a/contrib/pai_vscode/assets/submit-job.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/submit.gif b/contrib/pai_vscode/assets/submit.gif
deleted file mode 100644
index 16e29ca06d..0000000000
Binary files a/contrib/pai_vscode/assets/submit.gif and /dev/null differ
diff --git a/contrib/pai_vscode/assets/yaml_validation_incorrect_type.gif b/contrib/pai_vscode/assets/yaml_validation_incorrect_type.gif
deleted file mode 100644
index 3a5e480a7d..0000000000
Binary files a/contrib/pai_vscode/assets/yaml_validation_incorrect_type.gif and /dev/null differ
diff --git a/contrib/pai_vscode/documentation/edit_yaml_job_config.md b/contrib/pai_vscode/documentation/edit_yaml_job_config.md
deleted file mode 100644
index 455bb8b0dd..0000000000
--- a/contrib/pai_vscode/documentation/edit_yaml_job_config.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# OpenPAI job config file edit features
-
-In OpenPAI, all jobs are represented by YAML, a markup language.
-Base on VSCode editor [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense) and [YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml), OpenPAI VS Code Client support some features to improve user experience for editing job config file.
-For more details about the protocol of OpenPAI job, please refer to [PAI Job Protocol](https://github.com/microsoft/openpai-protocol/blob/master/schemas/v2/schema.yaml).
-
-- [OpenPAI job config file edit features](#openpai-job-config-file-edit-features)
- - [Create job config file](#create-job-config-file)
- - [Create in PAI CLUSTER EXPLORER](#create-in-pai-cluster-explorer)
- - [Create in VSCode EXPLORER](#create-in-vscode-explorer)
- - [Create in command palette](#create-in-command-palette)
- - [YAML validation](#yaml-validation)
- - [Whitch YAML file is a PAI job config](#whitch-yaml-file-is-a-pai-job-config)
- - [Auto completion](#auto-completion)
- - [1. Property auto complete](#1-property-auto-complete)
- - [2. Code snippets](#2-code-snippets)
- - [Trigger by typing](#trigger-by-typing)
- - [Right click to insert snippet](#right-click-to-insert-snippet)
- - [Insert OpenPAI Runtime Plugin](#insert-openpai-runtime-plugin)
- - [Insert by code snippet](#insert-by-code-snippet)
- - [Right click to insert](#right-click-to-insert)
- - [Reference](#reference)
-
-## Create job config file
-
-User can create a simple job config YAML file by below ways:
-
-### Create in PAI CLUSTER EXPLORER
-
- Double click `Create Job Config...` in `PAI CLUSTER EXPLORER`
-
- 
-
-### Create in VSCode EXPLORER
-
- Right click an existing python/cntk file in vscode EXPLORER and select `Create PAI Job Config V2`
-
- 
-
-### Create in command palette
-
- Press `Ctrl + Shift + P` or `View -> Command Palette...` and enter `PAI: Create PAI Job Config`
-
- 
-
-## YAML validation
-
-Use [PAI Job Protocol](https://github.com/microsoft/openpai-protocol/blob/master/schemas/v2/schema.yaml) to do the validation for job config file.
-
-### Whitch YAML file is a PAI job config
-
-There's two way to notice the client the YAML file is a PAI job config:
-
-1. File name ends with `.pai.yaml`
-2. Contains `protocolVersion: 2` in the YAML root section
-
-The validation will detect errors during your editing, such as:
-
-- Missing property
-- Incorrect type
-- Duplicate key
-
-
-
-## Auto completion
-
-To improve user experience in editing job config file, we provide some code auto completion and generation features:
-
-### 1. Property auto complete
-
-Base on VSCode editor [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense) and [YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml), user can get suggestions during editing job config.
-
-
-
-### 2. Code snippets
-
-We provide several code snippets for VSCode YAML editor, user can use it to form their job config easily.
-It could be trigger by typing or right click in the editor and select `OpenPAI: Insert job config`
-
-#### Trigger by typing
-
-
-
-#### Right click to insert snippet
-
-
-
-## Insert OpenPAI Runtime Plugin
-
-OpenPAI support some runtime plugins, such as SSH plugin, Storage plugin and Tensorboard plugin, user can config it in their job and setup the service.
-Here is an example of runtime plugin config:
-
-```yaml
-extras:
- com.microsoft.pai.runtimeplugin:
- - plugin: ssh
- parameters:
- jobssh: true
- - plugin: teamwise_storage
- parameters:
- storageConfigNames:
- - STORAGE_AZUREBLOB
- - plugin: tensorboard
- parameters:
- port: 11449
- logdir:
- path: /mnt/tensorboard
-```
-
-We provide several ways to help user insert the plugin config in YAML file.
-
-### Insert by code snippet
-
-The snippet `OpenPAI Runtime Plugin` will include `"com.microsoft.pai.runtimeplugin:"` line, and will ask user to select the first plugin type and generate it.
-Typing `"- plugin:"` will trigger `OpenPAI: Insert a runtime plugin config`, it will help user to add other plugins.
-
-
-
-### Right click to insert
-
-Right click the editor and select `OpenPAI: Insert job config`, and select `OpenPAI Runtime Plugin` or `OpenPAI Runtime Plugin Item` will help user generate their plugin config and insert it.
-
-
-
-## Reference
-
-[PAI Job Protocol](https://github.com/microsoft/openpai-protocol/blob/master/schemas/v2/schema.yaml)
-[Submit Jobs on OpenPAI](https://github.com/microsoft/pai/blob/master/docs/user/job_submission.md#job-workflow)
-[Troubleshoot jobs](https://github.com/microsoft/pai/blob/master/docs/user/troubleshooting_job.md)
diff --git a/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md b/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md
deleted file mode 100644
index 99af36b48d..0000000000
--- a/contrib/pai_vscode/documentation/storage_explorer_and_auto_upload.md
+++ /dev/null
@@ -1,161 +0,0 @@
-# Storage Explorer and Auto Upload
-
-- [Storage Explorer and Auto Upload](#storage-explorer-and-auto-upload)
- - [Storage Explorer](#storage-explorer)
- - [Cluster Share Storage](#cluster-share-storage)
- - [Personal Storage](#personal-storage)
- - [Add a personal storage](#add-a-personal-storage)
- - [Config personal storage](#config-personal-storage)
- - [Storage Operations](#storage-operations)
- - [Create folder](#create-folder)
- - [File upload/download](#file-uploaddownload)
- - [Edit remote file](#edit-remote-file)
- - [Auto Upload](#auto-upload)
- - [Setup auto upload](#setup-auto-upload)
- - [Advance config](#advance-config)
- - [Reference](#reference)
-
-## Storage Explorer
-
-OpenPAI admin can define Team-wise storage through [Storage Plugin](https://github.com/microsoft/pai/tree/master/contrib/storage_plugin).
-`Storage Explorer` in OpenPAI VS Code Client provide a way to let user manage their data in teamwise storage easily.
-The explorer can be opened by the icon in activity bar:
-
-
-
-There are two root nodes in the `Storage Explorer`, "Cluster share storage" and "Personal Storage".
-
-### Cluster Share Storage
-
-Under `Cluster share storage` node, is storage node, will display the sotrages that config by the cluster admin.
-And the children of the storage node is the mount points, whitch means it could be mount into the job container, the description of each mount point is the path in container.
-
-### Personal Storage
-
-For some cluster don't have teamwise storage, or users don't want to upload their data to cluster storag, we provide `Personal Storage` to support `Auto Upload` feature, and data management.
-Notice that the personal storage can't be mount into job container by the `Storage runtime plugin`, should access it in code or commands manully.
-
-#### Add a personal storage
-
-1. Right click the `Personal storage` node, and select `Add Personal Storage`.
-2. Input your storage display name, and press `Enter`.
-3. A storage config json file will be open, finish it and click `Finish` button at right bottom corner. Notice, it won't be effect, if you save and close the file directly. About how to config personal storage, please refer to next session.
-
-
-
-#### Config personal storage
-
-Here is a example about personal storage config:
-
-```json
-{
- // storage server display name
- "spn": "test",
- "type": "azureblob",
-
- // Azure blob
- "data": {
- "dataStore": "dataStore",
- "containerName": "test",
- "accountName": "test",
- "key": "key"
- },
- "extension": {}
-}
-```
-
-The personal storage config is same as the teamwise storage server, please refer to [Team wise storage data structures](https://github.com/microsoft/pai/tree/master/contrib/storage_plugin#team-wise-storage-data-structures-).
-
-### Storage Operations
-
-Right click on the storage explorer, user can do some operation for the storages.
-
-#### Create folder
-
-Right click on `Mount Point` or folder, select `New folder` and input the folder name.
-
-
-
-#### File upload/download
-
-Upload:
-
-
-
-Download:
-
-
-
-#### Edit remote file
-
-Double click file on `Storage Explorer`, will auto download and open it in VSCode editor, edit the file and save will ask to upload it to remote.
-
-
-
-## Auto Upload
-
-OpenPAI VS Code Client provide auto upload feature, could auto upload user's file to storage before submit job.
-
-### Setup auto upload
-
-The first time user click `Create Job Config...` or `Submit Job...`, the client will ask user to setup auto upload.
-
-1. Click `Yes` when asking "Enable auto uploading of code?"
-2. Select a cluster if you have multiple cluster.
-3. Select a storage and mount point as the destiniation you want to upload.
-
-
-
-### Advance config
-
-You can change your auto upload config in `".vscode/settings.json"` file.
-Here is an example for the `settings.json`:
-
-```json
-{
- "pai.job.generateJobName.enabled": true,
- "pai.job.v2.upload": {
- "cluster_1": {
- "enable": true,
- "include": [
- "**/*.py",
- "**/*.txt"
- ],
- "exclude": [],
- "storageType": "cluster",
- "storageName": "confignfs",
- "storageMountPoint": "/home"
- },
- "cluster_2": {
- "enable": true,
- "include": [
- "**/*.py"
- ],
- "exclude": [],
- "storageType": "cluster",
- "storageName": "confignfs",
- "storageMountPoint": "/data"
- }
- }
-}
-```
-
-The field `"pai.job.v2.upload"` is the auto upload config, contains objects as:
-
-```json
-"": {
- "enable": true, // true means enable the auto upload
- "include": [ // filter files to upload
- "**/*.py"
- ],
- "exclude": [], // filter files not to upload
- "storageType": "cluster", // "cluster" or "personal"
- "storageName": "", // storage name
- "storageMountPoint": "/home" // storage mount point, ignore it if storageType is "personal"
-}
-```
-
-By default the auto upload will only upload `".py"` files, user can change the `"include"` field and `"exclude"` field to setting the upload filter.
-
-## Reference
-[Storage Plugin](https://github.com/microsoft/pai/tree/master/contrib/storage_plugin)
diff --git a/contrib/pai_vscode/documentation/submit_job.md b/contrib/pai_vscode/documentation/submit_job.md
deleted file mode 100644
index 0ab430a9ae..0000000000
--- a/contrib/pai_vscode/documentation/submit_job.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# Submit job to OpenPAI by VSCode Extension
-
-This document is a tutorial for OpenPAI job submission on VSCode Extension.
-Before learning this document, make sure you have an OpenPAI cluster already, and already install VSCode.
-
-- [Submit job to OpenPAI by VSCode Extension](#submit-job-to-openpai-by-vscode-extension)
- - [Install OpenPAI VSCode Client](#install-openpai-vscode-client)
- - [Connect to OpenPAI Cluster](#connect-to-openpai-cluster)
- - [Submit a Hello World Job](#submit-a-hello-world-job)
- - [Create a job config file](#create-a-job-config-file)
- - [Edit the config file](#edit-the-config-file)
- - [Submit it](#submit-it)
- - [Manage Your Data](#manage-your-data)
- - [Teamwise Storage](#teamwise-storage)
- - [Storage explorer](#storage-explorer)
- - [Source code auto upload](#source-code-auto-upload)
- - [Reference](#reference)
-
-## Install OpenPAI VSCode Client
-
-In VSCode Extension Marketplace search [OpenPAI VS Code Client](https://marketplace.visualstudio.com/items?itemName=OpenPAIVSCodeClient.pai-vscode), and click Install.
-
-
-
-## Connect to OpenPAI Cluster
-
-1. Click the '+' button in `PAI CLUSTER EXPLORER`, or press `Ctrl+Shift+P` to open command palette look for `"PAI: Add PAI Cluster"` command and select it.
-2. Input input the host of an OpenPAI cluster. It can be domain name or IP Address. After that, press `Enter`.
-3. A configuration file is opened, you can config it. Once it completes, click `Finish` button at right bottom corner. Notice, it won't be effect, if you save and close the file directly.
-4. If there are multiple OpenPAI clusters, you can follow above steps again to connect with them.
-
-
-
-## Submit a Hello World Job
-
-The job of OpenPAI defines how to execute code(s) and command(s) in specified environment(s). A job can be run on single node or distributedly.
-The following process submits a model training job implemented by TensorFlow on CIFAR-10 dataset. It downloads data and code from internet and helps getting started with OpenPAI.
-
-### Create a job config file
-
-1. Create a new folder name `'hello world job'` and open it in VSCode.
-2. Double click the `Create Job Config...` button in `PAI CLUSTER EXPLORER`, the first time you click, it may ask you to config the `Auto Upload` and `Add job name suffix` feature, in this hello world job, we can select `No` for `Auto Upload` and `Yes` for `Add job name suffix`.
-3. Save the job config file in your vscode workspace.
-
-
-
-For other ways to create job config file, refer to [Create job config file](edit_yaml_job_config.md#Create-job-config-file).
-
-### Edit the config file
-
-Change the config file to this:
-
-```yaml
-protocolVersion: 2
-name: hello_world_job
-type: job
-prerequisites:
- - name: image
- type: dockerimage
- uri: tensorflow/tensorflow:1.15.2-gpu
-taskRoles:
- train:
- instances: 1
- dockerImage: image
- resourcePerInstance:
- cpu: 1
- memoryMB: 16384
- gpu: 1
- commands:
- - apt update
- - apt install -y git
- - git clone https://github.com/tensorflow/models
- - cd models/research/slim
- - pip install Pillow
- - pip install contextlib2
- - python download_and_convert_data.py --dataset_name=cifar10 --dataset_dir=/tmp/data
- - python train_image_classifier.py --dataset_name=cifar10 --dataset_dir=/tmp/data --max_number_of_steps=1000
-```
-
-The `OpenPAI VS Code Client` support some features to improve user experience for editing job config file, please refer to [OpenPAI job config file edit features](edit_yaml_job_config.md).
-To learn more about this job, please refer to [Learn the Hello World Job](https://github.com/microsoft/pai/blob/master/docs/user/job_submission.md#Learn-the-Hello-World-Job)
-
-### Submit it
-
-Finish editing the config file, save it and right click on the editor and select `Submit Job to PAI Cluster`.
-After the information `Successfully submitted job.` pop up, you can click the `Open job page` button at right bottom corner, and view you job on website.
-
-
-
-## Manage Your Data
-
-Most model training and other kinds of jobs need to transfer files between running environments and outside. Files include dataset, code, scripts, trained model, and so on.
-
-### Teamwise Storage
-
-OpenPAI admin can define Team-wise storage through [Storage Plugin](https://github.com/microsoft/pai/tree/master/contrib/storage_plugin).
-User's job container can mount to the storage if user add it in job config file, for how to insert storage plugin into job config, please refer to [Insert OpenPAI Runtime Plugin](edit_yaml_job_config.md#Insert-OpenPAI-Runtime-Plugin).
-
-### Storage explorer
-
-To manage user's data in Team-wise storage, `OpenPAI VS Code Client` support a `STORAGE EXPLORER` in vscode, User can manage data in the explorer.
-We also support an `Auto Upload` feature in VSCode, the client will auto upload user's project file to the storage before submit job.
-For more detail, refer to [Storage Explorer and Auto Upload](storage_explorer_and_auto_upload.md)
-
-
-
-### Source code auto upload
-
-VSCode is a very powerful editor, user can use it to edit their source code, the auto upload feature make the source code to PAI job easily.
-For more detail, refer to [Storage Explorer and Auto Upload](storage_explorer_and_auto_upload.md#Auto-Upload)
-
-
-
-## Reference
-
-[PAI Job Protocol](https://github.com/microsoft/openpai-protocol/blob/master/schemas/v2/schema.yaml)
-[Submit Jobs on OpenPAI](https://github.com/microsoft/pai/blob/master/docs/user/job_submission.md#job-workflow)
-[Troubleshoot jobs](https://github.com/microsoft/pai/blob/master/docs/user/troubleshooting_job.md)
diff --git a/contrib/pai_vscode/i18n/cldr/likelySubtags.json b/contrib/pai_vscode/i18n/cldr/likelySubtags.json
deleted file mode 100644
index b844861a7a..0000000000
--- a/contrib/pai_vscode/i18n/cldr/likelySubtags.json
+++ /dev/null
@@ -1,1810 +0,0 @@
-{
- "supplemental": {
- "version": {
- "_number": "$Revision: 12932 $",
- "_unicodeVersion": "9.0.0",
- "_cldrVersion": "30.0.3"
- },
- "likelySubtags": {
- "aa": "aa-Latn-ET",
- "aai": "aai-Latn-ZZ",
- "aak": "aak-Latn-ZZ",
- "aau": "aau-Latn-ZZ",
- "ab": "ab-Cyrl-GE",
- "abi": "abi-Latn-ZZ",
- "abr": "abr-Latn-GH",
- "abt": "abt-Latn-ZZ",
- "aby": "aby-Latn-ZZ",
- "acd": "acd-Latn-ZZ",
- "ace": "ace-Latn-ID",
- "ach": "ach-Latn-UG",
- "ada": "ada-Latn-GH",
- "ade": "ade-Latn-ZZ",
- "adj": "adj-Latn-ZZ",
- "ady": "ady-Cyrl-RU",
- "adz": "adz-Latn-ZZ",
- "ae": "ae-Avst-IR",
- "aeb": "aeb-Arab-TN",
- "aey": "aey-Latn-ZZ",
- "af": "af-Latn-ZA",
- "agc": "agc-Latn-ZZ",
- "agd": "agd-Latn-ZZ",
- "agg": "agg-Latn-ZZ",
- "agm": "agm-Latn-ZZ",
- "ago": "ago-Latn-ZZ",
- "agq": "agq-Latn-CM",
- "aha": "aha-Latn-ZZ",
- "ahl": "ahl-Latn-ZZ",
- "aho": "aho-Ahom-IN",
- "ajg": "ajg-Latn-ZZ",
- "ak": "ak-Latn-GH",
- "akk": "akk-Xsux-IQ",
- "ala": "ala-Latn-ZZ",
- "ali": "ali-Latn-ZZ",
- "aln": "aln-Latn-XK",
- "alt": "alt-Cyrl-RU",
- "am": "am-Ethi-ET",
- "amm": "amm-Latn-ZZ",
- "amn": "amn-Latn-ZZ",
- "amo": "amo-Latn-NG",
- "amp": "amp-Latn-ZZ",
- "anc": "anc-Latn-ZZ",
- "ank": "ank-Latn-ZZ",
- "ann": "ann-Latn-ZZ",
- "any": "any-Latn-ZZ",
- "aoj": "aoj-Latn-ZZ",
- "aom": "aom-Latn-ZZ",
- "aoz": "aoz-Latn-ID",
- "apc": "apc-Arab-ZZ",
- "apd": "apd-Arab-TG",
- "ape": "ape-Latn-ZZ",
- "apr": "apr-Latn-ZZ",
- "aps": "aps-Latn-ZZ",
- "apz": "apz-Latn-ZZ",
- "ar": "ar-Arab-EG",
- "arc": "arc-Armi-IR",
- "arc-Nbat": "arc-Nbat-JO",
- "arc-Palm": "arc-Palm-SY",
- "arh": "arh-Latn-ZZ",
- "arn": "arn-Latn-CL",
- "aro": "aro-Latn-BO",
- "arq": "arq-Arab-DZ",
- "ary": "ary-Arab-MA",
- "arz": "arz-Arab-EG",
- "as": "as-Beng-IN",
- "asa": "asa-Latn-TZ",
- "ase": "ase-Sgnw-US",
- "asg": "asg-Latn-ZZ",
- "aso": "aso-Latn-ZZ",
- "ast": "ast-Latn-ES",
- "ata": "ata-Latn-ZZ",
- "atg": "atg-Latn-ZZ",
- "atj": "atj-Latn-CA",
- "auy": "auy-Latn-ZZ",
- "av": "av-Cyrl-RU",
- "avl": "avl-Arab-ZZ",
- "avn": "avn-Latn-ZZ",
- "avt": "avt-Latn-ZZ",
- "avu": "avu-Latn-ZZ",
- "awa": "awa-Deva-IN",
- "awb": "awb-Latn-ZZ",
- "awo": "awo-Latn-ZZ",
- "awx": "awx-Latn-ZZ",
- "ay": "ay-Latn-BO",
- "ayb": "ayb-Latn-ZZ",
- "az": "az-Latn-AZ",
- "az-Arab": "az-Arab-IR",
- "az-IQ": "az-Arab-IQ",
- "az-IR": "az-Arab-IR",
- "az-RU": "az-Cyrl-RU",
- "ba": "ba-Cyrl-RU",
- "bal": "bal-Arab-PK",
- "ban": "ban-Latn-ID",
- "bap": "bap-Deva-NP",
- "bar": "bar-Latn-AT",
- "bas": "bas-Latn-CM",
- "bav": "bav-Latn-ZZ",
- "bax": "bax-Bamu-CM",
- "bba": "bba-Latn-ZZ",
- "bbb": "bbb-Latn-ZZ",
- "bbc": "bbc-Latn-ID",
- "bbd": "bbd-Latn-ZZ",
- "bbj": "bbj-Latn-CM",
- "bbp": "bbp-Latn-ZZ",
- "bbr": "bbr-Latn-ZZ",
- "bcf": "bcf-Latn-ZZ",
- "bch": "bch-Latn-ZZ",
- "bci": "bci-Latn-CI",
- "bcm": "bcm-Latn-ZZ",
- "bcn": "bcn-Latn-ZZ",
- "bco": "bco-Latn-ZZ",
- "bcq": "bcq-Ethi-ZZ",
- "bcu": "bcu-Latn-ZZ",
- "bdd": "bdd-Latn-ZZ",
- "be": "be-Cyrl-BY",
- "bef": "bef-Latn-ZZ",
- "beh": "beh-Latn-ZZ",
- "bej": "bej-Arab-SD",
- "bem": "bem-Latn-ZM",
- "bet": "bet-Latn-ZZ",
- "bew": "bew-Latn-ID",
- "bex": "bex-Latn-ZZ",
- "bez": "bez-Latn-TZ",
- "bfd": "bfd-Latn-CM",
- "bfq": "bfq-Taml-IN",
- "bft": "bft-Arab-PK",
- "bfy": "bfy-Deva-IN",
- "bg": "bg-Cyrl-BG",
- "bgc": "bgc-Deva-IN",
- "bgn": "bgn-Arab-PK",
- "bgx": "bgx-Grek-TR",
- "bhb": "bhb-Deva-IN",
- "bhg": "bhg-Latn-ZZ",
- "bhi": "bhi-Deva-IN",
- "bhk": "bhk-Latn-PH",
- "bhl": "bhl-Latn-ZZ",
- "bho": "bho-Deva-IN",
- "bhy": "bhy-Latn-ZZ",
- "bi": "bi-Latn-VU",
- "bib": "bib-Latn-ZZ",
- "big": "big-Latn-ZZ",
- "bik": "bik-Latn-PH",
- "bim": "bim-Latn-ZZ",
- "bin": "bin-Latn-NG",
- "bio": "bio-Latn-ZZ",
- "biq": "biq-Latn-ZZ",
- "bjh": "bjh-Latn-ZZ",
- "bji": "bji-Ethi-ZZ",
- "bjj": "bjj-Deva-IN",
- "bjn": "bjn-Latn-ID",
- "bjo": "bjo-Latn-ZZ",
- "bjr": "bjr-Latn-ZZ",
- "bjz": "bjz-Latn-ZZ",
- "bkc": "bkc-Latn-ZZ",
- "bkm": "bkm-Latn-CM",
- "bkq": "bkq-Latn-ZZ",
- "bku": "bku-Latn-PH",
- "bkv": "bkv-Latn-ZZ",
- "blt": "blt-Tavt-VN",
- "bm": "bm-Latn-ML",
- "bmh": "bmh-Latn-ZZ",
- "bmk": "bmk-Latn-ZZ",
- "bmq": "bmq-Latn-ML",
- "bmu": "bmu-Latn-ZZ",
- "bn": "bn-Beng-BD",
- "bng": "bng-Latn-ZZ",
- "bnm": "bnm-Latn-ZZ",
- "bnp": "bnp-Latn-ZZ",
- "bo": "bo-Tibt-CN",
- "boj": "boj-Latn-ZZ",
- "bom": "bom-Latn-ZZ",
- "bon": "bon-Latn-ZZ",
- "bpy": "bpy-Beng-IN",
- "bqc": "bqc-Latn-ZZ",
- "bqi": "bqi-Arab-IR",
- "bqp": "bqp-Latn-ZZ",
- "bqv": "bqv-Latn-CI",
- "br": "br-Latn-FR",
- "bra": "bra-Deva-IN",
- "brh": "brh-Arab-PK",
- "brx": "brx-Deva-IN",
- "brz": "brz-Latn-ZZ",
- "bs": "bs-Latn-BA",
- "bsj": "bsj-Latn-ZZ",
- "bsq": "bsq-Bass-LR",
- "bss": "bss-Latn-CM",
- "bst": "bst-Ethi-ZZ",
- "bto": "bto-Latn-PH",
- "btt": "btt-Latn-ZZ",
- "btv": "btv-Deva-PK",
- "bua": "bua-Cyrl-RU",
- "buc": "buc-Latn-YT",
- "bud": "bud-Latn-ZZ",
- "bug": "bug-Latn-ID",
- "buk": "buk-Latn-ZZ",
- "bum": "bum-Latn-CM",
- "buo": "buo-Latn-ZZ",
- "bus": "bus-Latn-ZZ",
- "buu": "buu-Latn-ZZ",
- "bvb": "bvb-Latn-GQ",
- "bwd": "bwd-Latn-ZZ",
- "bwr": "bwr-Latn-ZZ",
- "bxh": "bxh-Latn-ZZ",
- "bye": "bye-Latn-ZZ",
- "byn": "byn-Ethi-ER",
- "byr": "byr-Latn-ZZ",
- "bys": "bys-Latn-ZZ",
- "byv": "byv-Latn-CM",
- "byx": "byx-Latn-ZZ",
- "bza": "bza-Latn-ZZ",
- "bze": "bze-Latn-ML",
- "bzf": "bzf-Latn-ZZ",
- "bzh": "bzh-Latn-ZZ",
- "bzw": "bzw-Latn-ZZ",
- "ca": "ca-Latn-ES",
- "can": "can-Latn-ZZ",
- "cbj": "cbj-Latn-ZZ",
- "cch": "cch-Latn-NG",
- "ccp": "ccp-Beng-IN",
- "ccp-Cakm": "ccp-Cakm-BD",
- "ce": "ce-Cyrl-RU",
- "ceb": "ceb-Latn-PH",
- "cfa": "cfa-Latn-ZZ",
- "cgg": "cgg-Latn-UG",
- "ch": "ch-Latn-GU",
- "chk": "chk-Latn-FM",
- "chm": "chm-Cyrl-RU",
- "cho": "cho-Latn-US",
- "chp": "chp-Latn-CA",
- "chr": "chr-Cher-US",
- "cja": "cja-Arab-KH",
- "cjm": "cjm-Cham-VN",
- "cjv": "cjv-Latn-ZZ",
- "ckb": "ckb-Arab-IQ",
- "ckl": "ckl-Latn-ZZ",
- "cko": "cko-Latn-ZZ",
- "cky": "cky-Latn-ZZ",
- "cla": "cla-Latn-ZZ",
- "cme": "cme-Latn-ZZ",
- "co": "co-Latn-FR",
- "cop": "cop-Copt-EG",
- "cps": "cps-Latn-PH",
- "cr": "cr-Cans-CA",
- "crj": "crj-Cans-CA",
- "crk": "crk-Cans-CA",
- "crl": "crl-Cans-CA",
- "crm": "crm-Cans-CA",
- "crs": "crs-Latn-SC",
- "cs": "cs-Latn-CZ",
- "csb": "csb-Latn-PL",
- "csw": "csw-Cans-CA",
- "ctd": "ctd-Pauc-MM",
- "cu": "cu-Cyrl-RU",
- "cu-Glag": "cu-Glag-BG",
- "cv": "cv-Cyrl-RU",
- "cy": "cy-Latn-GB",
- "da": "da-Latn-DK",
- "dad": "dad-Latn-ZZ",
- "daf": "daf-Latn-ZZ",
- "dag": "dag-Latn-ZZ",
- "dah": "dah-Latn-ZZ",
- "dak": "dak-Latn-US",
- "dar": "dar-Cyrl-RU",
- "dav": "dav-Latn-KE",
- "dbd": "dbd-Latn-ZZ",
- "dbq": "dbq-Latn-ZZ",
- "dcc": "dcc-Arab-IN",
- "ddn": "ddn-Latn-ZZ",
- "de": "de-Latn-DE",
- "ded": "ded-Latn-ZZ",
- "den": "den-Latn-CA",
- "dga": "dga-Latn-ZZ",
- "dgh": "dgh-Latn-ZZ",
- "dgi": "dgi-Latn-ZZ",
- "dgl": "dgl-Arab-ZZ",
- "dgr": "dgr-Latn-CA",
- "dgz": "dgz-Latn-ZZ",
- "dia": "dia-Latn-ZZ",
- "dje": "dje-Latn-NE",
- "dnj": "dnj-Latn-CI",
- "dob": "dob-Latn-ZZ",
- "doi": "doi-Arab-IN",
- "dop": "dop-Latn-ZZ",
- "dow": "dow-Latn-ZZ",
- "dri": "dri-Latn-ZZ",
- "drs": "drs-Ethi-ZZ",
- "dsb": "dsb-Latn-DE",
- "dtm": "dtm-Latn-ML",
- "dtp": "dtp-Latn-MY",
- "dts": "dts-Latn-ZZ",
- "dty": "dty-Deva-NP",
- "dua": "dua-Latn-CM",
- "duc": "duc-Latn-ZZ",
- "dud": "dud-Latn-ZZ",
- "dug": "dug-Latn-ZZ",
- "dv": "dv-Thaa-MV",
- "dva": "dva-Latn-ZZ",
- "dww": "dww-Latn-ZZ",
- "dyo": "dyo-Latn-SN",
- "dyu": "dyu-Latn-BF",
- "dz": "dz-Tibt-BT",
- "dzg": "dzg-Latn-ZZ",
- "ebu": "ebu-Latn-KE",
- "ee": "ee-Latn-GH",
- "efi": "efi-Latn-NG",
- "egl": "egl-Latn-IT",
- "egy": "egy-Egyp-EG",
- "eky": "eky-Kali-MM",
- "el": "el-Grek-GR",
- "ema": "ema-Latn-ZZ",
- "emi": "emi-Latn-ZZ",
- "en": "en-Latn-US",
- "en-Shaw": "en-Shaw-GB",
- "enn": "enn-Latn-ZZ",
- "enq": "enq-Latn-ZZ",
- "eo": "eo-Latn-001",
- "eri": "eri-Latn-ZZ",
- "es": "es-Latn-ES",
- "esu": "esu-Latn-US",
- "et": "et-Latn-EE",
- "etr": "etr-Latn-ZZ",
- "ett": "ett-Ital-IT",
- "etu": "etu-Latn-ZZ",
- "etx": "etx-Latn-ZZ",
- "eu": "eu-Latn-ES",
- "ewo": "ewo-Latn-CM",
- "ext": "ext-Latn-ES",
- "fa": "fa-Arab-IR",
- "faa": "faa-Latn-ZZ",
- "fab": "fab-Latn-ZZ",
- "fag": "fag-Latn-ZZ",
- "fai": "fai-Latn-ZZ",
- "fan": "fan-Latn-GQ",
- "ff": "ff-Latn-SN",
- "ff-Adlm": "ff-Adlm-GN",
- "ffi": "ffi-Latn-ZZ",
- "ffm": "ffm-Latn-ML",
- "fi": "fi-Latn-FI",
- "fia": "fia-Arab-SD",
- "fil": "fil-Latn-PH",
- "fit": "fit-Latn-SE",
- "fj": "fj-Latn-FJ",
- "flr": "flr-Latn-ZZ",
- "fmp": "fmp-Latn-ZZ",
- "fo": "fo-Latn-FO",
- "fod": "fod-Latn-ZZ",
- "fon": "fon-Latn-BJ",
- "for": "for-Latn-ZZ",
- "fpe": "fpe-Latn-ZZ",
- "fqs": "fqs-Latn-ZZ",
- "fr": "fr-Latn-FR",
- "frc": "frc-Latn-US",
- "frp": "frp-Latn-FR",
- "frr": "frr-Latn-DE",
- "frs": "frs-Latn-DE",
- "fub": "fub-Arab-CM",
- "fud": "fud-Latn-WF",
- "fue": "fue-Latn-ZZ",
- "fuf": "fuf-Latn-GN",
- "fuh": "fuh-Latn-ZZ",
- "fuq": "fuq-Latn-NE",
- "fur": "fur-Latn-IT",
- "fuv": "fuv-Latn-NG",
- "fuy": "fuy-Latn-ZZ",
- "fvr": "fvr-Latn-SD",
- "fy": "fy-Latn-NL",
- "ga": "ga-Latn-IE",
- "gaa": "gaa-Latn-GH",
- "gaf": "gaf-Latn-ZZ",
- "gag": "gag-Latn-MD",
- "gah": "gah-Latn-ZZ",
- "gaj": "gaj-Latn-ZZ",
- "gam": "gam-Latn-ZZ",
- "gan": "gan-Hans-CN",
- "gaw": "gaw-Latn-ZZ",
- "gay": "gay-Latn-ID",
- "gbf": "gbf-Latn-ZZ",
- "gbm": "gbm-Deva-IN",
- "gby": "gby-Latn-ZZ",
- "gbz": "gbz-Arab-IR",
- "gcr": "gcr-Latn-GF",
- "gd": "gd-Latn-GB",
- "gde": "gde-Latn-ZZ",
- "gdn": "gdn-Latn-ZZ",
- "gdr": "gdr-Latn-ZZ",
- "geb": "geb-Latn-ZZ",
- "gej": "gej-Latn-ZZ",
- "gel": "gel-Latn-ZZ",
- "gez": "gez-Ethi-ET",
- "gfk": "gfk-Latn-ZZ",
- "ggn": "ggn-Deva-NP",
- "ghs": "ghs-Latn-ZZ",
- "gil": "gil-Latn-KI",
- "gim": "gim-Latn-ZZ",
- "gjk": "gjk-Arab-PK",
- "gjn": "gjn-Latn-ZZ",
- "gju": "gju-Arab-PK",
- "gkn": "gkn-Latn-ZZ",
- "gkp": "gkp-Latn-ZZ",
- "gl": "gl-Latn-ES",
- "glk": "glk-Arab-IR",
- "gmm": "gmm-Latn-ZZ",
- "gmv": "gmv-Ethi-ZZ",
- "gn": "gn-Latn-PY",
- "gnd": "gnd-Latn-ZZ",
- "gng": "gng-Latn-ZZ",
- "god": "god-Latn-ZZ",
- "gof": "gof-Ethi-ZZ",
- "goi": "goi-Latn-ZZ",
- "gom": "gom-Deva-IN",
- "gon": "gon-Telu-IN",
- "gor": "gor-Latn-ID",
- "gos": "gos-Latn-NL",
- "got": "got-Goth-UA",
- "grc": "grc-Cprt-CY",
- "grc-Linb": "grc-Linb-GR",
- "grt": "grt-Beng-IN",
- "grw": "grw-Latn-ZZ",
- "gsw": "gsw-Latn-CH",
- "gu": "gu-Gujr-IN",
- "gub": "gub-Latn-BR",
- "guc": "guc-Latn-CO",
- "gud": "gud-Latn-ZZ",
- "gur": "gur-Latn-GH",
- "guw": "guw-Latn-ZZ",
- "gux": "gux-Latn-ZZ",
- "guz": "guz-Latn-KE",
- "gv": "gv-Latn-IM",
- "gvf": "gvf-Latn-ZZ",
- "gvr": "gvr-Deva-NP",
- "gvs": "gvs-Latn-ZZ",
- "gwc": "gwc-Arab-ZZ",
- "gwi": "gwi-Latn-CA",
- "gwt": "gwt-Arab-ZZ",
- "gyi": "gyi-Latn-ZZ",
- "ha": "ha-Latn-NG",
- "ha-CM": "ha-Arab-CM",
- "ha-SD": "ha-Arab-SD",
- "hag": "hag-Latn-ZZ",
- "hak": "hak-Hans-CN",
- "ham": "ham-Latn-ZZ",
- "haw": "haw-Latn-US",
- "haz": "haz-Arab-AF",
- "hbb": "hbb-Latn-ZZ",
- "hdy": "hdy-Ethi-ZZ",
- "he": "he-Hebr-IL",
- "hhy": "hhy-Latn-ZZ",
- "hi": "hi-Deva-IN",
- "hia": "hia-Latn-ZZ",
- "hif": "hif-Latn-FJ",
- "hig": "hig-Latn-ZZ",
- "hih": "hih-Latn-ZZ",
- "hil": "hil-Latn-PH",
- "hla": "hla-Latn-ZZ",
- "hlu": "hlu-Hluw-TR",
- "hmd": "hmd-Plrd-CN",
- "hmt": "hmt-Latn-ZZ",
- "hnd": "hnd-Arab-PK",
- "hne": "hne-Deva-IN",
- "hnj": "hnj-Hmng-LA",
- "hnn": "hnn-Latn-PH",
- "hno": "hno-Arab-PK",
- "ho": "ho-Latn-PG",
- "hoc": "hoc-Deva-IN",
- "hoj": "hoj-Deva-IN",
- "hot": "hot-Latn-ZZ",
- "hr": "hr-Latn-HR",
- "hsb": "hsb-Latn-DE",
- "hsn": "hsn-Hans-CN",
- "ht": "ht-Latn-HT",
- "hu": "hu-Latn-HU",
- "hui": "hui-Latn-ZZ",
- "hy": "hy-Armn-AM",
- "hz": "hz-Latn-NA",
- "ia": "ia-Latn-FR",
- "ian": "ian-Latn-ZZ",
- "iar": "iar-Latn-ZZ",
- "iba": "iba-Latn-MY",
- "ibb": "ibb-Latn-NG",
- "iby": "iby-Latn-ZZ",
- "ica": "ica-Latn-ZZ",
- "ich": "ich-Latn-ZZ",
- "id": "id-Latn-ID",
- "idd": "idd-Latn-ZZ",
- "idi": "idi-Latn-ZZ",
- "idu": "idu-Latn-ZZ",
- "ig": "ig-Latn-NG",
- "igb": "igb-Latn-ZZ",
- "ige": "ige-Latn-ZZ",
- "ii": "ii-Yiii-CN",
- "ijj": "ijj-Latn-ZZ",
- "ik": "ik-Latn-US",
- "ikk": "ikk-Latn-ZZ",
- "ikt": "ikt-Latn-CA",
- "ikw": "ikw-Latn-ZZ",
- "ikx": "ikx-Latn-ZZ",
- "ilo": "ilo-Latn-PH",
- "imo": "imo-Latn-ZZ",
- "in": "in-Latn-ID",
- "inh": "inh-Cyrl-RU",
- "iou": "iou-Latn-ZZ",
- "iri": "iri-Latn-ZZ",
- "is": "is-Latn-IS",
- "it": "it-Latn-IT",
- "iu": "iu-Cans-CA",
- "iw": "iw-Hebr-IL",
- "iwm": "iwm-Latn-ZZ",
- "iws": "iws-Latn-ZZ",
- "izh": "izh-Latn-RU",
- "izi": "izi-Latn-ZZ",
- "ja": "ja-Jpan-JP",
- "jab": "jab-Latn-ZZ",
- "jam": "jam-Latn-JM",
- "jbu": "jbu-Latn-ZZ",
- "jen": "jen-Latn-ZZ",
- "jgk": "jgk-Latn-ZZ",
- "jgo": "jgo-Latn-CM",
- "ji": "ji-Hebr-UA",
- "jib": "jib-Latn-ZZ",
- "jmc": "jmc-Latn-TZ",
- "jml": "jml-Deva-NP",
- "jra": "jra-Latn-ZZ",
- "jut": "jut-Latn-DK",
- "jv": "jv-Latn-ID",
- "jw": "jw-Latn-ID",
- "ka": "ka-Geor-GE",
- "kaa": "kaa-Cyrl-UZ",
- "kab": "kab-Latn-DZ",
- "kac": "kac-Latn-MM",
- "kad": "kad-Latn-ZZ",
- "kai": "kai-Latn-ZZ",
- "kaj": "kaj-Latn-NG",
- "kam": "kam-Latn-KE",
- "kao": "kao-Latn-ML",
- "kbd": "kbd-Cyrl-RU",
- "kbm": "kbm-Latn-ZZ",
- "kbp": "kbp-Latn-ZZ",
- "kbq": "kbq-Latn-ZZ",
- "kbx": "kbx-Latn-ZZ",
- "kby": "kby-Arab-NE",
- "kcg": "kcg-Latn-NG",
- "kck": "kck-Latn-ZW",
- "kcl": "kcl-Latn-ZZ",
- "kct": "kct-Latn-ZZ",
- "kde": "kde-Latn-TZ",
- "kdh": "kdh-Arab-TG",
- "kdl": "kdl-Latn-ZZ",
- "kdt": "kdt-Thai-TH",
- "kea": "kea-Latn-CV",
- "ken": "ken-Latn-CM",
- "kez": "kez-Latn-ZZ",
- "kfo": "kfo-Latn-CI",
- "kfr": "kfr-Deva-IN",
- "kfy": "kfy-Deva-IN",
- "kg": "kg-Latn-CD",
- "kge": "kge-Latn-ID",
- "kgf": "kgf-Latn-ZZ",
- "kgp": "kgp-Latn-BR",
- "kha": "kha-Latn-IN",
- "khb": "khb-Talu-CN",
- "khn": "khn-Deva-IN",
- "khq": "khq-Latn-ML",
- "khs": "khs-Latn-ZZ",
- "kht": "kht-Mymr-IN",
- "khw": "khw-Arab-PK",
- "khz": "khz-Latn-ZZ",
- "ki": "ki-Latn-KE",
- "kij": "kij-Latn-ZZ",
- "kiu": "kiu-Latn-TR",
- "kiw": "kiw-Latn-ZZ",
- "kj": "kj-Latn-NA",
- "kjd": "kjd-Latn-ZZ",
- "kjg": "kjg-Laoo-LA",
- "kjs": "kjs-Latn-ZZ",
- "kjy": "kjy-Latn-ZZ",
- "kk": "kk-Cyrl-KZ",
- "kk-AF": "kk-Arab-AF",
- "kk-Arab": "kk-Arab-CN",
- "kk-CN": "kk-Arab-CN",
- "kk-IR": "kk-Arab-IR",
- "kk-MN": "kk-Arab-MN",
- "kkc": "kkc-Latn-ZZ",
- "kkj": "kkj-Latn-CM",
- "kl": "kl-Latn-GL",
- "kln": "kln-Latn-KE",
- "klq": "klq-Latn-ZZ",
- "klt": "klt-Latn-ZZ",
- "klx": "klx-Latn-ZZ",
- "km": "km-Khmr-KH",
- "kmb": "kmb-Latn-AO",
- "kmh": "kmh-Latn-ZZ",
- "kmo": "kmo-Latn-ZZ",
- "kms": "kms-Latn-ZZ",
- "kmu": "kmu-Latn-ZZ",
- "kmw": "kmw-Latn-ZZ",
- "kn": "kn-Knda-IN",
- "knp": "knp-Latn-ZZ",
- "ko": "ko-Kore-KR",
- "koi": "koi-Cyrl-RU",
- "kok": "kok-Deva-IN",
- "kol": "kol-Latn-ZZ",
- "kos": "kos-Latn-FM",
- "koz": "koz-Latn-ZZ",
- "kpe": "kpe-Latn-LR",
- "kpf": "kpf-Latn-ZZ",
- "kpo": "kpo-Latn-ZZ",
- "kpr": "kpr-Latn-ZZ",
- "kpx": "kpx-Latn-ZZ",
- "kqb": "kqb-Latn-ZZ",
- "kqf": "kqf-Latn-ZZ",
- "kqs": "kqs-Latn-ZZ",
- "kqy": "kqy-Ethi-ZZ",
- "krc": "krc-Cyrl-RU",
- "kri": "kri-Latn-SL",
- "krj": "krj-Latn-PH",
- "krl": "krl-Latn-RU",
- "krs": "krs-Latn-ZZ",
- "kru": "kru-Deva-IN",
- "ks": "ks-Arab-IN",
- "ksb": "ksb-Latn-TZ",
- "ksd": "ksd-Latn-ZZ",
- "ksf": "ksf-Latn-CM",
- "ksh": "ksh-Latn-DE",
- "ksj": "ksj-Latn-ZZ",
- "ksr": "ksr-Latn-ZZ",
- "ktb": "ktb-Ethi-ZZ",
- "ktm": "ktm-Latn-ZZ",
- "kto": "kto-Latn-ZZ",
- "ku": "ku-Latn-TR",
- "ku-Arab": "ku-Arab-IQ",
- "ku-LB": "ku-Arab-LB",
- "kub": "kub-Latn-ZZ",
- "kud": "kud-Latn-ZZ",
- "kue": "kue-Latn-ZZ",
- "kuj": "kuj-Latn-ZZ",
- "kum": "kum-Cyrl-RU",
- "kun": "kun-Latn-ZZ",
- "kup": "kup-Latn-ZZ",
- "kus": "kus-Latn-ZZ",
- "kv": "kv-Cyrl-RU",
- "kvg": "kvg-Latn-ZZ",
- "kvr": "kvr-Latn-ID",
- "kvx": "kvx-Arab-PK",
- "kw": "kw-Latn-GB",
- "kwj": "kwj-Latn-ZZ",
- "kwo": "kwo-Latn-ZZ",
- "kxa": "kxa-Latn-ZZ",
- "kxc": "kxc-Ethi-ZZ",
- "kxm": "kxm-Thai-TH",
- "kxp": "kxp-Arab-PK",
- "kxw": "kxw-Latn-ZZ",
- "kxz": "kxz-Latn-ZZ",
- "ky": "ky-Cyrl-KG",
- "ky-Arab": "ky-Arab-CN",
- "ky-CN": "ky-Arab-CN",
- "ky-Latn": "ky-Latn-TR",
- "ky-TR": "ky-Latn-TR",
- "kye": "kye-Latn-ZZ",
- "kyx": "kyx-Latn-ZZ",
- "kzr": "kzr-Latn-ZZ",
- "la": "la-Latn-VA",
- "lab": "lab-Lina-GR",
- "lad": "lad-Hebr-IL",
- "lag": "lag-Latn-TZ",
- "lah": "lah-Arab-PK",
- "laj": "laj-Latn-UG",
- "las": "las-Latn-ZZ",
- "lb": "lb-Latn-LU",
- "lbe": "lbe-Cyrl-RU",
- "lbu": "lbu-Latn-ZZ",
- "lbw": "lbw-Latn-ID",
- "lcm": "lcm-Latn-ZZ",
- "lcp": "lcp-Thai-CN",
- "ldb": "ldb-Latn-ZZ",
- "led": "led-Latn-ZZ",
- "lee": "lee-Latn-ZZ",
- "lem": "lem-Latn-ZZ",
- "lep": "lep-Lepc-IN",
- "leq": "leq-Latn-ZZ",
- "leu": "leu-Latn-ZZ",
- "lez": "lez-Cyrl-RU",
- "lg": "lg-Latn-UG",
- "lgg": "lgg-Latn-ZZ",
- "li": "li-Latn-NL",
- "lia": "lia-Latn-ZZ",
- "lid": "lid-Latn-ZZ",
- "lif": "lif-Deva-NP",
- "lif-Limb": "lif-Limb-IN",
- "lig": "lig-Latn-ZZ",
- "lih": "lih-Latn-ZZ",
- "lij": "lij-Latn-IT",
- "lis": "lis-Lisu-CN",
- "ljp": "ljp-Latn-ID",
- "lki": "lki-Arab-IR",
- "lkt": "lkt-Latn-US",
- "lle": "lle-Latn-ZZ",
- "lln": "lln-Latn-ZZ",
- "lmn": "lmn-Telu-IN",
- "lmo": "lmo-Latn-IT",
- "lmp": "lmp-Latn-ZZ",
- "ln": "ln-Latn-CD",
- "lns": "lns-Latn-ZZ",
- "lnu": "lnu-Latn-ZZ",
- "lo": "lo-Laoo-LA",
- "loj": "loj-Latn-ZZ",
- "lok": "lok-Latn-ZZ",
- "lol": "lol-Latn-CD",
- "lor": "lor-Latn-ZZ",
- "los": "los-Latn-ZZ",
- "loz": "loz-Latn-ZM",
- "lrc": "lrc-Arab-IR",
- "lt": "lt-Latn-LT",
- "ltg": "ltg-Latn-LV",
- "lu": "lu-Latn-CD",
- "lua": "lua-Latn-CD",
- "luo": "luo-Latn-KE",
- "luy": "luy-Latn-KE",
- "luz": "luz-Arab-IR",
- "lv": "lv-Latn-LV",
- "lwl": "lwl-Thai-TH",
- "lzh": "lzh-Hans-CN",
- "lzz": "lzz-Latn-TR",
- "mad": "mad-Latn-ID",
- "maf": "maf-Latn-CM",
- "mag": "mag-Deva-IN",
- "mai": "mai-Deva-IN",
- "mak": "mak-Latn-ID",
- "man": "man-Latn-GM",
- "man-GN": "man-Nkoo-GN",
- "man-Nkoo": "man-Nkoo-GN",
- "mas": "mas-Latn-KE",
- "maw": "maw-Latn-ZZ",
- "maz": "maz-Latn-MX",
- "mbh": "mbh-Latn-ZZ",
- "mbo": "mbo-Latn-ZZ",
- "mbq": "mbq-Latn-ZZ",
- "mbu": "mbu-Latn-ZZ",
- "mbw": "mbw-Latn-ZZ",
- "mci": "mci-Latn-ZZ",
- "mcp": "mcp-Latn-ZZ",
- "mcq": "mcq-Latn-ZZ",
- "mcr": "mcr-Latn-ZZ",
- "mcu": "mcu-Latn-ZZ",
- "mda": "mda-Latn-ZZ",
- "mde": "mde-Arab-ZZ",
- "mdf": "mdf-Cyrl-RU",
- "mdh": "mdh-Latn-PH",
- "mdj": "mdj-Latn-ZZ",
- "mdr": "mdr-Latn-ID",
- "mdx": "mdx-Ethi-ZZ",
- "med": "med-Latn-ZZ",
- "mee": "mee-Latn-ZZ",
- "mek": "mek-Latn-ZZ",
- "men": "men-Latn-SL",
- "mer": "mer-Latn-KE",
- "met": "met-Latn-ZZ",
- "meu": "meu-Latn-ZZ",
- "mfa": "mfa-Arab-TH",
- "mfe": "mfe-Latn-MU",
- "mfn": "mfn-Latn-ZZ",
- "mfo": "mfo-Latn-ZZ",
- "mfq": "mfq-Latn-ZZ",
- "mg": "mg-Latn-MG",
- "mgh": "mgh-Latn-MZ",
- "mgl": "mgl-Latn-ZZ",
- "mgo": "mgo-Latn-CM",
- "mgp": "mgp-Deva-NP",
- "mgy": "mgy-Latn-TZ",
- "mh": "mh-Latn-MH",
- "mhi": "mhi-Latn-ZZ",
- "mhl": "mhl-Latn-ZZ",
- "mi": "mi-Latn-NZ",
- "mif": "mif-Latn-ZZ",
- "min": "min-Latn-ID",
- "mis": "mis-Hatr-IQ",
- "miw": "miw-Latn-ZZ",
- "mk": "mk-Cyrl-MK",
- "mki": "mki-Arab-ZZ",
- "mkl": "mkl-Latn-ZZ",
- "mkp": "mkp-Latn-ZZ",
- "mkw": "mkw-Latn-ZZ",
- "ml": "ml-Mlym-IN",
- "mle": "mle-Latn-ZZ",
- "mlp": "mlp-Latn-ZZ",
- "mls": "mls-Latn-SD",
- "mmo": "mmo-Latn-ZZ",
- "mmu": "mmu-Latn-ZZ",
- "mmx": "mmx-Latn-ZZ",
- "mn": "mn-Cyrl-MN",
- "mn-CN": "mn-Mong-CN",
- "mn-Mong": "mn-Mong-CN",
- "mna": "mna-Latn-ZZ",
- "mnf": "mnf-Latn-ZZ",
- "mni": "mni-Beng-IN",
- "mnw": "mnw-Mymr-MM",
- "moa": "moa-Latn-ZZ",
- "moe": "moe-Latn-CA",
- "moh": "moh-Latn-CA",
- "mos": "mos-Latn-BF",
- "mox": "mox-Latn-ZZ",
- "mpp": "mpp-Latn-ZZ",
- "mps": "mps-Latn-ZZ",
- "mpt": "mpt-Latn-ZZ",
- "mpx": "mpx-Latn-ZZ",
- "mql": "mql-Latn-ZZ",
- "mr": "mr-Deva-IN",
- "mrd": "mrd-Deva-NP",
- "mrj": "mrj-Cyrl-RU",
- "mro": "mro-Mroo-BD",
- "ms": "ms-Latn-MY",
- "ms-CC": "ms-Arab-CC",
- "ms-ID": "ms-Arab-ID",
- "mt": "mt-Latn-MT",
- "mtc": "mtc-Latn-ZZ",
- "mtf": "mtf-Latn-ZZ",
- "mti": "mti-Latn-ZZ",
- "mtr": "mtr-Deva-IN",
- "mua": "mua-Latn-CM",
- "mur": "mur-Latn-ZZ",
- "mus": "mus-Latn-US",
- "mva": "mva-Latn-ZZ",
- "mvn": "mvn-Latn-ZZ",
- "mvy": "mvy-Arab-PK",
- "mwk": "mwk-Latn-ML",
- "mwr": "mwr-Deva-IN",
- "mwv": "mwv-Latn-ID",
- "mxc": "mxc-Latn-ZW",
- "mxm": "mxm-Latn-ZZ",
- "my": "my-Mymr-MM",
- "myk": "myk-Latn-ZZ",
- "mym": "mym-Ethi-ZZ",
- "myv": "myv-Cyrl-RU",
- "myw": "myw-Latn-ZZ",
- "myx": "myx-Latn-UG",
- "myz": "myz-Mand-IR",
- "mzk": "mzk-Latn-ZZ",
- "mzm": "mzm-Latn-ZZ",
- "mzn": "mzn-Arab-IR",
- "mzp": "mzp-Latn-ZZ",
- "mzw": "mzw-Latn-ZZ",
- "mzz": "mzz-Latn-ZZ",
- "na": "na-Latn-NR",
- "nac": "nac-Latn-ZZ",
- "naf": "naf-Latn-ZZ",
- "nak": "nak-Latn-ZZ",
- "nan": "nan-Hans-CN",
- "nap": "nap-Latn-IT",
- "naq": "naq-Latn-NA",
- "nas": "nas-Latn-ZZ",
- "nb": "nb-Latn-NO",
- "nca": "nca-Latn-ZZ",
- "nce": "nce-Latn-ZZ",
- "ncf": "ncf-Latn-ZZ",
- "nch": "nch-Latn-MX",
- "nco": "nco-Latn-ZZ",
- "ncu": "ncu-Latn-ZZ",
- "nd": "nd-Latn-ZW",
- "ndc": "ndc-Latn-MZ",
- "nds": "nds-Latn-DE",
- "ne": "ne-Deva-NP",
- "neb": "neb-Latn-ZZ",
- "new": "new-Deva-NP",
- "nex": "nex-Latn-ZZ",
- "nfr": "nfr-Latn-ZZ",
- "ng": "ng-Latn-NA",
- "nga": "nga-Latn-ZZ",
- "ngb": "ngb-Latn-ZZ",
- "ngl": "ngl-Latn-MZ",
- "nhb": "nhb-Latn-ZZ",
- "nhe": "nhe-Latn-MX",
- "nhw": "nhw-Latn-MX",
- "nif": "nif-Latn-ZZ",
- "nii": "nii-Latn-ZZ",
- "nij": "nij-Latn-ID",
- "nin": "nin-Latn-ZZ",
- "niu": "niu-Latn-NU",
- "niy": "niy-Latn-ZZ",
- "niz": "niz-Latn-ZZ",
- "njo": "njo-Latn-IN",
- "nkg": "nkg-Latn-ZZ",
- "nko": "nko-Latn-ZZ",
- "nl": "nl-Latn-NL",
- "nmg": "nmg-Latn-CM",
- "nmz": "nmz-Latn-ZZ",
- "nn": "nn-Latn-NO",
- "nnf": "nnf-Latn-ZZ",
- "nnh": "nnh-Latn-CM",
- "nnk": "nnk-Latn-ZZ",
- "nnm": "nnm-Latn-ZZ",
- "no": "no-Latn-NO",
- "nod": "nod-Lana-TH",
- "noe": "noe-Deva-IN",
- "non": "non-Runr-SE",
- "nop": "nop-Latn-ZZ",
- "nou": "nou-Latn-ZZ",
- "nqo": "nqo-Nkoo-GN",
- "nr": "nr-Latn-ZA",
- "nrb": "nrb-Latn-ZZ",
- "nsk": "nsk-Cans-CA",
- "nsn": "nsn-Latn-ZZ",
- "nso": "nso-Latn-ZA",
- "nss": "nss-Latn-ZZ",
- "ntm": "ntm-Latn-ZZ",
- "ntr": "ntr-Latn-ZZ",
- "nui": "nui-Latn-ZZ",
- "nup": "nup-Latn-ZZ",
- "nus": "nus-Latn-SS",
- "nuv": "nuv-Latn-ZZ",
- "nux": "nux-Latn-ZZ",
- "nv": "nv-Latn-US",
- "nwb": "nwb-Latn-ZZ",
- "nxq": "nxq-Latn-CN",
- "nxr": "nxr-Latn-ZZ",
- "ny": "ny-Latn-MW",
- "nym": "nym-Latn-TZ",
- "nyn": "nyn-Latn-UG",
- "nzi": "nzi-Latn-GH",
- "oc": "oc-Latn-FR",
- "ogc": "ogc-Latn-ZZ",
- "okr": "okr-Latn-ZZ",
- "okv": "okv-Latn-ZZ",
- "om": "om-Latn-ET",
- "ong": "ong-Latn-ZZ",
- "onn": "onn-Latn-ZZ",
- "ons": "ons-Latn-ZZ",
- "opm": "opm-Latn-ZZ",
- "or": "or-Orya-IN",
- "oro": "oro-Latn-ZZ",
- "oru": "oru-Arab-ZZ",
- "os": "os-Cyrl-GE",
- "osa": "osa-Osge-US",
- "ota": "ota-Arab-ZZ",
- "otk": "otk-Orkh-MN",
- "ozm": "ozm-Latn-ZZ",
- "pa": "pa-Guru-IN",
- "pa-Arab": "pa-Arab-PK",
- "pa-PK": "pa-Arab-PK",
- "pag": "pag-Latn-PH",
- "pal": "pal-Phli-IR",
- "pal-Phlp": "pal-Phlp-CN",
- "pam": "pam-Latn-PH",
- "pap": "pap-Latn-AW",
- "pau": "pau-Latn-PW",
- "pbi": "pbi-Latn-ZZ",
- "pcd": "pcd-Latn-FR",
- "pcm": "pcm-Latn-NG",
- "pdc": "pdc-Latn-US",
- "pdt": "pdt-Latn-CA",
- "ped": "ped-Latn-ZZ",
- "peo": "peo-Xpeo-IR",
- "pex": "pex-Latn-ZZ",
- "pfl": "pfl-Latn-DE",
- "phl": "phl-Arab-ZZ",
- "phn": "phn-Phnx-LB",
- "pil": "pil-Latn-ZZ",
- "pip": "pip-Latn-ZZ",
- "pka": "pka-Brah-IN",
- "pko": "pko-Latn-KE",
- "pl": "pl-Latn-PL",
- "pla": "pla-Latn-ZZ",
- "pms": "pms-Latn-IT",
- "png": "png-Latn-ZZ",
- "pnn": "pnn-Latn-ZZ",
- "pnt": "pnt-Grek-GR",
- "pon": "pon-Latn-FM",
- "ppo": "ppo-Latn-ZZ",
- "pra": "pra-Khar-PK",
- "prd": "prd-Arab-IR",
- "prg": "prg-Latn-001",
- "ps": "ps-Arab-AF",
- "pss": "pss-Latn-ZZ",
- "pt": "pt-Latn-BR",
- "ptp": "ptp-Latn-ZZ",
- "puu": "puu-Latn-GA",
- "pwa": "pwa-Latn-ZZ",
- "qu": "qu-Latn-PE",
- "quc": "quc-Latn-GT",
- "qug": "qug-Latn-EC",
- "rai": "rai-Latn-ZZ",
- "raj": "raj-Deva-IN",
- "rao": "rao-Latn-ZZ",
- "rcf": "rcf-Latn-RE",
- "rej": "rej-Latn-ID",
- "rel": "rel-Latn-ZZ",
- "res": "res-Latn-ZZ",
- "rgn": "rgn-Latn-IT",
- "rhg": "rhg-Arab-ZZ",
- "ria": "ria-Latn-IN",
- "rif": "rif-Tfng-MA",
- "rif-NL": "rif-Latn-NL",
- "rjs": "rjs-Deva-NP",
- "rkt": "rkt-Beng-BD",
- "rm": "rm-Latn-CH",
- "rmf": "rmf-Latn-FI",
- "rmo": "rmo-Latn-CH",
- "rmt": "rmt-Arab-IR",
- "rmu": "rmu-Latn-SE",
- "rn": "rn-Latn-BI",
- "rna": "rna-Latn-ZZ",
- "rng": "rng-Latn-MZ",
- "ro": "ro-Latn-RO",
- "rob": "rob-Latn-ID",
- "rof": "rof-Latn-TZ",
- "roo": "roo-Latn-ZZ",
- "rro": "rro-Latn-ZZ",
- "rtm": "rtm-Latn-FJ",
- "ru": "ru-Cyrl-RU",
- "rue": "rue-Cyrl-UA",
- "rug": "rug-Latn-SB",
- "rw": "rw-Latn-RW",
- "rwk": "rwk-Latn-TZ",
- "rwo": "rwo-Latn-ZZ",
- "ryu": "ryu-Kana-JP",
- "sa": "sa-Deva-IN",
- "saf": "saf-Latn-GH",
- "sah": "sah-Cyrl-RU",
- "saq": "saq-Latn-KE",
- "sas": "sas-Latn-ID",
- "sat": "sat-Latn-IN",
- "saz": "saz-Saur-IN",
- "sba": "sba-Latn-ZZ",
- "sbe": "sbe-Latn-ZZ",
- "sbp": "sbp-Latn-TZ",
- "sc": "sc-Latn-IT",
- "sck": "sck-Deva-IN",
- "scl": "scl-Arab-ZZ",
- "scn": "scn-Latn-IT",
- "sco": "sco-Latn-GB",
- "scs": "scs-Latn-CA",
- "sd": "sd-Arab-PK",
- "sd-Deva": "sd-Deva-IN",
- "sd-Khoj": "sd-Khoj-IN",
- "sd-Sind": "sd-Sind-IN",
- "sdc": "sdc-Latn-IT",
- "sdh": "sdh-Arab-IR",
- "se": "se-Latn-NO",
- "sef": "sef-Latn-CI",
- "seh": "seh-Latn-MZ",
- "sei": "sei-Latn-MX",
- "ses": "ses-Latn-ML",
- "sg": "sg-Latn-CF",
- "sga": "sga-Ogam-IE",
- "sgs": "sgs-Latn-LT",
- "sgw": "sgw-Ethi-ZZ",
- "sgz": "sgz-Latn-ZZ",
- "shi": "shi-Tfng-MA",
- "shk": "shk-Latn-ZZ",
- "shn": "shn-Mymr-MM",
- "shu": "shu-Arab-ZZ",
- "si": "si-Sinh-LK",
- "sid": "sid-Latn-ET",
- "sig": "sig-Latn-ZZ",
- "sil": "sil-Latn-ZZ",
- "sim": "sim-Latn-ZZ",
- "sjr": "sjr-Latn-ZZ",
- "sk": "sk-Latn-SK",
- "skc": "skc-Latn-ZZ",
- "skr": "skr-Arab-PK",
- "sks": "sks-Latn-ZZ",
- "sl": "sl-Latn-SI",
- "sld": "sld-Latn-ZZ",
- "sli": "sli-Latn-PL",
- "sll": "sll-Latn-ZZ",
- "sly": "sly-Latn-ID",
- "sm": "sm-Latn-WS",
- "sma": "sma-Latn-SE",
- "smj": "smj-Latn-SE",
- "smn": "smn-Latn-FI",
- "smp": "smp-Samr-IL",
- "smq": "smq-Latn-ZZ",
- "sms": "sms-Latn-FI",
- "sn": "sn-Latn-ZW",
- "snc": "snc-Latn-ZZ",
- "snk": "snk-Latn-ML",
- "snp": "snp-Latn-ZZ",
- "snx": "snx-Latn-ZZ",
- "sny": "sny-Latn-ZZ",
- "so": "so-Latn-SO",
- "sok": "sok-Latn-ZZ",
- "soq": "soq-Latn-ZZ",
- "sou": "sou-Thai-TH",
- "soy": "soy-Latn-ZZ",
- "spd": "spd-Latn-ZZ",
- "spl": "spl-Latn-ZZ",
- "sps": "sps-Latn-ZZ",
- "sq": "sq-Latn-AL",
- "sr": "sr-Cyrl-RS",
- "sr-ME": "sr-Latn-ME",
- "sr-RO": "sr-Latn-RO",
- "sr-RU": "sr-Latn-RU",
- "sr-TR": "sr-Latn-TR",
- "srb": "srb-Sora-IN",
- "srn": "srn-Latn-SR",
- "srr": "srr-Latn-SN",
- "srx": "srx-Deva-IN",
- "ss": "ss-Latn-ZA",
- "ssd": "ssd-Latn-ZZ",
- "ssg": "ssg-Latn-ZZ",
- "ssy": "ssy-Latn-ER",
- "st": "st-Latn-ZA",
- "stk": "stk-Latn-ZZ",
- "stq": "stq-Latn-DE",
- "su": "su-Latn-ID",
- "sua": "sua-Latn-ZZ",
- "sue": "sue-Latn-ZZ",
- "suk": "suk-Latn-TZ",
- "sur": "sur-Latn-ZZ",
- "sus": "sus-Latn-GN",
- "sv": "sv-Latn-SE",
- "sw": "sw-Latn-TZ",
- "swb": "swb-Arab-YT",
- "swc": "swc-Latn-CD",
- "swg": "swg-Latn-DE",
- "swp": "swp-Latn-ZZ",
- "swv": "swv-Deva-IN",
- "sxn": "sxn-Latn-ID",
- "sxw": "sxw-Latn-ZZ",
- "syl": "syl-Beng-BD",
- "syr": "syr-Syrc-IQ",
- "szl": "szl-Latn-PL",
- "ta": "ta-Taml-IN",
- "taj": "taj-Deva-NP",
- "tal": "tal-Latn-ZZ",
- "tan": "tan-Latn-ZZ",
- "taq": "taq-Latn-ZZ",
- "tbc": "tbc-Latn-ZZ",
- "tbd": "tbd-Latn-ZZ",
- "tbf": "tbf-Latn-ZZ",
- "tbg": "tbg-Latn-ZZ",
- "tbo": "tbo-Latn-ZZ",
- "tbw": "tbw-Latn-PH",
- "tbz": "tbz-Latn-ZZ",
- "tci": "tci-Latn-ZZ",
- "tcy": "tcy-Knda-IN",
- "tdd": "tdd-Tale-CN",
- "tdg": "tdg-Deva-NP",
- "tdh": "tdh-Deva-NP",
- "te": "te-Telu-IN",
- "ted": "ted-Latn-ZZ",
- "tem": "tem-Latn-SL",
- "teo": "teo-Latn-UG",
- "tet": "tet-Latn-TL",
- "tfi": "tfi-Latn-ZZ",
- "tg": "tg-Cyrl-TJ",
- "tg-Arab": "tg-Arab-PK",
- "tg-PK": "tg-Arab-PK",
- "tgc": "tgc-Latn-ZZ",
- "tgo": "tgo-Latn-ZZ",
- "tgu": "tgu-Latn-ZZ",
- "th": "th-Thai-TH",
- "thl": "thl-Deva-NP",
- "thq": "thq-Deva-NP",
- "thr": "thr-Deva-NP",
- "ti": "ti-Ethi-ET",
- "tif": "tif-Latn-ZZ",
- "tig": "tig-Ethi-ER",
- "tik": "tik-Latn-ZZ",
- "tim": "tim-Latn-ZZ",
- "tio": "tio-Latn-ZZ",
- "tiv": "tiv-Latn-NG",
- "tk": "tk-Latn-TM",
- "tkl": "tkl-Latn-TK",
- "tkr": "tkr-Latn-AZ",
- "tkt": "tkt-Deva-NP",
- "tl": "tl-Latn-PH",
- "tlf": "tlf-Latn-ZZ",
- "tlx": "tlx-Latn-ZZ",
- "tly": "tly-Latn-AZ",
- "tmh": "tmh-Latn-NE",
- "tmy": "tmy-Latn-ZZ",
- "tn": "tn-Latn-ZA",
- "tnh": "tnh-Latn-ZZ",
- "to": "to-Latn-TO",
- "tof": "tof-Latn-ZZ",
- "tog": "tog-Latn-MW",
- "toq": "toq-Latn-ZZ",
- "tpi": "tpi-Latn-PG",
- "tpm": "tpm-Latn-ZZ",
- "tpz": "tpz-Latn-ZZ",
- "tqo": "tqo-Latn-ZZ",
- "tr": "tr-Latn-TR",
- "tru": "tru-Latn-TR",
- "trv": "trv-Latn-TW",
- "trw": "trw-Arab-ZZ",
- "ts": "ts-Latn-ZA",
- "tsd": "tsd-Grek-GR",
- "tsf": "tsf-Deva-NP",
- "tsg": "tsg-Latn-PH",
- "tsj": "tsj-Tibt-BT",
- "tsw": "tsw-Latn-ZZ",
- "tt": "tt-Cyrl-RU",
- "ttd": "ttd-Latn-ZZ",
- "tte": "tte-Latn-ZZ",
- "ttj": "ttj-Latn-UG",
- "ttr": "ttr-Latn-ZZ",
- "tts": "tts-Thai-TH",
- "ttt": "ttt-Latn-AZ",
- "tuh": "tuh-Latn-ZZ",
- "tul": "tul-Latn-ZZ",
- "tum": "tum-Latn-MW",
- "tuq": "tuq-Latn-ZZ",
- "tvd": "tvd-Latn-ZZ",
- "tvl": "tvl-Latn-TV",
- "tvu": "tvu-Latn-ZZ",
- "twh": "twh-Latn-ZZ",
- "twq": "twq-Latn-NE",
- "txg": "txg-Tang-CN",
- "ty": "ty-Latn-PF",
- "tya": "tya-Latn-ZZ",
- "tyv": "tyv-Cyrl-RU",
- "tzm": "tzm-Latn-MA",
- "ubu": "ubu-Latn-ZZ",
- "udm": "udm-Cyrl-RU",
- "ug": "ug-Arab-CN",
- "ug-Cyrl": "ug-Cyrl-KZ",
- "ug-KZ": "ug-Cyrl-KZ",
- "ug-MN": "ug-Cyrl-MN",
- "uga": "uga-Ugar-SY",
- "uk": "uk-Cyrl-UA",
- "uli": "uli-Latn-FM",
- "umb": "umb-Latn-AO",
- "und": "en-Latn-US",
- "und-002": "en-Latn-NG",
- "und-003": "en-Latn-US",
- "und-005": "pt-Latn-BR",
- "und-009": "en-Latn-AU",
- "und-011": "en-Latn-NG",
- "und-013": "es-Latn-MX",
- "und-014": "sw-Latn-TZ",
- "und-015": "ar-Arab-EG",
- "und-017": "sw-Latn-CD",
- "und-018": "en-Latn-ZA",
- "und-019": "en-Latn-US",
- "und-021": "en-Latn-US",
- "und-029": "es-Latn-CU",
- "und-030": "zh-Hans-CN",
- "und-034": "hi-Deva-IN",
- "und-035": "id-Latn-ID",
- "und-039": "it-Latn-IT",
- "und-053": "en-Latn-AU",
- "und-054": "en-Latn-PG",
- "und-057": "en-Latn-GU",
- "und-061": "sm-Latn-WS",
- "und-142": "zh-Hans-CN",
- "und-143": "uz-Latn-UZ",
- "und-145": "ar-Arab-SA",
- "und-150": "ru-Cyrl-RU",
- "und-151": "ru-Cyrl-RU",
- "und-154": "en-Latn-GB",
- "und-155": "de-Latn-DE",
- "und-419": "es-Latn-419",
- "und-AD": "ca-Latn-AD",
- "und-Adlm": "ff-Adlm-GN",
- "und-AE": "ar-Arab-AE",
- "und-AF": "fa-Arab-AF",
- "und-Aghb": "lez-Aghb-RU",
- "und-Ahom": "aho-Ahom-IN",
- "und-AL": "sq-Latn-AL",
- "und-AM": "hy-Armn-AM",
- "und-AO": "pt-Latn-AO",
- "und-AQ": "und-Latn-AQ",
- "und-AR": "es-Latn-AR",
- "und-Arab": "ar-Arab-EG",
- "und-Arab-CC": "ms-Arab-CC",
- "und-Arab-CN": "ug-Arab-CN",
- "und-Arab-GB": "ks-Arab-GB",
- "und-Arab-ID": "ms-Arab-ID",
- "und-Arab-IN": "ur-Arab-IN",
- "und-Arab-KH": "cja-Arab-KH",
- "und-Arab-MN": "kk-Arab-MN",
- "und-Arab-MU": "ur-Arab-MU",
- "und-Arab-NG": "ha-Arab-NG",
- "und-Arab-PK": "ur-Arab-PK",
- "und-Arab-TG": "apd-Arab-TG",
- "und-Arab-TH": "mfa-Arab-TH",
- "und-Arab-TJ": "fa-Arab-TJ",
- "und-Arab-TR": "az-Arab-TR",
- "und-Arab-YT": "swb-Arab-YT",
- "und-Armi": "arc-Armi-IR",
- "und-Armn": "hy-Armn-AM",
- "und-AS": "sm-Latn-AS",
- "und-AT": "de-Latn-AT",
- "und-Avst": "ae-Avst-IR",
- "und-AW": "nl-Latn-AW",
- "und-AX": "sv-Latn-AX",
- "und-AZ": "az-Latn-AZ",
- "und-BA": "bs-Latn-BA",
- "und-Bali": "ban-Bali-ID",
- "und-Bamu": "bax-Bamu-CM",
- "und-Bass": "bsq-Bass-LR",
- "und-Batk": "bbc-Batk-ID",
- "und-BD": "bn-Beng-BD",
- "und-BE": "nl-Latn-BE",
- "und-Beng": "bn-Beng-BD",
- "und-BF": "fr-Latn-BF",
- "und-BG": "bg-Cyrl-BG",
- "und-BH": "ar-Arab-BH",
- "und-Bhks": "sa-Bhks-IN",
- "und-BI": "rn-Latn-BI",
- "und-BJ": "fr-Latn-BJ",
- "und-BL": "fr-Latn-BL",
- "und-BN": "ms-Latn-BN",
- "und-BO": "es-Latn-BO",
- "und-Bopo": "zh-Bopo-TW",
- "und-BQ": "pap-Latn-BQ",
- "und-BR": "pt-Latn-BR",
- "und-Brah": "pka-Brah-IN",
- "und-Brai": "fr-Brai-FR",
- "und-BT": "dz-Tibt-BT",
- "und-Bugi": "bug-Bugi-ID",
- "und-Buhd": "bku-Buhd-PH",
- "und-BV": "und-Latn-BV",
- "und-BY": "be-Cyrl-BY",
- "und-Cakm": "ccp-Cakm-BD",
- "und-Cans": "cr-Cans-CA",
- "und-Cari": "xcr-Cari-TR",
- "und-CD": "sw-Latn-CD",
- "und-CF": "fr-Latn-CF",
- "und-CG": "fr-Latn-CG",
- "und-CH": "de-Latn-CH",
- "und-Cham": "cjm-Cham-VN",
- "und-Cher": "chr-Cher-US",
- "und-CI": "fr-Latn-CI",
- "und-CL": "es-Latn-CL",
- "und-CM": "fr-Latn-CM",
- "und-CN": "zh-Hans-CN",
- "und-CO": "es-Latn-CO",
- "und-Copt": "cop-Copt-EG",
- "und-CP": "und-Latn-CP",
- "und-Cprt": "grc-Cprt-CY",
- "und-CR": "es-Latn-CR",
- "und-CU": "es-Latn-CU",
- "und-CV": "pt-Latn-CV",
- "und-CW": "pap-Latn-CW",
- "und-CY": "el-Grek-CY",
- "und-Cyrl": "ru-Cyrl-RU",
- "und-Cyrl-AL": "mk-Cyrl-AL",
- "und-Cyrl-BA": "sr-Cyrl-BA",
- "und-Cyrl-GE": "ab-Cyrl-GE",
- "und-Cyrl-GR": "mk-Cyrl-GR",
- "und-Cyrl-MD": "uk-Cyrl-MD",
- "und-Cyrl-PL": "be-Cyrl-PL",
- "und-Cyrl-RO": "bg-Cyrl-RO",
- "und-Cyrl-SK": "uk-Cyrl-SK",
- "und-Cyrl-TR": "kbd-Cyrl-TR",
- "und-Cyrl-XK": "sr-Cyrl-XK",
- "und-CZ": "cs-Latn-CZ",
- "und-DE": "de-Latn-DE",
- "und-Deva": "hi-Deva-IN",
- "und-Deva-BT": "ne-Deva-BT",
- "und-Deva-FJ": "hif-Deva-FJ",
- "und-Deva-MU": "bho-Deva-MU",
- "und-Deva-PK": "btv-Deva-PK",
- "und-DJ": "aa-Latn-DJ",
- "und-DK": "da-Latn-DK",
- "und-DO": "es-Latn-DO",
- "und-Dupl": "fr-Dupl-FR",
- "und-DZ": "ar-Arab-DZ",
- "und-EA": "es-Latn-EA",
- "und-EC": "es-Latn-EC",
- "und-EE": "et-Latn-EE",
- "und-EG": "ar-Arab-EG",
- "und-Egyp": "egy-Egyp-EG",
- "und-EH": "ar-Arab-EH",
- "und-Elba": "sq-Elba-AL",
- "und-ER": "ti-Ethi-ER",
- "und-ES": "es-Latn-ES",
- "und-ET": "am-Ethi-ET",
- "und-Ethi": "am-Ethi-ET",
- "und-EU": "en-Latn-GB",
- "und-EZ": "de-Latn-EZ",
- "und-FI": "fi-Latn-FI",
- "und-FO": "fo-Latn-FO",
- "und-FR": "fr-Latn-FR",
- "und-GA": "fr-Latn-GA",
- "und-GE": "ka-Geor-GE",
- "und-Geor": "ka-Geor-GE",
- "und-GF": "fr-Latn-GF",
- "und-GH": "ak-Latn-GH",
- "und-GL": "kl-Latn-GL",
- "und-Glag": "cu-Glag-BG",
- "und-GN": "fr-Latn-GN",
- "und-Goth": "got-Goth-UA",
- "und-GP": "fr-Latn-GP",
- "und-GQ": "es-Latn-GQ",
- "und-GR": "el-Grek-GR",
- "und-Gran": "sa-Gran-IN",
- "und-Grek": "el-Grek-GR",
- "und-Grek-TR": "bgx-Grek-TR",
- "und-GS": "und-Latn-GS",
- "und-GT": "es-Latn-GT",
- "und-Gujr": "gu-Gujr-IN",
- "und-Guru": "pa-Guru-IN",
- "und-GW": "pt-Latn-GW",
- "und-Hanb": "zh-Hanb-TW",
- "und-Hang": "ko-Hang-KR",
- "und-Hani": "zh-Hani-CN",
- "und-Hano": "hnn-Hano-PH",
- "und-Hans": "zh-Hans-CN",
- "und-Hant": "zh-Hant-TW",
- "und-Hant-CN": "yue-Hant-CN",
- "und-Hatr": "mis-Hatr-IQ",
- "und-Hebr": "he-Hebr-IL",
- "und-Hebr-CA": "yi-Hebr-CA",
- "und-Hebr-GB": "yi-Hebr-GB",
- "und-Hebr-SE": "yi-Hebr-SE",
- "und-Hebr-UA": "yi-Hebr-UA",
- "und-Hebr-US": "yi-Hebr-US",
- "und-Hira": "ja-Hira-JP",
- "und-HK": "zh-Hant-HK",
- "und-Hluw": "hlu-Hluw-TR",
- "und-HM": "und-Latn-HM",
- "und-Hmng": "hnj-Hmng-LA",
- "und-HN": "es-Latn-HN",
- "und-HR": "hr-Latn-HR",
- "und-HT": "ht-Latn-HT",
- "und-HU": "hu-Latn-HU",
- "und-Hung": "hu-Hung-HU",
- "und-IC": "es-Latn-IC",
- "und-ID": "id-Latn-ID",
- "und-IL": "he-Hebr-IL",
- "und-IN": "hi-Deva-IN",
- "und-IQ": "ar-Arab-IQ",
- "und-IR": "fa-Arab-IR",
- "und-IS": "is-Latn-IS",
- "und-IT": "it-Latn-IT",
- "und-Ital": "ett-Ital-IT",
- "und-Jamo": "ko-Jamo-KR",
- "und-Java": "jv-Java-ID",
- "und-JO": "ar-Arab-JO",
- "und-JP": "ja-Jpan-JP",
- "und-Jpan": "ja-Jpan-JP",
- "und-Kali": "eky-Kali-MM",
- "und-Kana": "ja-Kana-JP",
- "und-KE": "sw-Latn-KE",
- "und-KG": "ky-Cyrl-KG",
- "und-KH": "km-Khmr-KH",
- "und-Khar": "pra-Khar-PK",
- "und-Khmr": "km-Khmr-KH",
- "und-Khoj": "sd-Khoj-IN",
- "und-KM": "ar-Arab-KM",
- "und-Knda": "kn-Knda-IN",
- "und-Kore": "ko-Kore-KR",
- "und-KP": "ko-Kore-KP",
- "und-KR": "ko-Kore-KR",
- "und-Kthi": "bho-Kthi-IN",
- "und-KW": "ar-Arab-KW",
- "und-KZ": "ru-Cyrl-KZ",
- "und-LA": "lo-Laoo-LA",
- "und-Lana": "nod-Lana-TH",
- "und-Laoo": "lo-Laoo-LA",
- "und-Latn-AF": "tk-Latn-AF",
- "und-Latn-AM": "ku-Latn-AM",
- "und-Latn-CN": "za-Latn-CN",
- "und-Latn-CY": "tr-Latn-CY",
- "und-Latn-DZ": "fr-Latn-DZ",
- "und-Latn-ET": "en-Latn-ET",
- "und-Latn-GE": "ku-Latn-GE",
- "und-Latn-IR": "tk-Latn-IR",
- "und-Latn-KM": "fr-Latn-KM",
- "und-Latn-MA": "fr-Latn-MA",
- "und-Latn-MK": "sq-Latn-MK",
- "und-Latn-MM": "kac-Latn-MM",
- "und-Latn-MO": "pt-Latn-MO",
- "und-Latn-MR": "fr-Latn-MR",
- "und-Latn-RU": "krl-Latn-RU",
- "und-Latn-SY": "fr-Latn-SY",
- "und-Latn-TN": "fr-Latn-TN",
- "und-Latn-TW": "trv-Latn-TW",
- "und-Latn-UA": "pl-Latn-UA",
- "und-LB": "ar-Arab-LB",
- "und-Lepc": "lep-Lepc-IN",
- "und-LI": "de-Latn-LI",
- "und-Limb": "lif-Limb-IN",
- "und-Lina": "lab-Lina-GR",
- "und-Linb": "grc-Linb-GR",
- "und-Lisu": "lis-Lisu-CN",
- "und-LK": "si-Sinh-LK",
- "und-LS": "st-Latn-LS",
- "und-LT": "lt-Latn-LT",
- "und-LU": "fr-Latn-LU",
- "und-LV": "lv-Latn-LV",
- "und-LY": "ar-Arab-LY",
- "und-Lyci": "xlc-Lyci-TR",
- "und-Lydi": "xld-Lydi-TR",
- "und-MA": "ar-Arab-MA",
- "und-Mahj": "hi-Mahj-IN",
- "und-Mand": "myz-Mand-IR",
- "und-Mani": "xmn-Mani-CN",
- "und-Marc": "bo-Marc-CN",
- "und-MC": "fr-Latn-MC",
- "und-MD": "ro-Latn-MD",
- "und-ME": "sr-Latn-ME",
- "und-Mend": "men-Mend-SL",
- "und-Merc": "xmr-Merc-SD",
- "und-Mero": "xmr-Mero-SD",
- "und-MF": "fr-Latn-MF",
- "und-MG": "mg-Latn-MG",
- "und-MK": "mk-Cyrl-MK",
- "und-ML": "bm-Latn-ML",
- "und-Mlym": "ml-Mlym-IN",
- "und-MM": "my-Mymr-MM",
- "und-MN": "mn-Cyrl-MN",
- "und-MO": "zh-Hant-MO",
- "und-Modi": "mr-Modi-IN",
- "und-Mong": "mn-Mong-CN",
- "und-MQ": "fr-Latn-MQ",
- "und-MR": "ar-Arab-MR",
- "und-Mroo": "mro-Mroo-BD",
- "und-MT": "mt-Latn-MT",
- "und-Mtei": "mni-Mtei-IN",
- "und-MU": "mfe-Latn-MU",
- "und-Mult": "skr-Mult-PK",
- "und-MV": "dv-Thaa-MV",
- "und-MX": "es-Latn-MX",
- "und-MY": "ms-Latn-MY",
- "und-Mymr": "my-Mymr-MM",
- "und-Mymr-IN": "kht-Mymr-IN",
- "und-Mymr-TH": "mnw-Mymr-TH",
- "und-MZ": "pt-Latn-MZ",
- "und-NA": "af-Latn-NA",
- "und-Narb": "xna-Narb-SA",
- "und-Nbat": "arc-Nbat-JO",
- "und-NC": "fr-Latn-NC",
- "und-NE": "ha-Latn-NE",
- "und-Newa": "new-Newa-NP",
- "und-NI": "es-Latn-NI",
- "und-Nkoo": "man-Nkoo-GN",
- "und-NL": "nl-Latn-NL",
- "und-NO": "nb-Latn-NO",
- "und-NP": "ne-Deva-NP",
- "und-Ogam": "sga-Ogam-IE",
- "und-Olck": "sat-Olck-IN",
- "und-OM": "ar-Arab-OM",
- "und-Orkh": "otk-Orkh-MN",
- "und-Orya": "or-Orya-IN",
- "und-Osge": "osa-Osge-US",
- "und-Osma": "so-Osma-SO",
- "und-PA": "es-Latn-PA",
- "und-Palm": "arc-Palm-SY",
- "und-Pauc": "ctd-Pauc-MM",
- "und-PE": "es-Latn-PE",
- "und-Perm": "kv-Perm-RU",
- "und-PF": "fr-Latn-PF",
- "und-PG": "tpi-Latn-PG",
- "und-PH": "fil-Latn-PH",
- "und-Phag": "lzh-Phag-CN",
- "und-Phli": "pal-Phli-IR",
- "und-Phlp": "pal-Phlp-CN",
- "und-Phnx": "phn-Phnx-LB",
- "und-PK": "ur-Arab-PK",
- "und-PL": "pl-Latn-PL",
- "und-Plrd": "hmd-Plrd-CN",
- "und-PM": "fr-Latn-PM",
- "und-PR": "es-Latn-PR",
- "und-Prti": "xpr-Prti-IR",
- "und-PS": "ar-Arab-PS",
- "und-PT": "pt-Latn-PT",
- "und-PW": "pau-Latn-PW",
- "und-PY": "gn-Latn-PY",
- "und-QA": "ar-Arab-QA",
- "und-QO": "en-Latn-IO",
- "und-RE": "fr-Latn-RE",
- "und-Rjng": "rej-Rjng-ID",
- "und-RO": "ro-Latn-RO",
- "und-RS": "sr-Cyrl-RS",
- "und-RU": "ru-Cyrl-RU",
- "und-Runr": "non-Runr-SE",
- "und-RW": "rw-Latn-RW",
- "und-SA": "ar-Arab-SA",
- "und-Samr": "smp-Samr-IL",
- "und-Sarb": "xsa-Sarb-YE",
- "und-Saur": "saz-Saur-IN",
- "und-SC": "fr-Latn-SC",
- "und-SD": "ar-Arab-SD",
- "und-SE": "sv-Latn-SE",
- "und-Sgnw": "ase-Sgnw-US",
- "und-Shaw": "en-Shaw-GB",
- "und-Shrd": "sa-Shrd-IN",
- "und-SI": "sl-Latn-SI",
- "und-Sidd": "sa-Sidd-IN",
- "und-Sind": "sd-Sind-IN",
- "und-Sinh": "si-Sinh-LK",
- "und-SJ": "nb-Latn-SJ",
- "und-SK": "sk-Latn-SK",
- "und-SM": "it-Latn-SM",
- "und-SN": "fr-Latn-SN",
- "und-SO": "so-Latn-SO",
- "und-Sora": "srb-Sora-IN",
- "und-SR": "nl-Latn-SR",
- "und-ST": "pt-Latn-ST",
- "und-Sund": "su-Sund-ID",
- "und-SV": "es-Latn-SV",
- "und-SY": "ar-Arab-SY",
- "und-Sylo": "syl-Sylo-BD",
- "und-Syrc": "syr-Syrc-IQ",
- "und-Tagb": "tbw-Tagb-PH",
- "und-Takr": "doi-Takr-IN",
- "und-Tale": "tdd-Tale-CN",
- "und-Talu": "khb-Talu-CN",
- "und-Taml": "ta-Taml-IN",
- "und-Tang": "txg-Tang-CN",
- "und-Tavt": "blt-Tavt-VN",
- "und-TD": "fr-Latn-TD",
- "und-Telu": "te-Telu-IN",
- "und-TF": "fr-Latn-TF",
- "und-Tfng": "zgh-Tfng-MA",
- "und-TG": "fr-Latn-TG",
- "und-Tglg": "fil-Tglg-PH",
- "und-TH": "th-Thai-TH",
- "und-Thaa": "dv-Thaa-MV",
- "und-Thai": "th-Thai-TH",
- "und-Thai-CN": "lcp-Thai-CN",
- "und-Thai-KH": "kdt-Thai-KH",
- "und-Thai-LA": "kdt-Thai-LA",
- "und-Tibt": "bo-Tibt-CN",
- "und-Tirh": "mai-Tirh-IN",
- "und-TJ": "tg-Cyrl-TJ",
- "und-TK": "tkl-Latn-TK",
- "und-TL": "pt-Latn-TL",
- "und-TM": "tk-Latn-TM",
- "und-TN": "ar-Arab-TN",
- "und-TO": "to-Latn-TO",
- "und-TR": "tr-Latn-TR",
- "und-TV": "tvl-Latn-TV",
- "und-TW": "zh-Hant-TW",
- "und-TZ": "sw-Latn-TZ",
- "und-UA": "uk-Cyrl-UA",
- "und-UG": "sw-Latn-UG",
- "und-Ugar": "uga-Ugar-SY",
- "und-UY": "es-Latn-UY",
- "und-UZ": "uz-Latn-UZ",
- "und-VA": "it-Latn-VA",
- "und-Vaii": "vai-Vaii-LR",
- "und-VE": "es-Latn-VE",
- "und-VN": "vi-Latn-VN",
- "und-VU": "bi-Latn-VU",
- "und-Wara": "hoc-Wara-IN",
- "und-WF": "fr-Latn-WF",
- "und-WS": "sm-Latn-WS",
- "und-XK": "sq-Latn-XK",
- "und-Xpeo": "peo-Xpeo-IR",
- "und-Xsux": "akk-Xsux-IQ",
- "und-YE": "ar-Arab-YE",
- "und-Yiii": "ii-Yiii-CN",
- "und-YT": "fr-Latn-YT",
- "und-ZW": "sn-Latn-ZW",
- "unr": "unr-Beng-IN",
- "unr-Deva": "unr-Deva-NP",
- "unr-NP": "unr-Deva-NP",
- "unx": "unx-Beng-IN",
- "ur": "ur-Arab-PK",
- "uri": "uri-Latn-ZZ",
- "urt": "urt-Latn-ZZ",
- "urw": "urw-Latn-ZZ",
- "usa": "usa-Latn-ZZ",
- "utr": "utr-Latn-ZZ",
- "uvh": "uvh-Latn-ZZ",
- "uvl": "uvl-Latn-ZZ",
- "uz": "uz-Latn-UZ",
- "uz-AF": "uz-Arab-AF",
- "uz-Arab": "uz-Arab-AF",
- "uz-CN": "uz-Cyrl-CN",
- "vag": "vag-Latn-ZZ",
- "vai": "vai-Vaii-LR",
- "van": "van-Latn-ZZ",
- "ve": "ve-Latn-ZA",
- "vec": "vec-Latn-IT",
- "vep": "vep-Latn-RU",
- "vi": "vi-Latn-VN",
- "vic": "vic-Latn-SX",
- "viv": "viv-Latn-ZZ",
- "vls": "vls-Latn-BE",
- "vmf": "vmf-Latn-DE",
- "vmw": "vmw-Latn-MZ",
- "vo": "vo-Latn-001",
- "vot": "vot-Latn-RU",
- "vro": "vro-Latn-EE",
- "vun": "vun-Latn-TZ",
- "vut": "vut-Latn-ZZ",
- "wa": "wa-Latn-BE",
- "wae": "wae-Latn-CH",
- "waj": "waj-Latn-ZZ",
- "wal": "wal-Ethi-ET",
- "wan": "wan-Latn-ZZ",
- "war": "war-Latn-PH",
- "wbp": "wbp-Latn-AU",
- "wbq": "wbq-Telu-IN",
- "wbr": "wbr-Deva-IN",
- "wci": "wci-Latn-ZZ",
- "wer": "wer-Latn-ZZ",
- "wgi": "wgi-Latn-ZZ",
- "whg": "whg-Latn-ZZ",
- "wib": "wib-Latn-ZZ",
- "wiu": "wiu-Latn-ZZ",
- "wiv": "wiv-Latn-ZZ",
- "wja": "wja-Latn-ZZ",
- "wji": "wji-Latn-ZZ",
- "wls": "wls-Latn-WF",
- "wmo": "wmo-Latn-ZZ",
- "wnc": "wnc-Latn-ZZ",
- "wni": "wni-Arab-KM",
- "wnu": "wnu-Latn-ZZ",
- "wo": "wo-Latn-SN",
- "wob": "wob-Latn-ZZ",
- "wos": "wos-Latn-ZZ",
- "wrs": "wrs-Latn-ZZ",
- "wsk": "wsk-Latn-ZZ",
- "wtm": "wtm-Deva-IN",
- "wuu": "wuu-Hans-CN",
- "wuv": "wuv-Latn-ZZ",
- "wwa": "wwa-Latn-ZZ",
- "xav": "xav-Latn-BR",
- "xbi": "xbi-Latn-ZZ",
- "xcr": "xcr-Cari-TR",
- "xes": "xes-Latn-ZZ",
- "xh": "xh-Latn-ZA",
- "xla": "xla-Latn-ZZ",
- "xlc": "xlc-Lyci-TR",
- "xld": "xld-Lydi-TR",
- "xmf": "xmf-Geor-GE",
- "xmn": "xmn-Mani-CN",
- "xmr": "xmr-Merc-SD",
- "xna": "xna-Narb-SA",
- "xnr": "xnr-Deva-IN",
- "xog": "xog-Latn-UG",
- "xon": "xon-Latn-ZZ",
- "xpr": "xpr-Prti-IR",
- "xrb": "xrb-Latn-ZZ",
- "xsa": "xsa-Sarb-YE",
- "xsi": "xsi-Latn-ZZ",
- "xsm": "xsm-Latn-ZZ",
- "xsr": "xsr-Deva-NP",
- "xwe": "xwe-Latn-ZZ",
- "yam": "yam-Latn-ZZ",
- "yao": "yao-Latn-MZ",
- "yap": "yap-Latn-FM",
- "yas": "yas-Latn-ZZ",
- "yat": "yat-Latn-ZZ",
- "yav": "yav-Latn-CM",
- "yay": "yay-Latn-ZZ",
- "yaz": "yaz-Latn-ZZ",
- "yba": "yba-Latn-ZZ",
- "ybb": "ybb-Latn-CM",
- "yby": "yby-Latn-ZZ",
- "yer": "yer-Latn-ZZ",
- "ygr": "ygr-Latn-ZZ",
- "ygw": "ygw-Latn-ZZ",
- "yi": "yi-Hebr-001",
- "yko": "yko-Latn-ZZ",
- "yle": "yle-Latn-ZZ",
- "ylg": "ylg-Latn-ZZ",
- "yll": "yll-Latn-ZZ",
- "yml": "yml-Latn-ZZ",
- "yo": "yo-Latn-NG",
- "yon": "yon-Latn-ZZ",
- "yrb": "yrb-Latn-ZZ",
- "yre": "yre-Latn-ZZ",
- "yrl": "yrl-Latn-BR",
- "yss": "yss-Latn-ZZ",
- "yua": "yua-Latn-MX",
- "yue": "yue-Hant-HK",
- "yue-CN": "yue-Hans-CN",
- "yue-Hans": "yue-Hans-CN",
- "yuj": "yuj-Latn-ZZ",
- "yut": "yut-Latn-ZZ",
- "yuw": "yuw-Latn-ZZ",
- "za": "za-Latn-CN",
- "zag": "zag-Latn-SD",
- "zdj": "zdj-Arab-KM",
- "zea": "zea-Latn-NL",
- "zgh": "zgh-Tfng-MA",
- "zh": "zh-Hans-CN",
- "zh-AU": "zh-Hant-AU",
- "zh-BN": "zh-Hant-BN",
- "zh-Bopo": "zh-Bopo-TW",
- "zh-GB": "zh-Hant-GB",
- "zh-GF": "zh-Hant-GF",
- "zh-Hanb": "zh-Hanb-TW",
- "zh-Hant": "zh-Hant-TW",
- "zh-HK": "zh-Hant-HK",
- "zh-ID": "zh-Hant-ID",
- "zh-MO": "zh-Hant-MO",
- "zh-MY": "zh-Hant-MY",
- "zh-PA": "zh-Hant-PA",
- "zh-PF": "zh-Hant-PF",
- "zh-PH": "zh-Hant-PH",
- "zh-SR": "zh-Hant-SR",
- "zh-TH": "zh-Hant-TH",
- "zh-TW": "zh-Hant-TW",
- "zh-US": "zh-Hant-US",
- "zh-VN": "zh-Hant-VN",
- "zia": "zia-Latn-ZZ",
- "zlm": "zlm-Latn-TG",
- "zmi": "zmi-Latn-MY",
- "zne": "zne-Latn-ZZ",
- "zu": "zu-Latn-ZA",
- "zza": "zza-Latn-TR"
- }
- }
-}
diff --git a/contrib/pai_vscode/i18n/cldr/plurals.json b/contrib/pai_vscode/i18n/cldr/plurals.json
deleted file mode 100644
index 07f38b40c1..0000000000
--- a/contrib/pai_vscode/i18n/cldr/plurals.json
+++ /dev/null
@@ -1,857 +0,0 @@
-{
- "supplemental": {
- "version": {
- "_number": "$Revision: 12805 $",
- "_unicodeVersion": "9.0.0",
- "_cldrVersion": "30.0.3"
- },
- "plurals-type-cardinal": {
- "af": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ak": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "am": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ar": {
- "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …",
- "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …",
- "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ars": {
- "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …",
- "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …",
- "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "as": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "asa": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ast": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "az": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "be": {
- "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …",
- "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …",
- "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …"
- },
- "bem": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bez": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bg": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bh": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bm": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bn": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bo": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "br": {
- "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …",
- "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …",
- "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …",
- "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …",
- "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …"
- },
- "brx": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "bs": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ca": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ce": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "cgg": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "chr": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ckb": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "cs": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4",
- "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
- },
- "cy": {
- "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000",
- "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000",
- "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "da": {
- "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "de": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "dsb": {
- "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …",
- "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "dv": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "dz": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ee": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "el": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "en": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "eo": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "es": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "et": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "eu": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "fa": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ff": {
- "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "fi": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "fil": {
- "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"
- },
- "fo": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "fr": {
- "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "fur": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "fy": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ga": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000",
- "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000",
- "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "gd": {
- "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000",
- "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000",
- "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00",
- "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "gl": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "gsw": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "gu": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "guw": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "gv": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …",
- "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …",
- "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …",
- "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …"
- },
- "ha": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "haw": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "he": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-two": "i = 2 and v = 0 @integer 2",
- "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …",
- "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "hi": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "hr": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "hsb": {
- "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …",
- "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "hu": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "hy": {
- "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "id": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ig": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ii": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "in": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "is": {
- "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "it": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "iu": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "iw": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-two": "i = 2 and v = 0 @integer 2",
- "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …",
- "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ja": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "jbo": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "jgo": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ji": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "jmc": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "jv": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "jw": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ka": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kab": {
- "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kaj": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kcg": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kde": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kea": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kk": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kkj": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kl": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "km": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kn": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ko": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ks": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ksb": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ksh": {
- "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ku": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "kw": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ky": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lag": {
- "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
- "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lb": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lg": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lkt": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ln": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lo": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lt": {
- "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …",
- "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …",
- "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "lv": {
- "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …"
- },
- "mas": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "mg": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "mgo": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "mk": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-other": " @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ml": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "mn": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "mo": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"
- },
- "mr": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ms": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "mt": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …",
- "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …",
- "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "my": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nah": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "naq": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nb": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nd": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ne": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nl": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nn": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nnh": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "no": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nqo": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nr": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nso": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ny": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "nyn": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "om": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "or": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "os": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "pa": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "pap": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "pl": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …",
- "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …",
- "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "prg": {
- "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …"
- },
- "ps": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "pt": {
- "pluralRule-count-one": "n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "pt-PT": {
- "pluralRule-count-one": "n = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "rm": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ro": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"
- },
- "rof": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "root": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ru": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …",
- "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …",
- "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "rwk": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sah": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "saq": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sdh": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "se": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "seh": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ses": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sg": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sh": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "shi": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00",
- "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "si": {
- "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sk": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4",
- "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
- },
- "sl": {
- "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …",
- "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …",
- "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
- },
- "sma": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "smi": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "smj": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "smn": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sms": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
- "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sn": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "so": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sq": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sr": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
- "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ss": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ssy": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "st": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sv": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "sw": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "syr": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ta": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "te": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "teo": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "th": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ti": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "tig": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "tk": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "tl": {
- "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
- "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"
- },
- "tn": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "to": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "tr": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ts": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "tzm": {
- "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0",
- "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ug": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "uk": {
- "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …",
- "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …",
- "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …",
- "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ur": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "uz": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "ve": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "vi": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "vo": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "vun": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "wa": {
- "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "wae": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "wo": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "xh": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "xog": {
- "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "yi": {
- "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
- "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "yo": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "yue": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "zh": {
- "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- },
- "zu": {
- "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
- "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
- }
- }
- }
-}
diff --git a/contrib/pai_vscode/i18n/common.json b/contrib/pai_vscode/i18n/common.json
deleted file mode 100644
index 3a6d4942b9..0000000000
--- a/contrib/pai_vscode/i18n/common.json
+++ /dev/null
@@ -1,276 +0,0 @@
-{
- "root": {
- "common.yes": "Yes",
- "common.no": "No",
- "common.upload": "Upload",
- "common.finish": "Finish",
- "common.cancel": "Cancel",
- "common.edit": "Edit",
- "common.cluster.storage": "Cluster storage",
- "common.personal.storage": "Personal storage",
- "common.workspace.nofolder": "No folder in workspace.",
- "util.editjson.validationerror": "Invalid Format: {0}",
- "util.editjson.parseerror": "Invalid JSON: {0}",
- "util.editjson.prompt": "Please edit the configuration and click 'Finish' to save.",
- "util.editjson.previousexpired": "Last session of editing configuration has expired.",
- "util.validatejson.error": "Error validating JSON",
- "util.openexternally.fail": "Failed to open default browser: {0}",
- "util.remote.editor.save.prompt": "Please make sure you will change the remote file and click 'Upload' to save.",
- "cluster.activate.error": "{0}\nPAI cluster configurations has been cleared due to validation error(s). You may edit the previous configurations.",
- "cluster.activate.fix.discard": "Discard Configurations",
- "cluster.version.warning": "The version of the configurations is higher than supported. Would you like to edit or reset them?",
- "cluster.pick.prompt": "Please choose an existing cluster...",
- "cluster.add.host.prompt": "Please enter the host of OpenPAI cluster...",
- "cluster.add.host.empty": "Host is empty...",
- "cluster.add.host.invalidchar": "Host should not contain '/'...",
- "cluster.add.personal.storage.prompt": "Please enter the name of the storage...",
- "cluster.add.personal.storage.empty": "Name is empty...",
- "cluster.add.personal.storage.invalidchar": "Name should not contain '/'...",
- "cluster.add.checkstatus": "Checking status of OpenPAI cluster",
- "cluster.add.checkprotocolversion": "Checking the protocol version of OpenPAI cluster",
- "cluster.login.openPortal": "Open OpenPAI Portal",
- "cluster.login.success": "Login OpenPAI cluster success, please back to VSCode to finish the config.",
- "cluster.login.failed": "Login OpenPAI cluster failed.",
- "cluster.login.timeout": "Browser did not connect to local server within 10 seconds. Please copy the token from the website.",
- "treeview.node.edit": "Edit Configuration...",
- "treeview.node.storage": "Open Storage...",
- "treeview.node.storage.clipboard": "Double click to copy url to clipboard",
- "treeview.node.storage.openfile": "Double click to open",
- "treeview.node.storage.server-type": "Server Type",
- "treeview.node.storage.mount-point": "Mount Point",
- "treeview.node.storage.load-error": "Load error",
- "treeview.node.storage.load-more": "Double click to load more items",
- "treeview.node.openPortal": "Open Web Portal...",
- "treeview.node.listjob": "List Jobs Externally...",
- "treeview.node.create-config": "Create Job Config...",
- "treeview.node.submitjob": "Submit Job...",
- "treeview.node.simulate": "Simulate Job Running...",
- "treeview.hdfs.select-cluster.label": "Double click to connect to a PAI cluster's HDFS...",
- "treeview.node.openhdfs": "Open HDFS",
- "treeview.storage.cluster-root.label": "Cluster share storage",
- "treeview.storage.personal-root.label": "Personal storage",
- "treeview.storage.mount.point": "Mount Point",
- "treeview.storage.nfs.setup.mount.point": "Double click to setup NFS mount point",
- "treeview.storage.nfs.mount": "Double click to mount NFS",
- "treeview.storage.error": "Failed to load storage: {0}",
- "treeview.storage.nfs.sudo.prompt": "Please enter the password and click 'Finish' to mount.",
- "treeview.joblist.recent": "Recent Submitted Jobs from VS Code",
- "treeview.joblist.all": "All Jobs",
- "treeview.joblist.view": "View Job Detail",
- "treeview.joblist.more": "View More...",
- "treeview.joblist.error": "Failed to load job list: {0}",
- "container.hdfs.mkdir.prompt": "Please enter a folder name",
- "container.hdfs.mkdir.cancelled": "Cancelled creating new folder",
- "container.azure.blob.mkdir.prompt": "Please enter a folder name",
- "container.azure.blob.mkdir.cancelled": "Cancelled creating new folder",
- "container.nfs.mount.failed": "Mount NFS failed",
- "container.nfs.mount.finish": "Mount NFS finish",
- "container.nfs.mount.unsupport.os": "Mount NFS failed: Unsupport OS",
- "container.nfs.mount.invalid.device.name": "Mound path should be device name (e.g. Z:)",
- "container.nfs.mount.path.empty": "Mount path is empty...",
- "hdfs.workspace.title": "HDFS Explorer - {0}",
- "hdfs.progress": "Transferring file - {0}% ({1} bytes / {2} bytes)",
- "hdfs.downloading": "Downloading {0}",
- "hdfs.copying": "Copying {0} to {1}",
- "hdfs.uploading": "Uploading {0}",
- "hdfs.open.prompt": "{0} has been opened in the workspace.",
- "hdfs.upload.status": "Uploading to HDFS - {0} / {1}",
- "hdfs.upload.error": "Failed uploading to HDFS: {0}",
- "hdfs.upload.success": "Files was successfully uploaded",
- "storage.create.folder.error": "Failed creating folder: {0}",
- "storage.create.folder.success": "Folder was successfully created",
- "storage.upload.status": "Uploading to storage - {0} / {1}",
- "storage.upload.error": "Failed uploading to storage: {0}",
- "storage.upload.success": "Files was successfully uploaded",
- "storage.download.status": "Uploading from storage - {0} / {1}",
- "storage.download.error": "Failed downloading from storage: {0}",
- "storage.download.success": "Files was successfully downloaded",
- "storage.open.error": "File open error: {0}",
- "storage.delete.error": "Failed deleting files: {0}",
- "storage.delete.success": "Files was successfully deleted",
- "storage.dialog.label.upload-files": "Upload Files...",
- "storage.dialog.label.upload-folders": "Upload Folders...",
- "storage.dialog.label.download": "Download Here",
- "storage.nfs.mount.point.prompt": "Please enter the path...",
- "storage.upload.pick.prompt": "Please choose a storage...",
- "hdfs.read.cancelled": "Cancelled downloading file from HDFS.",
- "hdfs.write.cancelled": "Cancelled uploading file to HDFS.",
- "webpage.dashboard.webportal": "OpenPAI Web Portal",
- "webpage.dashboard.pick.prompt": "Please choose the site to open",
- "webpage.dashboard.pick.error": "No site selected. Canceled.",
- "job.prepare.status": "PAI: Preparing for job submission",
- "job.prepare.cluster.cancelled": "No cluster selected, job submission cancelled.",
- "job.prepare.config.prompt": "Please select a PAI job config json file",
- "job.prepare.config.invalid": "Invalid job config json file, job submission cancelled.",
- "job.prepare.config.yaml-not-support": "Current operation don't support YAML job config file, job submission cancelled.",
- "job.prepare.config.cancelled": "No job config selected, job submission cancelled.",
- "job.prepare.upload.prompt": "Enable auto uploading of code?",
- "job.prepare.upload.storage.type": "Please choose a storage type.",
- "job.prepare.upload.yes.detail": "The extension will upload your project files to PAI job config's code dir automatically.",
- "job.prepare.upload.undefined.hint": "Code auto uploading is enabled by default, you can disable it in user settings (ctrl+,).",
- "job.prepare.generate-job-name.prompt": "Enable generating job name suffix?",
- "job.prepare.generate-job-name.yes.detail": "The extension will add a random suffix to your job name when submitting job.",
- "job.prepare.generate-job-name.undefined.hint": "Job name suffix generating is enabled by default, you can disable it in user settings (ctrl+,).",
- "job.upload.status": "PAI: Uploading code",
- "job.upload.progress": "PAI: Uploading code - {0} / {1}",
- "job.upload.error": "Error occurred while uploading code: {0}",
- "job.upload.invalid-code-dir": "Auto uploading doesn't support code dir with url scheme hdfs:// or webhdfs://. Please use environment variable $PAI_DEFAULT_FS_URI instead.",
- "job.request.status": "PAI: Submitting job",
- "job.submission.error": "Error occurred while submitting job: {0}",
- "job.submission.success": "Successfully submitted job.",
- "job.submission.success.open": "Open job page",
- "job.simulation.status": "PAI: Generating the job simulation dockerfile",
- "job.simulation.error": "Error occurred while generating the job simulation dockerfile: {0}",
- "job.simulation.success": "Dockerfile has been generated in {0}/{1}. Please run {2} to simulate the job running. (docker is required)",
- "job.simulation.success-dialog.reveal": "Reveal in Explorer",
- "job.simulation.success-dialog.run-first-task": "Simulate first task in VS Code terminal",
- "job.simulation.unsupported-env-var": "Job Simulation:Command {0} contains unsupported pai env variable",
- "job.runtime.plugin.select": "Please choose a runtime plugin...",
- "job.runtime.plugin.user-ssh.enable": "Enable user SSH?",
- "job.runtime.plugin.insert": "OpenPAI: Insert a runtime plugin config.",
- "job.runtime.plugin.ssh.key.select": "Please choose your SSH public key.",
- "job.runtime.plugin.ssh.key.generator": "Generate new SSH key pair",
- "job.runtime.plugin.ssh.key.import": "Import from file",
- "job.runtime.plugin.ssh.key.input": "Input manully",
- "job.config.component.select": "Please choose a job config component."
- },
- "en": {},
- "zh": {
- "common.yes": "是",
- "common.no": "否",
- "common.upload": "上传",
- "common.finish": "完成",
- "common.cancel": "取消",
- "common.edit": "编辑",
- "common.cluster.storage": "集群存储",
- "common.personal.storage": "个人存储",
- "common.workspace.nofolder": "当前工作区中没有文件夹。",
- "util.editjson.validationerror": "格式错误:{0}",
- "util.editjson.parseerror": "非法 JSON:{0}",
- "util.editjson.prompt": "请修改配置,然后点击“完成”来保存。",
- "util.editjson.previousexpired": "上一个修改配置的会话已经过期。",
- "util.validatejson.error": "JSON 校验失败",
- "util.openexternally.fail": "无法启动默认浏览器:{0}",
- "util.remote.editor.save.prompt": "请确认你将修改这个远程文件,点击“上传”来保存。",
- "cluster.activate.error": "{0}\nPAI 集群配置校验失败,已经重置,您也可以编辑原有的配置",
- "cluster.activate.fix.discard": "放弃原有配置",
- "cluster.version.warning": "配置的版本高于当前支持的版本。您希望编辑或重置配置吗?",
- "cluster.pick.prompt": "请选择一个集群……",
- "cluster.add.host.prompt": "请输入 OpenPAI 集群地址……",
- "cluster.add.host.empty": "集群地址为空……",
- "cluster.add.host.invalidchar": "集群地址不应该包含 '/'……",
- "cluster.add.personal.storage.prompt": "请输入添加的存储的名字……",
- "cluster.add.personal.storage.empty": "输入的名字地址为空……",
- "cluster.add.personal.storage.invalidchar": "输入的名字不应该包含 '/'……",
- "cluster.add.checkstatus": "正在检查 OpenPAI 集群状态",
- "cluster.add.checkprotocolversion": "正在检查 OpenPAI protocol 版本",
- "cluster.login.openPortal": "打开 OpenPAI 门户",
- "cluster.login.success": "登录 OpenPAI 集群成功,请回到 VSCode 完成设置。",
- "cluster.login.failed": "登录 OpenPAI 集群失败。",
- "cluster.login.timeout": "浏览器没有在10秒内连上服务器,请您从网页上复制 token.",
- "treeview.node.edit": "编辑配置...",
- "treeview.node.storage": "打开存储...",
- "treeview.node.storage.clipboard": "双击复制url到剪贴板",
- "treeview.node.storage.openfile": "双击打开",
- "treeview.node.storage.server-type": "服务器类型",
- "treeview.node.storage.mount-point": "挂载点",
- "treeview.node.storage.load-error": "加载出错",
- "treeview.node.storage.load-more": "双击加载更多",
- "treeview.node.openPortal": "打开 OpenPAI 门户...",
- "treeview.node.listjob": "在浏览器里打开任务列表...",
- "treeview.node.create-config": "创建任务配置文件...",
- "treeview.node.submitjob": "提交任务...",
- "treeview.node.simulate": "模拟任务执行...",
- "treeview.hdfs.select-cluster.label": "双击以连接到 PAI 集群的 HDFS...",
- "treeview.node.openhdfs": "打开 HDFS",
- "treeview.storage.cluster-root.label": "集群共享存储",
- "treeview.storage.personal-root.label": "用户个人存储",
- "treeview.storage.mount.point": "Mount Point",
- "treeview.storage.nfs.setup.mount.point": "双击以设置 NFS mount point",
- "treeview.storage.nfs.mount": "双击以挂载 NFS",
- "treeview.storage.error": "载入存储时发生错误: {0}",
- "treeview.storage.nfs.sudo.prompt": "请输入密码后点击‘完成’以完成挂载。 ",
- "treeview.joblist.recent": "近期从 VS Code 提交的任务",
- "treeview.joblist.all": "所有任务",
- "treeview.joblist.view": "查看任务详情",
- "treeview.joblist.more": "显示更多...",
- "treeview.joblist.error": "载入任务列表时发生错误:{0}",
- "container.hdfs.mkdir.prompt": "请输入文件夹名",
- "container.hdfs.mkdir.cancelled": "新建文件夹操作已取消",
- "container.azure.blob.mkdir.prompt": "请输入文件夹名",
- "container.azure.blob.mkdir.cancelled": "新建文件夹操作已取消",
- "container.nfs.mount.failed": "挂载 NFS 失败",
- "container.nfs.mount.finish": "挂载 NFS 完成",
- "container.nfs.mount.unsupport.os": "挂载 NFS 失败: Unsupport OS",
- "container.nfs.mount.invalid.device.name": "挂载地址应为驱动器名字(例如 Z:)",
- "container.nfs.mount.path.empty": "挂载地址为空...",
- "hdfs.workspace.title": "HDFS 浏览器 - {0}",
- "hdfs.progress": "正在传输 - {0}% ({1} 字节 / {2} 字节)",
- "hdfs.downloading": "正在下载 {0}",
- "hdfs.copying": "正在将 {0} 复制到 {1}",
- "hdfs.uploading": "正在上传 {0}",
- "hdfs.open.prompt": "{0} 已经被载入到当前工作区。",
- "hdfs.upload.status": "上传到 HDFS - {0} / {1}",
- "hdfs.upload.error": "上传到 HDFS 时发生错误:{0}",
- "hdfs.upload.success": "文件已被成功上传",
- "storage.create.folder.error": "新建文件夹失败: {0}",
- "storage.create.folder.success": "新建文件夹成功",
- "storage.upload.status": "上传到存储服务器 - {0} / {1}",
- "storage.upload.error": "上传时发生错误: {0}",
- "storage.upload.success": "文件已被成功上传",
- "storage.download.status": "从服务器上下载 - {0} / {1}",
- "storage.download.error": "下载时发生错误: {0}",
- "storage.download.success": "文件下载成功",
- "storage.open.error": "下载时发生错误: {0}",
- "storage.delete.error": "删除时发生错误: {0}",
- "storage.delete.success": "文件已成功删除",
- "storage.dialog.label.upload-files": "上传文件...",
- "storage.dialog.label.upload-folders": "上传文件夹...",
- "storage.dialog.label.download": "下载到这里",
- "storage.nfs.mount.point.prompt": "请输入路径...",
- "storage.upload.pick.prompt": "请选择一个存储……",
- "hdfs.read.cancelled": "HDFS 下载操作已取消。",
- "hdfs.write.cancelled": "HDFS 上传操作已取消。",
- "webpage.dashboard.webportal": "OpenPAI 门户",
- "webpage.dashboard.pick.prompt": "请选择要打开的网站",
- "webpage.dashboard.pick.error": "未选择网站,操作已取消",
- "webpage.joblist": "任务列表",
- "job.prepare.status": "PAI: 正在准备提交任务",
- "job.prepare.cluster.cancelled": "未选择集群,任务提交已被取消。",
- "job.prepare.config.prompt": "请选择一个 PAI 任务配置 JSON",
- "job.prepare.config.invalid": "任务配置文件不合法,任务提交已被取消。",
- "job.prepare.config.yaml-not-support": "当前操作不支持YAML任务配置文件,任务提交已被取消。",
- "job.prepare.config.cancelled": "未选择任务配置文件,任务提交已被取消。",
- "job.prepare.upload.prompt": "是否启用代码自动上传功能?",
- "job.prepare.upload.storage.type": "请选择存储的类型。",
- "job.prepare.upload.yes.detail": "插件将会自动上传你的项目文件至 PAI 任务配置中的 code dir",
- "job.prepare.upload.undefined.hint": "代码自动上传功能默认生效, 你可以在用户设置 (ctrl + ,) 中禁用该功能",
- "job.prepare.generate-job-name.prompt": "是否启用自动生成任务名称后缀功能?",
- "job.prepare.generate-job-name.yes.detail": "插件将会在提交任务时,自动在任务名称后追加随机字符串,以避免任务名称重复",
- "job.prepare.generate-job-name.undefined.hint": "自动生成任务名称后缀功能默认生效, 你可以在用户设置 (ctrl + ,) 中禁用该功能",
- "job.upload.status": "PAI: 正在上传代码",
- "job.upload.progress": "PAI: 代码上传 - {0} / {1}",
- "job.upload.error": "代码上传时发生错误:{0}",
- "job.upload.invalid-code-dir": "自动上传不支持 hdfs:// 及 webhdfs:// 形式的 code dir, 请使用环境变量 $PAI_DEFAULT_FS_URI",
- "job.submission.name-exist": "提交失败,已存在同名任务,是否启用自动生成任务名称后缀功能?",
- "job.submission.name-exist.enable": "启用并重新提交",
- "job.submission.error": "提交任务时发生错误:{0}",
- "job.submission.success": "任务已成功提交。",
- "job.submission.success.open": "打开任务详情页面",
- "job.request.status": "PAI: 正在提交任务",
- "job.simulation.status": "PAI: 正在生成模拟任务 Dockerfile",
- "job.simulation.error": "生成模拟任务 Dockerfile 时发生错误:{0}",
- "job.simulation.success": "Dockerfile 已经自动生成在 {0}/{1}。 请执行脚本 {2} 来模拟执行任务。 (需要 docker)",
- "job.simulation.success-dialog.reveal": "在浏览器中打开",
- "job.simulation.success-dialog.run-first-task": "在 VS Code 终端中模拟第一个任务",
- "job.simulation.unsupported-env-var": "模拟运行:命令 {0} 中包含未支持的PAI环境变量",
- "job.runtime.plugin.select": "请选择一个 runtime plugin...",
- "job.runtime.plugin.user-ssh.enable": "是否开启用户 SSH ?",
- "job.runtime.plugin.insert": "OpenPAI: 插入一个 runtime plugin 设置",
- "job.runtime.plugin.ssh.key.select": "请选择你的 SSH 公钥",
- "job.runtime.plugin.ssh.key.generator": "生成新的 SSH 密钥对",
- "job.runtime.plugin.ssh.key.import": "从文件中载入 SSH 公钥",
- "job.runtime.plugin.ssh.key.input": "手动输入",
- "job.config.component.select": "请选择一个任务配置文件中的组件"
- }
-}
diff --git a/contrib/pai_vscode/icons/PAI_dark.png b/contrib/pai_vscode/icons/PAI_dark.png
deleted file mode 100644
index 708805fb42..0000000000
Binary files a/contrib/pai_vscode/icons/PAI_dark.png and /dev/null differ
diff --git a/contrib/pai_vscode/icons/PAI_light.png b/contrib/pai_vscode/icons/PAI_light.png
deleted file mode 100644
index 708805fb42..0000000000
Binary files a/contrib/pai_vscode/icons/PAI_light.png and /dev/null differ
diff --git a/contrib/pai_vscode/icons/add_dark.svg b/contrib/pai_vscode/icons/add_dark.svg
deleted file mode 100644
index 3475c1e196..0000000000
--- a/contrib/pai_vscode/icons/add_dark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/add_light.svg b/contrib/pai_vscode/icons/add_light.svg
deleted file mode 100644
index bdecdb0e45..0000000000
--- a/contrib/pai_vscode/icons/add_light.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/compute_target_dark.svg b/contrib/pai_vscode/icons/compute_target_dark.svg
deleted file mode 100644
index 5afd429185..0000000000
--- a/contrib/pai_vscode/icons/compute_target_dark.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/compute_target_light.svg b/contrib/pai_vscode/icons/compute_target_light.svg
deleted file mode 100644
index 2295e6fe1a..0000000000
--- a/contrib/pai_vscode/icons/compute_target_light.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/config.svg b/contrib/pai_vscode/icons/config.svg
deleted file mode 100644
index 2a47c0efe6..0000000000
--- a/contrib/pai_vscode/icons/config.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
diff --git a/contrib/pai_vscode/icons/connected_dark.svg b/contrib/pai_vscode/icons/connected_dark.svg
deleted file mode 100644
index 40823fe86e..0000000000
--- a/contrib/pai_vscode/icons/connected_dark.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/connected_light.svg b/contrib/pai_vscode/icons/connected_light.svg
deleted file mode 100644
index f5e49e4acf..0000000000
--- a/contrib/pai_vscode/icons/connected_light.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/deployment.svg b/contrib/pai_vscode/icons/deployment.svg
deleted file mode 100644
index 4c6cddd223..0000000000
--- a/contrib/pai_vscode/icons/deployment.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/ellipsis.svg b/contrib/pai_vscode/icons/ellipsis.svg
deleted file mode 100644
index 9a76b9fab8..0000000000
--- a/contrib/pai_vscode/icons/ellipsis.svg
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
diff --git a/contrib/pai_vscode/icons/error.svg b/contrib/pai_vscode/icons/error.svg
deleted file mode 100644
index 8e08d84186..0000000000
--- a/contrib/pai_vscode/icons/error.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/file.svg b/contrib/pai_vscode/icons/file.svg
deleted file mode 100644
index 169af9ae18..0000000000
--- a/contrib/pai_vscode/icons/file.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/folder.svg b/contrib/pai_vscode/icons/folder.svg
deleted file mode 100644
index 7387525ec4..0000000000
--- a/contrib/pai_vscode/icons/folder.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/history.svg b/contrib/pai_vscode/icons/history.svg
deleted file mode 100644
index 9ef41c37cb..0000000000
--- a/contrib/pai_vscode/icons/history.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
diff --git a/contrib/pai_vscode/icons/latest.svg b/contrib/pai_vscode/icons/latest.svg
deleted file mode 100644
index 3d882c1878..0000000000
--- a/contrib/pai_vscode/icons/latest.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/loading.svg b/contrib/pai_vscode/icons/loading.svg
deleted file mode 100644
index e762f06d5e..0000000000
--- a/contrib/pai_vscode/icons/loading.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
diff --git a/contrib/pai_vscode/icons/loading_dark.svg b/contrib/pai_vscode/icons/loading_dark.svg
deleted file mode 100644
index 7dc1ebd8cf..0000000000
--- a/contrib/pai_vscode/icons/loading_dark.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
diff --git a/contrib/pai_vscode/icons/octicon/file.svg b/contrib/pai_vscode/icons/octicon/file.svg
deleted file mode 100644
index f4efbc238b..0000000000
--- a/contrib/pai_vscode/icons/octicon/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/octicon/file_dark.svg b/contrib/pai_vscode/icons/octicon/file_dark.svg
deleted file mode 100644
index 6abbe9f171..0000000000
--- a/contrib/pai_vscode/icons/octicon/file_dark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/octicon/home.svg b/contrib/pai_vscode/icons/octicon/home.svg
deleted file mode 100644
index 8799a322c1..0000000000
--- a/contrib/pai_vscode/icons/octicon/home.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/octicon/home_dark.svg b/contrib/pai_vscode/icons/octicon/home_dark.svg
deleted file mode 100644
index 1d033a9d85..0000000000
--- a/contrib/pai_vscode/icons/octicon/home_dark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/octicon/terminal.svg b/contrib/pai_vscode/icons/octicon/terminal.svg
deleted file mode 100644
index b6df312df4..0000000000
--- a/contrib/pai_vscode/icons/octicon/terminal.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/octicon/terminal_dark.svg b/contrib/pai_vscode/icons/octicon/terminal_dark.svg
deleted file mode 100644
index fb45d72a62..0000000000
--- a/contrib/pai_vscode/icons/octicon/terminal_dark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/ok.svg b/contrib/pai_vscode/icons/ok.svg
deleted file mode 100644
index 3efeb56727..0000000000
--- a/contrib/pai_vscode/icons/ok.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/pai_container.png b/contrib/pai_vscode/icons/pai_container.png
deleted file mode 100644
index b071bcc917..0000000000
Binary files a/contrib/pai_vscode/icons/pai_container.png and /dev/null differ
diff --git a/contrib/pai_vscode/icons/queue.svg b/contrib/pai_vscode/icons/queue.svg
deleted file mode 100644
index a0577b519e..0000000000
--- a/contrib/pai_vscode/icons/queue.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/refresh_dark.svg b/contrib/pai_vscode/icons/refresh_dark.svg
deleted file mode 100644
index d79fdaa4e8..0000000000
--- a/contrib/pai_vscode/icons/refresh_dark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/refresh_light.svg b/contrib/pai_vscode/icons/refresh_light.svg
deleted file mode 100644
index e034574819..0000000000
--- a/contrib/pai_vscode/icons/refresh_light.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/run.svg b/contrib/pai_vscode/icons/run.svg
deleted file mode 100644
index a37ceb2579..0000000000
--- a/contrib/pai_vscode/icons/run.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/run_history_dark.svg b/contrib/pai_vscode/icons/run_history_dark.svg
deleted file mode 100644
index c1f1eb6252..0000000000
--- a/contrib/pai_vscode/icons/run_history_dark.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/run_history_light.svg b/contrib/pai_vscode/icons/run_history_light.svg
deleted file mode 100644
index dfb79230c8..0000000000
--- a/contrib/pai_vscode/icons/run_history_light.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/stop.svg b/contrib/pai_vscode/icons/stop.svg
deleted file mode 100644
index 6b6668df9c..0000000000
--- a/contrib/pai_vscode/icons/stop.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/icons/storage.svg b/contrib/pai_vscode/icons/storage.svg
deleted file mode 100644
index 3c2de89c24..0000000000
--- a/contrib/pai_vscode/icons/storage.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/contrib/pai_vscode/installYamlExtension.js b/contrib/pai_vscode/installYamlExtension.js
deleted file mode 100644
index 94d8570823..0000000000
--- a/contrib/pai_vscode/installYamlExtension.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License in the project root for license information.
- * @author Microsoft
- */
-
-var fs = require('fs');
-var getDirName = require('path').dirname;
-var os = require('os');
-var path = require('path');
-var request = require('request');
-var unzipper = require('unzipper');
-
-function mkDirByPathSync(targetDir) {
- const sep = path.sep;
- const initDir = path.isAbsolute(targetDir) ? sep : '';
- return targetDir.split(sep).reduce((parentDir, childDir) => {
- const curDir = path.resolve(parentDir, childDir);
- try {
- fs.mkdirSync(curDir);
- } catch (err) {
- if (err.code === 'EEXIST') {
- return curDir;
- }
- }
- return curDir;
- }, initDir);
-}
-
-async function downloadAndUnzipExtension(url, dest) {
- request(url).pipe(unzipper.Parse()).on('entry', function (entry) {
- if (entry.path.startsWith('extension/')) {
- var newPath = path.resolve(dest, entry.path.slice(10));
- mkDirByPathSync(getDirName(newPath));
- entry.pipe(fs.createWriteStream(newPath));
- } else if (entry.path === 'extension.vsixmanifest') {
- var newPath = path.resolve(dest, entry.path.slice(9));
- mkDirByPathSync(getDirName(newPath));
- entry.pipe(fs.createWriteStream(newPath));
- } else {
- entry.autodrain();
- }
- });
-}
-
-function installVscodeYamlExtension() {
- const version = '0.4.0';
- const extensionPath = path.join(os.homedir(), `.vscode/extensions/redhat.vscode-yaml-${version}`);
- const url = `https://github.com/redhat-developer/vscode-yaml/releases/download/0.4.0/redhat.vscode-yaml-0.4.0.vsix`;
- downloadAndUnzipExtension(url, extensionPath);
-}
-
-installVscodeYamlExtension();
diff --git a/contrib/pai_vscode/package.json b/contrib/pai_vscode/package.json
deleted file mode 100644
index b4b6076d4d..0000000000
--- a/contrib/pai_vscode/package.json
+++ /dev/null
@@ -1,679 +0,0 @@
-{
- "name": "pai-vscode",
- "displayName": "OpenPAI VS Code Client",
- "description": "Interact with Open Platform for AI (OpenPAI) from inside your editor",
- "version": "0.3.0",
- "publisher": "OpenPAIVSCodeClient",
- "preview": true,
- "icon": "assets/pai_logo.png",
- "repository": {
- "url": "https://github.com/Microsoft/pai"
- },
- "bugs": {
- "url": "https://github.com/Microsoft/pai/issues"
- },
- "engines": {
- "vscode": "^1.40.0"
- },
- "categories": [
- "Other"
- ],
- "keywords": [
- "AI",
- "Deep Learning",
- "PAI"
- ],
- "activationEvents": [
- "*",
- "onFileSystem:webhdfs"
- ],
- "main": "./out/extension",
- "contributes": {
- "commands": [
- {
- "command": "paiext.cluster.dashboard.open",
- "title": "%paiext.cluster.dashboard.open%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.job.list",
- "title": "%paiext.cluster.job.list%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.job.submit",
- "title": "%paiext.cluster.job.submit%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.job.simulate",
- "title": "%paiext.cluster.job.simulate%",
- "category": "PAI"
- },
- {
- "command": "paiext.job.config.insert.menu",
- "title": "%paiext.job.config.insert.menu%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.job.create-config",
- "title": "%paiext.cluster.job.create-config%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.job.create-config-v1",
- "title": "%paiext.cluster.job.create-config-v1%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.job.create-config-v2",
- "title": "%paiext.cluster.job.create-config-v2%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.delete",
- "title": "%paiext.cluster.delete%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.edit",
- "title": "%paiext.cluster.edit%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.personal.delete",
- "title": "%paiext.storage.personal.delete%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.personal.edit",
- "title": "%paiext.storage.personal.edit%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.open",
- "title": "%paiext.storage.open%",
- "category": "PAI"
- },
- {
- "command": "paiext.hdfs.upload.files",
- "title": "%paiext.hdfs.upload.files%",
- "category": "PAI"
- },
- {
- "command": "paiext.hdfs.upload.folders",
- "title": "%paiext.hdfs.upload.folders%",
- "category": "PAI"
- },
- {
- "command": "paiext.hdfs.download",
- "title": "%paiext.hdfs.download%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.delete",
- "title": "%paiext.storage.delete%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.upload.files",
- "title": "%paiext.storage.upload.files%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.create.folder",
- "title": "%paiext.storage.create.folder%",
- "category": "PAI"
- },
- {
- "command": "paiext.storage.download",
- "title": "%paiext.storage.download%",
- "category": "PAI"
- },
- {
- "command": "paiext.container.joblist.refresh",
- "title": "%paiext.common.refresh%",
- "icon": {
- "light": "icons/refresh_light.svg",
- "dark": "icons/refresh_dark.svg"
- },
- "category": "PAI"
- },
- {
- "command": "paiext.container.joblist.more",
- "title": "%paiext.cluster.job.more%",
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.refresh",
- "title": "%paiext.common.refresh%",
- "icon": {
- "light": "icons/refresh_light.svg",
- "dark": "icons/refresh_dark.svg"
- },
- "category": "PAI"
- },
- {
- "command": "paiext.cluster.add",
- "title": "%paiext.cluster.add%",
- "icon": {
- "light": "icons/add_light.svg",
- "dark": "icons/add_dark.svg"
- },
- "category": "PAI"
- },
- {
- "command": "paiext.storage.personal.add",
- "title": "%paiext.storage.personal.add%",
- "category": "PAI"
- },
- {
- "command": "paiext.container.hdfs.refresh",
- "title": "%paiext.common.refresh%",
- "icon": {
- "light": "icons/refresh_light.svg",
- "dark": "icons/refresh_dark.svg"
- },
- "category": "PAI"
- },
- {
- "command": "paiext.container.hdfs.back",
- "title": "%paiext.container.hdfs.back%",
- "icon": {
- "light": "icons/octicon/home.svg",
- "dark": "icons/octicon/home_dark.svg"
- }
- },
- {
- "command": "paiext.container.storage.refresh",
- "title": "%paiext.common.refresh%",
- "icon": {
- "light": "icons/refresh_light.svg",
- "dark": "icons/refresh_dark.svg"
- },
- "category": "PAI"
- },
- {
- "command": "paiext.container.storage.back",
- "title": "%paiext.container.storage.back%",
- "icon": {
- "light": "icons/octicon/home.svg",
- "dark": "icons/octicon/home_dark.svg"
- }
- },
- {
- "command": "paiext.container.hdfs.delete",
- "title": "%paiext.container.hdfs.delete%"
- },
- {
- "command": "paiext.container.hdfs.mkdir",
- "title": "%paiext.container.hdfs.mkdir%"
- },
- {
- "command": "paiext.job.config.insert.runtime.plugin",
- "title": "%paiext.job.config.insert.runtime.plugin%",
- "category": "PAI"
- }
- ],
- "viewsContainers": {
- "activitybar": [
- {
- "id": "PAIContainer",
- "title": "%container.title%",
- "icon": "icons/pai_container.png"
- }
- ]
- },
- "views": {
- "explorer": [
- {
- "id": "PAIExplorer",
- "name": "%explorer.paiClusterExplorer%"
- }
- ],
- "PAIContainer": [
- {
- "id": "PAIContainerStorage",
- "name": "%container.storage.title%"
- },
- {
- "id": "PAIContainerHDFS",
- "name": "%container.hdfs.title%"
- },
- {
- "id": "PAIContainerJobList",
- "name": "%container.joblist.title%"
- }
- ]
- },
- "menus": {
- "commandPalette": [
- {
- "command": "paiext.cluster.job.list",
- "when": "false"
- },
- {
- "command": "paiext.cluster.refresh",
- "when": "false"
- },
- {
- "command": "paiext.cluster.edit",
- "when": "false"
- },
- {
- "command": "paiext.cluster.delete",
- "when": "false"
- },
- {
- "command": "paiext.container.joblist.refresh",
- "when": "false"
- },
- {
- "command": "paiext.container.joblist.more",
- "when": "false"
- },
- {
- "command": "paiext.hdfs.upload.files",
- "when": "false"
- },
- {
- "command": "paiext.hdfs.upload.folders",
- "when": "false"
- },
- {
- "command": "paiext.hdfs.download",
- "when": "false"
- },
- {
- "command": "paiext.container.hdfs.refresh",
- "when": "false"
- },
- {
- "command": "paiext.container.hdfs.back",
- "when": "false"
- },
- {
- "command": "paiext.container.hdfs.delete",
- "when": "false"
- },
- {
- "command": "paiext.container.hdfs.mkdir",
- "when": "false"
- },
- {
- "command": "paiext.job.config.insert.menu",
- "when": "false"
- },
- {
- "command": "paiext.job.config.insert.runtime.plugin",
- "when": "false"
- },
- {
- "command": "paiext.storage.personal.edit",
- "when": "false"
- },
- {
- "command": "paiext.storage.personal.delete",
- "when": "false"
- },
- {
- "command": "paiext.cluster.job.create-config-v1",
- "when": "false"
- },
- {
- "command": "paiext.cluster.job.create-config-v2",
- "when": "false"
- }
- ],
- "view/title": [
- {
- "command": "paiext.cluster.refresh",
- "when": "view == PAIExplorer",
- "group": "navigation"
- },
- {
- "command": "paiext.cluster.add",
- "when": "view == PAIExplorer",
- "group": "navigation"
- },
- {
- "command": "paiext.container.hdfs.refresh",
- "when": "view == PAIContainerHDFS",
- "group": "navigation"
- },
- {
- "command": "paiext.container.hdfs.back",
- "when": "view == PAIContainerHDFS",
- "group": "navigation"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage",
- "group": "navigation"
- },
- {
- "command": "paiext.container.storage.back",
- "when": "view == PAIContainerStorage",
- "group": "navigation"
- },
- {
- "command": "paiext.container.joblist.refresh",
- "when": "view == PAIContainerJobList",
- "group": "navigation"
- }
- ],
- "explorer/context": [
- {
- "command": "paiext.cluster.job.create-config-v1",
- "when": "resourceLangId =~ /(python)|(cntk)/ && resourceScheme == file"
- },
- {
- "command": "paiext.cluster.job.create-config-v2",
- "when": "resourceLangId =~ /(python)|(cntk)/ && resourceScheme == file"
- },
- {
- "command": "paiext.cluster.job.submit",
- "when": "resourceFilename =~ /\\.(jsonc?|yaml|yml)$/ && resourceScheme == file"
- },
- {
- "command": "paiext.cluster.job.simulate",
- "when": "resourceFilename =~ /\\.(jsonc?|yaml|yml)$/ && resourceScheme == file"
- },
- {
- "command": "paiext.hdfs.download",
- "when": "resourceScheme == webhdfs"
- },
- {
- "command": "paiext.hdfs.upload.files",
- "when": "resourceScheme == webhdfs && !resourceIsFile"
- },
- {
- "command": "paiext.hdfs.upload.folders",
- "when": "resourceScheme == webhdfs && !resourceIsFile"
- }
- ],
- "editor/context": [
- {
- "command": "paiext.cluster.job.create-config-v1",
- "when": "resourceLangId =~ /(python)|(cntk)/ && resourceScheme == file"
- },
- {
- "command": "paiext.cluster.job.create-config-v2",
- "when": "resourceLangId =~ /(python)|(cntk)/ && resourceScheme == file"
- },
- {
- "command": "paiext.cluster.job.submit",
- "when": "resourceFilename =~ /\\.(jsonc?|yaml|yml)$/ && resourceScheme == file"
- },
- {
- "command": "paiext.cluster.job.simulate",
- "when": "resourceFilename =~ /\\.(jsonc?|yaml|yml)?$/ && resourceScheme == file"
- },
- {
- "command": "paiext.job.config.insert.menu",
- "when": "resourceFilename =~ /\\.(yaml|yml)$/ && resourceScheme == file"
- }
- ],
- "view/item/context": [
- {
- "command": "paiext.cluster.edit",
- "when": "view == PAIExplorer && viewItem == PAIConfiguration"
- },
- {
- "command": "paiext.cluster.delete",
- "when": "view == PAIExplorer && viewItem == PAIConfiguration"
- },
- {
- "command": "paiext.storage.personal.edit",
- "when": "view == PAIContainerStorage && viewItem == PAIStoragePersonalItem"
- },
- {
- "command": "paiext.storage.personal.delete",
- "when": "view == PAIContainerStorage && viewItem == PAIStoragePersonalItem"
- },
- {
- "command": "paiext.storage.personal.add",
- "when": "view == PAIContainerStorage && viewItem == PAIStoragePersonalRoot"
- },
- {
- "command": "paiext.container.hdfs.mkdir",
- "when": "view == PAIContainerHDFS && viewItem && viewItem != PAIHdfsFile",
- "group": "1@1"
- },
- {
- "command": "paiext.hdfs.download",
- "when": "view == PAIContainerHDFS && viewItem && viewItem != PAIHdfsRoot",
- "group": "2@1"
- },
- {
- "command": "paiext.hdfs.upload.files",
- "when": "view == PAIContainerHDFS && viewItem && viewItem != PAIHdfsFile",
- "group": "2@2"
- },
- {
- "command": "paiext.hdfs.upload.folders",
- "when": "view == PAIContainerHDFS && viewItem && viewItem != PAIHdfsFile",
- "group": "2@3"
- },
- {
- "command": "paiext.container.hdfs.delete",
- "when": "view == PAIContainerHDFS && viewItem && viewItem != PAIHdfsRoot",
- "group": "3@1"
- },
- {
- "command": "paiext.cluster.job.list",
- "when": "view == PAIContainerJobList && viewItem && viewItem == PAIJobListCluster"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageTeamItem",
- "group": "refresh"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageMountPointItem",
- "group": "refresh"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageFolder",
- "group": "refresh"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageClusterRoot",
- "group": "refresh"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStoragePersonalRoot",
- "group": "refresh"
- },
- {
- "command": "paiext.container.storage.refresh",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStoragePersonalItem",
- "group": "refresh"
- },
- {
- "command": "paiext.storage.delete",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageFile",
- "group": "delete"
- },
- {
- "command": "paiext.storage.delete",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageFolder",
- "group": "delete"
- },
- {
- "command": "paiext.storage.upload.files",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageFolder",
- "group": "upload"
- },
- {
- "command": "paiext.storage.upload.files",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageMountPointItem",
- "group": "upload"
- },
- {
- "command": "paiext.storage.upload.files",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStoragePersonalItem",
- "group": "upload"
- },
- {
- "command": "paiext.storage.create.folder",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageFolder",
- "group": "mkdir"
- },
- {
- "command": "paiext.storage.create.folder",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageMountPointItem",
- "group": "mkdir"
- },
- {
- "command": "paiext.storage.create.folder",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStoragePersonalItem",
- "group": "mkdir"
- },
- {
- "command": "paiext.storage.download",
- "when": "view == PAIContainerStorage && viewItem && viewItem == PAIStorageFile",
- "group": "azure@5"
- }
- ]
- },
- "jsonValidation": [
- {
- "fileMatch": "*.pai.json*",
- "url": "./schemas/pai_job_config.schema.json"
- },
- {
- "fileMatch": "pai_cluster_*.json*",
- "url": "./schemas/pai_cluster.schema.json"
- },
- {
- "fileMatch": "pai_full_configuration.json*",
- "url": "./schemas/pai_configuration.schema.json"
- }
- ],
- "configuration": {
- "title": "%config.title%",
- "properties": {
- "pai.job.upload.enabled": {
- "type": "boolean",
- "description": "%config.job.upload.enabled%",
- "default": null
- },
- "pai.job.upload.exclude": {
- "type": "array",
- "description": "%config.job.upload.exclude%"
- },
- "pai.job.upload.include": {
- "type": "array",
- "description": "%config.job.upload.include%"
- },
- "pai.job.generateJobName.enabled": {
- "type": "boolean",
- "description": "%config.job.generateJobName.enabled%",
- "default": null
- },
- "pai.job.jobList.recentJobsLength": {
- "type": "number",
- "description": "%config.job.jobList.recentJobsLength%",
- "default": 5
- },
- "pai.job.jobList.allJobsPageSize": {
- "type": "number",
- "description": "%config.job.jobList.allJobsPageSize%",
- "default": 20
- },
- "pai.job.jobList.refreshInterval": {
- "type": "number",
- "description": "%config.job.jobList.refreshInterval%",
- "default": 10
- },
- "pai.job.v2.upload": {
- "type": "object",
- "description": "%config.job.v2.upload%",
- "default": null
- },
- "pai.hdfs.location": {
- "type": "string",
- "enum": [
- "sidebar",
- "explorer"
- ],
- "default": "sidebar",
- "description": "%config.hdfs.location%"
- },
- "pai.storage.nfs.mountPoint": {
- "type": "object",
- "default": null
- }
- }
- }
- },
- "extensionDependencies": [
- "redhat.vscode-yaml"
- ],
- "scripts": {
- "vscode:prepublish": "yarn compile",
- "compile": "tsc -p ./",
- "watch": "tsc -watch -p ./",
- "package": "vsce package --yarn",
- "test": "yarn compile && node ./installYamlExtension.js && node ./out/test/runTest.js"
- },
- "devDependencies": {
- "@types/fs-extra": "^5.0.4",
- "@types/globalize": "^0.0.34",
- "@types/globby": "^9.1.0",
- "@types/inversify": "^2.0.33",
- "@types/js-yaml": "^3.12.1",
- "@types/lodash": "^4.14.117",
- "@types/mocha": "^5.2.5",
- "@types/nock": "^9.3.0",
- "@types/node": "^12.12.5",
- "@types/node-rsa": "^1.0.0",
- "@types/opn": "^5.1.0",
- "@types/request": "^2.47.1",
- "@types/request-promise-native": "^1.0.15",
- "@types/semver-compare": "^1.0.0",
- "@types/sshpk": "^1.10.4",
- "@types/uuid": "^3.4.4",
- "@types/vscode": "^1.40.0",
- "mocha": "^7.0.1",
- "nock": "^11.8.2",
- "tslint": "^6.0.0",
- "tslint-microsoft-contrib": "^5.2.1",
- "typescript": "^3.5.1",
- "typescript-tslint-plugin": "^0.4.0",
- "vsce": "^1.73.0",
- "vscode-test": "^1.3.0"
- },
- "dependencies": {
- "@azure/storage-blob": "^12.0.1",
- "ajv": "^6.5.4",
- "fs-extra": "^7.0.0",
- "globalize": "^1.4.0",
- "globby": "^10.0.1",
- "inversify": "^5.0.1",
- "js-yaml": "^3.13.1",
- "json-inline-doc": "^2.0.1",
- "json-schema-ref-parser": "^7.1.3",
- "jsonc-parser": "^2.1.1",
- "lodash": "^4.17.15",
- "node-rsa": "^1.0.7",
- "node-yaml-parser": "^0.0.9",
- "openpai-js-sdk": "microsoft/pai#openpai-js-sdk",
- "opn": "^5.4.0",
- "reflect-metadata": "^0.1.12",
- "request": "^2.88.0",
- "request-promise-native": "^1.0.8",
- "semver-compare": "^1.0.0",
- "sshpk": "^1.16.1",
- "streamifier": "^0.1.1",
- "unixify": "^1.0.0",
- "unzipper": "^0.10.1",
- "uuid": "^3.3.2",
- "webhdfs": "^1.2.0"
- }
-}
diff --git a/contrib/pai_vscode/package.nls.json b/contrib/pai_vscode/package.nls.json
deleted file mode 100644
index 427f340077..0000000000
--- a/contrib/pai_vscode/package.nls.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "explorer.paiClusterExplorer": "PAI Cluster Explorer",
- "container.title": "Open Platform for AI",
- "container.hdfs.title": "HDFS Explorer",
- "container.storage.title": "Storage Explorer",
- "container.joblist.title": "PAI Job List",
- "paiext.common.refresh": "Refresh",
- "paiext.cluster.add": "Add PAI Cluster",
- "paiext.cluster.edit": "Edit PAI Cluster Configuration",
- "paiext.cluster.delete": "Delete PAI Cluster Configuration",
- "paiext.storage.personal.add": "Add Personal Storage",
- "paiext.storage.personal.edit": "Edit Personal Storage Configuration",
- "paiext.storage.personal.delete": "Delete Personal Storage Configuration",
- "paiext.storage.open": "Open Share Storage",
- "paiext.hdfs.upload.files": "Upload Files",
- "paiext.hdfs.upload.folders": "Upload Folders",
- "paiext.hdfs.download": "Download",
- "paiext.storage.create.folder": "New folder",
- "paiext.storage.upload.files": "Upload Files",
- "paiext.storage.upload.folders": "Upload Folders",
- "paiext.storage.delete": "Delete",
- "paiext.storage.download": "Download",
- "paiext.nfs.open": "Open NFS",
- "paiext.azure-blob.open": "Open Azure Blob",
- "paiext.container.hdfs.back": "Go back to cluster selection",
- "paiext.container.hdfs.delete": "Delete",
- "paiext.container.hdfs.mkdir": "New Folder",
- "paiext.container.storage.back": "Go back",
- "paiext.cluster.dashboard.open": "Open Website",
- "paiext.cluster.job.list": "Open Job List Externally",
- "paiext.cluster.job.submit": "Submit Job to PAI Cluster",
- "paiext.cluster.job.create-config": "Create PAI Job Config",
- "paiext.cluster.job.create-config-v1": "Create PAI Job Config V1",
- "paiext.cluster.job.create-config-v2": "Create PAI Job Config V2",
- "paiext.cluster.job.simulate": "Simulate PAI Job Running",
- "paiext.cluster.job.view": "View Job Detail",
- "paiext.cluster.job.more": "View More...",
- "paiext.job.config.insert.runtime.plugin": "Insert runtime plugin config",
- "paiext.job.config.insert.menu": "OpenPAI: Insert job config",
- "config.title": "OpenPAI VS Code Client Settings",
- "config.job.upload.enabled": "Controls whether the extension will upload your project files to PAI job config's code dir automatically",
- "config.job.upload.exclude": "Glob pattern for excluding files and folders",
- "config.job.upload.include": "Glob pattern for including files and folders",
- "config.job.generateJobName.enabled": "Controls whether the extension will add a random suffix to your job name when submitting job",
- "config.job.jobList.recentJobsLength": "Controls the number of recently submitted jobs to keep in history for each PAI cluster",
- "config.job.jobList.allJobsPageSize": "Controls the page size of list when listing jobs for each PAI cluster",
- "config.job.jobList.refreshInterval": "Controls the refresh interval of job list (in seconds)",
- "config.job.v2.upload": "Config the extension to upload your project files to PAI storage automatically",
- "config.hdfs.location": "Location where hdfs explorer will be shown",
- "pai.storage.nfs.mountPoint": "OpenPAI NFS storage mount point, '_: '"
-}
diff --git a/contrib/pai_vscode/package.nls.zh-cn.json b/contrib/pai_vscode/package.nls.zh-cn.json
deleted file mode 100644
index d689abeebc..0000000000
--- a/contrib/pai_vscode/package.nls.zh-cn.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "explorer.paiClusterExplorer": "PAI 集群浏览器",
- "container.title": "AI 开发平台 (PAI)",
- "container.hdfs.title": "HDFS 浏览器",
- "container.storage.title": "存储浏览器",
- "container.joblist.title": "PAI 任务列表",
- "paiext.common.refresh": "刷新",
- "paiext.cluster.add": "添加 PAI 集群",
- "paiext.cluster.edit": "编辑 PAI 集群配置",
- "paiext.cluster.delete": "删除 PAI 集群配置",
- "paiext.storage.personal.add": "添加个人存储",
- "paiext.storage.personal.edit": "编辑个人存储设置",
- "paiext.storage.personal.delete": "删除个人存储设置",
- "paiext.storage.open": "打开共享存储",
- "paiext.hdfs.upload.files": "上传文件",
- "paiext.hdfs.upload.folders": "上传文件夹",
- "paiext.hdfs.download": "下载",
- "paiext.storage.create.folder": "新建文件夹",
- "paiext.storage.upload.files": "上传文件",
- "paiext.storage.upload.folders": "上传文件夹",
- "paiext.storage.delete": "删除",
- "paiext.storage.download": "下载",
- "paiext.azure-blob.open": "打开 Azure Blob",
- "paiext.nfs.open": "打开 NFS",
- "paiext.container.hdfs.back": "后退至集群选择",
- "paiext.container.hdfs.delete": "删除",
- "paiext.container.hdfs.mkdir": "新建文件夹",
- "paiext.container.storage.back": "后退",
- "paiext.cluster.dashboard.open": "打开网站页面",
- "paiext.cluster.job.list": "在浏览器里打开任务列表",
- "paiext.cluster.job.submit": "在 PAI 集群上提交任务",
- "paiext.cluster.job.create-config": "创建 PAI 任务配置文件",
- "paiext.cluster.job.create-config-v1": "创建 PAI 任务配置文件 V1",
- "paiext.cluster.job.create-config-v2": "创建 PAI 任务配置文件 V2",
- "paiext.cluster.job.simulate": "模拟 PAI 任务执行",
- "paiext.cluster.job.view": "查看任务详情",
- "paiext.cluster.job.more": "显示更多...",
- "paiext.job.config.insert.runtime.plugin": "插入 runtime plugin 设置",
- "paiext.job.config.insert.menu": "OpenPAI: 插入任务设置",
- "config.title": "OpenPAI VS Code 客户端设置",
- "config.job.upload.enabled": "控制插件是否会自动将项目源代码上传至 PAI 任务配置文件的 CodeDir",
- "config.job.upload.exclude": "控制排除文件、文件夹的 Glob 模式",
- "config.job.upload.include": "控制包括文件、文件夹的 Glob 模式",
- "config.job.generateJobName.enabled": "控制插件是否会在提交任务时,自动在任务名称后添加随机字符串,以避免重复",
- "config.job.jobList.recentJobsLength": "控制每个 PAI 集群保留最近提交任务的数量",
- "config.job.jobList.allJobsPageSize": "控制 PAI 集群任务列表的分页大小",
- "config.job.jobList.refreshInterval": "控制任务列表的刷新间隔(秒)",
- "config.job.v2.upload": "设置插件自动将项目文件上传至 PAI 的存储服务器",
- "config.hdfs.location": "HDFS 浏览器显示的位置",
- "pai.storage.nfs.mountPoint": "OpenPAI NFS 存储挂载点, '<集群名称>_: <挂载路径>'"
-}
diff --git a/contrib/pai_vscode/schemas/pai_cluster.schema.json b/contrib/pai_vscode/schemas/pai_cluster.schema.json
deleted file mode 100644
index 9b550dc370..0000000000
--- a/contrib/pai_vscode/schemas/pai_cluster.schema.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "PAI cluster name"
- },
- "username": {
- "type": "string",
- "description": "PAI cluster user name",
- "minLength": 1
- },
- "password": {
- "type": "string",
- "description": "PAI cluster password, please remove it if use token",
- "minLength": 1
- },
- "token": {
- "type": "string",
- "description": "PAI cluster access token, please remove it if use password"
- },
- "https": {
- "type": "boolean",
- "description": "Use https to access PAI cluster"
- },
- "rest_server_uri": {
- "type": "string",
- "description": "PAI rest api endpoint",
- "pattern": "^(?!https?:\/\/).*"
- },
- "webhdfs_uri": {
- "type": "string",
- "description": "PAI webhdfs endpoint",
- "pattern": "^(?!https?:\/\/).*"
- },
- "hdfs_uri": {
- "type": "string",
- "description": "PAI hdfs endpoint",
- "pattern": "^hdfs:\/\/.*"
- },
- "grafana_uri": {
- "type": "string",
- "description": "PAI grafana dashboard endpoint",
- "pattern": "^(?!https?:\/\/).*"
- },
- "k8s_dashboard_uri": {
- "type": "string",
- "description": "PAI kubernetes dashboard endpoint",
- "pattern": "^(?!https?:\/\/).*"
- },
- "web_portal_uri": {
- "type": "string",
- "description": "PAI web portal endpoint",
- "pattern": "^(?!https?:\/\/).*"
- },
- "protocol_version": {
- "type": "string",
- "description": "PAI protocol version"
- }
- },
- "oneOf": [
- {
- "required": [
- "username",
- "password",
- "rest_server_uri"
- ]
- },
- {
- "required": [
- "username",
- "token",
- "rest_server_uri"
- ]
- }
- ]
-}
diff --git a/contrib/pai_vscode/schemas/pai_configuration.schema.json b/contrib/pai_vscode/schemas/pai_configuration.schema.json
deleted file mode 100644
index 17eb34d8c5..0000000000
--- a/contrib/pai_vscode/schemas/pai_configuration.schema.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "type": "object",
- "properties": {
- "version": {
- "type": "string",
- "description": "Version of the configuration in semver format"
- },
- "pais": {
- "type": "array",
- "description": "Individual configurations of each PAI cluster",
- "items": { "$ref": "pai_cluster.schema.json" }
- }
- },
- "required": [
- "version",
- "pais"
- ]
-}
\ No newline at end of file
diff --git a/contrib/pai_vscode/schemas/pai_job_config.schema.json b/contrib/pai_vscode/schemas/pai_job_config.schema.json
deleted file mode 100644
index 989c9d36e7..0000000000
--- a/contrib/pai_vscode/schemas/pai_job_config.schema.json
+++ /dev/null
@@ -1,147 +0,0 @@
-{
- "type": "object",
- "description": "PAI job config\nThis file can be submitted directly on PAI web portal.",
- "properties": {
- "jobName": {
- "type": "string",
- "description": "Name for the job, need to be unique",
- "pattern": "^[A-Za-z0-9\\-._~]+$"
- },
- "image": {
- "type": "string",
- "description": "URL pointing to the Docker image for all tasks in the job"
- },
- "authFile": {
- "type": "string",
- "description": "Docker registry authentication file existing on HDFS"
- },
- "dataDir": {
- "type": "string",
- "description": "Data directory existing on HDFS.\nFull HDFS path will be exported as an environment variable $PAI_DATA_DIR."
- },
- "outputDir": {
- "type": "string",
- "description": "Output directory on HDFS, $PAI_DEFAULT_FS_URI/Output/$jobName will be used if not specified.\nFull HDFS path will be exported as an environment variable $PAI_OUTPUT_DIR."
- },
- "codeDir": {
- "type": "string",
- "description": "Code directory existing on HDFS.\nFull HDFS path will be exported as an environment variable $PAI_CODE_DIR."
- },
- "virtualCluster": {
- "type": "string",
- "description": "The virtual cluster job runs on. If omitted, the job will run on default virtual cluster"
- },
- "taskRoles": {
- "type": "array",
- "description": "List of taskRole, one task role at least",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "Name for the task role, need to be unique with other roles",
- "pattern": "^[A-Za-z0-9\\-._~]+$"
- },
- "taskNumber": {
- "type": "integer",
- "description": "Number of tasks for the task role, no less than 1",
- "minimum": 1
- },
- "cpuNumber": {
- "type": "integer",
- "description": "CPU number for one task in the task role, no less than 1",
- "minimum": 1
- },
- "memoryMB": {
- "type": "integer",
- "description": "Memory for one task in the task role, no less than 100",
- "minimum": 100
- },
- "shmMB": {
- "type": "integer",
- "description": "Shared memory for one task in the task role, no more than memory size. The default value is 64MB"
- },
- "gpuNumber": {
- "type": "integer",
- "description": "GPU number for one task in the task role, no less than 0",
- "minimum": 0
- },
- "portList": {
- "type": "array",
- "description": "List of portType to use",
- "items": {
- "type": "object",
- "properties": {
- "label": {
- "type": "string",
- "description": "Label name for the port type",
- "pattern": "^[A-Za-z0-9._~]+$"
- },
- "beginAt": {
- "type": "number",
- "description": "The port to begin with in the port type, 0 for random selection"
- },
- "portNumber": {
- "type": "number",
- "description": "Number of ports for the specific type"
- }
- },
- "required": [
- "label",
- "beginAt",
- "portNumber"
- ]
- }
- },
- "command": {
- "type": "string",
- "description": "Executable command for tasks in the task role, can not be empty\n** PLEASE CHANGE MANUALLY **",
- "minLength": 1,
- "pattern": "^(?!.*)"
- },
- "minFailedTaskCount": {
- "type": ["integer", "null"],
- "description": "Number of failed tasks to kill the entire job, null or no less than 1",
- "minimum": 1
- },
- "minSucceededTaskCount": {
- "type": ["integer", "null"],
- "description": "Number of succeeded tasks to kill the entire job, null or no less than 1",
- "minimum": 1
- }
- },
- "required": [
- "name",
- "taskNumber",
- "cpuNumber",
- "memoryMB",
- "gpuNumber",
- "command"
- ]
- },
- "minItems": 1
- },
- "gpuType": {
- "type": "string",
- "description": "Specify the GPU type to be used in the tasks. If omitted, the job will run on any gpu type"
- },
- "retryCount": {
- "type": "integer",
- "description": "Job retry count, no less than 0",
- "minimum": 0
- },
- "jobEnvs": {
- "type": "object",
- "description": "Job env parameters, key-value pairs, available in job container and no substitution allowed"
- },
- "extras": {
- "type": "object",
- "description": "Extra parameters, key-value pairs, save any information that job may use"
- }
- },
- "required": [
- "jobName",
- "image",
- "taskRoles"
- ]
-}
\ No newline at end of file
diff --git a/contrib/pai_vscode/schemas/pai_personal_storage.schema.json b/contrib/pai_vscode/schemas/pai_personal_storage.schema.json
deleted file mode 100644
index 80adc2d798..0000000000
--- a/contrib/pai_vscode/schemas/pai_personal_storage.schema.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "type": "object",
- "properties": {
- "spn": {
- "type": "string",
- "description": "storage server display name",
- "minLength": 1
- },
- "data": {
- "type": "object",
- "description": "Azure blob",
- "properties": {
- "containerName": {
- "type": "string"
- },
- "accountName": {
- "type": "string"
- },
- "key": {
- "type": "string"
- }
- },
- "additionalProperties": true
- }
- }
-}
diff --git a/contrib/pai_vscode/schemas/pai_yaml_job_config.schema.json b/contrib/pai_vscode/schemas/pai_yaml_job_config.schema.json
deleted file mode 100644
index 1331bbc65a..0000000000
--- a/contrib/pai_vscode/schemas/pai_yaml_job_config.schema.json
+++ /dev/null
@@ -1,366 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Job Config",
- "description": "OpenPAI Job Protocol",
- "type": "object",
-
- "definitions": {
- "basicSchema": {
- "type": "object",
- "properties": {
- "protocolVersion": {
- "description": "Protocol version, current version is 2.",
- "enum": ["2", 2]
- },
- "name": {
- "type": "string",
- "pattern": "^[a-zA-Z0-9_-]+$"
- },
- "version": {
- "description": "Component version, default is latest.",
- "type": ["string", "number"]
- },
- "contributor": {
- "type": "string"
- },
- "description": {
- "type": "string"
- }
- },
- "required": ["name"]
- },
- "prerequisite": {
- "description": "The protocol for data, script, dockerimage, or output type.",
- "type": "object",
- "allOf": [
- {
- "$ref": "#/definitions/basicSchema"
- },
- {
- "oneOf": [
- {
- "$comment": "Script or output prerequisite.",
- "properties": {
- "type": {
- "description": "Component type. Must be one of the following: data, script, dockerimage, or output. Prerequisites.type cannot be 'job'.",
- "type": "string",
- "enum": ["script", "output"]
- },
- "uri": {
- "description": "Only when the type is data can the uri be a list.",
- "type": "string"
- }
- },
- "required": ["type", "uri"]
- },
- {
- "$comment": "Data prerequisite.",
- "properties": {
- "type": {
- "description": "Component type. Must be one of the following: data, script, dockerimage, or output. Prerequisites.type cannot be 'job'.",
- "type": "string",
- "enum": ["data"]
- },
- "uri": {
- "description": "Only when the type is data can the uri be a list.",
- "type": ["array"],
- "items": {
- "type": "string"
- }
- }
- },
- "required": ["type", "uri"]
- },
- {
- "$comment": "Docker image prerequisite.",
- "properties": {
- "type": {
- "description": "Component type. Must be one of the following: data, script, dockerimage, or output. Prerequisites.type cannot be 'job'.",
- "type": "string",
- "enum": ["dockerimage"]
- },
- "auth": {
- "description": "Only available when the type is dockerimage.",
- "type": "object",
- "properties": {
- "username": {
- "type": "string"
- },
- "password": {
- "description": "If a password is needed, it should be referenced as a secret.",
- "type": "string"
- },
- "registryuri": {
- "type": "string"
- }
- }
- },
- "uri": {
- "description": "Only when the type is data can the uri be a list.",
- "type": "string"
- }
- },
- "required": ["type", "uri"]
- }
- ]
- }
- ],
- "required": ["name", "type", "uri"]
- },
- "parameters": {
- "description": "If specified, the whole parameters object can be referenced as `$parameters`. Scope of reference `$parameters`: the reference is shared among all task roles.",
- "type": "object",
- "additionalProperties": true
- },
- "secrets": {
- "description": "Can be referenced by `<% $secrets.secret1 %>`, `<% $secrets.secret2 %>`.",
- "type": "object",
- "additionalProperties": true
- },
- "taskRole": {
- "description": "Task roles are different types of task in the protocol. One job may have one or more task roles, each task role has one or more instances, and each instance runs inside one container.",
- "type": "object",
- "properties": {
- "instances": {
- "description": "Default is 1, instances of a taskRole, no less than 1.",
- "type": "integer",
- "minimum": 1
- },
- "completion": {
- "description": "Completion poclicy for the job, https://github.com/Microsoft/pai/blob/master/subprojects/frameworklauncher/yarn/doc/USERMANUAL.md#ApplicationCompletionPolicy.",
- "type": "object",
- "properties": {
- "minFailedInstances": {
- "description": "Number of failed tasks to fail the entire job, null or no less than 1, if set to null means the job will always succeed regardless any task failure.",
- "type": ["integer", "null"]
- },
- "minSucceededInstances": {
- "description": "Number of succeeded tasks to succeed the entire job, null or no less than 1, if set to null means the job will only succeed until all tasks are completed and minFailedInstances is not triggered.",
- "type": ["integer", "null"]
- },
- "additionalProperties": false
- }
- },
- "taskRetryCount": {
- "type": "integer"
- },
- "dockerImage": {
- "description": "Should reference to a dockerimage defined in prerequisites.",
- "type": "string"
- },
- "data": {
- "description": "Select data defined in prerequisites, target can be referenced as `$data` in this task role.",
- "type": "string"
- },
- "output": {
- "description": "Select output defined in prerequisites, target can be referenced as `$output` in this task role.",
- "type": "string"
- },
- "script": {
- "description": "Select script defined in prerequisites, target can be referenced as `$script` in this task role.",
- "type": "string"
- },
- "extraContainerOptions": {
- "type": "object",
- "properties": {
- "shmMB": {
- "description": "Config the /dev/shm in a docker container, https://docs.docker.com/compose/compose-file/#shm_size.",
- "type": "integer"
- }
- },
- "additionalProperties": false
- },
- "resourcePerInstance": {
- "type": "object",
- "properties": {
- "cpu": {
- "description": "CPU number, unit is CPU vcore.",
- "type": "integer"
- },
- "memoryMB": {
- "description": "Memory number, unit is MB.",
- "type": "integer"
- },
- "gpu": {
- "description": "GPU number, unit is GPU card.",
- "type": "integer"
- },
- "ports": {
- "type": "object",
- "patternProperties": {
- "^[a-zA-Z_][a-zA-Z0-9_]*$": {
- "type": "integer"
- }
- },
- "minProperties": 1
- }
- },
- "additionalProperties": false,
- "required": ["cpu", "memoryMB", "gpu"]
- },
- "commands": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "minItems": 1
- }
- },
- "additionalProperties": false,
- "required": ["dockerImage", "resourcePerInstance", "commands"]
- },
- "deployment": {
- "type": "object",
- "properties": {
- "name": {
- "description": "Should be in taskRoles.",
- "type": "string"
- },
- "taskRoles": {
- "type": "object",
- "patternProperties": {
- "^[A-Za-z0-9._~]+$": {
- "type": "object",
- "properties": {
- "preCommands": {
- "description": "Execute before the taskRole's command.",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "postCommands": {
- "description": "Execute after the taskRole's command",
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- }
- },
- "minProperties": 1
- }
- },
- "additionalProperties": false,
- "required": ["name", "taskRoles"]
- },
- "defaults": {
- "description": "Default cluster specific settings.",
- "type": "object",
- "properties": {
- "virtualCluster": {
- "type": "string"
- },
- "deployment": {
- "description": "Should reference to deployment defined in deployments.",
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "extras": {
- "description": "Extra field, object, save any information that plugin may use.",
- "type": "object",
- "properties": {
- "submitFrom": {
- "type": "string"
- },
- "hivedscheduler": {
- "type": "object",
- "properties": {
- "jobPriorityClass": {
- "type": "string"
- },
- "taskRoles": {
- "type": "object",
- "patternProperties": {
- "^[A-Za-z0-9._~]+$": {
- "type": "object",
- "properties": {
- "gpuType/reservationId": {
- "type": "string"
- },
- "affinityGroupName": {
- "type": "string"
- }
- },
- "additionalProperties": true
- }
- }
- }
- },
- "required": ["jobPriorityClass"],
- "additionalProperties": true
- }
- },
- "additionalProperties": true
- }
- },
-
- "properties": {
- "protocolVersion": {
- "description": "Protocol version, current version is 2.",
- "enum": ["2", 2]
- },
- "name": {
- "type": "string",
- "pattern": "^[a-zA-Z0-9_-]+$"
- },
- "type": {
- "description": "Component type, should be 'job' here.",
- "type": "string",
- "enum": ["job"]
- },
- "version": {
- "description": "Component version, default is latest.",
- "type": ["string", "number"]
- },
- "contributor": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "prerequisites": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/prerequisite"
- }
- },
- "parameters": {
- "$ref": "#/definitions/parameters"
- },
- "secrets": {
- "$ref": "#/definitions/secrets"
- },
- "jobRetryCount": {
- "type": "integer",
- "minimum": 0
- },
- "taskRoles": {
- "type": "object",
- "patternProperties": {
- "^[a-zA-Z_][a-zA-Z0-9_]*$": {
- "$ref": "#/definitions/taskRole"
- }
- },
- "minProperties": 1
- },
- "deployments": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/deployment"
- },
- "minItems": 1
- },
- "defaults": {
- "$ref": "#/definitions/defaults"
- },
- "extras": {
- "$ref": "#/definitions/extras"
- }
- },
- "additionalProperties": false,
- "required": ["protocolVersion", "name", "type", "taskRoles"]
-}
diff --git a/contrib/pai_vscode/snippets/job_config.yaml b/contrib/pai_vscode/snippets/job_config.yaml
deleted file mode 100644
index c73aec9d1d..0000000000
--- a/contrib/pai_vscode/snippets/job_config.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-name: openPaiJobConfig
-label: OpenPAI Job Config
-documentation: OpenPAI Job Config
-insertText: |2
- protocolVersion: 2
- name: ${1:}
- type: job
- prerequisites:
- ${2:prerequisite}
- taskRoles:
- ${3:taskRole}
- extras:
- ${4:runtimePlugin}
diff --git a/contrib/pai_vscode/snippets/job_deployment_taskRole.yaml b/contrib/pai_vscode/snippets/job_deployment_taskRole.yaml
deleted file mode 100644
index e8b4fd8648..0000000000
--- a/contrib/pai_vscode/snippets/job_deployment_taskRole.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: deployment
-label: OpenPAI Job deployment taskRole
-documentation: OpenPAI Job deployment taskRole
-insertText: |2
- ${1:}:
- preCommands:
- - ${2:
-