- Provide translation readiness on the Kibana web-facing UI
- Delivered in a phased approach
Phase 1
| [ | |
| { | |
| "_id": "foo1", | |
| "_type": "visualization", | |
| "_source": { | |
| "title": "foo1", | |
| "visState": "{\"title\":\"New Visualization\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}}],\"listeners\":{}}", | |
| "uiStateJSON": "{}", | |
| "description": "", | |
| "version": 1, |
| [ | |
| { | |
| "_id": "foo", | |
| "_type": "dashboard", | |
| "_source": { | |
| "title": "foo", | |
| "hits": 0, | |
| "description": "", | |
| "panelsJSON": "[{\"col\":3,\"id\":\"foo1\",\"row\":1,\"size_x\":2,\"size_y\":2,\"type\":\"visualization\"},{\"col\":5,\"id\":\"foo2\",\"row\":1,\"size_x\":2,\"size_y\":2,\"type\":\"visualization\"},{\"col\":9,\"id\":\"foo3\",\"row\":1,\"size_x\":2,\"size_y\":2,\"type\":\"visualization\"},{\"col\":11,\"id\":\"foo4\",\"row\":1,\"size_x\":2,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"foo5\",\"row\":1,\"size_x\":2,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"foo6\",\"row\":1,\"size_x\":2,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"foo7\",\"row\":6,\"size_x\":3,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"foo8\",\"row\":6,\"size_x\":3,\"size_y\":2,\"type\":\"visualization\"},{\"col\":10,\"id\":\"foo9\",\"row\":8,\"size_x\":3,\"size_y\":2,\"type\":\"visualization\"},{\"col\":10,\"id\":\"foo10\",\"row\":6,\"size_x\": |
| dev: { | |
| options: { | |
| directory: resolve(directory, 'dev'), | |
| plugins: [{ | |
| name: 'ingest-geoip', | |
| path: 'file:///Users/matt/Code/elasticsearch/plugins/ingest-geoip/build/distributions/ingest-geoip-5.0.0-SNAPSHOT.zip' | |
| }], | |
| config: { | |
| path: { | |
| data: dataDir |
| ~>> esvm ingest | |
| Mar 2, 2016 1:58 PM INFO cluster Installing plugins | |
| Mar 2, 2016 1:58 PM INFO cluster Installing "ingest-geoip" plugin | |
| Mar 2, 2016 1:58 PM INFO cluster Starting 1 nodes | |
| Mar 2, 2016 1:58 PM INFO Berzerker node version[5.0.0-SNAPSHOT], pid[51523], build[517d1bd/2016-03-02T16:39:43.956Z] | |
| Mar 2, 2016 1:58 PM INFO Berzerker node initializing ... | |
| Mar 2, 2016 1:58 PM INFO Berzerker plugins modules [lang-mustache, lang-painless, ingest-grok, reindex, lang-expression, lang-groovy], plugins [ingest-geoip] | |
| Mar 2, 2016 1:58 PM INFO Berzerker env using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [396.5gb], net total_space [464.7gb], spins? [unknown], types [hfs] | |
| Mar 2, 2016 1:58 PM INFO Berzerker env heap size [990.7mb], compressed ordinary object pointers [true] | |
| Mar 2, 2016 1:58 PM WARN Berzerker plugins plugin ingest-geoip, failed to invoke custom onModule method |
| INFO ? ? MapperParsingException[Failed to parse mapping [config]: The [string] type is removed in 5.0. You should now use either a [text] or [… | |
| INFO ? ? at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:334) | |
| INFO ? ? at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45) | |
| INFO ? ? at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:463) | |
| INFO ? ? at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:774) | |
| INFO ? ? at org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor$Fi |
| kibana>> esvm --branch=master -f | |
| Mar 21, 2016 2:57 PM INFO cluster Downloading & installing from "master" branch. | |
| /Users/matt/.nvm/versions/node/v4.3.2/lib/node_modules/esvm/node_modules/progress/lib/node-progress.js:131 | |
| complete = Array(completeLength + 1).join(this.chars.complete); | |
| ^ | |
| RangeError: Invalid array length | |
| at ProgressBar.render (/Users/matt/.nvm/versions/node/v4.3.2/lib/node_modules/esvm/node_modules/progress/lib/node-progress.js:131:14) | |
| at ProgressBar.tick (/Users/matt/.nvm/versions/node/v4.3.2/lib/node_modules/esvm/node_modules/progress/lib/node-progress.js:86:8) | |
| at EventEmitter.wrapper (/Users/matt/.nvm/versions/node/v4.3.2/lib/node_modules/esvm/node_modules/lodash/lodash.js:4405:19) |
| import _ from 'lodash'; | |
| import path from 'path'; | |
| export default function transformer(file, api) { | |
| const j = api.jscodeshift; | |
| const {expression, statement, statements} = j.template; | |
| let relativeToPublic = path.relative(path.dirname(file.path), '/Users/matt/Code/kibana/src/ui/public'); | |
| if (relativeToPublic === '') { | |
| relativeToPublic = '.'; |
| { | |
| "management_title": "administración", | |
| "management_version": "versión" | |
| } |
| function getFilesRecursivelyFromTopDir(topDir, translationFiles, languageList) { | |
| return readdir(topDir) | |
| .then((topDirectoryListing) => { | |
| return Promise.map(topDirectoryListing, (listing) => { | |
| const fullPath = path.join(topDir, listing); | |
| return stat(fullPath).then((stats) => { | |
| if (stats.isDirectory()) { | |
| console.log('** FullPath **: ' + fullPath + ' is a directory'); | |
| getTranslationDetailsFromDirectory(fullPath, translationFiles, languageList); | |
| } else { |