From 56f0e1ba46786adcb4ea072d13efd75de6e8b83a Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Thu, 3 Jun 2021 11:42:30 -0700 Subject: [PATCH] Make sure screen name is internationalized --- _locales/en/messages.json | 12 ++++++- .../CallingSelectPresentingSourcesModal.tsx | 17 ++++++---- ts/services/calling.ts | 33 ++++++++++++++++++- 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index b82a6b8998..cbc017ad77 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -3384,7 +3384,17 @@ }, "calling__SelectPresentingSourcesModal--entireScreen": { "message": "Entire screen", - "description": "Title for the select your screen sharing sources modal" + "description": "Title for the select your screen sharing sources modal and 'Entire Screen' source" + }, + "calling__SelectPresentingSourcesModal--screen": { + "message": "Screen $id$", + "description": "Title for `Screen #N` source in screen sharing sources modal and overlay", + "placeholders": { + "id": { + "content": "$1", + "example": "1" + } + } }, "calling__SelectPresentingSourcesModal--window": { "message": "A window", diff --git a/ts/components/CallingSelectPresentingSourcesModal.tsx b/ts/components/CallingSelectPresentingSourcesModal.tsx index e7ecfdb419..26404e94d5 100644 --- a/ts/components/CallingSelectPresentingSourcesModal.tsx +++ b/ts/components/CallingSelectPresentingSourcesModal.tsx @@ -9,6 +9,7 @@ import { LocalizerType } from '../types/Util'; import { Modal } from './Modal'; import { PresentedSource, PresentableSource } from '../types/Calling'; import { Theme } from '../util/theme'; +import { isScreenSource, translateSourceName } from '../services/calling'; export type PropsType = { i18n: LocalizerType; @@ -17,14 +18,18 @@ export type PropsType = { }; const Source = ({ + i18n, onSourceClick, source, sourceToPresent, }: { + i18n: LocalizerType; onSourceClick: (source: PresentedSource) => void; source: PresentableSource; sourceToPresent?: PresentedSource; }): JSX.Element => { + const name = translateSourceName(i18n, source); + return ( @@ -77,9 +82,7 @@ export const CallingSelectPresentingSourcesModal = ({ throw new Error('No sources available for presenting'); } - const sources = groupBy(presentingSourcesAvailable, source => - source.id.startsWith('screen') - ); + const sources = groupBy(presentingSourcesAvailable, isScreenSource); return ( {sources.true.map(source => ( setSourceToPresent(selectedSource)} source={source} @@ -111,6 +115,7 @@ export const CallingSelectPresentingSourcesModal = ({
{sources.false.map(source => ( setSourceToPresent(selectedSource)} source={source} diff --git a/ts/services/calling.ts b/ts/services/calling.ts index cef72d3ed1..36269eec58 100644 --- a/ts/services/calling.ts +++ b/ts/services/calling.ts @@ -48,6 +48,7 @@ import { PresentableSource, PresentedSource, } from '../types/Calling'; +import { LocalizerType } from '../types/Util'; import { ConversationModel } from '../models/conversations'; import { base64ToArrayBuffer, @@ -89,6 +90,33 @@ enum GroupCallUpdateMessageState { SentLeft, } +export function isScreenSource(source: PresentedSource): boolean { + return source.id.startsWith('screen'); +} + +export function translateSourceName( + i18n: LocalizerType, + source: PresentedSource +): string { + const { name } = source; + if (!isScreenSource(source)) { + return name; + } + + if (name === 'Entire Screen') { + return i18n('calling__SelectPresentingSourcesModal--entireScreen'); + } + + const match = name.match(/^Screen (\d+)$/); + if (match) { + return i18n('calling__SelectPresentingSourcesModal--screen', { + id: match[1], + }); + } + + return name; +} + export class CallingClass { readonly videoCapturer: GumVideoCapturer; @@ -954,7 +982,10 @@ export class CallingClass { this.setOutgoingVideoIsScreenShare(call, isPresenting); if (source) { - ipcRenderer.send('show-screen-share', source.name); + ipcRenderer.send( + 'show-screen-share', + translateSourceName(window.i18n, source) + ); notify({ icon: 'images/icons/v2/video-solid-24.svg', message: window.i18n('calling__presenting--notification-body'),