More updates for I18N (#647)

This commit is contained in:
Westly Wright 2016-05-10 23:23:45 -07:00 committed by Vincent Fiduccia
parent a208c8ebf8
commit a3943205b0
20 changed files with 297 additions and 123 deletions

View File

@ -5,14 +5,14 @@
<div class="well"> <div class="well">
<div class="form-inline r-mb25 inline-block"> <div class="form-inline r-mb25 inline-block">
<div class="form-group"> <div class="form-group">
{{input class="form-control input-sm r-mr5" value=filters.eventType placeholder="auditLogsPage.form.eventType.placeholder"}} {{input class="form-control input-sm r-mr5" value=filters.eventType placeholder=(t "auditLogsPage.form.eventType.placeholder")}}
<div class="input-group r-mr5"> <div class="input-group r-mr5">
<span class="input-group-btn"> <span class="input-group-btn">
{{input class="form-control input-sm pull-right" value=filters.resourceId placeholder="auditLogsPage.form.resourceId.placeholder" disabled=resourceIdReady}} {{input class="form-control input-sm pull-right" value=filters.resourceId placeholder=(t "auditLogsPage.form.resourceId.placeholder") disabled=resourceIdReady}}
<button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{{if filters.resourceType filters.resourceType "auditLogsPage.form.resourceType.placeholder"}} <i class="icon icon-chevron-down"></i></button> <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{{if filters.resourceType filters.resourceType (t "auditLogsPage.form.resourceType.placeholder")}} <i class="icon icon-chevron-down"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li role="presentation" class="dropdown-header"> <li role="presentation" class="dropdown-header">
Select a Resource Type: {{t 'auditLogsPage.form.resourceType.dropdownPlaceholder'}}
</li> </li>
{{#each model.resourceTypes as |resource|}} {{#each model.resourceTypes as |resource|}}
<li {{action "updateResourceType" resource}}> <li {{action "updateResourceType" resource}}>
@ -22,12 +22,12 @@
</ul> </ul>
</span> </span>
</div> </div>
{{input class="form-control input-sm r-mr5" value=filters.clientIp placeholder="auditLogsPage.form.requestIp.placeholder"}} {{input class="form-control input-sm r-mr5" value=filters.clientIp placeholder=(t "auditLogsPage.form.requestIp.placeholder")}}
<span class="dropdown"> <span class="dropdown">
<button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{{if authTypeReadable authTypeReadable "auditLogsPage.form.authType.placeholder"}} <i class="icon icon-chevron-down"></i></button> <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{{if authTypeReadable authTypeReadable (t "auditLogsPage.form.authType.placeholder")}} <i class="icon icon-chevron-down"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li role="presentation" class="dropdown-header"> <li role="presentation" class="dropdown-header">
Select an Auth Type: {{t 'auditLogsPage.form.authType.dropdownPlaceholder'}}
</li> </li>
{{#each authTypes as |type|}} {{#each authTypes as |type|}}
<li {{action "updateAuthType" type}}> <li {{action "updateAuthType" type}}>
@ -53,27 +53,27 @@
<tbody> <tbody>
{{#each model.auditLog as |log|}} {{#each model.auditLog as |log|}}
<tr> <tr>
<td data-title="Time:">{{format-relative log.created interval=C.LANGUAGE.FORMAT_RELATIVE_TIMEOUT}}</td> <td data-title="{{t 'auditLogsPage.table.time'}}:">{{format-relative log.created interval=C.LANGUAGE.FORMAT_RELATIVE_TIMEOUT}}</td>
<td data-title="Event Type:" class="force-wrap" title="{{log.eventType}}"> <td data-title="{{t 'auditLogsPage.table.eventType'}}:" class="force-wrap" title="{{log.eventType}}">
{{log.eventType}} <i class="icon icon-info addtl-info-trigger" {{action 'showResponseObjects' log.requestObject log.responseObject }}></i> {{log.eventType}} <i class="icon icon-info addtl-info-trigger" {{action 'showResponseObjects' log.requestObject log.responseObject }}></i>
</td> </td>
<td data-title="Description:">{{#if log.description}}{{log.description}}{{else}}<span class="text-muted">None</span>{{/if}}</td> <td data-title="{{t 'auditLogsPage.table.description'}}:">{{#if log.description}}{{log.description}}{{else}}<span class="text-muted">None</span>{{/if}}</td>
<td data-title="Environment:" class="clip"> <td data-title="{{t 'auditLogsPage.table.environment'}}:" class="clip">
{{#if (eq log.account.type "project")}} {{#if (eq log.account.type "project")}}
{{log.account.name}} {{log.account.name}}
{{else}} {{else}}
<span class="text-muted">-</span> <span class="text-muted">-</span>
{{/if}} {{/if}}
</td> </td>
<td data-title="Resource Type(ID):" class="clip" title="{{log.resourceType}}"> <td data-title="{{t 'auditLogsPage.table.resourceTypeId'}}:" class="clip" title="{{log.resourceType}}">
{{#if log.links.resource}} {{#if log.links.resource}}
<a href="{{log.links.resource}}" target="_blank">{{log.resourceType}}{{#if log.resourceId}}: {{log.resourceId}}{{/if}}</a> <a href="{{log.links.resource}}" target="_blank">{{log.resourceType}}{{#if log.resourceId}}: {{log.resourceId}}{{/if}}</a>
{{else}} {{else}}
{{log.resourceType}}{{#if log.resourceId}}: {{log.resourceId}}{{/if}} {{log.resourceType}}{{#if log.resourceId}}: {{log.resourceId}}{{/if}}
{{/if}} {{/if}}
</td> </td>
<td data-title="Identity:">{{identity-block identityNotParsed=log.authenticatedAsIdentityId}}</td> <td data-title="{{t 'auditLogsPage.table.identity'}}:">{{identity-block identityNotParsed=log.authenticatedAsIdentityId}}</td>
<td data-title="Auth &amp; IP:" class="clip">{{auth-type log.authType}}<div>{{format-ip ip=log.clientIp noIp='generic.emptyString'}}</div></td> <td data-title="{{t 'auditLogsPage.table.authIp'}}:" class="clip">{{auth-type log.authType}}<div>{{format-ip ip=log.clientIp noIp='generic.emptyString'}}</div></td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>

View File

@ -1,7 +1,5 @@
<section class="header"> <section class="header">
<h1> <h1>{{t 'catalogPage.index.header'}} <span class="text-capitalize">{{selectedCatalog}}</span></h1>
Catalog: <span class="text-capitalize">{{selectedCatalog}}</span>
</h1>
<div class="pull-right"> <div class="pull-right">
<button type="button" class="btn btn-default btn-sm" disabled={{eq updating 'yes'}} {{action "update"}}> <button type="button" class="btn btn-default btn-sm" disabled={{eq updating 'yes'}} {{action "update"}}>
@ -32,7 +30,7 @@
<div class="btn-group searchable pull-right"> <div class="btn-group searchable pull-right">
<i class="icon icon-search"></i> <i class="icon icon-search"></i>
{{input placeholder="Search..." class="form-control input-sm" value=search}} {{input placeholder=(t 'catalogPage.index.search.placeholder') class="form-control input-sm" value=search}}
</div> </div>
</section> </section>
@ -41,7 +39,7 @@
<div class="container-catalog text-center"> <div class="container-catalog text-center">
{{#if catalogItem.official}} {{#if catalogItem.official}}
<div class='badge-certified'> <div class='badge-certified'>
<strong>Certified</strong> <strong>{{t 'catalogPage.index.certified'}}</strong>
</div> </div>
{{/if}} {{/if}}
<div class="catalog-icon"> <div class="catalog-icon">
@ -61,5 +59,12 @@
</div> </div>
{{else}} {{else}}
<div class="text-muted r-mt20">There are no compatible templates{{#if showCatalogDropdown}} in this Catalog{{/if}}.</div> <div class="text-muted r-mt20">There are no compatible templates{{#if showCatalogDropdown}} in this Catalog{{/if}}.</div>
<div class="text-muted r-mt20">
{{#if showCatalogDropdown}}
{{t 'catalogPage.index.noData.plural'}}
{{else}}
{{t 'catalogPage.index.noData.singular'}}
{{/if}}
</div>
{{/each}} {{/each}}
</section> </section>

View File

@ -2,9 +2,9 @@
<thead> <thead>
{{#if labelArray.length}} {{#if labelArray.length}}
<tr> <tr>
{{#if showKind}}{{sortable-th sortable=this action="changeSort" name="kind" width="90"}}{{/if}} {{#if showKind}}{{sortable-th sortable=this action="changeSort" name="kind" label='labelsSection.kind' width="90"}}{{/if}}
{{sortable-th sortable=this action="changeSort" name="key"}} {{sortable-th sortable=this action="changeSort" name="key" label='labelsSection.key'}}
{{sortable-th sortable=this action="changeSort" name="value"}} {{sortable-th sortable=this action="changeSort" name="value" label='labelsSection.value'}}
</tr> </tr>
{{/if}} {{/if}}
</thead> </thead>
@ -16,7 +16,7 @@
<td data-title="Value:" class="force-wrap">{{pretty-json value=label.value}}</td> <td data-title="Value:" class="force-wrap">{{pretty-json value=label.value}}</td>
</tr> </tr>
{{else}} {{else}}
<tr><td colspan="3" class="text-center text-muted">No labels</td></tr> <tr><td colspan="3" class="text-center text-muted">{{t 'labelsSection.noData'}}</td></tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -33,7 +33,7 @@
<div class="col-md-4"> <div class="col-md-4">
{{input-text-file {{input-text-file
value=subscriptionCert value=subscriptionCert
placeholder="Your Azure subscription certificate" placeholder="machine.driverAzure.accountAccess.subscriptionCert.placeholder"
accept="text/*, .cer" accept="text/*, .cer"
}} }}
</div> </div>
@ -91,7 +91,7 @@
<div class="col-md-4"> <div class="col-md-4">
{{input-text-file {{input-text-file
value=azureConfig.publishSettingsFile value=azureConfig.publishSettingsFile
placeholder="Your Publish Settings file" placeholder="machine.driverAzure.instance.publishSettingsFile.placeholder"
accept="text/*, .publishsettings" accept="text/*, .publishsettings"
}} }}
</div> </div>

View File

@ -1,5 +1,5 @@
<div class="shell-popup"> <div class="shell-popup">
<h2><i class="icon icon-terminal"></i> Shell: {{model.displayName}}</h2> <h2><i class="icon icon-terminal"></i> {{t 'consolePage.header'}} {{model.displayName}}</h2>
{{#container-shell {{#container-shell
instance=model instance=model
showProtip=false showProtip=false
@ -8,6 +8,6 @@
dismiss=(action "cancel") dismiss=(action "cancel")
disconncted=(action "cancel") disconncted=(action "cancel")
}} }}
<button {{action "cancel"}} class="btn btn-primary">Close</button> <button {{action "cancel"}} class="btn btn-primary">{{t 'consolePage.closeButton'}}</button>
{{/container-shell}} {{/container-shell}}
</div> </div>

View File

@ -1,13 +1,12 @@
<section class="fail-whale"> <section class="fail-whale">
<div class="error"> <div class="error">
<h2 class="bg-danger">Error</h2> <h2 class="bg-danger">{{t 'failWhalePage.header'}}</h2>
<div class="r-p20"> <div class="r-p20">
<h4 class="r-mt20">{{model.code}} {{#if model.status}}({{model.status}}){{/if}}</h4> <h4 class="r-mt20">{{model.code}} {{#if model.status}}({{model.status}}){{/if}}</h4>
<p>{{model.message}}</p> <p>{{model.message}}</p>
<p class="small">{{model.detail}}</p> <p class="small">{{model.detail}}</p>
<div class="r-mt20"> <div class="r-mt20">
<a href="#" onclick="window.location.href = window.location.href; return false;">Reload</a> to try again {{format-html-message 'failWhalePage.reloadButton'}} <a class="hand" {{action "logout"}}>{{t 'failWhalePage.logoutButton'}}</a>
or <a class="hand" {{action "logout"}}>log out</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,17 +1,17 @@
<section class="header"> <section class="header">
<h1 style="display: block">kubectl</h1> <h1 style="display: block">{{t 'k8sTab.kubectl.header'}}</h1>
</section> </section>
<section class="well"> <section class="well">
{{#if (eq step 1)}} {{#if (eq step 1)}}
<p>To use <a href="http://kubernetes.io/docs/getting-started-guides/docker/#download-kubectl" target="_blank">kubectl</a> (v1.2+ only) on your workstation, click the button to generate an API key and config file:</p> <p>{{format-html-message 'k8sTab.kubectl.stepOne.generateConfigText'}}</p>
<button {{action "generate"}} class="btn btn-primary">Generate Config</button> <button {{action "generate"}} class="btn btn-primary">{{t 'k8sTab.kubectl.stepOne.generateButton'}}</button>
{{/if}} {{/if}}
{{#if (eq step 2)}} {{#if (eq step 2)}}
<i class="icon icon-spinner icon-spin"></i> Generating... <i class="icon icon-spinner icon-spin"></i> {{t 'k8sTab.kubectl.stepTwo.progress'}}
{{/if}} {{/if}}
{{#if (eq step 3)}} {{#if (eq step 3)}}
<p>Put this into <code>~/.kube/config</code>:</p> <p>{{format-html-message 'k8sTab.kubectl.stepThree.helpText'}}</p>
<pre><code>{{kubeconfig}}</code></pre> <pre><code>{{kubeconfig}}</code></pre>
{{copy-to-clipboard tooltipText="" buttonText="copyToClipboard.tooltip" clipboardText=kubeconfig class="with-clip"}} {{copy-to-clipboard tooltipText="" buttonText="copyToClipboard.tooltip" clipboardText=kubeconfig class="with-clip"}}
<p class="r-mt10 r-mb0">Then <a href="http://kubernetes.io/docs/getting-started-guides/docker/#download-kubectl" target="_blank">download</a> (if needed) and run <code>kubectl</code></p> <p class="r-mt10 r-mb0">Then <a href="http://kubernetes.io/docs/getting-started-guides/docker/#download-kubectl" target="_blank">download</a> (if needed) and run <code>kubectl</code></p>
@ -19,14 +19,14 @@
</section> </section>
<section class="well"> <section class="well">
<p>Or use this handy shell to directly execute <code>kubectl</code> commands:</p> <p>{{format-html-message 'k8sTab.kubectl.shell.helpText'}}</p>
{{container-shell {{container-shell
classNames="inline-block" classNames="inline-block"
command=model.command command=model.command
instance=model.instance instance=model.instance
cols=120 cols=120
rows=30 rows=30
showProtip=false showProtip=false
}} }}
</section> </section>

View File

@ -1,18 +1,18 @@
<section class="header"> <section class="header">
<h1>Pods</h1> <h1>{{t 'k8sTab.namespace.pods.index.header'}}</h1>
{{#link-to "k8s-tab.apply" (query-params kind="Pod") classNames="btn btn-sm btn-primary"}}Add Pod{{/link-to}} {{#link-to "k8s-tab.apply" (query-params kind="Pod") classNames="btn btn-sm btn-primary"}}{{t 'k8sTab.namespace.pods.index.linkTo'}}{{/link-to}}
</section> </section>
<section class="well instances"> <section class="well instances">
<table class="grid fixed" style="margin-bottom: 0;"> <table class="grid fixed" style="margin-bottom: 0;">
<thead> <thead>
<tr> <tr>
{{sortable-th sortable=this action="changeSort" name="name"}} {{sortable-th sortable=this action="changeSort" name="name" label='generic.name'}}
<th width="80">Status</th> <th width="80">{{t 'k8sTab.namespace.pods.index.table.header.status'}}</th>
<th>Containers</th> <th>{{t 'k8sTab.namespace.pods.index.table.header.containers'}}</th>
<th>Host IP</th> <th>{{t 'k8sTab.namespace.pods.index.table.header.host'}}</th>
<th>Pod IP</th> <th>{{t 'k8sTab.namespace.pods.index.table.header.pod'}}</th>
<th class="actions" width="85">&nbsp;</th> <th class="actions" width="85">&nbsp;</th>
</tr> </tr>
</thead> </thead>
@ -20,7 +20,7 @@
{{#each arranged as |pod|}} {{#each arranged as |pod|}}
{{k8s/pod-row model=pod}} {{k8s/pod-row model=pod}}
{{else}} {{else}}
<tr><td colspan="7" class="text-center text-muted">You do not have any Pods yet.</td></tr> <tr><td colspan="7" class="text-center text-muted">{{t 'k8sTab.namespace.pods.index.table.body.noData'}}</td></tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -1,5 +1,5 @@
<section class="header"> <section class="header">
<h1>{{#link-to "k8s-tab.namespace.pods"}}Pod:{{/link-to}} {{model.displayName}}</h1> <h1>{{#link-to "k8s-tab.namespace.pods"}}{{t 'k8sTab.namespace.pods.pod.header.linkTo'}}{{/link-to}} {{model.displayName}}</h1>
<div class="pull-right"> <div class="pull-right">
{{action-menu model=model}} {{action-menu model=model}}
</div> </div>
@ -8,14 +8,14 @@
<section> <section>
<div class="container-multi-stat"> <div class="container-multi-stat">
<div class="container-flex bordered"> <div class="container-flex bordered">
<div class="col-flex"><label>Type:</label> {{model.spec.type}}</div> <div class="col-flex"><label>{{t 'k8sTab.namespace.pods.pod.type.header'}}</label> {{model.spec.type}}</div>
</div> </div>
</div> </div>
</section> </section>
<section> <section>
<ul class="nav nav-tabs nav-tabs-well" role="tablist"> <ul class="nav nav-tabs nav-tabs-well" role="tablist">
<li role="tab" class="tab" data-section="containers" {{action "selectTab" "containers" target="view"}}><a href="#">Containers</a></li> <li role="tab" class="tab" data-section="containers" {{action "selectTab" "containers" target="view"}}><a href="#">{{t 'k8sTab.namespace.pods.pod.navTabs.containers'}}</a></li>
</ul> </ul>
<div class="horizontal-form well nav-well" role="tabpanel"> <div class="horizontal-form well nav-well" role="tabpanel">

View File

@ -1,17 +1,17 @@
<section class="header"> <section class="header">
<h1>RCs</h1> <h1>{{t 'k8sTab.namespace.rcs.index.header'}}</h1>
{{#link-to "k8s-tab.apply" (query-params kind="ReplicationController") classNames="btn btn-sm btn-primary"}}Add RC{{/link-to}} {{#link-to "k8s-tab.apply" (query-params kind="ReplicationController") classNames="btn btn-sm btn-primary"}}{{t 'k8sTab.namespace.rcs.index.linkTo'}}{{/link-to}}
</section> </section>
<section class="well instances"> <section class="well instances">
<table class="grid fixed" style="margin-bottom: 0;"> <table class="grid fixed" style="margin-bottom: 0;">
<thead> <thead>
<tr> <tr>
{{sortable-th sortable=this action="changeSort" name="name"}} {{sortable-th sortable=this action="changeSort" name="name" label='generic.name'}}
<th width="80">Replicas</th> <th width="80">{{t 'k8sTab.namespace.rcs.index.table.header.replicas'}}</th>
<th>Selectors</th> <th>{{t 'k8sTab.namespace.rcs.index.table.header.selectors'}}</th>
<th>Containers</th> <th>{{t 'k8sTab.namespace.rcs.index.table.header.containers'}}</th>
<th class="actions" width="85">&nbsp;</th> <th class="actions" width="85">&nbsp;</th>
</tr> </tr>
</thead> </thead>
@ -19,7 +19,7 @@
{{#each arranged as |rc|}} {{#each arranged as |rc|}}
{{k8s/rc-row model=rc}} {{k8s/rc-row model=rc}}
{{else}} {{else}}
<tr><td colspan="5" class="text-center text-muted">You do not have any Replication Controllers yet.</td></tr> <tr><td colspan="5" class="text-center text-muted">{{t 'k8sTab.namespace.rcs.index.table.body.noData'}}</td></tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -1,5 +1,5 @@
<section class="header"> <section class="header">
<h1>{{#link-to "k8s-tab.namespace.rcs"}}RC:{{/link-to}} {{model.displayName}}</h1> <h1>{{#link-to "k8s-tab.namespace.rcs"}}{{t 'k8sTab.namespace.rcs.rc.header'}}{{/link-to}} {{model.displayName}}</h1>
<div class="pull-right"> <div class="pull-right">
{{action-menu model=model}} {{action-menu model=model}}
</div> </div>
@ -8,24 +8,24 @@
<section> <section>
<div class="container-multi-stat"> <div class="container-multi-stat">
<div class="container-flex bordered"> <div class="container-flex bordered">
<div class="col-flex"><label>Type:</label> {{model.spec.type}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.type'}}</label> {{model.spec.type}}</div>
<div class="col-flex"><label>Cluster IP:</label> {{model.spec.clusterIP}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.cluster'}}</label> {{model.spec.clusterIP}}</div>
<div class="col-flex"><label>Balancer IP:</label> {{default-str model.spec.loadBalancerIP default="None"}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.balancer'}}</label> {{default-str model.spec.loadBalancerIP default="None"}}</div>
<div class="col-flex"><label>Session Affinity:</label> {{model.spec.sessionAffinity}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.session'}}</label> {{model.spec.sessionAffinity}}</div>
<div class="col-flex"> <div class="col-flex">
<label>External IPs:</label> <label>{{t 'k8sTab.multistat.header.external'}}</label>
{{#each model.spec.externalIPs as |ip index|}} {{#each model.spec.externalIPs as |ip index|}}
{{if (eq index 0) '' ','}}{{ip}} {{if (eq index 0) '' ','}}{{ip}}
{{else}} {{else}}
None {{t 'generic.none'}}
{{/each}} {{/each}}
</div> </div>
<div class="col-flex"> <div class="col-flex">
<label>Selectors:</label> <label>{{t 'k8sTab.multistat.header.selectors'}}</label>
{{#each model.selectorsAsArray as |sel|}} {{#each model.selectorsAsArray as |sel|}}
<span class="badge badge-default">{{sel.label}}={{sel.value}}</span> <span class="badge badge-default">{{sel.label}}={{sel.value}}</span>
{{else}} {{else}}
None {{t 'generic.none'}}
{{/each}} {{/each}}
</div> </div>
</div> </div>
@ -34,9 +34,9 @@
<section> <section>
<ul class="nav nav-tabs nav-tabs-well shadowed" role="tablist"> <ul class="nav nav-tabs nav-tabs-well shadowed" role="tablist">
<li role="tab" class="tab" data-section="pods" {{action "selectTab" "pods" target="view"}}><a href="#">Pods</a></li> <li role="tab" class="tab" data-section="pods" {{action "selectTab" "pods" target="view"}}><a href="#">{{t 'k8sTab.navTabs.pods'}}</a></li>
<li role="tab" class="tab" data-section="labels" {{action "selectTab" "labels" target="view"}}><a href="#">Labels</a></li> <li role="tab" class="tab" data-section="labels" {{action "selectTab" "labels" target="view"}}><a href="#">{{t 'k8sTab.navTabs.labels'}}</a></li>
<li role="tab" class="tab" data-section="ports" {{action "selectTab" "ports" target="view"}}><a href="#">Ports</a></li> <li role="tab" class="tab" data-section="ports" {{action "selectTab" "ports" target="view"}}><a href="#">{{t 'k8sTab.navTabs.ports'}}</a></li>
</ul> </ul>
<div class="horizontal-form well" role="tabpanel"> <div class="horizontal-form well" role="tabpanel">

View File

@ -1,19 +1,19 @@
<section class="header"> <section class="header">
<h1>Services</h1> <h1>{{t 'k8sTab.namespace.services.header'}}</h1>
{{#link-to "k8s-tab.apply" (query-params kind="Service") classNames="btn btn-sm btn-primary"}}Add Service{{/link-to}} {{#link-to "k8s-tab.apply" (query-params kind="Service") classNames="btn btn-sm btn-primary"}}{{t 'k8sTab.namespace.services.linkTo'}}{{/link-to}}
</section> </section>
<section class="well instances"> <section class="well instances">
<table class="grid fixed" style="margin-bottom: 0;"> <table class="grid fixed" style="margin-bottom: 0;">
<thead> <thead>
<tr> <tr>
{{sortable-th sortable=this action="changeSort" name="name"}} {{sortable-th sortable=this action="changeSort" name="name" label="generic.name"}}
{{sortable-th sortable=this action="changeSort" name="serviceType" width="150" label="Type"}} {{sortable-th sortable=this action="changeSort" name="serviceType" width="150" label="generic.type"}}
<th width="150">Cluster IP</th> <th width="150">{{t 'k8sTab.namespace.services.table.header.cluster'}}</th>
<th width="80">Pods</th> <th width="80">{{t 'k8sTab.namespace.services.table.header.pods'}}</th>
<th>Ports</th> <th>{{t 'k8sTab.namespace.services.table.header.ports'}}</th>
<th>Selectors</th> <th>{{t 'k8sTab.namespace.services.table.header.selectors'}}</th>
<th class="actions" width="85">&nbsp;</th> <th class="actions" width="85">&nbsp;</th>
</tr> </tr>
</thead> </thead>
@ -21,7 +21,7 @@
{{#each arranged as |service|}} {{#each arranged as |service|}}
{{k8s/service-row model=service}} {{k8s/service-row model=service}}
{{else}} {{else}}
<tr><td colspan="7" class="text-center text-muted">You do not have any Services yet.</td></tr> <tr><td colspan="7" class="text-center text-muted">{{t 'k8sTab.namespace.services.table.body.noData'}}</td></tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -1,5 +1,5 @@
<section class="header"> <section class="header">
<h1>{{#link-to "k8s-tab.namespace.services"}}Service:{{/link-to}} {{model.displayName}}</h1> <h1>{{#link-to "k8s-tab.namespace.services"}}{{t 'k8sTab.namespace.services.service.index.header'}}{{/link-to}} {{model.displayName}}</h1>
<div class="pull-right"> <div class="pull-right">
{{action-menu model=model}} {{action-menu model=model}}
</div> </div>
@ -8,24 +8,24 @@
<section> <section>
<div class="container-multi-stat"> <div class="container-multi-stat">
<div class="container-flex bordered"> <div class="container-flex bordered">
<div class="col-flex"><label>Type:</label> {{model.spec.type}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.type'}}</label> {{model.spec.type}}</div>
<div class="col-flex"><label>Cluster IP:</label> {{model.spec.clusterIP}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.cluster'}}</label> {{model.spec.clusterIP}}</div>
<div class="col-flex"><label>Balancer IP:</label> {{default-str model.spec.loadBalancerIP default="None"}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.balancer'}}</label> {{default-str model.spec.loadBalancerIP default="None"}}</div>
<div class="col-flex"><label>Session Affinity:</label> {{model.spec.sessionAffinity}}</div> <div class="col-flex"><label>{{t 'k8sTab.multistat.header.session'}}</label> {{model.spec.sessionAffinity}}</div>
<div class="col-flex"> <div class="col-flex">
<label>External IPs:</label> <label>{{t 'k8sTab.multistat.header.external'}}</label>
{{#each model.spec.externalIPs as |ip index|}} {{#each model.spec.externalIPs as |ip index|}}
{{if (eq index 0) '' ','}}{{ip}} {{if (eq index 0) '' ','}}{{ip}}
{{else}} {{else}}
None {{t 'generic.none'}}
{{/each}} {{/each}}
</div> </div>
<div class="col-flex"> <div class="col-flex">
<label>Selectors:</label> <label>{{t 'k8sTab.multistat.header.selectors'}}</label>
{{#each model.selectorsAsArray as |sel|}} {{#each model.selectorsAsArray as |sel|}}
<span class="badge badge-default">{{sel.label}}={{sel.value}}</span> <span class="badge badge-default">{{sel.label}}={{sel.value}}</span>
{{else}} {{else}}
None {{t 'generic.none'}}
{{/each}} {{/each}}
</div> </div>
</div> </div>
@ -34,9 +34,9 @@
<section> <section>
<ul class="nav nav-tabs nav-tabs-well" role="tablist"> <ul class="nav nav-tabs nav-tabs-well" role="tablist">
<li role="tab" class="tab" data-section="pods" {{action "selectTab" "pods" target="view"}}><a href="#">Pods</a></li> <li role="tab" class="tab" data-section="pods" {{action "selectTab" "pods" target="view"}}><a href="#">{{t 'k8sTab.navTabs.pods'}}</a></li>
<li role="tab" class="tab" data-section="labels" {{action "selectTab" "labels" target="view"}}><a href="#">Labels</a></li> <li role="tab" class="tab" data-section="labels" {{action "selectTab" "labels" target="view"}}><a href="#">{{t 'k8sTab.navTabs.labels'}}</a></li>
<li role="tab" class="tab" data-section="ports" {{action "selectTab" "ports" target="view"}}><a href="#">Ports</a></li> <li role="tab" class="tab" data-section="ports" {{action "selectTab" "ports" target="view"}}><a href="#">{{t 'k8sTab.navTabs.ports'}}</a></li>
</ul> </ul>
<div class="horizontal-form well nav-well" role="tabpanel"> <div class="horizontal-form well nav-well" role="tabpanel">

View File

@ -1,14 +1,14 @@
<section class="header"> <section class="header">
<h1>Namespaces</h1> <h1>{{t 'k8sTab.namespaces.header'}}</h1>
{{#link-to "k8s-tab.apply" (query-params kind="Namespace") classNames="btn btn-sm btn-primary"}}Add Namespace{{/link-to}} {{#link-to "k8s-tab.apply" (query-params kind="Namespace") classNames="btn btn-sm btn-primary"}}{{t 'k8sTab.namespaces.linkTo'}}{{/link-to}}
</section> </section>
<section class="well instances"> <section class="well instances">
<table class="grid fixed" style="margin-bottom: 0;"> <table class="grid fixed" style="margin-bottom: 0;">
<thead> <thead>
<tr> <tr>
{{sortable-th sortable=this action="changeSort" name="name"}} {{sortable-th sortable=this action="changeSort" name="name" label='generic.name'}}
<th class="actions" width="85">&nbsp;</th> <th class="actions" width="85">&nbsp;</th>
</tr> </tr>
</thead> </thead>
@ -18,7 +18,7 @@
{{k8s/ns-row model=ns}} {{k8s/ns-row model=ns}}
{{/unless}} {{/unless}}
{{else}} {{else}}
<tr><td colspan="5" class="text-center text-muted">You do not have any Namespaces yet.</td></tr> <tr><td colspan="5" class="text-center text-muted">{{t 'k8sTab.namespaces.table.body.noData'}}</td></tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -1,12 +1,12 @@
<table class="grid fixed" style="margin-bottom: 0;"> <table class="grid fixed" style="margin-bottom: 0;">
<thead> <thead>
<tr> <tr>
{{sortable-th sortable=this action="changeSort" name="state" width="125"}} {{sortable-th sortable=this action="changeSort" name="state" width="125" label='generic.state'}}
{{sortable-th sortable=this action="changeSort" name="name"}} {{sortable-th sortable=this action="changeSort" name="name" label='generic.name'}}
{{sortable-th sortable=this action="changeSort" name="ip" width="110" label="IP Address"}} {{sortable-th sortable=this action="changeSort" name="ip" width="110" label="servicePage.containersTab.table.header.ipAddress"}}
{{sortable-th sortable=this action="changeSort" name="host"}} {{sortable-th sortable=this action="changeSort" name="host" label="servicePage.containersTab.table.header.host"}}
{{sortable-th sortable=this action="changeSort" name="image" label="Image"}} {{sortable-th sortable=this action="changeSort" name="image" label="servicePage.containersTab.table.header.image"}}
<th class="stats">Stats</th> <th class="stats">{{t 'servicePage.containersTab.table.header.stats'}}</th>
<th class="actions" width="75">&nbsp;</th> <th class="actions" width="75">&nbsp;</th>
</tr> </tr>
</thead> </thead>

View File

@ -1,9 +1,9 @@
<label class="text-muted r-ml15">Links</label> <label class="text-muted r-ml15">{{t 'servicePage.linksTab.header'}}</label>
<ul class="list-unstyled list-inline with-room"> <ul class="list-unstyled list-inline with-room">
{{#each model.consumedServicesWithNames as |link|}} {{#each model.consumedServicesWithNames as |link|}}
<li>{{#link-to 'service' link.service.environmentId link.service.id}} {{link.service.name}} {{/link-to}}</li> <li>{{#link-to 'service' link.service.environmentId link.service.id}} {{link.service.name}} {{/link-to}}</li>
{{else}} {{else}}
<li class="text-muted">No Links</li> <li class="text-muted">{{t 'servicePage.linksTab.noData'}}</li>
{{/each}} {{/each}}
</ul> </ul>

View File

@ -2,8 +2,8 @@
<table class="grid fixed"> <table class="grid fixed">
<thead> <thead>
<tr> <tr>
<th width="150">Port</th> <th width="150">{{t 'servicePage.portsTab.table.header.port'}}</th>
<th>Host IP</th> <th>{{t 'servicePage.portsTab.table.header.host'}}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -21,12 +21,12 @@
{{else}} {{else}}
<tr> <tr>
<td colspan="2"> <td colspan="2">
<div class="text-muted text-center">This Service has no ports.</div> <div class="text-muted text-center">{{t 'servicePage.portsTab.table.body.noData'}}</div>
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
{{else}} {{else}}
<div class="text-center text-muted">Ports are only available while the service is Active.</div> <div class="text-center text-muted">{{t 'servicePage.portsTab.notActive'}}</div>
{{/if}} {{/if}}

View File

@ -1,16 +1,15 @@
<section class="header"> <section class="header">
<h1>Environments</h1> <h1>{{t 'settingsPage.index.header'}}</h1>
{{#link-to "settings.projects.new" class="btn btn-sm btn-primary"}}Add Environment{{/link-to}} {{#link-to "settings.projects.new" class="btn btn-sm btn-primary"}}{{t 'settingsPage.index.linkTo'}}{{/link-to}}
</section> </section>
<section> <section>
<div class="well"> <div class="well">
<p>{{settings.appName}} supports grouping resources into multiple <b>environments</b>. Each one gets its own set of services and infrastructure resources, and is owned by one or more GitHub users, teams or organizations.</p> {{format-html-message 'settingsPage.index.subtext' appName=settings.appName}}
<p>For example, you might create separate &quot;dev&quot;, &quot;test&quot;, and &quot;production&quot; environments to keep things isolated from each other, and give &quot;dev&quot; access to your entire organization but restrict the &quot;production&quot; environment to a smaller team.</p>
</div> </div>
{{#unless projects.current}} {{#unless projects.current}}
<div class="alert alert-danger"><i class="icon icon-alert"></i> There are no active environments. You will need to create or activate one before you can do anything else.</div> <div class="alert alert-danger"><i class="icon icon-alert"></i> {{t 'settingsPage.index.alert'}}</div>
{{/unless}} {{/unless}}
</section> </section>
@ -18,11 +17,11 @@
<table class="grid fixed" style="margin-bottom: 0"> <table class="grid fixed" style="margin-bottom: 0">
<thead> <thead>
<tr> <tr>
{{sortable-th sortable=this action="changeSort" name="state" width="125"}} {{sortable-th sortable=this action="changeSort" name="state" label='generic.state' width="125"}}
{{sortable-th sortable=this action="changeSort" name="name"}} {{sortable-th sortable=this action="changeSort" name="name" label='generic.name'}}
{{sortable-th sortable=this action="changeSort" name="description"}} {{sortable-th sortable=this action="changeSort" name="description" label='generic.description'}}
{{sortable-th sortable=this action="changeSort" name="orchestration"}} {{sortable-th sortable=this action="changeSort" name="orchestration" label='settingsPage.index.table.header.orchestration'}}
<th width="80">Default</th> <th width="80">{{t 'generic.default'}}</th>
<th width="75">&nbsp;</th> <th width="75">&nbsp;</th>
</tr> </tr>
</thead> </thead>
@ -30,7 +29,7 @@
{{#each arranged as |p|}} {{#each arranged as |p|}}
{{project-row model=p}} {{project-row model=p}}
{{else}} {{else}}
<tr><td colspan="5" class="text-center text-muted">You don't have any environments yet.</td></tr> <tr><td colspan="5" class="text-center text-muted">{{t 'settingsPage.index.table.body.noData'}}</td></tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>

View File

@ -222,7 +222,7 @@ HEADER {
border-style: solid; border-style: solid;
border-width: 8px; border-width: 8px;
position: absolute; position: absolute;
right: -16px; right: -15px;
top: 33%; top: 33%;
z-index: 2; z-index: 2;
} }

View File

@ -18,6 +18,9 @@ generic:
remove: Remove remove: Remove
state: State state: State
unknown: Unknown unknown: Unknown
description: Description
default: Default
type: Type
############################## ##############################
# Routes # Routes
@ -84,6 +87,7 @@ auditLogsPage:
placeholder: Event Type placeholder: Event Type
resourceType: resourceType:
placeholder: "Resource Type:" placeholder: "Resource Type:"
dropdownPlaceholder: 'Select a Resource Type:'
dropdownList: dropdownList:
resourceId: resourceId:
placeholder: Resource ID placeholder: Resource ID
@ -91,6 +95,7 @@ auditLogsPage:
placeholder: Request IP placeholder: Request IP
authType: authType:
placeholder: "Auth Type:" placeholder: "Auth Type:"
dropdownPlaceholder: 'Select an Auth Type:'
dropdownList: dropdownList:
clearButtonText: Clear All clearButtonText: Clear All
searchButtonText: Search searchButtonText: Search
@ -216,6 +221,23 @@ authPage:
pre: Enable Local Auth pre: Enable Local Auth
post: 'Enabling...' post: 'Enabling...'
catalogPage:
index:
header: 'Catalog:'
search:
placeholder: Search...
certified: Certified
noData:
singular: There are no compatible templates.
plural: There are no compatible templates in this catalog.
consolePage:
header: 'Shell:'
closeButton: Close
certificatesPage: certificatesPage:
table: table:
cn: Domain Name cn: Domain Name
@ -340,6 +362,13 @@ containerSubpod:
childContainers: Containers childContainers: Containers
childSidekicks: Sidekicks childSidekicks: Sidekicks
failWhalePage:
header: Error
reloadButton: |
<a href="#" onclick="window.location.href = window.location.href; return false;">Reload</a> to try again or
logoutButton: log out
haPage: haPage:
header: header:
enabled: 'High Availability is <b class="text-success">enabled</b>' enabled: 'High Availability is <b class="text-success">enabled</b>'
@ -474,7 +503,7 @@ helpPage:
content: content:
paragraph1: | paragraph1: |
{appName} is an open source software platform that implements a purpose-built infrastructure for running containers in production. Docker containers, as an increasingly popular application workload, create new requirements in infrastructure services such as networking, storage, load balancer, security, service discovery, and resource management. {appName} is an open source software platform that implements a purpose-built infrastructure for running containers in production. Docker containers, as an increasingly popular application workload, create new requirements in infrastructure services such as networking, storage, load balancer, security, service discovery, and resource management.
graphic8: graphic1:
text: Find a bug? text: Find a bug?
link: File an issue on GitHub. link: File an issue on GitHub.
graphic2: graphic2:
@ -578,6 +607,98 @@ hostsPage:
body: body:
noData: This host does not have any volumes. noData: This host does not have any volumes.
k8sTab:
kubectl:
header: kubectl
stepOne:
generateConfigText: |
To use <a href="http://kubernetes.io/docs/getting-started-guides/docker/#download-kubectl" target="_blank">kubectl</a> (v1.2+ only) on your workstation, click the button to generate an API key and config file:
generateButton: Generate Config
stepTwo:
progress: Generating...
stepThree:
helpText: |
Put this into <code>~/.kube/config</code>:
downloadText: |
Then <a href="http://kubernetes.io/docs/getting-started-guides/docker/#download-kubectl" target="_blank">download</a> (if needed) and run <code>kubectl</code>
shell:
helpText: |
Or use this handy shell to directly execute <code>kubectl</code> commands:
multistat:
header:
type: 'Type:'
cluster: 'Cluster IP:'
balancer: 'Balancer IP:'
session: 'Session Affinity:'
external: 'External IPs:'
selectors: 'Selectors'
navTabs:
pods: Pods
labels: Labels
ports: Ports
namespace:
pods:
index:
header: Pods
linkTo: Add Pod
table:
header:
status: Status
containers: Containers
host: Host IP
pod: Pod IP
body:
noData: You do not have any Pods yet.
pod:
header:
linkTo: 'Pod:'
type:
header: 'Type:'
navTabs:
containers: Containers
rcs:
index:
header: RCs
linkTo: Add RC
table:
header:
replicas: Replicas
selectors: Selectors
containers: Containers
body:
noData: You do not have any Replication Controllers yet.
rc:
header: 'RC:'
navTabs:
pods: Pods
labels: Labels
ports: Ports
services:
header: Services
linkTo: Add Service
table:
header:
cluster: Cluster IP
pods: Pods
ports: Ports
selectors: Selectors
body:
noData: You do not have any Services yet.
service:
index:
header: 'Service:'
namespaces:
header: Namespaces
linkTo: Add Namespace
table:
body:
noData: You do not have any Namespaces yet.
loginPage: loginPage:
greeting: "Howdy!<br>Welcome to {appName}" greeting: "Howdy!<br>Welcome to {appName}"
githubMessage: "{appName} uses GitHub to manage accounts and teams. Click the button below to log in and give us read-only access to your basic GitHub account information." githubMessage: "{appName} uses GitHub to manage accounts and teams. Click the button below to log in and give us read-only access to your basic GitHub account information."
@ -613,6 +734,16 @@ registriesPage:
servicePage: servicePage:
containersTab:
table:
header:
ipAddress: IP Address
host: Host
image: Image
stats: Stats
linksTab:
header: Links
noData: No Links
new: new:
form: form:
name: name:
@ -631,6 +762,31 @@ servicePage:
placeholder: e.g. website placeholder: e.g. website
description: description:
placeholder: e.g. Balancer for mycompany.com placeholder: e.g. Balancer for mycompany.com
portsTab:
table:
header:
port: Port
host: Host IP
body:
noData: This Service has no ports.
notActive: Ports are only available while the service is Active.
settingsPage:
index:
header: Environments
linkTo: Add Environment
subtext: |
<p>{appName} supports grouping resources into multiple <b>environments</b>. Each one gets its own set of services and infrastructure resources, and is owned by one or more GitHub users, teams or organizations.</p>
<p>For example, you might create separate &quot;dev&quot;, &quot;test&quot;, and &quot;production&quot; environments to keep things isolated from each other, and give &quot;dev&quot; access to your entire organization but restrict the &quot;production&quot; environment to a smaller team.</p>
alert: There are no active environments. You will need to create or activate one before you can do anything else.
table:
header:
orchestration: Orchestration
body:
noData: You don't have any environments yet.
stacksPage: stacksPage:
header: header:
@ -1307,6 +1463,15 @@ hostSettings:
alert: | alert: |
Are you sure all the hosts you will create will be able to reach <code>{activeValue}</code> ?<br/>It looks like a private IP or local network. Are you sure all the hosts you will create will be able to reach <code>{activeValue}</code> ?<br/>It looks like a private IP or local network.
machine:
driverAzure:
accountAccess:
subscriptionCert:
placeholder: Your Azure subscription certificate
instance:
publishSettingsFile:
placeholder: Your Publish Settings file
schema: schema:
inputCertificate: inputCertificate:
prompt: Choose a Certificate... prompt: Choose a Certificate...
@ -1319,6 +1484,12 @@ inputPassword:
inputTextFile: inputTextFile:
tooltip: Read from a file tooltip: Read from a file
labelsSection:
kind: Kind
key: Key
value: Value
noData: No labels
loginGithub: loginGithub:
buttonText: Authenticate with GitHub buttonText: Authenticate with GitHub