diff --git a/build/index.js b/build/index.js
--- a/build/index.js
+++ b/build/index.js
@@ -8,17 +8,34 @@ const { ncp } = require('ncp')
 const { promisify } = util
 
 const promisifyReadDir = promisify(fs.readdir)
+const promisifyReadFile = promisify(fs.readFile)
+const promisifyWriteFile = promisify(fs.writeFile)
 
+const localeNameRegex = /\/\/ (.*) \[/
 const formatName = n => n.replace(/\.js/, '').replace('-', '_')
 
+const localePath = path.join(__dirname, '../src/locale')
+
 async function build(option) {
   const bundle = await rollup.rollup(option.input)
   await bundle.write(option.output)
 }
 
+async function listLocaleJson(localeArr) {
+  const localeListArr = []
+  await Promise.all(localeArr.map(async (l) => {
+    const localeData = await promisifyReadFile(path.join(localePath, l), 'utf-8')
+    localeListArr.push({
+      key: l.slice(0, -3),
+      name: localeData.match(localeNameRegex)[1]
+    })
+  }))
+  promisifyWriteFile(path.join(__dirname, '../locale.json'), JSON.stringify(localeListArr), 'utf8')
+}
+
 (async () => {
   try {
-    const locales = await promisifyReadDir(path.join(__dirname, '../src/locale'))
+    const locales = await promisifyReadDir(localePath)
     locales.forEach((l) => {
       build(configFactory({
         input: `./src/locale/${l}`,
@@ -42,6 +59,9 @@ async function build(option) {
     }))
 
     await promisify(ncp)('./types/', './')
+
+    // list locales
+    await listLocaleJson(locales)
   } catch (e) {
     console.error(e) // eslint-disable-line no-console
   }
diff --git a/src/locale/bi.js b/src/locale/bi.js
--- a/src/locale/bi.js
+++ b/src/locale/bi.js
@@ -1,3 +1,4 @@
+// Bislama [bi]
 import dayjs from 'dayjs'
 
 const locale = {
diff --git a/src/locale/en.js b/src/locale/en.js
--- a/src/locale/en.js
+++ b/src/locale/en.js
@@ -1,3 +1,4 @@
+// English [en]
 // We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale
 export default {
   name: 'en',

diff --git a/test/locale/keys.test.js b/test/locale/keys.test.js
--- a/test/locale/keys.test.js
+++ b/test/locale/keys.test.js
@@ -4,14 +4,17 @@ import dayjs from '../../src'
 
 const localeDir = '../../src/locale'
 const Locale = []
+const localeNameRegex = /\/\/ (.*) \[/
 
 // load all locales from locale dir
 fs.readdirSync(path.join(__dirname, localeDir))
   .forEach((file) => {
+    const fPath = path.join(__dirname, localeDir, file)
     Locale.push({
       name: file,
       // eslint-disable-next-line import/no-dynamic-require, global-require
-      content: require(path.join(__dirname, localeDir, file)).default
+      content: require(fPath).default,
+      file: fs.readFileSync(fPath, 'utf-8')
     })
   })
 
@@ -31,6 +34,9 @@ Locale.forEach((locale) => {
       yearStart,
       meridiem
     } = locale.content
+    // comments required
+    const commentsMatchResult = locale.file.match(localeNameRegex)
+    expect(commentsMatchResult[1]).not.toBeUndefined()
 
     expect(name).toEqual(locale.name.replace('.js', ''))
     expect(weekdays).toEqual(expect.any(Array))

Export list of locales available, and a function to require an Array of locales
Can you please export the list of locales available?  This would be a much better approach than having to manually write it out or programmatically use `fs.readdirSync` to get the full list.  It would also be nice to have an option to load all locales (require them all, or a list passed) at once.

That sounds cool. 
Maybe we could add a JSON output file in each npm release. like
``` 
root_path/locale.json
```

```
[
  {
    "key": "ca",
    "name": "English (Canada)"
  },
 {
    "key": "en-gb",
    "name": "English (United Kingdom)"
  }, 
  ...
]
```

test/timezone.test.js(1) test/timezone.test.js(2) test/timezone.test.js(3) test/timezone.test.js(4)
test/locale/keys.test.js