diff --git a/.gitignore b/.gitignore index dafbf46..bc5756d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ ots +frontend/locale/*.untranslated.json diff --git a/Makefile b/Makefile index 8d57e90..a8eb6b6 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,10 @@ -generate: +generate: l10n coffee -c frontend/application.coffee go generate +l10n: + cd frontend/locale && goi18n * + publish: curl -sSLo golang.sh https://raw.githubusercontent.com/Luzifer/github-publish/master/golang.sh bash golang.sh diff --git a/assets.go b/assets.go index 4b30560..7087f9e 100644 --- a/assets.go +++ b/assets.go @@ -3,6 +3,10 @@ // frontend/application.coffee // frontend/application.js // frontend/index.html +// frontend/locale/de-de.all.json +// frontend/locale/de-de.untranslated.json +// frontend/locale/en-us.all.json +// frontend/locale/en-us.untranslated.json // DO NOT EDIT! package main @@ -105,27 +109,107 @@ func frontendApplicationJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "frontend/application.js", size: 2680, mode: os.FileMode(436), modTime: time.Unix(1501854199, 0)} + info := bindataFileInfo{name: "frontend/application.js", size: 2680, mode: os.FileMode(436), modTime: time.Unix(1501874104, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _frontendIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x59\xeb\x52\xdc\xb8\x12\xfe\x9d\x3c\x45\x63\xaa\x4e\x76\xb3\xd8\x9e\x4b\x80\x40\x3c\x53\xc5\x6d\x09\x2c\x30\xe1\x12\x08\x6c\xed\x0f\xd9\x6e\xdb\x1a\x64\xc9\x48\xf2\x98\xe1\xd4\x79\xf7\x53\xf2\x65\x98\x5b\x36\x6c\x92\x85\x62\xc6\x92\x5b\xdd\xea\xaf\x3f\x75\x4b\xc2\x5b\xd9\x1f\xec\x5d\xdd\x7e\x3a\x80\x44\xa7\xac\xff\xda\x33\x5f\xc0\x08\x8f\x7b\x16\x72\xab\xff\x1a\xc0\x4b\x90\x84\xe6\x01\xc0\x4b\x51\x13\x08\x12\x22\x15\xea\x9e\x95\xeb\xc8\x7e\x6f\x4d\xbf\x4a\xb4\xce\x6c\x7c\xc8\xe9\xa8\x67\x7d\xb1\x3f\xef\xd8\x7b\x22\xcd\x88\xa6\x3e\x43\x0b\x02\xc1\x35\x72\xdd\xb3\x8e\x0e\x7a\x18\xc6\x38\x33\x92\x93\x14\x7b\xd6\x88\x62\x91\x09\xa9\xa7\x84\x0b\x1a\xea\xa4\x17\xe2\x88\x06\x68\x97\x8d\x35\xa0\x9c\x6a\x4a\x98\xad\x02\xc2\xb0\xd7\x6e\x14\xad\xd8\x36\x5c\x25\x08\xc4\x17\x23\x84\x2e\x94\x8a\x35\x89\x15\xbc\x4d\x73\xa5\xdf\x42\x20\x52\x84\x88\x4a\xa5\x81\x72\xd0\x09\x82\xf1\xed\x03\x10\x3e\x06\xa1\x13\x94\x65\xbb\xb1\x0d\x66\x50\x35\xe6\x2d\x89\x34\xca\xb7\x66\x88\xc2\x4a\xa5\x6d\xd7\x56\x35\xd5\x0c\xfb\x83\xab\x4b\xb0\x61\xc0\x11\xae\x68\x8a\x70\x89\x81\x44\xad\x3c\xb7\x7a\xfb\xfa\x79\x82\xbb\x42\x68\xa5\x25\xc9\x4a\x0d\xaf\x5e\x79\x8c\xf2\x7b\x90\xc8\x7a\x96\xd2\x63\x86\x2a\x41\xd4\x16\x24\x12\xa3\x9e\x65\xf0\x54\xdb\xae\x1b\x84\x7c\xa8\x9c\x80\x89\x3c\x8c\x18\x91\xe8\x04\x22\x75\xc9\x90\x3c\xba\x8c\xfa\xca\xf5\x8d\xce\x82\xe8\x20\x71\xbb\x4e\xd7\xd9\x74\x23\x46\x34\x1b\x57\xfd\xc6\x96\x93\x52\xee\x04\x4a\x59\xe5\x3c\xaa\x1f\xca\x35\xc6\x92\xea\x71\xcf\x52\x09\xe9\xac\x6f\xd8\xb2\x7d\x43\x87\x37\xee\xe5\xd9\x69\x3c\x28\xee\xd7\x4f\xf6\xef\x37\xcf\x2f\x3e\xca\x0d\x71\x7d\x7b\xeb\xdf\xde\x9c\x16\x6e\xfb\x7e\xf0\x25\xba\x3d\x8e\xe2\x9e\x05\x81\x14\x4a\x09\x49\x63\xca\x7b\x16\xe1\x82\x8f\x53\x91\x2b\x0b\xdc\x1a\x97\x9f\xe0\x57\x24\xb8\xb6\x49\x81\x4a\xa4\xe8\xbe\x73\x36\x9d\x96\x1b\xa8\xd9\xee\x97\x79\x86\x77\x52\x1e\x07\xc5\x7e\xe0\x76\xf3\xfd\x44\x85\x7a\xa3\xad\x4e\x3a\x62\xb0\x7b\xdb\xdd\xe8\x3c\x9c\x76\x99\xe0\xed\x78\x7c\xf0\x78\x7f\xd2\xfa\x7b\xcf\x9e\xe3\xf8\xf1\xea\xf4\x64\x1d\x54\x42\x53\x20\x3c\x84\x0b\x54\x99\xe0\xa1\x33\x54\x10\x09\x09\x47\x07\xef\x41\xe5\x99\xe1\x32\x88\xa8\x16\x46\x86\x29\x72\xad\xca\x01\x29\x86\x94\xc0\x43\x8e\x92\xe2\x14\x9b\x8c\xea\x9b\x9d\x8b\xb3\xa3\xb3\xc3\xed\x69\xa5\xa1\x40\xc5\xdf\x68\x28\x84\xbc\x07\x1a\xc1\x58\xe4\x60\x56\x4b\xc9\xe2\x8c\xc4\x08\x23\x4a\x20\xa2\x0c\xb7\x5d\x77\x46\xdd\x9f\x34\x02\xa6\xe1\xe8\x00\xb6\xfe\xea\xd7\x28\x79\x2a\x90\x34\xd3\xa0\x64\xf0\xe2\x60\x98\xcc\xb0\xae\x12\x3a\x72\xbb\xce\xa6\xd3\x7d\x6e\x97\x21\x18\xce\x44\x60\x79\x14\xba\xc7\x63\xf7\xd0\xbf\x3c\x91\x71\x4b\x6c\x8d\xd7\xef\xd6\x79\x3b\x2f\x5a\x0f\x8f\x77\x07\x7b\x1f\x37\xf7\x36\x06\xe7\xd9\xf5\x6e\x7c\xf6\xfb\x2d\x69\xfd\x0d\xbf\xfa\x9e\x5b\x4d\xfe\x47\x7c\x91\x13\x60\xdd\xb6\xf3\xce\xe9\x4c\x3a\x5e\xea\x4a\xbc\x41\x77\xa2\xd1\x5d\xf6\x1b\xdf\x3f\xef\x5c\x85\x57\x17\xee\xf5\xf5\x1f\xc7\x51\xd7\x3f\x94\xe2\x5d\xee\xaf\x47\xa3\x9b\xcb\x9b\xeb\x0b\xda\x39\x3b\x78\xb1\x2b\xde\xca\x9f\xc8\x43\x1a\xfd\x65\xa2\x57\xf5\x94\x2b\xa7\x71\x74\xd5\xf0\x5d\x27\x94\xc7\x85\x14\x3c\x5e\x83\x55\x2e\x74\x24\x72\x1e\xae\xc1\x6a\x46\x38\xb2\x0b\x24\x61\x95\x79\x9a\x9e\xaa\xf5\xf9\xe2\x04\xfe\x3b\xf1\x29\xa4\x2a\x63\x64\xbc\x0d\x5c\x70\xfc\x50\x77\xff\xaf\xfe\x76\x22\x21\x34\xca\x29\xf1\x72\xb5\x29\xfa\x84\xdb\xd0\x72\xb6\x30\xfd\x30\x79\xa3\xf1\x51\xdb\x84\xd1\x98\x6f\x43\x80\x5c\xa3\x7c\x7e\x17\x08\x26\xe4\x36\xac\x76\x22\xf3\x3b\x6b\xc5\x73\x27\x7e\x79\x6e\x53\x5d\x3c\x5f\x84\xe3\x32\x21\x72\x32\x82\x80\x11\xa5\x7a\x16\x27\x23\x9f\x48\xa8\xbe\xec\x10\x23\x92\x33\x6d\x19\xa9\x57\x5e\x48\x27\x62\x26\x61\x13\xca\x51\xda\x11\xcb\x69\x58\x09\xbc\xaa\xd2\xad\x34\x8b\xcd\xfc\x69\x11\xc7\x0c\x21\x46\x0d\xb1\x14\x79\x86\x61\xb9\x52\x7d\xd4\xc6\xdf\x54\xf8\x94\x61\x83\x4d\x9d\x9b\x67\xad\xd4\xb3\x30\x13\x46\x59\xdb\x78\xe5\xf9\xb9\xd6\x82\x83\x1e\x67\xd8\xb3\xaa\x86\x35\x37\xa2\xb6\x1c\x08\xc6\x48\xa6\x30\xb4\x20\x24\x9a\xd4\xdd\x66\xf6\x55\x7f\xd3\x4d\x64\x6c\xaa\xeb\xaa\xaf\x6c\x7c\x24\x69\xc6\xd0\xae\x15\x35\x92\x76\xdb\x02\x22\x29\xb1\xf1\x31\x23\x3c\xc4\xb0\x67\x45\x84\x29\x6c\x26\xf5\xca\x53\x19\xe1\xcd\x2c\x94\xb4\x05\x67\x63\xab\x7f\x55\xcd\x83\x93\x11\x8d\x89\xa6\x82\x7b\xae\x91\x5b\x3a\x88\x06\x82\xdb\x3e\x91\x25\x49\xff\x0d\x21\xcf\xad\xc0\x6a\x9a\x64\x0e\x34\xdf\x04\xae\xa9\x17\xab\xd6\x57\x0b\x2c\xa9\x03\xe5\x86\x74\xd4\x7f\xfd\x1c\xf8\x3d\xc1\x18\x06\xba\xcc\x8f\x86\x51\xa6\x1c\xa9\x35\x13\xf2\x54\xad\x95\x84\xa8\x2a\x7e\x53\xec\x0d\x17\xca\x88\x50\x1e\x2f\x0d\x7f\x03\x3e\xcc\x05\xc3\x02\x1a\xf6\xac\xbf\x0d\x56\xe3\x63\xce\xa6\x9c\x6c\xf4\x4c\x3d\x4a\x1a\x27\xfa\x39\x88\x8c\xf6\x3d\x32\x41\xa0\x34\xc3\xb1\xa8\x3c\xb7\xfa\x1e\x6d\x94\x45\x04\x22\x62\x67\xac\x4a\x29\xb4\x0f\x67\x58\xd4\x00\x19\x7c\x3c\x97\xd1\x09\xe8\x39\x9b\xc6\xab\x44\xca\x75\xe6\x66\xdc\xb8\x3f\x23\x33\xb7\xc6\x9a\xdd\x8b\xcb\xc9\xa8\x0f\x75\xba\x5a\xb6\x24\xad\x49\x9e\x9e\x7a\x2b\x45\x31\xe9\x9f\x1f\xc7\xec\x34\xb4\xdf\x43\xfd\x90\xe5\x2a\xb1\x3b\x53\xc2\xb3\xe2\x84\xa1\xd4\x50\x7e\xda\x21\xe1\x31\x4a\x0b\xa4\x30\xab\xaa\xec\xab\x41\xab\xd3\xe4\x8c\x16\x80\x79\x00\x1f\x72\x54\x66\x55\xd8\x01\x95\x81\xd9\xb0\x96\x4b\x2c\xa1\x61\x88\xbc\x67\x69\x99\x63\x05\xef\x8c\x92\xab\x84\x2a\xa0\x0a\xb8\xa8\xa8\xa6\x4a\xd8\xcb\xf2\x4c\x24\x02\x13\xe2\xde\x10\x2a\x12\xf2\x3f\x09\x32\x46\xb3\x0f\xd3\x9e\x54\xa4\xfd\x01\xd7\x66\x4b\xc2\xbf\xe1\xe0\x65\x63\x01\x0a\xb3\x4c\x4a\x3b\x0e\x1c\xbd\x49\x61\x84\x72\x0c\x4a\x48\x39\x36\x3b\xee\xdc\xf8\x4f\xd5\xb7\xbd\x9c\x69\x36\xcb\xf6\x3b\x28\xd2\x36\xac\xf8\x0a\x76\x65\xed\x83\xf2\xd3\xce\x24\x4d\x89\x1c\x57\x78\x95\x5d\x67\xcf\x8b\x68\x16\xaf\x79\x0d\x65\xae\xa7\x0b\xb8\x9a\x33\x51\x77\x56\xb0\xdc\xe6\x5b\xfd\x3d\x89\x44\x23\x10\xe0\x58\xd4\x54\xf0\xdc\xa4\x3b\x67\x66\x3e\xea\xcb\x2c\x9b\x6a\xb8\x68\xd6\x64\xaf\xd2\x0f\xf3\x50\x19\x5b\xea\xc9\xbc\x4e\x23\x6e\x97\x55\x6f\x89\xa0\xd9\xab\x13\x1f\x99\x21\x69\xcf\x52\xb5\xbe\x4a\x6f\x59\x92\xb6\x3d\xb7\x14\x58\x3a\xd4\x6c\x02\x88\x44\x32\x63\xca\xac\x7e\x29\x98\x21\x6c\xa1\x7a\xd6\x7a\x4d\xd6\x26\x73\xb9\xcd\xa0\x25\xb3\x5e\x04\xa7\xec\xa6\x3c\xcb\x75\x63\xc3\xd7\x1c\x7c\xcd\x6d\x95\x07\x01\x2a\x65\xd5\xd5\x57\xe5\x7e\x4a\xb5\x05\x23\xc2\x72\xec\x59\x75\x30\x9e\x57\xe5\xca\x22\xa0\xae\x99\xee\x37\xc2\x33\xcb\xd1\xa5\xe1\xaa\xa9\x36\x99\xcf\x84\x6a\x93\xfd\xd7\x4f\xa7\x5a\x1d\x9f\xa0\x74\x32\x5c\xf9\xa9\x34\xcb\x16\x03\x70\x2b\x72\xd9\x24\xb7\x82\xa8\xc6\x6e\x59\x48\x95\x16\x12\x43\xc8\x95\xc9\x12\x26\x09\xc0\xe7\x8b\x93\xed\x05\xa8\x17\xb4\xbe\x98\xa1\x75\xf4\xab\x28\x1b\xee\x58\x5f\x61\x1b\x92\xd0\x6c\x75\x16\xc3\xbc\x84\x54\xcb\xbc\xfc\xc4\x90\x28\x04\x89\x29\xa6\x3e\xca\x2a\xab\x0b\x88\x85\xf9\x6c\x3c\x33\xc9\x5d\x2a\x64\x11\x10\x05\x3a\x21\xe6\x50\x96\xb3\x10\x42\x54\x5a\x8a\xf1\x14\xe1\x1c\x38\xce\x95\x86\x8c\x28\x05\xb4\xd4\x64\xf2\xb5\xe0\x08\xc8\x14\xae\x7c\x0b\xa1\x1f\x60\xe2\x62\xd2\x7b\x3e\x1b\xfc\x74\x2a\x5e\x54\xf2\x25\x2e\x8d\xe7\x8e\xf3\x53\x19\xf9\x62\xa6\xbc\x30\x1d\x4d\x98\xf2\xf5\x5c\xb4\x08\x36\x7c\x85\x35\x9e\x89\x3b\x8f\xfb\x3b\xda\xec\x24\xa9\xe0\xdb\xe6\x84\x53\x76\x99\x75\xf3\x46\x22\x18\x5b\xa0\x10\x27\x2b\x44\xf0\x00\x1d\xd8\x51\xa0\x84\xe0\x86\x48\x66\xc7\x20\x91\x09\x12\x3e\x1f\xe9\xa7\x36\x14\x05\x65\x0c\x7c\x84\xd8\xb0\x47\x09\x48\xc9\xd8\x37\x47\x8a\x6c\x6c\x98\xc5\x45\xb1\xa4\xf0\xc2\x77\x91\xaa\x6a\xc3\x64\xdb\x57\x17\xdb\xc9\x9d\xc2\xbc\x84\x14\x05\x4c\x4e\xac\xff\xb8\x86\x43\x75\xde\x9c\x09\xe5\x27\x51\xa0\x49\x28\xfe\x18\x26\xfb\xdf\xe6\x60\x1f\x53\x9d\xe4\x7e\x79\x9c\x3f\xc9\x9f\x68\x84\xd2\x15\x5a\x2d\xee\x86\x2b\xb9\x7a\x3f\xdc\x48\x0e\xae\x2e\xcb\x03\xc3\x52\x2c\xa6\x1a\xd3\x90\x94\x5e\x0e\xcf\x73\xb3\xd9\xf9\x85\xa3\xc9\xef\x44\x8e\xcb\xe3\xc2\xe4\x2a\xef\x8d\x82\x63\x32\x22\x97\xd5\x45\x44\xc6\xf2\x98\x72\xf5\xeb\xf3\x2d\xcc\x77\xdc\x50\x0c\x1f\x8c\x45\xb7\xed\xb4\x3b\xce\xbb\xba\xb5\xf4\x76\x62\xf1\x6e\xe2\x4e\xa8\x03\xff\xe2\xc4\x3f\x3b\x7f\x3a\xc9\xf8\x1f\x47\xf7\x07\xa1\xfc\x34\xda\x64\x83\xf1\xd6\x5e\x67\x33\xf9\x78\xfe\xdb\x97\xec\x3d\x79\x77\xfa\xb8\x73\xfe\x0f\xee\x26\x6c\x1b\x8e\x78\xc0\xf2\x10\x81\x30\x06\x81\x48\x33\xca\x30\x6c\xbc\x85\x5f\x7c\x64\xa2\xf8\x75\x0d\x84\x04\x5a\x0b\x52\x1e\xd2\x11\x0d\x73\xc2\xca\x9b\x29\x65\x78\xce\x11\x43\x0c\x7f\x08\x1b\x5d\x50\x73\x66\xb7\x27\xd7\x9b\xf5\xad\xe7\x50\xcd\xdd\x78\x7e\x1b\xab\xcf\xeb\x77\x07\xf8\x47\x74\x78\x36\x18\x92\x56\x6b\xf3\xf4\x74\xbf\x7b\xbb\x7b\xd4\xda\xe9\x0e\x2e\xef\x06\xe7\x3e\x1e\x6e\x3c\x75\xa2\xce\x6d\x2b\xc9\xdf\xbf\x1c\xab\xef\x70\x29\xa6\xbe\x8f\x92\xaa\xc4\x26\xa8\xdc\xb6\xd3\x72\x5a\xb3\x7d\x2f\xf4\xe7\xe3\xd6\xae\xfb\xe5\x62\x9f\x0e\xcf\xe8\xef\x5d\x12\x5f\x0f\x35\x7d\x6a\x1f\x9d\x5c\xd3\x6e\xa0\x0e\xc2\xc3\xa7\xad\xdb\xdd\x78\xfd\x6a\x78\x23\xf2\xd3\x17\xf9\xb3\xe8\x10\xc9\x32\x46\x83\xf2\xfa\xc0\xcc\x67\xc6\x77\xcf\xad\x2e\x71\x3c\xb7\xfa\x6f\xc2\xeb\xff\x07\x00\x00\xff\xff\x8e\xa3\xaa\xcf\x5f\x18\x00\x00") +var _frontendIndexHTML = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x58\x6d\x53\xdb\x38\x10\xfe\x4c\x7f\xc5\xd6\x7c\xb8\xbb\x1e\x8e\xf3\x52\xa0\x50\x27\x33\x05\x72\x94\x16\xc8\x01\x29\x14\x6e\xee\x83\x6c\xaf\x6d\x05\x59\x32\x92\x9c\x10\x3a\xfc\xf7\x1b\xf9\x25\xe4\xad\x6d\xae\x2d\x77\x53\x62\xc9\x2b\xad\x9e\xe7\x59\xed\x4a\x76\x5f\x1e\xf4\xf6\xfb\xd7\x7f\x77\x21\xd6\x09\xeb\xbc\x70\xcd\x0f\x30\xc2\xa3\xb6\x85\xdc\xea\xbc\x00\x70\x63\x24\x81\x79\x00\x70\x13\xd4\x04\xfc\x98\x48\x85\xba\x6d\x65\x3a\xb4\xdf\x58\xd3\xaf\x62\xad\x53\x1b\xef\x32\x3a\x6c\x5b\x9f\xed\x4f\xef\xec\x7d\x91\xa4\x44\x53\x8f\xa1\x05\xbe\xe0\x1a\xb9\x6e\x5b\x47\xdd\x36\x06\x11\xce\x8c\xe4\x24\xc1\xb6\x35\xa4\x38\x4a\x85\xd4\x53\xc6\x23\x1a\xe8\xb8\x1d\xe0\x90\xfa\x68\xe7\x8d\x0d\xa0\x9c\x6a\x4a\x98\xad\x7c\xc2\xb0\xdd\xa8\x26\x7a\x69\xdb\xd0\x8f\x11\x88\x27\x86\x08\x2d\xc8\x27\xd6\x24\x52\xf0\x2a\xc9\x94\x7e\x05\xbe\x48\x10\x42\x2a\x95\x06\xca\x41\xc7\x08\x06\xdb\x5b\x20\x7c\x0c\x42\xc7\x28\xf3\x76\xe5\x1b\xcc\xa0\x62\xcc\x2b\x12\x6a\x94\xaf\xcc\x10\x85\xc5\x94\xb6\x5d\x7a\xd5\x54\x33\xec\xf4\xfa\x17\x60\x43\x8f\x23\xf4\x69\x82\x70\x81\xbe\x44\xad\x5c\xa7\x78\xfb\xe2\x69\x81\x7b\x42\x68\xa5\x25\x49\xf3\x19\xd6\xd6\x5c\x46\xf9\x2d\x48\x64\x6d\x4b\xe9\x31\x43\x15\x23\x6a\x0b\x62\x89\x61\xdb\x32\x7c\xaa\x5d\xc7\xf1\x03\x3e\x50\x35\x9f\x89\x2c\x08\x19\x91\x58\xf3\x45\xe2\x90\x01\xb9\x77\x18\xf5\x94\xe3\x99\x39\x47\x44\xfb\xb1\xd3\xaa\xb5\x6a\xdb\x4e\xc8\x88\x66\xe3\xa2\xdf\xf8\xaa\x25\x94\xd7\x7c\xa5\xac\x7c\x1d\xc5\x7f\x94\x6b\x8c\x24\xd5\xe3\xb6\xa5\x62\xd2\xdc\xdc\xb2\x65\xe3\x8a\x0e\xae\x9c\x8b\xd3\x93\xa8\x37\xba\xdd\x3c\x3e\xb8\xdd\x3e\x3b\x7f\x2f\xb7\xc4\xe5\xf5\xb5\x77\x7d\x75\x32\x72\x1a\xb7\xbd\xcf\xe1\xf5\x87\x30\x6a\x5b\xe0\x4b\xa1\x94\x90\x34\xa2\xbc\x6d\x11\x2e\xf8\x38\x11\x99\xb2\xc0\x29\x79\xf9\x05\xb8\x42\xc1\xb5\x4d\x46\xa8\x44\x82\xce\xeb\xda\x76\xad\xee\xf8\x6a\xb6\x7b\x35\x64\x78\x23\xe5\x07\x7f\x74\xe0\x3b\xad\xec\x20\x56\x81\xde\x6a\xa8\xe3\xa6\xe8\xed\x5d\xb7\xb6\x9a\x77\x27\x2d\x26\x78\x23\x1a\x77\xef\x6f\x8f\xeb\xdf\x46\xf6\xa4\xe3\xfb\xfe\xc9\xf1\x26\xa8\x98\x26\x40\x78\x00\xe7\xa8\x52\xc1\x83\xda\x40\x41\x28\x24\x1c\x75\xdf\x80\xca\x52\x13\xcb\x20\xc2\xd2\x18\x19\x26\xc8\xb5\xca\x07\x24\x18\x50\x02\x77\x19\x4a\x8a\x53\xd1\x64\xa6\xbe\x7a\x77\x7e\x7a\x74\x7a\xb8\x3b\x3d\x69\x20\x50\xf1\xdf\x34\x8c\x84\xbc\x05\x1a\xc2\x58\x64\x60\x76\x4b\x1e\xc5\x29\x89\x10\x86\x94\x40\x48\x19\xee\x3a\xce\xcc\x74\xff\xd0\x10\x98\x86\xa3\x2e\xec\xfc\xdb\x29\x59\x72\x95\x2f\x69\xaa\x41\x49\x7f\x65\x31\x4c\x66\xd8\x54\x31\x1d\x3a\xad\xda\x76\xad\xf5\xd4\xce\x25\x18\xcc\x28\xb0\x5c\x85\xd6\x87\xb1\x73\xe8\x5d\x1c\xcb\xa8\x2e\x76\xc6\x9b\x37\x9b\xbc\x91\x8d\xea\x77\xf7\x37\xdd\xfd\xf7\xdb\xfb\x5b\xbd\xb3\xf4\x72\x2f\x3a\xfd\xeb\x9a\xd4\xbf\x11\x5f\x1d\xd7\x29\x16\xff\x33\x58\xe4\x84\x58\xa7\x51\x7b\x5d\x6b\x4e\x3a\x56\x85\x12\x6d\xd1\x77\xe1\xf0\x26\xfd\x93\x1f\x9c\x35\xfb\x41\xff\xdc\xb9\xbc\xfc\xf8\x21\x6c\x79\x87\x52\xbc\xce\xbc\xcd\x70\x78\x75\x71\x75\x79\x4e\x9b\xa7\xdd\x95\xa1\xb8\x2f\xff\x41\x1e\xd0\xf0\x5f\xa3\x5e\xd1\x93\xef\x9c\x0a\xe8\xba\x89\x77\x1d\x53\x1e\x8d\xa4\xe0\xd1\x06\xac\x73\xa1\x43\x91\xf1\x60\x03\xd6\x53\xc2\x91\x9d\x23\x09\x8a\xcc\x53\xf5\x14\xad\x4f\xe7\xc7\xf0\x65\x82\x29\xa0\x2a\x65\x64\xbc\x0b\x5c\x70\x7c\x5b\x76\x3f\x96\xbf\xb5\x50\x08\x8d\x72\xca\x3c\xdf\x6d\x8a\x3e\xe0\x2e\xd4\x6b\x3b\x98\xbc\x9d\xbc\xd1\x78\xaf\x6d\xc2\x68\xc4\x77\xc1\x47\xae\x51\x3e\xbd\xf3\x05\x13\x72\x17\xd6\x9b\xa1\xf9\x7f\xd6\x8b\xeb\x4c\x70\xb9\x4e\x55\x5d\x5c\x4f\x04\xe3\x3c\x21\x72\x32\x04\x9f\x11\xa5\xda\x16\x27\x43\x8f\x48\x28\x7e\xec\x00\x43\x92\x31\x6d\x19\xab\x35\x37\xa0\x13\x33\x93\xb0\x09\xe5\x28\xed\x90\x65\x34\x28\x0c\xd6\x8a\x74\x2b\xcd\x66\x33\xff\xb4\x88\x22\x86\x10\xa1\x86\x48\x8a\x2c\xc5\x20\xdf\xa9\x1e\x6a\x83\x37\x11\x1e\x65\x58\x71\x53\xe6\xe6\x59\x2f\xe5\x2a\xcc\x82\x51\x96\x3e\xd6\x5c\x2f\xd3\x5a\x70\xd0\xe3\x14\xdb\x56\xd1\xb0\xe6\x46\x94\x9e\x7d\xc1\x18\x49\x15\x06\x16\x04\x44\x93\xb2\xdb\xac\xbe\xe8\xaf\xba\x89\x8c\x4c\x75\x5d\xf7\x94\x8d\xf7\x24\x49\x19\xda\xe5\x44\x95\xa5\xdd\xb0\x80\x48\x4a\x6c\xbc\x4f\x09\x0f\x30\x68\x5b\x21\x61\x0a\xab\x45\xad\xb9\x2a\x25\xbc\x5a\x85\x92\xb6\xe0\x6c\x6c\x75\xfa\xc5\x3a\x38\x19\xd2\x88\x68\x2a\xb8\xeb\x18\xbb\xa5\x83\xa8\x2f\xb8\xed\x11\x99\x07\xe9\x73\x18\xb9\x4e\x41\x56\xd5\x24\x73\xa4\x79\x46\xb8\xaa\x5e\xac\x5b\x5f\x2d\xb0\xa4\x14\xca\x09\xe8\xb0\xf3\xe2\x49\xf8\x7d\xc1\x18\xfa\x3a\xcf\x8f\x26\xa2\x4c\x39\x52\x1b\x46\xf2\x44\x6d\xe4\x01\x51\x54\xfc\xaa\xd8\x9b\x58\xc8\x15\xa1\x3c\x5a\x2a\x7f\x45\x3e\xcc\x89\x61\x01\x0d\xda\xd6\x37\xc5\xaa\x30\x66\x6c\x0a\x64\x35\xcf\xd4\xa3\xa4\x51\xac\x9f\x44\x64\xb4\xe3\x92\x09\x03\xb9\x1b\x8e\xa3\x02\xb9\xd5\x71\x69\x35\x59\x48\x20\x24\x76\xca\x8a\x94\x42\x3b\xf0\xe5\x4b\x1f\x2c\x4f\x73\x9b\xe3\xc8\x56\x85\xfd\xe3\xa3\xe1\xca\x75\x18\x9d\x08\x90\xb1\x69\xee\x72\xd6\x9c\xda\xdc\xea\x2b\x2a\x66\x6c\xe6\xf6\x5b\x75\x92\x71\x38\x19\x76\xa0\x4c\x5d\xcb\xb6\xa7\x35\xc9\xd9\x53\x6f\xa5\x18\x4d\xfa\xe7\xc7\x31\x3b\x09\xec\x37\x50\x3e\xa4\x99\x8a\xed\xe6\x94\xf1\xac\x39\x61\x28\x35\xe4\x7f\xed\x80\xf0\x08\xa5\x05\x52\x98\x1d\x96\xf7\x95\x04\x96\x29\x73\x66\x16\x80\x79\x32\xef\x32\x54\x66\x87\xd8\x3e\x95\xbe\x39\xbc\xe6\xdb\x2d\xa6\x41\x80\xbc\x6d\x69\x99\x61\x41\xf5\xcc\x24\x39\xed\x85\xff\x82\x74\x9b\x0b\x6d\x17\xee\x1e\x1f\xa7\x57\x5d\x04\xeb\x4f\xc0\x98\x2d\x05\xcf\x0d\xa6\x72\x66\x8f\x90\x6b\xbb\x70\xf9\x2d\x40\x33\xcd\x6a\x67\xfe\x80\xf2\x0d\x23\xf6\x57\x68\xca\xcb\x1b\xe4\x7f\xed\x54\xd2\x84\xc8\x71\x41\x4d\xde\x75\xfa\xb4\x4f\x66\xa9\x99\x9f\x21\x4f\xe7\x74\x81\x42\x73\xed\x69\xcd\x1a\xe6\x27\x79\xab\x93\xf3\x92\x3f\xcf\xef\xae\xb8\x35\xe7\x6b\x5e\xe5\x65\xee\x4d\xd5\x5b\xf4\x6d\xb2\x54\x0e\xc6\x3c\xec\x4b\x24\x1a\x97\xc2\x99\x9f\xd3\x98\xdb\x79\x75\x5b\x62\x68\xce\xe4\xc4\x43\x66\x52\x5d\xdb\x2a\x17\x5e\xe0\xc9\xfb\xab\xa0\x35\x55\x28\x07\x94\xf7\x2e\x9d\xc7\x54\x7e\x22\x91\xcc\xf8\x35\xdb\x5c\x0a\x66\xa2\x75\xa4\xda\xd6\x66\x19\xa9\x55\xba\x72\xaa\x41\x4b\x20\x2c\x32\x95\x77\x53\x9e\x66\xba\xf2\xe1\x69\x0e\x26\xa7\xa9\xcc\xf7\x51\x29\xab\x2c\xb9\x2a\xf3\x12\xaa\x2d\x18\x12\x96\x61\xdb\x9a\xa4\x3e\x3f\x67\xed\x49\x9f\x45\x92\x1d\xb3\xea\xef\x48\x36\x1b\xbc\x4b\x25\x2c\x63\x70\xb2\xac\x49\x0c\x4e\xce\x5e\xcf\x19\x83\xa5\x66\x05\xda\xe0\x57\xc7\x61\xba\x28\x4a\xe1\xdb\x9c\xfc\x52\x89\x76\x26\xd9\x6c\x26\x28\x1c\x2e\x8c\x5b\x39\x48\x4b\xcd\x0b\x6d\x8d\x1b\xeb\x2b\x31\x86\x24\x30\xa7\x9a\x45\x55\x97\x84\xd2\xb7\x71\x78\x99\xe4\x76\x4c\xb9\x5e\x01\xc9\x4f\x04\xc8\x62\x92\x7a\x3a\xae\x3f\x67\x84\xc8\x62\xe8\x33\x65\xaa\x95\x75\x5d\x31\x65\x4c\x74\xfd\x7a\xbe\x58\xa4\x1c\xbe\xab\xb1\x91\x37\x17\x1a\x83\x5f\xa1\x72\xd1\x86\xc9\x71\xa8\xac\x56\x93\x7b\xf7\xbc\x85\x14\x23\x98\xdc\xea\xfe\x77\x11\x84\xe2\x4e\x36\xc3\xea\xd4\x36\x14\x23\x94\x18\xd8\xde\xd8\x7a\x7c\x84\xc9\x81\xb1\xba\x09\x47\x54\xc7\x99\x97\xdf\x7f\x8f\xb3\x07\x1a\xa2\x74\x84\x56\x8b\xc7\xc7\xc2\xae\x3c\x40\x56\x96\xbd\xfe\x45\x7e\xc2\x5e\x4a\xcc\x54\x63\x9a\x9f\x1c\xf2\xe0\x2c\x43\x39\x86\xdf\x39\x9a\xa4\x48\xe4\x38\x3f\x5f\x4f\xbe\x7d\xfd\xa6\xe0\x03\x19\x92\x8b\xe2\xe6\x9e\xb2\x2c\xa2\x5c\xfd\xf1\xf4\xd9\xe2\x07\xae\xf4\x83\x3b\xe3\xd1\x69\xd4\x1a\xcd\xda\xeb\xb2\xb5\xf4\x3a\xbf\x78\x99\xbf\x11\xaa\xeb\x9d\x1f\x7b\xa7\x67\x0f\xc7\x29\xff\x78\x74\xdb\x0d\xe4\xdf\xc3\x6d\xd6\x1b\xef\xec\x37\xb7\xe3\xf7\x67\x7f\x7e\x4e\xdf\x90\xd7\x27\xf7\xef\xce\xfe\xc7\x65\xde\xb6\xe1\x88\xfb\x2c\x0b\x10\x08\x63\xe0\x8b\x24\xa5\x0c\x83\x0a\x2d\xfc\xee\x21\x13\xa3\x3f\x36\x40\x48\xa0\xa5\x21\xe5\x01\x1d\xd2\x20\x23\x2c\xff\x94\xa3\x80\x28\xe0\x88\x01\x06\x3f\xc5\x8d\x1e\x51\x73\xc9\xb5\x27\xdf\x03\xcb\xcf\x84\x03\x35\xf7\x89\xf0\xfb\x5c\x7d\xda\xbc\xe9\xe2\xc7\xf0\xf0\xb4\x37\x20\xf5\xfa\xf6\xc9\xc9\x41\xeb\x7a\xef\xa8\xfe\xae\xd5\xbb\xb8\xe9\x9d\x79\x78\xb8\xf5\xd0\x0c\x9b\xd7\xf5\x38\x7b\xb3\x3a\x57\x3f\x00\x29\xa2\x9e\x87\x92\xaa\xd8\x26\xa8\x9c\x46\xad\x5e\xab\xcf\xf6\xad\x88\xe7\xfd\xce\x9e\xf3\xf9\xfc\x80\x0e\x4e\xe9\x5f\x2d\x12\x5d\x0e\x34\x7d\x68\x1c\x1d\x5f\xd2\x96\xaf\xba\xc1\xe1\xc3\xce\xf5\x5e\xb4\xd9\x1f\x5c\x89\xec\x64\x25\x3c\x8b\x80\x48\x9a\x32\xea\xe7\xf7\x6d\xb3\x9e\x19\xec\xae\x53\x7c\xf5\x70\x9d\xe2\xf3\xfb\x8b\xff\x02\x00\x00\xff\xff\xc6\xa7\xf4\x23\x90\x17\x00\x00") -func frontendIndexHtmlBytes() ([]byte, error) { +func frontendIndexHTMLBytes() ([]byte, error) { return bindataRead( - _frontendIndexHtml, + _frontendIndexHTML, "frontend/index.html", ) } -func frontendIndexHtml() (*asset, error) { - bytes, err := frontendIndexHtmlBytes() +func frontendIndexHTML() (*asset, error) { + bytes, err := frontendIndexHTMLBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "frontend/index.html", size: 6239, mode: os.FileMode(436), modTime: time.Unix(1501854195, 0)} + info := bindataFileInfo{name: "frontend/index.html", size: 6032, mode: os.FileMode(436), modTime: time.Unix(1501870106, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _frontendLocaleDeDeAllJSON = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\xbf\x6e\x13\x41\x10\xc6\xfb\x3c\xc5\xc4\xb5\x2f\x44\x20\x51\x98\x0a\x94\x08\x21\x45\x14\x44\x74\x34\x7b\xbb\xdf\xdd\xae\xb2\x9e\xb3\x66\x66\x39\xfe\x28\x6f\x93\x67\xa0\xa2\xf3\x8b\xa1\x3d\xdb\xc4\x89\xce\xd0\xad\xb4\xfa\x66\xbe\x6f\xe6\x37\x3f\xcf\x88\x16\x2e\x43\xac\x51\x78\x81\x35\x3c\x58\xd3\x0d\x85\xc3\x62\x45\xf5\x97\x68\x31\x58\x84\x2c\x56\xb4\xb8\x72\x4a\x49\x8d\x38\xf9\x68\x14\x9c\xd2\xed\x24\x5a\xd2\xe8\x94\x42\x21\x2d\x3e\xaa\x7d\x29\x97\x97\x2f\x5f\x47\xe4\x9c\x36\x6f\x16\x67\x44\xf7\xcb\xa3\x36\xc3\x1a\x16\x13\xf7\xcd\x08\xb6\x66\x94\x81\xfb\x99\x56\x1f\xa4\x07\x87\x5a\xb6\x4f\xdc\x93\xfa\x98\xd0\x5d\xd0\x35\x9b\xfa\x58\x72\x48\x7d\xe1\xfe\x44\xa3\xd6\xb8\xf1\x02\x67\xd8\x87\x9a\xa9\xbf\x33\x4e\x10\x35\xe4\x0c\x3e\x7f\x2a\x67\x8c\xa7\xb5\x1f\x51\x70\x88\xfe\x28\xcb\xae\x45\x3e\x4c\x31\x38\x73\x73\xa9\x38\xba\x6c\x14\xfe\xca\x75\xf5\x58\xc0\xf0\xcd\x9a\xb6\x08\x37\x31\xf1\x5c\xdf\x77\xc9\x0c\x24\xa5\x03\x85\x04\xfa\xfc\xe9\x66\xbf\x09\x45\x6e\xd5\xc8\x95\x6e\x49\xc1\x1d\x2d\x86\x82\x0b\x45\x7c\xa4\x1f\x35\xe8\xf6\x97\x18\x8d\xdb\xdf\x12\x70\x41\xef\x53\x4b\x9a\x40\x48\xdc\x39\x1f\x69\x44\x32\xc8\xf9\x33\x3b\xd5\xc9\xe4\x09\x73\x3c\xd4\xf9\xbf\xf2\x6a\x75\x87\xd3\x1b\x6f\x7d\xb4\xc2\xfd\x6a\xf7\xf3\xe2\xf8\x8b\xae\x0a\xdd\x39\x66\xdd\x91\xc3\x45\x6a\xef\xb5\xcb\xe4\x58\x11\xc1\xe7\x74\x3b\xb4\x2e\x87\x0a\x52\xcd\x77\x5b\x1d\x11\xa3\x50\xde\x3e\x04\xb5\xe5\xc4\xde\x51\xb8\xaf\x10\xf5\x71\x2c\x1c\xc0\x4b\x72\x59\x07\x6a\xa1\x0a\xa1\x90\x04\x77\x46\x77\xc3\x26\x41\xc0\x54\x38\x90\x26\x1f\x21\xe4\x5a\xdd\x60\x7a\xf2\x09\x7c\xa6\xe0\x9b\x61\x84\x20\x34\xed\xf7\x99\xdc\x37\xdb\x87\xd2\x19\xad\x93\x3d\x57\x09\x9a\x22\x79\xee\x74\x90\xf8\xe0\x7b\x2c\x12\x40\x8e\x7b\x64\xf4\x36\x99\x2b\x6c\x10\xea\x86\x5c\xa9\x87\x4c\xbb\xed\x71\x70\x6a\xc7\x94\x24\xcb\xf8\x37\x9f\xd7\x7b\xa8\xeb\x7c\xeb\xfc\x66\x60\xdd\x55\x11\xb8\x50\x2f\xf1\x7f\x57\xe2\x8a\x66\x28\x4e\x0e\x6c\x2a\xb6\x27\x7f\x77\x78\x73\xb4\x3c\x3d\x39\xdb\xa1\x76\x76\xff\x27\x00\x00\xff\xff\xb3\xf6\x2a\x14\x83\x04\x00\x00") + +func frontendLocaleDeDeAllJSONBytes() ([]byte, error) { + return bindataRead( + _frontendLocaleDeDeAllJSON, + "frontend/locale/de-de.all.json", + ) +} + +func frontendLocaleDeDeAllJSON() (*asset, error) { + bytes, err := frontendLocaleDeDeAllJSONBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "frontend/locale/de-de.all.json", size: 1155, mode: os.FileMode(436), modTime: time.Unix(1501874104, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _frontendLocaleDeDeUntranSLAtedJSON = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xae\x05\x04\x00\x00\xff\xff\x43\xbf\xa6\xa3\x02\x00\x00\x00") + +func frontendLocaleDeDeUntranSLAtedJSONBytes() ([]byte, error) { + return bindataRead( + _frontendLocaleDeDeUntranSLAtedJSON, + "frontend/locale/de-de.untranslated.json", + ) +} + +func frontendLocaleDeDeUntranSLAtedJSON() (*asset, error) { + bytes, err := frontendLocaleDeDeUntranSLAtedJSONBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "frontend/locale/de-de.untranslated.json", size: 2, mode: os.FileMode(436), modTime: time.Unix(1501874104, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _frontendLocaleEnUsAllJSON = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x53\xc1\x6e\xdb\x4a\x0c\xbc\xfb\x2b\x26\xba\xe4\xf2\xe4\x17\xb4\x40\x0f\xee\x29\xe8\xa9\x45\x50\x14\x4e\x73\x08\xd0\xcb\xca\xa2\xa5\x45\xd7\xa4\xc1\xe5\x56\x15\x8a\xfc\x7b\xb1\x92\xe2\xaa\x86\xd4\x8b\x20\x80\x1c\x72\x86\x33\xfb\x6b\x03\x14\x2e\x90\x5a\x19\xe9\xa0\x64\x25\x8b\x95\x47\x49\x5c\x17\x3b\xe4\x2a\x50\x88\xb5\xa4\xc5\x0e\xc5\xd7\xd6\x47\xf8\x08\x16\x83\xb5\x84\x11\x82\x5e\x12\x9c\x12\x82\xc8\x77\xcf\x0d\x8e\xa2\xdf\xd2\xdd\xdd\x9b\x77\x2d\x85\xe0\xcf\xef\x8b\x0d\xf0\xf2\xdf\x6c\x93\x9c\xc8\x5a\xcf\x4d\xd9\x11\x5b\xd9\xa9\x70\xb3\xb0\xed\xf1\xb5\x0d\xb9\x0d\x43\xdb\x16\x1f\x6f\x4f\xf8\x41\xda\x23\x8a\x6a\x0f\x57\x49\xca\x64\x7c\x5c\x59\x59\x19\x97\x07\x25\x67\x34\x29\x5c\xd8\xf4\x61\xa8\xcf\x24\xdd\xfc\x8d\x67\xea\xd6\xc1\x9f\xa9\xc3\xe3\x58\xbc\x80\x82\xab\x28\xbc\x5e\xb4\x76\xe6\x96\xe4\x8d\xc7\xcb\xd5\xdd\x1f\xa4\xd1\x4f\x2b\xab\xa4\x5c\xb6\x9e\x97\xd6\x7d\x09\xe4\x22\x41\xe9\x44\xa7\x8a\x74\xf4\x42\xd0\x48\xfe\xe6\x3b\xe0\x69\xff\x90\x2d\xd1\x48\xe1\x08\x17\x61\xad\x33\x74\x92\x42\x8d\x9a\xa2\xa9\xf4\x33\xa5\x5b\x7c\x4a\xd1\x70\x76\x31\xc2\x0f\x93\xb2\x3b\xc2\x04\x0a\x91\x6e\xae\x88\x65\x4e\x03\x3b\x5a\x8a\x47\x76\xe0\xed\x21\x6f\xe0\x66\xf8\xa7\x7b\x33\x62\xf3\xc2\xbb\xb1\xf6\xff\xbc\x88\x67\x49\xb7\x4a\x10\x0e\x3d\x22\x51\x76\x7a\x10\x20\x7c\xa0\x2d\xee\x23\xa2\x08\x67\x05\x39\x60\x4a\x41\x5c\x3d\x30\x3f\xbb\x66\x6e\x16\x3a\x1f\x02\x2a\x42\x93\x69\x47\xc1\xc9\xf5\x15\xe1\x20\xe7\x3e\x4b\x62\xe9\x56\xa2\x31\x48\x3a\x4b\x47\x4a\x75\x59\xf5\x4b\xc7\x1e\x8b\xa8\xfa\x6b\x94\x52\x99\x34\x2c\x40\x9e\x25\xe9\x85\x98\x8b\x18\xb3\x57\xc3\x71\x8d\x68\x92\xa7\xa5\x78\x91\xfa\xb4\x7f\x98\x9b\xef\x2d\xd0\xbf\xd3\x36\x45\xd5\x81\xa9\x9b\xd6\x5c\xe3\x95\x5c\x9d\x1f\xd7\xea\x8c\xfd\xd8\x30\x84\x64\x9a\xb1\x76\xa1\x61\xe0\x94\xe3\x49\xc9\x7a\x94\xa7\x86\x31\x34\x9b\x97\xdf\x01\x00\x00\xff\xff\x32\x1d\xf3\xc7\x5c\x04\x00\x00") + +func frontendLocaleEnUsAllJSONBytes() ([]byte, error) { + return bindataRead( + _frontendLocaleEnUsAllJSON, + "frontend/locale/en-us.all.json", + ) +} + +func frontendLocaleEnUsAllJSON() (*asset, error) { + bytes, err := frontendLocaleEnUsAllJSONBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "frontend/locale/en-us.all.json", size: 1116, mode: os.FileMode(436), modTime: time.Unix(1501874104, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _frontendLocaleEnUsUntranSLAtedJSON = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xae\x05\x04\x00\x00\xff\xff\x43\xbf\xa6\xa3\x02\x00\x00\x00") + +func frontendLocaleEnUsUntranSLAtedJSONBytes() ([]byte, error) { + return bindataRead( + _frontendLocaleEnUsUntranSLAtedJSON, + "frontend/locale/en-us.untranslated.json", + ) +} + +func frontendLocaleEnUsUntranSLAtedJSON() (*asset, error) { + bytes, err := frontendLocaleEnUsUntranSLAtedJSONBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "frontend/locale/en-us.untranslated.json", size: 2, mode: os.FileMode(436), modTime: time.Unix(1501874104, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -184,7 +268,11 @@ func AssetNames() []string { var _bindata = map[string]func() (*asset, error){ "frontend/application.coffee": frontendApplicationCoffee, "frontend/application.js": frontendApplicationJs, - "frontend/index.html": frontendIndexHtml, + "frontend/index.html": frontendIndexHTML, + "frontend/locale/de-de.all.json": frontendLocaleDeDeAllJSON, + "frontend/locale/de-de.untranslated.json": frontendLocaleDeDeUntranSLAtedJSON, + "frontend/locale/en-us.all.json": frontendLocaleEnUsAllJSON, + "frontend/locale/en-us.untranslated.json": frontendLocaleEnUsUntranSLAtedJSON, } // AssetDir returns the file names below a certain @@ -226,11 +314,18 @@ type bintree struct { Func func() (*asset, error) Children map[string]*bintree } + var _bintree = &bintree{nil, map[string]*bintree{ - "frontend": &bintree{nil, map[string]*bintree{ - "application.coffee": &bintree{frontendApplicationCoffee, map[string]*bintree{}}, - "application.js": &bintree{frontendApplicationJs, map[string]*bintree{}}, - "index.html": &bintree{frontendIndexHtml, map[string]*bintree{}}, + "frontend": {nil, map[string]*bintree{ + "application.coffee": {frontendApplicationCoffee, map[string]*bintree{}}, + "application.js": {frontendApplicationJs, map[string]*bintree{}}, + "index.html": {frontendIndexHTML, map[string]*bintree{}}, + "locale": {nil, map[string]*bintree{ + "de-de.all.json": {frontendLocaleDeDeAllJSON, map[string]*bintree{}}, + "de-de.untranslated.json": {frontendLocaleDeDeUntranSLAtedJSON, map[string]*bintree{}}, + "en-us.all.json": {frontendLocaleEnUsAllJSON, map[string]*bintree{}}, + "en-us.untranslated.json": {frontendLocaleEnUsUntranSLAtedJSON, map[string]*bintree{}}, + }}, }}, }} @@ -280,4 +375,3 @@ func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } - diff --git a/frontend/index.html b/frontend/index.html index df896ea..b9bdece 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -50,7 +50,7 @@ @@ -61,11 +61,11 @@
@@ -75,39 +75,39 @@
-

Create a new secret

+

{{T "title-new-secret"}}

- +
- +
-

Secret created!

+

{{T "title-secret-created"}}

- Your secret was created and stored using this URL: + {{T "text-pre-url"}}

- Please remember not to go to this URL yourself as that would destroy the secret. Just pass it to someone else! + {{T "text-burn-hint"}}

-

Reading your secret...

+

{{T "title-reading-secret"}}

@@ -115,7 +115,7 @@

- Attention: You're only seeing this once. As soon as you reload the page the secret will be gone so maybe copy it now… + {{T "text-hint-burned"}}

@@ -125,7 +125,7 @@
diff --git a/frontend/locale/de-de.all.json b/frontend/locale/de-de.all.json new file mode 100644 index 0000000..55b32a3 --- /dev/null +++ b/frontend/locale/de-de.all.json @@ -0,0 +1,38 @@ +{ + "alert-secret-not-found": { + "other": "Das ist nicht das Secret, was du suchst\u0026hellip;" + }, + "alert-something-went-wrong": { + "other": "Irgendwas ging schief. Entschuldigung\u0026hellip;" + }, + "btn-create-secret": { + "other": "Secret erstellen!" + }, + "btn-new-secret": { + "other": "Neues Secret" + }, + "label-secret-data": { + "other": "Inhalt des Secrets:" + }, + "text-burn-hint": { + "other": "Bitte rufe die URL nicht selbst auf, da das Secret dadurch zerstört würde. Gib sie einfach weiter!" + }, + "text-hint-burned": { + "other": "\u003cstrong\u003eAchtung:\u003c/strong\u003e Du kannst das nur einmal ansehen! Sobald du die Seite neu lädst, ist das Secret verschwunden, also besser direkt kopieren und sicher abspeichern\u0026hellip;" + }, + "text-powered-by": { + "other": "Läuft mit" + }, + "text-pre-url": { + "other": "Dein Secret wurde angelegt und unter folgender URL gespeichert:" + }, + "title-new-secret": { + "other": "Erstelle ein neues Secret" + }, + "title-reading-secret": { + "other": "Secret auslesen\u0026hellip;" + }, + "title-secret-created": { + "other": "Secret erstellt!" + } +} \ No newline at end of file diff --git a/frontend/locale/en-us.all.json b/frontend/locale/en-us.all.json new file mode 100644 index 0000000..33f17f1 --- /dev/null +++ b/frontend/locale/en-us.all.json @@ -0,0 +1,38 @@ +{ + "alert-secret-not-found": { + "other": "This is not the secret you are looking for\u0026hellip;" + }, + "alert-something-went-wrong": { + "other": "Something went wrong. I'm very sorry about this\u0026hellip;" + }, + "btn-create-secret": { + "other": "Create the secret!" + }, + "btn-new-secret": { + "other": "New Secret" + }, + "label-secret-data": { + "other": "Secret data:" + }, + "text-burn-hint": { + "other": "Please remember not to go to this URL yourself as that would destroy the secret. Just pass it to someone else!" + }, + "text-hint-burned": { + "other": "\u003cstrong\u003eAttention:\u003c/strong\u003e You're only seeing this once. As soon as you reload the page the secret will be gone so maybe copy it now\u0026hellip;" + }, + "text-powered-by": { + "other": "Powered by" + }, + "text-pre-url": { + "other": "Your secret was created and stored using this URL:" + }, + "title-new-secret": { + "other": "Create a new secret" + }, + "title-reading-secret": { + "other": "Reading your secret\u0026hellip;" + }, + "title-secret-created": { + "other": "Secret created!" + } +} \ No newline at end of file diff --git a/main.go b/main.go index fae09ef..4d44c31 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,6 @@ package main -//go:generate go-bindata -pkg $GOPACKAGE -o assets.go ./frontend +//go:generate go-bindata -pkg $GOPACKAGE -o assets.go ./frontend/... import ( "fmt" @@ -9,6 +9,7 @@ import ( "os" "path" "strings" + "text/template" http_helpers "github.com/Luzifer/go_helpers/http" "github.com/Luzifer/rconfig" @@ -73,5 +74,15 @@ func assetDelivery(res http.ResponseWriter, r *http.Request) { } res.Header().Set("Content-Type", mime.TypeByExtension(ext)) - res.Write(assetData) + + tpl, err := template.New(assetName).Funcs(getTFuncMap(r)).Parse(string(assetData)) + + if err != nil { + log.Errorf("Template for asset %q has an error: %s", assetName, err) + return + } + + tpl.Execute(res, map[string]interface{}{ + "version": version, + }) } diff --git a/translations.go b/translations.go new file mode 100644 index 0000000..962c44f --- /dev/null +++ b/translations.go @@ -0,0 +1,40 @@ +package main + +import ( + "net/http" + "strings" + "text/template" + + "github.com/nicksnyder/go-i18n/i18n" + log "github.com/sirupsen/logrus" +) + +func init() { + for _, filename := range AssetNames() { + if !strings.HasPrefix(filename, "frontend/locale") || !strings.HasSuffix(filename, ".all.json") { + continue + } + + translationData, _ := Asset(filename) + if err := i18n.ParseTranslationFileBytes(filename, translationData); err != nil { + log.Fatalf("Unable to load translation data %q: %s", filename, err) + } + } +} + +func getTFuncMap(r *http.Request) template.FuncMap { + cookie, _ := r.Cookie("lang") + + cookieLang := "" + if cookie != nil { + cookieLang = cookie.Value + } + qpLang := r.URL.Query().Get("hl") + acceptLang := r.Header.Get("Accept-Language") + defaultLang := "en-US" // known valid language + + T, _ := i18n.Tfunc(cookieLang, qpLang, acceptLang, defaultLang) + return template.FuncMap{ + "T": T, + } +}