diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 218c9ebb6..5a6639f0b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,21 +34,12 @@ If you want to contribute code to solve an issue: * Fork the project. * Create a topic branch based on master. * Commit there your code to solve the issue. -* Make sure all test are passing (and add specs to test any new feature if needed). +* Make sure all test are passing (and add specs to test any new feature you've added). * Follow these [best practices](https://github.com/styleguide/ruby) * Open a *pull request* to the main repository describing what issue you are addressing. **Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) -## Cleaning up - -In the rush of time sometimes things get messy, you can help us cleaning things up: - -* implement [pending specs](https://travis-ci.org/consul/consul) -* increase [code coverage](https://coveralls.io/github/consul/consul?branch=master) -* improve [code quality](https://codeclimate.com/github/consul/consul) -* make [code consistent](https://github.com/bbatsov/rubocop) - ## Other ways of contributing without coding * If you think there's a feature missing, or find a bug, create an issue (make sure it has not already been reported). diff --git a/Dockerfile b/Dockerfile index 880d17e43..52547d243 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,11 @@ +# Use Ruby 2.3.6 as base image FROM ruby:2.3.6 +ENV DEBIAN_FRONTEND noninteractive + # Install essential Linux packages -RUN apt-get update -qq && apt-get install -y build-essential libpq-dev postgresql-client nodejs imagemagick sudo +RUN apt-get update -qq +RUN apt-get install -y build-essential libpq-dev postgresql-client nodejs imagemagick sudo libxss1 libappindicator1 libindicator7 unzip memcached # Files created inside the container repect the ownership RUN adduser --shell /bin/bash --disabled-password --gecos "" consul \ @@ -34,13 +38,22 @@ COPY Gemfile_custom Gemfile_custom # Prevent bundler warnings; ensure that the bundler version executed is >= that which created Gemfile.lock RUN gem install bundler -# Finish establishing our Ruby enviornment +# Finish establishing our Ruby environment RUN bundle install --full-index +# Install Chromium and ChromeDriver for E2E integration tests +RUN apt-get update -qq && apt-get install -y chromium +RUN wget -N http://chromedriver.storage.googleapis.com/2.40/chromedriver_linux64.zip +RUN unzip chromedriver_linux64.zip +RUN chmod +x chromedriver +RUN mv -f chromedriver /usr/local/share/chromedriver +RUN ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver +RUN ln -s /usr/local/share/chromedriver /usr/bin/chromedriver + # Copy the Rails application into place COPY . . # Define the script we want run once the container boots # Use the "exec" form of CMD so our script shuts down gracefully on SIGTERM (i.e. `docker stop`) -#CMD [ "config/containers/app_cmd.sh" ] +# CMD [ "config/containers/app_cmd.sh" ] CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"] diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 44258bc7a..0d5b962c1 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -33,6 +33,7 @@ //= require moderator_comment //= require moderator_debates //= require moderator_proposals +//= require moderator_budget_investments //= require moderator_proposal_notifications //= require prevent_double_submission //= require gettext diff --git a/app/assets/javascripts/moderator_budget_investments.js.coffee b/app/assets/javascripts/moderator_budget_investments.js.coffee new file mode 100644 index 000000000..612a058a4 --- /dev/null +++ b/app/assets/javascripts/moderator_budget_investments.js.coffee @@ -0,0 +1,8 @@ +App.ModeratorBudgetInvestments = + + add_class_faded: (id) -> + $("##{id}").addClass("faded") + $("#comments").addClass("faded") + + hide_moderator_actions: (id) -> + $("##{id} .js-moderator-investment-actions:first").hide() diff --git a/app/assets/stylesheets/admin.scss b/app/assets/stylesheets/admin.scss index a8d81a12d..7b74b2697 100644 --- a/app/assets/stylesheets/admin.scss +++ b/app/assets/stylesheets/admin.scss @@ -46,6 +46,10 @@ $sidebar-active: #f4fcd0; .top-links { background: #000; + + a { + line-height: rem-calc($line-height * 1.5); + } } .admin-top-bar { @@ -190,6 +194,11 @@ $sidebar-active: #f4fcd0; &.with-button { line-height: $line-height * 2; + + .button { + background: #fff; + color: $brand; + } } } @@ -204,6 +213,19 @@ $sidebar-active: #f4fcd0; table { + thead { + color: #fff; + } + + th { + background: $brand; + color: #fff; + + label { + color: #fff; + } + } + .break { word-break: break-word; } @@ -220,7 +242,6 @@ $sidebar-active: #f4fcd0; @include breakpoint(medium) { margin-left: $line-height / 2; - margin-right: $line-height / 2; margin-top: 0; } } @@ -335,6 +356,14 @@ $sidebar-active: #f4fcd0; margin-bottom: 0 !important; } +.enabled { + color: $color-success; +} + +.disabled { + color: $text-medium; +} + // 02. Sidebar // ----------- diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index a140fca4c..8172d13ab 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -878,11 +878,6 @@ footer { h1 { margin-top: $line-height; - img { - height: rem-calc(80); - width: rem-calc(80); - } - a { color: #fff; display: block; diff --git a/app/controllers/admin/hidden_budget_investments_controller.rb b/app/controllers/admin/hidden_budget_investments_controller.rb new file mode 100644 index 000000000..439f3c722 --- /dev/null +++ b/app/controllers/admin/hidden_budget_investments_controller.rb @@ -0,0 +1,34 @@ +class Admin::HiddenBudgetInvestmentsController < Admin::BaseController + include FeatureFlags + + has_filters %w{all with_confirmed_hide without_confirmed_hide}, only: :index + + feature_flag :budgets + + before_action :load_investment, only: [:confirm_hide, :restore] + + def index + @investments = Budget::Investment.only_hidden.send(@current_filter) + .order(hidden_at: :desc) + .page(params[:page]) + end + + def confirm_hide + @investment.confirm_hide + redirect_to request.query_parameters.merge(action: :index) + end + + def restore + @investment.restore + @investment.ignore_flag + Activity.log(current_user, :restore, @investment) + redirect_to request.query_parameters.merge(action: :index) + end + + private + + def load_investment + @investment = Budget::Investment.with_hidden.find(params[:id]) + end + +end diff --git a/app/controllers/admin/site_customization/information_texts_controller.rb b/app/controllers/admin/site_customization/information_texts_controller.rb new file mode 100644 index 000000000..25594fc4a --- /dev/null +++ b/app/controllers/admin/site_customization/information_texts_controller.rb @@ -0,0 +1,90 @@ +class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomization::BaseController + include Translatable + + def index + fetch_existing_keys + append_or_create_keys + @content = @content[@tab.to_s] + end + + def update + content_params.each do |content| + values = content[:values].slice(*translation_params(content[:values])) + + unless values.empty? + values.each do |key, value| + locale = key.split("_").last + + if value == t(content[:id], locale: locale) || value.match(/translation missing/) + next + else + text = I18nContent.find_or_create_by(key: content[:id]) + Globalize.locale = locale + text.update(value: value) + end + end + end + + end + + redirect_to admin_site_customization_information_texts_path, + notice: t('flash.actions.update.translation') + end + + private + + def i18n_content_params + attributes = [:key, :value] + params.require(:information_texts).permit(*attributes, translation_params(params[:information_texts])) + end + + def resource_model + I18nContent + end + + def resource + resource_model.find(content_params[:id]) + end + + def content_params + params.require(:contents).values + end + + def delete_translations + languages_to_delete = params[:delete_translations].select { |k, v| params[:delete_translations][k] == '1' }.keys + languages_to_delete.each do |locale| + I18nContentTranslation.destroy_all(locale: locale) + end + end + + def fetch_existing_keys + @existing_keys = {} + @tab = params[:tab] || :debates + + I18nContent.begins_with_key(@tab) + .all + .map{ |content| @existing_keys[content.key] = content } + end + + def append_or_create_keys + @content = {} + I18n.backend.send(:init_translations) unless I18n.backend.initialized? + + locale = params[:locale] || I18n.locale + translations = I18n.backend.send(:translations)[locale.to_sym] + + translations.each do |k, v| + @content[k.to_s] = flat_hash(v).keys + .map { |s| @existing_keys["#{k.to_s}.#{s}"].nil? ? + I18nContent.new(key: "#{k.to_s}.#{s}") : + @existing_keys["#{k.to_s}.#{s}"] } + end + end + + def flat_hash(h, f = nil, g = {}) + return g.update({ f => h }) unless h.is_a? Hash + h.each { |k, r| flat_hash(r, [f,k].compact.join('.'), g) } + return g + end + +end diff --git a/app/controllers/concerns/flag_actions.rb b/app/controllers/concerns/flag_actions.rb index 3f5d0b2c7..da637407a 100644 --- a/app/controllers/concerns/flag_actions.rb +++ b/app/controllers/concerns/flag_actions.rb @@ -3,18 +3,32 @@ module FlagActions def flag Flag.flag(current_user, flaggable) - respond_with flaggable, template: "#{controller_name}/_refresh_flag_actions" + + if controller_name == 'investments' + respond_with flaggable, template: "budgets/#{controller_name}/_refresh_flag_actions" + else + respond_with flaggable, template: "#{controller_name}/_refresh_flag_actions" + end end def unflag Flag.unflag(current_user, flaggable) - respond_with flaggable, template: "#{controller_name}/_refresh_flag_actions" + + if controller_name == 'investments' + respond_with flaggable, template: "budgets/#{controller_name}/_refresh_flag_actions" + else + respond_with flaggable, template: "#{controller_name}/_refresh_flag_actions" + end end private def flaggable - instance_variable_get("@#{resource_model.to_s.downcase}") + if resource_model.to_s == 'Budget::Investment' + instance_variable_get("@investment") + else + instance_variable_get("@#{resource_model.to_s.downcase}") + end end -end \ No newline at end of file +end diff --git a/app/controllers/concerns/polymorphic.rb b/app/controllers/concerns/polymorphic.rb index 8fd4ab312..0e25b4231 100644 --- a/app/controllers/concerns/polymorphic.rb +++ b/app/controllers/concerns/polymorphic.rb @@ -3,7 +3,11 @@ module Polymorphic private def resource - @resource ||= instance_variable_get("@#{resource_name}") + if resource_model.to_s == 'Budget::Investment' + @resource ||= instance_variable_get("@investment") + else + @resource ||= instance_variable_get("@#{resource_name}") + end end def resource_name diff --git a/app/controllers/management/base_controller.rb b/app/controllers/management/base_controller.rb index bcebfebaa..1bae36a76 100644 --- a/app/controllers/management/base_controller.rb +++ b/app/controllers/management/base_controller.rb @@ -6,6 +6,7 @@ class Management::BaseController < ActionController::Base helper_method :managed_user helper_method :current_user + helper_method :manager_logged_in private @@ -22,7 +23,10 @@ class Management::BaseController < ActionController::Base end def managed_user - @managed_user ||= Verification::Management::ManagedUser.find(session[:document_type], session[:document_number]) + @managed_user ||= Verification::Management::ManagedUser.find( + session[:document_type], + session[:document_number] + ) end def check_verified_user(alert_msg) @@ -49,4 +53,11 @@ class Management::BaseController < ActionController::Base def clear_password session[:new_password] = nil end + + def manager_logged_in + if current_manager + @manager_logged_in = User.find_by(id: session[:manager]["login"].last(1)) + end + end + end diff --git a/app/controllers/moderation/budgets/investments_controller.rb b/app/controllers/moderation/budgets/investments_controller.rb new file mode 100644 index 000000000..7f33058e8 --- /dev/null +++ b/app/controllers/moderation/budgets/investments_controller.rb @@ -0,0 +1,24 @@ +class Moderation::Budgets::InvestmentsController < Moderation::BaseController + include FeatureFlags + include ModerateActions + + has_filters %w{pending_flag_review all with_ignored_flag}, only: :index + has_orders %w{flags created_at}, only: :index + + feature_flag :budgets + + before_action :load_resources, only: [:index, :moderate] + + load_and_authorize_resource class: 'Budget::Investment' + + private + + def resource_name + 'budget_investment' + end + + def resource_model + Budget::Investment + end + +end diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index 7130e661d..7bb872257 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -14,6 +14,7 @@ class StatsController < ApplicationController @debate_votes = daily_cache('debate_votes') { Vote.where(votable_type: 'Debate').count } @proposal_votes = daily_cache('proposal_votes') { Vote.where(votable_type: 'Proposal').count } @comment_votes = daily_cache('comment_votes') { Vote.where(votable_type: 'Comment').count } + @investment_votes = daily_cache('budget_investment_votes') { Vote.where(votable_type: 'Budget::Investment').count } @votes = daily_cache('votes') { Vote.count } @verified_users = daily_cache('verified_users') { User.with_hidden.level_two_or_three_verified.count } diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb index 5605e3a00..d16f9c87e 100644 --- a/app/controllers/users/sessions_controller.rb +++ b/app/controllers/users/sessions_controller.rb @@ -11,7 +11,7 @@ class Users::SessionsController < Devise::SessionsController end def after_sign_out_path_for(resource) - request.referer.present? ? request.referer : super + request.referer.present? && !request.referer.match("management") ? request.referer : super end def verifying_via_email? diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index 988d03a00..772dcb9d3 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -1,19 +1,31 @@ module AdminHelper def side_menu - render "/#{namespace}/menu" + if namespace == 'moderation/budgets' + render "/moderation/menu" + else + render "/#{namespace}/menu" + end end def namespaced_root_path - "/#{namespace}" + if namespace == 'moderation/budgets' + "/moderation" + else + "/#{namespace}" + end end def namespaced_header_title - t("#{namespace}.header.title") + if namespace == 'moderation/budgets' + t("moderation.header.title") + else + t("#{namespace}.header.title") + end end def menu_moderated_content? - ["proposals", "debates", "comments", "hidden_users", "activity"].include?(controller_name) && controller.class.parent != Admin::Legislation + ["proposals", "debates", "comments", "hidden_users", "activity", "hidden_budget_investments"].include?(controller_name) && controller.class.parent != Admin::Legislation end def menu_budget? @@ -21,11 +33,11 @@ module AdminHelper end def menu_polls? - %w[polls questions answers].include?(controller_name) + %w[polls questions answers recounts results].include?(controller_name) end def menu_booths? - %w[officers booths officer_assignments booth_assignments recounts results shifts].include?(controller_name) + %w[officers booths shifts booth_assignments officer_assignments].include?(controller_name) end def menu_profiles? @@ -37,7 +49,7 @@ module AdminHelper end def menu_customization? - ["pages", "banners"].include?(controller_name) || menu_homepage? + ["pages", "banners", "information_texts"].include?(controller_name) || menu_homepage? end def menu_homepage? diff --git a/app/helpers/site_customization_helper.rb b/app/helpers/site_customization_helper.rb new file mode 100644 index 000000000..d9318fd9b --- /dev/null +++ b/app/helpers/site_customization_helper.rb @@ -0,0 +1,5 @@ +module SiteCustomizationHelper + def site_customization_display_translation?(locale) + I18nContentTranslation.existing_languages.include?(neutral_locale(locale)) || locale == I18n.locale ? "" : "display: none" + end +end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 980dd1e39..4098b535e 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -52,8 +52,8 @@ module UsersHelper current_user && current_user.manager? end - def show_admin_menu? - current_administrator? || current_moderator? || current_valuator? || current_manager? + def show_admin_menu?(user = nil) + current_administrator? || current_moderator? || current_valuator? || current_manager? || (user && user.administrator?) end def interests_title_text(user) diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb index e8bb005d4..40e951326 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -17,6 +17,9 @@ module Abilities can :restore, Legislation::Proposal cannot :restore, Legislation::Proposal, hidden_at: nil + can :restore, Budget::Investment + cannot :restore, Budget::Investment, hidden_at: nil + can :restore, User cannot :restore, User, hidden_at: nil @@ -32,6 +35,9 @@ module Abilities can :confirm_hide, Legislation::Proposal cannot :confirm_hide, Legislation::Proposal, hidden_at: nil + can :confirm_hide, Budget::Investment + cannot :confirm_hide, Budget::Investment, hidden_at: nil + can :confirm_hide, User cannot :confirm_hide, User, hidden_at: nil diff --git a/app/models/abilities/common.rb b/app/models/abilities/common.rb index d8d716ec2..7c84089b4 100644 --- a/app/models/abilities/common.rb +++ b/app/models/abilities/common.rb @@ -46,6 +46,9 @@ module Abilities can [:flag, :unflag], Legislation::Proposal cannot [:flag, :unflag], Legislation::Proposal, author_id: user.id + can [:flag, :unflag], Budget::Investment + cannot [:flag, :unflag], Budget::Investment, author_id: user.id + can [:create, :destroy], Follow can [:destroy], Document, documentable: { author_id: user.id } diff --git a/app/models/abilities/moderation.rb b/app/models/abilities/moderation.rb index 801e752ed..86f44f25e 100644 --- a/app/models/abilities/moderation.rb +++ b/app/models/abilities/moderation.rb @@ -63,6 +63,15 @@ module Abilities cannot :moderate, ProposalNotification, author_id: user.id can :index, ProposalNotification + + can :hide, Budget::Investment, hidden_at: nil + cannot :hide, Budget::Investment, author_id: user.id + + can :ignore_flag, Budget::Investment, ignored_flag_at: nil, hidden_at: nil + cannot :ignore_flag, Budget::Investment, author_id: user.id + + can :moderate, Budget::Investment + cannot :moderate, Budget::Investment, author_id: user.id end end end diff --git a/app/models/budget/investment.rb b/app/models/budget/investment.rb index d69a0d64a..e531612a8 100644 --- a/app/models/budget/investment.rb +++ b/app/models/budget/investment.rb @@ -23,6 +23,7 @@ class Budget include Relationable include Notifiable include Filterable + include Flaggable belongs_to :author, -> { with_hidden }, class_name: 'User', foreign_key: 'author_id' belongs_to :heading @@ -81,6 +82,8 @@ class Budget scope :winners, -> { selected.compatible.where(winner: true) } scope :unselected, -> { not_unfeasible.where(selected: false) } scope :last_week, -> { where("created_at >= ?", 7.days.ago)} + scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } + scope :sort_by_created_at, -> { reorder(created_at: :desc) } scope :by_budget, ->(budget) { where(budget: budget) } scope :by_group, ->(group_id) { where(group_id: group_id) } diff --git a/app/models/i18n_content.rb b/app/models/i18n_content.rb new file mode 100644 index 000000000..c291e696c --- /dev/null +++ b/app/models/i18n_content.rb @@ -0,0 +1,11 @@ +class I18nContent < ActiveRecord::Base + + scope :by_key, -> (key){ where(key: key) } + scope :begins_with_key, -> (key){ where("key ILIKE ?", "#{key}?%") } + + validates :key, uniqueness: true + + translates :value, touch: true + globalize_accessors locales: [:en, :es, :fr, :nl] + +end diff --git a/app/models/i18n_content_translation.rb b/app/models/i18n_content_translation.rb new file mode 100644 index 000000000..76447d83e --- /dev/null +++ b/app/models/i18n_content_translation.rb @@ -0,0 +1,5 @@ +class I18nContentTranslation < ActiveRecord::Base + def self.existing_languages + self.select(:locale).uniq.map{ |l| l.locale.to_sym }.to_a + end +end diff --git a/app/models/site_customization/image.rb b/app/models/site_customization/image.rb index e336f6f9a..b10f3799f 100644 --- a/app/models/site_customization/image.rb +++ b/app/models/site_customization/image.rb @@ -1,7 +1,7 @@ class SiteCustomization::Image < ActiveRecord::Base VALID_IMAGES = { "icon_home" => [330, 240], - "logo_header" => [80, 80], + "logo_header" => [260, 80], "social_media_icon" => [470, 246], "social_media_icon_twitter" => [246, 246], "apple-touch-icon-200" => [200, 200] diff --git a/app/models/user.rb b/app/models/user.rb index 67fe5d104..4b999207d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -182,6 +182,7 @@ class User < ActiveRecord::Base debates_ids = Debate.where(author_id: id).pluck(:id) comments_ids = Comment.where(user_id: id).pluck(:id) proposal_ids = Proposal.where(author_id: id).pluck(:id) + investment_ids = Budget::Investment.where(author_id: id).pluck(:id) proposal_notification_ids = ProposalNotification.where(author_id: id).pluck(:id) hide @@ -189,6 +190,7 @@ class User < ActiveRecord::Base Debate.hide_all debates_ids Comment.hide_all comments_ids Proposal.hide_all proposal_ids + Budget::Investment.hide_all investment_ids ProposalNotification.hide_all proposal_notification_ids end diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb index ffec03232..911bc0713 100644 --- a/app/views/admin/_menu.html.erb +++ b/app/views/admin/_menu.html.erb @@ -7,7 +7,7 @@ <%= t("admin.menu.title_polls") %>
+
+ <% if @admin_notification.draft? %> + <%= t("admin.admin_notifications.show.preview_guide") %> + <% else %> + <%= t("admin.admin_notifications.show.sent_guide") %> + <% end %> +
+- <%= t("admin.budget_phases.edit.description_help_text") %> -
- - <%= f.cktext_area :description, - maxlength: Budget::Phase::DESCRIPTION_MAX_LENGTH, - ckeditor: { language: I18n.locale }, - label: false %> -- <%= t("admin.budget_phases.edit.summary_help_text") %> -
- - <%= f.cktext_area :summary, - maxlength: Budget::Phase::SUMMARY_MAX_LENGTH, - ckeditor: { language: I18n.locale }, - label: false %> -- <%= t("admin.budget_phases.edit.enabled_help_text") %> -
-| <%= t("admin.budgets.edit.phase") %> | -<%= t("admin.budgets.edit.dates") %> | -<%= t("admin.budgets.edit.enabled") %> | -<%= t("admin.budgets.edit.actions") %> | -
|---|
| <%= t("admin.budgets.edit.phase") %> | +<%= t("admin.budgets.edit.dates") %> | +<%= t("admin.budgets.edit.enabled") %> | +<%= t("admin.budgets.edit.actions") %> | +
|---|---|---|---|
| - <%= t("budgets.phase.#{phase.kind}") %> - <% if @budget.current_phase == phase %> - <%= t("admin.budgets.edit.active") %> - <% end %> - | -- <% if phase.starts_at.present? || phase.ends_at.present? %> - <%= l(phase.starts_at.to_date) if phase.starts_at.present? %> - - - <%= l(phase.ends_at.to_date) if phase.ends_at.present? %> - <% else %> - <%= t("admin.budgets.edit.blank_dates") %> - <% end %> - | -- - | -- <%= link_to t("admin.budgets.edit.edit_phase"), - edit_admin_budget_budget_phase_path(@budget, phase), - method: :get, class: "button hollow" %> - | -
<%= t("admin.dashboard.index.description", org: setting['org_name']) %>
diff --git a/app/views/admin/emails_download/index.html.erb b/app/views/admin/emails_download/index.html.erb index 7c82a6844..a8283bbc2 100644 --- a/app/views/admin/emails_download/index.html.erb +++ b/app/views/admin/emails_download/index.html.erb @@ -5,15 +5,13 @@ method: :get, id: "admin_download_emails" do %> - +- <%= t('admin.emails_download.index.download_segment_help_text') %> + <%= t("admin.emails_download.index.download_segment_help_text") %>
<%= select_tag :users_segment, options_for_select(user_segments_options) %> -<%= t("admin.shared.moderated_content") %>
+ +<%= render 'shared/filter_subnav', i18n_namespace: "admin.hidden_budget_investments.index" %> + +<% if @investments.any? %> +| <%= t("admin.shared.title") %> | +<%= t("admin.shared.description") %> | +<%= t("admin.shared.actions") %> | + + + <% @investments.each do |investment| %> +
|---|---|---|
| + <%= investment.title %> + | +
+
+ <%= investment.description %>
+
+ |
+ + <%= link_to t("admin.actions.restore"), + restore_admin_hidden_budget_investment_path(investment, request.query_parameters), + method: :put, + data: { confirm: t("admin.actions.confirm") }, + class: "button hollow warning" %> + <% unless investment.confirmed_hide? %> + <%= link_to t("admin.actions.confirm_hide"), + confirm_hide_admin_hidden_budget_investment_path(investment, request.query_parameters), + method: :put, + class: "button" %> + <% end %> + | +
| <%= t("admin.newsletters.index.subject") %> | +<%= t("admin.newsletters.index.subject") %> | <%= t("admin.newsletters.index.segment_recipient") %> | <%= t("admin.newsletters.index.sent") %> | -<%= t("admin.newsletters.index.actions") %> | +<%= t("admin.newsletters.index.actions") %> | + |
+
<%= link_to t("admin.newsletters.index.edit"), edit_admin_newsletter_path(newsletter),
- method: :get, class: "button hollow" %>
+ method: :get, class: "button hollow expanded" %>
+
+
<%= link_to t("admin.newsletters.index.delete"), admin_newsletter_path(newsletter),
- method: :delete, class: "button hollow alert" %>
+ method: :delete, class: "button hollow alert expanded" %>
+
+
<%= link_to t("admin.newsletters.index.preview"), admin_newsletter_path(newsletter),
- class: "button" %>
+ class: "button expanded" %>
+
|
<% end %>
diff --git a/app/views/admin/newsletters/show.html.erb b/app/views/admin/newsletters/show.html.erb
index 64b1d7725..c6b043c12 100644
--- a/app/views/admin/newsletters/show.html.erb
+++ b/app/views/admin/newsletters/show.html.erb
@@ -4,39 +4,37 @@
<% recipients_count = @newsletter.valid_segment_recipient? ? @newsletter.list_of_recipient_emails.count : 0 %>
-- <%= t("admin.booth_assignments.manage.status.assigned") %> + + <%= t("admin.booth_assignments.manage.status.assigned") %> + | -+ | <%= link_to t("admin.booth_assignments.manage.actions.unassign"), admin_poll_booth_assignment_path(@poll, booth_assignment, booth_id: booth.id), method: :delete, remote: true, title: t("admin.booth_assignments.manage.actions.unassign"), - class: "button hollow alert", + class: "button hollow alert expanded", data: (booth_assignment.shifts? ? {confirm: "#{t("admin.poll_booth_assignments.alert.shifts")}"} : nil) if !@poll.expired? %> | <% else %>- <%= t("admin.booth_assignments.manage.status.unassigned") %> + <%= t("admin.booth_assignments.manage.status.unassigned") %> | -+ | <%= link_to t("admin.booth_assignments.manage.actions.assign"), admin_poll_booth_assignments_path(@poll, booth_id: booth.id), method: :post, remote: true, title: t("admin.booth_assignments.manage.actions.assign"), - class: "button" if !@poll.expired? %> + class: "button hollow expanded" if !@poll.expired? %> | <% end %> diff --git a/app/views/admin/poll/booth_assignments/_search_booths.html.erb b/app/views/admin/poll/booth_assignments/_search_booths.html.erb index e96e334c7..b8f5d7c80 100644 --- a/app/views/admin/poll/booth_assignments/_search_booths.html.erb +++ b/app/views/admin/poll/booth_assignments/_search_booths.html.erb @@ -1,16 +1,14 @@ -<%= t("admin.booths.index.name") %> | <%= t("admin.booths.index.location") %> | <%= t("admin.booth_assignments.manage.status.assign_status") %> | -<%= t("admin.actions.actions") %> | +<%= t("admin.actions.actions") %> | <% @booths.each do |booth| %> diff --git a/app/views/admin/poll/booths/_form.html.erb b/app/views/admin/poll/booths/_form.html.erb index 31d60c0f0..5445144af 100644 --- a/app/views/admin/poll/booths/_form.html.erb +++ b/app/views/admin/poll/booths/_form.html.erb @@ -1,20 +1,16 @@ -||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t('admin.poll_officers.officer.name') %> | -<%= t('admin.poll_officers.officer.email') %> | +<%= t("admin.poll_officers.officer.name") %> | +<%= t("admin.poll_officers.officer.email") %> | +<%= t("admin.actions.actions") %> | <%= officer.email %> | -+ | <% if officer.persisted? %> - <%= link_to t('admin.poll_officers.officer.delete'), + <%= link_to t("admin.poll_officers.officer.delete"), admin_officer_path(officer), method: :delete, - class: "button hollow alert" %> + class: "button hollow alert expanded" %> <% else %> - <%= link_to t('admin.poll_officers.officer.add'),{ controller: "admin/poll/officers", action: :create, user_id: officer.user_id }, + <%= link_to t("admin.poll_officers.officer.add"),{ controller: "admin/poll/officers", action: :create, user_id: officer.user_id }, method: :post, - class: "button success" %> + class: "button success expanded" %> <% end %> | diff --git a/app/views/admin/poll/officers/index.html.erb b/app/views/admin/poll/officers/index.html.erb index fd9619167..433d0fdbf 100644 --- a/app/views/admin/poll/officers/index.html.erb +++ b/app/views/admin/poll/officers/index.html.erb @@ -1,23 +1,22 @@|||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t('admin.poll_officers.officer.name') %> | -<%= t('admin.poll_officers.officer.email') %> | +<%= t("admin.poll_officers.officer.name") %> | +<%= t("admin.poll_officers.officer.email") %> | +<%= t("admin.actions.actions") %> | <%= officer.email %> | -+ | <% if officer.persisted? %> - <%= link_to t('admin.poll_officers.officer.delete'), + <%= link_to t("admin.poll_officers.officer.delete"), admin_officer_path(officer), method: :delete, - class: "button hollow alert" + class: "button hollow alert expanded" %> <% else %> - <%= link_to t('admin.poll_officers.officer.add'), + <%= link_to t("admin.poll_officers.officer.add"), { controller: "admin/poll/officers", action: :create, user_id: officer.user_id }, method: :post, - class: "button success" %> + class: "button success expanded" %> <% end %> | diff --git a/app/views/admin/poll/polls/_form.html.erb b/app/views/admin/poll/polls/_form.html.erb index 1a45b8097..8a91d614a 100644 --- a/app/views/admin/poll/polls/_form.html.erb +++ b/app/views/admin/poll/polls/_form.html.erb @@ -1,11 +1,9 @@ <%= form_for [:admin, @poll] do |f| %> -
+
<%= link_to t("admin.actions.edit"),
edit_admin_poll_path(poll),
- class: "button hollow" %>
+ class: "button hollow expanded" %>
+
+
<%= link_to t("admin.actions.configure"),
admin_poll_path(poll),
- class: "button hollow" %>
+ class: "button hollow expanded" %>
+
|
diff --git a/app/views/admin/poll/polls/_questions.html.erb b/app/views/admin/poll/polls/_questions.html.erb
index fb92a4e43..f1dd818e8 100644
--- a/app/views/admin/poll/polls/_questions.html.erb
+++ b/app/views/admin/poll/polls/_questions.html.erb
@@ -2,13 +2,13 @@
<% if @poll.questions.empty? %>
||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t('admin.polls.show.table_title') %> | +<%= t("admin.polls.show.table_title") %> | |||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t("admin.polls.index.name") %> | +<%= t("admin.polls.index.name") %> | <%= t("admin.polls.index.dates") %> | -<%= t("admin.actions.actions") %> | +<%= t("admin.actions.actions") %> | <%= render @polls %> diff --git a/app/views/admin/poll/polls/new.html.erb b/app/views/admin/poll/polls/new.html.erb index ac3ba5a4d..6cc6c0d8f 100644 --- a/app/views/admin/poll/polls/new.html.erb +++ b/app/views/admin/poll/polls/new.html.erb @@ -1,6 +1,8 @@ -<%= back_link_to %> +||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t('admin.questions.index.table_question') %> | -<%= t("admin.actions.actions") %> | +<%= t("admin.questions.index.table_question") %> | +<%= t("admin.actions.actions") %> | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= link_to question.title, admin_question_path(question) %> | -- <%= link_to t('shared.edit'), edit_admin_question_path(question), class: "button hollow" %> - <%= link_to t('shared.delete'), admin_question_path(question), class: "button hollow alert", method: :delete %> + |
+
+ <%= link_to t("shared.edit"), edit_admin_question_path(question), class: "button hollow expanded" %>
+
+
+ <%= link_to t("shared.delete"), admin_question_path(question), class: "button hollow alert expanded", method: :delete %>
+ |
||||||||||||||||||||||||||||||||||
| <%= t('admin.questions.index.table_proposal') %> | -<%= t("admin.actions.actions") %> | +<%= t("admin.questions.index.table_proposal") %> | +<%= t("admin.actions.actions") %> | + |
<%= link_to t("admin.questions.index.create_question"),
new_admin_question_path(proposal_id: proposal.id),
class: "button hollow" %>
diff --git a/app/views/admin/poll/questions/answers/_form.html.erb b/app/views/admin/poll/questions/answers/_form.html.erb
index 3bb2ebe39..cbc450813 100644
--- a/app/views/admin/poll/questions/answers/_form.html.erb
+++ b/app/views/admin/poll/questions/answers/_form.html.erb
@@ -12,8 +12,8 @@
ckeditor: { language: I18n.locale } %>
-
- <%= f.submit(class: "button expanded", value: t("shared.save")) %>
+
+ <%= f.submit(class: "button success expanded", value: t("shared.save")) %>
<% end %>
diff --git a/app/views/admin/poll/questions/answers/edit.html.erb b/app/views/admin/poll/questions/answers/edit.html.erb
index 48fb4ad5d..46a8784cc 100644
--- a/app/views/admin/poll/questions/answers/edit.html.erb
+++ b/app/views/admin/poll/questions/answers/edit.html.erb
@@ -2,7 +2,7 @@
diff --git a/app/views/admin/poll/questions/answers/new.html.erb b/app/views/admin/poll/questions/answers/new.html.erb
index 1400bf765..c3af00be6 100644
--- a/app/views/admin/poll/questions/answers/new.html.erb
+++ b/app/views/admin/poll/questions/answers/new.html.erb
@@ -2,10 +2,10 @@
<%= t('admin.questions.index.title') %>+<%= t("admin.questions.index.title") %>-<%= link_to t('admin.questions.index.create'), new_admin_question_path, - class: "button success float-right" %> +<%= link_to t("admin.questions.index.create"), new_admin_question_path, + class: "button float-right" %>
<%= render 'search' %>
diff --git a/app/views/admin/poll/questions/show.html.erb b/app/views/admin/poll/questions/show.html.erb
index fa56bfac4..094ebff83 100644
--- a/app/views/admin/poll/questions/show.html.erb
+++ b/app/views/admin/poll/questions/show.html.erb
@@ -29,13 +29,15 @@
| |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t('admin.questions.show.valid_answers') %> - <%= link_to t("admin.questions.show.add_answer"), - new_admin_question_answer_path(@question), - class: "button float-right" %> | <%= t("admin.poll_shifts.new.date") %> | <%= t("admin.poll_shifts.new.officer") %> | <%= t("admin.poll_shifts.new.task") %> | -<%= t("admin.poll_shifts.new.shift") %> | +<%= t("admin.poll_shifts.new.shift") %> | @@ -14,11 +14,11 @@<%= l(shift.date.to_date, format: :long) %> | <%= shift.officer_name %> | <%= t("admin.poll_shifts.#{shift.task}") %> | -+ | <%= link_to t("admin.poll_shifts.new.remove_shift"), admin_booth_shift_path(@booth, shift), method: :delete, - class: "button hollow alert" %> + class: "button hollow alert expanded" %> | <% end %> diff --git a/app/views/admin/settings/_configuration.html.erb b/app/views/admin/settings/_configuration.html.erb index edadbb604..f2d5a7605 100644 --- a/app/views/admin/settings/_configuration.html.erb +++ b/app/views/admin/settings/_configuration.html.erb @@ -1,13 +1,23 @@||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <%= t("admin.settings.setting_name") %> | +<%= t("admin.settings.setting_value") %> | +|||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| + |
<%= t("settings.#{setting.key}") %>
+ + + <%= t("settings.#{setting.key}_description", default: t("admin.settings.no_description")) %> + |
- + |
<%= form_for(setting, url: admin_setting_path(setting), html: { id: "edit_#{dom_id(setting)}"}) do |f| %>
<%= f.text_area :value, label: false, id: dom_id(setting), lines: 1 %>
diff --git a/app/views/admin/settings/_feature_flags.html.erb b/app/views/admin/settings/_feature_flags.html.erb
index 5c3660065..493c89873 100644
--- a/app/views/admin/settings/_feature_flags.html.erb
+++ b/app/views/admin/settings/_feature_flags.html.erb
@@ -1,15 +1,36 @@
<%= t("admin.settings.index.feature_flags") %>
+ <%= submit_tag t("moderation.budget_investments.index.hide_budget_investments"),
+ name: "hide_budget_investments",
+ class: "button hollow alert",
+ data: { confirm: t("moderation.budget_investments.index.confirm") } %>
+
+ <%= submit_tag t("moderation.budget_investments.index.ignore_flags"),
+ name: "ignore_flags",
+ class: "button hollow",
+ data: { confirm: t("moderation.budget_investments.index.confirm") } %>
+
+
+ <%= paginate @budget_investments %>
+
+<% end %>
diff --git a/app/views/pages/census_terms.html.erb b/app/views/pages/census_terms.html.erb
index 4134e33b7..df5797450 100644
--- a/app/views/pages/census_terms.html.erb
+++ b/app/views/pages/census_terms.html.erb
@@ -6,7 +6,6 @@
Terminos de acceso al Padrón- <%= simple_format t('pages.census_terms') %>
<%= t("pages.help.budgets.phase_5_html") %>
<%= t("pages.help.title", org: setting['org_name']) %>-<%= t("pages.help.subtitle", org: setting['org_name']) %> <%= t("pages.help.guide", org: setting['org_name']) %> <%= t("polls.index.section_footer.description") %> -<%= t("polls.index.section_footer.help_text_1") %> -<%= t("polls.index.section_footer.help_text_2", - org: link_to(setting['org_name'], new_user_registration_path)).html_safe %> diff --git a/app/views/proposals/_proposal.html.erb b/app/views/proposals/_proposal.html.erb index 27cd38499..e1ffc0689 100644 --- a/app/views/proposals/_proposal.html.erb +++ b/app/views/proposals/_proposal.html.erb @@ -70,8 +70,7 @@- <%= t("proposals.proposal.successful", - voting: link_to(t("proposals.proposal.voting"), polls_path)).html_safe %> + <%= t("proposals.proposal.successful") %> <%= t("proposals.index.section_footer.description") %> -<%= t("proposals.index.section_footer.help_text_1") %> -<%= t("proposals.index.section_footer.help_text_2", - org: link_to(setting['org_name'], new_user_registration_path), - supports: setting["votes_for_proposal_success"]).html_safe %> -<%= t("proposals.index.section_footer.help_text_3") %> <% end %> diff --git a/app/views/proposals/show.html.erb b/app/views/proposals/show.html.erb index ed385ab05..9794c0365 100644 --- a/app/views/proposals/show.html.erb +++ b/app/views/proposals/show.html.erb @@ -171,8 +171,7 @@ <% if @proposal.successful? %>- <%= t("proposals.proposal.successful", - voting: link_to(t("proposals.proposal.voting"), polls_path)).html_safe %> + <%= t("proposals.proposal.successful") %> <% if can? :create, Poll::Question %>diff --git a/app/views/shared/_admin_login_items.html.erb b/app/views/shared/_admin_login_items.html.erb index 3fbb34fcc..85407398a 100644 --- a/app/views/shared/_admin_login_items.html.erb +++ b/app/views/shared/_admin_login_items.html.erb @@ -1,4 +1,4 @@ -<% if show_admin_menu? %> +<% if show_admin_menu?(current_user) %>
<%= t("welcome.welcome.title") %>
-
<%= t("welcome.welcome.user_permission_info") %> -E.g. 'Do you agree with the pedestrianisation of Calle Mayor?'" + proposal_question_example_html: "Must be summarised in one question with a Yes or No answer" proposal_responsible_name: Full name of the person submitting the proposal proposal_responsible_name_note: "(individually or as representative of a collective; will not be displayed publically)" proposal_summary: Proposal summary @@ -400,10 +387,7 @@ en: help: Help about proposals section_footer: title: Help about proposals - description: Make a citizen proposal. If it gets enough supports it will go to voting phase, so you can get all the citizens to decide how they want their city to be. - help_text_1: "The citizen proposals are an opportunity for neighbours and collectives to decide directly how they want to shape their city. Any person can make a proposal about a topic or concern of their interest, for the City Council to make it, after it gets enough supports to be put to a citizens vote." - help_text_2: "To create a proposal, you must sign up on %{org}. The proposals that get the support of 1% of the users in the web, goes to voting phase. To support proposals it is necessary to have a verified account." - help_text_3: "A citizen vote is celebrated when the proposals get the necessary supports. Once celebrated, if there are more people in favor than against, the City Council assumes the proposal and carries it out." + description: Citizens' proposals are an opportunity for neighbours and collectives to decide directly how they want their city to be, after getting sufficient support and submitting to a citizens' vote. new: form: submit_button: Create proposal @@ -428,7 +412,6 @@ en: one: 1 comment other: "%{count} comments" zero: No comments - reason_for_supports_necessary: 1% of Census support: Support support_title: Support this proposal supports: @@ -442,8 +425,7 @@ en: supports_necessary: "%{number} supports needed" total_percent: 100% archived: "This proposal has been archived and can't collect supports." - successful: "This proposal has reached the required supports and will be voted in the %{voting}." - voting: "next voting" + successful: "This proposal has reached the required supports." show: author_deleted: User deleted code: 'Proposal code:' @@ -493,9 +475,7 @@ en: help: Help about voting section_footer: title: Help about voting - description: Sign up to vote on citizen proposals and questions the City Council ask to the neighbors. Make municipal decisions directly. - help_text_1: "Voting takes place when a citizen proposal supports reaches 1% of the census with voting rights. Voting can also include questions that the City Council ask to the citizens decision." - help_text_2: "To participate in the next vote you have to sign up on %{org} and verify your account. All registered voters in the city over 16 years old can vote. The results of all votes are binding on the government." + description: Citizens' polls are a participatory mechanism by which citizens with voting rights can make direct decisions no_polls: "There are no open votings." show: already_voted_in_booth: "You have already participated in a physical booth. You can not participate again." diff --git a/config/locales/en/legislation.yml b/config/locales/en/legislation.yml index b0f387997..9553f73aa 100644 --- a/config/locales/en/legislation.yml +++ b/config/locales/en/legislation.yml @@ -71,9 +71,6 @@ en: section_footer: title: Help about legislation processes description: Participate in the debates and processes prior to the approval of a ordinance or a municipal action. Your opinion will be considered by the City Council. - help_text_1: "In participatory processes, the City Council offers to its citizens the opportunity to participate in the drafting and modification of regulations, affecting the city and to be able to give their opinion on certain actions that it plans to carry out." - help_text_2: "People registered in %{org} can participate with contributions in the public consultation of new ordinances, regulations and guidelines, among others. Your comments are analyzed by the corresponding area and considered for the final drafting of the ordinances." - help_text_3: "The City Council also opens processes to receive contributions and opinions on municipal actions." phase_not_open: not_open: This phase is not open yet phase_empty: diff --git a/config/locales/en/mailers.yml b/config/locales/en/mailers.yml index c3c945e32..daf1ef259 100644 --- a/config/locales/en/mailers.yml +++ b/config/locales/en/mailers.yml @@ -11,7 +11,7 @@ en: email_verification: click_here_to_verify: this link instructions_2_html: This email will verify your account with %{document_type} %{document_number}. If these don't belong to you, please don't click on the previous link and ignore this email. - instructions_html: To complete the verification of your user account in the Open Government Portal, you must click %{verification_link}. + instructions_html: To complete the verification of your user account you must click %{verification_link}. subject: Confirm your email thanks: Thank you very much. title: Confirm your account using the following link @@ -24,12 +24,9 @@ en: hi: "Dear user," new_html: "For all these, we invite you to elaborate a new proposal that ajusts to the conditions of this process. You can do it following this link: %{url}." new_href: "new investment project" - reconsider_html: "If you believe that the rejected proposal meets the requirements to be an investment proposal, you can communicate this, within 48 hours, responding to the email address examples@consul.es. Including the code %{code} in the subject of the email." sincerely: "Sincerely" - signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" sorry: "Sorry for the inconvenience and we again thank you for your invaluable participation." subject: "Your investment project '%{code}' has been marked as unfeasible" - unfeasible_html: "From the City Council we want to thank you for your participation in the participatory budgets. We regret to inform you that your proposal '%{title}' will be excluded from this participatory process for the following reason:" proposal_notification_digest: info: "Here are the new notifications that have been published by authors of the proposals that you have supported in %{org_name}." title: "Proposal notifications in %{org_name}" @@ -47,7 +44,7 @@ en: title_html: "You have send a new private message to %{receiver} with the content:" user_invite: ignore: "If you have not requested this invitation don't worry, you can ignore this email." - text: "Thank you for applying to join %{org}! In seconds you can start to decide the city you want, just fill the form below:" + text: "Thank you for applying to join %{org}! In seconds you can start to participate, just fill the form below:" thanks: "Thank you very much." title: "Welcome to %{org}" button: Complete registration @@ -60,33 +57,23 @@ en: follow_html: "We will inform you about how the process progresses, which you can also follow on %{link}." follow_link: "Participatory Budgets" sincerely: "Sincerely," - signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" share: "Share your project" budget_investment_unfeasible: hi: "Dear user," new_html: "For all these, we invite you to elaborate a new investment that ajusts to the conditions of this process. You can do it following this link: %{url}." new_href: "new investment project" - reconsider_html: "If you believe that the rejected investment meets the requirements to be an investment project, you can communicate this, within 48 hours, responding to the email address examples@consul.es. Including the code %{code} in the subject of the email." sincerely: "Sincerely" - signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" sorry: "Sorry for the inconvenience and we again thank you for your invaluable participation." subject: "Your investment project '%{code}' has been marked as unfeasible" - unfeasible_html: "From the City Council we want to thank you for your participation in the participatory budgets. We regret to inform you that your investment '%{title}' will be excluded from this participatory process for the following reason:" budget_investment_selected: subject: "Your investment project '%{code}' has been selected" hi: "Dear user," - selected_html: "From the City Council we want to thank you for your participation in the participatory budgets. We would like to inform you that your investment project '%{title}' has been selected for the final voting phase that will happen from May 15th to June 30th." share: "Start to get votes, share your investment project on social networks. Share is essential to make it a reality." share_button: "Share your investment project" thanks: "Thank you again for participating." sincerely: "Sincererly" - signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" budget_investment_unselected: subject: "Your investment project '%{code}' has not been selected" hi: "Dear user," - unselected_html: "From the City Council we want to thank you for your participation in the participatory budgets. We regret to inform you that your investment project '%{title}' has not been selected for the final voting phase." - participate_html: "You can continue participating in the final voting phase voting for investments projects from May 15th to June 30th." - participate_url: "participate in the final voting" thanks: "Thank you again for participating." sincerely: "Sincererly" - signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" \ No newline at end of file diff --git a/config/locales/en/management.yml b/config/locales/en/management.yml index 9d1b1046e..86ddba64b 100644 --- a/config/locales/en/management.yml +++ b/config/locales/en/management.yml @@ -78,12 +78,9 @@ en: vote_proposals: Vote proposals print: proposals_info: Create yor proposal on http://url.consul - proposals_note: The proposals more supported will be voted. If are accepted by a majority, the city Council shall be carried out. proposals_title: 'Proposals:' spending_proposals_info: Participate at http://url.consul - spending_proposals_note: Participatory budget will be assigned to the most voted budget investment. budget_investments_info: Participate at http://url.consul - budget_investments_note: Participatory budget will be assigned to the most voted budget investment. print_info: Print this info proposals: alert: @@ -106,7 +103,7 @@ en: unverified_user: User is not verified create: Create a budget investment filters: - heading: Concepto + heading: Concept unfeasible: Unfeasible investment print: print_button: Print diff --git a/config/locales/en/moderation.yml b/config/locales/en/moderation.yml index 5ed2f69bb..623ec0f92 100644 --- a/config/locales/en/moderation.yml +++ b/config/locales/en/moderation.yml @@ -46,6 +46,7 @@ en: menu: flagged_comments: Comments flagged_debates: Debates + flagged_investments: Budget investments proposals: Proposals proposal_notifications: Proposals notifications users: Block users @@ -68,6 +69,25 @@ en: created_at: Most recent flags: Most flagged title: Proposals + budget_investments: + index: + block_authors: Block authors + confirm: Are you sure? + filter: Filter + filters: + all: All + pending_flag_review: Pending + with_ignored_flag: Marked as viewed + headers: + moderate: Moderate + budget_investment: Budget investment + hide_budget_investments: Hide budget investments + ignore_flags: Mark as viewed + order: Order by + orders: + created_at: Most recent + flags: Most flagged + title: Budget investments proposal_notifications: index: block_authors: Block authors diff --git a/config/locales/en/pages.yml b/config/locales/en/pages.yml index 1e4eb616b..fcc1dafec 100644 --- a/config/locales/en/pages.yml +++ b/config/locales/en/pages.yml @@ -1,11 +1,9 @@ en: pages: - census_terms: To confirm the account, you must be 16 or older and be registered, having provided the information requested previously, will verify. By accepting the verification process, you also consent to the verification of this information, as well as the contact methods featuring in said files. The data provided will be acquired and processed in a file mentioned previously in the terms and conditions of use for the Portal. conditions: Terms and conditions of use general_terms: Terms and Conditions help: title: "%{org} is a platform for citizen participation" - subtitle: "In %{org} you can make proposals, vote in citizen consultations, propose participatory budget projects, decide on municipal regulations and open debates to exchange opinions with others." guide: "This guide explains what each of the %{org} sections are for and how they work." menu: debates: "Debates" @@ -26,19 +24,12 @@ en: title: "Proposals" description: "In the %{link} section you can make proposals for the City Council to carry them out. The proposals require support, and if they reach sufficient support, they are put to a public vote. The proposals approved in these citizens' votes are accepted by the City Council and carried out." link: "citizen proposals" - feature_html: "To create a proposal you must register in %{org}. The proposals that get the support on the website of 1% of people with the right to vote (%{supports} supports of people over 16 years old registered) go to vote. To support proposals it is necessary to verify your account." image_alt: "Button to support a proposal" - figcaption_html: 'Button to "Support" a proposal. When it reaches the number of supports will go to vote.' + figcaption_html: 'Button to "Support" a proposal.' budgets: title: "Participatory Budgeting" description: "The %{link} section helps people make a direct decision on what part of the municipal budget is spent on." link: "participative budgets" - feature: "In this process, every year people raise, support and vote on projects. The most voted votes are financed by the municipal budget." - phase_1_html: "Between January and early March, people registered in %{org} can present." - phase_2_html: "In March, proposers have to gather support, in the form of preselection." - phase_3_html: "Between April and the beginning of May, the experts from the City Council rate projects on an order of more or less supported and check that they are viable." - phase_4_html: "Finally, between May and June, all citizens can vote projects that interest them the most." - phase_5_html: "From the approval of the budgets the following year the City Council begins to carry out the winning projects." image_alt: "Different phases of a participatory budget" figcaption_html: '"Support" and "Voting" phases of participatory budgets.' polls: @@ -47,14 +38,10 @@ en: link: "polls" feature_1: "To participate in the voting you have to %{link} and verify your account." feature_1_link: "register in %{org_name}" - feature_2: "All registered voters over the age of 16 can vote." - feature_3: "The results of all votes are binding on the municipal government." processes: title: "Processes" description: "In the %{link} section, citizens participate in the drafting and modification of regulations affecting the city and can give their opinion on municipal policies in previous debates." link: "processes" - feature: "To participate in a process you have to %{sign_up} and check the %{link} page periodically to see which regulations and policies are being discussed and consulted." - sign_up: "sign up on %{org}" faq: title: "Technical problems?" description: "Read the FAQs and solve your questions." diff --git a/config/locales/en/responders.yml b/config/locales/en/responders.yml index f91cb807c..e11b071f2 100644 --- a/config/locales/en/responders.yml +++ b/config/locales/en/responders.yml @@ -29,6 +29,7 @@ en: budget_investment: "Investment project updated succesfully." topic: "Topic updated successfully." valuator_group: "Valuator group updated successfully" + translation: "Translation updated successfully" destroy: spending_proposal: "Spending proposal deleted succesfully." budget_investment: "Investment project deleted succesfully." diff --git a/config/locales/en/settings.yml b/config/locales/en/settings.yml index 1d2bb819a..435255987 100644 --- a/config/locales/en/settings.yml +++ b/config/locales/en/settings.yml @@ -1,65 +1,121 @@ en: settings: comments_body_max_length: "Comments body max length" + comments_body_max_length_description: "In number of characters" official_level_1_name: "Level 1 public official" + official_level_1_name_description: "Tag that will appear on users marked as Level 1 official position" official_level_2_name: "Level 2 public official" + official_level_2_name_description: "Tag that will appear on users marked as Level 2 official position" official_level_3_name: "Level 3 public official" + official_level_3_name_description: "Tag that will appear on users marked as Level 3 official position" official_level_4_name: "Level 4 public official" + official_level_4_name_description: "Tag that will appear on users marked as Level 4 official position" official_level_5_name: "Level 5 public official" + official_level_5_name_description: "Tag that will appear on users marked as Level 5 official position" max_ratio_anon_votes_on_debates: "Maximum ratio of anonymous votes per Debate" + max_ratio_anon_votes_on_debates_description: "Anonymous votes are by registered users with an unverified account" max_votes_for_proposal_edit: "Number of votes from which a Proposal can no longer be edited" + max_votes_for_proposal_edit_description: "From this number of supports the author of a Proposal can no longer edit it" max_votes_for_debate_edit: "Number of votes from which a Debate can no longer be edited" + max_votes_for_debate_edit_description: "From this number of votes the author of a Debate can no longer edit it" proposal_code_prefix: "Prefix for Proposal codes" + proposal_code_prefix_description: "This prefix will appear in the Proposals before the creation date and its ID" votes_for_proposal_success: "Number of votes necessary for approval of a Proposal" + votes_for_proposal_success_description: "When a proposal reaches this number of supports it will no longer be able to receive more supports and is considered successful" months_to_archive_proposals: "Months to archive Proposals" + months_to_archive_proposals_description: After this number of months the Proposals will be archived and will no longer be able to receive supports" email_domain_for_officials: "Email domain for public officials" + email_domain_for_officials_description: "All users registered with this domain will have their account verified at registration" per_page_code_head: "Code to be included on every page ()" + per_page_code_head_description: "This code will appear inside the label. Useful for entering custom scripts, analitycs..." per_page_code_body: "Code to be included on every page ()" + per_page_code_body_description: "This code will appear inside the label. Useful for entering custom scripts, analitycs..." twitter_handle: "Twitter handle" + twitter_handle_description: "If filled in it will appear in the footer" twitter_hashtag: "Twitter hashtag" + twitter_hashtag_description: "Hashtag that will appear when sharing content on Twitter" facebook_handle: "Facebook handle" + facebook_handle_description: "If filled in it will appear in the footer" youtube_handle: "Youtube handle" + youtube_handle_description: "If filled in it will appear in the footer" telegram_handle: "Telegram handle" + telegram_handle_description: "If filled in it will appear in the footer" instagram_handle: "Instagram handle" + instagram_handle_description: "If filled in it will appear in the footer" + url: "Main URL" + url_description: "Main URL of your website" + org_name: "Organization" + org_name_description: "Name of your organization" + place_name: "Place" + place_name_description: "Name of your city" + related_content_score_threshold: "Related content score threshold" + related_content_score_threshold_description: "Hides content that users mark as unrelated" + map_latitude: "Latitude" + map_latitude_description: "Latitude to show the map position" + map_longitude: "Longitude" + map_longitude_description: "Longitude to show the position of the map" + map_zoom: "Zoom" + map_zoom_description: "Zoom to show the map position" + mailer_from_name: "Sender email name" + mailer_from_name_description: "This name will appear in emails sent from the application" + mailer_from_address: "Sender email address" + mailer_from_address_description: "This email address will appear in emails sent from the application" + meta_title: "Site title (SEO)" + meta_title_description: "Title for the site Ej. '¿Está usted de acuerdo en peatonalizar la calle Mayor?'" + proposal_question_example_html: "Debe ser resumida en una pregunta cuya respuesta sea Sí o No" proposal_responsible_name: Nombre y apellidos de la persona que hace esta propuesta proposal_responsible_name_note: "(individualmente o como representante de un colectivo; no se mostrará públicamente)" proposal_summary: Resumen de la propuesta @@ -400,10 +387,7 @@ es: help: Ayuda sobre las propuestas section_footer: title: Ayuda sobre las propuestas - description: Haz una propuesta ciudadana. Si obtiene los apoyos suficientes y pasa a votación, puedes conseguir que todos los habitantes decidan cómo quieren que sea nuestra ciudad. - help_text_1: "Las propuestas ciudadanas son una oportunidad para que los vecinos y colectivos decidan directamente cómo quieren que sea su ciudad. Cualquier persona puede hacer una propuesta sobre un tema que le interese o preocupe para que el ayuntamiento la lleve a cabo, después de conseguir los apoyos suficientes y de someterse a votación ciudadana." - help_text_2: "Para crear una propuesta hay que registrarse en %{org}. Las propuestas que consigan el apoyo del 1% de la gente en la web, pasan a votación. Para apoyar propuestas es necesario tener una cuenta verificada." - help_text_3: "Se convoca una votación ciudadana cuando las propuestas consiguen los apoyos necesarios. Una vez celebrada, si hay más gente a favor que en contra, el Consistorio asume la propuesta y la lleva a cabo." + description: Las propuestas ciudadanas son una oportunidad para que los vecinos y colectivos decidan directamente cómo quieren que sea su ciudad, después de conseguir los apoyos suficientes y de someterse a votación ciudadana. new: form: submit_button: Crear propuesta @@ -428,7 +412,6 @@ es: zero: Sin comentarios one: 1 Comentario other: "%{count} Comentarios" - reason_for_supports_necessary: 1% del Censo support: Apoyar support_title: Apoyar esta propuesta supports: @@ -442,8 +425,7 @@ es: supports_necessary: "%{number} apoyos necesarios" total_percent: 100% archived: "Esta propuesta ha sido archivada y ya no puede recoger apoyos." - successful: "Esta propuesta ha alcanzado los apoyos necesarios y pasará a la %{voting}." - voting: "próxima votación" + successful: "Esta propuesta ha alcanzado los apoyos necesarios." show: author_deleted: Usuario eliminado code: 'Código de la propuesta:' @@ -493,9 +475,7 @@ es: help: Ayuda sobre las votaciones section_footer: title: Ayuda sobre las votaciones - description: Regístrate para poder votar propuestas ciudadanas y las cuestiones que pregunta a sus vecinos el Ayuntamiento. Toma decisiones municipales de forma directa. - help_text_1: "Las votaciones se convocan cuando una propuesta ciudadana alcanza el 1% de apoyos del censo con derecho a voto. En las votaciones también se pueden incluir cuestiones que el Ayuntamiento somete a decisión directa de la ciudadanía." - help_text_2: "Para participar en la próxima votación tienes que registrarte en %{org} y verificar tu cuenta. Pueden votar todas las personas empadronadas en la ciudad mayores de 16 años. Los resultados de todas las votaciones serán vinculantes para el gobierno." + description: Las votaciones ciudadanas son un mecanismo de participación por el que la ciudadanía con derecho a voto puede tomar decisiones de forma directa. no_polls: "No hay votaciones abiertas." show: already_voted_in_booth: "Ya has participado en esta votación en urnas presenciales, no puedes volver a participar." diff --git a/config/locales/es/legislation.yml b/config/locales/es/legislation.yml index e4654f6a6..dd6f95a35 100644 --- a/config/locales/es/legislation.yml +++ b/config/locales/es/legislation.yml @@ -71,9 +71,6 @@ es: section_footer: title: Ayuda sobre procesos legislativos description: Participa en los debates y procesos previos a la aprobación de una norma o de una actuación municipal. Tu opinión será tenida en cuenta por el Ayuntamiento. - help_text_1: "En los procesos participativos, el Ayuntamiento ofrece a la ciudadanía la oportunidad de participar en la elaboración y modificación de normativa que afecta a la ciudad y de dar su opinión sobre ciertas actuaciones que tiene previsto llevar a cabo." - help_text_2: "Las personas registradas en %{org} pueden participar con aportaciones en la consulta pública de nuevas ordenanzas, reglamentos y directrices, entre otros. Sus comentarios son analizados por el área correspondiente y tenidos en cuenta de cara a la redacción final de las normas." - help_text_3: "El Ayuntamiento también abre procesos para recibir aportaciones y opiniones sobre actuaciones municipales." phase_not_open: not_open: Esta fase del proceso todavía no está abierta phase_empty: diff --git a/config/locales/es/mailers.yml b/config/locales/es/mailers.yml index f66c5cadf..abd887f22 100644 --- a/config/locales/es/mailers.yml +++ b/config/locales/es/mailers.yml @@ -11,7 +11,7 @@ es: email_verification: click_here_to_verify: en este enlace instructions_2_html: Este email es para verificar tu cuenta con %{document_type} %{document_number}. Si esos no son tus datos, por favor no pulses el enlace anterior e ignora este email. - instructions_html: Para terminar de verificar tu cuenta de usuario en el Portal de Gobierno Abierto, necesitamos que pulses %{verification_link}. + instructions_html: Para terminar de verificar tu cuenta de usuario pulsa %{verification_link}. subject: Verifica tu email thanks: Muchas gracias. title: Verifica tu cuenta con el siguiente enlace @@ -24,22 +24,16 @@ es: hi: "Estimado usuario," new_html: 'Por todo ello, te invitamos a que elabores una nueva propuesta que se ajuste a las condiciones de este proceso. Esto lo puedes hacer en este enlace: %{url}.' new_href: "nueva propuesta de inversión" - reconsider_html: "Si consideras que la propuesta rechazada cumple los requisitos para mantenerla como propuesta de inversión, podrás comunicarlo, en el plazo de 48 horas, al correo example@consul.es, indicando necesariamente para su tramitación el código %{code} como asunto del correo, correspondiente a tu propuesta." sincerely: "Atentamente" - signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" sorry: "Sentimos las molestias ocasionadas y volvemos a darte las gracias por tu inestimable participación." subject: "Tu propuesta de inversión '%{code}' ha sido marcada como inviable" - unfeasible_html: "Desde el Ayuntamiento queremos agradecer tu participación en los Presupuestos Participativos. Lamentamos informarte de que tu propuesta '%{title}' quedará excluida de este proceso participativo por el siguiente motivo:" budget_investment_unfeasible: hi: "Estimado usuario," new_html: 'Por todo ello, te invitamos a que elabores un nuevo proyecto de gasto que se ajuste a las condiciones de este proceso. Esto lo puedes hacer en este enlace: %{url}.' new_href: "nuevo proyecto de gasto" - reconsider_html: "Si consideras que el proyecto rechazado cumple los requisitos para mantenerlo como proyecto de gasto, podrás comunicarlo, en el plazo de 48 horas, al correo example@consul.es, indicando necesariamente para su tramitación el código %{code} como asunto del correo, correspondiente a tu proyecto." sincerely: "Atentamente" - signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" sorry: "Sentimos las molestias ocasionadas y volvemos a darte las gracias por tu inestimable participación." subject: "Tu proyecto de gasto '%{code}' ha sido marcado como inviable" - unfeasible_html: "Desde el Ayuntamiento queremos agradecer tu participación en los Presupuestos Participativos. Lamentamos informarte de que tu proyecto '%{title}' quedará excluido de este proceso participativo por el siguiente motivo:" proposal_notification_digest: info: "A continuación te mostramos las nuevas notificaciones que han publicado los autores de las propuestas que estás apoyando en %{org_name}." title: "Notificaciones de propuestas en %{org_name}" @@ -57,7 +51,7 @@ es: title_html: "Has enviado un nuevo mensaje privado a %{receiver} con el siguiente contenido:" user_invite: ignore: "Si no has solicitado esta invitación no te preocupes, puedes ignorar este correo." - text: "¡Gracias por solicitar unirte a %{org}! En unos segundos podrás empezar a decidir la ciudad que quieres, sólo tienes que rellenar el siguiente formulario:" + text: "¡Gracias por solicitar unirte a %{org}! En unos segundos podrás empezar a participar, sólo tienes que rellenar el siguiente formulario:" thanks: "Muchas gracias." title: "Bienvenido a %{org}" button: Completar registro @@ -70,23 +64,16 @@ es: follow_html: "Te informaremos de cómo avanza el proceso, que también puedes seguir en la página de %{link}." follow_link: "Presupuestos participativos" sincerely: "Atentamente," - signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" share: "Comparte tu proyecto" budget_investment_selected: subject: "Tu proyecto de gasto '%{code}' ha sido seleccionado" hi: "Estimado/a usuario/a" - selected_html: "Desde el Ayuntamiento de Madrid agradecemos que hayas participado con tu idea en los Presupuestos Participativos. Te informamos de que tu proyecto '%{title}' ha sido seleccionado y pasa a la fase de votación final que tiene lugar desde el 15 de mayo hasta el 30 de junio de 2017." share: "Empieza ya a conseguir votos, comparte tu proyecto de gasto en redes sociales. La difusión es fundamental para conseguir que se haga realidad." share_button: "Comparte tu proyecto" thanks: "Gracias de nuevo por tu participación." sincerely: "Atentamente" - signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" budget_investment_unselected: subject: "Tu proyecto de gasto '%{code}' no ha sido seleccionado" hi: "Estimado/a usuario/a" - unselected_html: "Desde el Ayuntamiento de Madrid agradecemos que hayas participado con tu idea en los Presupuestos Participativos. Lamentamos informarte de que tu proyecto '%{title}' no ha sido seleccionado para la fase de votación final." - participate_html: "Puedes continuar participando en la votación final votando proyectos para toda la ciudad y el distrito que elijas desde el 15 de mayo hasta el 30 de junio de 2017." - participate_url: "participes en la votación final" thanks: "Gracias de nuevo por tu participación." sincerely: "Atentamente" - signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" diff --git a/config/locales/es/management.yml b/config/locales/es/management.yml index dbea2a38b..368be738f 100644 --- a/config/locales/es/management.yml +++ b/config/locales/es/management.yml @@ -78,12 +78,9 @@ es: vote_proposals: Participar en las votaciones finales print: proposals_info: Haz tu propuesta en http://url.consul - proposals_note: Las propuestas más apoyadas serán llevadas a votación. Y si las acepta una mayoría, el Ayuntamiento las llevará a cabo. proposals_title: 'Propuestas:' spending_proposals_info: Participa en http://url.consul - spending_proposals_note: Los presupuestos participativos se invertirán en las propuestas de inversión más apoyadas. budget_investments_info: 'Participa en http://url.consul' - budget_investments_note: Los presupuestos participativos se invertirán en los proyectos de gasto más apoyados. print_info: Imprimir esta información proposals: alert: diff --git a/config/locales/es/moderation.yml b/config/locales/es/moderation.yml index c51013aee..a1caac77c 100644 --- a/config/locales/es/moderation.yml +++ b/config/locales/es/moderation.yml @@ -46,6 +46,7 @@ es: menu: flagged_comments: Comentarios flagged_debates: Debates + flagged_investments: Proyectos de gasto proposals: Propuestas proposal_notifications: Notificaciones de propuestas users: Bloquear usuarios @@ -68,6 +69,25 @@ es: created_at: Más recientes flags: Más denunciadas title: Propuestas + budget_investments: + index: + block_authors: Bloquear autores + confirm: '¿Estás seguro?' + filter: Filtro + filters: + all: Todos + pending_flag_review: Pendientes de revisión + with_ignored_flag: Marcadas como revisadas + headers: + moderate: Moderar + budget_investment: Proyecto de gasto + hide_budget_investments: Ocultar proyectos de gasto + ignore_flags: Marcar como revisadas + order: Ordenar por + orders: + created_at: Más recientes + flags: Más denunciadas + title: Proyectos de gasto proposal_notifications: index: block_authors: Bloquear autores diff --git a/config/locales/es/pages.yml b/config/locales/es/pages.yml index 76808faf6..81d66a5ad 100644 --- a/config/locales/es/pages.yml +++ b/config/locales/es/pages.yml @@ -1,11 +1,9 @@ es: pages: - census_terms: Para verificar la cuenta hay que tener 16 años o más y estar empadronado aportando los datos indicados anteriormente, los cuales serán contrastados. Aceptando el proceso de verificación acepta dar su consentimiento para contrastar dicha información, así como medios de contacto que figuren en dichos ficheros. Los datos aportados serán incorporados y tratados en un fichero indicado anteriormente en las condiciones de uso del portal. conditions: Condiciones de uso general_terms: Términos y Condiciones help: title: "%{org} es una plataforma de participación ciudadana" - subtitle: "En %{org} se pueden hacer propuestas, votar en consultas ciudadanas, plantear proyectos de presupuestos participativos, decidir la normativa municipal y abrir debates para intercambiar opiniones con otras personas." guide: 'Esta guía explica para qué sirven y cómo funcionan cada una de las secciones de %{org}.' menu: debates: "Debates" @@ -26,19 +24,12 @@ es: title: "Propuestas" description: "En la sección de %{link} puedes plantear propuestas para que el Ayuntamiento las lleve a cabo. Las propuestas recaban apoyos, y si alcanzan los apoyos suficientes se someten a votación ciudadana. Las propuestas aprobadas en estas votaciones ciudadanas son asumidas por el Ayuntamiento y se llevan a cabo." link: "propuestas ciudadanas" - feature_html: "Para crear una propuesta hay que registrarse en %{org}. Las propuestas que consiguen el apoyo en la web del 1% de la gente con derecho a voto (%{supports} apoyos de personas mayores de 16 años empadronadas) pasan a votación. Para apoyar propuestas es necesario verificar tu cuenta." image_alt: "Botón para apoyar una propuesta" - figcaption_html: 'Botón para "Apoyar" una propuesta. Cuando alcance el número de apoyos pasará a votación.' + figcaption_html: 'Botón para "Apoyar" una propuesta.' budgets: title: "Presupuestos participativos" description: "La sección de %{link} sirve para que la gente decida de manera directa a qué se destina una parte del presupuesto municipal." link: "presupuestos participativos" - feature: "En este proceso cada año la gente plantea, apoya y vota proyectos. Los más votados pasan a financiarse con el presupuesto municipal." - phase_1_html: "Entre enero y principios de marzo, las personas registradas en %{org} pueden presentar proyectos." - phase_2_html: "En marzo, los proponentes tienen que recabar apoyos, a modo de fase de preselección." - phase_3_html: "Entre abril y comienzos de mayo los técnicos del Ayuntamiento tasan los proyectos por orden de más a menos apoyados y comprueban que son viables." - phase_4_html: "Finalmente, entre mayo y junio, toda la ciudadanía puede votar los proyectos que más le interesan." - phase_5_html: "A partir de la aprobación de los presupuestos al año siguiente el Ayuntamiento empieza a llevar a cabo los proyectos ganadores." image_alt: "Diferentes fases de un presupuesto participativo" figcaption_html: 'Fase de "Apoyos" y fase de "Votación" de los presupuestos participativos.' polls: @@ -47,8 +38,6 @@ es: link: "votaciones ciudadanas" feature_1: "Para participar en las votaciones tienes que %{link} y verificar tu cuenta." feature_1_link: "registrarte en %{org_name}" - feature_2: "Pueden votar todas las personas empadronadas en la ciudad mayores de 16 años." - feature_3: "Los resultados de todas las votaciones son vinculantes para el gobierno municipal." processes: title: "Procesos legislativos" description: "En la sección de %{link} la ciudadanía participa en la elaboración y modificación de normativa que afecta a la ciudad y puede dar su opinión sobre las políticas municipales en debates previos." diff --git a/config/locales/es/responders.yml b/config/locales/es/responders.yml index 3674a0290..1910acd95 100644 --- a/config/locales/es/responders.yml +++ b/config/locales/es/responders.yml @@ -29,6 +29,7 @@ es: budget_investment: "Proyecto de gasto actualizado correctamente" topic: "Tema actualizado correctamente." valuator_group: "Grupo de evaluadores actualizado correctamente" + translation: "Traducción actualizada correctamente" destroy: spending_proposal: "Propuesta de inversión eliminada." budget_investment: "Proyecto de gasto eliminado." diff --git a/config/locales/es/settings.yml b/config/locales/es/settings.yml index 90f785580..c57bac1f7 100644 --- a/config/locales/es/settings.yml +++ b/config/locales/es/settings.yml @@ -1,65 +1,121 @@ es: settings: comments_body_max_length: "Longitud máxima de los comentarios" + comments_body_max_length_description: "En número de caracteres" official_level_1_name: "Cargos públicos de nivel 1" + official_level_1_name_description: "Etiqueta que aparecerá en los usuarios marcados como Nivel 1 de cargo público" official_level_2_name: "Cargos públicos de nivel 2" + official_level_2_name_description: "Etiqueta que aparecerá en los usuarios marcados como Nivel 2 de cargo público" official_level_3_name: "Cargos públicos de nivel 3" + official_level_3_name_description: "Etiqueta que aparecerá en los usuarios marcados como Nivel 3 de cargo público" official_level_4_name: "Cargos públicos de nivel 4" + official_level_4_name_description: "Etiqueta que aparecerá en los usuarios marcados como Nivel 4 de cargo público" official_level_5_name: "Cargos públicos de nivel 5" + official_level_5_name_description: "Etiqueta que aparecerá en los usuarios marcados como Nivel 5 de cargo público" max_ratio_anon_votes_on_debates: "Porcentaje máximo de votos anónimos por Debate" - max_votes_for_proposal_edit: "Número de votos en que una Propuesta deja de poderse editar" + max_ratio_anon_votes_on_debates_description: "Se consideran votos anónimos los realizados por usuarios registrados con una cuenta sin verificar" + max_votes_for_proposal_edit: "Número de apoyos en que una Propuesta deja de poderse editar" + max_votes_for_proposal_edit_description: "A partir de este número de apoyos el autor de una Propuesta ya no podrá editarla" max_votes_for_debate_edit: "Número de votos en que un Debate deja de poderse editar" + max_votes_for_debate_edit_description: "A partir de este número de votos el autor de un Debate ya no podrá editarlo" proposal_code_prefix: "Prefijo para los códigos de Propuestas" - votes_for_proposal_success: "Número de votos necesarios para aprobar una Propuesta" + proposal_code_prefix_description: "Este prefijo aparecerá en las Propuestas delante de la fecha de creación y su ID" + votes_for_proposal_success: "Número de apoyos necesarios para aprobar una Propuesta" + votes_for_proposal_success_description: "Cuando una propuesta alcance este número de apoyos ya no podrá recibir más y se considera exitosa" months_to_archive_proposals: "Meses para archivar las Propuestas" + months_to_archive_proposals_description: "Pasado este número de meses las Propuestas se archivarán y ya no podrán recoger apoyos" email_domain_for_officials: "Dominio de email para cargos públicos" + email_domain_for_officials_description: "Todos los usuarios registrados con este dominio tendrán su cuenta verificada al registrarse" per_page_code_head: "Código a incluir en cada página ()" + per_page_code_head_description: "Esté código aparecerá dentro de la etiqueta . Útil para introducir scripts personalizados, analitycs..." per_page_code_body: "Código a incluir en cada página ( | |||||||||||||||||||||||||||||||||