Skip to content

Commit 10202e9

Browse files
kazuponAkryum
authored andcommitted
feat(ui): localization of cli-ui (#987)
1 parent 19cc90c commit 10202e9

22 files changed

+588
-118
lines changed

packages/@vue/cli-ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"subscriptions-transport-ws": "^0.9.5",
3030
"vue": "^2.5.13",
3131
"vue-apollo": "^3.0.0-beta.5",
32+
"vue-i18n": "^7.6.0",
3233
"vue-instantsearch": "^1.5.1",
3334
"vue-router": "^3.0.1",
3435
"xterm": "^3.2.0"

packages/@vue/cli-ui/src/components/FolderExplorer.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
<VueButton
1010
class="icon-button"
1111
icon-left="keyboard_arrow_up"
12-
v-tooltip="'Open parent folder'"
12+
v-tooltip="$t('components.folder-explorer.toolbar.tooltips.parent-folder')"
1313
@click="openParentFolder"
1414
/>
1515

1616
<div v-if="editingPath" class="path-edit">
1717
<VueInput
1818
ref="pathInput"
1919
v-model="editedPath"
20-
placeholder="Enter the full path to a folder"
20+
:placeholder="$t('components.folder-explorer.toolbar.placeholder')"
2121
icon-left="edit"
2222
@keyup.esc="editingPath = false"
2323
@keyup.enter="submitPathEdit()"
@@ -28,7 +28,7 @@
2828
v-else
2929
:query="require('@/graphql/cwd.gql')"
3030
class="current-path"
31-
v-tooltip="'Edit path'"
31+
v-tooltip="$t('components.folder-explorer.toolbar.tooltips.edit-path')"
3232
@click.native="openPathEdit()"
3333
>
3434
<ApolloSubscribeToMore
@@ -50,7 +50,7 @@
5050
<VueButton
5151
class="icon-button favorite-button"
5252
:icon-left="folderCurrent.favorite ? 'star' : 'star_border'"
53-
v-tooltip="'Toggle favorite'"
53+
v-tooltip="$t('components.folder-explorer.toolbar.tooltips.favorite')"
5454
@click="toggleFavorite()"
5555
/>
5656

@@ -61,7 +61,7 @@
6161
slot="trigger"
6262
icon-left="arrow_drop_down"
6363
class="icon-button"
64-
v-tooltip="'Favorite folders'"
64+
v-tooltip="$t('components.folder-explorer.toolbar.tooltips.favorite-folders')"
6565
/>
6666

6767
<template v-if="foldersFavorite.length">
@@ -75,14 +75,14 @@
7575
</template>
7676

7777
<div v-else class="vue-ui-empty">
78-
No favorite folders yet.
78+
{{ $t('components.folder-explorer.toolbar.empty') }}
7979
</div>
8080
</VueDropdown>
8181

8282
<VueButton
8383
class="icon-button"
8484
icon-left="refresh"
85-
v-tooltip="'Refresh'"
85+
v-tooltip="$t('components.folder-explorer.toolbar.tooltips.refresh')"
8686
@click="refreshFolder"
8787
/>
8888
</div>

packages/@vue/cli-ui/src/components/InstantSearchInput.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
icon-left="search"
66
v-model="query"
77
class="big"
8-
placeholder="Search a plugin"
8+
:placeholder="$t('components.instant-search-input.placeholder')"
99
>
1010
<template slot="right">
1111
<VueButton

packages/@vue/cli-ui/src/components/ListItemInfo.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
@click.stop="() => {}"
2323
>
2424
<VueIcon icon="open_in_new" class="medium top"/>
25-
More info
25+
{{ $t('components.list-item-info.more-info') }}
2626
</a>
2727
</div>
2828
</div>

packages/@vue/cli-ui/src/components/LoggerView.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
icon="dvr"
66
/>
77
<div class="title">
8-
Logs
8+
{{ $t('components.logger-view.title') }}
99
</div>
1010
<VueButton
1111
class="icon-button"
1212
icon-left="delete_forever"
13-
v-tooltip="'Clear logs'"
13+
v-tooltip="$t('components.logger-view.buttons.clear')"
1414
@click="clearLogs()"
1515
/>
1616
<VueIcon
@@ -20,13 +20,13 @@
2020
<VueButton
2121
class="icon-button"
2222
icon-left="subdirectory_arrow_left"
23-
v-tooltip="'Scroll to bottom'"
23+
v-tooltip="$t('components.logger-view.buttons.scroll')"
2424
@click="scrollToBottom()"
2525
/>
2626
<VueButton
2727
class="icon-button"
2828
icon-left="close"
29-
v-tooltip="'Close'"
29+
v-tooltip="$t('components.logger-view.buttons.close')"
3030
@click="close()"
3131
/>
3232
</div>
@@ -56,7 +56,7 @@
5656
class="vue-ui-empty"
5757
>
5858
<VueIcon icon="wifi" class="large"/>
59-
<div>No logs yet</div>
59+
<div>{{ $t('components.logger-view.empty') }}</div>
6060
</div>
6161
</template>
6262
</template>

packages/@vue/cli-ui/src/components/ProgressScreen.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<div class="actions">
2121
<VueButton
2222
icon-left="close"
23-
label="Close"
23+
:label="$t('components.progress-screen.close')"
2424
@click="close()"
2525
/>
2626
</div>

packages/@vue/cli-ui/src/components/ProjectNav.vue

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
class="flat big icon-button"
1313
:value="route.name"
1414
:icon-left="route.icon"
15-
v-tooltip.right="route.tooltip"
15+
v-tooltip.right="renderTooltip(route.tooltip)"
1616
/>
1717
</VueGroup>
1818
</div>
@@ -24,17 +24,17 @@ const BUILTIN_ROUTES = [
2424
{
2525
name: 'project-plugins',
2626
icon: 'widgets',
27-
tooltip: 'Plugins'
27+
tooltip: 'plugins'
2828
},
2929
{
3030
name: 'project-configuration',
3131
icon: 'settings_applications',
32-
tooltip: 'Configuration'
32+
tooltip: 'configuration'
3333
},
3434
{
3535
name: 'project-tasks',
3636
icon: 'assignment',
37-
tooltip: 'Tasks'
37+
tooltip: 'tasks'
3838
}
3939
]
4040
@@ -65,6 +65,12 @@ export default {
6565
}
6666
}
6767
},
68+
69+
methods: {
70+
renderTooltip (target) {
71+
return this.$t(`components.project-nav.tooltips.${target}`)
72+
}
73+
}
6874
}
6975
</script>
7076

