Make sure screen name is internationalized
This commit is contained in:
		
					parent
					
						
							
								84aed82357
							
						
					
				
			
			
				commit
				
					
						56f0e1ba46
					
				
			
		
					 3 changed files with 54 additions and 8 deletions
				
			
		|  | @ -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", | ||||
|  |  | |||
|  | @ -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 ( | ||||
|     <button | ||||
|       className={classNames({ | ||||
|  | @ -42,14 +47,14 @@ const Source = ({ | |||
|       type="button" | ||||
|     > | ||||
|       <img | ||||
|         alt={source.name} | ||||
|         alt={name} | ||||
|         className="module-CallingSelectPresentingSourcesModal__name--screenshot" | ||||
|         src={source.thumbnail} | ||||
|       /> | ||||
|       <div className="module-CallingSelectPresentingSourcesModal__name--container"> | ||||
|         {source.appIcon ? ( | ||||
|           <img | ||||
|             alt={source.name} | ||||
|             alt={name} | ||||
|             className="module-CallingSelectPresentingSourcesModal__name--icon" | ||||
|             height={16} | ||||
|             src={source.appIcon} | ||||
|  | @ -57,7 +62,7 @@ const Source = ({ | |||
|           /> | ||||
|         ) : null} | ||||
|         <span className="module-CallingSelectPresentingSourcesModal__name--text"> | ||||
|           {source.name} | ||||
|           {name} | ||||
|         </span> | ||||
|       </div> | ||||
|     </button> | ||||
|  | @ -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 ( | ||||
|     <Modal | ||||
|  | @ -98,6 +101,7 @@ export const CallingSelectPresentingSourcesModal = ({ | |||
|       <div className="module-CallingSelectPresentingSourcesModal__sources"> | ||||
|         {sources.true.map(source => ( | ||||
|           <Source | ||||
|             i18n={i18n} | ||||
|             key={source.id} | ||||
|             onSourceClick={selectedSource => setSourceToPresent(selectedSource)} | ||||
|             source={source} | ||||
|  | @ -111,6 +115,7 @@ export const CallingSelectPresentingSourcesModal = ({ | |||
|       <div className="module-CallingSelectPresentingSourcesModal__sources"> | ||||
|         {sources.false.map(source => ( | ||||
|           <Source | ||||
|             i18n={i18n} | ||||
|             key={source.id} | ||||
|             onSourceClick={selectedSource => setSourceToPresent(selectedSource)} | ||||
|             source={source} | ||||
|  |  | |||
|  | @ -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'), | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fedor Indutny
				Fedor Indutny