logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe
commit: 7516cd859f0c9bc078548f801cbb6a63b72ced97
parent: 81b08498893b37fe58bdcde343b29396562dbe4c
Author: Roger Braun <rbraun@Bobble.local>
Date:   Tue,  7 Nov 2017 15:14:37 +0100

Prepare for i18n.

Diffstat:

Mpackage.json1+
Msrc/components/nav_panel/nav_panel.vue8++++----
Msrc/components/notifications/notifications.vue6+++---
Msrc/components/settings/settings.vue20++++++++++----------
Msrc/components/timeline/timeline.vue12++++++------
Msrc/components/user_card/user_card.vue2+-
Msrc/components/user_card_content/user_card_content.vue28++++++++++++++++------------
Msrc/components/user_settings/user_settings.vue32++++++++++++++++----------------
Asrc/i18n/messages.js70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/main.js11+++++++++++
Myarn.lock4++++
11 files changed, 142 insertions(+), 52 deletions(-)

diff --git a/package.json b/package.json @@ -24,6 +24,7 @@ "sanitize-html": "^1.13.0", "sass-loader": "^4.0.2", "vue": "^2.3.4", + "vue-i18n": "^7.3.2", "vue-router": "^2.5.3", "vue-template-compiler": "^2.3.4", "vue-timeago": "^3.1.2", diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue @@ -4,22 +4,22 @@ <ul class="base03-border"> <li v-if='currentUser'> <router-link class="base00-background" to='/main/friends'> - Timeline + {{ $t("nav.timeline") }} </router-link> </li> <li v-if='currentUser'> <router-link class="base00-background" :to="{ name: 'mentions', params: { username: currentUser.screen_name } }"> - Mentions + {{ $t("nav.mentions") }} </router-link> </li> <li> <router-link class="base00-background" to='/main/public'> - Public Timeline + {{ $t("nav.public_tl") }} </router-link> </li> <li> <router-link class="base00-background" to='/main/all'> - The Whole Known Network + {{ $t("nav.twkn") }} </router-link> </li> </ul> diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue @@ -3,8 +3,8 @@ <div class="panel panel-default base00-background"> <div class="panel-heading base01-background base04"> <span class="unseen-count" v-if="unseenCount">{{unseenCount}}</span> - Notifications - <button @click.prevent="markAsSeen" class="base05 base01-background read-button">Read!</button> + {{$t('notifications.notifications')}} + <button @click.prevent="markAsSeen" class="base05 base01-background read-button">{{$t('notifications.read')}}</button> </div> <div class="panel-body base03-border"> <div v-for="notification in visibleNotifications" :key="notification" class="notification" :class='{"unseen": !notification.seen}'> @@ -44,7 +44,7 @@ <i class="fa icon-user-plus lit"></i> </h1> <div> - <router-link :to="{ name: 'user-profile', params: { id: notification.action.user.id } }">@{{ notification.action.user.screen_name }}</router-link> followed you + <router-link :to="{ name: 'user-profile', params: { id: notification.action.user.id } }">@{{ notification.action.user.screen_name }}</router-link> {{$t('notifications.followed_you')}} </div> </div> </div> diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue @@ -1,40 +1,40 @@ <template> <div class="settings panel panel-default base00-background"> <div class="panel-heading base01-background base04"> - Settings + {{$t('settings.settings')}} </div> <div class="panel-body"> <div class="setting-item"> - <h2>Theme</h2> + <h2>{{$t('settings.theme')}}</h2> <style-switcher></style-switcher> </div> <div class="setting-item"> - <h2>Filtering</h2> - <p>All notices containing these words will be muted, one per line</p> + <h2>{{$t('settings.filtering')}}</h2> + <p>{{$t('settings.filtering_explanation')}}</p> <textarea id="muteWords" v-model="muteWordsString"></textarea> </div> <div class="setting-item"> - <h2>Attachments</h2> + <h2>{{$t('settings.attachments')}}</h2> <ul class="setting-list"> <li> <input type="checkbox" id="hideAttachments" v-model="hideAttachmentsLocal"> - <label for="hideAttachments">Hide attachments in timeline</label> + <label for="hideAttachments">{{$t('settings.hide_attachments_in_tl')}}</label> </li> <li> <input type="checkbox" id="hideAttachmentsInConv" v-model="hideAttachmentsInConvLocal"> - <label for="hideAttachmentsInConv">Hide attachments in conversations</label> + <label for="hideAttachmentsInConv">{{$t('settings.hide_attachments_in_convo')}}</label> </li> <li> <input type="checkbox" id="hideNsfw" v-model="hideNsfwLocal"> - <label for="hideNsfw">Enable clickthrough NSFW attachment hiding</label> + <label for="hideNsfw">{{$t('settings.nsfw_clickthrough')}}</label> </li> <li> <input type="checkbox" id="autoLoad" v-model="autoLoadLocal"> - <label for="autoLoad">Enable automatic loading when scrolled to the bottom</label> + <label for="autoLoad">{{$t('settings.autoload')}}</label> </li> <li> <input type="checkbox" id="hoverPreview" v-model="hoverPreviewLocal"> - <label for="hoverPreview">Enable reply-link preview on mouse hover</label> + <label for="hoverPreview">{{$t('settings.reply_link_preview')}}</label> </li> </ul> </div> diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue @@ -5,20 +5,20 @@ {{title}} </div> <button @click.prevent="showNewStatuses" class="base05 base01-background loadmore-button" v-if="timeline.newStatusCount > 0 && !timelineError"> - Show new ({{timeline.newStatusCount}}) + {{$t('timeline.show_new')}} ({{timeline.newStatusCount}}) </button> <div @click.prevent class="base06 error loadmore-text" v-if="timelineError"> - Error fetching updates + {{$t('timeline.error_fetching')}} </div> <div @click.prevent class="base04 base01-background loadmore-text" v-if="!timeline.newStatusCount > 0 && !timelineError"> - Up-to-date + {{$t('timeline.up_to_date')}} </div> </div> <div class="panel-body"> <div class="timeline"> <status-or-conversation v-for="status in timeline.visibleStatuses" :key="status.id" v-bind:statusoid="status"></status-or-conversation> <a href="#" v-on:click.prevent='fetchOlderStatuses()' v-if="!timeline.loading"> - <div class="base01-background base03-border new-status-notification text-center">Load older statuses.</div> + <div class="base01-background base03-border new-status-notification text-center">{{$t('timeline.load_older')}}</div> </a> <div class="base01-background base03-border new-status-notification text-center" v-else>...</div> </div> @@ -27,7 +27,7 @@ <div class="timeline panel panel-default" v-else-if="viewing == 'followers'"> <div class="panel-heading timeline-heading base01-background base04"> <div class="title"> - Followers + {{$t('user_card.followers')}} </div> </div> <div class="panel-body"> @@ -39,7 +39,7 @@ <div class="timeline panel panel-default" v-else-if="viewing == 'friends'"> <div class="panel-heading timeline-heading base01-background base04"> <div class="title"> - Following + {{$t('user_card.followees')}} </div> </div> <div class="panel-body"> diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue @@ -10,7 +10,7 @@ <div class="user-name"> {{ user.name }} <span class="follows-you" v-if="!userExpanded && showFollows && user.follows_you"> - Follows you! + {{ $t('user_card.follows_you') }} </span> </div> <a :href="user.statusnet_profile_url" target="blank"><div class="user-screen-name">@{{ user.screen_name }}</div></a> diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue @@ -19,27 +19,31 @@ </div> <div v-if="isOtherUser" class="user-interactions"> <div v-if="user.follows_you && loggedIn" class="following base06"> - Follows you! + {{ $t('user_card.follows_you') }} </div> <div class="follow" v-if="loggedIn"> <span v-if="user.following"> <!--Following them!--> <button @click="unfollowUser" class="base04 base00-background pressed"> - Following! + {{ $t('user_card.following') }} </button> </span> <span v-if="!user.following"> <button @click="followUser" class="base05 base02-background"> - Follow + {{ $t('user_card.follow') }} </button> </span> </div> <div class='mute' v-if='isOtherUser'> <span v-if='user.muted'> - <button @click="toggleMute" class="base04 base00-background pressed">Muted</button> + <button @click="toggleMute" class="base04 base00-background pressed"> + {{ $t('user_card.muted') }} + </button> </span> <span v-if='!user.muted'> - <button @click="toggleMute" class="base05 base02-background">Mute</button> + <button @click="toggleMute" class="base05 base02-background"> + {{ $t('user_card.mute') }} + </button> </span> </div> </div> @@ -48,18 +52,18 @@ <div class="panel-body profile-panel-body" :style="bodyStyle"> <div class="user-counts"> <div class="user-count"> - <a href="#" v-on:click.prevent="setProfileView('statuses')" v-if="switcher"><h5 class="base05">Statuses</h5></a> - <h5 v-else>Statuses</h5> - <span class="base05">{{user.statuses_count}} <br><span class="dailyAvg">{{dailyAvg}} per day</span></span> + <a href="#" v-on:click.prevent="setProfileView('statuses')" v-if="switcher"><h5 class="base05">{{ $t('user_card.statuses') }}</h5></a> + <h5 v-else>{{ $t('user_card.statuses') }}</h5> + <span class="base05">{{user.statuses_count}} <br><span class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span></span> </div> <div class="user-count"> - <a href="#" v-on:click.prevent="setProfileView('friends')" v-if="switcher"><h5 class="base05">Following</h5></a> - <h5 v-else>Following</h5> + <a href="#" v-on:click.prevent="setProfileView('friends')" v-if="switcher"><h5 class="base05">{{ $t('user_card.followees') }}</h5></a> + <h5 v-else>{{ $t('user_card.followees') }}</h5> <span class="base05">{{user.friends_count}}</span> </div> <div class="user-count"> - <a href="#" v-on:click.prevent="setProfileView('followers')" v-if="switcher"><h5 class="base05">Followers</h5></a> - <h5 v-else>Followers</h5> + <a href="#" v-on:click.prevent="setProfileView('followers')" v-if="switcher"><h5 class="base05">{{ $t('user_card.followers') }}</h5></a> + <h5 v-else>{{ $t('user_card.followers') }}</h5> <span class="base05">{{user.followers_count}}</span> </div> </div> diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue @@ -1,53 +1,53 @@ <template> <div class="settings panel panel-default base00-background"> <div class="panel-heading base01-background base04"> - User Settings + {{$t('settings.user_settings')}} </div> <div class="panel-body profile-edit"> <div class="setting-item"> - <h3>Name & Bio</h3> - <p>Name</p> + <h3>{{$t('settings.name_bio')}}</h3> + <p>{{$t('settings.name')}}</p> <input class='name-changer base03-border' id='username' v-model="newname" :value="user.screen_name"></input> - <p>Bio</p> + <p>{{$t('settings.bio')}}</p> <textarea class="bio base03-border" v-model="newbio"></textarea> - <button :disabled='newname.length <= 0' class="btn btn-default base05 base01-background" @click="updateProfile">Submit</button> + <button :disabled='newname.length <= 0' class="btn btn-default base05 base01-background" @click="updateProfile">{{$t('general.submit')}}</button> </div> <div class="setting-item"> - <h3>Avatar</h3> - <p>Your current avatar:</p> + <h3>{{$t('settings.avatar')}}</h3> + <p>{{$t('settings.current_avatar')}}</p> <img :src="user.profile_image_url_original" class="old-avatar"></img> - <p>Set new avatar:</p> + <p>{{$t('settings.set_new_avatar')}}</p> <img class="new-avatar" v-bind:src="previews[0]" v-if="previews[0]"> </img> <div> <input type="file" @change="uploadFile(0, $event)" ></input> </div> <i class="fa icon-spin4 animate-spin" v-if="uploading[0]"></i> - <button class="btn btn-default base05 base01-background" v-else-if="previews[0]" @click="submitAvatar">Submit</button> + <button class="btn btn-default base05 base01-background" v-else-if="previews[0]" @click="submitAvatar">{{$t('general.submit')}}</button> </div> <div class="setting-item"> - <h3>Profile Banner</h3> - <p>Your current profile banner:</p> + <h3>{{$t('settings.profile_banner')}}</h3> + <p>{{$t('settings.current_profile_banner')}}</p> <img :src="user.cover_photo" class="banner"></img> - <p>Set new profile banner:</p> + <p>{{$t('settings.set_new_profile_banner')}}</p> <img class="banner" v-bind:src="previews[1]" v-if="previews[1]"> </img> <div> <input type="file" @change="uploadFile(1, $event)" ></input> </div> <i class="fa icon-spin4 animate-spin uploading" v-if="uploading[1]"></i> - <button class="btn btn-default base05 base01-background" v-else-if="previews[1]" @click="submitBanner">Submit</button> + <button class="btn btn-default base05 base01-background" v-else-if="previews[1]" @click="submitBanner">{{$t('general.submit')}}</button> </div> <div class="setting-item"> - <h3>Profile Background</h3> - <p>Set new profile background:</p> + <h3>{{$t('settings.profile_background')}}</h3> + <p>{{$t('settings.set_new_profile_background')}}</p> <img class="bg" v-bind:src="previews[2]" v-if="previews[2]"> </img> <div> <input type="file" @change="uploadFile(2, $event)" ></input> </div> <i class="fa icon-spin4 animate-spin uploading" v-if="uploading[2]"></i> - <button class="btn btn-default base05 base01-background" v-else-if="previews[2]" @click="submitBg">Submit</button> + <button class="btn btn-default base05 base01-background" v-else-if="previews[2]" @click="submitBg">{{$t('general.submit')}}</button> </div> </div> </div> diff --git a/src/i18n/messages.js b/src/i18n/messages.js @@ -0,0 +1,70 @@ +const de = { + nav: { + timeline: 'Zeitleiste' + } +} + +const en = { + nav: { + timeline: 'Timeline', + mentions: 'Mentions', + public_tl: 'Public Timeline', + twkn: 'The Whole Known Network' + }, + user_card: { + follows_you: 'Follows you!', + following: 'Following!', + follow: 'Follow', + statuses: 'Statuses', + mute: 'Mute', + muted: 'Muted', + followers: 'Followers', + followees: 'Following', + per_day: 'per day' + }, + timeline: { + show_new: 'Show new', + error_fetching: 'Error fetching updates', + up_to_date: 'Up-to-date', + load_older: 'Load older statuses' + }, + settings: { + user_settings: 'User Settings', + name_bio: 'Name & Bio', + name: 'Name', + bio: 'Bio', + avatar: 'Avatar', + current_avatar: 'Your current avatar', + set_new_avatar: 'Set new avatar', + profile_banner: 'Profile Banner', + current_profile_banner: 'Your current profile banner', + set_new_profile_banner: 'Set new profile banner', + profile_background: 'Profile Background', + set_new_profile_background: 'Set new profile background', + settings: 'Settings', + theme: 'Theme', + filtering: 'Filtering', + filtering_explanation: 'All notices containing these words will be muted, one per line', + attachments: 'Attachments', + hide_attachments_in_tl: 'Hide attachments in timeline', + hide_attachments_in_convo: 'Hide attachments in conversations', + nsfw_clickthrough: 'Enable clickthrough NSFW attachment hiding', + autoload: 'Enable automatic loading when scrolled to the bottom', + reply_link_preview: 'Enable reply-link preview on mouse hover' + }, + notifications: { + notifications: 'Notfications', + read: 'Read!', + followed_you: 'followed you' + }, + general: { + submit: 'Submit' + } +} + +const messages = { + de, + en +} + +export default messages diff --git a/src/main.js b/src/main.js @@ -19,9 +19,12 @@ import apiModule from './modules/api.js' import configModule from './modules/config.js' import VueTimeago from 'vue-timeago' +import VueI18n from 'vue-i18n' import createPersistedState from './lib/persisted_state.js' +import messages from './i18n/messages.js' + Vue.use(Vuex) Vue.use(VueRouter) Vue.use(VueTimeago, { @@ -30,6 +33,7 @@ Vue.use(VueTimeago, { 'en-US': require('../static/timeago.json') } }) +Vue.use(VueI18n) const persistedStateOptions = { paths: [ @@ -79,10 +83,17 @@ const router = new VueRouter({ } }) +const i18n = new VueI18n({ + locale: 'en', + fallbackLocale: 'en', + messages +}) + /* eslint-disable no-new */ new Vue({ router, store, + i18n, el: '#app', render: h => h(App) }) diff --git a/yarn.lock b/yarn.lock @@ -5696,6 +5696,10 @@ vue-hot-reload-api@^2.0.1: version "2.0.9" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.0.9.tgz#2e8cfbfc8e531eea57d8c1f0bd761047c7e11b56" +vue-i18n@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-7.3.2.tgz#1205bb8811323fd5c44e57e4fd619beaf2f7a9a1" + vue-loader@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-11.1.0.tgz#8f3fcdd8a233ce96b3e99bd3d56e83cc0f2050f2"