packages/@vue/cli-ui/src/components/ProjectPluginItem.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
>
1010
<span slot="description" class="plugin-description">
1111
<span class="info version">
12-
<span class="label">version</span>
12+
<span class="label">{{ $t('components.project-plugin-item.version') }}</span>
1313
<span class="value">{{ plugin.version.current }}</span>
1414
</span>
1515

1616
<span class="info latest">
17-
<span class="label">latest</span>
17+
<span class="label">{{ $t('components.project-plugin-item.latest') }}</span>
1818
<VueIcon
1919
v-if="plugin.version.current !== plugin.version.latest"
2020
icon="warning"
@@ -28,15 +28,15 @@
2828
icon="star"
2929
class="top medium"
3030
/>
31-
Official
31+
{{ $t('components.project-plugin-item.official') }}
3232
</span>
3333

3434
<span v-if="plugin.installed" class="info">
3535
<VueIcon
3636
icon="check_circle"
3737
class="top medium"
3838
/>
39-
Installed
39+
{{ $t('components.project-plugin-item.installed') }}
4040
</span>
4141

4242
<span v-if="plugin.description" class="package-description">

packages/@vue/cli-ui/src/components/ProjectSelectList.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</div>
1919
<div v-else class="vue-ui-empty">
2020
<VueIcon icon="attach_file" class="empty-icon"/>
21-
<div>No existing projects</div>
21+
<div>{{ $t('components.project-select-list.empty') }}</div>
2222
</div>
2323
</template>
2424
</template>

