diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/en_US.json b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/en.json
similarity index 100%
rename from extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/en_US.json
rename to extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/en.json
diff --git a/guacamole/pom.xml b/guacamole/pom.xml
index 566135988..93d32e0b9 100644
--- a/guacamole/pom.xml
+++ b/guacamole/pom.xml
@@ -168,6 +168,7 @@
lib/blob/blob.js
lib/filesaver/filesaver.js
lib/messageformat/messageformat.js
+ lib/messageformat/fr.js
lib/messageformat/ru.js
license.txt
guacamole-common-js/all.js
diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/extension/LanguageResourceService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/extension/LanguageResourceService.java
index 9710f0ddf..9955b5bf6 100644
--- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/extension/LanguageResourceService.java
+++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/extension/LanguageResourceService.java
@@ -74,12 +74,15 @@ public class LanguageResourceService {
* The regular expression to use for parsing the language key from the
* filename.
*/
- private static final Pattern LANGUAGE_KEY_PATTERN = Pattern.compile(".*/([a-z]+_[A-Z]+)\\.json");
+ private static final Pattern LANGUAGE_KEY_PATTERN = Pattern.compile(".*/([a-z]+(_[A-Z]+)?)\\.json");
/**
* Map of all language resources by language key. Language keys are
* language and country code pairs, separated by an underscore, like
- * "en_US".
+ * "en_US". The country code and underscore SHOULD be omitted in the case
+ * that only one dialect of that language is defined, or in the case of the
+ * most universal or well-supported of all supported dialects of that
+ * language.
*/
private final Map resources = new HashMap();
diff --git a/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js b/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js
index c73aa7770..3bc7543a2 100644
--- a/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js
+++ b/guacamole/src/main/webapp/app/index/config/indexTranslationConfig.js
@@ -30,7 +30,7 @@ angular.module('index').config(['$injector', function($injector) {
var preferenceServiceProvider = $injector.get('preferenceServiceProvider');
// Fallback to US English
- var fallbackLanguages = ['en_US'];
+ var fallbackLanguages = ['en'];
// Prefer chosen language, use fallback languages if necessary
$translateProvider.fallbackLanguage(fallbackLanguages);
diff --git a/guacamole/src/main/webapp/app/locale/services/translationLoader.js b/guacamole/src/main/webapp/app/locale/services/translationLoader.js
index b80699e42..7e2ca49bf 100644
--- a/guacamole/src/main/webapp/app/locale/services/translationLoader.js
+++ b/guacamole/src/main/webapp/app/locale/services/translationLoader.js
@@ -81,6 +81,31 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra
};
+ /**
+ * Given a valid language key, returns all possible legal variations of
+ * that key. Currently, this will be the given key and the given key
+ * without the country code. If the key has no country code, only the
+ * given key will be included in the returned array.
+ *
+ * @param {String} key
+ * The language key to generate variations of.
+ *
+ * @returns {String[]}
+ * All possible variations of the given language key.
+ */
+ var getKeyVariations = function getKeyVariations(key) {
+
+ var underscore = key.indexOf('_');
+
+ // If no underscore, only one possibility
+ if (underscore === -1)
+ return [key];
+
+ // Otherwise, include the lack of country code as an option
+ return [key, key.substr(0, underscore)];
+
+ };
+
/**
* Custom loader function for angular-translate which loads the desired
* language file dynamically via HTTP. If the language file cannot be
@@ -101,7 +126,7 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra
var requestedKey = options.key;
// Append fallback languages to requested language
- var keys = [requestedKey].concat(options.fallbackLanguages);
+ var keys = getKeyVariations(requestedKey).concat(options.fallbackLanguages);
// Satisfy the translation request
satisfyTranslation(translation, requestedKey, keys);
diff --git a/guacamole/src/main/webapp/app/settings/services/preferenceService.js b/guacamole/src/main/webapp/app/settings/services/preferenceService.js
index 3c20aa179..f02270d38 100644
--- a/guacamole/src/main/webapp/app/settings/services/preferenceService.js
+++ b/guacamole/src/main/webapp/app/settings/services/preferenceService.js
@@ -88,7 +88,10 @@ angular.module('settings').provider('preferenceService', function preferenceServ
var getDefaultLanguageKey = function getDefaultLanguageKey() {
// Pull browser language, falling back to US English
- var language = navigator.language || navigator.browserLanguage || 'en_US';
+ var language = (navigator.languages && navigator.languages[0])
+ || navigator.language
+ || navigator.browserLanguage
+ || 'en';
// Convert to format used internally
return language.replace(/-/g, '_');
diff --git a/guacamole/src/main/webapp/layouts/fr-fr-azerty.json b/guacamole/src/main/webapp/layouts/fr-fr-azerty.json
new file mode 100644
index 000000000..7bfea626b
--- /dev/null
+++ b/guacamole/src/main/webapp/layouts/fr-fr-azerty.json
@@ -0,0 +1,400 @@
+{
+
+ "language" : "fr_FR",
+ "type" : "azerty",
+ "width" : 22,
+
+ "keys" : {
+
+ "Back" : 65288,
+ "Tab" : 65289,
+ "Enter" : 65293,
+ "Esc" : 65307,
+ "Home" : 65360,
+ "PgUp" : 65365,
+ "PgDn" : 65366,
+ "End" : 65367,
+ "Ins" : 65379,
+ "F1" : 65470,
+ "F2" : 65471,
+ "F3" : 65472,
+ "F4" : 65473,
+ "F5" : 65474,
+ "F6" : 65475,
+ "F7" : 65476,
+ "F8" : 65477,
+ "F9" : 65478,
+ "F10" : 65479,
+ "F11" : 65480,
+ "F12" : 65481,
+ "Del" : 65535,
+
+ "Space" : " ",
+
+ "Left" : [{
+ "title" : "←",
+ "keysym" : 65361
+ }],
+ "Up" : [{
+ "title" : "↑",
+ "keysym" : 65362
+ }],
+ "Right" : [{
+ "title" : "→",
+ "keysym" : 65363
+ }],
+ "Down" : [{
+ "title" : "↓",
+ "keysym" : 65364
+ }],
+
+ "Menu" : [{
+ "title" : "Menu",
+ "modifier" : "super",
+ "keysym" : 65383
+ }],
+ "LShift" : [{
+ "title" : "Shift",
+ "modifier" : "shift",
+ "keysym" : 65505
+ }],
+ "RShift" : [{
+ "title" : "Shift",
+ "modifier" : "shift",
+ "keysym" : 65506
+ }],
+ "LCtrl" : [{
+ "title" : "Ctrl",
+ "modifier" : "control",
+ "keysym" : 65507
+ }],
+ "RCtrl" : [{
+ "title" : "Ctrl",
+ "modifier" : "control",
+ "keysym" : 65508
+ }],
+ "Caps" : [{
+ "title" : "Caps",
+ "modifier" : "caps",
+ "keysym" : 65509
+ }],
+ "LAlt" : [{
+ "title" : "Alt",
+ "modifier" : "alt",
+ "keysym" : 65513
+ }],
+ "RAlt" : [{
+ "title" : "Alt",
+ "modifier" : "alt",
+ "keysym" : 65514
+ }],
+ "Super" : [{
+ "title" : "Super",
+ "modifier" : "super",
+ "keysym" : 65515
+ }],
+
+ "`" : [
+ { "title" : "`", "requires" : [ ] },
+ { "title" : "~", "requires" : [ "shift" ] }
+ ],
+ "&" : [
+ { "title" : "&", "requires" : [ ] },
+ { "title" : "1", "requires" : [ "shift" ] }
+ ],
+ "é" : [
+ { "title" : "é", "requires" : [ ] },
+ { "title" : "2", "requires" : [ "shift" ] }
+ ],
+ "\"" : [
+ { "title" : "\"", "requires" : [ ] },
+ { "title" : "3", "requires" : [ "shift" ] }
+ ],
+ "'" : [
+ { "title" : "'", "requires" : [ ] },
+ { "title" : "4", "requires" : [ "shift" ] }
+ ],
+ "(" : [
+ { "title" : "(", "requires" : [ ] },
+ { "title" : "5", "requires" : [ "shift" ] }
+ ],
+ "-" : [
+ { "title" : "-", "requires" : [ ] },
+ { "title" : "6", "requires" : [ "shift" ] }
+ ],
+ "è" : [
+ { "title" : "è", "requires" : [ ] },
+ { "title" : "7", "requires" : [ "shift" ] }
+ ],
+ "_" : [
+ { "title" : "_", "requires" : [ ] },
+ { "title" : "8", "requires" : [ "shift" ] }
+ ],
+ "ç" : [
+ { "title" : "ç", "requires" : [ ] },
+ { "title" : "9", "requires" : [ "shift" ] }
+ ],
+ "à" : [
+ { "title" : "à", "requires" : [ ] },
+ { "title" : "0", "requires" : [ "shift" ] }
+ ],
+ ")" : [
+ { "title" : ")", "requires" : [ ] },
+ { "title" : "°", "requires" : [ "shift" ] }
+ ],
+ "=" : [
+ { "title" : "=", "requires" : [ ] },
+ { "title" : "+", "requires" : [ "shift" ] }
+ ],
+ "^" : [
+ { "title" : "^", "requires" : [ ] },
+ { "title" : "¨", "requires" : [ "shift" ] }
+ ],
+ "$" : [
+ { "title" : "$", "requires" : [ ] },
+ { "title" : "£", "requires" : [ "shift" ] }
+ ],
+ "/" : [
+ { "title" : "/", "requires" : [ ] },
+ { "title" : "?", "requires" : [ "shift" ] }
+ ],
+ "[" : [
+ { "title" : "[", "requires" : [ ] },
+ { "title" : "{", "requires" : [ "shift" ] }
+ ],
+ "]" : [
+ { "title" : "]", "requires" : [ ] },
+ { "title" : "}", "requires" : [ "shift" ] }
+ ],
+ "\\" : [
+ { "title" : "\\", "requires" : [ ] },
+ { "title" : "|", "requires" : [ "shift" ] }
+ ],
+ ";" : [
+ { "title" : ";", "requires" : [ ] },
+ { "title" : ":", "requires" : [ "shift" ] }
+ ],
+ "'" : [
+ { "title" : "'", "requires" : [ ] },
+ { "title" : "\"", "requires" : [ "shift" ] }
+ ],
+
+ "q" : [
+ { "title" : "q", "requires" : [ ] },
+ { "title" : "Q", "requires" : [ "caps" ] },
+ { "title" : "Q", "requires" : [ "shift" ] },
+ { "title" : "q", "requires" : [ "caps", "shift" ] }
+ ],
+ "w" : [
+ { "title" : "w", "requires" : [ ] },
+ { "title" : "W", "requires" : [ "caps" ] },
+ { "title" : "W", "requires" : [ "shift" ] },
+ { "title" : "w", "requires" : [ "caps", "shift" ] }
+ ],
+ "e" : [
+ { "title" : "e", "requires" : [ ] },
+ { "title" : "E", "requires" : [ "caps" ] },
+ { "title" : "E", "requires" : [ "shift" ] },
+ { "title" : "€", "requires" : [ "caps", "shift" ] }
+ ],
+ "r" : [
+ { "title" : "r", "requires" : [ ] },
+ { "title" : "R", "requires" : [ "caps" ] },
+ { "title" : "R", "requires" : [ "shift" ] },
+ { "title" : "r", "requires" : [ "caps", "shift" ] }
+ ],
+ "t" : [
+ { "title" : "t", "requires" : [ ] },
+ { "title" : "T", "requires" : [ "caps" ] },
+ { "title" : "T", "requires" : [ "shift" ] },
+ { "title" : "t", "requires" : [ "caps", "shift" ] }
+ ],
+ "y" : [
+ { "title" : "y", "requires" : [ ] },
+ { "title" : "Y", "requires" : [ "caps" ] },
+ { "title" : "Y", "requires" : [ "shift" ] },
+ { "title" : "y", "requires" : [ "caps", "shift" ] }
+ ],
+ "u" : [
+ { "title" : "u", "requires" : [ ] },
+ { "title" : "U", "requires" : [ "caps" ] },
+ { "title" : "U", "requires" : [ "shift" ] },
+ { "title" : "u", "requires" : [ "caps", "shift" ] }
+ ],
+ "i" : [
+ { "title" : "i", "requires" : [ ] },
+ { "title" : "I", "requires" : [ "caps" ] },
+ { "title" : "I", "requires" : [ "shift" ] },
+ { "title" : "i", "requires" : [ "caps", "shift" ] }
+ ],
+ "o" : [
+ { "title" : "o", "requires" : [ ] },
+ { "title" : "O", "requires" : [ "caps" ] },
+ { "title" : "O", "requires" : [ "shift" ] },
+ { "title" : "o", "requires" : [ "caps", "shift" ] }
+ ],
+ "p" : [
+ { "title" : "p", "requires" : [ ] },
+ { "title" : "P", "requires" : [ "caps" ] },
+ { "title" : "P", "requires" : [ "shift" ] },
+ { "title" : "p", "requires" : [ "caps", "shift" ] }
+ ],
+ "a" : [
+ { "title" : "a", "requires" : [ ] },
+ { "title" : "A", "requires" : [ "caps" ] },
+ { "title" : "A", "requires" : [ "shift" ] },
+ { "title" : "a", "requires" : [ "caps", "shift" ] }
+ ],
+ "s" : [
+ { "title" : "s", "requires" : [ ] },
+ { "title" : "S", "requires" : [ "caps" ] },
+ { "title" : "S", "requires" : [ "shift" ] },
+ { "title" : "s", "requires" : [ "caps", "shift" ] }
+ ],
+ "d" : [
+ { "title" : "d", "requires" : [ ] },
+ { "title" : "D", "requires" : [ "caps" ] },
+ { "title" : "D", "requires" : [ "shift" ] },
+ { "title" : "d", "requires" : [ "caps", "shift" ] }
+ ],
+ "f" : [
+ { "title" : "f", "requires" : [ ] },
+ { "title" : "F", "requires" : [ "caps" ] },
+ { "title" : "F", "requires" : [ "shift" ] },
+ { "title" : "f", "requires" : [ "caps", "shift" ] }
+ ],
+ "g" : [
+ { "title" : "g", "requires" : [ ] },
+ { "title" : "G", "requires" : [ "caps" ] },
+ { "title" : "G", "requires" : [ "shift" ] },
+ { "title" : "g", "requires" : [ "caps", "shift" ] }
+ ],
+ "h" : [
+ { "title" : "h", "requires" : [ ] },
+ { "title" : "H", "requires" : [ "caps" ] },
+ { "title" : "H", "requires" : [ "shift" ] },
+ { "title" : "h", "requires" : [ "caps", "shift" ] }
+ ],
+ "j" : [
+ { "title" : "j", "requires" : [ ] },
+ { "title" : "J", "requires" : [ "caps" ] },
+ { "title" : "J", "requires" : [ "shift" ] },
+ { "title" : "j", "requires" : [ "caps", "shift" ] }
+ ],
+ "k" : [
+ { "title" : "k", "requires" : [ ] },
+ { "title" : "K", "requires" : [ "caps" ] },
+ { "title" : "K", "requires" : [ "shift" ] },
+ { "title" : "k", "requires" : [ "caps", "shift" ] }
+ ],
+ "l" : [
+ { "title" : "l", "requires" : [ ] },
+ { "title" : "L", "requires" : [ "caps" ] },
+ { "title" : "L", "requires" : [ "shift" ] },
+ { "title" : "l", "requires" : [ "caps", "shift" ] }
+ ],
+ "z" : [
+ { "title" : "z", "requires" : [ ] },
+ { "title" : "Z", "requires" : [ "caps" ] },
+ { "title" : "Z", "requires" : [ "shift" ] },
+ { "title" : "z", "requires" : [ "caps", "shift" ] }
+ ],
+ "x" : [
+ { "title" : "x", "requires" : [ ] },
+ { "title" : "X", "requires" : [ "caps" ] },
+ { "title" : "X", "requires" : [ "shift" ] },
+ { "title" : "x", "requires" : [ "caps", "shift" ] }
+ ],
+ "c" : [
+ { "title" : "c", "requires" : [ ] },
+ { "title" : "C", "requires" : [ "caps" ] },
+ { "title" : "C", "requires" : [ "shift" ] },
+ { "title" : "c", "requires" : [ "caps", "shift" ] }
+ ],
+ "v" : [
+ { "title" : "v", "requires" : [ ] },
+ { "title" : "V", "requires" : [ "caps" ] },
+ { "title" : "V", "requires" : [ "shift" ] },
+ { "title" : "v", "requires" : [ "caps", "shift" ] }
+ ],
+ "b" : [
+ { "title" : "b", "requires" : [ ] },
+ { "title" : "B", "requires" : [ "caps" ] },
+ { "title" : "B", "requires" : [ "shift" ] },
+ { "title" : "b", "requires" : [ "caps", "shift" ] }
+ ],
+ "n" : [
+ { "title" : "n", "requires" : [ ] },
+ { "title" : "N", "requires" : [ "caps" ] },
+ { "title" : "N", "requires" : [ "shift" ] },
+ { "title" : "n", "requires" : [ "caps", "shift" ] }
+ ],
+ "m" : [
+ { "title" : "m", "requires" : [ ] },
+ { "title" : "M", "requires" : [ "caps" ] },
+ { "title" : "M", "requires" : [ "shift" ] },
+ { "title" : "m", "requires" : [ "caps", "shift" ] }
+ ]
+
+ },
+
+ "layout" : [
+
+ [ "Esc", 0.7, "F1", "F2", "F3", "F4",
+ 0.7, "F5", "F6", "F7", "F8",
+ 0.7, "F9", "F10", "F11", "F12" ],
+
+ [ 0.1 ],
+
+ {
+ "main" : {
+ "alpha" : [
+
+ [ "`", "&", "é", "\"", "'", "(", "-", "è", "_", "ç", "à", ")", "=", "Back" ],
+ [ "Tab", "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", "\\" ],
+ [ "Caps", "q", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "Enter" ],
+ [ "LShift", "w", "x", "c", "v", "b", "n", "m", ",", ".", "/", "RShift" ],
+ [ "LCtrl", "Super", "LAlt", "Space", "RAlt", "Menu", "RCtrl" ]
+
+ ],
+
+ "movement" : [
+ [ "Ins", "Home", "PgUp" ],
+ [ "Del", "End", "PgDn" ],
+ [ 1 ],
+ [ "Up" ],
+ [ "Left", "Down", "Right" ]
+ ]
+ }
+ }
+
+ ],
+
+ "keyWidths" : {
+
+ "Back" : 2,
+ "Tab" : 1.5,
+ "\\" : 1.5,
+ "Caps" : 1.85,
+ "Enter" : 2.25,
+ "LShift" : 2.1,
+ "RShift" : 3.1,
+
+ "LCtrl" : 1.6,
+ "Super" : 1.6,
+ "LAlt" : 1.6,
+ "Space" : 6.1,
+ "RAlt" : 1.6,
+ "Menu" : 1.6,
+ "RCtrl" : 1.6,
+
+ "Ins" : 1.6,
+ "Home" : 1.6,
+ "PgUp" : 1.6,
+ "Del" : 1.6,
+ "End" : 1.6,
+ "PgDn" : 1.6
+
+ }
+
+}
diff --git a/guacamole/src/main/webapp/lib/messageformat/fr.js b/guacamole/src/main/webapp/lib/messageformat/fr.js
new file mode 100644
index 000000000..e562c3f8c
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/fr.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.fr = function (n) {
+ if (n >= 0 && n < 2) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/translations/en_US.json b/guacamole/src/main/webapp/translations/en.json
similarity index 100%
rename from guacamole/src/main/webapp/translations/en_US.json
rename to guacamole/src/main/webapp/translations/en.json
diff --git a/guacamole/src/main/webapp/translations/fr.json b/guacamole/src/main/webapp/translations/fr.json
new file mode 100644
index 000000000..909514451
--- /dev/null
+++ b/guacamole/src/main/webapp/translations/fr.json
@@ -0,0 +1,523 @@
+{
+
+ "NAME" : "Français",
+
+ "APP" : {
+
+ "ACTION_ACKNOWLEDGE" : "Confirmer",
+ "ACTION_CANCEL" : "Annuler",
+ "ACTION_CLONE" : "Cloner",
+ "ACTION_DELETE" : "Supprimer",
+ "ACTION_DELETE_SESSIONS" : "Fermer les Sessions",
+ "ACTION_LOGIN" : "Se connecter",
+ "ACTION_LOGOUT" : "Se déconnecter",
+ "ACTION_MANAGE_CONNECTIONS" : "Connexions",
+ "ACTION_MANAGE_PREFERENCES" : "Préférences",
+ "ACTION_MANAGE_SETTINGS" : "Paramètres",
+ "ACTION_MANAGE_SESSIONS" : "Sessions Actives",
+ "ACTION_MANAGE_USERS" : "Utilisateurs",
+ "ACTION_NAVIGATE_BACK" : "Retour",
+ "ACTION_NAVIGATE_HOME" : "Accueil",
+ "ACTION_SAVE" : "Enregistrer",
+ "ACTION_UPDATE_PASSWORD" : "Mettre à jour mot de passe",
+
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "ERROR_PASSWORD_MISMATCH" : "Le mot de passe ne correspond pas.",
+
+ "FIELD_HEADER_PASSWORD" : "Mot de passe:",
+ "FIELD_HEADER_PASSWORD_AGAIN" : "Répéter mot de passe:",
+
+ "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss",
+
+ "INFO_ACTIVE_USER_COUNT" : "Actuellement utilisé par {USERS} {USERS, plural, one{utilisateur} other{utilisateurs}}.",
+
+ "NAME" : "Guacamole ${project.version}"
+
+ },
+
+ "CLIENT" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Vider transferts terminés",
+ "ACTION_DISCONNECT" : "Déconnecter",
+ "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME",
+ "ACTION_RECONNECT" : "Reconnecter",
+ "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE",
+ "ACTION_UPLOAD_FILES" : "Envoyer Fichiers",
+
+ "DIALOG_HEADER_CONNECTING" : "Connexion",
+ "DIALOG_HEADER_CONNECTION_ERROR" : "Erreur de connexion",
+ "DIALOG_HEADER_DISCONNECTED" : "Déconnecté",
+
+ "ERROR_CLIENT_201" : "Cette connexion a été fermée car le serveur est occupé. Merci d'attendre quelques minutes et de réessayer.",
+ "ERROR_CLIENT_202" : "Le serveur Guacamole a fermé cette connexion car l'ordinateur distant a mis trop de temps à répondre. Merci de réessayer ou de contacter l'administrateur.",
+ "ERROR_CLIENT_203" : "Le serveur distant a rencontré une erreur et a fermé la connexion. Merci de réessayer ou de contacter l'administrateur.",
+ "ERROR_CLIENT_205" : "Cette connexion a été fermée car elle est en conflit avec une autre. Merci de réessayer plus tard.",
+ "ERROR_CLIENT_301" : "Connexion echouée. Merci d'essayer encore.",
+ "ERROR_CLIENT_303" : "Vous ne disposez pas des permissions pour accéder à cette connexion. Si vous avez besoin de ces droits demandez à l'administrateur qu'il vous ajoute à la lise des utilisateurs autorisés, ou de vérifier les paramètres système.",
+ "ERROR_CLIENT_308" : "Le serveur Guacamole a fermé la connexion car il n'y avait pas de réponse de votre navigateur Internet et qu'il l'a considéré comme déconnecté. Cela se produit à cause de problèmes réseaux (mauvais signal Wi-Fi ou réseau très lent). Merci de vérifier votre réseau et de réessayer.",
+ "ERROR_CLIENT_31D" : "Le serveur Guacamole interdit les connexions car vous avez dépassé la limite de connexion simultanée par utilisateur. Merci de fermer une ou plusieurs connexions et de reéssayer.",
+ "ERROR_CLIENT_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.",
+ "ERROR_TUNNEL_201" : "Le serveur Guacamole a rejeté cette tentative de connexion car il y a trop de connexions ouvertes. Merci d'attendre quelques minutes et de réessayer.",
+ "ERROR_TUNNEL_202" : "La connexion a été fermée car le serveur met trop de temps à répondre. En général, il s'agit de problème réseau comme un réseau Wi-Fi trop lent ou un réseau très lent. Merci de vérifier votre réseau ou de contacter l'administrateur.",
+ "ERROR_TUNNEL_203" : "Le serveur a rencontré une erreur et a fermé la connexion. Merci de réessayer ou de contacter l'administrateur.",
+ "ERROR_TUNNEL_204" : "Le connexion demandée n'existe pas. Merci de vérifier le nom et de réessayer.",
+ "ERROR_TUNNEL_205" : "Cette connexion est actuellement utilisée et les connexions multiples ne sont pas autorisées. Merci de réeassyer plus tard.",
+ "ERROR_TUNNEL_301" : "Vous n'avez pas le droit d'accéder à cette connexion car vous n'êtes pas connecté. Merci de vous connecter et de réessayer.",
+ "ERROR_TUNNEL_303" : "Vous n'avez pas le droit d'accéder à cette connexion. Si vous souhaitez y avoir accès, merci de demander à l'administrateur de vous ajouter dans la liste des utilisateurs autorisés ou de vérifier les paramètre système.",
+ "ERROR_TUNNEL_308" : "Le serveur Guacamole a fermé la connexion car il n'y avait pas de réponse de votre navigateur Internet et qu'il l'a considéré comme déconnecté. Cela se produit à cause de problèmes réseaux (mauvais signal Wi-Fi ou réseau très lent). Merci de vérifier votre réseau et de réessayer.",
+ "ERROR_TUNNEL_31D" : "Le serveur Guacamole interdit cette connexion car vous avez dépassé la limite de connexions simultanées par utilisateur. Merci de fermer une ou plusieurs connexions et de reéssayer.",
+ "ERROR_TUNNEL_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.",
+
+ "ERROR_UPLOAD_100" : "Le transfert de fichier n'est pas activé ou supporté. Merci de contacter l'administrateur ou de vérifier les journaux système.",
+ "ERROR_UPLOAD_201" : "Trop de fichiers sont transférés. Merci d'attendre que les transferts en cours se terminent et réessayer.",
+ "ERROR_UPLOAD_202" : "Le fichier ne peut être transféré car le serveur distant met trop de temps à répondre. Merci de réessayer ou de contacter votre administrateur.",
+ "ERROR_UPLOAD_203" : "Le serveur distant a rencontré une erreur durant le transfert. Merci de reéssayer et de contacter l'administrateur.",
+ "ERROR_UPLOAD_204" : "La destination du transfert de fichier n'existe pas. Merci de vérifier que la destination existe et de réessayer.",
+ "ERROR_UPLOAD_205" : "La destination du transfert de fichier est actuellement verouillée. Merci de patienter la fin des tâches en cours et de réessayer.",
+ "ERROR_UPLOAD_301" : "Vous n'avez pas la permission d'envoyer ce fichier car vous n'êtes pas connecté. Merci de vous connecter et de réessayer.",
+ "ERROR_UPLOAD_303" : "Vous n'avez pas la permission d'envoyer le fichier. Si vous avez besoin de cet accès, merci de vérifier vos paramètres system ou de valider avec votre administrateur.",
+ "ERROR_UPLOAD_308" : "Le transfert de fichier s'est bloqué. En général, il s'agit d'un problème réseau comme un signal Wi-Fi faible ou un réseau très lent. Merci de vérifier votre réseau et de réessayer.",
+ "ERROR_UPLOAD_31D" : "Trop de fichiers sont actuellement transférés. Merci d'attendre que les transferts en cours soient terminés et de réessayer plus tard.",
+ "ERROR_UPLOAD_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.",
+
+ "HELP_CLIPBOARD" : "Texte copié/coupé dans Guacamole apparaîtra ici. Changer le texte ci dessous affectera le presse-papiers distant.",
+ "HELP_INPUT_METHOD_NONE" : "Aucune méthode de saisie utilisée. Clavier accepté depuis un clavier physique connecté.",
+ "HELP_INPUT_METHOD_OSK" : "Affiche et utilise la saisie du clavier virtuel intégré dans Guacamole. Le clavier virtuel permet d'utiliser des combinaisons de touches autrement impossibles (comme Ctrl-Alt-Supp).",
+
+ "HELP_INPUT_METHOD_TEXT" : "Affiche et utilise la saisie du clavier virtuel intégré dans Guacamole. Ceci est nécessaire pou les périphériques mobiles ne disposant pas de clavier physique.",
+
+ "HELP_MOUSE_MODE" : "Détermine comment la souris distante se comporte selon les événements.",
+ "HELP_MOUSE_MODE_ABSOLUTE" : "Appuyer pour cliquer. Le clique s'effectue à l'endroit de l'appui.",
+ "HELP_MOUSE_MODE_RELATIVE" : "Glisser pour déplacer le pointeur de la souris et appuyer opur cliquer. Le clique s'effectue à l'endroit du pointeur.",
+
+ "INFO_NO_FILE_TRANSFERS" : "Pas de transfert de fichier.",
+
+ "NAME_INPUT_METHOD_NONE" : "Aucune",
+ "NAME_INPUT_METHOD_OSK" : "Clavier virtuel",
+ "NAME_INPUT_METHOD_TEXT" : "Clavier",
+ "NAME_KEY_CTRL" : "Ctrl",
+ "NAME_KEY_ALT" : "Alt",
+ "NAME_KEY_ESC" : "Echap",
+ "NAME_KEY_TAB" : "Tab",
+ "NAME_MOUSE_MODE_ABSOLUTE" : "Écran tactile",
+ "NAME_MOUSE_MODE_RELATIVE" : "Pavé tactile",
+
+ "SECTION_HEADER_CLIPBOARD" : "Presse-papiers",
+ "SECTION_HEADER_DISPLAY" : "Affichage",
+ "SECTION_HEADER_FILE_TRANSFERS" : "Transfers de fichiers",
+ "SECTION_HEADER_INPUT_METHOD" : "Méthode de saisie",
+ "SECTION_HEADER_MOUSE_MODE" : "Mode émulation souris",
+
+ "TEXT_ZOOM_AUTO_FIT" : "Adapté à la fenêtre du navigateur",
+ "TEXT_CLIENT_STATUS_IDLE" : "Inactif.",
+ "TEXT_CLIENT_STATUS_CONNECTING" : "Connexion à Guacamole...",
+ "TEXT_CLIENT_STATUS_DISCONNECTED" : "Vous avez été deconnecté.",
+ "TEXT_CLIENT_STATUS_WAITING" : "Connecté à Guacamole. En attente de réponse...",
+ "TEXT_RECONNECT_COUNTDOWN" : "Reconnexion dans {REMAINING} {REMAINING, plural, one{seconde} other{secondes}}...",
+ "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}",
+
+ "URL_OSK_LAYOUT" : "layouts/fr-fr-azerty.json"
+
+ },
+
+ "FORM" : {
+
+ "HELP_SHOW_PASSWORD" : "Cliquer pour afficher le mot de passe",
+ "HELP_HIDE_PASSWORD" : "Cliquer pour masquer le mot de passe"
+
+ },
+
+ "HOME" : {
+
+ "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
+
+ "INFO_NO_RECENT_CONNECTIONS" : "Pas de connexion récente.",
+
+ "PASSWORD_CHANGED" : "Mot de passe changé.",
+
+ "SECTION_HEADER_ALL_CONNECTIONS" : "Toutes les Connexions",
+ "SECTION_HEADER_RECENT_CONNECTIONS" : "Connexions récentes"
+
+ },
+
+ "LOGIN": {
+
+ "ACTION_LOGIN" : "@:APP.ACTION_LOGIN",
+
+ "ERROR_INVALID_LOGIN" : "Identifiant Incorrect",
+
+ "FIELD_HEADER_USERNAME" : "Identifiant",
+ "FIELD_HEADER_PASSWORD" : "Mot de passe"
+
+ },
+
+ "MANAGE_CONNECTION" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
+ "ACTION_CLONE" : "@:APP.ACTION_CLONE",
+ "ACTION_DELETE" : "@:APP.ACTION_DELETE",
+ "ACTION_SAVE" : "@:APP.ACTION_SAVE",
+
+ "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Connexion",
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "FIELD_HEADER_LOCATION" : "Lieu:",
+ "FIELD_HEADER_NAME" : "Nom:",
+ "FIELD_HEADER_PROTOCOL" : "Protocole:",
+
+ "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE",
+
+ "INFO_CONNECTION_DURATION_UNKNOWN" : "--",
+ "INFO_CONNECTION_ACTIVE_NOW" : "Active",
+ "INFO_CONNECTION_NOT_USED" : "Cette connexion n'a jamais été utilisée.",
+
+ "SECTION_HEADER_EDIT_CONNECTION" : "Modifier Connexion",
+ "SECTION_HEADER_HISTORY" : "Historique d'utilisation",
+ "SECTION_HEADER_PARAMETERS" : "Paramètres",
+
+ "TABLE_HEADER_HISTORY_USERNAME" : "Identifiant",
+ "TABLE_HEADER_HISTORY_START" : "Ouverture",
+ "TABLE_HEADER_HISTORY_DURATION" : "Durée",
+
+ "TEXT_CONFIRM_DELETE" : "Les connexions ne pourront être restaurées une fois supprimées. Êtes-vous certains de vouloir supprimer cette connexion ?",
+
+ "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{seconde} other{secondes}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{heure} other{heures}}} day{{VALUE, plural, one{jour} other{jours}}} other{}}"
+
+ },
+
+ "MANAGE_CONNECTION_GROUP" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
+ "ACTION_DELETE" : "@:APP.ACTION_DELETE",
+ "ACTION_SAVE" : "@:APP.ACTION_SAVE",
+
+ "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Groupe de Connexion",
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "FIELD_HEADER_LOCATION" : "Lieu:",
+ "FIELD_HEADER_NAME" : "Nom:",
+ "FIELD_HEADER_TYPE" : "Type:",
+
+ "NAME_TYPE_BALANCING" : "Répartition",
+ "NAME_TYPE_ORGANIZATIONAL" : "Organizationel",
+
+ "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Modifier Groupe de Connexion",
+
+ "TEXT_CONFIRM_DELETE" : "Les groupes de connexions ne pourront être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer ce groupe de connexion ?"
+
+ },
+
+ "MANAGE_USER" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
+ "ACTION_DELETE" : "@:APP.ACTION_DELETE",
+ "ACTION_SAVE" : "@:APP.ACTION_SAVE",
+
+ "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Utilisateur",
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH",
+
+ "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administer system:",
+ "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Modifier son propre mot de passe:",
+ "FIELD_HEADER_CREATE_NEW_USERS" : "Créer nouveaux utilisateurs:",
+ "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Créer nouvelles connexions:",
+ "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Créer nouveaux groupes de connexion:",
+ "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD",
+ "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN",
+ "FIELD_HEADER_USERNAME" : "Identifiant:",
+
+ "SECTION_HEADER_CONNECTIONS" : "Connexions",
+ "SECTION_HEADER_EDIT_USER" : "Modifier Utilisateur",
+ "SECTION_HEADER_PERMISSIONS" : "Permissions",
+
+ "TEXT_CONFIRM_DELETE" : "Les utilisateurs ne pourront être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer cet utilisateur?"
+
+ },
+
+ "PROTOCOL_RDP" : {
+
+ "FIELD_HEADER_COLOR_DEPTH" : "Qualité couleur:",
+ "FIELD_HEADER_CONSOLE" : "Console Administrateur:",
+ "FIELD_HEADER_CONSOLE_AUDIO" : "Support son en console:",
+ "FIELD_HEADER_CLIENT_NAME" : "Nom du Client:",
+ "FIELD_HEADER_DISABLE_AUDIO" : "Désactiver son:",
+ "FIELD_HEADER_DISABLE_AUTH" : "Désactiver authentification:",
+ "FIELD_HEADER_DOMAIN" : "Nom du domaine:",
+ "FIELD_HEADER_DPI" : "Résolution (ppp):",
+ "FIELD_HEADER_DRIVE_PATH" : "Chemin du lecteur:",
+ "FIELD_HEADER_ENABLE_DRIVE" : "Activer lecteur réseau:",
+ "FIELD_HEADER_ENABLE_PRINTING" : "Activer imprimante:",
+ "FIELD_HEADER_HEIGHT" : "Hauteur:",
+ "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:",
+ "FIELD_HEADER_IGNORE_CERT" : "Ignorer le certificat du serveur:",
+ "FIELD_HEADER_INITIAL_PROGRAM" : "Programme de démarrage:",
+ "FIELD_HEADER_PASSWORD" : "Mot de passe:",
+ "FIELD_HEADER_PORT" : "Port:",
+ "FIELD_HEADER_REMOTE_APP_ARGS" : "Paramètres:",
+ "FIELD_HEADER_REMOTE_APP_DIR" : "Répertoire de travail:",
+ "FIELD_HEADER_REMOTE_APP" : "Programme:",
+ "FIELD_HEADER_SECURITY" : "Mode de Sécurité:",
+ "FIELD_HEADER_SERVER_LAYOUT" : "Agencement clavier:",
+ "FIELD_HEADER_USERNAME" : "Identifiant:",
+ "FIELD_HEADER_WIDTH" : "Largeur:",
+ "FIELD_HEADER_STATIC_CHANNELS" : "Static channel names:",
+
+ "FIELD_OPTION_COLOR_DEPTH_16" : "Faibles couleurs (16-bit)",
+ "FIELD_OPTION_COLOR_DEPTH_24" : "Vraies couleurs (24-bit)",
+ "FIELD_OPTION_COLOR_DEPTH_32" : "Vraies couleurs (32-bit)",
+ "FIELD_OPTION_COLOR_DEPTH_8" : "256 couleurs",
+ "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "",
+
+ "FIELD_OPTION_SECURITY_ANY" : "Aucune",
+ "FIELD_OPTION_SECURITY_EMPTY" : "",
+ "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)",
+ "FIELD_OPTION_SECURITY_RDP" : "Chiffrement RDP",
+ "FIELD_OPTION_SECURITY_TLS" : "Chiffrement TLS",
+
+ "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)",
+ "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "",
+ "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)",
+ "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode",
+ "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)",
+ "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)",
+ "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)",
+
+ "NAME" : "RDP",
+
+ "SECTION_HEADER_AUTHENTICATION" : "Authentification",
+ "SECTION_HEADER_BASIC_PARAMETERS" : "Paramètres de base",
+ "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirection Périphérique",
+ "SECTION_HEADER_DISPLAY" : "Affichage",
+ "SECTION_HEADER_NETWORK" : "Réseau",
+ "SECTION_HEADER_REMOTEAPP" : "RemoteApp"
+
+ },
+
+ "PROTOCOL_SSH" : {
+
+ "FIELD_HEADER_FONT_NAME" : "Nom police:",
+ "FIELD_HEADER_FONT_SIZE" : "Taille police:",
+ "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:",
+ "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:",
+ "FIELD_HEADER_USERNAME" : "Identifiant:",
+ "FIELD_HEADER_PASSWORD" : "Mot de passe:",
+ "FIELD_HEADER_PASSPHRASE" : "Phrase secrète:",
+ "FIELD_HEADER_PORT" : "Port:",
+ "FIELD_HEADER_PRIVATE_KEY" : "Clé privée:",
+
+ "FIELD_OPTION_FONT_SIZE_8" : "8",
+ "FIELD_OPTION_FONT_SIZE_9" : "9",
+ "FIELD_OPTION_FONT_SIZE_10" : "10",
+ "FIELD_OPTION_FONT_SIZE_11" : "11",
+ "FIELD_OPTION_FONT_SIZE_12" : "12",
+ "FIELD_OPTION_FONT_SIZE_14" : "14",
+ "FIELD_OPTION_FONT_SIZE_18" : "18",
+ "FIELD_OPTION_FONT_SIZE_24" : "24",
+ "FIELD_OPTION_FONT_SIZE_30" : "30",
+ "FIELD_OPTION_FONT_SIZE_36" : "36",
+ "FIELD_OPTION_FONT_SIZE_48" : "48",
+ "FIELD_OPTION_FONT_SIZE_60" : "60",
+ "FIELD_OPTION_FONT_SIZE_72" : "72",
+ "FIELD_OPTION_FONT_SIZE_96" : "96",
+ "FIELD_OPTION_FONT_SIZE_EMPTY" : "",
+
+ "NAME" : "SSH",
+
+ "SECTION_HEADER_AUTHENTICATION" : "Authentification",
+ "SECTION_HEADER_DISPLAY" : "Affichage",
+ "SECTION_HEADER_NETWORK" : "Réseau",
+ "SECTION_HEADER_SFTP" : "SFTP"
+
+ },
+
+ "PROTOCOL_TELNET" : {
+
+ "FIELD_HEADER_FONT_NAME" : "Nom police:",
+ "FIELD_HEADER_FONT_SIZE" : "Taille police:",
+ "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:",
+ "FIELD_HEADER_USERNAME" : "Identifiant:",
+ "FIELD_HEADER_PASSWORD" : "Mot de passe:",
+ "FIELD_HEADER_PASSWORD_REGEX" : "Expression régulière Mot de passe:",
+ "FIELD_HEADER_PORT" : "Port:",
+
+ "FIELD_OPTION_FONT_SIZE_8" : "8",
+ "FIELD_OPTION_FONT_SIZE_9" : "9",
+ "FIELD_OPTION_FONT_SIZE_10" : "10",
+ "FIELD_OPTION_FONT_SIZE_11" : "11",
+ "FIELD_OPTION_FONT_SIZE_12" : "12",
+ "FIELD_OPTION_FONT_SIZE_14" : "14",
+ "FIELD_OPTION_FONT_SIZE_18" : "18",
+ "FIELD_OPTION_FONT_SIZE_24" : "24",
+ "FIELD_OPTION_FONT_SIZE_30" : "30",
+ "FIELD_OPTION_FONT_SIZE_36" : "36",
+ "FIELD_OPTION_FONT_SIZE_48" : "48",
+ "FIELD_OPTION_FONT_SIZE_60" : "60",
+ "FIELD_OPTION_FONT_SIZE_72" : "72",
+ "FIELD_OPTION_FONT_SIZE_96" : "96",
+ "FIELD_OPTION_FONT_SIZE_EMPTY" : "",
+
+ "NAME" : "Telnet",
+
+ "SECTION_HEADER_AUTHENTICATION" : "Authentification",
+ "SECTION_HEADER_DISPLAY" : "Affichage",
+ "SECTION_HEADER_NETWORK" : "Réseau"
+
+ },
+
+ "PROTOCOL_VNC" : {
+
+ "FIELD_HEADER_AUDIO_SERVERNAME" : "Serveur de son:",
+ "FIELD_HEADER_COLOR_DEPTH" : "Qualité couleur:",
+ "FIELD_HEADER_CURSOR" : "Curseur:",
+ "FIELD_HEADER_DEST_HOST" : "Hôte distant:",
+ "FIELD_HEADER_DEST_PORT" : "Port distant:",
+ "FIELD_HEADER_ENABLE_AUDIO" : "Activer son:",
+ "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:",
+ "FIELD_HEADER_PASSWORD" : "Mot de passe:",
+ "FIELD_HEADER_PORT" : "Port:",
+ "FIELD_HEADER_READ_ONLY" : "Lecture seule:",
+ "FIELD_HEADER_SWAP_RED_BLUE" : "Swap red/blue components:",
+
+ "FIELD_OPTION_COLOR_DEPTH_8" : "256 couleurs",
+ "FIELD_OPTION_COLOR_DEPTH_16" : "Faibles couleurs (16-bit)",
+ "FIELD_OPTION_COLOR_DEPTH_24" : "Vraies couleurs (24-bit)",
+ "FIELD_OPTION_COLOR_DEPTH_32" : "Vraies couleurs (32-bit)",
+ "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "",
+
+ "FIELD_OPTION_CURSOR_EMPTY" : "",
+ "FIELD_OPTION_CURSOR_LOCAL" : "Local",
+ "FIELD_OPTION_CURSOR_REMOTE" : "Distant",
+
+ "NAME" : "VNC",
+
+ "SECTION_HEADER_AUDIO" : "Son",
+ "SECTION_HEADER_AUTHENTICATION" : "Authentification",
+ "SECTION_HEADER_DISPLAY" : "Affichage",
+ "SECTION_HEADER_NETWORK" : "Réseau",
+ "SECTION_HEADER_REPEATER" : "Répéteur VNC"
+
+ },
+
+ "SETTINGS" : {
+
+ "SECTION_HEADER_SETTINGS" : "Paramètres"
+
+ },
+
+ "SETTINGS_CONNECTIONS" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_NEW_CONNECTION" : "Nouvelle Connexion",
+ "ACTION_NEW_CONNECTION_GROUP" : "Nouveau Groupe",
+
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "HELP_CONNECTIONS" : "Cliquer ou appuyer sur une connexion en dessous pour la gérer. Selon vos permissions, les connexions peuvent être ajoutées, supprimées, leur propriétés (protocole, nom d'hôte, port, etc) changées.",
+
+ "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
+
+ "SECTION_HEADER_CONNECTIONS" : "Connexions"
+
+ },
+
+ "SETTINGS_PREFERENCES" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
+ "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD",
+
+ "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
+
+ "ERROR_PASSWORD_BLANK" : "Votre mot de passe ne peut être vide.",
+ "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH",
+
+ "FIELD_HEADER_LANGUAGE" : "Langue affichée:",
+ "FIELD_HEADER_PASSWORD" : "Mot de passe:",
+ "FIELD_HEADER_PASSWORD_OLD" : "Mot de passe actuel:",
+ "FIELD_HEADER_PASSWORD_NEW" : "Nouveau mot de passe:",
+ "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmer nouveau mot de passe:",
+ "FIELD_HEADER_USERNAME" : "Identifiant:",
+
+ "HELP_DEFAULT_INPUT_METHOD" : "La méthode de saisie par défaut détermine comme les événements clavier sont reçus par Guacamole. Modifier ces paramètres peut être nécessaire pour l'utilisateur des smartphone/tablette. Ces paramètres peuvent être écrasés pour chaque connexion dans le menu de Guacamole.",
+ "HELP_DEFAULT_MOUSE_MODE" : "Le mode d'émulation de la souris détermine comment la souris distante se comportera dans les nouvelles connexions. Ce paramètre peut être définit dans chaque connexion dans le menu de Guacamole.",
+ "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE",
+ "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK",
+ "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT",
+ "HELP_LANGUAGE" : "Selectionner une langue différente pour changer tout le texte dans Guacamole. Les choix dépendent des langues qui sont installées.",
+ "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE",
+ "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE",
+ "HELP_UPDATE_PASSWORD" : "Si vous souhaitez changer votre mot de passe, entrer vos mot de passe actuel et le nouveau mot de passe en dessous puis cliquer sur \"Mettre à jour Mot de passe\". Le changement prendra effet immédiatement.",
+
+
+ "INFO_PASSWORD_CHANGED" : "Mot de passe changé.",
+
+ "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE",
+ "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK",
+ "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT",
+
+ "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Méthode de saisie par défaut",
+ "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Mode émulation souris par défaut",
+ "SECTION_HEADER_UPDATE_PASSWORD" : "Modifier Mot de passe"
+
+ },
+
+ "SETTINGS_USERS" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_NEW_USER" : "Nouvel Utilisateur",
+
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "HELP_USERS" : "Cliquer ou appuyer sur un utilisateur en dessous pour le gérer. Selon vos permissions, les utilisateurs peuvent être ajoutés, supprimés, leur mot de passe changé.",
+
+ "SECTION_HEADER_USERS" : "Utilisateur"
+
+ },
+
+ "SETTINGS_SESSIONS" : {
+
+ "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+ "ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
+ "ACTION_DELETE" : "Fermer Sessions",
+
+ "DIALOG_HEADER_CONFIRM_DELETE" : "Fermer Sessions",
+ "DIALOG_HEADER_ERROR" : "Erreur",
+
+ "FIELD_PLACEHOLDER_FILTER" : "Filtre",
+
+ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE",
+
+ "HELP_SESSIONS" : "Toutes les connexions actives Guacamole sont listées ici. Si vous souhaitez en fermer une ou plusieurs, sélectionner les et cliquer sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.",
+
+ "INFO_NO_SESSIONS" : "Pas de session ouverte",
+
+ "SECTION_HEADER_SESSIONS" : "Sessions Ouvertes",
+
+ "TABLE_HEADER_SESSION_USERNAME" : "Identifiant",
+ "TABLE_HEADER_SESSION_STARTDATE" : "Ouvert depuis",
+ "TABLE_HEADER_SESSION_REMOTEHOST" : "Hôte distant",
+ "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de connexion",
+
+ "TEXT_CONFIRM_DELETE" : "Êtes-vous certains de vouloir fermer toutes les connexions sélectionnées ? Les utilisateurs utilisant ces sessions seront immédiatement déconnectés."
+
+ },
+
+ "USER_MENU" : {
+
+ "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT",
+ "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS",
+ "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES",
+ "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS",
+ "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS",
+ "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS",
+ "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME"
+
+ }
+
+}
diff --git a/guacamole/src/main/webapp/translations/ru_RU.json b/guacamole/src/main/webapp/translations/ru.json
similarity index 100%
rename from guacamole/src/main/webapp/translations/ru_RU.json
rename to guacamole/src/main/webapp/translations/ru.json