From 4924f156145191cf34eda69077648c4d79de6809 Mon Sep 17 00:00:00 2001 From: John Smith Date: Sat, 26 Feb 2022 14:53:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E5=86=85=E4=B9=9F=E4=BD=BF?= =?UTF-8?q?=E7=94=A8i18n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ChatRenderer/AuthorBadge.vue | 7 ++++--- .../src/components/ChatRenderer/Ticker.vue | 2 +- .../src/components/ChatRenderer/constants.js | 20 ++++++++++++++----- frontend/src/i18n.js | 7 +++++++ frontend/src/lang/en.js | 9 +++++++++ frontend/src/lang/ja.js | 9 +++++++++ frontend/src/lang/zh.js | 9 +++++++++ frontend/src/main.js | 11 +++++++--- frontend/src/views/Home.vue | 7 ++++++- frontend/src/views/Room.vue | 8 +++++++- 10 files changed, 75 insertions(+), 14 deletions(-) diff --git a/frontend/src/components/ChatRenderer/AuthorBadge.vue b/frontend/src/components/ChatRenderer/AuthorBadge.vue index 062249b..334ae05 100644 --- a/frontend/src/components/ChatRenderer/AuthorBadge.vue +++ b/frontend/src/components/ChatRenderer/AuthorBadge.vue @@ -14,7 +14,8 @@ + class="style-scope yt-live-chat-author-badge-renderer" :alt="readableAuthorTypeText" + > @@ -38,9 +39,9 @@ export default { }, readableAuthorTypeText() { if (this.isAdmin) { - return '管理员' + return this.$t('chat.moderator') } - return constants.GUARD_LEVEL_TO_TEXT[this.privilegeType] + return constants.getShowGuardLevelText(this.privilegeType) } } } diff --git a/frontend/src/components/ChatRenderer/Ticker.vue b/frontend/src/components/ChatRenderer/Ticker.vue index 53bab7a..3d7d500 100644 --- a/frontend/src/components/ChatRenderer/Ticker.vue +++ b/frontend/src/components/ChatRenderer/Ticker.vue @@ -158,7 +158,7 @@ export default { }, getText(message) { if (message.type === constants.MESSAGE_TYPE_MEMBER) { - return 'Member' + return this.$t('chat.tickerMembership') } return `CN¥${formatCurrency(message.price)}` }, diff --git a/frontend/src/components/ChatRenderer/constants.js b/frontend/src/components/ChatRenderer/constants.js index 554370b..afcdfd8 100644 --- a/frontend/src/components/ChatRenderer/constants.js +++ b/frontend/src/components/ChatRenderer/constants.js @@ -1,3 +1,5 @@ +import * as i18n from '@/i18n' + export const AUTHRO_TYPE_NORMAL = 0 export const AUTHRO_TYPE_MEMBER = 1 export const AUTHRO_TYPE_ADMIN = 2 @@ -10,13 +12,21 @@ export const AUTHOR_TYPE_TO_TEXT = [ 'owner' // 主播 ] -export const GUARD_LEVEL_TO_TEXT = [ +const GUARD_LEVEL_TO_TEXT_KEY = [ '', - '总督', - '提督', - '舰长' + 'chat.guardLevel1', + 'chat.guardLevel2', + 'chat.guardLevel3' ] +export function getShowGuardLevelText(guardLevel) { + let key = GUARD_LEVEL_TO_TEXT_KEY[guardLevel] || '' + if (key === '') { + return '' + } + return i18n.i18n.t(key) +} + export const MESSAGE_TYPE_TEXT = 0 export const MESSAGE_TYPE_GIFT = 1 export const MESSAGE_TYPE_MEMBER = 2 @@ -133,7 +143,7 @@ export function getGiftShowContent(message, showGiftName) { if (!showGiftName) { return '' } - return `Sent ${message.giftName}x${message.num}` + return i18n.i18n.t('chat.sendGift', { giftName: message.giftName, num: message.num }) } export function getShowAuthorName(message) { diff --git a/frontend/src/i18n.js b/frontend/src/i18n.js index fd7eb1b..7557c36 100644 --- a/frontend/src/i18n.js +++ b/frontend/src/i18n.js @@ -3,16 +3,23 @@ import VueI18n from 'vue-i18n' import zh from '@/lang/zh' +let lastSetLocale = 'zh' let loadedLocales = ['zh'] Vue.use(VueI18n) export async function setLocale(locale) { + lastSetLocale = locale if (loadedLocales.indexOf(locale) === -1) { // eslint-disable-next-line prefer-template let langModule = await import('@/lang/' + locale) i18n.setLocaleMessage(locale, langModule.default) loadedLocales.push(locale) + + // 加载完成之前又调用了setLocale,这次的不生效 + if (locale !== lastSetLocale) { + return + } } window.localStorage.lang = i18n.locale = locale } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index c1ea7e6..79065b9 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -129,5 +129,14 @@ export default { p3: '3. Generate styles with the style generator. Copy the CSS', p4: '4. Add browser source in OBS', p5: '5. Enter the previously copied room URL at URL, and enter the previously copied CSS at custom CSS' + }, + chat: { + moderator: 'moderator', + guardLevel1: 'governor', + guardLevel2: 'admiral', + guardLevel3: 'captain', + sendGift: 'Sent {giftName}x{num}', + membershipTitle: 'New member', + tickerMembership: 'Member' } } diff --git a/frontend/src/lang/ja.js b/frontend/src/lang/ja.js index f0a7eef..f2948df 100644 --- a/frontend/src/lang/ja.js +++ b/frontend/src/lang/ja.js @@ -129,5 +129,14 @@ export default { p3: '3. スタイルジェネレータでお好みのコメント様子を選び、出力したCSSをコピーする', p4: '4. OBSでブラウザを新規作成する', p5: '5. プロパティでこぴーしたURLを入力し、カスタムCSSでスタイルジェネレータのCSSを入力する' + }, + chat: { + moderator: 'モデレーター', + guardLevel1: '総督', + guardLevel2: '提督', + guardLevel3: '艦長', + sendGift: '{giftName}x{num} を贈りました', + membershipTitle: '新規メンバー', + tickerMembership: 'メンバー' } } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 9f88ecc..d243435 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -129,5 +129,14 @@ export default { p3: '3. 使用样式生成器生成样式,复制CSS', p4: '4. 在OBS中添加浏览器源', p5: '5. URL处输入之前复制的房间URL,自定义CSS处输入之前复制的CSS' + }, + chat: { + moderator: '管理员', + guardLevel1: '总督', + guardLevel2: '提督', + guardLevel3: '舰长', + sendGift: '赠送 {giftName}x{num}', + membershipTitle: '新会员', + tickerMembership: '会员' } } diff --git a/frontend/src/main.js b/frontend/src/main.js index 9c72eff..7d78dd0 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -7,7 +7,7 @@ import { } from 'element-ui' import axios from 'axios' -import { i18n } from './i18n' +import * as i18n from './i18n' import App from './App' import Layout from './layout' import Home from './views/Home' @@ -71,7 +71,12 @@ const router = new VueRouter({ { path: 'help', name: 'help', component: Help } ] }, - { path: '/room/test', name: 'test_room', component: Room, props: route => ({ strConfig: route.query }) }, + { + path: '/room/test', + name: 'test_room', + component: Room, + props: route => ({ strConfig: route.query }) + }, { path: '/room/:roomId', name: 'room', @@ -91,5 +96,5 @@ const router = new VueRouter({ new Vue({ render: h => h(App), router, - i18n + i18n: i18n.i18n }).$mount('#app') diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index 629e301..5e21316 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -202,8 +202,13 @@ export default { if (isTestRoom && this.form.roomId === '') { return '' } - let query = { ...this.form } + + let query = { + ...this.form, + lang: this.$i18n.locale + } delete query.roomId + let resolved if (isTestRoom) { resolved = this.$router.resolve({ name: 'test_room', query }) diff --git a/frontend/src/views/Room.vue b/frontend/src/views/Room.vue index e691623..bba64d6 100644 --- a/frontend/src/views/Room.vue +++ b/frontend/src/views/Room.vue @@ -3,6 +3,7 @@