packages/@vue/cli-ui/src/components/ProjectSelectListItem.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<VueButton
66
class="icon-button"
77
:icon-left="project.favorite ? 'star' : 'star_border'"
8-
v-tooltip="'Toggle favorite'"
8+
v-tooltip="$t('components.project-select-list-item.tooltips.favorite')"
99
@click.stop="$emit('favorite')"
1010
/>
1111
</div>
@@ -19,7 +19,7 @@
1919
<VueButton
2020
class="icon-button"
2121
icon-left="delete"
22-
v-tooltip="'Delete'"
22+
v-tooltip="$t('components.project-select-list-item.tooltips.delete')"
2323
@click.stop="$emit('remove')"
2424
/>
2525
</div>

packages/@vue/cli-ui/src/components/StatusBar.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88
<div class="content">
99
<div
1010
class="section action current-project"
11-
v-tooltip="'Current project<br><i>Click to toggle Project Manager</i>'"
11+
v-tooltip="$t('components.status-bar.project.tooltip')"
1212
@click="onProjectClick()"
1313
>
1414
<VueIcon icon="work"/>
1515
<span v-if="projectCurrent">{{ projectCurrent.name }}</span>
16-
<span v-else class="label">No project</span>
16+
<span v-else class="label">{{ $t('components.status-bar.project.empty') }}</span>
1717
</div>
1818

1919
<ApolloQuery
2020
:query="require('@/graphql/cwd.gql')"
2121
class="section current-path"
22-
v-tooltip="'Current Working Directory'"
22+
v-tooltip="$t('components.status-bar.path.tooltip')"
2323
@click.native="onCwdClick()"
2424
>
2525
<ApolloSubscribeToMore
@@ -37,15 +37,15 @@
3737

3838
<div
3939
class="section action console-log"
40-
v-tooltip="'Logs<br><i>Click to toggle vue-cli logs</i>'"
40+
v-tooltip="$t('components.status-bar.log.tooltip')"
4141
@click="onConsoleClick()"
4242
>
4343
<VueIcon icon="dvr"/>
4444
<LoggerMessage class="last-message"
4545
v-if="consoleLogLast"
4646
:message="consoleLogLast"
4747
/>
48-
<div v-else class="last-message">No logs yet</div>
48+
<div v-else class="last-message">{{ $t('components.status-bar.log.empty') }}</div>
4949
<!-- <TerminalView
5050
:cols="100"
5151
:rows="1"

packages/@vue/cli-ui/src/i18n.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Vue from 'vue'
2+
import VueI18n from 'vue-i18n'
3+
4+
Vue.use(VueI18n)
5+
6+
function loadLocaleMessages () {
7+
const locales = require.context('./locales', true, /[a-z0-9]+\.json$/i)
8+
const messages = {}
9+
locales.keys().forEach(key => {
10+
const locale = key.match(/([a-z0-9]+)\./i)[1]
11+
messages[locale] = locales(key)
12+
})
13+
return messages
14+
}
15+
16+
function detectLanguage () {
17+
try {
18+
const lang = (window.navigator.languages && window.navigator.languages[0]) ||
19+
window.navigator.language ||
20+
window.navigator.userLanguage
21+
return lang.substr(0, 2)
22+
} catch (e) {
23+
return undefined
24+
}
25+
}
26+
27+
const i18n = new VueI18n({
28+
locale: detectLanguage() || 'en',
29+
fallbackLocale: 'en',
30+
messages: loadLocaleMessages()
31+
})
32+
33+
export default i18n

0 commit comments

Comments
 (0)