diff --git a/.vscode/i18n-ally-custom-framework.yml b/.vscode/i18n-ally-custom-framework.yml new file mode 100644 index 0000000000000000000000000000000000000000..fc7ca9ca80c77e8b4197173ce79ac1f4dfa0af1d --- /dev/null +++ b/.vscode/i18n-ally-custom-framework.yml @@ -0,0 +1,30 @@ +# .vscode/i18n-ally-custom-framework.yml + +# An array of strings which contain Language Ids defined by VS Code +# You can check avaliable language ids here: https://code.visualstudio.com/docs/languages/overview#_language-id +languageIds: + - javascript + - php + - twig + - vue + +# An array of RegExes to find the key usage. **The key should be captured in the first match group**. +# You should unescape RegEx strings in order to fit in the YAML file +# To help with this, you can use https://www.freeformatter.com/json-escape.html +usageMatchRegex: + # The following example shows how to detect `t("your.i18n.keys")` + # the `{key}` will be placed by a proper keypath matching regex, + # you can ignore it and use your own matching rules as well + - "->trans\\(\\s*['\"`]({key})['\"`]" # php syntax + - "[^\\w\\d]t\\(\\s*['\"`]({key})['\"`]" # javascript template + - "[`'\"]({key})[`'\"][\\s\\n]*\\|[\\s\\n]*trans" # twig syntax + + +# An array of strings containing refactor templates. +# The "$1" will be replaced by the keypath specified. +refactorTemplates: + - $this->trans("$1") + + +# If set to true, only enables this custom framework (will disable all built-in frameworks) +# monopoly: true \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..f93499a9fc84d71328bc82c784808a4c5ce2782c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "i18n-ally.localesPaths": [ "translations" ], + "i18n-ally.pathMatcher": "**/*.{locale}.{ext}", + "i18n-ally.enabledParsers": ["yaml"], + "i18n-ally.sourceLanguage": "fr", + "i18n-ally.displayLanguage": "fr", + "i18n-ally.keystyle": "nested", +} \ No newline at end of file diff --git a/assets/admin.pack.js b/assets/admin.pack.js index b5bd65b6dc25859908f3b50d769b0ce2d8086853..b3547a08951b2f2c4f4eff4cd7e7c59854e51131 100755 --- a/assets/admin.pack.js +++ b/assets/admin.pack.js @@ -7,3 +7,5 @@ import './js/admin/element-import/element-import' import './js/admin/osm-tags' import './js/admin/element-edit' import './js/admin/source-priority' + +import './js/i18n' diff --git a/assets/js/admin/element-edit.js b/assets/js/admin/element-edit.js index c57cc7ba066b88c5ca94bd5bea597c79a963c577..2dc983dbcf849f0b5ae314699186947e729b87c5 100755 --- a/assets/js/admin/element-edit.js +++ b/assets/js/admin/element-edit.js @@ -1,4 +1,4 @@ -import Vue from 'vue/dist/vue.esm' +import Vue from '../vendor/vue-custom' document.addEventListener('DOMContentLoaded', function() { if ($('.element-data-fields').length > 0) { diff --git a/assets/js/admin/element-import/BoundsPicker.vue b/assets/js/admin/element-import/BoundsPicker.vue index ea5aaab17ad9de721ea98e603ae6fd229b04c661..84f5d7f96819c81e3fd8a8b8a33de3324d5b4c6a 100755 --- a/assets/js/admin/element-import/BoundsPicker.vue +++ b/assets/js/admin/element-import/BoundsPicker.vue @@ -30,6 +30,8 @@ import 'leaflet/dist/leaflet.css' import 'leaflet-shades' import 'leaflet-shades/src/css/leaflet-shades.css' +// TODO translate .vue file + export default { props: [ 'osmQueryObject', 'tileLayer', 'defaultBounds' ], data() { diff --git a/assets/js/admin/element-import/OsmQueryBuilder.vue b/assets/js/admin/element-import/OsmQueryBuilder.vue index 55e48a44aa6b751a9d39f73119714f72c0d933e8..e42d24d2faf931f64b969609d018d689b941a6aa 100755 --- a/assets/js/admin/element-import/OsmQueryBuilder.vue +++ b/assets/js/admin/element-import/OsmQueryBuilder.vue @@ -1,6 +1,6 @@ <template> <div class="osm-query-builder"> - <label>Liste des requêtes dans la base OpenStreetMap</label> + <label>{{ t('osm_query_builder.title') }}</label> <osm-tag-search></osm-tag-search> @@ -35,6 +35,8 @@ import OsmCondition from "./OsmQueryBuilderCondition" import OsmTagSearch from "./OsmQueryBuilderTagSearch" import BoundsPicker from "./BoundsPicker" +// TODO translate .vue file + export default { props: [ 'osmQueryObject', 'tileLayer', 'defaultBounds' ], components: { OsmCondition, OsmTagSearch, BoundsPicker }, diff --git a/assets/js/admin/element-import/OsmQueryBuilderCondition.vue b/assets/js/admin/element-import/OsmQueryBuilderCondition.vue index 843b29801b4e04621e5555abb9ea687bc1e6bdb5..c417a3f100c6912e2f6128bb7112eb49df826935 100755 --- a/assets/js/admin/element-import/OsmQueryBuilderCondition.vue +++ b/assets/js/admin/element-import/OsmQueryBuilderCondition.vue @@ -23,6 +23,8 @@ <script> import OsmWikiLink from "./OsmqueryBuilderWikiLink" +// TODO translate .vue file + export default { props: ['condition'], components: { OsmWikiLink }, diff --git a/assets/js/admin/element-import/OsmQueryBuilderTagSearch.vue b/assets/js/admin/element-import/OsmQueryBuilderTagSearch.vue index 01620fafc7ede204f35452777b90da9e98c1a13c..a385f0bed5ebef3b465c7135829e1c229b1c8bd1 100755 --- a/assets/js/admin/element-import/OsmQueryBuilderTagSearch.vue +++ b/assets/js/admin/element-import/OsmQueryBuilderTagSearch.vue @@ -6,6 +6,9 @@ </template> <script> + +// TODO translate .vue file + export default { mounted() { $('.tag-search').select2({ diff --git a/assets/js/admin/element-import/OsmqueryBuilderWikiLink.vue b/assets/js/admin/element-import/OsmqueryBuilderWikiLink.vue index 1c37ba4071f9c1c81f55668526b688cb637cc327..a6be838cd4b6c39e41cae1632d4e3a5e1776a377 100755 --- a/assets/js/admin/element-import/OsmqueryBuilderWikiLink.vue +++ b/assets/js/admin/element-import/OsmqueryBuilderWikiLink.vue @@ -6,6 +6,9 @@ </template> <script> + +// TODO translate .vue file + export default { props: ['condition'], computed: { diff --git a/assets/js/admin/element-import/element-import.js b/assets/js/admin/element-import/element-import.js index 0ef771cbb47f69dff195db7963a6f39403189071..96eb61255354a3e693baba52c35d6646b1cbadf3 100755 --- a/assets/js/admin/element-import/element-import.js +++ b/assets/js/admin/element-import/element-import.js @@ -1,5 +1,5 @@ import OsmQueryBuilder from './OsmQueryBuilder.vue' -import Vue from 'vue/dist/vue.esm' +import Vue from '../../vendor/vue-custom' document.addEventListener('DOMContentLoaded', function() { if ($('#element-import').length > 0) { diff --git a/assets/js/admin/osm-tags.js b/assets/js/admin/osm-tags.js index f8307b0f5767066f0100e7785ff73bee6bfff1f1..be5fcf70af2b79d34759f9ae8515b9580952711f 100755 --- a/assets/js/admin/osm-tags.js +++ b/assets/js/admin/osm-tags.js @@ -1,4 +1,4 @@ -import Vue from 'vue/dist/vue.esm' +import Vue from '../vendor/vue-custom' import OsmCondition from './element-import/OsmQueryBuilderCondition.vue' document.addEventListener('DOMContentLoaded', function() { diff --git a/assets/js/admin/source-priority.js b/assets/js/admin/source-priority.js index 886a6e8bcd9a36db5ece01332d87bb5feb470d30..a3eae747c02c83c0edf73b72a6718682a6d27b8a 100755 --- a/assets/js/admin/source-priority.js +++ b/assets/js/admin/source-priority.js @@ -1,4 +1,4 @@ -import Vue from 'vue/dist/vue.esm' +import Vue from '../vendor/vue-custom' import Sortable from 'sortablejs' Vue.directive('sortable', { @@ -8,26 +8,26 @@ Vue.directive('sortable', { }) document.addEventListener('DOMContentLoaded', function() { - if ($('.source-priority-container').length > 0) { - new Vue({ - el: ".source-priority-container", - data: { - list: undefined, - value: undefined - }, - mounted() { - this.list = sourceList - this.value = this.list.join(',') - }, - methods: { - onUpdate(event) { - this.list.splice(event.newIndex, 0, this.list.splice(event.oldIndex, 1)[0]) - this.value = this.list.join(','); - }, - textFrom(item) { - return item ? item : "Cette Carte"; - } - } - }) - } + if ($('.source-priority-container').length > 0) { + new Vue({ + el: ".source-priority-container", + data: { + list: undefined, + value: undefined + }, + mounted() { + this.list = sourceList + this.value = this.list.join(',') + }, + methods: { + onUpdate(event) { + this.list.splice(event.newIndex, 0, this.list.splice(event.oldIndex, 1)[0]) + this.value = this.list.join(','); + }, + textFrom(item) { + return item ? item : t('js.import.source_this_map'); + } + } + }) + } }) diff --git a/assets/js/element-form/geocode-address.js b/assets/js/element-form/geocode-address.js index d9bbddbb0d4846e8ed7350720d994516bde7fe5c..ee7f9b10e3e663bce0bae4d0f18b053b6ccd7083 100755 --- a/assets/js/element-form/geocode-address.js +++ b/assets/js/element-form/geocode-address.js @@ -102,9 +102,9 @@ function geocodeAddress(address) { $('#input-addressCountry').val(''); $('#input-streetAddress').val(''); - console.log("erreur geocoding", status); + console.log("geocoding error", status); } else { - $('#geocode-error').text('Erreur lors de la geolocalisation de "' + address + '"').show() + $('#geocode-error').textt('js.element_form.geocode_error', {address: address})).show() } $('#geocode-spinner-loader').hide(); diff --git a/assets/js/element-form/init-map.js b/assets/js/element-form/init-map.js index dd7bb0c564465e4a7620f762bf12c9fb36efc488..3ac945793170bee0f22d07a24f8ed8d7bd55a68f 100755 --- a/assets/js/element-form/init-map.js +++ b/assets/js/element-form/init-map.js @@ -46,7 +46,7 @@ function createMarker(position) $('#input-longitude').attr('value',marker.getLatLng().lng); }); - marker.bindPopup(`<center>${t('element-form.geocoded-marker-text')}</center>`).openPopup(); + marker.bindPopup(`<center>$t('js.element_form.geocoded_marker_text')}</center>`).openPopup(); } function fitBounds(rawbounds) diff --git a/assets/js/i18n.js b/assets/js/i18n.js index 0231c66d169abc3a16e50f1647bea7d240006c94..6191b96c2315410d73a862374a6bc2b6fb886864 100644 --- a/assets/js/i18n.js +++ b/assets/js/i18n.js @@ -1,9 +1,9 @@ -var gogoLocale = 'fr'; // overwritten in layout templates using config.locale var gogoFallbackLocale = 'en'; // Use this function anywhere -// handle interpolation : t('helo.world', {user: "Seby"}) -function t(key, params) { +// handle interpolation :t('js.helo.world', {user: "Seby"}) +window.t = function(key, params) { + key = key.replace(/^js\./, '') var result = gogoTrans(gogoLocale + '.' + key, params) if (!result) result = gogoTrans(gogoFallbackLocale + '.' + key, params) if (!result) result = key diff --git a/assets/js/vendor/vue-custom.js b/assets/js/vendor/vue-custom.js new file mode 100644 index 0000000000000000000000000000000000000000..1c8b21b9e82381f83dc921e7598207ce89c225e6 --- /dev/null +++ b/assets/js/vendor/vue-custom.js @@ -0,0 +1,12 @@ +import Vue from 'vue/dist/vue.esm' + +// Ads global method "t" +let i18nPlugin = {} +i18nPlugin.install = function (Vue, options) { + Vue.prototype.t = function (key, params = {}) { + return window.t(key, params) + } + } +Vue.use(i18nPlugin) + +export default Vue diff --git a/assets/scss/components/element-form/_category-field.scss b/assets/scss/components/element-form/_category-field.scss index c5f1ee44938e1d2676f0d134bfd18e404fa4a74d..f47e8a17899e6edc917a4b16482e9b45fe0133f6 100755 --- a/assets/scss/components/element-form/_category-field.scss +++ b/assets/scss/components/element-form/_category-field.scss @@ -19,10 +19,9 @@ &:before { width: 100%; - content: "Veuillez sélectionner au moins une option"; /* TODO translate */ + content: attr(data-error-msg); } - } - + } &.inline { diff --git a/assets/scss/element-form.scss b/assets/scss/element-form.scss index d35a6d7d84f5770e5ba6ddba018804013c1f5e99..2939b8410991566eac929a31649d644721964886 100755 --- a/assets/scss/element-form.scss +++ b/assets/scss/element-form.scss @@ -165,7 +165,7 @@ &:after { - content: "Impossible de localiser cette adresse"; /* TODO translate */ + content: attr(data-error-msg); position: absolute; width: 600px; top: 3.5rem; diff --git a/config/packages/sonata_admin.yaml b/config/packages/sonata_admin.yaml index 02da2e6f210631d6b416828209c4d50acae2c1b0..6dc577d9ae08b492df8188b0757b38baf42282fb 100755 --- a/config/packages/sonata_admin.yaml +++ b/config/packages/sonata_admin.yaml @@ -25,23 +25,30 @@ sonata_admin: - { position: top, class: col-md-12, type: gogo.block.service.charts} groups: contents: - label: menu.contents + label: dashboard.menu.contents + label_catalogue: admin icon: <i class='fa fa-file-text'></i> data: - label: menu.data + label: dashboard.menu.data + label_catalogue: admin icon: <i class='fa fa-database'></i> custom: - label: menu.custom + label: dashboard.menu.custom + label_catalogue: admin icon: <i class='fa fa-paint-brush'></i> emailing: - label: menu.emailing + label: dashboard.menu.emailing + label_catalogue: admin icon: <i class='fa fa-envelope'></i> other_config: - label: menu.other_config + label: dashboard.menu.other_config + label_catalogue: admin icon: <i class='fa fa-cogs'></i> sonata_user: - label: menu.users + label: dashboard.menu.users + label_catalogue: admin icon: <i class='fa fa-users'></i> saas: - label: menu.saas + label: dashboard.menu.saas + label_catalogue: admin icon: <i class='fa fa-cogs saas-menu'></i> \ No newline at end of file diff --git a/config/services.yaml b/config/services.yaml index d31eec475e67ccf185ff2aba5cd528923e0d11b2..e1ce9f7b9d3a439fa9c86c2ec3d7d143aad4e04b 100755 --- a/config/services.yaml +++ b/config/services.yaml @@ -193,6 +193,13 @@ services: tags: - { name: sonata.admin, manager_type: doctrine_mongodb, group: custom, label: categories._label } + admin.options: + class: App\Admin\OptionAdmin + arguments: [~, App\Document\Option, 'App\Controller\Admin\OptionAdminController'] + calls: [ [ setGoGoTranslator, ['@translator'] ] ] + tags: + - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } + admin.config_map: class: App\Admin\ConfigurationMapAdmin arguments: [~, App\Document\Configuration, 'App\Controller\Admin\ConfigurationAdminController'] @@ -326,35 +333,42 @@ services: # --------- HIDDEN ----------- - admin.parter_image_hidden: + admin.images_partner: class: App\Admin\ImageAdmin arguments: [~, App\Document\PartnerImage, '' ] calls: [ [ setGoGoTranslator, ['@translator'] ] ] tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } + - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide", label: images_partner._label } - admin.conf_image_hidden: + admin.images_conf: class: App\Admin\ImageAdmin arguments: [~, App\Document\ConfImage, '' ] calls: [ [ setGoGoTranslator, ['@translator'] ] ] tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } + - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide", label: images_conf._label } - admin.image_hidden: + admin.images: class: App\Admin\ImageAdmin arguments: [~, App\Document\EmbeddedImage, '' ] calls: [ [ setGoGoTranslator, ['@translator'] ] ] tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } + - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide", label: images._label } + + admin.images_element: + class: App\Admin\ImageAdmin + arguments: [~, App\Document\ElementImage, '' ] + calls: [ [ setGoGoTranslator, ['@translator'] ] ] + tags: + - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide", label: images_element._label } - admin.feature_config_hidden: + admin.config_features: class: App\Admin\FeatureConfigurationAdmin arguments: [~, App\Document\FeatureConfiguration, ''] calls: [ [ setGoGoTranslator, ['@translator'] ] ] tags: - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } - admin.automated_mail_config_hidden: + admin.emails.template: class: App\Admin\AutomatedMailConfigurationAdmin arguments: [~, App\Document\AutomatedMailConfiguration, ''] calls: [ [ setGoGoTranslator, ['@translator'] ] ] @@ -384,20 +398,6 @@ services: tags: - { name: sonata.admin, manager_type: doctrine_mongodb, group: "data", label: dynamic_imports._label } - admin.element_image_hidden: - class: App\Admin\ImageAdmin - arguments: [~, App\Document\ElementImage, '' ] - calls: [ [ setGoGoTranslator, ['@translator'] ] ] - tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } - - admin.option_hidden: - class: App\Admin\OptionAdmin - arguments: [~, App\Document\Option, 'App\Controller\Admin\OptionAdminController'] - calls: [ [ setGoGoTranslator, ['@translator'] ] ] - tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: "Hide" } - admin.config_duplicates: class: App\Admin\ConfigurationDuplicatesAdmin arguments: [~, App\Document\Configuration, 'App\Controller\Admin\ConfigurationAdminController'] @@ -412,12 +412,12 @@ services: arguments: [~, App\Document\Project, 'App\Controller\Admin\ProjectAdminController'] calls: [ [ setGoGoTranslator, ['@translator'] ] ] tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: saas, label: saas.list } + - { name: sonata.admin, manager_type: doctrine_mongodb, group: saas, label: projects._label } - admin.saas_config: + admin.config_saas: class: App\Admin\ConfigurationSaasAdmin arguments: [~, App\Document\Configuration, 'App\Controller\Admin\ConfigurationAdminController'] calls: [ [ setGoGoTranslator, ['@translator'] ] ] tags: - - { name: sonata.admin, manager_type: doctrine_mongodb, group: saas, label: saas.config } + - { name: sonata.admin, manager_type: doctrine_mongodb, group: saas, label: config_saas.config } \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 1a9376c626a8b56144cd6cea2e99e7a8af18cc50..6c7d5005dc49a716bde12e4e3b4ad6be3affae59 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,7 +8,10 @@ const gulp = require('gulp'), del = require('del'), yaml = require('gulp-yaml'), header = require('gulp-header'), - workboxBuild = require('workbox-build'); + footer = require('gulp-footer'), + workboxBuild = require('workbox-build'), + tap = require('gulp-tap'), + log = require('fancy-log'); const scriptsHome = () => gulp.src(['assets/js/home.js']) @@ -25,12 +28,36 @@ const scriptsElementForm = () => .pipe(concat('element-form.js')) .pipe(gulp.dest('web/js')); -const buildTranslations = () => - gulp.src('translations/javascripts-translations.yaml') - .pipe(yaml({schema: 'DEFAULT_SAFE_SCHEMA', ext: '.js'})) - .pipe(header("var gogoI18n = ")) +const buildTranslations = () => { + const admin = gulp.src('translations/admin+intl-icu.*.yaml') + .pipe(yaml({schema: 'DEFAULT_SAFE_SCHEMA', ext: '.js'})) + .pipe(tap(function(file, t) { + var locale = file.basename.split('.')[1] + var transTable = JSON.parse(file.contents.toString())['js'] + file.contents = Buffer.from('"' + locale + '": ' + JSON.stringify(transTable) + ', ') + // log(file.contents.toString()) + })) + .pipe(concat('javascripts-translations-admin.js')) + .pipe(header("var gogoI18n = {")) + .pipe(footer("}")) .pipe(gulp.dest('web/js')) + const public = gulp.src('translations/messages+intl-icu.*.yaml') + .pipe(yaml({schema: 'DEFAULT_SAFE_SCHEMA', ext: '.js'})) + .pipe(tap(function(file, t) { + var locale = file.basename.split('.')[1] + var transTable = JSON.parse(file.contents.toString())['js'] + file.contents = Buffer.from('"' + locale + '": ' + JSON.stringify(transTable) + ', ') + // log(file.contents.toString()) + })) + .pipe(concat('javascripts-translations.js')) + .pipe(header("var gogoI18n = {")) + .pipe(footer("}")) + .pipe(gulp.dest('web/js')) + + return merge(admin, public) +} + const scriptsLibs = () => { const gogocarto = gulp.src([ 'node_modules/gogocarto-js/dist/gogocarto.js', @@ -116,7 +143,7 @@ exports.watch = () => { gulp.watch(['node_modules/gogocarto-js/dist/**/*', 'custom/**/*.css'], gulp.series(gogocarto_assets, serviceWorker)); - gulp.watch(['assets/js/vendor/**/*.js','assets/js/admin/**/*.js', 'node_modules/gogocarto-js/dist/gogocarto.js', 'custom/**/*.js', 'assets/js/i18n.js', 'translations/javascripts-translations.yaml'], + gulp.watch(['assets/js/vendor/**/*.js','assets/js/admin/**/*.js', 'node_modules/gogocarto-js/dist/gogocarto.js', 'custom/**/*.js', 'assets/js/i18n.js', 'translations/*.yaml'], gulp.series(buildTranslations, scriptsLibs, serviceWorker)); gulp.watch(['assets/js/home.js'], gulp.series(scriptsHome, serviceWorker)); @@ -132,4 +159,6 @@ exports.build = gulp.series(cleanJs, cleanCss, buildTranslations, gulp.parallel( exports.production = gulp.parallel(gulp.series(prod_styles, gzip_styles), gulp.series(prod_js, gzip_js)); -exports.libs = gulp.series(scriptsLibs) \ No newline at end of file +exports.libs = gulp.series(scriptsLibs) + +exports.i18n = gulp.series(buildTranslations) \ No newline at end of file diff --git a/package.json b/package.json index e30483ebe44c96c30e9ce00509fa1fec50ecc634..541c9e1408546fa893590b4372e4611057e66263 100755 --- a/package.json +++ b/package.json @@ -33,8 +33,11 @@ }, "dependencies": { "core-js": "^3.8.1", + "fancy-log": "^1.3.3", "gogocarto-js": "^1.7.3", + "gulp-footer": "^2.0.2", "gulp-header": "^2.0.9", + "gulp-tap": "^2.0.0", "gulp-yaml": "^2.0.4", "leaflet": "^1.7.1", "leaflet-shades": "^0.1.4", diff --git a/src/Admin/AutomatedMailConfigurationAdmin.php b/src/Admin/AutomatedMailConfigurationAdmin.php index 7957247d4a3ed3b06c903d6933ceebf6bb10252c..41a96f225644e2d012712c9fe504f2886cd6f9fc 100755 --- a/src/Admin/AutomatedMailConfigurationAdmin.php +++ b/src/Admin/AutomatedMailConfigurationAdmin.php @@ -16,13 +16,12 @@ class AutomatedMailConfigurationAdmin extends GoGoAbstractAdmin protected function configureFormFields(FormMapper $formMapper) { $formMapper - ->add('active', null, ['required' => false, 'label' => 'Activé']) // TODO translate - ->add('subject', null, ['required' => false, 'label' => 'Objet du message']) // TODO translate + ->add('active') + ->add('subject') ->add('content', SimpleFormatterType::class, [ 'format' => 'richhtml', 'ckeditor_context' => 'full', - 'required' => false, - 'label' => 'Contenu du message', // TODO translate + 'required' => false ]); } } diff --git a/src/Admin/CategoryAdmin.php b/src/Admin/CategoryAdmin.php index 641f8ffc24d711a2cc5f48414c07e5f59a957bb2..704c1d4e9b1d37713e76947a79f12b13ecda0c2c 100755 --- a/src/Admin/CategoryAdmin.php +++ b/src/Admin/CategoryAdmin.php @@ -56,7 +56,7 @@ class CategoryAdmin extends GoGoAbstractAdmin ->add('parent', ModelType::class, [ 'class' => 'App\Document\Option', 'required' => false, - 'query' => $parentQuery], ['admin_code' => 'admin.option_hidden']) + 'query' => $parentQuery], ['admin_code' => 'admin.options']) ->add('isMandatory') ->add('singleOption') ->add('enableDescription') diff --git a/src/Admin/ConfigurationAdmin.php b/src/Admin/ConfigurationAdmin.php index d4071c06813358f13cad1ba6962b40eac199feb7..2fd014c38658412aa14d35edbbeca3a558e13ec5 100755 --- a/src/Admin/ConfigurationAdmin.php +++ b/src/Admin/ConfigurationAdmin.php @@ -13,7 +13,7 @@ class ConfigurationAdmin extends ConfigurationAbstractAdmin { $imagesOptions = [ 'class' => 'App\Document\ConfImage', - 'placeholder' => 'commons.fields.image_placeholder', + 'placeholder' => $this->trans('images.placeholder'), 'mapped' => true, ]; diff --git a/src/Admin/ConfigurationDuplicatesAdmin.php b/src/Admin/ConfigurationDuplicatesAdmin.php index 743c4cbe4f884ad0a0843b48f8ad2682a37ddeff..0fdabc36983e8e774864cfa516f9c07547f1184d 100755 --- a/src/Admin/ConfigurationDuplicatesAdmin.php +++ b/src/Admin/ConfigurationDuplicatesAdmin.php @@ -67,23 +67,21 @@ class ConfigurationDuplicatesAdmin extends ConfigurationAbstractAdmin 'data-source-list' => $sourceList]]) ->end() - ->with('Restreindre la détection manuelle (optionel)', ['box_class' => 'box box-default']) + ->with('manualDetection', ['box_class' => 'box box-default']) ->add('duplicates.sourcesToDetectFrom', ChoiceType::class, [ - 'label' => "Chercher les doublons entre les sources (laisser vide pour chercher dans toute la base de donnée)", 'choice_label' => function ($choice, $key, $value) { - if ('' === $choice) return 'Cette carte'; + if ('' === $choice) return $this->trans('js.import.source_this_map'); return $choice; }, 'choices' => $sourceList, - 'multiple' => true, 'required' => false]) + 'multiple' => true]) ->add('duplicates.sourcesToDetectWith', ChoiceType::class, [ - 'label' => "Et les sources (laisser vide pour chercher dans toute la base de donnée)", 'choices' => $sourceList, 'choice_label' => function ($choice, $key, $value) { - if ('' === $choice) return 'Cette carte'; + if ('' === $choice) return $this->trans('js.import.source_this_map'); return $choice; }, - 'multiple' => true, 'required' => false]) + 'multiple' => true]) ->end() ; } diff --git a/src/Admin/ConfigurationHomeAdmin.php b/src/Admin/ConfigurationHomeAdmin.php index 719aa72b4455446e28f36c0abedd1f42e673277c..105f2176c336fbdd81aba975e2a2c132e78b7bab 100755 --- a/src/Admin/ConfigurationHomeAdmin.php +++ b/src/Admin/ConfigurationHomeAdmin.php @@ -22,9 +22,6 @@ class ConfigurationHomeAdmin extends ConfigurationAbstractAdmin { $imagesOptions = [ 'class' => 'App\Document\ConfImage', - 'placeholder' => 'Séléctionnez une image déjà importée, ou ajoutez en une !', // TODO translate - 'required' => false, - 'label' => 'Logo', // TODO translate 'mapped' => true, ]; @@ -35,7 +32,7 @@ class ConfigurationHomeAdmin extends ConfigurationAbstractAdmin $featureFormTypeOption = ['edit' => 'inline']; $formMapper ->add('activateHomePage') - ->add('backgroundImage', ModelType::class) + ->add('backgroundImage', ModelType::class, $imagesOptions) ->add('home.displayCategoriesToPick', CheckboxType::class) ->add('home.addElementHintText') ->add('home.seeMoreButtonText') diff --git a/src/Admin/ConfigurationMailAdmin.php b/src/Admin/ConfigurationMailAdmin.php index f11721e750806c8f0c1de124aac138f07bf67646..9784a48a6b724c5a3fe6fec077bc408fe43c5cc0 100755 --- a/src/Admin/ConfigurationMailAdmin.php +++ b/src/Admin/ConfigurationMailAdmin.php @@ -27,71 +27,36 @@ class ConfigurationMailAdmin extends ConfigurationAbstractAdmin $featureStyle = ['class' => 'col-md-6 col-lg-3']; $contributionStyle = ['class' => 'col-md-6 col-lg-4']; - $mailStyle = ['class' => 'col-md-12 col-lg-6']; - $featureFormOption = ['delete' => false, 'required' => false, 'label_attr' => ['style' => 'display:none']]; + // $mailStyle = ['class' => 'col-md-12 col-lg-6']; + $featureFormOption = ['delete' => false, 'label_attr' => ['style' => 'display:none']]; $featureFormTypeOption = ['edit' => 'inline']; $formMapper - ->tab('Mails auto pour les '.$config->getElementDisplayNamePlural()) - ->panel('Informations concernant les mails automatiques', ['box_class' => 'box box-danger', // TODO translate - 'description' => ' - <div class="text-and-iframe-container"> - <div class="iframe-container-aside"><iframe height="200" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/d5d007ec-e5c6-4a50-ab66-572e35e8905a" frameborder="0" allowfullscreen></iframe></div> - Ces mails sont envoyés automatiquement aux '.$config->getElementDisplayNamePlural()." lorsque leur fiche est ajoutée, modifiée ou supprimée.</br> - Il est possible d'inclure les variables suivantes dans les messages (en conservant les '{{}}' ) : </br> - <li>{{ element }} le nom de ".$config->getElementDisplayNameDefinite()."</li> - <li>{{ showUrl }} l'adresse qui renvoie à la visualisation de la fiche</li> - <li>{{ editUrl }} l'adresse qui renvoie à la modification de la fiche</li> - <li>{{ homeUrl }} l'adresse de la page d'accueil du site</li> - <li>{{ directEditElementUniqueUrl }} l'adresse unique pour éditer directement l'élément sans être admin</li> - <li>{{ customMessage }} le message personnel qui a été rédigé par les admins (uniquement lors de la suppression)</li></br> - </div> - Vous pouvez également utiliser ces variables dans les contenus spéciaux de l'éditeur de texte. Par example dans le champs URL de la popup - qui s'ouvre lorsqu'on clique sur d'ajouter un lien.</br> - <b>Une fois le mail sauvegardé</b>, vous pouvez cliquer sur les boutons <b>TESTER</b> pour visualiser le rendu", ])->end() // TODO translate - ->panel("Lors d'un ajout".$this->getEmailTestLink($router, 'add'), $mailStyle) // TODO translate + ->tab('mailForElements', ['label_trans_params' => ['%element%' => $config->getElementDisplayNamePlural()]]) + ->panel('infosElements', ['box_class' => 'box box-danger','label_trans_params' => [ + '%elements%' => $config->getElementDisplayNamePlural(), + '%element%' => $config->getElementDisplayNameDefinite() + ]])->end() + ->panel('add', ['class' => 'col-md-12 col-lg-6', 'label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'add')]]) ->add('addMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() - ->panel("Lors d'une modification".$this->getEmailTestLink($router, 'edit'), $mailStyle) // TODO translate + ->panel('edit', ['class' => 'col-md-12 col-lg-6', 'label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'edit')]]) ->add('editMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() - ->panel("Lors d'une suppression".$this->getEmailTestLink($router, 'delete'), $mailStyle) // TODO translate + ->panel('delete', ['class' => 'col-md-12 col-lg-6', 'label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'delete')]]) ->add('deleteMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() ->end() - ->tab('Mails auto pour les contributeurs') // TODO translate - ->panel('Informations concernant les mails automatiques', ['box_class' => 'box box-danger', // TODO translate - 'description' => "Ces mails sont envoyés automatiquement aux contributeurs lorsque leurs contributions sont acceptées, refusées etc...</br> - Il est possible d'inclure les variables suivantes dans les messages (en conservant les '{{}}' ) : </br> - <li>{{ element }} le nom de ".$config->getElementDisplayNameDefinite()."</li> - <li>{{ user }} le nom ou l'adresse mail du contributeur</li> - <li>{{ showUrl }} l'adresse qui renvoie à la visualisation de la fiche</li> - <li>{{ editUrl }} l'adresse qui renvoie à la modification de la fiche</li> - <li>{{ homeUrl }} l'adresse de la page d'accueil du site</li> - <li>{{ userContributionsUrl }} l'adresse de la page \"Mes contributions\"</li> - <li>{{ customMessage }} le message personnel qui a été rédigé par les admins (uniquement lors d'un refus')</li></br> - Vous pouvez également utiliser ces variables dans les contenus spéciaux de l'éditeur de texte. Par example dans le champs URL de la popup - qui s'ouvre lorsqu'on clique sur d'ajouter un lien.</br> - <b>Une fois le mail sauvegardé</b>, vous pouvez cliquer sur les boutons <b>TESTER</b> pour visualiser le rendu", ])->end() // TODO translate - ->panel("Lors d'une validation".$this->getEmailTestLink($router, 'validation'), $mailStyle) // TODO translate + ->tab('mailForContributors') + ->panel('infosContributors', ['box_class' => 'box box-danger', 'label_trans_params' => [ + '%element%' => $config->getElementDisplayNameDefinite() + ]])->end() + ->panel('validation', ['class' => 'col-md-12 col-lg-6', 'label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'validation')]]) ->add('validationMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() - ->panel("Lors d'un refus".$this->getEmailTestLink($router, 'refusal'), $mailStyle) // TODO translate + ->panel('refusal', ['class' => 'col-md-12 col-lg-6', 'label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'refusal')]]) ->add('refusalMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() - ->panel("Lors d'un signalement pris en compte".$this->getEmailTestLink($router, 'refusal'), $mailStyle) // TODO translate + ->panel('report', ['class' => 'col-md-12 col-lg-6', 'label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'report')]]) ->add('reportResolvedMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() ->end() - ->tab('Newsletter') // TODO translate - ->panel('Informations concernant la newsletter', ['box_class' => 'box box-danger', - 'description' => "Ce mail est envoyé automatiquement aux utilisateurs y ayant souscrit. Il donne la liste des derniers éléments ajoutés dans une zone - géographique determinée et optionnellement des nouvelles</br></br> - <b>Il est nécessaire d'inclure la variable <u>{{ newElements }}</u> et/ou <u>{{ pendingElements }}</u></b> qui seront respectivement remplacées par la liste des nouveaux élements et des nouveaux élements en attente de validation</br></br> - Il est possible d'inclure les variables suivantes dans les messages (en conservant les '{{}}' ) : </br> - <ul> - <li>{{ news }} la dernière nouvelle publiée</li> - <li>{{ user }} le nom ou l'adresse mail du contributeur</li> - <li>{{ homeUrl }} l'adresse de la page d'accueil du site</li> - <li>{{ userProfileUrl }} l'adresse de la page \"Mes paramètres\" dans l'espace utilisateur</li> - <li>{{ showOnMapBtn }} un bouton pour renvoyer vers la carte centrée sur la position de l'utilisateur</li> - </ul> - </br> - <b>Une fois le mail sauvegardé</b>, vous pouvez cliquer sur le bouton <b>TESTER</b> pour visualiser le rendu", ])->end() // TODO translate - ->panel('Newsletter'.$this->getEmailTestLink($router, 'newsletter'), ['class' => 'col-md-12']) // TODO translate + ->tab('newsletters') + ->panel('infosNewletter', ['box_class' => 'box box-danger'])->end() + ->panel('newsletter', ['label_trans_params' => ['%url%' => $this->getEmailTestLink($router, 'newsletter')]]) ->add('newsletterMail', AdminType::class, $featureFormOption, $featureFormTypeOption)->end() ->end() ; @@ -101,6 +66,6 @@ class ConfigurationMailAdmin extends ConfigurationAbstractAdmin { $url = $router->generate('gogo_mail_draft_automated', ['mailType' => $mailType]); - return ' - <a href="'.$url.'" target="_blank">TESTER</a>'; + return $url; } } diff --git a/src/Admin/ConfigurationSaasAdmin.php b/src/Admin/ConfigurationSaasAdmin.php index 53bc64f2722f338612a496589b2bc22dcf373972..d89c708136a8b5aa5faa849fc476cc53ecc16e9d 100755 --- a/src/Admin/ConfigurationSaasAdmin.php +++ b/src/Admin/ConfigurationSaasAdmin.php @@ -21,20 +21,13 @@ class ConfigurationSaasAdmin extends ConfigurationAbstractAdmin protected function configureFormFields(FormMapper $formMapper) { $formMapper - ->panel('Configuration') // TODO translate - ->add('saas.donationUrl', UrlType::class, [ - 'label' => "Url pour faire un don (un boutton sera ajouté sur la page d'accueil)", // TODO translate - 'required' => false - ]) + ->panel('configuration') + ->add('saas.donationUrl', UrlType::class) ->add('saas.endUserLicenceAgreement', SimpleFormatterType::class, [ - 'format' => 'richhtml', 'ckeditor_context' => 'full', - 'label' => "Conditions Générales d'Utilisation", // TODO translate - 'required' => false + 'format' => 'richhtml', 'ckeditor_context' => 'full' ]) ->add('saas.newProjectInstructions', SimpleFormatterType::class, [ - 'format' => 'richhtml', 'ckeditor_context' => 'full', - 'label' => "Texte personnalisé affiché en haut du formulaire de création d'un nouveau projet", // TODO translate - 'required' => false + 'format' => 'richhtml', 'ckeditor_context' => 'full' ]) ->end() ; diff --git a/src/Admin/ConfigurationUserAdmin.php b/src/Admin/ConfigurationUserAdmin.php index b2510ff164be0a433746347a3af8721e99948026..20b8e18b2ad40a67dfd49bea3d57b945d051ce78 100755 --- a/src/Admin/ConfigurationUserAdmin.php +++ b/src/Admin/ConfigurationUserAdmin.php @@ -27,14 +27,14 @@ class ConfigurationUserAdmin extends ConfigurationAbstractAdmin // provide oauth id if configured if ('disabled' != $container->getParameter('oauth_communs_id')) { - $formMapper->add('user.loginWithLesCommuns', CheckboxType::class, ['label' => 'Activer la connexion avec "LesCommuns.org"', 'required' => false]); // TODO translate - $formMapper->add('user.loginWithMonPrintemps', CheckboxType::class, ['label' => 'Activer la connexion avec MonPrintemps', 'required' => false]); // TODO translate + $formMapper->add('user.loginWithLesCommuns', CheckboxType::class); + $formMapper->add('user.loginWithMonPrintemps', CheckboxType::class); } if ('disabled' != $container->getParameter('oauth_google_id')) { - $formMapper->add('user.loginWithGoogle', CheckboxType::class, ['label' => 'Activer la connexion avec Google', 'required' => false]); // TODO translate + $formMapper->add('user.loginWithGoogle', CheckboxType::class); } if ('disabled' != $container->getParameter('oauth_facebook_id')) { - $formMapper->add('user.loginWithFacebook', CheckboxType::class, ['label' => 'Activer la connexion avec Facebook', 'required' => false]); // TODO translate + $formMapper->add('user.loginWithFacebook', CheckboxType::class); } } } diff --git a/src/Admin/Element/ElementAdminFilters.php b/src/Admin/Element/ElementAdminFilters.php index f0fca0f645dfd43e9b5990714da995cae8b9ae7d..7760cbd03a69456b3f0fc0fa9dc35928c4dd813f 100755 --- a/src/Admin/Element/ElementAdminFilters.php +++ b/src/Admin/Element/ElementAdminFilters.php @@ -154,6 +154,6 @@ class ElementAdminFilters extends ElementAdminAbstract }, ]) ->add('email') - ->add('sourceKey', null, ['label' => 'Source']);// TODO translate + ->add('sourceKey'); } } diff --git a/src/Admin/Element/ElementAdminList.php b/src/Admin/Element/ElementAdminList.php index 06165e628f9919ae97bc99097c6f6b148a655e86..cd79493f3c88b31325bad474b0cfdc79396a0a82 100755 --- a/src/Admin/Element/ElementAdminList.php +++ b/src/Admin/Element/ElementAdminList.php @@ -49,7 +49,7 @@ class ElementAdminList extends ElementAdminFilters 'editable' => true, 'template' => 'admin/partials/list_choice_status.html.twig', ]) - ->add('updatedAt', 'date', ['format' => 'd/m/Y']) + ->add('updatedAt', 'date', ['format' => 'd/m/Y']) // TODO translation : use local ? ->add('sourceKey') ->add('optionsString', null, ['header_style' => 'width: 250px']) ->add('moderationState', ChoiceType::class, [ @@ -72,44 +72,44 @@ class ElementAdminList extends ElementAdminFilters public function configureBatchActions($actions) { $actions = []; - $actions['validation'] = $this->createBatchConfig('Valider', 'validation'); // TODO translate - $actions['refusal'] = $this->createBatchConfig('Refuser', 'refusal'); // TODO translate - $actions['softDelete'] = $this->createBatchConfig('Supprimer (changement de status)', 'softDelete'); // TODO translate - $actions['restore'] = $this->createBatchConfig('Restaurer', 'restore'); // TODO translate - $actions['resolveReports'] = $this->createBatchConfig('Résoudre la modération', 'resolveReports'); // TODO translate + $actions['validation'] = $this->createBatchConfig('validation'); + $actions['refusal'] = $this->createBatchConfig('refusal'); + $actions['softDelete'] = $this->createBatchConfig('softDelete'); + $actions['restore'] = $this->createBatchConfig('restore'); + $actions['resolveReports'] = $this->createBatchConfig('resolveReports'); $actions['sendMail'] = [ - 'label' => 'Envoyer un mail', // TODO translate + 'label' => $this->trans('elements.action.batch.sendMail'), 'ask_confirmation' => false, 'modal' => [ - ['type' => 'text', 'label' => 'Votre adresse mail', 'id' => 'from'], // TODO translate - ['type' => 'text', 'label' => 'Object', 'id' => 'mail-subject'], // TODO translate - ['type' => 'textarea', 'label' => 'Contenu', 'id' => 'mail-content'], // TODO translate - ['type' => 'checkbox', 'label' => "Envoyer l'email aux éléments", 'id' => 'send-to-element', 'checked' => 'true'], // TODO translate - ['type' => 'checkbox', 'label' => "Envoyer l'email aux derniers contributeurs", 'id' => 'send-to-last-contributor', 'checked' => 'false'], // TODO translate + ['type' => 'text', 'label' => $this->trans('elements.action.batch.params.from'), 'id' => 'from'], + ['type' => 'text', 'label' => $this->trans('elements.action.batch.params.mail_subject'), 'id' => 'mail-subject'], + ['type' => 'textarea', 'label' => $this->trans('elements.action.batch.params.mail_content'), 'id' => 'mail-content'], + ['type' => 'checkbox', 'label' => $this->trans('elements.action.batch.params.send_to_element'), 'id' => 'send-to-element', 'checked' => 'true'], + ['type' => 'checkbox', 'label' => $this->trans('elements.action.batch.params.send_to_last_contributor'), 'id' => 'send-to-last-contributor', 'checked' => 'false'], ], ]; $actions['editOptions'] = [ - 'label' => 'Modifier les catégories', // TODO translate + 'label' => $this->trans('elements.action.batch.editOptions'), 'ask_confirmation' => false, 'modal' => [ - ['type' => 'choice', 'choices' => $this->getOptionsChoices(), 'id' => 'optionsToRemove', 'label' => 'Catégories à supprimer'], // TODO translate - ['type' => 'choice', 'choices' => $this->getOptionsChoices(), 'id' => 'optionsToAdd', 'label' => 'Catégories à ajouter'], // TODO translate + ['type' => 'choice', 'choices' => $this->getOptionsChoices(), 'id' => 'optionsToRemove', 'label' => $this->trans('elements.action.batch.params.optionsToRemove')], + ['type' => 'choice', 'choices' => $this->getOptionsChoices(), 'id' => 'optionsToAdd', 'label' => $this->trans('elements.action.batch.params.optionsToAdd')], ], ]; - $actions['delete'] = ['label' => 'Supprimer définitivement']; // TODO translate + $actions['delete'] = ['label' => $this->trans('elements.action.batch.delete')]; return $actions; } - protected function createBatchConfig($name, $id) + protected function createBatchConfig($id) { return [ - 'label' => $name, + 'label' => $this->trans('elements.action.batch.'.$id), 'ask_confirmation' => false, 'modal' => [ - ['type' => 'text', 'label' => 'Détail de la modification, raison de la suppression... ce texte remplacera {{ customMessage }} dans les mails automatiques', 'id' => 'comment-'.$id], // TODO translate - ['type' => 'checkbox', 'checked' => true, 'label' => 'Ne pas envoyer de mail', 'id' => 'dont-send-mail-'.$id], // TODO translate + ['type' => 'text', 'label' => $this->trans('elements.action.batch.params.comment'), 'id' => 'comment-'.$id], + ['type' => 'checkbox', 'checked' => true, 'label' => $this->trans('elements.action.batch.params.dont_send_mail'), 'id' => 'dont-send-mail-'.$id], ], ]; } diff --git a/src/Admin/Element/ElementAdminShowEdit.php b/src/Admin/Element/ElementAdminShowEdit.php index 6c4219bdc891caf3789aac14fa28522b1c70eee9..47b102e27962c63564594a0eb5bf513ee79ee7e8 100755 --- a/src/Admin/Element/ElementAdminShowEdit.php +++ b/src/Admin/Element/ElementAdminShowEdit.php @@ -36,7 +36,7 @@ class ElementAdminShowEdit extends ElementAdminList ->add('name', null, ['required' => true]) ->add('optionIds', ChoiceType::class, [ 'multiple' => true, - 'choices' => $categoriesChoices], ['admin_code' => 'admin.option_hidden']) + 'choices' => $categoriesChoices], ['admin_code' => 'admin.options']) ->add('data', null, [ 'label_attr' => ['style' => 'display:none;'], 'attr' => [ @@ -48,16 +48,12 @@ class ElementAdminShowEdit extends ElementAdminList ->add('images', CollectionType::class, [ 'entry_type' => ElementImageType::class, 'allow_add' => true, - 'label' => 'Images', - 'allow_delete' => true, - 'required' => false + 'allow_delete' => true ]) ->add('files', CollectionType::class, [ 'entry_type' => ElementFileType::class, 'allow_add' => true, - 'allow_delete' => true, - 'label' => 'Fichiers', - 'required' => false + 'allow_delete' => true ]) // ->add('openHours', OpenHoursType::class, ['required' => false]) ->end() diff --git a/src/Admin/ImageAdmin.php b/src/Admin/ImageAdmin.php index 8dfc7817d02de93fe9d0f83041a3777f7c40b2f1..674ebbdb2beaf75c6f337bde8f4e3a87a7ffed5f 100755 --- a/src/Admin/ImageAdmin.php +++ b/src/Admin/ImageAdmin.php @@ -13,7 +13,7 @@ class ImageAdmin extends GoGoAbstractAdmin protected function configureFormFields(FormMapper $formMapper) { $formMapper - ->add('file', FileType::class) # TODO translation : where are the translated keys ?? + ->add('file', FileType::class) ->add('externalImageUrl') ; } diff --git a/src/Admin/ImportAdmin.php b/src/Admin/ImportAdmin.php index 28b68eb5b450134751fc2ea7aa6fcc41e42f9ce7..c9764898586c0ab888a73c7682262fab879683be 100755 --- a/src/Admin/ImportAdmin.php +++ b/src/Admin/ImportAdmin.php @@ -64,27 +64,24 @@ class ImportAdmin extends GoGoAbstractAdmin ], 'required' => true]) ->end() ->panel('parameters') - ->add('refreshFrequencyInDays', null, ['required' => false, 'label' => 'Fréquence de mise à jours des données en jours (laisser vide pour ne jamais mettre à jour automatiquement']) // TODO translate + ->add('refreshFrequencyInDays') ->add('usersToNotify', ModelType::class, [ 'class' => 'App\Document\User', - 'required' => false, 'multiple' => true, 'query' => $usersQuery, 'btn_add' => false, - 'label' => "Utilisateurs à notifier en cas d'erreur, ou lorsque de nouveaux champs/catégories sont à faire correspondre", ], ['admin_code' => 'admin.option_hidden']) // TODO translate + ], ['admin_code' => 'admin.options']) ->add('isSynchronized', null, [ 'disabled' => !$this->config->getOsm()->isConfigured(), 'required' => false, 'attr' => ['class' => 'input-is-synched'], - 'label_attr' => ['title' => "Chaque modification sera envoyée à OpenStreetMap"], // TODO translate - 'label' => "Autoriser l'édition des données" . ($this->config->getOsm()->isConfigured() ? '' : ' (Vous devez préalablement renseigner des identifiants dans Autre configuration -> OpenStreetMap)') // TODO translate + 'label_trans_params' => ['%submessage%' => ($this->config->getOsm()->isConfigured() ? '' : $this->trans('dynamic_imports.fields.submessage'))] ]) ->add('moderateElements') - ->add('idsToIgnore', TextType::class, ['mapped' => false, 'required' => false, + ->add('idsToIgnore', TextType::class, ['mapped' => false, 'attr' => ['class' => 'gogo-display-array', 'value' => $this->getSubject()->getIdsToIgnore()], - 'label' => "Liste des IDs qui seront ignorées lors de l'import", // TODO translate - 'label_attr' => ['title' => "Pour ignorer un élément, supprimer le (définitivement) et il ne sera plus jamais importé. Si vous supprimez un élément dynamiquement importé juste en changeant son status (soft delete), l'élément sera quand meme importé mais conservera son status supprimé. Vous pourrez donc à tout moment restaurer cet élement pour le voir apparaitre de nouveau"]]); // TODO translate + ]); } else { $formMapper ->add('url', UrlType::class) @@ -143,7 +140,7 @@ class ImportAdmin extends GoGoAbstractAdmin 'class' => 'App\Document\Option', 'multiple' => true, 'btn_add' => false], - ['admin_code' => 'admin.option_hidden']) + ['admin_code' => 'admin.options']) ->add('needToHaveOptionsOtherThanTheOnesAddedToEachElements') ->add('preventImportIfNoCategories') ->end() @@ -200,16 +197,16 @@ class ImportAdmin extends GoGoAbstractAdmin $isDynamic = "App\Document\ImportDynamic" == $this->getClass(); $listMapper - ->addIdentifier('sourceName', null, ['label' => 'Nom de la source']) // TODO translate - ->add('logs', null, ['label' => "Nombre d'éléments", 'template' => 'admin/partials/import/list_total_count.html.twig']); // TODO translate + ->addIdentifier('sourceName') + ->add('logs', null, ['template' => 'admin/partials/import/list_total_count.html.twig']); if ($isDynamic) { $listMapper - ->add('idsToIgnore', null, ['label' => 'Infos', 'template' => 'admin/partials/import/list_non_visibles_count.html.twig', 'choices' => $deletedElementsCount]) // TODO translate - ->add('refreshFrequencyInDays', null, ['label' => 'Mise à jour', 'template' => 'admin/partials/import/list_refresh_frequency.html.twig']); // TODO translate + ->add('idsToIgnore', null, ['template' => 'admin/partials/import/list_non_visibles_count.html.twig', 'choices' => $deletedElementsCount]) + ->add('refreshFrequencyInDays', null, ['template' => 'admin/partials/import/list_refresh_frequency.html.twig']); } $listMapper - ->add('lastRefresh', null, ['label' => 'Dernier import', 'template' => 'admin/partials/import/list_last_refresh.html.twig']) // TODO translate + ->add('lastRefresh', null, ['template' => 'admin/partials/import/list_last_refresh.html.twig']) ->add('_action', 'actions', [ 'actions' => [ 'edit' => [], diff --git a/src/Admin/NewsAdmin.php b/src/Admin/NewsAdmin.php index f934f3da5b37df73aaab8519b05132b4e2f228cc..3db9ea938d195c110d8ebc3d5bfe5c5eea6abfa9 100755 --- a/src/Admin/NewsAdmin.php +++ b/src/Admin/NewsAdmin.php @@ -48,8 +48,7 @@ final class NewsAdmin extends GoGoAbstractAdmin { $filter ->add('title') - ->add('status', 'doctrine_mongo_choice', ['label' => 'Statut'], ChoiceType::class, ['choices' => [ // TODO translate - $this->t('news.fields.status_choices.draft') => NewsStatus::DRAFT, + ->add('status', 'doctrine_mongo_choice', [], ChoiceType::class, ['choices' => [ $this->t('news.fields.status_choices.published') => NewsStatus::PUBLISHED, ]]) ; diff --git a/src/Admin/UserAdmin.php b/src/Admin/UserAdmin.php index 44cacc7ab20701b65eaf08f3f26758811832c93c..810a042a93a96bed78c4ca22a18c8a9db03d8c27 100755 --- a/src/Admin/UserAdmin.php +++ b/src/Admin/UserAdmin.php @@ -162,7 +162,7 @@ class UserAdmin extends GoGoAbstractAdmin 'class' => 'App\Document\Option', 'multiple' => true, 'btn_add' => false, - ], ['admin_code' => 'admin.option_hidden']) + ], ['admin_code' => 'admin.options']) ->add('watchModerationOnlyWithPostCodes') ->end() ->end() diff --git a/src/Application/Sonata/UserBundle/Resources/translations/FOSUserBundle.fr.yml b/src/Application/Sonata/UserBundle/Resources/translations/FOSUserBundle.fr.yml deleted file mode 100755 index 38936720f0f674713ad1bb3bbaa0d445a8ce6000..0000000000000000000000000000000000000000 --- a/src/Application/Sonata/UserBundle/Resources/translations/FOSUserBundle.fr.yml +++ /dev/null @@ -1,99 +0,0 @@ -# Group -group: - edit: - submit: Mettre à jour le groupe - show: - name: Nom du groupe - new: - submit: Créer le groupe - flash: - updated: Le groupe a été mis à jour - created: Le groupe a été créé - deleted: Le groupe a été supprimé - -# Security -"Bad credentials": Nom d'utilisateur ou mot de passe incorrect - -# Since Symfony 2.6 the error message has changed -"Bad credentials.": Nom d'utilisateur ou mot de passe incorrect. - -security: - login: - username: Nom d'utilisateur - password: Mot de passe - remember_me: Se souvenir de moi - submit: Connexion - -# Profile -profile: - show: - username: Nom d'utilisateur - email: Adresse e-mail - edit: - submit: Mettre à jour - flash: - updated: Le profil a été mis à jour - -# Password change -change_password: - submit: Modifier le mot de passe - flash: - success: Le mot de passe a été modifié - -# Registration -registration: - check_email: Un e-mail a été envoyé à l'adresse %email%. Il contient un lien d'activation sur lequel il vous faudra cliquer afin d'activer votre compte. - confirmed: Félicitations %username%, votre compte est maintenant activé. - back: Retour à la page d'origine. - submit: Enregistrer - flash: - user_created: Votre compte a bien été créé ! - email: - subject: Bienvenue %username% ! - message: | - Bonjour %username% ! - - Pour valider votre compte utilisateur, merci de vous rendre sur %confirmationUrl% - - Cordialement, - L'équipe. - -# Password resetting -resetting: - reset: - submit: Modifier le mot de passe - password_already_requested: Un nouveau mot de passe a déjà été demandé pour cet utilisateur dans les dernières 24 heures. - check_email: Un e-mail a été envoyé à l'adresse %email%. Il contient un lien sur lequel il vous faudra cliquer afin de réinitialiser votre mot de passe. - request: - invalid_username: Le nom d'utilisateur ou l'adresse e-mail "%username%" n'existe pas. - username: Nom d'utilisateur ou adresse e-mail - submit: Réinitialiser le mot de passe - flash: - success: Le mot de passe a été réinitialisé avec succès - email: - subject: Réinitialisation de votre mot de passe - message: | - Bonjour %username% ! - - Pour réinitialiser votre mot de passe, merci de vous rendre sur %confirmationUrl% - - Cordialement, - L'équipe. - -# Global strings -layout: - logout: Déconnexion - login: Connexion - register: Inscription - logged_in_as: Connecté en tant que %username% - -# Form field labels -form: - group_name: Nom du groupe - username: Nom d'utilisateur - email: Adresse e-mail - current_password: Mot de passe actuel - password: Mot de passe - password_confirmation: Vérification - new_password: Nouveau mot de passe - new_password_confirmation: Vérification diff --git a/src/Application/Sonata/UserBundle/Resources/translations/SonataUserBundle.fr.xliff b/src/Application/Sonata/UserBundle/Resources/translations/SonataUserBundle.fr.xliff deleted file mode 100755 index 1b419d0c4dd91bd458f66fd41b1c4a771a33fe06..0000000000000000000000000000000000000000 --- a/src/Application/Sonata/UserBundle/Resources/translations/SonataUserBundle.fr.xliff +++ /dev/null @@ -1,597 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> - <file source-language="en" datatype="plaintext" original=""> - <body> - <trans-unit id="title_user_registration"> - <source>title_user_registration</source> - <target>Inscription</target> - </trans-unit> - <trans-unit id="title_user_account"> - <source>title_user_account</source> - <target>Profil utilisateur</target> - </trans-unit> - <trans-unit id="title_user_edit_profile"> - <source>title_user_edit_profile</source> - <target>Éditer</target> - </trans-unit> - <trans-unit id="title_user_authentication"> - <source>title_user_authentication</source> - <target>Identification</target> - </trans-unit> - <trans-unit id="sonata_user_submit"> - <source>sonata_user_submit</source> - <target>Envoyer</target> - </trans-unit> - <trans-unit id="breadcrumb.link_user_list"> - <source>breadcrumb.link_user_list</source> - <target>Utilisateurs</target> - </trans-unit> - <trans-unit id="breadcrumb.link_user_create"> - <source>breadcrumb.link_user_create</source> - <target>Ajouter</target> - </trans-unit> - <trans-unit id="breadcrumb.link_user_edit"> - <source>breadcrumb.link_user_edit</source> - <target>Éditer</target> - </trans-unit> - <trans-unit id="breadcrumb.link_user_delete"> - <source>breadcrumb.link_user_delete</source> - <target>Supprimer</target> - </trans-unit> - <trans-unit id="breadcrumb.link_group_list"> - <source>breadcrumb.link_group_list</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="breadcrumb.link_group_create"> - <source>breadcrumb.link_group_create</source> - <target>Ajouter</target> - </trans-unit> - <trans-unit id="breadcrumb.link_group_edit"> - <source>breadcrumb.link_group_edit</source> - <target>Éditer</target> - </trans-unit> - <trans-unit id="users"> - <source>users</source> - <target>Utilisateurs</target> - </trans-unit> - <trans-unit id="groups"> - <source>groups</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="switch_user_exit"> - <source>switch_user_exit</source> - <target>Quitter l'identité</target> - </trans-unit> - <trans-unit id="switch_user"> - <source>switch_user</source> - <target>Changer d'identité</target> - </trans-unit> - <trans-unit id="user_block_logout"> - <source>user_block_logout</source> - <target>Déconnexion</target> - </trans-unit> - <trans-unit id="user_block_profile"> - <source>user_block_profile</source> - <target>Profil</target> - </trans-unit> - <trans-unit id="user_form.label_username"> - <source>form.label_username</source> - <target>Nom d'utilisateur</target> - </trans-unit> - <trans-unit id="form.label_email"> - <source>form.label_email</source> - <target>Email</target> - </trans-unit> - <trans-unit id="form.label_plain_password"> - <source>form.label_plain_password</source> - <target>Mot de passe</target> - </trans-unit> - <trans-unit id="form.label_groups"> - <source>form.label_groups</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="form.label_roles"> - <source>form.label_roles</source> - <target>Rôles</target> - </trans-unit> - <trans-unit id="form.label_locked"> - <source>form.label_locked</source> - <target>Verrouillé</target> - </trans-unit> - <trans-unit id="form.label_expired"> - <source>form.label_expired</source> - <target>Expiré</target> - </trans-unit> - <trans-unit id="form.label_enabled"> - <source>form.label_enabled</source> - <target>Activé</target> - </trans-unit> - <trans-unit id="form.label_allowed_stamps"> - <source>form.label_allowed_stamps</source> - <target>Etiquettes autorisées</target> - </trans-unit> - <trans-unit id="form.label_credentials_expired"> - <source>form.label_credentials_expired</source> - <target>Droits expirés</target> - </trans-unit> - <trans-unit id="form.label_created_at"> - <source>form.label_created_at</source> - <target>Créé le</target> - </trans-unit> - <trans-unit id="form.label_last_login"> - <source>form.label_last_login</source> - <target>Dernière connexion</target> - </trans-unit> - <trans-unit id="user_form.label_name"> - <source>form.label_name</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="filter.label_username"> - <source>filter.label_username</source> - <target>Nom d'utilisateur</target> - </trans-unit> - <trans-unit id="filter.label_name"> - <source>filter.label_name</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="filter.label_email"> - <source>filter.label_email</source> - <target>Email</target> - </trans-unit> - <trans-unit id="filter.label_locked"> - <source>filter.label_locked</source> - <target>Verrouillé</target> - </trans-unit> - <trans-unit id="filter.label_id"> - <source>filter.label_id</source> - <target>ID</target> - </trans-unit> - <trans-unit id="filter.label_groups"> - <source>filter.label_groups</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="filter.label_created_at"> - <source>filter.label_created_at</source> - <target>Créé le</target> - </trans-unit> - <trans-unit id="filter.label_last_login"> - <source>filter.label_last_login</source> - <target>Dernière connexion</target> - </trans-unit> - <trans-unit id="filter.label_firstname"> - <source>filter.label_firstname</source> - <target>Prénom</target> - </trans-unit> - <trans-unit id="filter.label_lastname"> - <source>filter.label_lastname</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="list.label_username"> - <source>list.label_username</source> - <target>Nom d'utilisateur</target> - </trans-unit> - <trans-unit id="list.label_name"> - <source>list.label_name</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="list.label_email"> - <source>list.label_email</source> - <target>Adresse email</target> - </trans-unit> - <trans-unit id="list.label_groups"> - <source>list.label_groups</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="list.label_locked"> - <source>list.label_locked</source> - <target>Verrouillé</target> - </trans-unit> - <trans-unit id="list.label_enabled"> - <source>list.label_enabled</source> - <target>Activé</target> - </trans-unit> - <trans-unit id="list.label_created_at"> - <source>list.label_created_at</source> - <target>Créé le</target> - </trans-unit> - <trans-unit id="list.label_last_login"> - <source>list.label_last_login</source> - <target>Dernière connexion</target> - </trans-unit> - <trans-unit id="list.label_impersonating"> - <source>list.label_impersonating</source> - <target>Changer d'identité</target> - </trans-unit> - <trans-unit id="list.label_roles"> - <source>list.label_roles</source> - <target>Rôles</target> - </trans-unit> - <trans-unit id="list.label_firstname"> - <source>list.label_firstname</source> - <target>Prénom</target> - </trans-unit> - <trans-unit id="list.label_lastname"> - <source>list.label_lastname</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="label_two_step_code"> - <source>label_two_step_code</source> - <target>Validation en deux étapes</target> - </trans-unit> - <trans-unit id="message_two_step_code_help"> - <source>message_two_step_code_help</source> - <target>Rentrer votre code de validation provenant de votre téléphone</target> - </trans-unit> - <trans-unit id="label_two_step_code_error"> - <source>label_two_step_code_error</source> - <target>Le code de validation est invalide</target> - </trans-unit> - <trans-unit id="sonata_user"> - <source>sonata_user</source> - <target>Utilisateurs</target> - </trans-unit> - <trans-unit id="form_general"> - <source>General</source> - <target>Général</target> - </trans-unit> - <trans-unit id="form_groups"> - <source>Groups</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="form_management"> - <source>Management</source> - <target>Gestion</target> - </trans-unit> - <trans-unit id="form_profile"> - <source>Profile</source> - <target>Profil</target> - </trans-unit> - <trans-unit id="form_social"> - <source>Social</source> - <target>Social</target> - </trans-unit> - <trans-unit id="form_security"> - <source>Security</source> - <target>Sécurité</target> - </trans-unit> - <trans-unit id="field.label_roles_editable"> - <source>field.label_roles_editable</source> - <target>Rôles</target> - </trans-unit> - <trans-unit id="form.label_date_of_birth"> - <source>form.label_date_of_birth</source> - <target>Date de naissance</target> - </trans-unit> - <trans-unit id="form.label_firstname"> - <source>form.label_firstname</source> - <target>Prénom</target> - </trans-unit> - <trans-unit id="form.label_lastname"> - <source>form.label_lastname</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="form.label_website"> - <source>form.label_website</source> - <target>Site web</target> - </trans-unit> - <trans-unit id="form.label_biography"> - <source>form.label_biography</source> - <target>Biographie</target> - </trans-unit> - <trans-unit id="form.label_gender"> - <source>form.label_gender</source> - <target>Civilité</target> - </trans-unit> - <trans-unit id="form.label_locale"> - <source>form.label_locale</source> - <target>Langue</target> - </trans-unit> - <trans-unit id="form.label_timezone"> - <source>form.label_timezone</source> - <target>Fuseau horaire</target> - </trans-unit> - <trans-unit id="form.label_phone"> - <source>form.label_phone</source> - <target>Téléphone</target> - </trans-unit> - <trans-unit id="form.label_facebook_uid"> - <source>form.label_facebook_uid</source> - <target>Uid Facebook</target> - </trans-unit> - <trans-unit id="form.label_facebook_name"> - <source>form.label_facebook_name</source> - <target>Nom Facebook</target> - </trans-unit> - <trans-unit id="form.label_twitter_uid"> - <source>form.label_twitter_uid</source> - <target>Uid Twitter</target> - </trans-unit> - <trans-unit id="form.label_twitter_name"> - <source>form.label_twitter_name</source> - <target>Nom Twitter</target> - </trans-unit> - <trans-unit id="form.label_communs_uid"> - <source>form.label_communs_uid</source> - <target>Uid LesCommuns.org</target> - </trans-unit> - <trans-unit id="form.label_communs_name"> - <source>form.label_communs_name</source> - <target>Nom LesCommuns.org</target> - </trans-unit> - <trans-unit id="form.label_gplus_uid"> - <source>form.label_gplus_uid</source> - <target>Uid Google+</target> - </trans-unit> - <trans-unit id="form.label_gplus_name"> - <source>form.label_gplus_name</source> - <target>Nom Google+</target> - </trans-unit> - <trans-unit id="form.label_token"> - <source>form.label_token</source> - <target>Jeton</target> - </trans-unit> - <trans-unit id="form.label_two_step_verification_code"> - <source>form.label_two_step_verification_code</source> - <target>Code de validation en deux étapes</target> - </trans-unit> - <trans-unit id="show.label_username"> - <source>show.label_username</source> - <target>Nom d'utilisateur</target> - </trans-unit> - <trans-unit id="show.label_email"> - <source>show.label_email</source> - <target>Email</target> - </trans-unit> - <trans-unit id="show.label_groups"> - <source>show.label_groups</source> - <target>Groupes</target> - </trans-unit> - <trans-unit id="show.label_date_of_birth"> - <source>show.label_date_of_birth</source> - <target>Date de naissance</target> - </trans-unit> - <trans-unit id="show.label_firstname"> - <source>show.label_firstname</source> - <target>Prénom</target> - </trans-unit> - <trans-unit id="show.label_lastname"> - <source>show.label_lastname</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="show.label_website"> - <source>show.label_website</source> - <target>Site web</target> - </trans-unit> - <trans-unit id="show.label_biography"> - <source>show.label_biography</source> - <target>Biographie</target> - </trans-unit> - <trans-unit id="show.label_gender"> - <source>show.label_gender</source> - <target>Civilité</target> - </trans-unit> - <trans-unit id="show.label_locale"> - <source>show.label_locale</source> - <target>Langue</target> - </trans-unit> - <trans-unit id="show.label_timezone"> - <source>show.label_timezone</source> - <target>Fuseau horaire</target> - </trans-unit> - <trans-unit id="show.label_phone"> - <source>show.label_phone</source> - <target>Téléphone</target> - </trans-unit> - <trans-unit id="show.label_facebook_uid"> - <source>show.label_facebook_uid</source> - <target>Uid Facebook</target> - </trans-unit> - <trans-unit id="show.label_facebook_name"> - <source>show.label_facebook_name</source> - <target>Nom Facebook</target> - </trans-unit> - <trans-unit id="show.label_twitter_uid"> - <source>show.label_twitter_uid</source> - <target>Uid Twitter</target> - </trans-unit> - <trans-unit id="show.label_twitter_name"> - <source>show.label_twitter_name</source> - <target>Nom Twitter</target> - </trans-unit> - <trans-unit id="show.label_communs_uid"> - <source>show.label_communs_uid</source> - <target>Uid LesCommuns.org</target> - </trans-unit> - <trans-unit id="show.label_communs_name"> - <source>show.label_communs_name</source> - <target>Nom LesCommuns.org</target> - </trans-unit> - <trans-unit id="show.label_gplus_uid"> - <source>show.label_gplus_uid</source> - <target>Uid Google+</target> - </trans-unit> - <trans-unit id="show.label_gplus_name"> - <source>show.label_gplus_name</source> - <target>Nom Google+</target> - </trans-unit> - <trans-unit id="show.label_token"> - <source>show.label_token</source> - <target>Jeton</target> - </trans-unit> - <trans-unit id="show.label_two_step_verification_code"> - <source>show.label_two_step_verification_code</source> - <target>Code de validation en deux étapes</target> - </trans-unit> - <trans-unit id="show.label_created_at"> - <source>show.label_created_at</source> - <target>Créé le</target> - </trans-unit> - <trans-unit id="show.label_last_login"> - <source>show.label_last_login</source> - <target>Dernière connexion</target> - </trans-unit> - <trans-unit id="breadcrumb.link_user_show"> - <source>breadcrumb.link_user_show</source> - <target>Voir</target> - </trans-unit> - <trans-unit id="gender_unknown"> - <source>gender_unknown</source> - <target>non défini</target> - </trans-unit> - <trans-unit id="gender_female"> - <source>gender_female</source> - <target>femme</target> - </trans-unit> - <trans-unit id="gender_male"> - <source>gender_male</source> - <target>homme</target> - </trans-unit> - <trans-unit id="sonata_profile_title"> - <source>sonata_profile_title</source> - <target>Mon tableau de bord</target> - </trans-unit> - <trans-unit id="link_show_profile"> - <source>link_show_profile</source> - <target>Mon tableau de bord</target> - </trans-unit> - <trans-unit id="link_edit_profile"> - <source>link_edit_profile</source> - <target>Mon profil</target> - </trans-unit> - <trans-unit id="title_user_edit_authentication"> - <source>title_user_edit_authentication</source> - <target>Informations de connexion</target> - </trans-unit> - <trans-unit id="link_edit_authentication"> - <source>link_edit_authentication</source> - <target>Informations de connexion</target> - </trans-unit> - <trans-unit id="label_profile_gender"> - <source>label_profile_gender</source> - <target>Civilité</target> - </trans-unit> - <trans-unit id="label_profile_firstname"> - <source>label_profile_firstname</source> - <target>Prénom</target> - </trans-unit> - <trans-unit id="label_profile_lastname"> - <source>label_profile_lastname</source> - <target>Nom</target> - </trans-unit> - <trans-unit id="label_profile_website"> - <source>label_profile_website</source> - <target>Site web</target> - </trans-unit> - <trans-unit id="label_profile_dob"> - <source>label_profile_dob</source> - <target>Date de naissance</target> - </trans-unit> - <trans-unit id="label_profile_biography"> - <source>label_profile_biography</source> - <target>Biographie</target> - </trans-unit> - <trans-unit id="label_profile_locale"> - <source>label_profile_locale</source> - <target>Langue</target> - </trans-unit> - <trans-unit id="label_profile_timezone"> - <source>label_profile_timezone</source> - <target>Fuseau horaire</target> - </trans-unit> - <trans-unit id="label_profile_phone"> - <source>label_profile_phone</source> - <target>Téléphone</target> - </trans-unit> - <trans-unit id="profile.flash.updated"> - <source>profile.flash.updated</source> - <target>Votre profil a été mis à jour.</target> - </trans-unit> - <trans-unit id="sonata_change_password_link"> - <source>sonata_change_password_link</source> - <target>Changer votre mot de passe</target> - </trans-unit> - <trans-unit id="link_register"> - <source>link_register</source> - <target>S'inscrire</target> - </trans-unit> - <trans-unit id="link_login"> - <source>link_login</source> - <target>S'identifier</target> - </trans-unit> - <trans-unit id="link_logout"> - <source>link_logout</source> - <target>Se déconnecter</target> - </trans-unit> - <trans-unit id="registration.flash.user_created"> - <source>registration.flash.user_created</source> - <target>Votre compte a été créé avec succès !</target> - </trans-unit> - <trans-unit id="forgotten_password"> - <source>forgotten_password</source> - <target>Mot de passe oublié ?</target> - </trans-unit> - <trans-unit id="sonata_user_profile_breadcrumb_index"> - <source>sonata_user_profile_breadcrumb_index</source> - <target>Tableau de bord</target> - </trans-unit> - <trans-unit id="sonata_user_profile_breadcrumb_edit"> - <source>sonata_user_profile_breadcrumb_edit</source> - <target>Éditer votre profil</target> - </trans-unit> - <trans-unit id="sonata_user_already_authenticated"> - <source>sonata_user_already_authenticated</source> - <target>Vous êtes déjà identifié</target> - </trans-unit> - <trans-unit id="security.login.username"> - <source>security.login.username</source> - <target>Nom d'utilisateur</target> - </trans-unit> - <trans-unit id="security.login.password"> - <source>security.login.password</source> - <target>Mot de passe</target> - </trans-unit> - <trans-unit id="form.username"> - <source>form.username</source> - <target>Nom d'utilisateur</target> - </trans-unit> - <trans-unit id="form.email"> - <source>form.email</source> - <target>Adresse e-mail</target> - </trans-unit> - <trans-unit id="form.password"> - <source>form.password</source> - <target>Mot de passe</target> - </trans-unit> - <trans-unit id="form.location"> - <source>form.location</source> - <target>Votre code postal ou votre adresse</target> - </trans-unit> - <trans-unit id="form.newsletterFrequency"> - <source>form.newsletterFrequency</source> - <target>La fréquence à laquelle vous voulez être tenu informé</target> - </trans-unit> - <trans-unit id="form.password_confirmation"> - <source>form.password_confirmation</source> - <target>Retapez votre mot de passe</target> - </trans-unit> - <trans-unit id="title_user_edit_password"> - <source>title_user_edit_password</source> - <target>Modification du mot de passe</target> - </trans-unit> - <trans-unit id="title_user_resetting"> - <source>title_user_resetting</source> - <target>Demande d'un nouveau mot de passe</target> - </trans-unit> - <trans-unit id="title_user_resetting_reset"> - <source>title_user_resetting_reset</source> - <target>Réinitialiser votre mot de passe</target> - </trans-unit> - - <trans-unit id="resetting.flash.success"> - <source>resetting.flash.success</source> - <target>Le mot de passe a été réinitialisé avec succès</target> - </trans-unit> - - </body> - </file> -</xliff> diff --git a/src/Application/Sonata/UserBundle/Security/CustomRoleSecurityHandler.php b/src/Application/Sonata/UserBundle/Security/CustomRoleSecurityHandler.php index 4148c351f08bdf9bdeeba08dca456ae19e8722b0..c1929a050202074c70567cff9a9ff6fa3b6a03f1 100755 --- a/src/Application/Sonata/UserBundle/Security/CustomRoleSecurityHandler.php +++ b/src/Application/Sonata/UserBundle/Security/CustomRoleSecurityHandler.php @@ -23,7 +23,7 @@ class CustomRoleSecurityHandler implements SecurityHandlerInterface $adminCode = $admin->getCode(); // use same permission for all option/categories objects - if (in_array($adminCode, ['admin.option_hidden', 'admin.option.lite_hidden', 'admin.categories.lite_hidden'])) { + if (in_array($adminCode, ['admin.options', 'admin.option.lite_hidden', 'admin.categories.lite_hidden'])) { $adminCode = 'admin.categories'; } diff --git a/src/Block/ChartBlockService.php b/src/Block/ChartBlockService.php index 7b4a7baf47ce8491b0afb0de56a12ec6befb9df5..661747b00be82c161a0db2dccdbc1b533ce28369 100755 --- a/src/Block/ChartBlockService.php +++ b/src/Block/ChartBlockService.php @@ -170,7 +170,7 @@ class ChartBlockService extends AbstractBlockService return $contribsResolvedPie; } - private function dateRange($first, $last, $step = '+1 day', $format = 'm/d/Y') // TODO translate + private function dateRange($first, $last, $step = '+1 day', $format = 'm/d/Y') // TODO translate use local ? { $dates = []; $current = strtotime($first); @@ -230,7 +230,7 @@ class ChartBlockService extends AbstractBlockService ->expression( $builder->expr() ->field('day') - ->dateToString('%m/%d/%Y', '$'.$groupField) // TODO translate ? + ->dateToString('%m/%d/%Y', '$'.$groupField) // TODO translate use locale ? ) ->field('count') ->sum(1) diff --git a/src/Command/AddMessageCommand.php b/src/Command/AddMessageCommand.php index 6ea79d836eb0e91931c5035ce8d16a655de49305..79bcbd3546d01ef3f24118e213f2b2af2651f90b 100755 --- a/src/Command/AddMessageCommand.php +++ b/src/Command/AddMessageCommand.php @@ -18,7 +18,7 @@ class AddMessageCommand extends GoGoAbstractCommand { $this->setName('gogolog:add:message') ->addArgument('message', InputArgument::REQUIRED, 'Message to add') // TODO translate ? - ->setDescription('Update datatabse each time after code update'); // TODO translate ? + ->setDescription('Update database each time after code update'); // TODO translate ? } protected function gogoExecute(DocumentManager $dm, InputInterface $input, OutputInterface $output): void diff --git a/src/Command/CheckExternalSourceToUpdateCommand.php b/src/Command/CheckExternalSourceToUpdateCommand.php index 3e6ed58dab03ece5b1952c49d3f161a7f8bad1cd..8c1348a37363ba5ef15ac6a9702820c298501a62 100755 --- a/src/Command/CheckExternalSourceToUpdateCommand.php +++ b/src/Command/CheckExternalSourceToUpdateCommand.php @@ -39,7 +39,7 @@ class CheckExternalSourceToUpdateCommand extends GoGoAbstractCommand ->getCursor(); if ($count = $dynamicImports->count() > 0) { - $this->log("CheckExternalSourceToUpdate : Nombre de sources à mettre à jour : $count"); // TODO translate + $this->log("CheckExternalSourceToUpdate : # sources to update : $count"); // TODO translate ? $command = $this->getApplication()->find('app:elements:importSource'); diff --git a/src/Command/GenerateElementsCommand.php b/src/Command/GenerateElementsCommand.php index 9e95112583910a50efd3b9a0df1675a1dd5a57ed..3f2a012f983cd2710e677fe955246fd0e05a7889 100755 --- a/src/Command/GenerateElementsCommand.php +++ b/src/Command/GenerateElementsCommand.php @@ -38,6 +38,6 @@ class GenerateElementsCommand extends GoGoAbstractCommand $randomService->generate($input->getArgument('number'), $input->getArgument('generateVotes')); - $this->log('Element générés !'); // TODO translate ? + $this->log('Element generated !'); // TODO translate ? } } diff --git a/src/Command/MigrationCommand.php b/src/Command/MigrationCommand.php index 51875ff3a7abc70ebca6ecf943f09601e2d02812..f752e9cf69226ba9abb2604169abcf2e76913d96 100755 --- a/src/Command/MigrationCommand.php +++ b/src/Command/MigrationCommand.php @@ -59,7 +59,7 @@ class MigrationCommand extends Command public static $messages = [ // v2.3.0 - 'Un champ <b>Image (url)</b> est maintenant disponible dans la confiugration du formulaire !', // TODO translate + 'Un champ <b>Image (url)</b> est maintenant disponible dans la configuration du formulaire !', // TODO translate "Vous pouvez désormais customizer la popup qui s'affiche au survol d'un marqueur. Allez dans Personnalisation -> Marqueur / Popup", // TODO translate "Nouvelle option pour le menu (Personnalisation -> La Carte -> onglet Menu) : afficher à côté de chaque catégories le nombre d'élements disponible pour cette catégorie", // TODO translate // v2.3.1 diff --git a/src/Controller/Admin/ConfigurationAdminController.php b/src/Controller/Admin/ConfigurationAdminController.php index 3f13862c78d8485be07a264361820e773dd591de..af6f961d5d1edafcd49ef7f6bda8c1f141303bf0 100755 --- a/src/Controller/Admin/ConfigurationAdminController.php +++ b/src/Controller/Admin/ConfigurationAdminController.php @@ -26,7 +26,7 @@ class ConfigurationAdminController extends Controller public function deleteAction($id) { // do nothing - $this->addFlash('sonata_flash_error', 'Impossible de supprimer la configuration, cette action est interdite car est elle casserait toute votre carte'); // TODO translate + $this->addFlash('sonata_flash_error', $this->trans('config_general.cannot_delete')); return $this->redirect($this->admin->generateUrl('edit', ['id' => $id])); } diff --git a/src/Controller/Admin/UserAdminController.php b/src/Controller/Admin/UserAdminController.php index 76a9f80df38a53ae4206b8179dfb775731334abe..0f7693280fec17285d810b2264972c7147d59c4d 100755 --- a/src/Controller/Admin/UserAdminController.php +++ b/src/Controller/Admin/UserAdminController.php @@ -37,17 +37,17 @@ class UserAdminController extends Controller } } } catch (\Exception $e) { - $this->addFlash('sonata_flash_error', $this->trans('batch.error', [$e->getMessage()], 'admin')); + $this->addFlash('sonata_flash_error', $this->trans('sonata.user.user.batch.error', [$e->getMessage()], 'admin')); return new RedirectResponse($this->admin->generateUrl('list', $this->admin->getFilterParameters())); } if (!$request->get('mail-subject') || !$request->get('mail-content')) { - $this->addFlash('sonata_flash_error', $this->trans('batch.mailError', [], 'admin')); + $this->addFlash('sonata_flash_error', $this->trans('sonata.user.user.batch.mailError', [], 'admin')); } elseif (count($mails) > 0) { $result = $this->mailService->sendMail(null, $request->get('mail-subject'), $request->get('mail-content'), $request->get('from'), $mails); if ($result['success']) { - $this->addFlash('sonata_flash_success', $this->trans('batch.sendmails', ['%count%' => count($mails)], 'admin')); + $this->addFlash('sonata_flash_success', $this->trans('sonata.user.user.batch.sendmails', ['%count%' => count($mails)], 'admin')); } else { $this->addFlash('sonata_flash_error', $result['message']); } @@ -59,7 +59,7 @@ class UserAdminController extends Controller $limit = 5000; if ($nbreModelsToProceed >= $limit) { - $this->addFlash('sonata_flash_info', $this->trans('batch.tooMany', ['%limit%' => $limit], 'admin')); + $this->addFlash('sonata_flash_info', $this->trans('sonata.user.user.batch.tooMany', ['%limit%' => $limit], 'admin')); } return new RedirectResponse($this->admin->generateUrl('list', $this->admin->getFilterParameters())); diff --git a/src/Controller/ElementFormController.php b/src/Controller/ElementFormController.php index 82f8b3cac00040f8e0064143e9049115758665d2..35011bd941764899c01a1d2e7e3fc552084e09a5 100755 --- a/src/Controller/ElementFormController.php +++ b/src/Controller/ElementFormController.php @@ -75,7 +75,7 @@ class ElementFormController extends GoGoController $elementFormService, $userManager, $elementActionService, $loginManager, TranslatorInterface $t) { if (null === $element) { - throw new NotFoundHttpException($t->trans('element.form.controller.http_error_dont_exist')); + throw new NotFoundHttpException($t->trans('element.form.controller.error_dont_exist')); } $addOrEditComplete = false; diff --git a/src/Controller/MailTestController.php b/src/Controller/MailTestController.php index b9c3f6d11cae5c987c43fe9aff278aedaa06feb7..256174766afec71bb3333170bc73dbab1c13a010 100755 --- a/src/Controller/MailTestController.php +++ b/src/Controller/MailTestController.php @@ -21,12 +21,17 @@ class MailTestController extends Controller $this->t = $t; } + private function trans($key, $params = []) + { + return $this->t->trans($key, $params, 'admin'); + } + public function draftAutomatedAction($mailType) { $draftResponse = $this->draftTest($mailType); if (null == $draftResponse) { - return new Response($t->trans('action.mailtest.draftAutomated.uncomplete')); + return new Response($this->trans('emails.test.uncomplete')); } if ($draftResponse['success']) { @@ -45,13 +50,13 @@ class MailTestController extends Controller $mail = $request->get('email'); if (!$mail) { - return new Response($t->trans('action.mailtest.sentTestAutomated.uncomplete')); + return new Response($this->trans('emails.test.missing_email')); } $draftResponse = $this->draftTest($mailType); if (null == $draftResponse) { - $this->addFlash('error', $t->trans('action.mailtest.sentTestAutomated.database_empty')); + $this->addFlash('error', $this->trans('emails.test.missing_element')); return $this->redirectToRoute('admin_app_configuration_list'); } @@ -59,12 +64,12 @@ class MailTestController extends Controller if ($draftResponse['success']) { $result = $this->mailService->sendMail($mail, $draftResponse['subject'], $draftResponse['content']); if ($result['success']) { - $this->addFlash('success', $t->trans('action.mailtest.sentTestAutomated.done', ['%mail%' => $mail])); + $this->addFlash('success', $this->trans('emails.test.done', ['%mail%' => $mail])); } else { $this->addFlash('error', $result['message']); } } else { - $this->addFlash('error', $t->trans('action.error', ['%message%' => $draftResponse['message']] )); + $this->addFlash('error', $this->trans('action.error', ['%message%' => $draftResponse['message']] )); } return $this->redirectToRoute('gogo_mail_draft_automated', ['mailType' => $mailType]); @@ -90,7 +95,7 @@ class MailTestController extends Controller return null; } - $draftResponse = $this->mailService->draftEmail($mailType, $element, $this->t->trans('action.mailtest.draftTest.done'), $options); + $draftResponse = $this->mailService->draftEmail($mailType, $element, $this->trans('emails.test.custom_message_example'), $options); return $draftResponse; } diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 56feff4310517b747d384592e294d1195236c3ca..3d4ceb9eb2faa00f1f7c26e96926bab262faa0be 100755 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -22,6 +22,7 @@ use Symfony\Component\Routing\Annotation\Route; use Psr\Log\LoggerInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Exception\AccountStatusException; +use Symfony\Contracts\Translation\TranslatorInterface; class ProjectController extends Controller { @@ -147,7 +148,8 @@ class ProjectController extends Controller public function initializeAction(Request $request, DocumentManager $dm, UserManagerInterface $userManager, LoginManagerInterface $loginManager, - ConfigurationListener $confService) + ConfigurationListener $confService, + TranslatorInterface $t) { // Return if already existing users $users = $dm->get('User')->findAll(); @@ -172,9 +174,7 @@ class ProjectController extends Controller $user->setRoles(['ROLE_SUPER_ADMIN']); $userManager->updateUser($user, true); - $this->addFlash('success', "<b>Bienvenue dans votre espace Administrateur !</b></br> - L'aventure commence tout juste pour vous, il vous faut maintenant commencer à configurer votre site :)</br> - <a target='_blank' href='https://doc.gogocarto.fr/'>Consulter la documentation</a> pour vous aider à démarrer ! Tutoriels vidéos, foire aux questions..."); // TODO translate + $this->addFlash('success', $t->trans('dashboard.welcome')); $response = $this->redirectToRoute('sonata_admin_dashboard'); $this->authenticateUser($user, $response, $loginManager); diff --git a/src/DataFixtures/MongoDB/LoadConfiguration.php b/src/DataFixtures/MongoDB/LoadConfiguration.php index 1d9f9af47af84fd376ba33f698d8336baad090f8..b49029bfbafc049bb304a68dd07c71d32c601a66 100755 --- a/src/DataFixtures/MongoDB/LoadConfiguration.php +++ b/src/DataFixtures/MongoDB/LoadConfiguration.php @@ -75,7 +75,7 @@ class LoadConfiguration implements FixtureInterface $configuration->setActivateHomePage(true); $confHome = new ConfigurationHome(); $confHome->setDisplayCategoriesToPick(false); - $confHome->setAddElementHintText($t->trans('load_configuration.AddElementHintText')); // TODO check translation + $confHome->setAddElementHintText('Contribuez à enrichir la base de donnée !'); // TODO check translation $confHome->setSeeMoreButtonText('En savoir plus'); // TODO translate $configuration->setHome($confHome); diff --git a/src/DataFixtures/MongoDB/LoadTaxonomy.php b/src/DataFixtures/MongoDB/LoadTaxonomy.php index be624421798bc9fc6e1a1f8b53c963e8681f92fd..8803e39bf60cca0ed6cff35919cebe725802a755 100755 --- a/src/DataFixtures/MongoDB/LoadTaxonomy.php +++ b/src/DataFixtures/MongoDB/LoadTaxonomy.php @@ -37,8 +37,8 @@ class LoadTaxonomy implements FixtureInterface // main $mainCategory = new Category(); - $mainCategory->setName('Catégories Principales'); - $mainCategory->setPickingOptionText('Une catégorie principale'); + $mainCategory->setName('Catégories Principales'); // TODO translate + $mainCategory->setPickingOptionText('Une catégorie principale'); // TODO translate $mainCategory->setIndex(1); $mainCategory->setSingleOption(false); $mainCategory->setEnableDescription(false); diff --git a/src/Repository/ElementRepository.php b/src/Repository/ElementRepository.php index c04579574793307e9a09b8db755ef47a71d28ff9..3ca1fdeb3885f1dacd0f805b384c8fcf77f4df7b 100755 --- a/src/Repository/ElementRepository.php +++ b/src/Repository/ElementRepository.php @@ -421,7 +421,8 @@ class ElementRepository extends DocumentRepository $queryResult = $builder->execute(); $result = []; foreach ($queryResult as $key => $value) { - $result[$value['_id']['$id']] = $value['count']; + if (!empty($id)) + $result[$value['_id']['$id']] = $value['count']; } return $result; diff --git a/src/Services/ElementImportService.php b/src/Services/ElementImportService.php index f48fca576008e8ecca839032fec801a9fa82cf05..2ab1ed5508e141626ea2373b81af1a6d2e571b05 100755 --- a/src/Services/ElementImportService.php +++ b/src/Services/ElementImportService.php @@ -48,8 +48,7 @@ class ElementImportService private function trans($key, $params = []) { - // return $this->t->trans($key, $params, 'admin'); // TODO translation issue !! - return $this->t->trans($key, $params); + return $this->t->trans($key, $params, 'admin'); } public function startImport($import, $manuallyStarted = true) diff --git a/src/Services/MailService.php b/src/Services/MailService.php index 4ccdf93c88b49fba3dc221be5ad037473ac3b578..cb8e2c626e681a24ccf9eb797f7b8d4d6ca042f8 100755 --- a/src/Services/MailService.php +++ b/src/Services/MailService.php @@ -9,6 +9,7 @@ use App\Document\User; use App\Document\UserInteractionReport; use Doctrine\ODM\MongoDB\DocumentManager; use Twig\Environment; +use Symfony\Contracts\Translation\TranslatorInterface; class MailService { @@ -23,7 +24,7 @@ class MailService public function __construct(DocumentManager $dm, \Swift_Mailer $mailer, Environment $twig, UrlService $urlService, - $fromEmail, $instanceName) + $fromEmail, $instanceName, TranslatorInterface $t) { $this->dm = $dm; $this->newsRepository = $this->dm->getRepository(News::class); @@ -32,6 +33,12 @@ class MailService $this->twig = $twig; $this->email = $fromEmail; $this->instanceName = $instanceName; + $this->t = $t; + } + + private function trans($key, $params = []) + { + return $this->t->trans($key, $params, 'admin'); } public function sendMail($to, $subject, $content, $from = null, $toBCC = null) @@ -59,12 +66,12 @@ class MailService $this->mailer->send($message); } catch (\Swift_RfcComplianceException $e) { - $error = 'Une erreur est survenue : '.$e->getMessage(); // TODO translate + $error = $this->trans('emails.service.error').$e->getMessage(); return ['success' => false, 'message' => $error]; } - - return ['success' => true, 'message' => 'The message has been send']; // TODO translate + + return ['success' => true, 'message' => $this->trans('emails.service.success')]; } public function sendAutomatedMail($mailType, $element, $customMessage = null, $option = null) @@ -74,14 +81,14 @@ class MailService } // do not send email to dynamically imported elements if (!$customMessage) { - $customMessage = 'Pas de message particulier'; // TODO translate + $customMessage = $this->trans('emails.service.no_specific_message'); } $mailConfig = $this->getAutomatedMailConfigFromType($mailType); if (!$mailConfig) { - return ['success' => false, 'message' => $mailType.' configuration does not exist']; // TODO translate + return [ 'success' => false, 'message' => $this->trans('emails.service.unknown_config', ['%config%' => $mailType]) ]; } if (!$mailConfig->getActive()) { - return ['success' => false, 'message' => $mailType.' automated mail disabled']; // TODO translate + return [ 'success' => false, 'message' => $this->trans('emails.service.inactive_config', ['%config%' => $mailType]) ]; } $draftResponse = $this->draftEmail($mailType, $element, $customMessage, $option); @@ -98,7 +105,7 @@ class MailService if ($mailTo && 'no email' != $mailTo) { return $this->sendMail($mailTo, $draftResponse['subject'], $draftResponse['content']); } else { - return ['success' => false, 'message' => 'No email address to deliver to']; // TODO translate + return ['success' => false, 'message' => $this->trans('emails.service.no_email')]; } } else { return $draftResponse; @@ -110,14 +117,14 @@ class MailService $mailConfig = $this->getAutomatedMailConfigFromType($mailType); if (null == $mailConfig) { - return ['success' => false, 'message' => $mailType.' automated mail does not exist']; // TODO translate + return [ 'success' => false, 'message' => $this->trans('emails.service.no_automatic_mail', ['%config%' => $mailType]) ]; } $subject = $mailConfig->getSubject(); $content = $mailConfig->getContent(); if (!$mailConfig->getSubject() || !$mailConfig->getContent()) { - return ['success' => false, 'message' => $mailType.' automated mail missing subject or content']; // TODO translate + return [ 'success' => false, 'message' => $this->trans('emails.service.no_subject_or_content', ['%config%' => $mailType]) ]; } if ('newsletter' == $mailType) { @@ -174,7 +181,7 @@ class MailService if ('report' == $mailType && $option && $option instanceof UserInteractionReport) { $user = $option->getUserDisplayName(); } else { - $user = $contribution ? $contribution->getUserDisplayName() : 'Inconnu'; // TODO translate + $user = $contribution ? $contribution->getUserDisplayName() : $this->trans('emails.service.unknown'); } $string = preg_replace('/({{((?:\s)+)?element((?:\s)+)?}})/i', $elementName, $string); diff --git a/templates/admin/core_custom/custom-fields/element-address.html.twig b/templates/admin/core_custom/custom-fields/element-address.html.twig index 3bf51135486c211fd56734c5972246993d978de9..4b59c9af98a38f7937a3ebfba57f2822f0844e78 100755 --- a/templates/admin/core_custom/custom-fields/element-address.html.twig +++ b/templates/admin/core_custom/custom-fields/element-address.html.twig @@ -31,7 +31,7 @@ <input type="hidden" name="longitude" id="input-longitude" value="{{ element.geo.longitude }}" /> <center> - <button type="button" class="btn btn-default geocode-btn">Geocode adresse</button> {# TODO Translation #} + <button type="button" class="btn btn-default geocode-btn">{{ 'elements.action.edit.geocode'|trans }}</button> </center> <div class="alert alert-danger" id="geocode-error"></div> <div id="address-preview-map"></div> diff --git a/templates/admin/core_custom/custom-fields/element-data.html.twig b/templates/admin/core_custom/custom-fields/element-data.html.twig index 7e56e86f7d8bb96abbb3562a337ce5f46c392ec3..4f5ec50e34c0b77a763b18790d0c133da1c411ce 100755 --- a/templates/admin/core_custom/custom-fields/element-data.html.twig +++ b/templates/admin/core_custom/custom-fields/element-data.html.twig @@ -4,7 +4,7 @@ {% set config = form.vars.sonata_admin.admin.config %} {% if element.isFromOsm %} - <a href={{ element.getOsmUrl(config) }} target="_blank">{{ 'elements.form.seeOnOSM'|trans }}</a> + <a href={{ element.getOsmUrl(config) }} target="_blank">{{ 'elements.form.groups.seeOnOSM'|trans }}</a> {% endif %} {% if element.duplicateOf %} @@ -49,7 +49,7 @@ </tbody> </table> <button type="button" class="btn btn-add-field btn-default btn-sm" @click="addField()"> - {{ 'elements.form.addCustomField'|trans }} + {{ 'elements.form.groups.addCustomField'|trans }} </button> </div> <h4>{{ 'elements.form.groups.specialFields'|trans }}</h4> diff --git a/templates/admin/core_custom/custom-fields/element-import.html.twig b/templates/admin/core_custom/custom-fields/element-import.html.twig index 1cc148dea21a87d83b4f62dd540228d525a4ec09..13b6f90ae54627864d820632a301650bbb884693 100755 --- a/templates/admin/core_custom/custom-fields/element-import.html.twig +++ b/templates/admin/core_custom/custom-fields/element-import.html.twig @@ -1,11 +1,14 @@ +{% trans_default_domain 'admin' %} + {% set formName = form.vars.full_name|split('[')|first %} <div id="element-import"> <select class="source-type form-control" data-sonata-select2="false" v-model="sourceType" name="sourceType"> <option></option> - <option value="csv">Fichier CSV</option> {# TODO Translation #} - <option value="json">API Json</option> {# TODO Translation #} - <option value="osm">OpenStreetMap</option> {# TODO Translation #} + {# TODO translation : add loop #} + <option value="csv">{{ 'elements.fields.sourceType_choices.csv'|trans }}</option> + <option value="json">{{ 'elements.fields.sourceType_choices.json'|trans }}</option> + <option value="osm">{{ 'elements.fields.sourceType_choices.osm'|trans }}</option> </select> <osm-query-builder v-if="sourceType == 'osm'" @@ -16,7 +19,7 @@ @osm-url-changed="url = $event"> </osm-query-builder> - <!--Input to save OSM query as Json --> + <!--Input to save OSM query as JSON --> <input type="hidden" :name="formName + '[osmQueriesJson]'" :value="osmQueryInputValue"/> <div v-show="sourceType == 'csv'" class="file-container"> @@ -24,7 +27,7 @@ </div> <div v-show="sourceType == 'json'"> - <label>Url de l'API JSON</label> {# TODO Translation #} + <label>{{ 'elements.fields.sourceTypeJSON'|trans }}</label> <input type="url" class="form-control" v-model="url" :name="`${formName}[url]`"/> </div> </div> diff --git a/templates/admin/core_custom/custom-fields/file.html.twig b/templates/admin/core_custom/custom-fields/file.html.twig index cf4549156f223aabb03db2dd291dcce966e26c28..a04617efa0fd5a9ff1346e1a7ee750f02bf7939c 100755 --- a/templates/admin/core_custom/custom-fields/file.html.twig +++ b/templates/admin/core_custom/custom-fields/file.html.twig @@ -10,7 +10,7 @@ {% if extension in ['jpg', 'jpeg', 'png', 'gif', 'svg'] %} <img src="{{ filePath }}" class="thumbnail"/> {% else %} - {{ 'app.fields.actualFile'|trans }} <i>{{ filePath|split('/')|last }}</i> + {{ 'commons.actual_file'|trans }} <i>{{ filePath|split('/')|last }}</i> {% endif %} {% endif %} {% endif %} diff --git a/templates/admin/core_custom/custom-fields/filters-builder.html.twig b/templates/admin/core_custom/custom-fields/filters-builder.html.twig index 82cf45d9931e4ff1083098c8d8b96af824db4424..487f7b76f62906aecd11429eb793e1b5a41c6c37 100755 --- a/templates/admin/core_custom/custom-fields/filters-builder.html.twig +++ b/templates/admin/core_custom/custom-fields/filters-builder.html.twig @@ -18,10 +18,10 @@ formBuilderInitialized = true; jQuery(function($) { var fields = [ - { label: 'Filtre Catégories', name: "taxonomy", attrs: { type: 'taxonomy' }, icon: '*' }, // TODO translate - { label: 'Filtre Date', name: "gogo_date", attrs: { type: 'gogo_date' }, icon: ' ' }, // TODO translate - { label: 'Filtre Nombre', name: "gogo_number", attrs: { type: 'gogo_number' }, icon: ' ' }, // TODO translate - ]; + { label:t('js.filters_builder.taxonomy'), name: "taxonomy", attrs: { type: 'taxonomy' }, icon: '*' }, + { label:t('js.filters_builder.gogo_date'), name: "gogo_date", attrs: { type: 'gogo_date' }, icon: ' ' }, + { label:t('js.filters_builder.gogo_number'), name: "gogo_number", attrs: { type: 'gogo_number' }, icon: ' ' }, +]; var displayFilter = function(fieldData) { result = fieldData.field ? "Champ utilisé : " + fieldData.field : "Veuillez choisir le champ à utiliser" // TODO translate diff --git a/templates/admin/core_custom/custom-fields/form-builder.html.twig b/templates/admin/core_custom/custom-fields/form-builder.html.twig index f6c1b42998415521d0dbae4171d59b49675e75bc..8d8d19db55efeaa2402d2c6cc01c1da531f1dcc7 100755 --- a/templates/admin/core_custom/custom-fields/form-builder.html.twig +++ b/templates/admin/core_custom/custom-fields/form-builder.html.twig @@ -15,47 +15,47 @@ var fbEditor = document.getElementById('form-builder-container'); var fields = [ - { label: 'Titre de la fiche (obligatoire)', name: "title", attrs: { type: 'title' }, icon: '*' }, // TODO Translation - { label: 'Catégories (obligatoire)', name: "taxonomy", attrs: { type: 'taxonomy' }, icon: '*' }, // TODO Translation - { label: 'Adresse (obligatoire)', name: "address", attrs: { type: 'address' }, icon: '*' }, // TODO Translation - { label: 'Horaires d\'ouvertures', name: "openhours", attrs: { type: 'openhours' }, icon: '⌚' }, // TODO Translation - { label: 'Séparateur de section', name: "separator", attrs: { type: 'separator' }, icon: '⚊' }, // TODO Translation - { label: 'Case à cocher', name: "checkbox", attrs: { type: 'checkbox' }, icon: '☑' }, // TODO Translation - { label: 'Email principal', name: "email", attrs: { type: 'email' }, icon: '@' }, // TODO Translation - { label: 'Images (upload)', name: "images", attrs: { type: 'images' }, icon: '⇫' }, // TODO Translation - { label: 'Fichiers (upload)', name: "files", attrs: { type: 'files' }, icon: '⇫' }, // TODO Translation - { label: 'Lien vers un autre élément', name: "elements", attrs: { type: 'elements' }, icon: '*' }, // TODO Translation + { label:t('js.form_builder.fields.title'), name: "title", attrs: { type: 'title' }, icon: '*' }, + { label:t('js.form_builder.fields.taxonomy'), name: "taxonomy", attrs: { type: 'taxonomy' }, icon: '*' }, + { label:t('js.form_builder.fields.address'), name: "address", attrs: { type: 'address' }, icon: '*' }, + { label:t('js.form_builder.fields.openhours'), name: "openhours", attrs: { type: 'openhours' }, icon: '⌚' }, + { label:t('js.form_builder.fields.separator'), name: "separator", attrs: { type: 'separator' }, icon: '⚊' }, + { label:t('js.form_builder.fields.checkbox'), name: "checkbox", attrs: { type: 'checkbox' }, icon: '☑' }, + { label:t('js.form_builder.fields.email'), name: "email", attrs: { type: 'email' }, icon: '@' }, + { label:t('js.form_builder.fields.images'), name: "images", attrs: { type: 'images' }, icon: '⇫' }, + { label:t('js.form_builder.fields.files'), name: "files", attrs: { type: 'files' }, icon: '⇫' }, + { label:t('js.form_builder.fields.elements'), name: "elements", attrs: { type: 'elements' }, icon: '*' } ]; var templates = { - title: function(fieldData) { return { field: '<input id="' + fieldData.name + '"><span class="mandatory"> Ce champ est indispensable</span>' }; }, // TODO Translation - address: function(fieldData) { return { field: '<input id="' + fieldData.name + '"><span class="mandatory"> Ce champ est indispensable</span>' }; }, // TODO Translation - taxonomy: function(fieldData) { return { field: '<select id="' + fieldData.name + '"><option>Choisissez une catégorie principale</option></select><span class="mandatory"> Ce champ est indispensable</span>' }; }, // TODO Translation - openhours: function(fieldData) { return { field: 'Bloc contenant un selecteur d\'horaires' }; }, // TODO Translation + title: function(fieldData) { return { field: '<input id="' + fieldData.name + '"><span class="mandatory">' +t('js.form_builder.fields.title_help') + '</span>' }; }, + address: function(fieldData) { return { field: '<input id="' + fieldData.name + '"><span class="mandatory">' +t('js.form_builder.fields.address_help') + '</span>' }; }, + taxonomy: function(fieldData) { return { field: '<select id="' + fieldData.name + '"><option>Choisissez une catégorie principale</option></select><span class="mandatory">' +t('js.form_builder.fields.taxonomy_help') + '</span>' }; }, + openhours: function(fieldData) { return { field:t('js.form_builder.fields.openhours_help') }; }, separator: function(fieldData) { return { field: '<hr>' }; }, checkbox: function(fieldData) { return { field: '<input id="' + fieldData.name + '"' + (fieldData.defaultvalue == "yes" ? 'checked="checked"' : '') + ' type="checkbox"/>' }; }, - email: function(fieldData) { return { field: '<input id="' + fieldData.name + '"' + ' type="email"/><span class="mandatory"> Ce champ est conseillé (permet d\'envoyer des emails)</span>' }; }, // TODO Translation + email: function(fieldData) { return { field: '<input id="' + fieldData.name + '"' + ' type="email"/><span class="mandatory">' +t('js.form_builder.fields.email_help') + '</span>' }; }, images: function(fieldData) { return { field: '<input id="' + fieldData.name + '"' + ' type="file" accept="images/*"/>' }; }, files: function(fieldData) { return { field: '<input id="' + fieldData.name + '"' + ' type="file" accept="'+fieldData.accept+'"/>' }; }, image: function(fieldData) { return { field: '<input id="' + fieldData.name + '"' + ' type="text"/>' }; }, elements: function(fieldData) { return { field: '<select id="' + fieldData.name + '"><option>'+ fieldData.label+'</option></select>' }; }, }; - var iconAttr = { label: 'Icone', placeholder: 'Choisissez une icone' } - var labelAttr = { label: 'Label' } - var errorMsgAttrs = { label: "Msg. Erreur", placeholder: "Oups ce texte est un peu long ! // Veuillez renseigner une adresse email valide // ..." } - var searchAttrs = { label: 'Recherche dans ce champ', type: 'checkbox' }; - var searchWeightAttrs = { label: 'Poids de la recherche', type: 'number', value: "1" }; - var patternAttrs = { label: 'Pattern de validation', placeholder: "Expression régulière pour la validation de ce champ" }; + var iconAttr = { label:t('js.form_builder.icon'), placeholder:t('js.form_builder.icon_placeholder') } + var labelAttr = { label:t('js.form_builder.label') } + var errorMsgAttrs = { label:t('js.form_builder.errorMsg'), placeholder:t('js.form_builder.errorMsg_placeholder') } + var searchAttrs = { label:t('js.form_builder.search'), type: 'checkbox' }; + var searchWeightAttrs = { label:t('js.form_builder.searchWeigh'), type: 'number', value: "1" }; + var patternAttrs = { label:t('js.form_builder.pattern'), placeholder:t('js.form_builder.pattern_placeholder') }; var typeUserAttrs = { text: { icon: iconAttr, label: labelAttr, separator: { label: '' }, // separate important attrs from others subtype: { label: 'Type', options: { - 'text': 'Texte', // TODO Translation - 'tel': 'Téléphone', // TODO Translation - 'email': 'Courriel', // TODO Translation - 'url': 'Url' // TODO Translation + 'text':t('js.form_builder.subtype.text'), + 'tel':t('js.form_builder.subtype.tel'), + 'email':t('js.form_builder.subtype.email'), + 'url':t('js.form_builder.subtype.url') }, }, search: searchAttrs, @@ -67,8 +67,8 @@ icon: iconAttr, label: labelAttr, subtype: { label: 'Type', options: { - 'textarea': 'Editeur simple', // TODO Translation - 'wysiwyg': 'Editeur enrichi', // TODO Translation + 'textarea':t('js.form_builder.subtype.textarea'), + 'wysiwyg':t('js.form_builder.subtype.wysiwyg') }, }, search: searchAttrs, @@ -78,7 +78,7 @@ }, paragraph: { label: { - label: "Contenu", + label:t('js.form_builder.content'), type: "textarea" } }, @@ -87,7 +87,7 @@ number: { icon: iconAttr, label: labelAttr, errorMsg: errorMsgAttrs }, title: { label: labelAttr, - maxlength: { label: "Longueur Max."}, + maxlength: { label:t('js.form_builder.maxlength')}, icon: iconAttr, search: searchAttrs, searchWeight: searchWeightAttrs, @@ -97,8 +97,8 @@ address: { icon: iconAttr, label: labelAttr }, 'checkbox-group': { style: { - label: 'Style des cases', - options: { 'normal': 'Normal', 'filled': 'Plein' } + label:t('js.form_builder.style'), + options: { 'normal':t('js.form_builder.options.normal'), 'filled':t('js.form_builder.options.filled') } }, errorMsg: errorMsgAttrs, label: labelAttr @@ -106,8 +106,8 @@ checkbox: { label: labelAttr, defaultvalue: { - label: 'Valeur initiale', - options: { 'no': 'Non cochée', 'yes': 'Cochée' } + label:t('js.form_builder.defaultvalue'), + options: { 'no':t('js.form_builder.options.no'), 'yes':t('js.form_builder.options.yes') } }, errorMsg: errorMsgAttrs }, @@ -131,20 +131,20 @@ files: { icon: iconAttr, label: labelAttr, - accept: { label: "Fichier acceptés", placeholder: ".pdf audio/* .mp3 (séparés par des espaces)"}, + accept: { label:t('js.form_builder.accept'), placeholder:t('js.form_builder.accept_placeholder')}, separator: { label: '' }, // separate important attrs from others }, date: { icon: iconAttr, label: labelAttr, - timepicker: { label: "Timepicker", type: 'checkbox'}, - range: { label: "Intervale de dates", type: 'checkbox' }, + timepicker: { label:t('js.form_builder.timepicker'), type: 'checkbox'}, + range: { label:t('js.form_builder.range'), type: 'checkbox' }, }, elements: { label: labelAttr, icon: iconAttr, - reversedBy: { label: 'Inversée par', placeholder: "Le nom d'un autre champ de type \"lien vers un autre élément\"" }, // TODO Translation - multiple: { label: 'Plusieurs choix', type: 'checkbox' }, // TODO Translation + reversedBy: { label:t('js.form_builder.reversedBy'), placeholder:t('js.form_builder.reversedBy_placeholder') }, + multiple: { label:t('js.form_builder.multiple'), type: 'checkbox' }, separator: { label: '' }, // separate important attrs from others } }; @@ -162,7 +162,7 @@ controlOrder: ['text', 'email', 'images', 'textarea', 'checkbox', 'checkbox-group', 'radio-group', 'select', 'date', 'number', 'files', 'elements'], disabledAttrs: ['className', 'inline', 'toggle', 'description', 'other', 'multiple'], formData: {{ formData|json_encode|raw }}, - roles: { 1: "Administrateur" }, // TODO Translation ?? + roles: { 1:t('js.form_builder.roles.1') }, typeUserAttrs: typeUserAttrs }); @@ -213,7 +213,7 @@ }) } propNameOptions = propNameOptions.sort((a,b) => a.disabled ? 1 : -1) - propNameOptions.unshift({id: '', text: "Choisissez un champ existant ou entrez un nouveau champ", disabled: true}) // TODO Translation + propNameOptions.unshift({id: '', text:t('js.form_builder.propNameOptions'), disabled: true}) $(".fld-name:visible:not(.initialized)").select2({ createSearchChoice:function(term, data) { if ($(data).filter(function() { @@ -234,9 +234,9 @@ $('#{{ form.vars.id }}').val(JSON.stringify(formBuilder.actions.getData())); // Changes icons and icones helpers - $('a[type=remove].icon-cancel').removeClass('icon-cancel').addClass('fa fa-trash-alt'); - $('a[type=copy].icon-copy').attr('title', 'Dupliquer'); // TODO Translation - $('a[type=edit].icon-pencil').attr('title', 'Editer/Masquer'); // TODO Translation + $('a[type=remove].icon-cancel').attr('title',t('js.form_builder.remove_icon')).removeClass('icon-cancel').addClass('fa fa-trash-alt'); + $('a[type=copy].icon-copy').attr('title',t('js.form_builder.copy_icon')); + $('a[type=edit].icon-pencil').attr('title',t('js.form_builder.edit_icon')); $('.email-field input[name=name]').val('email'); $('.images-field input[name=name]').val('images'); diff --git a/templates/admin/core_custom/custom-fields/osm-tags.html.twig b/templates/admin/core_custom/custom-fields/osm-tags.html.twig index ea3fb69a884b71fb65b4329d75409e78d0abd613..16e4dd615201af0dfb9a603ea9d9e9f5192c43a3 100755 --- a/templates/admin/core_custom/custom-fields/osm-tags.html.twig +++ b/templates/admin/core_custom/custom-fields/osm-tags.html.twig @@ -11,7 +11,7 @@ </div> <button type="button" class="btn btn-sm btn-default" @click="tags.push({key: '', value: ''})"> - {{ 'option_hidden.fields.add_a_tag'|trans }} + {{ 'options.fields.add_a_tag'|trans }} </button> </div> diff --git a/templates/admin/edit/edit_element.html.twig b/templates/admin/edit/edit_element.html.twig index 84d21a2bf94309a8c0c35bdfa7339650997512ab..51185b85595af0827604dc45bc7e4a6ead803e3b 100755 --- a/templates/admin/edit/edit_element.html.twig +++ b/templates/admin/edit/edit_element.html.twig @@ -1,12 +1,13 @@ {% extends '@SonataAdmin/CRUD/base_edit.html.twig' %} +{% trans_default_domain 'admin' %} {% block formactions %} {% include "admin/edit/edit_element_actions.html.twig" %} {% endblock formactions %} {%- block actions -%} - <li><a href="{{ admin.generateUrl('list') }}" class="" title="Retourner à la liste"> {# TODO Translation #} - <span>Retourner à la liste </span> {# TODO Translation #} + <li><a href="{{ admin.generateUrl('list') }}" class="" title="{{ 'elements.action.edit.returnToList'|trans }}"> + <span>{{ 'elements.action.edit.returnToList'|trans }}</span> <i class="fa fa-arrow-right" aria-hidden="true"></i> </a></li> {%- endblock -%} diff --git a/templates/admin/edit/edit_element_actions.html.twig b/templates/admin/edit/edit_element_actions.html.twig index b34968be36e84ae59254aa7e4e336dce46ddd9ce..02718578fc02fb147d80e7ca9994917039f41892 100755 --- a/templates/admin/edit/edit_element_actions.html.twig +++ b/templates/admin/edit/edit_element_actions.html.twig @@ -32,33 +32,34 @@ {% else %} <button type="submit" class="btn btn-success" name="submit"><i class="fa fa-save" aria-hidden="true"></i> - Sauvegarder {% if object.havePendingReports %} et résoudre les signalements{% endif %}</button> {# TODO Translation #} + {{ (object.havePendingReports ? 'elements.action.edit.submit' : 'elements.action.edit.submit_resolve')|trans }}</button> {% if not object.havePendingReports %} - <button type="submit" class="btn btn-success" name="submit_redirect" value="submit_redirect"><i class="fa fa-save"></i> <i class="fa fa-list" aria-hidden="true"></i> Sauvegarder et fermer</button> {# TODO Translation #} + <button type="submit" class="btn btn-success" name="submit_redirect" value="submit_redirect"><i class="fa fa-save"></i> <i class="fa fa-list" aria-hidden="true"></i> + {{ 'elements.action.edit.submit_redirect'|trans }}</button> {% endif %} <button type="submit" class="btn btn-danger" name="submit_delete" value="submit_delete"><i class="fa fa-trash"></i> - Supprimer</button> {# TODO Translation #} + {{ 'elements.action.edit.submit_delete'|trans }}</button> {% endif %} - <a href="{{ admin.generateObjectUrl('redirectShow', object) }}" class="btn btn-warning" target="_blank" title="Voir sur le site"> + <a href="{{ admin.generateObjectUrl('redirectShow', object) }}" class="btn btn-warning" target="_blank" title="{{ 'elements.showOnSite'|trans }}"> <i class="fa fa-external-link" aria-hidden="true"></i><i class="fa fa-eye" aria-hidden="true"></i> - Voir sur le site {# TODO Translation #} + {{ 'elements.action.edit.showOnSite'|trans }} </a> - <a href="{{ admin.generateObjectUrl('redirectEdit', object) }}" class="btn btn-warning" target="_blank" title="Editer sur le site"> + <a href="{{ admin.generateObjectUrl('redirectEdit', object) }}" class="btn btn-warning" target="_blank" title="{{ 'elements.editOnSite'|trans }}"> <i class="fa fa-external-link" aria-hidden="true"></i><i class="fa fa-pencil" aria-hidden="true"></i> - Editer sur le site {# TODO Translation #} + {{ 'elements.action.edit.editOnSite'|trans }} </a> - <a href="{{ admin.generateUrl('list') }}" class="btn btn-primary" title="Retourner à la liste"> + <a href="{{ admin.generateUrl('list') }}" class="btn btn-primary" title="{{ 'elements.action.edit.returnToList'|trans }}"> <i class="fa fa-list" aria-hidden="true"></i> - Retourner à la liste {# TODO Translation #} + {{ 'elements.action.edit.returnToList'|trans }} </a> <button type="submit" class="btn btn-default" name="submit_update_json" value="submit_update_json"><i class="fa fa-refresh" aria-hidden="true"></i> - Update Json</button> {# TODO Translation #} + {{ 'elements.action.edit.updateJSON'|trans }}</button> {% else %} {% if admin.hasroute('edit') and admin.isGranted('EDIT') %} diff --git a/templates/admin/edit/edit_option_category.html.twig b/templates/admin/edit/edit_option_category.html.twig index e74679d996ff94b8865a9e3f535b79483f6d551c..19cdc817b7a18df3f683912acccdb664ddd71bee 100755 --- a/templates/admin/edit/edit_option_category.html.twig +++ b/templates/admin/edit/edit_option_category.html.twig @@ -83,9 +83,9 @@ {% if admin.id(object) is not null %} <button type="submit" class="btn btn-success" name="btn_update_and_edit"><i class="fa fa-save" aria-hidden="true"></i> {{ 'btn_update_and_edit_again'|trans({}, 'SonataAdminBundle') }}</button> - <a href="{{ admin.generateUrl('list') }}" class="btn btn-primary" title="{{ 'option_hidden.fields.return_to_list'|trans }}"> + <a href="{{ admin.generateUrl('list') }}" class="btn btn-primary" title="{{ 'options.fields.return_to_list'|trans }}"> <i class="fa fa-list" aria-hidden="true"></i> - {{ 'option_hidden.fields.return_to_list'|trans }} + {{ 'options.fields.return_to_list'|trans }} </a> {% if admin.hasroute('delete') and admin.isGranted('DELETE', object) %} @@ -97,9 +97,9 @@ <button class="btn btn-success" type="submit" name="btn_create_and_edit"><i class="fa fa-save" aria-hidden="true"></i> {{ 'btn_create_and_edit_again'|trans({}, 'SonataAdminBundle') }}</button> {% endif %} - <a href="{{ admin.generateUrl('list') }}" class="btn btn-primary" title="{{ 'option_hidden.fields.return_to_list'|trans }}"> + <a href="{{ admin.generateUrl('list') }}" class="btn btn-primary" title="{{ 'options.fields.return_to_list'|trans }}"> <i class="fa fa-list" aria-hidden="true"></i> - {{ 'option_hidden.fields.return_to_list'|trans }} + {{ 'options.fields.return_to_list'|trans }} </a> <button class="btn btn-success" type="submit" name="btn_create_and_create"><i class="fa fa-plus-circle" aria-hidden="true"></i> {{ 'btn_create_and_create_a_new_one'|trans({}, 'SonataAdminBundle') }}</button> diff --git a/templates/admin/list/base_list_custom_batch.html.twig b/templates/admin/list/base_list_custom_batch.html.twig index 2e2c3a25c05175eac57cd4d555118fd51dbddc6e..120bb9b9b2b76fa063984dd5b5de251c13140fb9 100755 --- a/templates/admin/list/base_list_custom_batch.html.twig +++ b/templates/admin/list/base_list_custom_batch.html.twig @@ -80,7 +80,7 @@ {% endfor %} </div> <div class="modal-footer"> - <button class="btn btn-primary submit-btn">{{ 'batch.send'|trans }}</button> + <button class="btn btn-primary submit-btn">{{ 'commons.send'|trans }}</button> </div> <style> .width-100 { width: 100% !important; margin-bottom: 1.5rem;}</style> diff --git a/templates/admin/list/list_import.html.twig b/templates/admin/list/list_import.html.twig index d3afc788a7579390f9975e213375518b73c5bd8d..e11ac9df6797bbe472f0f5ddbafeec6f6557354e 100755 --- a/templates/admin/list/list_import.html.twig +++ b/templates/admin/list/list_import.html.twig @@ -1,8 +1,10 @@ {% extends "admin/list/base_list_custom_batch.html.twig" %} +{% trans_default_domain 'admin' %} {% block list_header %} <p> - <h4 style="margin: 0 0 20px 10px">Liste des imports "en dur" (les données importées seront gérées par ce site)</h4> {# TODO Translation #} + <h4 style="margin: 0 0 20px 10px">{{ 'imports.form.groups.staticList'|trans }}</h4> + {# TODO translation videos links should be localized #} <div style="float: left;margin-right: 30px;"><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/835f2bfc-2c44-4f0d-ba56-bae25bf444d9" frameborder="0" allowfullscreen></iframe></div> <div><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/c74fc469-c822-4ab8-82a7-a2555e49e576" frameborder="0" allowfullscreen></iframe></div> </p> diff --git a/templates/admin/list/list_import_dynamic.html.twig b/templates/admin/list/list_import_dynamic.html.twig index af25143f696d16427c16ae0f089e600e6891be89..331f681eaef4537dc8e51e65dc436d268cad356b 100755 --- a/templates/admin/list/list_import_dynamic.html.twig +++ b/templates/admin/list/list_import_dynamic.html.twig @@ -1,9 +1,11 @@ {% extends "admin/list/base_list_custom_batch.html.twig" %} +{% trans_default_domain 'admin' %} {% block list_header %} <p> - <h4 style="margin: 0 0 20px 10px">Liste des imports dynamiques (les données importées seront en lecture seule car elles sont gérées par un autre site)</h4> {# TODO Translation #} - <div style="float: left;margin-right: 30px;"><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/835f2bfc-2c44-4f0d-ba56-bae25bf444d9" frameborder="0" allowfullscreen></iframe></div> - <div><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/c74fc469-c822-4ab8-82a7-a2555e49e576" frameborder="0" allowfullscreen></iframe></div> + <h4 style="margin: 0 0 20px 10px">{{ 'imports.form.groups.dynamicList'|trans }}</h4> + {# TODO translation videos links should be localized #} + <div style="float: left;margin-right: 30px;"><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/835f2bfc-2c44-4f0d-ba56-bae25bf444d9" frameborder="0" allowfullscreen></iframe></div> + <div><iframe height="150" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/c74fc469-c822-4ab8-82a7-a2555e49e576" frameborder="0" allowfullscreen></iframe></div> </p> {% endblock %} \ No newline at end of file diff --git a/templates/admin/list/list_news.html.twig b/templates/admin/list/list_news.html.twig index 1b49108c9591ba8ac7b2cdef2dee9085c377fdd3..6ca3f55af2869b464fea2e4933670de289eabcc6 100755 --- a/templates/admin/list/list_news.html.twig +++ b/templates/admin/list/list_news.html.twig @@ -3,6 +3,6 @@ {% block list_header %} <p> - <h4 style="margin: 0 0 20px 10px">{{ 'list'|trans }}</h4> + <h4 style="margin: 0 0 20px 10px">{{ 'news.form.groups.list_header'|trans }}</h4> </p> {% endblock %} diff --git a/templates/admin/partials/display_choice_status.html.twig b/templates/admin/partials/display_choice_status.html.twig index ae2df69e32a4b03c20a6ef29bf79f360b91e6a9e..b7a90375b3a30a1e5a9ba3b2e514358324be270b 100755 --- a/templates/admin/partials/display_choice_status.html.twig +++ b/templates/admin/partials/display_choice_status.html.twig @@ -9,7 +9,7 @@ {% else %} <span class="label label-success"> {% endif %} -{% set result = object.isExternal ? "Import - " : "" %} {# TODO Translation #} -{% set result = result ~ ('elements.fields.status_choices.' ~ value)|trans({}, 'admin') %} +{% set result = object.isExternal ? 'imports.import'|trans : '' %} +{% set result = result ~ ('elements.fields.status_choices.' ~ value)|trans %} {{ result }} </span> \ No newline at end of file diff --git a/templates/admin/partials/import/list_last_refresh.html.twig b/templates/admin/partials/import/list_last_refresh.html.twig index 7ff3eb34e8a82d175307c963d930f3911f19e017..d4c637cb9ef444a6d2e35a9e0f83ba650b503c1a 100755 --- a/templates/admin/partials/import/list_last_refresh.html.twig +++ b/templates/admin/partials/import/list_last_refresh.html.twig @@ -3,23 +3,23 @@ {% block field %} {% spaceless %} - <span style="margin-right: 8px">{{ object.lastRefresh ? object.lastRefresh|date('d/m/Y - H:i') : '' }}</span> {# TODO Translation #} + <span style="margin-right: 8px">{{ object.lastRefresh ? object.lastRefresh|date('commons.format'|trans) : '' }}</span> {% if object.logs|length > 0 and object.isDynamicImport %} {% set log = object.logs[0] %} {% if log.getDataProp('elementsCreatedCount') > 0 %} - <span class="label label-success log-label">+{{ log.getDataProp('elementsCreatedCount') }}</span> + <span class="label label-success log-label">{{ 'imports.fields.elementsCreatedCount'|trans({'%count%': log.getDataProp('elementsCreatedCount')}) }}</span> {% endif %} {% if log.getDataProp('elementsDeletedCount') > 0 %} - <span class="label label-danger log-label">-{{ log.getDataProp('elementsDeletedCount') }}</span> + <span class="label label-danger log-label">{{ 'imports.fields.elementsDeletedCount'|trans({'%count%': log.getDataProp('elementsDeletedCount')}) }}</span> {% endif %} {% if log.getDataProp('elementsUpdatedCount') > 0 %} - <span class="label label-primary log-label">{{ log.getDataProp('elementsUpdatedCount') }} mis à jour</span> {# TODO Translation #} + <span class="label label-primary log-label">{{ 'imports.fields.elementsUpdatedCount'|trans({'%count%': log.getDataProp('elementsUpdatedCount')}) }}</span> {% endif %} {% if log.getDataProp('elementsNothingToDoCount') > 0 %} - <span class="label label-default log-label">{{ log.getDataProp('elementsNothingToDoCount') }} inchangés</span> {# TODO Translation #} + <span class="label label-default log-label">{{ 'imports.fields.elementsNothingToDoCount'|trans({'%count%': log.getDataProp('elementsNothingToDoCount')}) }}</span> {% endif %} {% if log.getDataProp('elementsErrorsCount') > 0 %} - <span class="label label-danger log-label">{{ log.getDataProp('elementsErrorsCount') }} erreurs toto</span> {# TODO Translation #} + <span class="label label-danger log-label">{{ 'imports.fields.elementsErrorsCount'|trans({'%count%': log.getDataProp('elementsErrorsCount')}) }} {% endif %} <style> diff --git a/templates/admin/partials/import/list_non_visibles_count.html.twig b/templates/admin/partials/import/list_non_visibles_count.html.twig index 35d3034c4ab3652f148aa30950a4d13cabdbec96..9cfa05bd1b8416f97cfde52471468e9caa75499c 100755 --- a/templates/admin/partials/import/list_non_visibles_count.html.twig +++ b/templates/admin/partials/import/list_non_visibles_count.html.twig @@ -1,29 +1,30 @@ {% extends admin.getTemplate('base_list_field') %} +{% trans_default_domain 'admin' %} {% block field %} {% spaceless %} {% if object.newOntologyToMap %} - <span class="label label-info log-label">Nouveaux champs à mapper</span> {# TODO Translation #} + <span class="label label-info log-label">{{ 'imports.fields.newOntologyToMap'|trans }}</span> {% endif %} {% if object.newTaxonomyToMap %} - <span class="label label-info log-label">Nouvelles catégories à mapper</span> {# TODO Translation #} + <span class="label label-info log-label">{{ 'imports.fields.newTaxonomyToMap'|trans }}</span> {% endif %} {% set deletedCount = field_description.options.choices[object.id] is defined ? field_description.options.choices[object.id] : 0 %} {% if deletedCount > 0 %} - <span class="label label-danger log-label">{{ deletedCount }} localement supprimés</span> {# TODO Translation #} + <span class="label label-danger log-label">{{ 'imports.fields.deletedCount'|trans({'%count%': deletedCount}) }}</span> {% endif %} {% if object.logs|length > 0 %} {% set log = object.logs[0] %} {% if log.getDataProp('elementsMissingGeoCount') > 0 %} - <span class="label label-warning log-label">{{ log.getDataProp('elementsMissingGeoCount') }} sans geoloc</span> {# TODO Translation #} + <span class="label label-warning log-label">{{ 'imports.fields.elementsMissingGeoCount'|trans({'%count%': log.getDataProp('elementsMissingGeoCount')}) }}</span> {% endif %} {% if log.getDataProp('elementsMissingTaxoCount') > 0 %} - <span class="label label-warning log-label">{{ log.getDataProp('elementsMissingTaxoCount') }} sans categories</span> {# TODO Translation #} + <span class="label label-warning log-label">{{ 'imports.fields.elementsMissingTaxoCount'|trans({'%count%': log.getDataProp('elementsMissingTaxoCount')}) }}</span> {% endif %} {% if log.getDataProp('elementsPreventImportedNoTaxo') > 0 %} - <span class="label label-warning log-label">{{ log.getDataProp('elementsPreventImportedNoTaxo') }} non importés car sans catégories</span> {# TODO Translation #} + <span class="label label-warning log-label">{{ 'imports.fields.elementsPreventImportedNoTaxo'|trans({'%count%': log.getDataProp('elementsPreventImportedNoTaxo')}) }}</span> {% endif %} <style> diff --git a/templates/admin/partials/import/list_refresh_frequency.html.twig b/templates/admin/partials/import/list_refresh_frequency.html.twig index ffebdec0845e38695c36b93c0ab88f4ed6e952e2..603a35d225d846ee129c7a2f2a350dd25dbe2ddf 100755 --- a/templates/admin/partials/import/list_refresh_frequency.html.twig +++ b/templates/admin/partials/import/list_refresh_frequency.html.twig @@ -1,11 +1,12 @@ {% extends admin.getTemplate('base_list_field') %} +{% trans_default_domain 'admin' %} {% block field %} {% spaceless %} {% if value %} - <span class="label label-primary">Tous les {{ value }} jours</span> {# TODO Translation #} + <span class="label label-primary">{{ 'imports.fields.refreshFrequency'|trans({'%days%': value}) }}</span> {% else %} - <span class="label label-default">Manuelle</span> {# TODO Translation #} + <span class="label label-default">{{ 'imports.fields.manualRefresh'|trans }}</span> {% endif %} {% endspaceless %} {% endblock %} \ No newline at end of file diff --git a/templates/admin/partials/list__action_redirect_edit.html.twig b/templates/admin/partials/list__action_redirect_edit.html.twig index cc14c1a55d41b03220784dbe6d06601ed04e7e3b..7d0bb41b5b9d87cd75088706b95559d7576e01cb 100755 --- a/templates/admin/partials/list__action_redirect_edit.html.twig +++ b/templates/admin/partials/list__action_redirect_edit.html.twig @@ -1,5 +1,5 @@ {% trans_default_domain 'admin' %} -<a href="{{ admin.generateObjectUrl('redirectEdit', object) }}" class="btn btn-sm btn-default edit_link" target="_blank" title="{{ 'elements.editOnSite'|trans }}"> +<a href="{{ admin.generateObjectUrl('redirectEdit', object) }}" class="btn btn-sm btn-default edit_link" target="_blank" title="{{ 'elements.action.edit.editOnSite'|trans }}"> <i class="fa fa-external-link" aria-hidden="true"></i><i class="fa fa-pencil" aria-hidden="true"></i> </a> \ No newline at end of file diff --git a/templates/admin/partials/list__action_redirect_show.html.twig b/templates/admin/partials/list__action_redirect_show.html.twig index 9c38b5c7a1914d2211718fb0c57a7b0bb71357ec..29dfdf77ea376b5b6a2fb15b5ce30b81833e331d 100755 --- a/templates/admin/partials/list__action_redirect_show.html.twig +++ b/templates/admin/partials/list__action_redirect_show.html.twig @@ -1,5 +1,5 @@ {% trans_default_domain 'admin' %} - <a href="{{ admin.generateObjectUrl('redirectShow', object) }}" class="btn btn-sm btn-default edit_link" target="_blank" title="{{ 'elements.showOnSite'|trans }}"> + <a href="{{ admin.generateObjectUrl('redirectShow', object) }}" class="btn btn-sm btn-default edit_link" target="_blank" title="{{ 'elements.action.edit.showOnSite'|trans }}"> <i class="fa fa-external-link" aria-hidden="true"></i><i class="fa fa-eye" aria-hidden="true"></i> </a> \ No newline at end of file diff --git a/templates/admin/partials/list__action_refresh.html.twig b/templates/admin/partials/list__action_refresh.html.twig index 18da01d8c9b3b98eeedb7469da5b387d7f8b563b..fdac695741004926e8b935354a199b31050cb950 100755 --- a/templates/admin/partials/list__action_refresh.html.twig +++ b/templates/admin/partials/list__action_refresh.html.twig @@ -8,6 +8,7 @@ For the full copyright and license information, please view the LICENSE file that was distributed with this source code. #} +{% trans_default_domain 'admin' %} {% if admin.isGranted('VIEW', object) and object.id != "" %} @@ -15,10 +16,10 @@ file that was distributed with this source code. <a href="{{ admin.generateObjectUrl('refresh', object) }}" class="btn {{ class|default('btn-sm btn-primary') }} view_link"> {% if object.lastRefresh %} <i class="fa fa-refresh" aria-hidden="true"></i> - Importer de nouveau {# TODO Translation #} + {{ 'imports.edit.reimport'|trans }} {% else %} <i class="fa fa-download" aria-hidden="true"></i> - Importer les données {# TODO Translation #} + {{ 'imports.edit.import'|trans }} {% endif %} </a> {% endif %} diff --git a/templates/admin/partials/list__action_show_edit.html.twig b/templates/admin/partials/list__action_show_edit.html.twig index e0875868e71160df9244fabb8bb4d563db798abe..b0d730f0d14f147cd93cc7595bba0eee0d1d7674 100755 --- a/templates/admin/partials/list__action_show_edit.html.twig +++ b/templates/admin/partials/list__action_show_edit.html.twig @@ -11,7 +11,7 @@ file that was distributed with this source code. {% trans_default_domain 'admin' %} {% if admin.isGranted('EDIT', object) %} - <a href="{{ admin.generateObjectUrl('showEdit', object) }}" class="btn btn-sm btn-default view_link" title="{{ 'elements.showEdit'|trans }}"> + <a href="{{ admin.generateObjectUrl('showEdit', object) }}" class="btn btn-sm btn-default view_link" title="{{ 'elements.action.edit.showEdit'|trans }}"> <i class="fa fa-eye" aria-hidden="true"></i> <i class="fa fa-pencil" aria-hidden="true"></i> </a> diff --git a/templates/bundles/FOSUserBundle/Registration/register.html.twig b/templates/bundles/FOSUserBundle/Registration/register.html.twig index 49bb7f760b005c7b3c29b2c8ee4a583e34bc2e61..7fbd9f91b4ca79d888ae91995024f66e4280502d 100755 --- a/templates/bundles/FOSUserBundle/Registration/register.html.twig +++ b/templates/bundles/FOSUserBundle/Registration/register.html.twig @@ -1,7 +1,7 @@ {% extends "bundles/FOSUserBundle/layout.html.twig" %} {% set pageName = 'register with-section' %} -{% set navTitle = "Créer un compte" %} +{% set navTitle = "Créer un compte" %} {# TODO Translation #} {% block body_content %} <h1 class="panel-title">{{ 'title_user_registration'|trans({}, 'SonataUserBundle') }}</h1> diff --git a/templates/bundles/SonataAdminBundle/layout.html.twig b/templates/bundles/SonataAdminBundle/layout.html.twig index a3441e0d0a28d094e8c2ed36fc80ca04a9ad9b1f..b28869f732938cbe8da0a10af9f1cdcfcdd2e151 100755 --- a/templates/bundles/SonataAdminBundle/layout.html.twig +++ b/templates/bundles/SonataAdminBundle/layout.html.twig @@ -24,7 +24,7 @@ <script src="{{ asset('bundles/sonataformatter/markitup/sets/markdown/set.js') }}" type="text/javascript"></script> <script src="{{ asset('bundles/sonataformatter/markitup/sets/html/set.js') }}" type="text/javascript"></script> <script src="{{ asset('bundles/sonataformatter/markitup/sets/textile/set.js') }}" type="text/javascript"></script> - + <script src="{{ asset('js/javascripts-translations-admin.js?ver=' ~ version) }}"></script> <script>gogoLocale = "{{ helper.config.locale }}"</script> <script> @@ -82,15 +82,14 @@ {% block sonata_sidebar_search %} <div class="btn-group side-bar-links"> - <a type="button" href={{ path('gogo_homepage') }} target='_blank' class="btn btn-primary">{{ 'sidebar.gogo_homepage'|trans }}</a> + <a type="button" href={{ path('gogo_homepage') }} target='_blank' class="btn btn-primary">{{ 'dashboard.sidebar.gogo_homepage'|trans }}</a> <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="caret"></span> - <span class="sr-only">{{ 'sidebar.toggle_dropdown'|trans }}</span> </button> <ul class="dropdown-menu"> - <li><a href={{ path('gogo_directory') }} target='_blank'>{{ 'sidebar.gogo_directory'|trans }}</a></li> - <li><a href={{ path('gogo_element_add') }} target='_blank'>{{ 'sidebar.gogo_element_add'|trans }}</a></li> - <li><a href={{ path('gogo_partners') }} target='_blank'>{{ 'sidebar.gogo_partners'|trans }}</a></li> + <li><a href={{ path('gogo_directory') }} target='_blank'>{{ 'dashboard.sidebar.gogo_directory'|trans }}</a></li> + <li><a href={{ path('gogo_element_add') }} target='_blank'>{{ 'dashboard.sidebar.gogo_element_add'|trans }}</a></li> + <li><a href={{ path('gogo_partners') }} target='_blank'>{{ 'dashboard.sidebar.gogo_partners'|trans }}</a></li> </ul> </div> {% endblock %} diff --git a/templates/directory/directory.html.twig b/templates/directory/directory.html.twig index ea495dbb30b9af8c489d592e3b280545360e9ae4..013fc7c824c6ab8dc93d8a130e22bb8e50443488 100755 --- a/templates/directory/directory.html.twig +++ b/templates/directory/directory.html.twig @@ -1,7 +1,7 @@ {% extends "page-layout.html.twig" %} {% set pageName = 'directory' %} -{% set navTitle = "the_map._label"|trans() %} +{% set navTitle = "directory._label"|trans() %} {% block title %}{% endblock %} diff --git a/templates/duplicates/duplicate-node.html.twig b/templates/duplicates/duplicate-node.html.twig index 260f7e99d893ad64ab987619a7c09adbe1de4f3a..e9a0a76154aaefc090b783223ab9412074e6987c 100755 --- a/templates/duplicates/duplicate-node.html.twig +++ b/templates/duplicates/duplicate-node.html.twig @@ -1,14 +1,16 @@ +{% trans_default_domain 'admin' %} + {% set duplicates = [duplicateNode]|merge(duplicateNode.potentialDuplicates) %} {% if duplicates|length > 1 %} <div class="duplicate-node"> <div class="group-actions"> <button class="btn-merge btn btn-success waves-effect waves-light" data-id="{{ duplicateNode.id }}" - title="Les éléments vont être fusionnés. Seul le premier élément sera conservé, et les attributs du second seront fusionnés"> {# TODO Translation #} - Fusionner {# TODO Translation #} + title="{{ 'duplicates.node.merge_title'|trans }}"> + {{ 'duplicates.node.merge'|trans }} </button> <button class="btn-non-duplicates btn btn-default waves-effect waves-light" data-id="{{ duplicateNode.id }}" - title="Rien ne se passe, GoGoCarto se souviendra que ces deux éléments ne sont pas des doublons et ils ne seront plus détectés comme tel"> {# TODO Translation #} - Pas doublons {# TODO Translation #} + title="{{ 'duplicates.node.non-duplicates_title'|trans }}"> + {{ 'duplicates.node.non-duplicates'|trans }} </button> </div> <div class="duplicates"> @@ -19,10 +21,10 @@ <span class='title'> <span class="name">{{ duplicate.name }}</span> {% if duplicate.sourceKey %} ({{ duplicate.sourceKey }}){% endif %} - <span class="updated-at"> - Maj {{ duplicate.updatedAt|date("d/m/Y") }}</span> {# TODO Translation #} + <span class="updated-at"> - Maj {{ duplicate.updatedAt|date("d/m/Y") }}</span> {# TODO Translation use local #} {% if duplicate.isDeleted %} <span style="color: #9c3f3a;margin-left: 5px;"> - Cet élément a été supprimé. L'élément fusionné restera en status supprimé {# TODO Translation #} + {{ 'duplicates.node.deleted'|trans }} </span> {% endif %} </span> @@ -43,7 +45,7 @@ {# Address #} {% if duplicate.address.getFormatedAddress %} <div class="key-value"> - <span class="key">Adresse</span> {# TODO Translation #} + <span class="key">{{ 'duplicates.node.address'|trans }}</span> <span class="value">{{ duplicate.address.getFormatedAddress }}</span> </div> {% endif %} diff --git a/templates/duplicates/duplicates-index.html.twig b/templates/duplicates/duplicates-index.html.twig index f9183b8b7b9d7c3c7f7945d052f86d6e176dbc00..9b8eb428eeca97eb71ffa988791ac26d006e972c 100755 --- a/templates/duplicates/duplicates-index.html.twig +++ b/templates/duplicates/duplicates-index.html.twig @@ -1,9 +1,11 @@ {% extends "page-layout.html.twig" %} +{% trans_default_domain 'admin' %} {% set pageName = 'duplicates' %} -{% set navTitle = "Gestion des doublons" %} {# TODO Translation #} +{% set navTitle = 'duplicates.index.title'|trans %} -{% block title %}Gestion des doublons{% endblock %} {# TODO Translation #} +{% trans_default_domain 'admin' %} +{% block title %}{{ 'duplicates.index.title'|trans }}{% endblock %} {% block stylesheets %} @@ -16,15 +18,15 @@ {% block body_content %} <section> - <center style="margin-bottom: 2rem"><a href="{{ path('gogo_core_bundle_config_duplicates_admin_classname_list')}}"><button class="btn btn-secondary">Retour à la gestion des doublons</button></a></center> {# TODO Translation #} + <center style="margin-bottom: 2rem"><a href="{{ path('gogo_core_bundle_config_duplicates_admin_classname_list')}}"><button class="btn btn-secondary">{{ 'duplicates.index.return'|trans }}</button></a></center> {% if duplicatesNode|length == 0 %} - <h1>Aucun doublon à traiter !</h1> {# TODO Translation #} + <h1>{{ 'duplicates.index.none'|trans }}</h1> {% if leftDuplicatesToProceedCount > 0 %} - <center><p>{{ leftDuplicatesToProceedCount }} doublons sont en fait encore à traiter, mais ont été bloqués par un autre utilisateur. Attendez 10 minutes pour qu'ils se débloquent</p> </center> {# TODO Translation #} + <center><p>{{ 'duplicates.index.leftDuplicatesToProceedCount'|trans({'%count%': leftDuplicatesToProceedCount}) }}</p> </center> {% endif %} {% else %} - <h1>Fusionnez les doublons</h1> {# TODO Translation #} + <h1>{{ 'duplicates.index.merge'|trans }}</h1> {% for duplicateNode in duplicatesNode %} {% include 'duplicates/duplicate-node.html.twig' with { 'duplicateNode' : duplicateNode, 'config' : config } %} @@ -32,7 +34,7 @@ {% if leftDuplicatesToProceedCount > 0 %} <center> - <button class="btn btn-primary" onclick="window.location.reload()">J'en veux encore ! (plus que {{ leftDuplicatesToProceedCount }} doublons à traiter)</button> {# TODO Translation #} + <button class="btn btn-primary" onclick="window.location.reload()">{{ 'duplicates.index.wantMore'|trans({'%count%': leftDuplicatesToProceedCount}) }}</button> </center> {% endif %} {% endif %} @@ -47,7 +49,4 @@ var apiMerge = "{{ path('gogo_merge_element') }}"; var apiMarkAsNonDuplicate = "{{ path('gogo_mark_as_non_duplicate') }}"; </script> -{% endblock %} - - - +{% endblock %} \ No newline at end of file diff --git a/templates/element-form/form-partials/address.html.twig b/templates/element-form/form-partials/address.html.twig index fb1dc37d6f7c842f855ea4def79d6c2b099d84c0..2b918c22aef742f7e8820607ca3cb889dd5184a2 100755 --- a/templates/element-form/form-partials/address.html.twig +++ b/templates/element-form/form-partials/address.html.twig @@ -1,8 +1,8 @@ <!-- Input adresse element --> -<div class="input-field col s12" id="input-address-field"> +<div class="input-field col s12" id="input-address-field" data-error-msg="{{ 'element.form.error_geocode'|trans }}"> <i class="material-icons gogo-icon-marker-symbol prefix"></i> {{ form_widget(form.fullAddress, {'id': 'input-address', 'value': element.getFormatedAddress(), - 'attr': {'class': 'validate' }}) }} + 'attr': {'class': 'validate' }}) }} <label for="input-address" class="gogo-form-label to-html">{{ field.label|raw }}</label> <div class="btn-geolocalize btn btn-secondary waves-effect waves-light">{{ "element.form.localize"|trans }}</div> {% if config.elementFormGeocodingHelp %} diff --git a/templates/element-form/form-partials/checkbox-radio-group.html.twig b/templates/element-form/form-partials/checkbox-radio-group.html.twig index db7c5c66b3200478948407619ffc48d71d3c6539..16d14b8774b7176162ccbd9438c627a2fe1956d4 100755 --- a/templates/element-form/form-partials/checkbox-radio-group.html.twig +++ b/templates/element-form/form-partials/checkbox-radio-group.html.twig @@ -3,7 +3,7 @@ {% set optionClass = field.style is defined and field.style == "filled" ? "filled-in" : "" %} {% set elementValue = elementValue ? elementValue : [] %} - {% set errorMsg = fields.errorMsg|default('commons.choose_option'|trans) %} + {% set errorMsg = fields.errorMsg|default('commons.choose_one_option'|trans) %} <div class="label-container"> {% if field.label %}<label class="checkbox-radio-group-label to"><span class="to-html">{{ field.label|raw }}</span>{% if field.required|default(false) %}<span class="mandatory-asterisk"></span>{% endif %}<span class="error">{{ errorMsg }}</span></label>{% endif %} </div> diff --git a/templates/element-form/form-partials/elements.html.twig b/templates/element-form/form-partials/elements.html.twig index fa2a2ff49ed9abba632ce121cbad35fe71b1574b..9664f166d13a72176cdbdc928142dc6490e5fe94 100755 --- a/templates/element-form/form-partials/elements.html.twig +++ b/templates/element-form/form-partials/elements.html.twig @@ -11,7 +11,7 @@ <input type="hidden" name="data-json[{{ field.name }}]" class="select-encoded-result" /> </div> - {% set errorMsg = fields.errorMsg|default('commons.choose_option'|trans) %} + {% set errorMsg = fields.errorMsg|default('commons.choose_one_option'|trans) %} {% if field.label is defined and field.label != "undefined" %} <label> diff --git a/templates/element-form/form-partials/select.html.twig b/templates/element-form/form-partials/select.html.twig index 1974e565d1bbc5addb333bac009222c2ef02251d..5eeaed062f5654b6a1c16c219148259e313b93bf 100755 --- a/templates/element-form/form-partials/select.html.twig +++ b/templates/element-form/form-partials/select.html.twig @@ -18,7 +18,7 @@ {% endfor %} </select> - {% set errorMsg = fields.errorMsg|default('commons.choose_option'|trans) %} + {% set errorMsg = fields.errorMsg|default('commons.choose_one_option'|trans) %} {% if field.label is defined and field.label != "undefined" %} <label><span class="to-html">{{ field.label|raw }}</span>{% if field.required|default(false) %}<span class="mandatory-asterisk"></span>{% endif %}<span class="error">{{ errorMsg }}</span></label> diff --git a/templates/element-form/form-partials/taxonomy-field.html.twig b/templates/element-form/form-partials/taxonomy-field.html.twig index 3cf75670256798f418c94738fd77286f845bfe4b..8df9775569a66fb804e8ac158d8c90ff649d0e9d 100755 --- a/templates/element-form/form-partials/taxonomy-field.html.twig +++ b/templates/element-form/form-partials/taxonomy-field.html.twig @@ -14,7 +14,7 @@ {% if category.displayInForm %} {% set categoryDepth = parentDepth is defined ? parentDepth + 1 : 0 %} - <div class="category-field {{ displayInline ? 'inline' : ''}} {{ category.isMandatory ? 'mandatory' : '' }}"> + <div class="category-field {{ displayInline ? 'inline' : ''}} {{ category.isMandatory ? 'mandatory' : '' }}" data-error-msg="{{ 'commons.choose_one_option'|trans }}"> <span class="category-field-select input-field" data-picking-text='{{ category.pickingOptionText }}'> <select id="category-field-{{category.id}}" class="category-select keep-title-option depth-{{ categoryDepth }}" diff --git a/templates/emails/test-emails.html.twig b/templates/emails/test-emails.html.twig index d5abb54f1ebdf8e016d6452910480c3adfaeb8cf..13a9dc688fd970c8734db21112c031948088c296 100755 --- a/templates/emails/test-emails.html.twig +++ b/templates/emails/test-emails.html.twig @@ -1,20 +1,21 @@ {% extends 'bundles/SonataAdminBundle/layout.html.twig' %} {% block sonata_admin_content %} +{% trans_default_domain 'admin' %} {% block notice %} {% include '@SonataCore/FlashMessage/render.html.twig' %} {% endblock notice %} - <h2 style="text-align:center; font-weight:bold;">Test du rendu du mail {{ mailType | upper }}</h2> {# TODO Translation #} + <h2 style="text-align:center; font-weight:bold;">{{ 'emails.test._label'|trans({'%name%': mailType | upper}) }}</h2> <form method="post" action="{{ path('gogo_mail_send_test_automated', { 'mailType' : mailType }) }}" style="text-align:center; margin-bottom:40px;"> - <input type="email" name="email" class="form-control" placeholder="Entrez une adresse mail" + <input type="email" name="email" class="form-control" placeholder="{{ 'emails.test.email'|trans }}" style="display: inline-block; width: auto; margin-right: 20px; vertical-align: middle;"/> - <button type="submit" class="btn btn-primary">Envoyer un test à cette adresse</button> {# TODO Translation #} + <button type="submit" class="btn btn-primary">{{ 'emails.test.submit'|trans }}</button> </form> - <center><h3>Objet du mail : <em>{{ subject }}</em></h5></center> {# TODO Translation #} + <center><h3>{{ 'emails.test.subject'|trans({'%subject%': subject})|raw }}</h5></center> <div style="max-width: 800px;background-color:white;margin:0 auto;margin-top:2rem;padding:2rem;border: 1px solid grey">{{ content | raw }}</div> {% endblock %} \ No newline at end of file diff --git a/templates/header.html.twig b/templates/header.html.twig index a1c341d8faaf28414fc4ca60cae0a70a25941c7d..72e3b949e43f30c0858f50197a8b247b1d2d1763 100755 --- a/templates/header.html.twig +++ b/templates/header.html.twig @@ -35,7 +35,7 @@ <div class="nav-overlay" onclick="hideNavDropdown()"></div> {% if not iframe %} <div class="col menu-item"> - <a href="{{ path('gogo_directory') }}"><span class="header-icon gogo-icon-map"></span><span class="text">{{"the_map._label"|trans }}</span></a> + <a href="{{ path('gogo_directory') }}"><span class="header-icon gogo-icon-map"></span><span class="text">{{"directory._label"|trans }}</span></a> </div> {% endif %} diff --git a/templates/saas/projects/initialize.html.twig b/templates/saas/projects/initialize.html.twig index edd0022ae8b846aaf38cc65696775d17c3c3a7ee..03565092309a4f04347d3f7984ee5b52ef02348f 100755 --- a/templates/saas/projects/initialize.html.twig +++ b/templates/saas/projects/initialize.html.twig @@ -1,10 +1,10 @@ {% extends "saas/sass-layout.html.twig" %} {% set pageName = 'register' %} -{% set navTitle = "Créer un compte administrateur" %} {# TODO translation #} +{% set navTitle = 'projects.initialize._label'|trans %} {% block body %} - <h1 class="panel-title">Créez un compte administrateur</h1> {# TODO translation #} + <h1 class="panel-title">{{ 'projects.initialize._label'|trans }}</h1> <section> <form action="{{ path('gogo_saas_initialize_project') }}" method="POST" class="simple-form form-horizontal"> @@ -16,27 +16,27 @@ <div class="input-field col s12"> <i class="material-icons gogo-icon-account-circle prefix"></i> {{ form_widget(form.username, {'id': 'input-username', 'attr': {'class': 'validate required'}}) }} - <label for="input-username" class="gogo-form-label">Nom d'utilisateur</label> {# TODO translation #} + <label for="input-username" class="gogo-form-label">{{ 'projects.initialize.username'|trans }}</label> </div> <div class="error">{{ form_errors(form.email) }}</div> <div class="input-field col s12"> <i class="material-icons gogo-icon-mail prefix"></i> {{ form_widget(form.email, {'id': 'input-email', 'attr': {'class': 'validate required'}}) }} - <label for="input-email" class="gogo-form-label">Adresse e-mail</label> {# TODO translation #} + <label for="input-email" class="gogo-form-label">{{ 'projects.initialize.email'|trans }}</label> </div> <div class="error">{{ form_errors(form.plainPassword.first) }}</div> <div class="input-field col s12"> <i class="material-icons gogo-icon-lock prefix"></i> {{ form_widget(form.plainPassword.first, {'id': 'input-plainPassword-1', 'attr': {'class': 'validate required'}}) }} - <label for="input-plainPassword-1" class="gogo-form-label">Mot de passe</label> {# TODO translation #} + <label for="input-plainPassword-1" class="gogo-form-label">{{ 'projects.initialize.plainPassword-1'|trans }}</label> </div> <div class="error">{{ form_errors(form.plainPassword.second) }}</div> <div class="input-field col s12"> <i class="material-icons gogo-icon-lock prefix"></i> {{ form_widget(form.plainPassword.second, {'id': 'input-plainPassword-2', 'attr': {'class': 'validate required'}}) }} - <label for="input-plainPassword-2" class="gogo-form-label">Retapez votre mot de passe</label> {# TODO translation #} + <label for="input-plainPassword-2" class="gogo-form-label">{{ 'projects.initialize.plainPassword-2'|trans }}</label> </div> </div> diff --git a/templates/user/contributions/all-contributions.html.twig b/templates/user/contributions/all-contributions.html.twig index 5b56d3ec0862e02addc3fa0894190c0e1e13fa1e..3316fe10f23ceb8d9d00e43319c1a3684b9abc05 100755 --- a/templates/user/contributions/all-contributions.html.twig +++ b/templates/user/contributions/all-contributions.html.twig @@ -5,7 +5,7 @@ <table class="bordered"> <thead> <tr> - <th>Name</th> {# TODO translation #} + <th>{{ 'my_contributions.name'|trans }}</th> <th class="type">{{ 'my_contributions.type'|trans }}</th> <th class="date">{{ 'my_contributions.date'|trans }}</th> <th class="small-status">{{ 'my_contributions.status'|trans }}</th> @@ -19,7 +19,7 @@ <a href="{{ path('gogo_directory_showElement', {'id': element.id, 'name': element.name}) | replace({"%23":'#'}) }}">{{ element.name }}</a> </td> <td>{{ ('elements.fields.contributionType_choices.' ~ contribution.type)|trans({}, 'admin') }}</td> - <td>{{ contribution.createdAt|date("d/m/Y")}}</td> + <td>{{ contribution.createdAt|date("d/m/Y")}}</td> {# TODO Translation use local #} <td>{{ ('elements.fields.status_choices.' ~ contribution.status)|trans({}, 'admin') }}</td> </tr> {% endfor %} diff --git a/templates/user/contributions/pending-contributions.html.twig b/templates/user/contributions/pending-contributions.html.twig index 363834de0e7ee0a19814fb1e414dedc6501b7737..11a71076602f4d99abd04fb45885b1282158e25d 100755 --- a/templates/user/contributions/pending-contributions.html.twig +++ b/templates/user/contributions/pending-contributions.html.twig @@ -16,7 +16,7 @@ <a href="{{ path('gogo_directory_showElement', {'id': contribution.element.id, 'name': contribution.element.name}) | replace({"%23":'#'}) }}">{{ contribution.element.name }}</a> </td> <td>{{ ('elements.fields.contributionType_choices.' ~ contribution.type)|trans({}, 'admin') }}</td> - <td>{{ contribution.createdAt|date("d/m/Y")}}</td> + <td>{{ contribution.createdAt|date("d/m/Y")}}</td> {# TODO Translation use local #} <td> <a href="{{ path('gogo_element_edit', {'id': contribution.element.id, 'hash': contribution.element.randomHash}) }}"> <button class="btn-gogo btn-secondary small waves-light waves-effect btn">{{ 'my_contributions.edit'|trans }}</button> diff --git a/templates/user/contributions/reports.html.twig b/templates/user/contributions/reports.html.twig index 24e329f20f621b01f5eecd35bd356f3f218911d8..c624e4af73e742409a09ccf63c2d0cc50e07f753 100755 --- a/templates/user/contributions/reports.html.twig +++ b/templates/user/contributions/reports.html.twig @@ -24,7 +24,7 @@ <a href="{{ path('gogo_directory_showElement', {'id': report.element.id, 'name': report.element.name}) | replace({"%23":'#'}) }}">{{ report.element.name }}</a> </td> <td>{{ ('elements.fields.reportValues_choices.' ~ report.value)|trans({}, 'admin') }}</td> - <td>{{ report.createdAt|date("d/m/Y")}}</td> + <td>{{ report.createdAt|date("d/m/Y")}}</td> {# TODO Translation use local #} <td> {% if report.isResolved %} <span>{{ ('elements.fields.status_choices.' ~ report.element.status)|trans({}, 'admin') }}</span> diff --git a/templates/user/contributions/votes.html.twig b/templates/user/contributions/votes.html.twig index fae3b13fede6000159ef0a60e45fbe01dadf2de3..0bee17b5f9e84e65861b111d5456561fcd0b52a6 100755 --- a/templates/user/contributions/votes.html.twig +++ b/templates/user/contributions/votes.html.twig @@ -24,7 +24,7 @@ <a href="{{ path('gogo_directory_showElement', {'id': vote.element.id, 'name': vote.element.name}) | replace({"%23":'#'}) }}">{{ vote.element.name }}</a> </td> <td>{{ ('elements.fields.voteValues_choices.' ~ vote.value)|trans({}, 'admin') }}</td> - <td>{{ vote.createdAt|date("d/m/Y")}}</td> + <td>{{ vote.createdAt|date("d/m/Y")}}</td> {# TODO Translation use local #} <td>{{ ('elements.fields.status_choices.' ~ vote.element.status)|trans({}, 'admin') }}</td> </tr> {% endfor %} diff --git a/translations/.gitignore b/translations/.gitignore deleted file mode 100755 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/translations/SonataAdminBundle.fr.yml b/translations/SonataAdminBundle.fr.yml deleted file mode 100755 index 3a8dfe45a2730a241036ac827ced713538a836c2..0000000000000000000000000000000000000000 --- a/translations/SonataAdminBundle.fr.yml +++ /dev/null @@ -1,8 +0,0 @@ -menu: - contents: Contenus - custom: Personnalisation - data: Données / Import - emailing: Mails / Newsletter - other_config: Autre Configuration - saas: Ferme de Carto - users: Utilisateurs diff --git a/translations/admin+intl-icu.fr.yaml b/translations/admin+intl-icu.fr.yaml index 883d033c8db58bd8057a2f58595b628eda7af010..4063059d70c19e347377a20e3b8371b6900fdf8f 100755 --- a/translations/admin+intl-icu.fr.yaml +++ b/translations/admin+intl-icu.fr.yaml @@ -142,9 +142,6 @@ elements: _label: "Éléments" proposedBy: "Proposé par <u>{name}</u>" proposedAt: "le {date}" - showOnSite: "Voir sur le site" - showEdit: "Afficher/Editer" - editOnSite: "Éditer sur le site" fields: name: "Nom" newsletterFrequency: "Réception newsletter" @@ -227,6 +224,11 @@ elements: createdAt: "Créé le" reports: "Signalements" optionIds: "Catégories" + sourceTypeJSON : "URL de l'API JSON" + sourceType_choices: + csv: "Fichier CSV" + json: "API JSON" + osm: "OpenStreetMap" form: groups: general: "Informations générales" @@ -239,7 +241,7 @@ elements: customFields: "Champs Personnalisés" duplicateOf: "Cet élément a été fusionné avec un autre :" seeDuplicate: "voir l'élément fusionné" - addCustomField: "Ajouter un Champ Personnalisé" + addCustomField: "Ajouter un champ personnalisé" specialFields: "Champs Spéciaux" filter: name: "Nom" @@ -252,14 +254,44 @@ elements: optionValuesNotIn: "Catégories (ne contient pas)" postalCode: "Code Postal" departementCode: "Numéro de département" + sourceKey: "Source" action: edit: send_mail: "Prévenir l'acteur de la modification" isPending: "Message particulier si refus" - havePendingReports: "Détail de la modification, raison de la suppression... ce texte remplacera {{ customMessage }} dans les mails automatiques" + havePendingReports: "Détail de la modification, raison de la suppression... ce texte remplacera '{{ customMessage '}} dans les mails automatiques" submit_accept: "Valider" submit_refuse: "Refuser" submit_restore: "Restaurer" + submit: "Sauvegarder" + submit_resolve: "Sauvegarder et résoudre les signalements" + submit_redirect: "Sauvegarder et fermer" + submit_delete: "Supprimer" + showOnSite: "Voir sur le site" + showEdit: "Afficher/Editer" + editOnSite: "Éditer sur le site" + returnToList: "Retourner à la liste" + updateJSON: "Mettre à jour le JSON" + geocode: "Géocoder l'adresse" + batch: + validation: "Valider" + refusal: "Refuser" + softDelete: "Supprimer (changement de status)" + restore: "Restaurer" + resolveReports: "Résoudre la modération" + sendMail: "Envoyer un mail" + editOptions: "Modifier les catégories" + delete: "Supprimer définitivement" + params: + from: "Votre adresse mail" + mail_subject: "Objet" + mail_content: "Contenu" + send_to_element: "Envoyer l'email aux éléments" + send_to_last_contributor: "Envoyer l'email aux derniers contributeurs" + optionsToRemove: "Catégories à supprimer" + optionsToAdd: "Catégories à ajouter" + comment: "Détail de la modification, raison de la suppression... ce texte remplacera '{{ customMessage '}} dans les mails automatiques" + dont_send_mail: "Ne pas envoyer de mail" imports: _label: "Import" @@ -276,6 +308,7 @@ imports: delete: "Supprimer l'import (ainsi que tous les éléments importés)" saving: "Sauvegarde et lecture des données en cours..." last: # templates/admin/partials/import/list_last_refresh.html.twig + import: "Import - " progress: # templates/admin/pages/import/import-progress.html.twig title: "Importation de {name}" inProgress: "En attente..." @@ -339,6 +372,8 @@ imports: $osmFeature[''tags''][''bulk_purchase''] = ''yes''; </pre> historic: "Historique" + dynamicList: "Liste des imports dynamiques (les données importées seront en lecture seule car elles sont gérées par un autre site)" + staticList: "Liste des imports \"en dur\" (les données importées seront gérées par ce site)" fields: &imports_fields sourceName: "Nom de la source" file: "Fichier CSV à importer (séparation par virgules, encodage en UTF8)" @@ -357,6 +392,55 @@ imports: preventImportIfNoCategories: "Ne pas importer les éléments qui n'ont aucune catégories" preventImportIfNoCategories_help: "Lorsqu'on veut importer seulement une partie des éléments d'une base de donnée, il peut être pratique de mapper uniquement les catégories que l'on veut importer. Mais tous les autres élément seront aussi importés mais sans catégories. En cochant cette option, uniquement les éléments avec une catégorie mappée seront importés" customCodeForExport: "Code PHP qui sera exécuté" + logs: "Nombre d'éléments" + idsToIgnore: "Liste des IDs qui seront ignorées lors de l'import" + idsToIgnore_help: "Pour ignorer un élément, supprimer le (définitivement) et il ne sera plus jamais importé. Si vous supprimez un élément dynamiquement importé juste en changeant son status (soft delete), l'élément sera quand meme importé mais conservera son status supprimé. Vous pourrez donc à tout moment restaurer cet élement pour le voir apparaitre de nouveau" + refreshFrequencyInDays: "Fréquence de mise à jours des données en jours" + refreshFrequencyInDays_help: "(laisser vide pour ne jamais mettre à jour automatiquement" # TODO string too long + lastRefresh: "Dernier import" + usersToNotify: "Utilisateurs à notifier en cas d'erreur, ou lorsque de nouveaux champs/catégories sont à faire correspondre" + isSynchronized: "Autoriser l'édition des données {submessage}" + submessage: "(Vous devez préalablement renseigner des identifiants dans Autre configuration -> OpenStreetMap)" + isSynchronized_help: "Chaque modification sera envoyée à OpenStreetMap" + + # templates/admin/partials/import/list_non_visibles_count.html.twig + newOntologyToMap: "Nouveaux champs à mapper" + newTaxonomyToMap: "Nouvelles catégories à mapper" + deletedCount: "{count} localement supprimés" + elementsMissingGeoCount: "{count} sans géoloc" + elementsMissingTaxoCount: "{count} sans categories" + elementsPreventImportedNoTaxo: "{count} non importés car sans catégories" + + # templates/admin/partials/import/list_refresh_frequency.html.twig + refreshFrequency: "{days, plural, + =1 {Quotidienne} + =7 {Hebdomadaire} + other {Tous les # jours} + }" + manualRefresh: "Manuelle" + + # templates/admin/partials/import/list_last_refresh.html.twig + elementsCreatedCount: "+{count}" + elementsDeletedCount: "-{count}" + elementsUpdatedCount: "{count} mis à jour" + elementsNothingToDoCount: "{count, plural, + =1 {# inchangé} + other {# inchangés} + } " + elementsErrorsCount: "{count, plural, + =1 {# erreur} + other {# erreurs} + } " + + list: &imports_list + refreshFrequencyInDays: "Mise à jour" + idsToIgnore: "Infos" + +dynamic_imports: + _label: "Import dynamique" + fields: *imports_fields + form: *imports_form + list: *imports_list importService: inProgress: "Téléchargement des données en cours... Veuillez patienter..." @@ -410,18 +494,13 @@ mapping-taxonomy: alert: "Veuillez d'abords sélectionner le champs correspondant aux catégories dans l'onglet 'Table de correspondance des champs' puis cliquer sur 'Lire les données'" mapping-ontology: - alert: "Veuillez cliquer sur le boutton \"Lire les données\" afin de charger les attributs des données à importer" + alert: "Veuillez cliquer sur le bouton \"Lire les données\" afin de charger les attributs des données à importer" original: "Nom d'origine" mapped: "À transformer en <span style='font-weight: normal'>(les champs vides ne seront pas importés)</span>" arrowTitle: "Utiliser le nom d'origine" clearTitle: "Ne plus importer ce champ" displayMore: "Voir tous les champs (les champs présents dans moins de {percent}% des éléments sont cachés par défault)" -dynamic_imports: - _label: "Import dynamique" - fields: *imports_fields - form: *imports_form - config_duplicates: _label: "Gestion des Doublons" fields: @@ -437,10 +516,13 @@ config_duplicates: detectAfterImport_help: "Pour chaque nouvel élément ajouté lors de l'import, une recherche sera effectuée sur l'ensemble de la base de donnée pour trouver d'éventuels doublons" automaticMergeIfPerfectMatch: "Fusionner automatiquement lors d'une correspondance parfaite" sourcePriorityInAutomaticMerge: "Lors d'une fusion, quelle source voulez vous conserver en priorité ?" + sourcesToDetectFrom: "Chercher les doublons entre les sources (laisser vide pour chercher dans toute la base de donnée)" + sourcesToDetectWith: "Et les sources (laisser vide pour chercher dans toute la base de donnée)" form: groups: configuration: "Configuration" fusion: "Fusion des doublons" + manualDetection: "Restreindre la détection manuelle (optionel)" config_style: _label: "Style / Couleurs / Icones" @@ -482,7 +564,8 @@ config_home: _label: "Page d'Accueil" fields: activateHomePage: "Activer la page d'accueil" - backgroundImage: "Image de fond (le nom du fichier ne doit pas contenir d'espaces ou de caractères spéciaux" + backgroundImage: "Image de fond (le nom du fichier ne doit pas contenir d'espaces ou de caractères spéciaux)" + backgroundImage_placeholder: "Sélectionnez une image déjà importée, ou ajoutez en une !" home: displayCategoriesToPick: "Afficher les catégories principales selectionnables pour la recherche" addElementHintText: "Texte au dessus du bouton \"Ajouter un élément\"" @@ -513,13 +596,16 @@ charts: # src/Block/ChartBlockService.php empty: "Aucun élement trouvé" showAll: "Afficher tous" -# TODO translation -# wrong place ! Keys from src/Admin/ImageAdmin.php -app: +# src/Admin/ImageAdmin.php +images: &images + _label: "Téléchargez une image" + placeholder: "Sélectionnez une image déjà importée, ou ajoutez en une !" fields: file: "Fichier à importer" externalImageUrl: "Lien vers une image externe" - actualFile: "Fichier actuel :" +images_conf: *images +images_partner: *images +images_element: *images # templates/admin/blocks/block_monitoring.html.twig monitoring: @@ -537,6 +623,22 @@ monitoring: users: "Utilisateurs" activeUsersNewsletter: "Abonnés à la newsletter" +duplicates: + node: # templates/duplicates/duplicate-node.html.twig + merge: "Fusionner" + merge_title: "Les éléments vont être fusionnés. Seul le premier élément sera conservé, et les attributs du second seront fusionnés" + non-duplicates: "Pas doublons" + non-duplicates_title: "Rien ne se passe, GoGoCarto se souviendra que ces deux éléments ne sont pas des doublons et ils ne seront plus détectés comme tel" + deleted: "Cet élément a été supprimé. L'élément fusionné restera en status supprimé" + address: "Adresse" + index: # templates/duplicates/duplicates-index.html.twig + title: "Gestion des doublons" + return: "Retour à la gestion des doublons" + none: "Aucun doublon à traiter !" + leftDuplicatesToProceedCount: "{count} doublons sont en fait encore à traiter, mais ont été bloqués par un autre utilisateur. Attendez 10 minutes pour qu'ils se débloquent" + merge: "Fusionnez les doublons" + wantMore: "J'en veux encore ! (Plus que {count} doublons à traiter)" + categories: _label: "Catégories" list: @@ -716,7 +818,7 @@ config_form: Si vous avez importé des données, vous pouvez ajouter un champ au formulaire et le lier au champ importé grâce à l'attribut \"Nom du champ\"</div>" fields: elementFormIntroText: "Texte d'introduction qui apparait en haut du formulaire" - elementFormIntroText_placeholder: "Exemple: Attention nous ne référencons pas tel et tel type d'élements" + elementFormIntroText_placeholder: "Exemple: Attention nous ne référençons pas tel et tel type d'élements" elementFormValidationText: "Libellé de la checkbox de validation du formulaire (laisser vide pour désactiver)" elementFormValidationText_placeholder: "Exemple: Je certifie que les informations renseignées dans ce formulaire sont exactes" elementFormOwningText: "Libellé pour demander si l'utilisateur est propriétaire de la fiche (laisser vide pour désactiver)" @@ -742,7 +844,7 @@ config_contributions: minVoteToForceChangeStatus: "Nombre votes pour valider/refuser automatiquement, sans attendre de jours minimum" collaborativeModerationExplanations: "Explications au sujet de la modération collaborative" -feature_config_hidden: +config_features: fields: active: "Activé" activeInIframe: "Activé en Iframe" @@ -780,6 +882,66 @@ config_custom_js_css: config_emails: _label: "Mails / Newsletter" + form: + groups: + mailForElements: "Mails auto pour les {element}" + infosElements: &info "Informations concernant les mails automatiques" + infosElements_description: >- + <div class="text-and-iframe-container"> + <div class="iframe-container-aside"><iframe height="200" sandbox="allow-same-origin allow-scripts" src="https://video.colibris-outilslibres.org/videos/embed/d5d007ec-e5c6-4a50-ab66-572e35e8905a" frameborder="0" allowfullscreen></iframe></div> + Ces mails sont envoyés automatiquement aux {elements} lorsque leur fiche est ajoutée, modifiée ou supprimée.</br> + Il est possible d''inclure les variables suivantes dans les messages (en conservant les '''{{'}}'' ) : </br> + <li>'{{ element '}} le nom de {element}</li> + <li>'{{ showUrl '}} l''adresse qui renvoie à la visualisation de la fiche</li> + <li>'{{ editUrl '}} l''adresse qui renvoie à la modification de la fiche</li> + <li>'{{ homeUrl '}} l''adresse de la page d''accueil du site</li> + <li>'{{ directEditElementUniqueUrl '}} l''adresse unique pour éditer directement l''élément sans être admin</li> + <li>'{{ customMessage '}} le message personnel qui a été rédigé par les admins (uniquement lors de la suppression)</li></br> + </div> + Vous pouvez également utiliser ces variables dans les contenus spéciaux de l''éditeur de texte. Par example dans le champs URL de la popup + qui s''ouvre lorsqu''on clique sur d''ajouter un lien.</br> + <b>Une fois le mail sauvegardé</b>, vous pouvez cliquer sur les boutons <b>TESTER</b> pour visualiser le rendu + add: "Lors d'un ajout - <a href=''{url}'' target='_blank'>TESTER</a>" + edit: "Lors d'une modification - <a href=''{url}'' target='_blank'>TESTER</a>" + delete: "Lors d'une suppression - <a href=''{url}'' target='_blank'>TESTER</a>" + + mailForContributors: "Mails auto pour les contributeurs" + infosContributors: *info + infosContributors_description: >- + Ces mails sont envoyés automatiquement aux contributeurs lorsque leurs contributions sont acceptées, refusées etc...</br> + Il est possible d''inclure les variables suivantes dans les messages (en conservant les '''{{'}}'' ) : </br> + <li>'{{ element '}} le nom de {element}</li> + <li>'{{ user '}} le nom ou l''adresse mail du contributeur</li> + <li>'{{ showUrl '}} l''adresse qui renvoie à la visualisation de la fiche</li> + <li>'{{ editUrl '}} l''adresse qui renvoie à la modification de la fiche</li> + <li>'{{ homeUrl '}} l''adresse de la page d'accueil du site</li> + <li>'{{ userContributionsUrl '}} l''adresse de la page "Mes contributions"</li> + <li>'{{ customMessage '}} le message personnel qui a été rédigé par les admins (uniquement lors d''un refus)</li></br> + Vous pouvez également utiliser ces variables dans les contenus spéciaux de l'éditeur de texte. Par example dans le champs URL de la popup + qui s'ouvre lorsqu''on clique sur d''ajouter un lien.</br> + <b>Une fois le mail sauvegardé</b>, vous pouvez cliquer sur les boutons <b>TESTER</b> pour visualiser le rendu + validation: "Lors d'une validation - <a href=''{url}'' target='_blank'>TESTER</a>" + refusal: "Lors d'un refus - <a href=''{url}'' target='_blank'>TESTER</a>" + report: "Lors d'un signalement pris en compte - <a href=''{url}'' target='_blank'>TESTER</a>" + + newsletters: "Newsletter" + infosNewletter: "Informations concernant la newsletter" + infosNewletter_description: >- + Ce mail est envoyé automatiquement aux utilisateurs y ayant souscrit. Il donne la liste des derniers éléments ajoutés dans une zone + géographique determinée et optionnellement des nouvelles</br></br> + <b>Il est nécessaire d''inclure la variable <u>'{{ newElements '}}</u> et/ou <u>'{{ pendingElements '}}</u></b> qui seront respectivement + remplacées par la liste des nouveaux élements et des nouveaux élements en attente de validation</br></br> + Il est possible d''inclure les variables suivantes dans les messages (en conservant les '''{{'}}'' ) : </br> + <ul> + <li>'{{ news '}} la dernière nouvelle publiée</li> + <li>'{{ user '}} le nom ou l''adresse mail du contributeur</li> + <li>'{{ homeUrl '}} l''adresse de la page d''accueil du site</li> + <li>'{{ userProfileUrl '}} l''adresse de la page "Mes paramètres" dans l''espace utilisateur</li> + <li>'{{ showOnMapBtn '}} un bouton pour renvoyer vers la carte centrée sur la position de l''utilisateur</li> + </ul> + </br> + <b>Une fois le mail sauvegardé</b>, vous pouvez cliquer sur le bouton <b>TESTER</b> pour visualiser le rendu + newsletter: "Newsletter - <a href=''{url}'' target='_blank'>TESTER</a>" config_api: _label: "APIs" @@ -831,14 +993,16 @@ webhooks: url: "URL" commons: + send: "Envoyer" btn_update_and_edit: "Mettre à jour" - format: "d/m/Y à H:i" # TODO use local ?? + format: "d/m/Y à H:i" # TODO Translation use local anonymous: "Anonyme" - fields: - image_placeholder: "Sélectionnez une image déjà importée, ou ajoutez en une !" + actual_file: "Fichier actuel :" config_general: _label: "Configuration Générale" + downloadImage: "Téléchargez une image" + cannot_delete: "Impossible de supprimer la configuration, cette action est interdite car est elle casserait toute votre carte" fields: aboutHeaderTitle: "Titre de la section 'A propos'" activateAbouts: "Activer les popups type 'A propos'" @@ -877,7 +1041,7 @@ config_general: pages: "Fonctions principales" text: "Nom des entités référencées sur l'annuaire" -option_hidden: +options: _label: "Option" fields: name: "Nom" @@ -943,66 +1107,62 @@ news: groups: list_header: "Créez des actualités qui seront incluses dans la newsletter" -sonata: - user: - user: - _label: Utilisateurs - fields: - contributionsCount: Contributions - votesCount: Votes - reportsCount: Signalements - gamification: Interactions #Interaction Score - createdAt: Créé le - impersonating: # TODO translate - username: Nom - groups: Groupes - sendMail: Envoyer un mail - email: Mail # Destinataire ou De ? - object: Titre - content: Message - - form: - plainPassword: Mot de passe - allowedStamps: Étiquettes autorisées # TODO check translation - locked: Verrouillée - expired: Expirée - enabled: Activée - credentialsExpired: # TODO translate - watchModeration: Être notifié par email lorsque des éléments sont à modérer - watchModerationOnlyWithOptions: Seulement pour les éléments ayant une des catégories suivante - watchModerationOnlyWithPostCodes: Seulement pour les éléments avec code postal - watchModerationOnlyWithPostCodes_help: "Séparés par des virgules. On peut utiliser le symbole * pour choisir tout un département, par example : 40*, 47*, 48500" - watchModerationOnlyWithPostCodes_placeholder: "40*, 47*, 48500" - main-roles: Rôles Principaux - groups: - user: Utilisateur - security: Sécurité - general: Général - status: Statut - roles: Rôles - role: - ROLE_SUPER_ADMIN: SUPER ADMIN (tous les pouvoirs) - ROLE_ADMIN: "MODERATEUR (Accès aux fonctions de modérations, à détailler dans ModèleDeDonnées/QuiPeutContribuer)" - ROLE_DIRECTMODERATION_ADD: "CONTRIBUTEUR + (peut ajouter des éléments comme un Admin depuis le site)" - ROLE_DIRECTMODERATION_EDIT_OWN_CONTRIB: "CONTRIBUTEUR + (peut éditer les éléments auquel il a contribué, même sans être propriétaire)" - ROLE_SONATA_ADMIN: "INTERFACE ADMINISTRATEUR" -batch: - send: "Envoyer" - sendmails: "{count, plural, - =1 {# mail a bien été envoyé} - other {# mails ont bien été envoyés} - }" - mailError: "Vous devez renseigner un objet et un contenu. Veuillez recommencer" - usersWithoutEmail: "{count, plural - =1 {# mail n'a pas pu être envoyé car aucune adresse mail n'était renseignée} - other {# mails n'ont pas pu être envoyé car aucune adresse mail n'était renseignée} - }" - tooMany: "Trop d'éléments à traiter ! Seulement {limit} ont été traités" - error: "ERREUR : {message}" +sonata.user.user: + _label: Utilisateurs + fields: + contributionsCount: Contributions + votesCount: Votes + reportsCount: Signalements + gamification: Interactions #Interaction Score + createdAt: Créé le + impersonating: # TODO translate + username: Nom + groups: Groupes + sendMail: Envoyer un mail + email: Mail # Destinataire ou De ? + object: Titre + content: Message + form: + plainPassword: Mot de passe + allowedStamps: Étiquettes autorisées # TODO check translation + locked: Verrouillée + expired: Expirée + enabled: Activée + credentialsExpired: # TODO translate + watchModeration: Être notifié par email lorsque des éléments sont à modérer + watchModerationOnlyWithOptions: Seulement pour les éléments ayant une des catégories suivante + watchModerationOnlyWithPostCodes: Seulement pour les éléments avec code postal + watchModerationOnlyWithPostCodes_help: "Séparés par des virgules. On peut utiliser le symbole * pour choisir tout un département, par example : 40*, 47*, 48500" + watchModerationOnlyWithPostCodes_placeholder: "40*, 47*, 48500" + main-roles: Rôles Principaux + groups: + user: Utilisateur + security: Sécurité + general: Général + status: Statut + roles: Rôles + role: + ROLE_SUPER_ADMIN: SUPER ADMIN (tous les pouvoirs) + ROLE_ADMIN: "MODERATEUR (Accès aux fonctions de modérations, à détailler dans ModèleDeDonnées/QuiPeutContribuer)" + ROLE_DIRECTMODERATION_ADD: "CONTRIBUTEUR + (peut ajouter des éléments comme un Admin depuis le site)" + ROLE_DIRECTMODERATION_EDIT_OWN_CONTRIB: "CONTRIBUTEUR + (peut éditer les éléments auquel il a contribué, même sans être propriétaire)" + ROLE_SONATA_ADMIN: "INTERFACE ADMINISTRATEUR" + batch: + sendmails: "{count, plural, + =1 {# mail a bien été envoyé} + other {# mails ont bien été envoyés} + }" + mailError: "Vous devez renseigner un objet et un contenu. Veuillez recommencer" + usersWithoutEmail: "{count, plural + =1 {# mail n'a pas pu être envoyé car aucune adresse mail n'était renseignée} + other {# mails n'ont pas pu être envoyé car aucune adresse mail n'était renseignée} + }" + tooMany: "Trop d'éléments à traiter ! Seulement {limit} ont été traités" + error: "ERREUR : {message}" config_users: _label: Configuration - form: + fields: user: enableRegistration: Autoriser la création de compte sendConfirmationEmail: Valider la création avec un email de confirmation @@ -1011,12 +1171,25 @@ config_users: loginWithGoogle: Activer la connexion avec Google loginWithFacebook: Activer la connexion avec Facebook -sidebar: - gogo_homepage: "Retour au site" - toggle_dropdown: "Toggle Dropdown" - gogo_directory: "La Carte" - gogo_element_add: "Formulaire" - gogo_partners: "Qui sommes nous" +dashboard: + welcome: >- + <b>Bienvenue dans votre espace Administrateur !</b></br> + L'aventure commence tout juste pour vous, il vous faut maintenant commencer à configurer votre site :)</br> + <a target="_blank" href="https://doc.gogocarto.fr/">Consulter la documentation</a> pour vous aider à démarrer ! Tutoriels vidéos, foire aux questions... + sidebar: + gogo_homepage: "Retour au site" + gogo_directory: "La Carte" + gogo_element_add: "Formulaire" + gogo_partners: "Qui sommes nous" + menu: + contents: Contenus + custom: Personnalisation + data: Données / Import + emailing: Mails / Newsletter + other_config: Autre Configuration + saas: Ferme de Carto + users: Utilisateurs + bulk: _label: "Actions de masse" @@ -1051,6 +1224,116 @@ help: _label: "Aide" doc: "Un problème, une question ? c'est par ici : " -saas: - list: "Liste des Projets" - config: "Configuration" \ No newline at end of file +projects: + _label: Liste des Projets + initialize: # templates/saas/projects/initialize.html.twig + _label: "Créer un compte administrateur" + username: "Nom d'utilisateur" + email: "Adresse e-mail" + plainPassword-1: "Mot de passe" + plainPassword-2: "Retapez votre mot de passe" + +config_saas: + _label: "Configuration" + fields: + saas: + donationUrl: "Url pour faire un don (un bouton sera ajouté sur la page d'accueil)" + endUserLicenceAgreement: "Conditions Générales d'Utilisation" + newProjectInstructions: "Texte personnalisé affiché en haut du formulaire de création d'un nouveau projet" + +emails: + template: + fields: + active: "Activé" + subject: "Objet du message" + content: "Contenu du message" + test: + _label: "Test du rendu du mail {name}" + email: "Entrez une adresse mail" + submit: "Envoyer un test à cette adresse" + subject: "Objet du mail : <em>{subject}</em>" + missing_element: "Vous devez créer un élement dans la base de donnée pour tester l'email" + missing_email: "Aucune adresse mail n'a été renseignée" + done: "Le mail a bien été envoyé à {mail}</br>Si vous ne le voyez pas vérifiez dans vos SPAMs" + custom_message_example: "Un customMessage de test" + service: + success: "Le message a été envoyé" + error: "Erreur :" + no_specific_message: "Pas de message spécifique" + unknown_config: "La configuration {config} n'existe pas" + inactive_config: "La configuration {config} est désactivée" + no_email: "Pas de destinataire" + no_automatic_mail: "Le mail automatique {config} n'existe pas" + no_subject_or_content: "Pas de sujet ou de contenu pour le mail automatique {config}" + unknown: "Inconnu" + +js: # Below keys are available to javascript + import: + source_this_map: Cette Carte + + element_form: + geocoded_marker_text: Déplacez moi pour préciser la position</br>(au centre du bâtiment) + geocode_error: Erreur lors de la géolocalisation de "{address}" + + form_builder: #templates/admin/core_custom/custom-fields/form-builder.html.twig + icon: 'Icône' + icon_placeholder: "Choisissez une icône" + remove_icon: "Supprimer" + copy_icon: "Dupliquer" + edit_icon: "Editer/Masquer" + label: "Libellé" + errorMsg: "Msg. Erreur" + errorMsg_placeholder: "Oups ce texte est un peu long ! // Veuillez renseigner une adresse email valide // ..." + search: "Recherche dans ce champ" + searchWeigh: "Poids de la recherche" + pattern: "Pattern de validation" + pattern_placeholder: "Expression régulière pour la validation de ce champ" + maxlength: "Longueur Max." + content: "Contenu" + style: "Style des cases" + defaultvalue: "Valeur initiale" + accept: "Fichier acceptés" + accept_placeholder: ".pdf audio/* .mp3 (séparés par des espaces)" + timepicker: "Timepicker" + range: "Intervale de dates" + reversedBy: "Inversée par" + reversedBy_placeholder: "Le nom d'un autre champ de type \"lien vers un autre élément\"" + multiple: "Plusieurs choix" + propNameOptions: "Choisissez un champ existant ou entrez un nouveau champ" + roles: + 1: "Administrateur" + subtype: + text: "Texte" + tel: "Téléphone" + email: "Courriel" + url: "URL" + textarea: "Editeur simple" + wysiwyg: "Editeur enrichi" + options: + normal: "Normal" + filled: "Plein" + no: "Non cochée" + yes: "Cochée" + fields: + title: "Titre de la fiche (obligatoire)" + title_help: "Ce champ est indispensable" + taxonomy: "Catégories (obligatoire)" + address: "Adresse (obligatoire)" + address_help: "Ce champ est indispensable" + openhours: "Horaires d'ouvertures" + openhours_help: "Bloc contenant un selecteur d'horaires" + separator: "Séparateur de section" + checkbox: "Case à cocher" + email: "Email principal" + email_help: "Ce champ est conseillé (permet d'envoyer des emails)" + images: "Images (upload)" + files: "Fichiers (upload)" + elements: "Lien vers un autre élément" + + filters_builder: + taxonomy: Filtre Catégories + gogo_date: Filtre Date + gogo_number: Filtre Nombre + + osm_query_builder: + title: Liste des requêtes dans la base OpenStreetMap \ No newline at end of file diff --git a/translations/bundles/FOSUserBundle/FOSUserBundle.fr.yml b/translations/bundles/FOSUserBundle/FOSUserBundle.fr.yml deleted file mode 100755 index 090a1434c407becdf1bb801e425f1ca7d5273ade..0000000000000000000000000000000000000000 --- a/translations/bundles/FOSUserBundle/FOSUserBundle.fr.yml +++ /dev/null @@ -1,95 +0,0 @@ -# Group -group: - edit: - submit: Mettre à jour le groupe - show: - name: Nom du groupe - new: - submit: Créer le groupe - flash: - updated: Le groupe a été mis à jour - created: Le groupe a été créé - deleted: Le groupe a été supprimé - -"Bad credentials.": Nom d'utilisateur ou mot de passe incorrect. - -security: - login: - username: Nom d'utilisateur - password: Mot de passe - remember_me: Se souvenir de moi - submit: Connexion - -# Profile -profile: - show: - username: Nom d'utilisateur - email: Adresse e-mail - edit: - submit: Mettre à jour - flash: - updated: Le profil a été mis à jour - -# Password change -change_password: - submit: Modifier le mot de passe - flash: - success: Le mot de passe a été modifié - -# Registration -registration: - check_email: Un e-mail a été envoyé à l'adresse %email%. Il contient un lien d'activation sur lequel il vous faudra cliquer afin d'activer votre compte. - confirmed: Félicitations %username%, votre compte est maintenant activé. - back: Retour à la page d'origine. - submit: Enregistrer - flash: - user_created: Votre compte a bien été créé ! - email: - subject: Bienvenue %username% ! - message: | - Bonjour %username% ! - - Pour valider votre compte utilisateur, merci de vous rendre sur %confirmationUrl% - - Cordialement, - L'équipe. - -# Password resetting -resetting: - reset: - submit: Modifier le mot de passe - password_already_requested: Un nouveau mot de passe a déjà été demandé pour cet utilisateur dans les dernières 24 heures. - check_email: Un e-mail a été envoyé à l'adresse %email%. Il contient un lien sur lequel il vous faudra cliquer afin de réinitialiser votre mot de passe. - request: - invalid_username: Le nom d'utilisateur ou l'adresse e-mail "%username%" n'existe pas. - username: Nom d'utilisateur ou adresse e-mail - submit: Réinitialiser le mot de passe - flash: - success: Le mot de passe a été réinitialisé avec succès - email: - subject: Réinitialisation de votre mot de passe - message: | - Bonjour %username% ! - - Pour réinitialiser votre mot de passe, merci de vous rendre sur %confirmationUrl% - - Cordialement, - L'équipe. - -# Global strings -layout: - logout: Déconnexion - login: Connexion - register: Inscription - logged_in_as: Connecté en tant que %username% - -# Form field labels -form: - group_name: Nom du groupe - username: Nom d'utilisateur - email: Adresse e-mail - current_password: Mot de passe actuel - password: Mot de passe - password_confirmation: Vérification - new_password: Nouveau mot de passe - new_password_confirmation: Vérification diff --git a/translations/javascripts-translations.yaml b/translations/javascripts-translations.yaml deleted file mode 100644 index 1be1490ccd3ac4d7e431ac11503b7eb89e9a5536..0000000000000000000000000000000000000000 --- a/translations/javascripts-translations.yaml +++ /dev/null @@ -1,3 +0,0 @@ -fr: - element-form: - geocoded-marker-text: Déplacez moi pour préciser la position</br>(au centre du bâtiment) \ No newline at end of file diff --git a/translations/messages+intl-icu.fr.yaml b/translations/messages+intl-icu.fr.yaml index a844d8e3227095a2776428854228484ce24faeff..08198e836b9953b863074ad6263f0d207f674f94 100755 --- a/translations/messages+intl-icu.fr.yaml +++ b/translations/messages+intl-icu.fr.yaml @@ -1,11 +1,3 @@ -# TODO translation issue in src/Services/ElementImportService.php - -importService: - inProgress: "Téléchargement des données en cours... Veuillez patienter..." - processing: "Importation des données {i}/{size} traitées" - logMessage: "Import de {name} terminé" - logError: ", mais avec des problèmes !" - home: pick_category: "Choisissez une catégorie (par défaut : toutes)" geolocalize: Géolocalisez votre position @@ -33,7 +25,6 @@ element.form: controller: error_dont_exist: L'élément demandé n'existe pas... error_unauthorized: Désolé, vous n'êtes pas autorisé à modifier cet élement ! - http_error_dont_exist: Cet élément n'existe pas. thankyou: edited: Merci de votre aide ! Les modifications ont bien été prises en compte ! added: Merci de votre aide ! {name} a bien été ajouté @@ -55,7 +46,7 @@ element.form: recopy_info: Recopier les informations dans un nouveau formulaire admin_message: "Détail de la modification, ce texte remplacera 'customMessage' dans les mails automatiques" -the_map: +directory: _label: La carte my_parameters: @@ -66,6 +57,7 @@ my_parameters: my_contributions: _label: Mes contributions + name: "Nom" history: Historique de mes contributions my_elements: Mes Fiches my_votes: Mes votes @@ -104,9 +96,9 @@ duplicates: duplicated_element: C'est lui ! new_element: Non, c'est un nouvel élément, je continue ! controller: - merged: Cet élément a été fusionné avec un doublon potentiel - marked: Marqué comme non doublon - marked_long: Les éléments ont bien été marqués comme non doublons + merged: Cet élément a été fusionné avec un doublon potentiel + marked: Marqué comme non doublon + marked_long: Les éléments ont bien été marqués comme non doublons vote: user_vote_for_him: 'Voyons voyons, vous ne comptiez quand même pas voter pour votre propre contribution si ? Laissez-en un peu pour les autres !</br> @@ -191,7 +183,7 @@ load_configuration: contributor-login: _label: Identification - error: Erreur + error: #inactive_feature: "Désolé, cette fonctionnalité n'est pas activée pour le moment" # TODO translation pb avec ces chaines ????? #inactive_iframe: "Désolé, cette fonctionnalité n'est pas disponible à l'intérieur d'une iframe" admin_only: Attention ! Cette fonctionnalité est reservée aux administrateur @@ -212,7 +204,6 @@ commons: username: Nom d'utilisateur menu: Menu choose_one_option: Veuillez choisir au moins une option - choose_option: Veuillez choisir une option= choose_category: Choisissez {cat} optional: (optionnel) category_placeholder: Précisez si nécessaire @@ -228,17 +219,17 @@ errors: # TODO erreurs ajax e1: "Les identifiants de connexion ne sont pas corrects" e2: "Une erreur s'est produite lors de la tentative de connexion" -# If some messages are reused over differents pages action: - search: "Rechercher" # just an example, can be deleted + search: "Rechercher" submit: "Enregistrer" - geolocalize_me: "Géolocaliser ma position" # TODO doublon avec home.geolocalize ?? + geolocalize_me: "Géolocaliser ma position" create: "Créer" send: "Envoyer" send_stay: "Envoyer et rester sur le formulaire" cancel: "Annuler" continue: "Continuer" error: "Erreur : {message}" + element: # element controller vote: unallowed: "Désolé, vous n'êtes pas autorisé à voter !" @@ -272,19 +263,7 @@ action: unallowed: "Vous n'êtes pas autorisé à utiliser cette étiquette" uncomplete: "Les paramètres sont incomplets" done: "L'étiquette a bien été modifiée" - mailtest: - draftAutomated: - uncomplete: "No visible elements in database, please create an element" # TODO translation - sentTestAutomated: - uncomplete: "Aucune adresse mail n'a été renseignée" - database_empty: "No elements in database, please create an element for email testing" # TODO translation - done: "Le mail a bien été envoyé à {mail}</br>Si vous ne le voyez pas vérifiez dans vos SPAMs" - draftTest: - done: "Un customMessage de test" - - -directory: # just an example, can be deleted - -partners: # just an example, can be deleted - +js: # Below keys are available to javascript + element_form: + geocoded_marker_text: Déplacez moi pour préciser la position</br>(au centre du bâtiment) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index f97274b428138aac22358ac8c8f2feeadf451210..55c0fb2e86b871907965502dc86a9863962848f7 100755 --- a/yarn.lock +++ b/yarn.lock @@ -3592,7 +3592,7 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fancy-log@^1.1.0, fancy-log@^1.3.2: +fancy-log@^1.1.0, fancy-log@^1.3.2, fancy-log@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== @@ -4189,6 +4189,17 @@ gulp-concat@^2.6.1: through2 "^2.0.0" vinyl "^2.0.0" +gulp-footer@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/gulp-footer/-/gulp-footer-2.0.2.tgz#2cf58e1cc046b8a3a479f1a41bcd1b7baae076cd" + integrity sha512-HsG5VOgKHFRqZXnHGI6oGhPDg70p9pobM+dYOnjBZVLMQUHzLG6bfaPNRJ7XG707E+vWO3TfN0CND9UrYhk94g== + dependencies: + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.6.2" + map-stream "0.0.7" + gulp-gzip@^1.4.0: version "1.4.2" resolved "https://registry.yarnpkg.com/gulp-gzip/-/gulp-gzip-1.4.2.tgz#0422a94014248655b5b1a9eea1c2abee1d4f4337" @@ -4237,6 +4248,13 @@ gulp-sass@^4.0.2: through2 "^2.0.0" vinyl-sourcemaps-apply "^0.2.0" +gulp-tap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-tap/-/gulp-tap-2.0.0.tgz#6f66b79870dcbfc364cf4ebe0735b6008473200f" + integrity sha512-U5/v1bTozx672QHzrvzPe6fPl2io7Wqyrx2y30AG53eMU/idH4BrY/b2yikOkdyhjDqGgPoMUMnpBg9e9LK8Nw== + dependencies: + through2 "^3.0.1" + gulp-uglify@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-2.1.2.tgz#6db85b1d0ee63d18058592b658649d65c2ec4541" @@ -5495,7 +5513,7 @@ lodash.restparam@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= -lodash.template@^3.0.0: +lodash.template@^3.0.0, lodash.template@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" integrity sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8= @@ -8420,7 +8438,7 @@ through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.0: +through2@^3.0.0, through2@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==