1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-19 13:54:25 +01:00

refactor admin pricing translations mapping

This commit is contained in:
Sylvain 2017-02-14 14:58:16 +01:00
parent 0adb9e29c6
commit 334201e551
10 changed files with 202 additions and 166 deletions

View File

@ -56,7 +56,7 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
if data?
TrainingsPricing.update({ id: trainingsPricing.id }, { trainings_pricing: { amount: data } }).$promise
else
_t('please_specify_a_number')
_t('pricing.please_specify_a_number')
##
# Retrieve a plan from its given identifier and returns it
@ -89,13 +89,13 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
##
$scope.showTrainings = (trainings) ->
unless angular.isArray(trainings) and trainings.length > 0
return _t('none')
return _t('pricing.none')
selected = []
angular.forEach $scope.trainings, (t) ->
if trainings.indexOf(t.id) >= 0
selected.push t.name
return if selected.length then selected.join(' | ') else _t('none')
return if selected.length then selected.join(' | ') else _t('pricing.none')
@ -110,7 +110,7 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
training_credit_nb: newdata.training_credits
, angular.noop() # do nothing in case of success
, (error) ->
growl.error(_t('an_error_occurred_while_saving_the_number_of_credits'))
growl.error(_t('pricing.an_error_occurred_while_saving_the_number_of_credits'))
# save the associated trainings
angular.forEach $scope.trainingCreditsGroups, (original, key) ->
@ -126,9 +126,9 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
$scope.trainingCredits.splice($scope.trainingCredits.indexOf(tc), 1)
$scope.trainingCreditsGroups[planId].splice($scope.trainingCreditsGroups[planId].indexOf(tc.id), 1)
, (error) ->
growl.error(_t('an_error_occurred_while_deleting_credit_with_the_TRAINING', {TRAINING:tc.creditable.name}))
growl.error(_t('pricing.an_error_occurred_while_deleting_credit_with_the_TRAINING', {TRAINING:tc.creditable.name}))
else
growl.error(_t('an_error_occurred_unable_to_find_the_credit_to_revoke'))
growl.error(_t('pricing.an_error_occurred_unable_to_find_the_credit_to_revoke'))
# iterate through the new credits to add
angular.forEach newdata.training_ids, (newTrainingId) ->
@ -143,7 +143,7 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
$scope.trainingCreditsGroups[newTc.plan_id].push(newTc.creditable_id)
, (error) -> # failed
training = getTrainingFromId(newTrainingId)
growl.error(_t('an_error_occurred_while_creating_credit_with_the_TRAINING', {TRAINING: training.name}))
growl.error(_t('pricing.an_error_occurred_while_creating_credit_with_the_TRAINING', {TRAINING: training.name}))
console.error(error)
@ -177,7 +177,7 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
# @param credit {Object} credit object, inherited from $resource
##
$scope.showCreditableName = (credit) ->
selected = _t('not_set')
selected = _t('pricing.not_set')
if credit and credit.creditable_id
angular.forEach $scope.machines, (m)->
if m.id == credit.creditable_id
@ -195,21 +195,21 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
$scope.saveMachineCredit = (data, id) ->
for mc in $scope.machineCredits
if mc.plan_id == data.plan_id and mc.creditable_id == data.creditable_id and (id == null or mc.id != id)
growl.error(_t('error_a_credit_linking_this_machine_with_that_subscription_already_exists'))
growl.error(_t('pricing.error_a_credit_linking_this_machine_with_that_subscription_already_exists'))
unless id
$scope.machineCredits.pop()
return false
if id?
Credit.update {id: id}, credit: data, ->
growl.success(_t('changes_have_been_successfully_saved'))
growl.success(_t('pricing.changes_have_been_successfully_saved'))
else
data.creditable_type = 'Machine'
Credit.save
credit: data
, (resp) ->
$scope.machineCredits[$scope.machineCredits.length-1].id = resp.id
growl.success(_t('credit_was_successfully_saved'))
growl.success(_t('pricing.credit_was_successfully_saved'))
##
@ -242,8 +242,8 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
##
$scope.getPlanType = (type) ->
if type == 'PartnerPlan'
return _t('partner')
else return _t('standard')
return _t('pricing.partner')
else return _t('pricing.standard')
##
# Change the plans ordering criterion to the one provided
@ -270,7 +270,7 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
if data?
Price.update({ id: price.id }, { price: { amount: data } }).$promise
else
_t('please_specify_a_number')
_t('pricing.please_specify_a_number')
##
# Delete the specified subcription plan
@ -284,17 +284,17 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
dialogs.confirm
resolve:
object: ->
title: _t('confirmation_required')
msg: _t('do_you_really_want_to_delete_this_subscription_plan')
title: _t('pricing.confirmation_required')
msg: _t('pricing.do_you_really_want_to_delete_this_subscription_plan')
, ->
# the admin has confirmed, delete the plan
Plan.delete {id: id}, (res) ->
growl.success(_t('subscription_plan_was_successfully_deleted'))
growl.success(_t('pricing.subscription_plan_was_successfully_deleted'))
$scope.plans.splice(findItemIdxById(plans, id), 1)
, (error) ->
console.error('[EditPricingController::deletePlan] Error: '+error.statusText) if error.statusText
growl.error(_t('unable_to_delete_the_specified_subscription_an_error_occurred'))
growl.error(_t('pricing.unable_to_delete_the_specified_subscription_an_error_occurred'))
@ -324,8 +324,8 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
dialogs.confirm
resolve:
object: ->
title: _t('confirmation_required')
msg: _t('do_you_really_want_to_delete_this_coupon')
title: _t('pricing.confirmation_required')
msg: _t('pricing.do_you_really_want_to_delete_this_coupon')
, ->
# the admin has confirmed, delete the coupon
Coupon.delete {id: id}, (res) ->
@ -335,9 +335,9 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
, (error) ->
console.error('[EditPricingController::deleteCoupon] Error: '+error.statusText) if error.statusText
if error.status == 422
growl.error(_t('unable_to_delete_the_specified_coupon_already_in_use'))
growl.error(_t('pricing.unable_to_delete_the_specified_coupon_already_in_use'))
else
growl.error(_t('unable_to_delete_the_specified_coupon_an_unexpected_error_occurred'))
growl.error(_t('pricing.unable_to_delete_the_specified_coupon_an_unexpected_error_occurred'))
@ -363,10 +363,10 @@ Application.Controllers.controller "EditPricingController", ["$scope", "$state",
## Callback to validate sending of the coupon
$scope.ok = ->
Coupon.send {coupon_code: coupon.code, user_id: $scope.ctrl.member.id}, (res) ->
growl.success(_t('coupon_successfully_sent_to_USER', {USER: $scope.ctrl.member.name}))
growl.success(_t('pricing.coupon_successfully_sent_to_USER', {USER: $scope.ctrl.member.name}))
$uibModalInstance.close({user_id: $scope.ctrl.member.id})
, (err) ->
growl.error(_t('an_error_occurred_unable_to_send_the_coupon'))
growl.error(_t('pricing.an_error_occurred_unable_to_send_the_coupon'))
## Callback to close the modal and cancel the sending process
$scope.cancel = ->

View File

@ -1,13 +1,13 @@
<h2 translate>{{ 'list_of_the_coupons' }}</h2>
<h2 translate>{{ 'pricing.list_of_the_coupons' }}</h2>
<button type="button" class="btn btn-warning m-t-lg m-b" ui-sref="app.admin.coupons_new" translate>{{ 'add_a_new_coupon' }}</button>
<button type="button" class="btn btn-warning m-t-lg m-b" ui-sref="app.admin.coupons_new" translate>{{ 'pricing.add_a_new_coupon' }}</button>
<table class="table">
<thead>
<tr>
<th translate>{{ 'name' }}</th>
<th translate>{{ 'discount' }}</th>
<th translate>{{ 'nb_of_usages' }}</th>
<th translate>{{ 'status' }}</th>
<th translate>{{ 'pricing.name' }}</th>
<th translate>{{ 'pricing.discount' }}</th>
<th translate>{{ 'pricing.nb_of_usages' }}</th>
<th translate>{{ 'pricing.status' }}</th>
<th></th>
</tr>
</thead>
@ -19,7 +19,7 @@
<span ng-show="coupon.type == 'amount_off'">{{coupon.amount_off}} {{currencySymbol}}</span>
</td>
<td>{{coupon.usages}}</td>
<td translate>{{coupon.status}}</td>
<td translate>{{'pricing.'+coupon.status}}</td>
<td>
<button type="button" class="btn btn-default" ng-click="sendCouponToUser(coupon)"><i class="fa fa-send-o"></i> </button>
<button type="button" class="btn btn-default" ui-sref="app.admin.coupons_edit({id:coupon.id})"><i class="fa fa-pencil-square-o"></i></button>

View File

@ -1,10 +1,10 @@
<h2 class="m-t-lg" translate>{{ 'trainings' }}</h2>
<h2 class="m-t-lg" translate>{{ 'pricing.trainings' }}</h2>
<table class="table">
<thead>
<tr>
<th style="width:20%" translate>{{ 'subscription' }}</th>
<th style="width:10%" translate>{{ 'credits' }}</th>
<th style="width:50%" translate>{{ 'related_trainings' }}</th>
<th style="width:20%" translate>{{ 'pricing.subscription' }}</th>
<th style="width:10%" translate>{{ 'pricing.credits' }}</th>
<th style="width:50%" translate>{{ 'pricing.related_trainings' }}</th>
<th style="width:20%"></th>
</tr>
</thead>
@ -43,17 +43,17 @@
</tbody>
</table>
<h2 class="m-t-lg" translate>{{ 'machines' }}</h2>
<h2 class="m-t-lg" translate>{{ 'pricing.machines' }}</h2>
<div class="btn-group m-t-md m-b-md">
<button type="button" class="btn btn-warning" ng-click="addMachineCredit($event)" translate>{{ 'add_a_machine_credit' }}</button>
<button type="button" class="btn btn-warning" ng-click="addMachineCredit($event)" translate>{{ 'pricing.add_a_machine_credit' }}</button>
</div>
<table class="table">
<thead>
<tr>
<th style="width:20%" translate>{{ 'machine' }}</th>
<th style="width:10%" translate>{{ 'hours' }}</th>
<th style="width:50%" translate>{{ 'related_subscriptions' }}</th>
<th style="width:20%" translate>{{ 'pricing.machine' }}</th>
<th style="width:10%" translate>{{ 'pricing.hours' }}</th>
<th style="width:50%" translate>{{ 'pricing.related_subscriptions' }}</th>
<th style="width:20%"></th>
</tr>
</thead>

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1 translate>{{ 'pricing_management' }}</h1>
<h1 translate>{{ 'pricing.pricing_management' }}</h1>
</section>
</div>
@ -21,23 +21,23 @@
<div class="col-md-12">
<uib-tabset justified="true">
<uib-tab heading="{{ 'subscriptions' | translate }}">
<uib-tab heading="{{ 'pricing.subscriptions' | translate }}">
<ng-include src="'<%= asset_path 'admin/pricing/subscriptions.html' %>'"></ng-include>
</uib-tab>
<uib-tab heading="{{ 'trainings' | translate }}">
<uib-tab heading="{{ 'pricing.trainings' | translate }}">
<ng-include src="'<%= asset_path 'admin/pricing/trainings.html' %>'"></ng-include>
</uib-tab>
<uib-tab heading="{{ 'machine_hours' | translate }}">
<uib-tab heading="{{ 'pricing.machine_hours' | translate }}">
<ng-include src="'<%= asset_path 'admin/pricing/machine_hours.html' %>'"></ng-include>
</uib-tab>
<uib-tab heading="{{ 'credits' | translate }}">
<uib-tab heading="{{ 'pricing.credits' | translate }}">
<ng-include src="'<%= asset_path 'admin/pricing/credits.html' %>'"></ng-include>
</uib-tab>
<uib-tab heading="{{ 'coupons' | translate }}">
<uib-tab heading="{{ 'pricing.coupons' | translate }}">
<ng-include src="'<%= asset_path 'admin/pricing/coupons.html' %>'"></ng-include>
</uib-tab>
</uib-tabset>

View File

@ -1,10 +1,10 @@
<div class="alert alert-warning m-t">
{{ 'these_prices_match_machine_hours_rates_' | translate }} <span class="font-bold" translate>{{ '_without_subscriptions' }}</span>.
{{ 'pricing.these_prices_match_machine_hours_rates_' | translate }} <span class="font-bold" translate>{{ 'pricing._without_subscriptions' }}</span>.
</div>
<table class="table">
<thead>
<tr>
<th style="width:20%" translate>{{ 'machines' }}</th>
<th style="width:20%" translate>{{ 'pricing.machines' }}</th>
<th style="width:20%" ng-repeat="group in groups">
<span class="text-u-c text-sm">{{group.name}}</span>
</th>

View File

@ -1,11 +1,11 @@
<div class="modal-header">
<h3 class="text-center red" translate>{{ 'send_a_coupon' }}</h3>
<h3 class="text-center red" translate>{{ 'pricing.send_a_coupon' }}</h3>
</div>
<div class="modal-body">
<select-member></select-member>
<div class="widget panel b-a m">
<div class="panel-heading b-b small">
<h3 class="panel-title" translate>{{ 'coupon' }}</h3>
<h3 class="panel-title" translate>{{ 'pricing.coupon' }}</h3>
</div>
<div class="widget-content no-bg auto wrapper">
<table>
@ -13,12 +13,12 @@
<tr><th style="width:60%"></th></tr>
</thead>
<tbody>
<tr><td translate>{{'code'}}</td> <td>{{coupon.code}}</td></tr>
<tr><td translate>{{'discount'}}</td> <td><span ng-show="coupon.type == 'percent_off'">{{coupon.percent_off}} %</span><span ng-show="coupon.type == 'amount_off'">{{coupon.amount_off}} {{currencySymbol}}</span></td></tr>
<tr><td translate>{{'validity_per_user'}}</td> <td translate>{{coupon.validity_per_user}}</td></tr>
<tr><td translate>{{'valid_until'}}</td> <td>{{coupon.valid_until | amDateFormat:'L'}}</td></tr>
<tr><td translate>{{'usages'}}</td> <td>{{coupon.usages}} / {{coupon.max_usages | maxCount}}</td></tr>
<tr><td translate>{{'enabled'}}</td> <td>{{coupon.active | booleanFormat}}</td></tr>
<tr><td translate>{{'pricing.code'}}</td> <td>{{coupon.code}}</td></tr>
<tr><td translate>{{'pricing.discount'}}</td> <td><span ng-show="coupon.type == 'percent_off'">{{coupon.percent_off}} %</span><span ng-show="coupon.type == 'amount_off'">{{coupon.amount_off}} {{currencySymbol}}</span></td></tr>
<tr><td translate>{{'pricing.validity_per_user'}}</td> <td translate>{{'pricing.'+coupon.validity_per_user}}</td></tr>
<tr><td translate>{{'pricing.valid_until'}}</td> <td>{{coupon.valid_until | amDateFormat:'L'}}</td></tr>
<tr><td translate>{{'pricing.usages'}}</td> <td>{{coupon.usages}} / {{coupon.max_usages | maxCount}}</td></tr>
<tr><td translate>{{'pricing.enabled'}}</td> <td>{{coupon.active | booleanFormat}}</td></tr>
</tbody>
</table>
</div>

View File

@ -1,21 +1,21 @@
<h2 translate>{{ 'list_of_the_subscription_plans' }}</h2>
<h2 translate>{{ 'pricing.list_of_the_subscription_plans' }}</h2>
<div ng-show="fablabWithoutPlans" class="alert alert-warning m-t">
{{ 'beware_the_subscriptions_are_disabled_on_this_application' | translate }}
{{ 'you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager' | translate }}
<br>{{ 'for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later' | translate }}
{{ 'pricing.beware_the_subscriptions_are_disabled_on_this_application' | translate }}
{{ 'pricing.you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager' | translate }}
<br>{{ 'pricing.for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later' | translate }}
</div>
<button type="button" class="btn btn-warning m-t-lg m-b" ui-sref="app.admin.plans.new" translate>{{ 'add_a_new_subscription_plan' }}</button>
<button type="button" class="btn btn-warning m-t-lg m-b" ui-sref="app.admin.plans.new" translate>{{ 'pricing.add_a_new_subscription_plan' }}</button>
<table class="table">
<thead>
<tr>
<th><a href="" ng-click="setOrderPlans('type')">{{ 'type' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='type', 'fa fa-sort-alpha-desc': orderPlans=='-type', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('name')">{{ 'name' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='name', 'fa fa-sort-alpha-desc': orderPlans=='-name', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('interval')">{{ 'duration' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-amount-asc': orderPlans=='interval', 'fa fa-sort-amount-desc': orderPlans=='-interval', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('group_id')">{{ 'group' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='group_id', 'fa fa-sort-alpha-desc': orderPlans=='-group_id', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th class="hidden-xs"><a href="" ng-click="setOrderPlans('ui_weight')">{{ 'prominence' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='ui_weight', 'fa fa-sort-numeric-desc': orderPlans=='-ui_weight', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('amount')">{{ 'price' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='amount', 'fa fa-sort-numeric-desc': orderPlans=='-amount', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('type')">{{ 'pricing.type' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='type', 'fa fa-sort-alpha-desc': orderPlans=='-type', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('name')">{{ 'pricing.name' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='name', 'fa fa-sort-alpha-desc': orderPlans=='-name', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('interval')">{{ 'pricing.duration' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-amount-asc': orderPlans=='interval', 'fa fa-sort-amount-desc': orderPlans=='-interval', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('group_id')">{{ 'pricing.group' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='group_id', 'fa fa-sort-alpha-desc': orderPlans=='-group_id', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th class="hidden-xs"><a href="" ng-click="setOrderPlans('pricing.ui_weight')">{{ 'pricing.prominence' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='ui_weight', 'fa fa-sort-numeric-desc': orderPlans=='-ui_weight', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th><a href="" ng-click="setOrderPlans('amount')">{{ 'pricing.price' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='amount', 'fa fa-sort-numeric-desc': orderPlans=='-amount', 'fa fa-arrows-v': orderPlans }"></i></a></th>
<th></th>
</tr>
</thead>

View File

@ -1,7 +1,7 @@
<table class="table">
<thead>
<tr>
<th style="width:20%" translate>{{ 'trainings' }}</th>
<th style="width:20%" translate>{{ 'pricing.trainings' }}</th>
<th style="width:20%" ng-repeat="group in groups">
<span class="text-u-c text-sm">{{group.name}}</span>
</th>

View File

@ -132,55 +132,73 @@ en:
pricing:
# subscriptions, prices, credits and coupons management
pricing_management: "Pricing management"
list_of_the_subscription_plans: "List of the subscription plans"
beware_the_subscriptions_are_disabled_on_this_application: "Beware, the subscriptions are disabled on this application."
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "You can create some but they won't be available until the project is redeployed by the server manager."
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "For safety reasons, please don't create subscriptions if you don't intend to use them later."
add_a_new_subscription_plan: "Add a new subscription plan"
duration: "Duration"
prominence: "Prominence"
machine_hours: "Machine hours"
these_prices_match_machine_hours_rates_: "These prices match machine hours rates"
_without_subscriptions: "without subscriptions"
credits: "Credits"
related_trainings: "Related trainings"
add_a_machine_credit: "Add a machine credit"
machine: "Machine"
hours: "Hours"
related_subscriptions: "Related subscriptions"
please_specify_a_number: "Please specify a number."
none: "None" # grammar note: concordance with "training".
an_error_occurred_while_saving_the_number_of_credits: "An error occurred while saving the number of credits."
an_error_occurred_while_deleting_credit_with_the_TRAINING: "An error occurred while deleting credit with the {{TRAINING}}." # angular interpolation
an_error_occurred_unable_to_find_the_credit_to_revoke: "An error occurred : unable to find the credit to revoke."
an_error_occurred_while_creating_credit_with_the_TRAINING: "An error occurred while creating credit with the {{TRAINING}}." # angular interpolation
not_set: "Not set"
error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Error : a credit linking this machine with that subscription already exists."
changes_have_been_successfully_saved: "Changes have been successfully saved."
credit_was_successfully_saved: "Credit was successfully saved."
do_you_really_want_to_delete_this_subscription_plan: "Do you really want to delete this subscription plan?"
subscription_plan_was_successfully_deleted: "Subscription plan was successfully deleted."
unable_to_delete_the_specified_subscription_an_error_occurred: "Unable to delete the specified subscription, an error occurred."
coupons: "Coupons"
list_of_the_coupons: "List of the coupons"
discount: "Discount"
nb_of_usages: "Number of usages"
status: "Status"
add_a_new_coupon: "Add a new coupon"
disabled: "Disabled"
expired: "Expired"
sold_out: "Sold out"
active: "Active"
do_you_really_want_to_delete_this_coupon: "Do you really want to delete this coupon?"
coupon_was_successfully_deleted: "Coupon was successfully deleted."
unable_to_delete_the_specified_coupon_already_in_use: "Unable to delete the specified coupon: it is already used with some invoices."
unable_to_delete_the_specified_coupon_an_unexpected_error_occurred: "Unable to delete the specified coupon: an unexpected error occurred."
send_a_coupon: "Send a coupon"
coupon: "Coupon"
usages: "Usages"
coupon_successfully_sent_to_USER: "Coupon successfully sent to {{USER}}" # angular interpolation
an_error_occurred_unable_to_send_the_coupon: "An unexpected error prevent from sending the coupon."
pricing:
pricing_management: "Pricing management"
subscriptions: "Subscriptions"
trainings: "Trainings"
list_of_the_subscription_plans: "List of the subscription plans"
beware_the_subscriptions_are_disabled_on_this_application: "Beware, the subscriptions are disabled on this application."
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "You can create some but they won't be available until the project is redeployed by the server manager."
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "For safety reasons, please don't create subscriptions if you don't intend to use them later."
add_a_new_subscription_plan: "Add a new subscription plan"
type: "Type"
partner: "Partner"
standard: "Standard"
name: "Name"
duration: "Duration"
group: "Group"
prominence: "Prominence"
price: "Price"
machine_hours: "Machine hours"
these_prices_match_machine_hours_rates_: "These prices match machine hours rates"
_without_subscriptions: "without subscriptions"
machines: "Machines"
credits: "Credits"
subscription: "Subscription"
related_trainings: "Related trainings"
add_a_machine_credit: "Add a machine credit"
machine: "Machine"
hours: "Hours"
related_subscriptions: "Related subscriptions"
please_specify_a_number: "Please specify a number."
none: "None" # grammar note: concordance with "training".
an_error_occurred_while_saving_the_number_of_credits: "An error occurred while saving the number of credits."
an_error_occurred_while_deleting_credit_with_the_TRAINING: "An error occurred while deleting credit with the {{TRAINING}}." # angular interpolation
an_error_occurred_unable_to_find_the_credit_to_revoke: "An error occurred : unable to find the credit to revoke."
an_error_occurred_while_creating_credit_with_the_TRAINING: "An error occurred while creating credit with the {{TRAINING}}." # angular interpolation
not_set: "Not set"
error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Error : a credit linking this machine with that subscription already exists."
changes_have_been_successfully_saved: "Changes have been successfully saved."
credit_was_successfully_saved: "Credit was successfully saved."
do_you_really_want_to_delete_this_subscription_plan: "Do you really want to delete this subscription plan?"
subscription_plan_was_successfully_deleted: "Subscription plan was successfully deleted."
unable_to_delete_the_specified_subscription_an_error_occurred: "Unable to delete the specified subscription, an error occurred."
coupons: "Coupons"
list_of_the_coupons: "List of the coupons"
discount: "Discount"
nb_of_usages: "Number of usages"
status: "Status"
add_a_new_coupon: "Add a new coupon"
disabled: "Disabled"
expired: "Expired"
sold_out: "Sold out"
active: "Active"
confirmation_required: "Confirmation required"
do_you_really_want_to_delete_this_coupon: "Do you really want to delete this coupon?"
coupon_was_successfully_deleted: "Coupon was successfully deleted."
unable_to_delete_the_specified_coupon_already_in_use: "Unable to delete the specified coupon: it is already used with some invoices."
unable_to_delete_the_specified_coupon_an_unexpected_error_occurred: "Unable to delete the specified coupon: an unexpected error occurred."
send_a_coupon: "Send a coupon"
coupon: "Coupon"
usages: "Usages"
coupon_successfully_sent_to_USER: "Coupon successfully sent to {{USER}}" # angular interpolation
an_error_occurred_unable_to_send_the_coupon: "An unexpected error prevent from sending the coupon."
code: "Code"
enabled: "Enabled"
validity_per_user: "Validity per user"
once: "Just once"
forever: "Each use"
valid_until: "Valid until (included)"
coupons_new:
# ajouter un code promotionnel

View File

@ -132,55 +132,73 @@ fr:
pricing:
# gestion des abonnements, des tarifs, des crédits et des codes promo
pricing_management: "Gestion de la tarification"
list_of_the_subscription_plans: "Liste des formules d'abonnements"
beware_the_subscriptions_are_disabled_on_this_application: "Attention, les abonnements sont désactivés sur cette application."
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "Vous pouvez tout de même en créer mais ils ne seront disponibles qu'après un redéploiement du projet par le responsable du serveur."
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "Pour des raisons de sécurité, veuillez ne pas créer d'abonnements si vous ne comptez pas les utiliser par la suite."
add_a_new_subscription_plan: "Ajouter une nouvelle formule d'abonnement"
duration: "Durée"
prominence: "Importance"
machine_hours: "Heures machines"
these_prices_match_machine_hours_rates_: "Ces tarifs correspondent au prix d'une heure machine"
_without_subscriptions: "sans abonnement"
credits: "Crédits"
related_trainings: "Formations associées"
add_a_machine_credit: "Ajouter un crédit Machine"
machine: "Machine"
hours: "Heures"
related_subscriptions: "Abonnements associés"
please_specify_a_number: "Veuillez spécifier un nombre."
none: "Aucune" # grammar note: concordance with "training".
an_error_occurred_while_saving_the_number_of_credits: "Une erreur est survenue lors de l'enregistrement du nombre de crédits."
an_error_occurred_while_deleting_credit_with_the_TRAINING: "Une erreur est survenue lors de la suppression du crédit avec la {{TRAINING}}." # angular interpolation
an_error_occurred_unable_to_find_the_credit_to_revoke: "Une erreur est survenue : impossible de retrouver le crédit à enlever."
an_error_occurred_while_creating_credit_with_the_TRAINING: "Une erreur est survenue lors de la création du crédit avec la {{TRAINING}}." # angular interpolation
not_set: "Non défini"
error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Erreur : un crédit associant cette machine et cet abonnement existe déjà."
changes_have_been_successfully_saved: "Les modifications ont bien été enregistrées."
credit_was_successfully_saved: "Le crédit a bien été enregistré."
do_you_really_want_to_delete_this_subscription_plan: "Êtes-vous sûr(e) de vouloir supprimer cette formule d'abonnement ?"
subscription_plan_was_successfully_deleted: "La formule d'abonnement a bien été supprimée."
unable_to_delete_the_specified_subscription_an_error_occurred: "Impossible de supprimer l'abonnement spécifié, une erreur s'est produite."
coupons: "Codes promotionnels"
list_of_the_coupons: "Liste des codes promotionnels"
discount: "Réduction"
nb_of_usages: "Nombre d'utilisations"
status: "Statut"
add_a_new_coupon: "Ajouter un code promotionnel"
disabled: "Désactivé"
expired: "Expiré"
sold_out: "Épuisé"
active: "Actif"
do_you_really_want_to_delete_this_coupon: "Êtes-vous sûr(e) de vouloir supprimer ce code promotionnel ?"
coupon_was_successfully_deleted: "Le code promotionnel a bien été supprimé."
unable_to_delete_the_specified_coupon_already_in_use: "Impossible de supprimer le code promotionnel : il est utilisé dans des factures."
unable_to_delete_the_specified_coupon_an_unexpected_error_occurred: "Impossible de supprimer le code promotionnel : une erreur inattendue s'est produite."
send_a_coupon: "Envoyer un code promo"
coupon: "Code promo"
usages: "Utilisations"
coupon_successfully_sent_to_USER: "Le code promotionnel a bien été envoyé à {{USER}}" # angular interpolation
an_error_occurred_unable_to_send_the_coupon: "Une erreur inattendue a empêché l'envoi du code promotionnel."
pricing:
pricing_management: "Gestion de la tarification"
subscriptions: "Abonnements"
trainings: "Formations"
list_of_the_subscription_plans: "Liste des formules d'abonnements"
beware_the_subscriptions_are_disabled_on_this_application: "Attention, les abonnements sont désactivés sur cette application."
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "Vous pouvez tout de même en créer mais ils ne seront disponibles qu'après un redéploiement du projet par le responsable du serveur."
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "Pour des raisons de sécurité, veuillez ne pas créer d'abonnements si vous ne comptez pas les utiliser par la suite."
add_a_new_subscription_plan: "Ajouter une nouvelle formule d'abonnement"
type: "Type"
partner: "Partenaire"
standard: "Standard"
name: "Nom"
duration: "Durée"
group: "Groupe"
prominence: "Importance"
price: "Prix"
machine_hours: "Heures machines"
these_prices_match_machine_hours_rates_: "Ces tarifs correspondent au prix d'une heure machine"
_without_subscriptions: "sans abonnement"
machines: "Machines"
credits: "Crédits"
subscription: "Abonnement"
related_trainings: "Formations associées"
add_a_machine_credit: "Ajouter un crédit Machine"
machine: "Machine"
hours: "Heures"
related_subscriptions: "Abonnements associés"
please_specify_a_number: "Veuillez spécifier un nombre."
none: "Aucune" # grammar note: concordance with "training".
an_error_occurred_while_saving_the_number_of_credits: "Une erreur est survenue lors de l'enregistrement du nombre de crédits."
an_error_occurred_while_deleting_credit_with_the_TRAINING: "Une erreur est survenue lors de la suppression du crédit avec la {{TRAINING}}." # angular interpolation
an_error_occurred_unable_to_find_the_credit_to_revoke: "Une erreur est survenue : impossible de retrouver le crédit à enlever."
an_error_occurred_while_creating_credit_with_the_TRAINING: "Une erreur est survenue lors de la création du crédit avec la {{TRAINING}}." # angular interpolation
not_set: "Non défini"
error_a_credit_linking_this_machine_with_that_subscription_already_exists: "Erreur : un crédit associant cette machine et cet abonnement existe déjà."
changes_have_been_successfully_saved: "Les modifications ont bien été enregistrées."
credit_was_successfully_saved: "Le crédit a bien été enregistré."
do_you_really_want_to_delete_this_subscription_plan: "Êtes-vous sûr(e) de vouloir supprimer cette formule d'abonnement ?"
subscription_plan_was_successfully_deleted: "La formule d'abonnement a bien été supprimée."
unable_to_delete_the_specified_subscription_an_error_occurred: "Impossible de supprimer l'abonnement spécifié, une erreur s'est produite."
coupons: "Codes promotionnels"
list_of_the_coupons: "Liste des codes promotionnels"
discount: "Réduction"
nb_of_usages: "Nombre d'utilisations"
status: "Statut"
add_a_new_coupon: "Ajouter un code promotionnel"
disabled: "Désactivé"
expired: "Expiré"
sold_out: "Épuisé"
active: "Actif"
confirmation_required: "Confirmation requise"
do_you_really_want_to_delete_this_coupon: "Êtes-vous sûr(e) de vouloir supprimer ce code promotionnel ?"
coupon_was_successfully_deleted: "Le code promotionnel a bien été supprimé."
unable_to_delete_the_specified_coupon_already_in_use: "Impossible de supprimer le code promotionnel : il est utilisé dans des factures."
unable_to_delete_the_specified_coupon_an_unexpected_error_occurred: "Impossible de supprimer le code promotionnel : une erreur inattendue s'est produite."
send_a_coupon: "Envoyer un code promo"
coupon: "Code promo"
usages: "Utilisations"
coupon_successfully_sent_to_USER: "Le code promotionnel a bien été envoyé à {{USER}}" # angular interpolation
an_error_occurred_unable_to_send_the_coupon: "Une erreur inattendue a empêché l'envoi du code promotionnel."
code: "Code"
enabled: "Activé"
validity_per_user: "Validité par utilisateur"
once: "Une seule fois"
forever: "À chaque utilisation"
valid_until: "Valable jusqu'au (inclus)"
coupons_new:
# ajouter un code promotionnel