Add French localization

This commit is contained in:
jvoisin 2020-04-16 13:59:51 +02:00 committed by Deluan Quintão
parent 6cf4b81de9
commit 05958f5195
4 changed files with 218 additions and 1 deletions

103
ui/package-lock.json generated

@ -13132,6 +13132,109 @@
"resolved": "https://registry.npmjs.org/ra-language-english/-/ra-language-english-3.2.0.tgz",
"integrity": "sha512-/XmwYWoQoB4MBkkzBCbg/ykCuRGjHQOHLk2ik6n1aM10AWHxiiJNyRw2aoLzH7Vc5rcp4BBJQCuhT+DgfYIJ2Q=="
},
"ra-language-french": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/ra-language-french/-/ra-language-french-3.4.1.tgz",
"integrity": "sha512-PZh9+n0FDw2VTNQR/H+Q3FXD49J4FAynTxZ1Zp8z3uCVHtlUySJwPQDp/pTbSmLIfGZ5DWfJltK4IqUkikY+0w==",
"requires": {
"ra-core": "^3.4.1"
},
"dependencies": {
"@jest/types": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
"integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
"@types/yargs": "^13.0.0"
}
},
"@testing-library/dom": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-5.6.1.tgz",
"integrity": "sha512-Y1T2bjtvQMewffn1CJ28kpgnuvPYKsBcZMagEH0ppfEMZPDc8AkkEnTk4smrGZKw0cblNB3lhM2FMnpfLExlHg==",
"requires": {
"@babel/runtime": "^7.5.5",
"@sheerun/mutationobserver-shim": "^0.3.2",
"aria-query": "3.0.0",
"pretty-format": "^24.8.0",
"wait-for-expect": "^1.2.0"
}
},
"@testing-library/react": {
"version": "8.0.9",
"resolved": "https://registry.npmjs.org/@testing-library/react/-/react-8.0.9.tgz",
"integrity": "sha512-I7zd+MW5wk8rQA5VopZgBfxGKUd91jgZ6Vzj2gMqFf2iGGtKwvI5SVTrIJcSFaOXK88T2EUsbsIKugDtoqOcZQ==",
"requires": {
"@babel/runtime": "^7.5.5",
"@testing-library/dom": "^5.6.1"
}
},
"@types/yargs": {
"version": "13.0.8",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz",
"integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==",
"requires": {
"@types/yargs-parser": "*"
}
},
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"requires": {
"color-convert": "^1.9.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"pretty-format": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
"integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
"requires": {
"@jest/types": "^24.9.0",
"ansi-regex": "^4.0.0",
"ansi-styles": "^3.2.0",
"react-is": "^16.8.4"
}
},
"ra-core": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/ra-core/-/ra-core-3.4.1.tgz",
"integrity": "sha512-XHcYAU36aMhIAmspdQ299SLCclu7qMmPS/IXN1VPVlRJHAIurK5tgRUMStAgDRO05qIkU5Xnb9C9PA63VmlPwA==",
"requires": {
"@testing-library/react": "^8.0.7",
"classnames": "~2.2.5",
"date-fns": "^1.29.0",
"eventemitter3": "^3.0.0",
"inflection": "~1.12.0",
"lodash": "~4.17.5",
"prop-types": "^15.6.1",
"query-string": "^5.1.1",
"recompose": "~0.26.0",
"reselect": "~3.0.0"
}
}
}
},
"ra-language-italian": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ra-language-italian/-/ra-language-italian-3.0.0.tgz",

@ -13,6 +13,7 @@
"prop-types": "^15.7.2",
"ra-data-json-server": "^3.3.3",
"ra-language-chinese": "^2.0.5",
"ra-language-french": "^3.4.1",
"ra-language-italian": "^3.0.0",
"ra-language-portuguese": "^1.6.0",
"react": "^16.13.1",

112
ui/src/i18n/fr.js Normal file

@ -0,0 +1,112 @@
import deepmerge from 'deepmerge'
import frenchMessages from 'ra-language-french'
export default deepmerge(frenchMessages, {
languageName: 'Français',
resources: {
song: {
name: 'Piste |||| Pistes',
fields: {
title: 'Titre',
artist: 'Artiste',
album: 'Album',
path: 'Chemin',
genre: 'Genre',
compilation: 'Compilation',
duration: 'Durée',
year: 'Année',
playCount: 'Nombre d\'écoutes',
trackNumber: '#',
size: 'Taille',
updatedAt: 'Mise à jour'
},
bulk: {
addToQueue: 'Ajouter à la file'
}
},
album: {
name: 'Album |||| Albums',
fields: {
name: 'Nom',
artist: 'Artiste',
songCount: 'Numéro de piste',
genre: 'Genre',
playCount: 'Numbre d\'écoutes',
compilation: 'Compilation',
duration: 'Durée',
year: 'Année'
},
actions: {
playAll: 'Lire',
playNext: 'Lire ensuite',
addToQueue: 'Ajouter à la file',
shuffle: 'Mélanger'
}
},
artist: {
name: 'Artiste |||| Artistes',
fields: {
name: 'Nom',
albumCount: 'Nombre d\'albums'
}
},
user: {
name: 'Utilisateur |||| Utilisateurs',
fields: {
name: 'Nom'
}
},
transcoding: {
name: 'Conversion |||| Conversions',
fields: {
name: 'Nom'
}
},
player: {
name: 'Lecteur |||| Lecteurs',
fields: {
name: 'Nom'
}
}
},
ra: {
auth: {
welcome1: 'Merci d\'avoir installé Navidrome !',
welcome2: 'Pour commencer, créez un compte administrateur',
confirmPassword: 'Confirmer votre mot de passe',
buttonCreateAdmin: 'Créer un compte administrateur'
},
validation: {
invalidChars: 'Merci d\'utiliser uniquement des chiffres et des lettres',
passwordDoesNotMatch: 'Les mots de passes ne correspondent pas'
}
},
menu: {
library: 'Bibliothèque',
settings: 'Paramètres',
version: 'Version%{version}',
personal: {
name: 'Paramètres personel',
options: {
theme: 'Thème',
language: 'Langue'
}
}
},
player: {
playListsText: 'File de lecture',
openText: 'Ouvrir',
closeText: 'Fermer',
clickToPlayText: 'Cliquer pour lire',
clickToPauseText: 'Cliquer pour mettre en pause',
nextTrackText: 'Morceau suivant',
previousTrackText: 'Morceau précédent',
clickToDeleteText: `Cliquer pour supprimer %{name}`,
playModeText: {
order: 'Ordonner',
orderLoop: 'Tout répéter',
singleLoop: 'Repéter',
shufflePlay: 'Aleatoire'
}
}
})

@ -1,5 +1,6 @@
import deepmerge from 'deepmerge'
import en from './en'
import fr from './fr'
import it from './it'
import pt from './pt'
import cn from './cn'
@ -10,7 +11,7 @@ const addLanguages = (lang) => {
const languages = { en }
// Add new languages to the object bellow
addLanguages({ cn, it, pt })
addLanguages({ cn, fr, it, pt })
// "Hack" to make "albumSongs" resource use the same translations as "song"
Object.keys(languages).forEach(