Typescript (Fix localization and custom title bar) (#631)

* Typescript - Fix localization for screen picker & spellchecker modules

* Typescript - Fix custom title bar menu item

* Typescript - Updated screen picker unit tests

* Typescript - Update appName place holder

* Typescript - Add backward compatibility support for screen snippet

* Typescript - Optimize and refactor code
This commit is contained in:
Kiran Niranjan 2019-05-02 17:43:50 +05:30 committed by Vishwas Shashidhar
parent 5cb931e31c
commit 9b202bb95e
15 changed files with 549 additions and 333 deletions

View File

@ -258,7 +258,8 @@
}
}
};
window.ssf.openScreenSnippet(gotSnippet);
const screenSnippet = new window.ssf.ScreenSnippet();
screenSnippet.capture().then(gotSnippet).catch(gotSnippet);
} else {
postMessage(apiCmds.openScreenSnippet)
}
@ -445,7 +446,8 @@
const activityStatus = document.getElementById('activity-status');
activityDetection.addEventListener('click', () => {
if (window.ssf) {
window.ssf.registerActivityDetection(10000, activityDetection);
window.ssf.registerActivityDetection(5000, activityCallback);
startActivityInterval();
} else {
postMessage(apiCmds.registerActivityDetection, 5000);
startActivityInterval();
@ -571,8 +573,10 @@
const locale = document.getElementById('locale-select').value;
if (window.ssf) {
window.ssf.setLocale(locale);
document.location.reload();
} else {
postMessage(apiCmds.setLocale, locale);
document.location.reload();
}
});

View File

@ -88,9 +88,9 @@ describe('screen picker', () => {
};
const applicationScreenStateMock = {
sources: [
{ display_id: '0', id: '0', name: 'Application screen 0', thumbnail: undefined },
{ display_id: '', id: '1', name: 'Application 1', thumbnail: undefined },
],
selectedSource: { display_id: '0', id: '0', name: 'Application screen 0', thumbnail: undefined },
selectedSource: { display_id: '', id: '1', name: 'Application 1', thumbnail: undefined },
};
it('should call `onToggle` when screen tab is changed', () => {
@ -116,7 +116,7 @@ describe('screen picker', () => {
it('should call `onSelect` when `ScreenPicker-item-container` in Entire screen is clicked', () => {
const wrapper = shallow(React.createElement(ScreenPicker));
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '0', id: '0', name: 'Entire screen', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '0', fileName: 'fullscreen', id: '0', name: 'Entire screen', thumbnail: undefined }};
const customSelector = '.ScreenPicker-item-container';
const applicationScreenStateMock = {
sources: [
@ -124,7 +124,7 @@ describe('screen picker', () => {
{ display_id: '1', id: '1', name: 'Application screen 1', thumbnail: undefined },
{ display_id: '2', id: '2', name: 'Application screen 2', thumbnail: undefined },
],
selectedSource: { display_id: '1', id: '1', name: 'Application screen 1', thumbnail: undefined },
selectedSource: { display_id: '1', fileName: 'fullscreen', id: '1', name: 'Application screen 1', thumbnail: undefined },
};
wrapper.setState(applicationScreenStateMock);
wrapper.find(customSelector).first().simulate('click');
@ -134,7 +134,7 @@ describe('screen picker', () => {
it('should call `onSelect` when `ScreenPicker-item-container` in Application screen is clicked', () => {
const wrapper = shallow(React.createElement(ScreenPicker));
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '2', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '2', fileName: 'fullscreen', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const customSelector = '.ScreenPicker-item-container';
const applicationScreenStateMock = {
sources: [
@ -142,7 +142,7 @@ describe('screen picker', () => {
{ display_id: '1', id: '1', name: 'Application screen 1', thumbnail: undefined },
{ display_id: '2', id: '2', name: 'Application screen 2', thumbnail: undefined },
],
selectedSource: { display_id: '1', id: '1', name: 'Application screen 1', thumbnail: undefined },
selectedSource: { display_id: '1', fileName: 'fullscreen', id: '1', name: 'Application screen 1', thumbnail: undefined },
};
wrapper.setState(applicationScreenStateMock);
wrapper.find(customSelector).at(2).simulate('click');
@ -172,7 +172,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` pageDown key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '2', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '2', fileName: 'fullscreen', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.pageDown);
@ -181,7 +181,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` right arrow key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '2', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '2', fileName: 'fullscreen', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.rightArrow);
@ -190,7 +190,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` pageUp key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '0', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '0', fileName: 'fullscreen', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.pageUp);
@ -199,7 +199,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` left arrow key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '0', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '0', fileName: 'fullscreen', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.leftArrow);
@ -208,7 +208,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` down arrow key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '0', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '0', fileName: 'fullscreen', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.downArrow);
@ -217,7 +217,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` up arrow key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '2', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '2', fileName: 'fullscreen', id: '2', name: 'Application screen 2', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.upArrow);
@ -245,7 +245,7 @@ describe('screen picker', () => {
it('should call `handleKeyUpPress` end key correctly', () => {
const spy = jest.spyOn(ScreenPicker.prototype, 'setState');
const expectedValue = { selectedSource: { display_id: '0', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const expectedValue = { selectedSource: { display_id: '0', fileName: 'fullscreen', id: '0', name: 'Application screen 0', thumbnail: undefined }};
const wrapper = shallow(React.createElement(ScreenPicker));
wrapper.setState(stateMock);
events.keyup(keyCode.endKey);
@ -255,13 +255,13 @@ describe('screen picker', () => {
});
describe('tab titles', () => {
it('should show `application-tab` when source name is not Entire screen', () => {
it('should show `application-tab` when display_id is empty', () => {
const wrapper = shallow(React.createElement(ScreenPicker));
const applicationScreenStateMock = {
sources: [
{ display_id: '1', id: '1', name: 'Application Screen', thumbnail: undefined },
{ display_id: '2', id: '2', name: 'Application Screen 2', thumbnail: undefined },
{ display_id: '3', id: '3', name: 'Application Screen 3', thumbnail: undefined },
{ display_id: '', id: '1', name: 'Application Screen', thumbnail: undefined },
{ display_id: '', id: '2', name: 'Application Screen 2', thumbnail: undefined },
{ display_id: '', id: '3', name: 'Application Screen 3', thumbnail: undefined },
],
};
wrapper.setState(applicationScreenStateMock);
@ -288,7 +288,7 @@ describe('screen picker', () => {
const customState = {
sources: [
{ display_id: '1', id: '1', name: 'Entire screen', thumbnail: undefined },
{ display_id: '1', id: '1', name: 'Application screen', thumbnail: undefined },
{ display_id: '', id: '1', name: 'Application screen', thumbnail: undefined },
],
};
wrapper.setState(customState);

View File

@ -5,6 +5,7 @@ import { i18n, LocaleType } from '../common/i18n';
import { logger } from '../common/logger';
import { autoLaunchInstance as autoLaunch } from './auto-launch-controller';
import { config, IConfig } from './config-handler';
import { titleBarChangeDialog } from './dialog-handler';
import { exportCrashDumps, exportLogs } from './reports-handler';
import { updateAlwaysOnTop } from './window-actions';
import { ICustomBrowserWindow, windowHandler } from './window-handler';
@ -18,6 +19,11 @@ export const menuSections = {
help: 'help', // tslint:disable-line
};
enum TitleBarStyles {
CUSTOM,
NATIVE,
}
const windowsAccelerator = Object.assign({
close: 'Ctrl+W',
copy: 'Ctrl+C',
@ -55,10 +61,14 @@ export class AppMenu {
private menu: Electron.Menu | undefined;
private menuList: Electron.MenuItemConstructorOptions[];
private locale: LocaleType;
private titleBarStyle: TitleBarStyles;
constructor() {
this.menuList = [];
this.locale = i18n.getLocale();
this.titleBarStyle = config.getConfigFields([ 'isCustomTitleBar' ]).isCustomTitleBar
? TitleBarStyles.CUSTOM
: TitleBarStyles.NATIVE;
this.buildMenu();
}
@ -203,6 +213,20 @@ export class AppMenu {
* Builds menu items for window section
*/
private buildWindowMenu(): Electron.MenuItemConstructorOptions {
const hamburgerMenuItem = isWindowsOS
? {
label: this.titleBarStyle === TitleBarStyles.NATIVE
? i18n.t('Enable Hamburger menu')()
: i18n.t('Disable Hamburger menu')(),
click: () => {
const isNativeStyle = this.titleBarStyle === TitleBarStyles.NATIVE;
this.titleBarStyle = isNativeStyle ? TitleBarStyles.NATIVE : TitleBarStyles.CUSTOM;
titleBarChangeDialog(isNativeStyle);
},
}
: this.buildSeparator();
const submenu: MenuItemConstructorOptions[] = [
this.assignRoleOrLabel({ role: 'minimize', label: i18n.t('Minimize')() }),
this.assignRoleOrLabel({ role: 'close', label: i18n.t('Close')() }),
@ -251,6 +275,7 @@ export class AppMenu {
: i18n.t('Bring to Front on Notifications')(),
type: 'checkbox',
},
hamburgerMenuItem,
this.buildSeparator(),
{
click: (_item, focusedWindow) => {

View File

@ -1,7 +1,11 @@
import * as electron from 'electron';
import { app } from 'electron';
import { i18n } from '../common/i18n';
import { logger } from '../common/logger';
import { config } from './config-handler';
import { ICustomBrowserWindow, windowHandler } from './window-handler';
import { windowExists } from './window-utils';
let currentAuthURL;
let tries = 0;
@ -137,3 +141,31 @@ export const showNetworkConnectivityError = (browserWindow: Electron.BrowserWind
const errorDesc = i18n.t('Network connectivity has been lost. Check your internet connection.')();
showLoadFailure(browserWindow, url, errorDesc, 0, retryCallback, true);
};
/**
* Displays a dialog to get confirmation to enable/disable
* hamburger menu
*
* @param isNativeStyle {boolean}
*/
export const titleBarChangeDialog = (isNativeStyle: boolean) => {
const focusedWindow = electron.BrowserWindow.getFocusedWindow();
if (!focusedWindow || !windowExists(focusedWindow)) {
return;
}
const options = {
type: 'question',
title: i18n.t('Relaunch Application')(),
message: i18n.t('Updating Title bar style requires Symphony to relaunch.')(),
detail: i18n.t('Note: When Hamburger menu is disabled, you can trigger the main menu by pressing the Alt key.')(),
buttons: [ i18n.t('Relaunch')(), i18n.t('Cancel')() ],
cancelId: 1,
};
electron.dialog.showMessageBox(focusedWindow, options, async (index) => {
if (index === 0) {
await config.updateUserConfig({ isCustomTitleBar: isNativeStyle });
app.relaunch();
app.exit();
}
});
};

View File

@ -29,6 +29,8 @@ export class SpellChecker {
*/
public attachToWebContents(webContents: Electron.WebContents): void {
const contextMenuBuilder = new ContextMenuBuilder(this.spellCheckHandler, webContents, false, this.processMenu);
contextMenuBuilder.setAlternateStringFormatter(this.getStringTable());
this.locale = i18n.getLocale();
const contextMenuListener = (_event, info) => {
if (this.locale !== i18n.getLocale()) {
contextMenuBuilder.setAlternateStringFormatter(this.getStringTable());

View File

@ -204,10 +204,10 @@ export class WindowHandler {
this.globalConfig = config.getGlobalConfigFields([ 'url', 'crashReporter' ]);
this.windows = {};
this.isCustomTitleBar = isWindowsOS && this.config.isCustomTitleBar;
this.windowOpts = { ...this.getMainWindowOpts(), ...opts };
this.isAutoReload = false;
this.isOnline = true;
this.isCustomTitleBar = isWindowsOS && this.config.isCustomTitleBar;
this.appMenu = null;

View File

@ -13,6 +13,10 @@
"Please provide your login credentials for:": "Please provide your login credentials for:",
"User name:": "User name:"
},
"MoreInfo": {
"More Information": "More Information",
"Version Information": "Version Information"
},
"Bring All to Front": "Bring All to Front",
"Bring to Front on Notifications": "Bring to Front on Notifications",
"Certificate Error": "Certificate Error",
@ -47,7 +51,7 @@
"Delete": "Delete",
"Disable Hamburger menu": "Disable Hamburger menu",
"Dev Tools disabled": "Dev Tools disabled",
"Dev Tools has been disabled. Please contact your system administrator": "Dev Tools has been disabled. Please contact your system administrator",
"Dev Tools has been disabled! Please contact your system administrator to enable it!": "Dev Tools has been disabled! Please contact your system administrator to enable it!",
"Edit": "Edit",
"Enable Hamburger menu": "Enable Hamburger menu",
"Error loading configuration": "Error loading configuration",
@ -68,6 +72,12 @@
"Minimize on Close": "Minimize on Close",
"Native": "Native",
"Network connectivity has been lost. Check your internet connection.": "Network connectivity has been lost. Check your internet connection.",
"NetworkError": {
"Problem connecting to Symphony": "Problem connecting to Symphony",
"Looks like you are not connected to the Internet. We'll try to reconnect automatically.": "Looks like you are not connected to the Internet. We'll try to reconnect automatically.",
"Cancel Retry": "Cancel Retry",
"Quit Symphony": "Quit Symphony"
},
"No crashes available to share": "No crashes available to share",
"No logs are available to share": "No logs are available to share",
"Not Allowed": "Not Allowed",
@ -109,7 +119,9 @@
"Screens": "Screens",
"Select Application": "Select Application",
"Select Screen": "Select Screen",
"Share": "Share"
"Share": "Share",
"Entire screen": "Entire screen",
"Screen {number}": "Screen {number}"
},
"ScreenSharingIndicator": {
"You are sharing your screen on {appName}": "You are sharing your screen on {appName}",
@ -123,6 +135,10 @@
"Pen": "Pen",
"Snipping Tool": "Snipping Tool"
},
"AboutSymphony": {
"About Symphony": "About Symphony",
"Version": "Version"
},
"Select All": "Select All",
"Services": "Services",
"Show All": "Show All",

View File

@ -13,6 +13,10 @@
"Please provide your login credentials for:": "Please provide your login credentials for:",
"User name:": "User name:"
},
"MoreInfo": {
"More Information": "More Information",
"Version Information": "Version Information"
},
"Bring All to Front": "Bring All to Front",
"Bring to Front on Notifications": "Bring to Front on Notifications",
"Certificate Error": "Certificate Error",
@ -46,6 +50,8 @@
"Cut": "Cut",
"Delete": "Delete",
"Disable Hamburger menu": "Disable Hamburger menu",
"Dev Tools disabled": "Dev Tools disabled",
"Dev Tools has been disabled! Please contact your system administrator to enable it!": "Dev Tools has been disabled! Please contact your system administrator to enable it!",
"Edit": "Edit",
"Enable Hamburger menu": "Enable Hamburger menu",
"Error loading configuration": "Error loading configuration",
@ -66,6 +72,12 @@
"Minimize on Close": "Minimize on Close",
"Native": "Native",
"Network connectivity has been lost. Check your internet connection.": "Network connectivity has been lost. Check your internet connection.",
"NetworkError": {
"Problem connecting to Symphony": "Problem connecting to Symphony",
"Looks like you are not connected to the Internet. We'll try to reconnect automatically.": "Looks like you are not connected to the Internet. We'll try to reconnect automatically.",
"Cancel Retry": "Cancel Retry",
"Quit Symphony": "Quit Symphony"
},
"No crashes available to share": "No crashes available to share",
"No logs are available to share": "No logs are available to share",
"Not Allowed": "Not Allowed",
@ -107,7 +119,9 @@
"Screens": "Screens",
"Select Application": "Select Application",
"Select Screen": "Select Screen",
"Share": "Share"
"Share": "Share",
"Entire screen": "Entire screen",
"Screen {number}": "Screen {number}"
},
"ScreenSharingIndicator": {
"You are sharing your screen on {appName}": "You are sharing your screen on {appName}",
@ -121,6 +135,10 @@
"Pen": "Pen",
"Snipping Tool": "Snipping Tool"
},
"AboutSymphony": {
"About Symphony": "About Symphony",
"Version": "Version"
},
"Select All": "Select All",
"Services": "Services",
"Show All": "Show All",

View File

@ -1,162 +1,180 @@
{
"About Symphony":"À propos de Symphony",
"Actual Size":"Taille actuelle",
"Always on Top":"Toujours au top",
"Auto Launch On Startup":"Lancement Automatique au démarrage",
"BasicAuth":{
"Authentication Request":"Demande d'authentification",
"Cancel":"Annuler",
"hostname":"hostname",
"Invalid user name/password":"Nom d'utilisateur/mot de passe invalide",
"Log In":"S'identifier",
"Password:":"Mot de passe:",
"Please provide your login credentials for:":"Fournissez vos identifiants de connexion pour:",
"User name:":"Nom d'utilisateur:"
"About Symphony": "À propos de Symphony",
"Actual Size": "Taille actuelle",
"Always on Top": "Toujours au top",
"Auto Launch On Startup": "Lancement Automatique au démarrage",
"BasicAuth": {
"Authentication Request": "Demande d'authentification",
"Cancel": "Annuler",
"hostname": "hostname",
"Invalid user name/password": "Nom d'utilisateur/mot de passe invalide",
"Log In": "S'identifier",
"Password:": "Mot de passe:",
"Please provide your login credentials for:": "Fournissez vos identifiants de connexion pour:",
"User name:": "Nom d'utilisateur:"
},
"Bring All to Front":"Amener tous au front",
"Bring to Front on Notifications":"Mettre les notifications au premier plan",
"Certificate Error":"Erreur de certificat",
"Close":"Fermer",
"Cancel":"Annuler",
"ContextMenu":{
"Add to Dictionary":"Ajouter au dictionnaire",
"Copy":"Copier",
"Copy Email Address":"Copier l'adresse e-mail",
"Copy Image":"Copier l'image",
"Copy Image URL":"Copier l'URL de l'image",
"Copy Link":"Copier le lien",
"Cut":"Couper",
"Inspect Element":"Inspecter l'élément",
"Look Up {searchText}":"Rechercher \"{searchText}\"",
"Open Link":"Ouvrir le lien",
"Paste":"Coller",
"Reload":"Recharger",
"Search with Google":"Rechercher avec Google"
"MoreInfo": {
"More Information": "Plus dinformations",
"Version Information": "Information sur la version"
},
"DownloadManager":{
"Show in Folder":"Afficher dans le dossier",
"Reveal in Finder":"Révéler dans le Finder",
"Open":"Ouvrir",
"Downloaded":"Téléchargé",
"File not Found":"Fichier non trouvé",
"The file you are trying to open cannot be found in the specified path.":"Le fichier que vous essayez d'ouvrir est introuvable dans le chemin spécifié."
"Bring All to Front": "Amener tous au front",
"Bring to Front on Notifications": "Mettre les notifications au premier plan",
"Certificate Error": "Erreur de certificat",
"Close": "Fermer",
"Cancel": "Annuler",
"ContextMenu": {
"Add to Dictionary": "Ajouter au dictionnaire",
"Copy": "Copier",
"Copy Email Address": "Copier l'adresse e-mail",
"Copy Image": "Copier l'image",
"Copy Image URL": "Copier l'URL de l'image",
"Copy Link": "Copier le lien",
"Cut": "Couper",
"Inspect Element": "Inspecter l'élément",
"Look Up {searchText}": "Rechercher \"{searchText}\"",
"Open Link": "Ouvrir le lien",
"Paste": "Coller",
"Reload": "Recharger",
"Search with Google": "Rechercher avec Google"
},
"Copy":"Copier",
"Custom":"Personnalisé",
"Cut":"Couper",
"Delete":"Effacer",
"Disable Hamburger menu":"Désactiver le menu Hamburger",
"Edit":"Modifier",
"Enable Hamburger menu":"Activer le menu Hamburger",
"Error loading configuration":"Erreur de chargement de la configuration",
"Error loading URL":"Erreur de chargement de l'URL",
"Error loading window":"Erreur de chargement de la fenêtre",
"Error setting AutoLaunch configuration":"Erreur de configuration dans le Lancement Automatique",
"Failed!":"Échoué!",
"Flash Notification in Taskbar":"Notification Flash dans la barre des tâches",
"Help":"Aide",
"Help Url":"https://support.symphony.com",
"Symphony Url":"https://symphony.com/fr-FR",
"Hide Others":"Cacher les autres",
"Hide Symphony":"Cacher Symphony",
"DownloadManager": {
"Show in Folder": "Afficher dans le dossier",
"Reveal in Finder": "Révéler dans le Finder",
"Open": "Ouvrir",
"Downloaded": "Téléchargé",
"File not Found": "Fichier non trouvé",
"The file you are trying to open cannot be found in the specified path.": "Le fichier que vous essayez d'ouvrir est introuvable dans le chemin spécifié."
},
"Copy": "Copier",
"Custom": "Personnalisé",
"Cut": "Couper",
"Delete": "Effacer",
"Disable Hamburger menu": "Désactiver le menu Hamburger",
"Dev Tools disabled": "Outils de développement désactivés",
"Dev Tools has been disabled! Please contact your system administrator to enable it!": "Dev Tools a été désactivé ! Veuillez contacter votre administrateur système pour lactiver !",
"Edit": "Modifier",
"Enable Hamburger menu": "Activer le menu Hamburger",
"Error loading configuration": "Erreur de chargement de la configuration",
"Error loading URL": "Erreur de chargement de l'URL",
"Error loading window": "Erreur de chargement de la fenêtre",
"Error setting AutoLaunch configuration": "Erreur de configuration dans le Lancement Automatique",
"Failed!": "Échoué!",
"Flash Notification in Taskbar": "Notification Flash dans la barre des tâches",
"Help": "Aide",
"Help Url": "https://support.symphony.com",
"Symphony Url": "https://symphony.com/fr-FR",
"Hide Others": "Cacher les autres",
"Hide Symphony": "Cacher Symphony",
"Ignore": "Ignorer",
"Learn More":"Apprendre encore plus",
"Loading Error":"Erreur lors du chargement",
"Minimize":"Minimiser",
"Minimiser on Close":"Minimiser à la fermeture",
"Native":"Originaire",
"Learn More": "Apprendre encore plus",
"Loading Error": "Erreur lors du chargement",
"Minimize": "Minimiser",
"Minimiser on Close": "Minimiser à la fermeture",
"Native": "Originaire",
"Network connectivity has been lost. Check your internet connection.": "La connectivité a été perdue. Vérifiez votre connection à l'internet.",
"No crashes available to share":"Pas de crash à partager",
"No logs are available to share":"Pas de journal à partager",
"Not Allowed":"Interdit",
"Note: When Hamburger menu is disabled, you can trigger the main menu by pressing the Alt key.":"Remarque: lorsque le menu Hamburger est désactivé, vous pouvez activer le menu principal en appuyant sur la touche \"Alt\" key.",
"NotificationSettings":{
"Bottom Left":"Gauche inférieure",
"Bottom Right":"Droite inférieure",
"CANCEL":"ANNULER",
"Monitor":"Moniteur",
"Notification Settings":"Paramètres des notifications",
"Notification shown on Monitor: ":"Notification affichée sur le Moniteur: ",
"OK":"OK",
"Position":"Position",
"Symphony - Configure Notification Position":"Symphony - Configurer la position des notifications",
"Top Left":"Gauche supérieure",
"Top Right":"Droite supérieure"
"NetworkError": {
"Problem connecting to Symphony": "Problème de connexion à Symphony",
"Looks like you are not connected to the Internet. We'll try to reconnect automatically.": "On dirait que vous n'êtes pas connecté à Internet. Nous allons essayer de vous reconnecter automatiquement.",
"Cancel Retry": "Annuler nouvelle tentative",
"Quit Symphony": "Quitter Symphony"
},
"Oops! Looks like we have had a crash.":"Oops! On dirait que nous avons eu un crash.",
"Oops! Looks like we have had a crash. Please reload or close this window.":"Oops! On dirait que nous avons eu un crash. Veuillez recharger ou fermer cette fenêtre.",
"Paste":"Coller",
"Paste and Match Style":"Coller et appliquer le style",
"Permission Denied":"Permission refusée",
"Please contact your admin for help":"Veuillez contacter votre administrateur pour obtenir de l'aide.",
"please contact your administrator for more details":"veuillez contacter votre administrateur pour plus de détails",
"Quit Symphony":"Quitter Symphony",
"Redo":"Refaire",
"Refresh app when idle":"Actualiser l'application en mode inactive",
"Clear cache and Reload":"Vider le cache et recharger",
"Relaunch Application":"Redémarrer l'application",
"Relaunch":"Redémarrer",
"Reload":"Recharger",
"Renderer Process Crashed":"Processus de rendu a eu un crash",
"ScreenPicker":{
"Applications":"Applications",
"Cancel":"Annuler",
"Choose what you'd like to share":"Choisissez ce que vous souhaitez partager",
"No screens or applications are currently available.":"Aucun écran ou application n'est actuellement disponible.",
"Screen Picker":"Sélecteur d'écran",
"Screens":"Écrans",
"Select Application":"Sélectionnez une application",
"Select Screen":"Sélectionnez l'écran",
"Share":"Partager"
"No crashes available to share": "Pas de crash à partager",
"No logs are available to share": "Pas de journal à partager",
"Not Allowed": "Interdit",
"Note: When Hamburger menu is disabled, you can trigger the main menu by pressing the Alt key.": "Remarque: lorsque le menu Hamburger est désactivé, vous pouvez activer le menu principal en appuyant sur la touche \"Alt\" key.",
"NotificationSettings": {
"Bottom Left": "Gauche inférieure",
"Bottom Right": "Droite inférieure",
"CANCEL": "ANNULER",
"Monitor": "Moniteur",
"Notification Settings": "Paramètres des notifications",
"Notification shown on Monitor: ": "Notification affichée sur le Moniteur: ",
"OK": "OK",
"Position": "Position",
"Symphony - Configure Notification Position": "Symphony - Configurer la position des notifications",
"Top Left": "Gauche supérieure",
"Top Right": "Droite supérieure"
},
"Oops! Looks like we have had a crash.": "Oops! On dirait que nous avons eu un crash.",
"Oops! Looks like we have had a crash. Please reload or close this window.": "Oops! On dirait que nous avons eu un crash. Veuillez recharger ou fermer cette fenêtre.",
"Paste": "Coller",
"Paste and Match Style": "Coller et appliquer le style",
"Permission Denied": "Permission refusée",
"Please contact your admin for help": "Veuillez contacter votre administrateur pour obtenir de l'aide.",
"please contact your administrator for more details": "veuillez contacter votre administrateur pour plus de détails",
"Quit Symphony": "Quitter Symphony",
"Redo": "Refaire",
"Refresh app when idle": "Actualiser l'application en mode inactive",
"Clear cache and Reload": "Vider le cache et recharger",
"Relaunch Application": "Redémarrer l'application",
"Relaunch": "Redémarrer",
"Reload": "Recharger",
"Renderer Process Crashed": "Processus de rendu a eu un crash",
"ScreenPicker": {
"Applications": "Applications",
"Cancel": "Annuler",
"Choose what you'd like to share": "Choisissez ce que vous souhaitez partager",
"No screens or applications are currently available.": "Aucun écran ou application n'est actuellement disponible.",
"Screen Picker": "Sélecteur d'écran",
"Screens": "Écrans",
"Select Application": "Sélectionnez une application",
"Select Screen": "Sélectionnez l'écran",
"Share": "Partager",
"Entire screen": "Écran entier",
"Screen {number}": "Écran {number}"
},
"ScreenSharingIndicator": {
"You are sharing your screen on {appName}": "Vous partagez votre écran sur {appName}",
"Stop sharing": "Arrêter le partage",
"Hide": "Masquer"
},
"ScreenSnippet":{
"Done":"Terminé",
"Erase":"Effacer",
"Highlight":"Surligner",
"Pen":"Stylo",
"Snipping Tool":"Outil Capture"
"ScreenSnippet": {
"Done": "Terminé",
"Erase": "Effacer",
"Highlight": "Surligner",
"Pen": "Stylo",
"Snipping Tool": "Outil Capture"
},
"Select All":"Tout sélectionner",
"Services":"Services",
"Show All":"Tout afficher",
"Show crash dump in Explorer":"Afficher rapport de crash dans Explorateur",
"Show crash dump in Finder":"Afficher rapport de crash dans Finder",
"AboutSymphony": {
"About Symphony": "À propos de Symphony",
"Version": "Version"
},
"Select All": "Tout sélectionner",
"Services": "Services",
"Show All": "Tout afficher",
"Show crash dump in Explorer": "Afficher rapport de crash dans Explorateur",
"Show crash dump in Finder": "Afficher rapport de crash dans Finder",
"Toggle Developer Tools": "Basculer, les outils de développement",
"More Information": "Plus d'information",
"Show Logs in Explorer":"Afficher journal d'évenements dans Explorateur",
"Show Logs in Finder":"Afficher journal d'évenements dans Finder",
"SnackBar":{
" to exit full screen":" pour quitter le plein écran",
"esc":"esc",
"Press ":"Appuyer sur "
"Show Logs in Explorer": "Afficher journal d'évenements dans Explorateur",
"Show Logs in Finder": "Afficher journal d'évenements dans Finder",
"SnackBar": {
" to exit full screen": " pour quitter le plein écran",
"esc": "esc",
"Press ": "Appuyer sur "
},
"Sorry, you are not allowed to access this website":"Désolé, vous n'êtes pas autorisé à accéder à ce site.",
"Speech":"Dictée vocale",
"Start Speaking":"Commencer à dicter",
"Stop Speaking":"Arreter de dicter",
"Symphony Help":"Aide Symphony",
"TitleBar":{
"Close":"Fermer",
"Maximize":"Maximiser",
"Menu":"Menu",
"Minimize":"Minimiser"
"Sorry, you are not allowed to access this website": "Désolé, vous n'êtes pas autorisé à accéder à ce site.",
"Speech": "Dictée vocale",
"Start Speaking": "Commencer à dicter",
"Stop Speaking": "Arreter de dicter",
"Symphony Help": "Aide Symphony",
"TitleBar": {
"Close": "Fermer",
"Maximize": "Maximiser",
"Menu": "Menu",
"Minimize": "Minimiser"
},
"Title Bar Style":"Style de la barre de titre",
"Toggle Full Screen":"Basculer plein écran",
"Troubleshooting":"Dépannage",
"Unable to generate crash reports due to ":"Impossible de générer le rapport de crash en raison de ",
"Unable to generate logs due to ":"Impossible de générer le journal d'évenements en raison de",
"Undo":"Défaire",
"Updating Title bar style requires Symphony to relaunch.":"La mise à jour du style de la barre de titre nécessite le redémarrage de Symphony.",
"View":"Visualiser",
"Window":"Fenêtre",
"Your administrator has disabled":"Votre administrateur a désactivé",
"Zoom":"Zoom",
"Zoom In":"Zoom Avant",
"Zoom Out":"Zoom Arrière"
}
"Title Bar Style": "Style de la barre de titre",
"Toggle Full Screen": "Basculer plein écran",
"Troubleshooting": "Dépannage",
"Unable to generate crash reports due to ": "Impossible de générer le rapport de crash en raison de ",
"Unable to generate logs due to ": "Impossible de générer le journal d'évenements en raison de",
"Undo": "Défaire",
"Updating Title bar style requires Symphony to relaunch.": "La mise à jour du style de la barre de titre nécessite le redémarrage de Symphony.",
"View": "Visualiser",
"Window": "Fenêtre",
"Your administrator has disabled": "Votre administrateur a désactivé",
"Zoom": "Zoom",
"Zoom In": "Zoom Avant",
"Zoom Out": "Zoom Arrière"
}

View File

@ -1,162 +1,180 @@
{
"About Symphony":"À propos de Symphony",
"Actual Size":"Taille actuelle",
"Always on Top":"Toujours au top",
"Auto Launch On Startup":"Lancement Automatique au démarrage",
"BasicAuth":{
"Authentication Request":"Demande d'authentification",
"Cancel":"Annuler",
"hostname":"hostname",
"Invalid user name/password":"Nom d'utilisateur/mot de passe invalide",
"Log In":"S'identifier",
"Password:":"Mot de passe:",
"Please provide your login credentials for:":"Fournissez vos identifiants de connexion pour:",
"User name:":"Nom d'utilisateur:"
"About Symphony": "À propos de Symphony",
"Actual Size": "Taille actuelle",
"Always on Top": "Toujours au top",
"Auto Launch On Startup": "Lancement Automatique au démarrage",
"BasicAuth": {
"Authentication Request": "Demande d'authentification",
"Cancel": "Annuler",
"hostname": "hostname",
"Invalid user name/password": "Nom d'utilisateur/mot de passe invalide",
"Log In": "S'identifier",
"Password:": "Mot de passe:",
"Please provide your login credentials for:": "Fournissez vos identifiants de connexion pour:",
"User name:": "Nom d'utilisateur:"
},
"Bring All to Front":"Amener tous au front",
"Bring to Front on Notifications":"Mettre les notifications au premier plan",
"Certificate Error":"Erreur de certificat",
"Close":"Fermer",
"Cancel":"Annuler",
"ContextMenu":{
"Add to Dictionary":"Ajouter au dictionnaire",
"Copy":"Copier",
"Copy Email Address":"Copier l'adresse e-mail",
"Copy Image":"Copier l'image",
"Copy Image URL":"Copier l'URL de l'image",
"Copy Link":"Copier le lien",
"Cut":"Couper",
"Inspect Element":"Inspecter l'élément",
"Look Up {searchText}":"Rechercher \"{searchText}\"",
"Open Link":"Ouvrir le lien",
"Paste":"Coller",
"Reload":"Recharger",
"Search with Google":"Rechercher avec Google"
"MoreInfo": {
"More Information": "Plus dinformations",
"Version Information": "Information sur la version"
},
"DownloadManager":{
"Show in Folder":"Afficher dans le dossier",
"Reveal in Finder":"Révéler dans le Finder",
"Open":"Ouvrir",
"Downloaded":"Téléchargé",
"File not Found":"Fichier non trouvé",
"The file you are trying to open cannot be found in the specified path.":"Le fichier que vous essayez d'ouvrir est introuvable dans le chemin spécifié."
"Bring All to Front": "Amener tous au front",
"Bring to Front on Notifications": "Mettre les notifications au premier plan",
"Certificate Error": "Erreur de certificat",
"Close": "Fermer",
"Cancel": "Annuler",
"ContextMenu": {
"Add to Dictionary": "Ajouter au dictionnaire",
"Copy": "Copier",
"Copy Email Address": "Copier l'adresse e-mail",
"Copy Image": "Copier l'image",
"Copy Image URL": "Copier l'URL de l'image",
"Copy Link": "Copier le lien",
"Cut": "Couper",
"Inspect Element": "Inspecter l'élément",
"Look Up {searchText}": "Rechercher \"{searchText}\"",
"Open Link": "Ouvrir le lien",
"Paste": "Coller",
"Reload": "Recharger",
"Search with Google": "Rechercher avec Google"
},
"Copy":"Copier",
"Custom":"Personnalisé",
"Cut":"Couper",
"Delete":"Effacer",
"Disable Hamburger menu":"Désactiver le menu Hamburger",
"Edit":"Modifier",
"Enable Hamburger menu":"Activer le menu Hamburger",
"Error loading configuration":"Erreur de chargement de la configuration",
"Error loading URL":"Erreur de chargement de l'URL",
"Error loading window":"Erreur de chargement de la fenêtre",
"Error setting AutoLaunch configuration":"Erreur de configuration dans le Lancement Automatique",
"Failed!":"Échoué!",
"Flash Notification in Taskbar":"Notification Flash dans la barre des tâches",
"Help":"Aide",
"Help Url":"https://support.symphony.com",
"Symphony Url":"https://symphony.com/fr-FR",
"Hide Others":"Cacher les autres",
"Hide Symphony":"Cacher Symphony",
"DownloadManager": {
"Show in Folder": "Afficher dans le dossier",
"Reveal in Finder": "Révéler dans le Finder",
"Open": "Ouvrir",
"Downloaded": "Téléchargé",
"File not Found": "Fichier non trouvé",
"The file you are trying to open cannot be found in the specified path.": "Le fichier que vous essayez d'ouvrir est introuvable dans le chemin spécifié."
},
"Copy": "Copier",
"Custom": "Personnalisé",
"Cut": "Couper",
"Delete": "Effacer",
"Disable Hamburger menu": "Désactiver le menu Hamburger",
"Dev Tools disabled": "Outils de développement désactivés",
"Dev Tools has been disabled! Please contact your system administrator to enable it!": "Dev Tools a été désactivé ! Veuillez contacter votre administrateur système pour lactiver !",
"Edit": "Modifier",
"Enable Hamburger menu": "Activer le menu Hamburger",
"Error loading configuration": "Erreur de chargement de la configuration",
"Error loading URL": "Erreur de chargement de l'URL",
"Error loading window": "Erreur de chargement de la fenêtre",
"Error setting AutoLaunch configuration": "Erreur de configuration dans le Lancement Automatique",
"Failed!": "Échoué!",
"Flash Notification in Taskbar": "Notification Flash dans la barre des tâches",
"Help": "Aide",
"Help Url": "https://support.symphony.com",
"Symphony Url": "https://symphony.com/fr-FR",
"Hide Others": "Cacher les autres",
"Hide Symphony": "Cacher Symphony",
"Ignore": "Ignorer",
"Learn More":"Apprendre encore plus",
"Loading Error":"Erreur lors du chargement",
"Minimize":"Minimiser",
"Minimiser on Close":"Minimiser à la fermeture",
"Native":"Originaire",
"Learn More": "Apprendre encore plus",
"Loading Error": "Erreur lors du chargement",
"Minimize": "Minimiser",
"Minimiser on Close": "Minimiser à la fermeture",
"Native": "Originaire",
"Network connectivity has been lost. Check your internet connection.": "La connectivité a été perdue. Vérifiez votre connection à l'internet.",
"No crashes available to share":"Pas de crash à partager",
"No logs are available to share":"Pas de journal à partager",
"Not Allowed":"Interdit",
"Note: When Hamburger menu is disabled, you can trigger the main menu by pressing the Alt key.":"Remarque: lorsque le menu Hamburger est désactivé, vous pouvez activer le menu principal en appuyant sur la touche \"Alt\" key.",
"NotificationSettings":{
"Bottom Left":"Gauche inférieure",
"Bottom Right":"Droite inférieure",
"CANCEL":"ANNULER",
"Monitor":"Moniteur",
"Notification Settings":"Paramètres des notifications",
"Notification shown on Monitor: ":"Notification affichée sur le Moniteur: ",
"OK":"OK",
"Position":"Position",
"Symphony - Configure Notification Position":"Symphony - Configurer la position des notifications",
"Top Left":"Gauche supérieure",
"Top Right":"Droite supérieure"
"NetworkError": {
"Problem connecting to Symphony": "Problème de connexion à Symphony",
"Looks like you are not connected to the Internet. We'll try to reconnect automatically.": "On dirait que vous n'êtes pas connecté à Internet. Nous allons essayer de vous reconnecter automatiquement.",
"Cancel Retry": "Annuler nouvelle tentative",
"Quit Symphony": "Quitter Symphony"
},
"Oops! Looks like we have had a crash.":"Oops! On dirait que nous avons eu un crash.",
"Oops! Looks like we have had a crash. Please reload or close this window.":"Oops! On dirait que nous avons eu un crash. Veuillez recharger ou fermer cette fenêtre.",
"Paste":"Coller",
"Paste and Match Style":"Coller et appliquer le style",
"Permission Denied":"Permission refusée",
"Please contact your admin for help":"Veuillez contacter votre administrateur pour obtenir de l'aide.",
"please contact your administrator for more details":"veuillez contacter votre administrateur pour plus de détails",
"Quit Symphony":"Quitter Symphony",
"Redo":"Refaire",
"Refresh app when idle":"Actualiser l'application en mode inactive",
"Clear cache and Reload":"Vider le cache et recharger",
"Relaunch Application":"Redémarrer l'application",
"Relaunch":"Redémarrer",
"Reload":"Recharger",
"Renderer Process Crashed":"Processus de rendu a eu un crash",
"ScreenPicker":{
"Applications":"Applications",
"Cancel":"Annuler",
"Choose what you'd like to share":"Choisissez ce que vous souhaitez partager",
"No screens or applications are currently available.":"Aucun écran ou application n'est actuellement disponible.",
"Screen Picker":"Sélecteur d'écran",
"Screens":"Écrans",
"Select Application":"Sélectionnez une application",
"Select Screen":"Sélectionnez l'écran",
"Share":"Partager"
"No crashes available to share": "Pas de crash à partager",
"No logs are available to share": "Pas de journal à partager",
"Not Allowed": "Interdit",
"Note: When Hamburger menu is disabled, you can trigger the main menu by pressing the Alt key.": "Remarque: lorsque le menu Hamburger est désactivé, vous pouvez activer le menu principal en appuyant sur la touche \"Alt\" key.",
"NotificationSettings": {
"Bottom Left": "Gauche inférieure",
"Bottom Right": "Droite inférieure",
"CANCEL": "ANNULER",
"Monitor": "Moniteur",
"Notification Settings": "Paramètres des notifications",
"Notification shown on Monitor: ": "Notification affichée sur le Moniteur: ",
"OK": "OK",
"Position": "Position",
"Symphony - Configure Notification Position": "Symphony - Configurer la position des notifications",
"Top Left": "Gauche supérieure",
"Top Right": "Droite supérieure"
},
"Oops! Looks like we have had a crash.": "Oops! On dirait que nous avons eu un crash.",
"Oops! Looks like we have had a crash. Please reload or close this window.": "Oops! On dirait que nous avons eu un crash. Veuillez recharger ou fermer cette fenêtre.",
"Paste": "Coller",
"Paste and Match Style": "Coller et appliquer le style",
"Permission Denied": "Permission refusée",
"Please contact your admin for help": "Veuillez contacter votre administrateur pour obtenir de l'aide.",
"please contact your administrator for more details": "veuillez contacter votre administrateur pour plus de détails",
"Quit Symphony": "Quitter Symphony",
"Redo": "Refaire",
"Refresh app when idle": "Actualiser l'application en mode inactive",
"Clear cache and Reload": "Vider le cache et recharger",
"Relaunch Application": "Redémarrer l'application",
"Relaunch": "Redémarrer",
"Reload": "Recharger",
"Renderer Process Crashed": "Processus de rendu a eu un crash",
"ScreenPicker": {
"Applications": "Applications",
"Cancel": "Annuler",
"Choose what you'd like to share": "Choisissez ce que vous souhaitez partager",
"No screens or applications are currently available.": "Aucun écran ou application n'est actuellement disponible.",
"Screen Picker": "Sélecteur d'écran",
"Screens": "Écrans",
"Select Application": "Sélectionnez une application",
"Select Screen": "Sélectionnez l'écran",
"Share": "Partager",
"Entire screen": "Écran entier",
"Screen {number}": "Écran {number}"
},
"ScreenSharingIndicator": {
"You are sharing your screen on {appName}": "Vous partagez votre écran sur {appName}",
"Stop sharing": "Arrêter le partage",
"Hide": "Masquer"
},
"ScreenSnippet":{
"Done":"Terminé",
"Erase":"Effacer",
"Highlight":"Surligner",
"Pen":"Stylo",
"Snipping Tool":"Outil Capture"
"ScreenSnippet": {
"Done": "Terminé",
"Erase": "Effacer",
"Highlight": "Surligner",
"Pen": "Stylo",
"Snipping Tool": "Outil Capture"
},
"Select All":"Tout sélectionner",
"Services":"Services",
"Show All":"Tout afficher",
"Show crash dump in Explorer":"Afficher rapport de crash dans Explorateur",
"Show crash dump in Finder":"Afficher rapport de crash dans Finder",
"AboutSymphony": {
"About Symphony": "À propos de Symphony",
"Version": "Version"
},
"Select All": "Tout sélectionner",
"Services": "Services",
"Show All": "Tout afficher",
"Show crash dump in Explorer": "Afficher rapport de crash dans Explorateur",
"Show crash dump in Finder": "Afficher rapport de crash dans Finder",
"Toggle Developer Tools": "Basculer, les outils de développement",
"More Information": "Plus d'information",
"Show Logs in Explorer":"Afficher journal d'évenements dans Explorateur",
"Show Logs in Finder":"Afficher journal d'évenements dans Finder",
"SnackBar":{
" to exit full screen":" pour quitter le plein écran",
"esc":"esc",
"Press ":"Appuyer sur "
"Show Logs in Explorer": "Afficher journal d'évenements dans Explorateur",
"Show Logs in Finder": "Afficher journal d'évenements dans Finder",
"SnackBar": {
" to exit full screen": " pour quitter le plein écran",
"esc": "esc",
"Press ": "Appuyer sur "
},
"Sorry, you are not allowed to access this website":"Désolé, vous n'êtes pas autorisé à accéder à ce site.",
"Speech":"Dictée vocale",
"Start Speaking":"Commencer à dicter",
"Stop Speaking":"Arreter de dicter",
"Symphony Help":"Aide Symphony",
"TitleBar":{
"Close":"Fermer",
"Maximize":"Maximiser",
"Menu":"Menu",
"Minimize":"Minimiser"
"Sorry, you are not allowed to access this website": "Désolé, vous n'êtes pas autorisé à accéder à ce site.",
"Speech": "Dictée vocale",
"Start Speaking": "Commencer à dicter",
"Stop Speaking": "Arreter de dicter",
"Symphony Help": "Aide Symphony",
"TitleBar": {
"Close": "Fermer",
"Maximize": "Maximiser",
"Menu": "Menu",
"Minimize": "Minimiser"
},
"Title Bar Style":"Style de la barre de titre",
"Toggle Full Screen":"Basculer plein écran",
"Troubleshooting":"Dépannage",
"Unable to generate crash reports due to ":"Impossible de générer le rapport de crash en raison de ",
"Unable to generate logs due to ":"Impossible de générer le journal d'évenements en raison de",
"Undo":"Défaire",
"Updating Title bar style requires Symphony to relaunch.":"La mise à jour du style de la barre de titre nécessite le redémarrage de Symphony.",
"View":"Visualiser",
"Window":"Fenêtre",
"Your administrator has disabled":"Votre administrateur a désactivé",
"Zoom":"Zoom",
"Zoom In":"Zoom Avant",
"Zoom Out":"Zoom Arrière"
}
"Title Bar Style": "Style de la barre de titre",
"Toggle Full Screen": "Basculer plein écran",
"Troubleshooting": "Dépannage",
"Unable to generate crash reports due to ": "Impossible de générer le rapport de crash en raison de ",
"Unable to generate logs due to ": "Impossible de générer le journal d'évenements en raison de",
"Undo": "Défaire",
"Updating Title bar style requires Symphony to relaunch.": "La mise à jour du style de la barre de titre nécessite le redémarrage de Symphony.",
"View": "Visualiser",
"Window": "Fenêtre",
"Your administrator has disabled": "Votre administrateur a désactivé",
"Zoom": "Zoom",
"Zoom In": "Zoom Avant",
"Zoom Out": "Zoom Arrière"
}

View File

@ -13,6 +13,10 @@
"Please provide your login credentials for:": "あなたのログイン認証情報を入力してください。",
"User name:": "ユーザー名:"
},
"MoreInfo": {
"More Information": "詳しくは",
"Version Information": "バージョン情報"
},
"Bring All to Front": "すべて前面に表示",
"Bring to Front on Notifications": "通知時に前面に表示",
"Certificate Error": "証明書のエラー",
@ -34,9 +38,9 @@
"Search with Google": "Googleで検索"
},
"DownloadManager": {
"Show in Folder": "フォルダで見て",
"Reveal in Finder": "Finderで明らかにする",
"Open": "開いた",
"Show in Folder": "フォルダーを開く",
"Reveal in Finder": "Finderで確認する",
"Open": "開",
"Downloaded": "ダウンロード済み",
"File not Found": "ファイルが見つかりません",
"The file you are trying to open cannot be found in the specified path.": "開こうとしているファイルが指定されたパスに見つかりません."
@ -45,9 +49,9 @@
"Custom": "カスタム",
"Cut": "切り取り",
"Delete": "削除",
"Dev Tools disabled": "開発ツールを無効にする",
"Dev Tools has been disabled. Please contact your system administrator": "Dev Toolsが無効になっています。システム管理者に連絡してください",
"Disable Hamburger menu": "ハンバーガーメニューを無効にする",
"Dev Tools disabled": "開発ツールが無効",
"Dev Tools has been disabled! Please contact your system administrator to enable it!": "開発ツールが無効になっています。システム管理者に連絡して、有効にしてください。",
"Edit": "編集",
"Enable Hamburger menu": "ハンバーガーメニューを有効にする",
"Error loading configuration": "構成の読み込みエラー",
@ -68,6 +72,12 @@
"Minimize on Close": "閉じるで最小化",
"Native": "Native",
"Network connectivity has been lost. Check your internet connection.": "ネットワーク接続が失われました。インターネット接続を確認してください。",
"NetworkError": {
"Problem connecting to Symphony": "Symphonyへの接続に関する問題",
"Looks like you are not connected to the Internet. We'll try to reconnect automatically.": "インターネットに接続していないようです。 自動的に再接続します。",
"Cancel Retry": "再試行をキャンセル",
"Quit Symphony": "Symphonyを終了"
},
"No crashes available to share": "共有できるクラッシュはありません",
"No logs are available to share": "共有できるログはありません",
"Not Allowed": "許可されていませ。",
@ -109,11 +119,13 @@
"Screens": "画面",
"Select Application": "アプリケーションを選択",
"Select Screen": "画面を選択",
"Share": "共有"
"Share": "共有",
"Entire screen": "画面全体",
"Screen {number}": "画面 {number}"
},
"ScreenSharingIndicator": {
"You are sharing your screen on {appName}": "あなたは{appName}上であなたの画面を共有しています",
"Stop Sharing": "共有を停止",
"Stop sharing": "画面共有を停止",
"Hide": "非表示にする"
},
"ScreenSnippet": {
@ -123,6 +135,10 @@
"Pen": "ペン",
"Snipping Tool": "切り取りツール"
},
"AboutSymphony": {
"About Symphony": "Symphonyについて",
"Version": "バージョン"
},
"Select All": "すべてを選択",
"Services": "サービス",
"Show All": "すべてを表示",

View File

@ -13,6 +13,10 @@
"Please provide your login credentials for:": "あなたのログイン認証情報を入力してください。",
"User name:": "ユーザー名:"
},
"MoreInfo": {
"More Information": "詳しくは",
"Version Information": "バージョン情報"
},
"Bring All to Front": "すべて前面に表示",
"Bring to Front on Notifications": "通知時に前面に表示",
"Certificate Error": "証明書のエラー",
@ -34,9 +38,9 @@
"Search with Google": "Googleで検索"
},
"DownloadManager": {
"Show in Folder": "フォルダで見て",
"Reveal in Finder": "Finderで明らかにする",
"Open": "開いた",
"Show in Folder": "フォルダーを開く",
"Reveal in Finder": "Finderで確認する",
"Open": "開",
"Downloaded": "ダウンロード済み",
"File not Found": "ファイルが見つかりません",
"The file you are trying to open cannot be found in the specified path.": "開こうとしているファイルが指定されたパスに見つかりません."
@ -46,6 +50,8 @@
"Cut": "切り取り",
"Delete": "削除",
"Disable Hamburger menu": "ハンバーガーメニューを無効にする",
"Dev Tools disabled": "開発ツールが無効",
"Dev Tools has been disabled! Please contact your system administrator to enable it!": "開発ツールが無効になっています。システム管理者に連絡して、有効にしてください。",
"Edit": "編集",
"Enable Hamburger menu": "ハンバーガーメニューを有効にする",
"Error loading configuration": "構成の読み込みエラー",
@ -66,6 +72,12 @@
"Minimize on Close": "閉じるで最小化",
"Native": "Native",
"Network connectivity has been lost. Check your internet connection.": "ネットワーク接続が失われました。インターネット接続を確認してください。",
"NetworkError": {
"Problem connecting to Symphony": "Symphonyへの接続に関する問題",
"Looks like you are not connected to the Internet. We'll try to reconnect automatically.": "インターネットに接続していないようです。 自動的に再接続します。",
"Cancel Retry": "再試行をキャンセル",
"Quit Symphony": "Symphonyを終了"
},
"No crashes available to share": "共有できるクラッシュはありません",
"No logs are available to share": "共有できるログはありません",
"Not Allowed": "許可されていませ。",
@ -107,11 +119,13 @@
"Screens": "画面",
"Select Application": "アプリケーションを選択",
"Select Screen": "画面を選択",
"Share": "共有"
"Share": "共有",
"Entire screen": "画面全体",
"Screen {number}": "画面 {number}"
},
"ScreenSharingIndicator": {
"You are sharing your screen on {appName}": "あなたは{appName}上であなたの画面を共有しています",
"Stop Sharing": "共有を停止",
"Stop sharing": "画面共有を停止",
"Hide": "非表示にする"
},
"ScreenSnippet": {
@ -121,6 +135,10 @@
"Pen": "ペン",
"Snipping Tool": "切り取りツール"
},
"AboutSymphony": {
"About Symphony": "Symphonyについて",
"Version": "バージョン"
},
"Select All": "すべてを選択",
"Services": "サービス",
"Show All": "すべてを表示",

View File

@ -1,5 +1,5 @@
import classNames from 'classnames';
import { DesktopCapturerSource, ipcRenderer } from 'electron';
import { ipcRenderer } from 'electron';
import * as React from 'react';
import { apiCmds, apiName } from '../../common/api-interface';
@ -10,11 +10,15 @@ const screenRegExp = new RegExp(/^Screen \d+$/gmi);
const SCREEN_PICKER_NAMESPACE = 'ScreenPicker';
interface IState {
sources: Electron.DesktopCapturerSource[];
selectedSource: DesktopCapturerSource | undefined;
sources: ICustomDesktopCapturerSource[];
selectedSource: ICustomDesktopCapturerSource | undefined;
selectedTab: tabs;
}
interface ICustomDesktopCapturerSource extends Electron.DesktopCapturerSource {
fileName: string | null;
}
type tabs = 'screens' | 'applications';
const enum keyCode {
@ -37,7 +41,7 @@ export default class ScreenPicker extends React.Component<{}, IState> {
private isScreensAvailable: boolean;
private isApplicationsAvailable: boolean;
private readonly eventHandlers = {
onSelect: (src: Electron.DesktopCapturerSource) => this.select(src),
onSelect: (src: ICustomDesktopCapturerSource) => this.select(src),
onToggle: (tab: tabs) => (_event: inputChangeEvent) => this.toggle(tab),
onClose: () => this.close(),
onSubmit: () => this.submit(),
@ -118,16 +122,24 @@ export default class ScreenPicker extends React.Component<{}, IState> {
*
* @param sources {DesktopCapturerSource}
*/
private renderSources(sources: Electron.DesktopCapturerSource[]): JSX.Element {
private renderSources(sources: ICustomDesktopCapturerSource[]): JSX.Element {
const screens: JSX.Element[] = [];
const applications: JSX.Element[] = [];
sources.map((source: Electron.DesktopCapturerSource) => {
sources.map((source: ICustomDesktopCapturerSource) => {
screenRegExp.lastIndex = 0;
const shouldHighlight: string = classNames(
'ScreenPicker-item-container',
{ 'ScreenPicker-selected': this.shouldHighlight(source.id) },
);
if (source.name === 'Entire screen' || screenRegExp.exec(source.name)) {
if (source.display_id !== '') {
source.fileName = 'fullscreen';
let sourceName;
if (source.name === 'Entire screen') {
sourceName = i18n.t('Entire screen', SCREEN_PICKER_NAMESPACE)();
} else {
const screenNumber = source.name.substr(7, source.name.length);
sourceName = i18n.t('Screen {number}', SCREEN_PICKER_NAMESPACE)({ number: screenNumber });
}
screens.push(
<div
className={shouldHighlight}
@ -136,10 +148,11 @@ export default class ScreenPicker extends React.Component<{}, IState> {
<div className='ScreenPicker-screen-section-box'>
<img className='ScreenPicker-img-wrapper' src={source.thumbnail as any} alt='thumbnail image'/>
</div>
<div className='ScreenPicker-screen-source-title'>{source.name}</div>
<div className='ScreenPicker-screen-source-title'>{sourceName}</div>
</div>,
);
} else {
source.fileName = null;
applications.push(
<div
className={shouldHighlight}
@ -261,7 +274,7 @@ export default class ScreenPicker extends React.Component<{}, IState> {
*
* @param selectedSource {DesktopCapturerSource}
*/
private select(selectedSource: DesktopCapturerSource): void {
private select(selectedSource: ICustomDesktopCapturerSource): void {
this.setState({ selectedSource });
}

View File

@ -0,0 +1,27 @@
import { ipcRenderer } from 'electron';
import { apiCmds, apiName, IScreenSnippet } from '../common/api-interface';
/**
* @deprecated user openScreenSnippet instead
*/
export class ScreenSnippetBcHandler {
/**
* capture method to support backward compatibility
*
* @deprecated user openScreenSnippet instead
*/
public capture(): Promise<IScreenSnippet> {
return new Promise((resolve, reject) => {
ipcRenderer.send(apiName.symphonyApi, {
cmd: apiCmds.openScreenSnippet,
});
ipcRenderer.on('screen-snippet-data', (_event: Event, arg: IScreenSnippet) => {
if (arg.type === 'ERROR') {
reject(arg);
return;
}
resolve(arg);
});
});
}
}

View File

@ -18,6 +18,7 @@ import {
import { i18n, LocaleType } from '../common/i18n-preload';
import { throttle } from '../common/utils';
import { getSource } from './desktop-capturer';
import { ScreenSnippetBcHandler } from './screen-snippet-bc-handler';
let isAltKey: boolean = false;
let isMenuOpen: boolean = false;
@ -254,6 +255,14 @@ export class SSFApi {
}
}
/**
* Expose old screen snippet api to support backward compatibility
*
* @deprecated
*/
// tslint:disable-next-line
public ScreenSnippet = ScreenSnippetBcHandler;
/**
* Allow user to capture portion of screen
*