Add Decidim compose

This commit is contained in:
Disassembler 2021-05-15 21:12:08 +02:00
parent 102a556f0a
commit c3c7efd946
No known key found for this signature in database
GPG Key ID: 524BD33A0EE29499
29 changed files with 55597 additions and 0 deletions

22
.env Normal file
View File

@ -0,0 +1,22 @@
RAILS_ENV=production
RAILS_LOG_TO_STDOUT=1
POSTGRES_USER=decidim
POSTGRES_PASSWORD=decidim
POSTGRES_DB=decidim
POSTGRES_HOST=decidim-postgres
DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}/${POSTGRES_DB}
DECIDIM_ADMIN_USER=admin@example.com
DECIDIM_ADMIN_PASSWORD=decidim123456
SECRET_KEY_BASE=2ddf4d8ed8a6371d5e8b7917c8b13054934bde8f36de07b82cab6c5ee2bd67b68f186f44ffda5c2044658085ec271090784019b2394f21446d551fd70d72e711
SMTP_USERNAME=admin@example.com
SMTP_PASSWORD=
SMTP_ADDRESS=decidim-smtp
SMTP_DOMAIN=example.com
MAPS_API_KEY=
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_SENDER_NUMBER=

94
decidim/Dockerfile Normal file
View File

@ -0,0 +1,94 @@
FROM ruby:2.7-alpine3.13
RUN \
# Install runtime dependencies
apk --no-cache add curl libbz2 libgcc libstdc++ libxml2 libxslt ncurses-libs openssl pcre readline s6 xz-libs && \
# Update system Ruby gems
echo -e 'install: --no-document\nupdate: --no-document' >/usr/local/etc/gemrc && \
gem update --system
# Nginx + passenger
RUN \
# Install build dependencies
apk --no-cache add --virtual .deps build-base curl-dev openssl-dev linux-headers pcre-dev && \
# Install passenger
gem install passenger && \
ln -s /usr/local/bundle/gems/passenger-* /usr/local/lib/passenger && \
# Create OS user
addgroup -S -g 8080 decidim && \
adduser -S -u 8080 -h /srv/decidim-app -s /sbin/nologin -G decidim -g decidim decidim && \
# Compile nginx
# Minimized version of /usr/local/bin/passenger-install-nginx-module
NGINX_VERSION=$(grep ' PREFERRED_NGINX_VERSION' /usr/local/lib/passenger/src/ruby_supportlib/phusion_passenger.rb | grep -Eo '([0-9\.]+)') && \
cd /tmp && \
wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
tar xf nginx-*.tar.gz && \
cd nginx-* && \
./configure \
--prefix=/var/lib/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/run/nginx.pid \
--lock-path=/run/nginx.lock \
--user=decidim \
--group=decidim \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_addition_module \
--without-http_fastcgi_module \
--without-http_memcached_module \
--without-http_scgi_module \
--without-http_uwsgi_module \
--with-cc-opt=-Wno-error \
--add-module=/usr/local/lib/passenger/src/nginx_module && \
make -j $(getconf _NPROCESSORS_ONLN) && \
make install && \
rm -f /etc/nginx/*.default && \
# Cleanup
apk --no-cache del .deps && \
rm -rf /tmp/*
# Decidim
ENV RAILS_ENV production
RUN \
# Install runtime dependencies
apk --no-cache add imagemagick libpq nodejs procps tzdata && \
# Install build dependencies
apk --no-cache add --virtual .deps build-base git libxml2-dev libxslt-dev postgresql-dev zlib-dev && \
# Install Decidim
bundle config build.nokogiri --use-system-libraries && \
gem install decidim -v 0.23.6 && \
cd /srv && \
decidim decidim-app
COPY image.d /
RUN \
# Install runtime gems and plugins
cd /srv/decidim-app && \
bundle install && \
# Setup delayed job for mail sending
bin/rails generate delayed_job:active_record && \
# Precompile static assets
bin/rails assets:precompile && \
# Remove database migrations (will be recreated in entrypoint.sh) and temp cache
rm /srv/decidim-app/db/migrate/* && \
rm -rf /srv/decidim-app/tmp/cache/* && \
# Create uploads dir
mkdir /srv/decidim-app/public/uploads && \
chmod g+s /srv/decidim-app/public/uploads && \
# Change ownership
chown -R decidim:decidim /srv/decidim-app && \
# Cleanup
apk --no-cache del .deps && \
rm -rf /root/.bundle /root/.gem
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 8080
VOLUME ["/srv/decidim-app/db/migrate", "/srv/decidim-app/storage", "/srv/decidim-app/public/uploads"]

50
decidim/image.d/entrypoint.sh Executable file
View File

@ -0,0 +1,50 @@
#!/bin/sh
set -e
if [ "$*" != "" ]; then
exec $@
fi
echo "Starting Decidim..."
# Set passenger environment
export RAILS_ENV=${RAILS_ENV:-production}
echo "passenger_app_env ${RAILS_ENV};" >/etc/nginx/rails_env.conf
# Upgrade database
cd /srv/decidim-app
s6-setuidgid decidim sh -c '
bin/rails decidim:upgrade
bin/rails generate delayed_job:active_record >/dev/null 2>&1
bin/rails decidim_conferences:install:migrations
bin/rails decidim_consultations:install:migrations
bin/rails decidim_initiatives:install:migrations
# bin/rails decidim_templates:install:migrations
bin/rails decidim_calendar:install:migrations
bin/rails decidim_comparative_stats:install:migrations
bin/rails decidim_decidim_awesome:install:migrations
# bin/rails decidim_favorites:install:migrations
# bin/rails decidim_feedback:install:migrations
# bin/rails decidim_ideas:install:migrations
# bin/rails decidim_ldap:install:migrations
bin/rails decidim_navbar_links:install:migrations
bin/rails decidim_navigation_maps:install:migrations
bin/rails decidim_time_tracker:install:migrations
bin/rails redirector_engine:install:migrations
bin/rails decidim_url_aliases:install:migrations
bin/rails db:migrate
'
# Create or update superadmin account
cat <<EOF | bin/rails console
Decidim::System::Admin.find_or_initialize_by(id: 1).update!(
email: ENV["DECIDIM_ADMIN_USER"],
password: ENV["DECIDIM_ADMIN_PASSWORD"],
password_confirmation: ENV["DECIDIM_ADMIN_PASSWORD"]
)
EOF
unset DECIDIM_ADMIN_USER
unset DECIDIM_ADMIN_PASSWORD
# Exec into s6 supervisor
exec /bin/s6-svscan /etc/services.d

View File

@ -0,0 +1 @@
*/5 * * * * [ -s /srv/decidim-app/tmp/pids/delayed_job.pid ] || /srv/decidim-app/bin/delayed_job start

View File

@ -0,0 +1,39 @@
user decidim;
pid /run/nginx.pid;
worker_processes 1;
error_log /dev/stderr warn;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log off;
server_tokens off;
client_max_body_size 100m;
sendfile on;
tcp_nodelay on;
send_timeout 300;
passenger_root /usr/local/lib/passenger;
passenger_ruby /usr/local/bin/ruby;
server {
listen 8080;
server_name localhost;
set $passenger_host $http_host;
if ($http_x_forwarded_host) {
set $passenger_host $http_x_forwarded_host;
}
passenger_enabled on;
passenger_set_header Host $passenger_host;
include /etc/nginx/rails_env.conf;
root /srv/decidim-app/public;
}
}

View File

@ -0,0 +1,4 @@
#!/bin/execlineb -P
foreground { s6-svwait -d -t 3000 cron }
foreground { s6-svwait -d -t 3000 nginx }

View File

@ -0,0 +1,4 @@
#!/bin/execlineb -P
fdmove -c 2 1
crond -f -d 8

View File

@ -0,0 +1,3 @@
#!/bin/execlineb -P
nginx -g "daemon off;"

View File

@ -0,0 +1,66 @@
# frozen_string_literal: true
source "https://rubygems.org"
ruby RUBY_VERSION
gem "decidim", "0.23.6"
gem "decidim-conferences", "0.23.6"
gem "decidim-consultations", "0.23.6"
gem "decidim-initiatives", "0.23.6"
# gem "decidim-templates", "0.23.6"
gem "bootsnap", "~> 1.3"
gem "puma", ">= 4.3.5"
gem "uglifier", "~> 4.1"
gem "faker", "~> 1.9"
gem "wicked_pdf", "~> 1.4"
group :development, :test do
gem "byebug", "~> 11.0", platform: :mri
gem "decidim-dev", "0.23.6"
end
group :development do
gem "letter_opener_web", "~> 1.3"
gem "listen", "~> 3.1"
gem "spring", "~> 2.0"
gem "spring-watcher-listen", "~> 2.0"
gem "web-console", "~> 3.5"
end
group :production do
gem "passenger"
gem "delayed_job_active_record"
gem "daemons"
gem "twilio-ruby"
end
# Modules
gem "omniauth-decidim", github: "decidim/omniauth-decidim"
# gem "decidim-access_requests", github: "mainio/decidim-module-access_requests" # Supported until 0.22.0
# gem "decidim-action_delegator", github: "coopdevs/decidim-module-action_delegator" # Supported until 0.23.2
# gem "decidim-antivirus", github: "mainio/decidim-module-antivirus" # Supported until 0.22.0
# gem "decidim-budgets_enhanced", github: "OpenSourcePolitics/decidim-module-budgets_enhanced", branch: "0.22-dev" # Supported until 0.19.0, development branch exists up to 0.22.0
gem "decidim-calendar", github: "alabs/decidim-module-calendar"
gem "decidim-comparative_stats", github: "Platoniq/decidim-module-comparative_stats"
# gem "decidim-cookies", github: "OpenSourcePolitics/decidim-module_cookies" # Supported until 0.21.0
gem "decidim-decidim_awesome", github: "Platoniq/decidim-module-decidim_awesome"
# gem "decidim-department_admin", github: "gencat/decidim-department-admin" # Supported until 0.22.0
gem "decidim-direct_verifications", github: "Platoniq/decidim-verifications-direct_verifications"
# gem "decidim-favorites", github: "mainio/decidim-module-favorites" # Required by ideas, plans
# gem "decidim-feedback", github: "mainio/decidim-module-feedback" # Required by ideas
# gem "decidim-ideas", github: "mainio/decidim-module-ideas" # Supported until 0.23.0, has graphql dependency problems
# gem "decidim-ldap", github: "diputacioBCN/decidim-diba", glob: "decidim-ldap/decidim-ldap.gemspec", Supported until 0.18.0, installable until 0.23.1
gem "decidim-navbar_links", github: "OpenSourcePolitics/decidim-module-navbar_links", branch: "0.23-stable"
gem "decidim-navigation_maps", github: "Platoniq/decidim-module-navigation_maps", ref: "5199551350d05a24c439b4c6dc5946f12eafaa30"
# gem "decidim-plans", github: "mainio/decidim-module-plans" # Supported until 0.22.0
# gem "decidim-process_groups_content_block", github: "mainio/decidim-module-process_groups_content_block" # Supported until 0.22.0
# gem "decidim-term_customizer", github: "mainio/decidim-module-term_customizer" # Supported until 0.22.0
gem "decidim-time_tracker", github: "Platoniq/decidim-module-time_tracker", branch: "main"
# gem "decidim-unique_identity", github: "OpenSourcePolitics/decidim-module-unique-identity" # Supported until 0.18.0
gem "decidim-url_aliases", github: "OpenSourcePolitics/decidim-urlaliases"

View File

@ -0,0 +1,104 @@
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true
# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
# or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
# config.require_master_key = true
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Compress JavaScripts and CSS.
config.assets.js_compressor = Uglifier.new(:harmony => true)
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
# `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = 'http://assets.example.com'
# Specifies the header that your server uses for sending files.
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local
# Mount Action Cable outside main process or domain
# config.action_cable.mount_path = nil
# config.action_cable.url = 'wss://example.com/cable'
# config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
# Use the lowest log level to ensure availability of diagnostic information
# when problems arise.
config.log_level = :info
# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
# Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "decidim_#{Rails.env}"
config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify
# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new
config.action_mailer.smtp_settings = {
:address => Rails.application.secrets.smtp_address,
:port => Rails.application.secrets.smtp_port,
:authentication => Rails.application.secrets.smtp_authentication,
:user_name => Rails.application.secrets.smtp_username,
:password => Rails.application.secrets.smtp_password,
:domain => Rails.application.secrets.smtp_domain,
:enable_starttls_auto => Rails.application.secrets.smtp_starttls_auto,
:openssl_verify_mode => 'none'
}
# Use a different logger for distributed setups.
# require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
end

View File

@ -0,0 +1,314 @@
# frozen_string_literal: true
require "twilio-ruby"
Decidim.configure do |config|
# The name of the application
config.application_name = "Decidim"
# The email that will be used as sender in all emails from Decidim
config.mailer_sender = "admin@example.com"
# Sets the list of available locales for the whole application.
#
# When an organization is created through the System area, system admins will
# be able to choose the available languages for that organization. That list
# of languages will be equal or a subset of the list in this file.
config.available_locales = [:cs, :sk, :en, :de, :fr, :es]
# Sets the default locale for new organizations. When creating a new
# organization from the System area, system admins will be able to overwrite
# this value for that specific organization.
config.default_locale = :cs
# Restrict access to the system part with an authorized ip list.
# You can use a single ip like ("1.2.3.4"), or an ip subnet like ("1.2.3.4/24")
# You may specify multiple ip in an array ["1.2.3.4", "1.2.3.4/24"]
# config.system_accesslist_ips = ["127.0.0.1"]
# Defines a list of custom content processors. They are used to parse and
# render specific tags inside some user-provided content. Check the docs for
# more info.
# config.content_processors = []
# Whether SSL should be enabled or not.
# config.force_ssl = true
# Map and Geocoder configuration
#
# == HERE Maps ==
if !Rails.application.secrets.maps[:api_key].to_s.empty?
config.maps = {
provider: :here,
api_key: Rails.application.secrets.maps[:api_key],
static: { url: "https://image.maps.ls.hereapi.com/mia/1.6/mapview" }
}
end
#
# == OpenStreetMap (OSM) services ==
# To use the OSM map service providers, you will need a service provider for
# the following map servers or host all of them yourself:
# - A tile server for the dynamic maps
# (https://wiki.openstreetmap.org/wiki/Tile_servers)
# - A Nominatim geocoding server for the geocoding functionality
# (https://wiki.openstreetmap.org/wiki/Nominatim)
# - A static map server for static map images
# (https://github.com/jperelli/osm-static-maps)
#
# When used, please read carefully the terms of service for your service
# provider.
#
# config.maps = {
# provider: :osm,
# api_key: Rails.application.secrets.maps[:api_key],
# dynamic: {
# tile_layer: {
# url: "https://tiles.example.org/{z}/{x}/{y}.png?key={apiKey}&{foo}",
# api_key: true,
# foo: "bar=baz",
# attribution: %(
# <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap</a> contributors
# ).strip
# # Translatable attribution:
# # attribution: -> { I18n.t("tile_layer_attribution") }
# }
# },
# static: { url: "https://staticmap.example.org/" },
# geocoding: { host: "nominatim.example.org", use_https: true }
# }
#
# == Combination (OpenStreetMap default + HERE Maps dynamic map tiles) ==
# config.maps = {
# provider: :osm,
# api_key: Rails.application.secrets.maps[:api_key],
# dynamic: {
# provider: :here,
# api_key: Rails.application.secrets.maps[:here_api_key]
# },
# static: { url: "https://staticmap.example.org/" },
# geocoding: { host: "nominatim.example.org", use_https: true }
# }
# Geocoder configurations if you want to customize the default geocoding
# settings. The maps configuration will manage which geocoding service to use,
# so that does not need any additional configuration here. Use this only for
# the global geocoder preferences.
# config.geocoder = {
# # geocoding service request timeout, in seconds (default 3):
# timeout: 5,
# # set default units to kilometers:
# units: :km,
# # caching (see https://github.com/alexreisner/geocoder#caching for details):
# cache: Redis.new,
# cache_prefix: "..."
# }
# Custom resource reference generator method. Check the docs for more info.
# config.reference_generator = lambda do |resource, component|
# # Implement your custom method to generate resources references
# "1234-#{resource.id}"
# end
# Currency unit
config.currency_unit = ""
# Defines the quality of image uploads after processing. Image uploads are
# processed by Decidim, this value helps reduce the size of the files.
# config.image_uploader_quality = 80
# The number of reports which a resource can receive before hiding it
# config.max_reports_before_hiding = 3
# Custom HTML Header snippets
#
# The most common use is to integrate third-party services that require some
# extra JavaScript or CSS. Also, you can use it to add extra meta tags to the
# HTML. Note that this will only be rendered in public pages, not in the admin
# section.
#
# Before enabling this you should ensure that any tracking that might be done
# is in accordance with the rules and regulations that apply to your
# environment and usage scenarios. This component also comes with the risk
# that an organization's administrator injects malicious scripts to spy on or
# take over user accounts.
#
config.enable_html_header_snippets = false
# Allow organizations admins to track newsletter links.
# config.track_newsletter_links = true
# Amount of time that the data portability files will be available in the server.
# config.data_portability_expiry_time = 7.days
# Max requests in a time period to prevent DoS attacks. Only applied on production.
# config.throttling_max_requests = 100
# Time window in which the throttling is applied.
# config.throttling_period = 1.minute
# Time window were users can access the website even if their email is not confirmed.
# config.unconfirmed_access_for = 2.days
# A base path for the uploads. If set, make sure it ends in a slash.
# Uploads will be set to `<base_path>/uploads/`. This can be useful if you
# want to use the same uploads place for both staging and production
# environments, but in different folders.
#
# If not set, it will be ignored.
# config.base_uploads_path = nil
# SMS gateway configuration
#
# If you want to verify your users by sending a verification code via
# SMS you need to provide a SMS gateway service class.
#
# An example class would be something like:
#
# class MySMSGatewayService
# attr_reader :mobile_phone_number, :code
#
# def initialize(mobile_phone_number, code)
# @mobile_phone_number = mobile_phone_number
# @code = code
# end
#
# def deliver_code
# # Actual code to deliver the code
# true
# end
# end
#
# config.sms_gateway_service = "MySMSGatewayService"
class TwilioSMSGatewayService
attr_reader :mobile_phone_number, :code
def initialize(mobile_phone_number, code)
@mobile_phone_number = mobile_phone_number
@code = code
end
def deliver_code
Rails.logger.debug("Twilio SMS gateway service, verification code is: #{code}, should have been delivered to #{mobile_phone_number}")
client.messages.create(
from: Rails.application.secrets.twilio[:sender_number],
to: mobile_phone_number,
body: code
)
end
def client
::Twilio::REST::Client.new Rails.application.secrets.twilio[:account_sid], Rails.application.secrets.twilio[:auth_token]
end
end
if !Rails.application.secrets.maps[:account_sid].to_s.empty?
config.sms_gateway_service = "TwilioSMSGatewayService"
end
# Timestamp service configuration
#
# Provide a class to generate a timestamp for a document. The instances of
# this class are initialized with a hash containing the :document key with
# the document to be timestamped as value. The istances respond to a
# timestamp public method with the timestamp
#
# An example class would be something like:
#
# class MyTimestampService
# attr_accessor :document
#
# def initialize(args = {})
# @document = args.fetch(:document)
# end
#
# def timestamp
# # Code to generate timestamp
# "My timestamp"
# end
# end
#
# config.timestamp_service = "MyTimestampService"
# PDF signature service configuration
#
# Provide a class to process a pdf and return the document including a
# digital signature. The instances of this class are initialized with a hash
# containing the :pdf key with the pdf file content as value. The instances
# respond to a signed_pdf method containing the pdf with the signature
#
# An example class would be something like:
#
# class MyPDFSignatureService
# attr_accessor :pdf
#
# def initialize(args = {})
# @pdf = args.fetch(:pdf)
# end
#
# def signed_pdf
# # Code to return the pdf signed
# end
# end
#
# config.pdf_signature_service = "MyPDFSignatureService"
# Etherpad configuration
#
# Only needed if you want to have Etherpad integration with Decidim. See
# Decidim docs at docs/services/etherpad.md in order to set it up.
#
# config.etherpad = {
# server: Rails.application.secrets.etherpad[:server],
# api_key: Rails.application.secrets.etherpad[:api_key],
# api_version: Rails.application.secrets.etherpad[:api_version]
# }
# Sets Decidim::Exporters::CSV's default column separator
# config.default_csv_col_sep = ";"
# The list of roles a user can have, not considering the space-specific roles.
# config.user_roles = %w(admin user_manager)
# The list of visibility options for amendments. An Array of Strings that
# serve both as locale keys and values to construct the input collection in
# Decidim::Amendment::VisibilityStepSetting::options.
#
# This collection is used in Decidim::Admin::SettingsHelper to generate a
# radio buttons collection input field form for a Decidim::Component
# step setting :amendments_visibility.
# config.amendments_visibility_options = %w(all participants)
# Machine Translation Configuration
#
# Enable machine translations
config.enable_machine_translations = false
#
# If you want to enable machine translation you can create your own service
# to interact with third party service to translate the user content.
#
# An example class would be something like:
#
# class MyTranslationService
# attr_reader :text, :original_locale, :target_locale
#
# def initialize(text, original_locale, target_locale)
# @text = text
# @original_locale = original_locale
# @target_locale = target_locale
# end
#
# def translate
# # Actual code to translate the text
# end
# end
#
# config.machine_translation_service = "MyTranslationService"
# Defines the name of the cookie used to check if the user allows Decidim to
# set cookies.
# config.consent_cookie_name = "decidim-cc"
end
Rails.application.config.i18n.available_locales = Decidim.available_locales
Rails.application.config.i18n.default_locale = Decidim.default_locale

View File

@ -0,0 +1,993 @@
cs:
activemodel:
attributes:
activity:
active: Active
description: Popis
end_date: Datum ukončení
max_minutes_per_day: Maximum minut na den
requests_start_at: Požadavky začínají v
start_date: Datum zahájení
constraint:
component_id: Komponenta
subject_id: Participativní prostor
subject_manifest: Typ participativního prostoru
milestone:
title: Co jste udělal?
task:
name: Jméno
translation:
key: Překladový klíč
value: Přizpůsobený termín
translation_set:
name: Název
translations_import:
file: Import souboru
errors:
models:
milestone:
attributes:
attachment:
needs_to_be_reattached: Vyžaduje být znovu připojen
redirect_rule:
attributes:
destination:
not_recognized: musí být aplikací uznány.
source:
reserved: nemělo by být vyhrazené slovo.
time_event:
attributes:
activity:
finished: Aktivita již byla ukončena
inactive: Aktivita není aktivní
no_time_available: Uživatel dosáhl maximálního množství času dostupného
pro den
not_started: Aktivita zatím nezačala
assignation:
unassigned: Uživatel není přiřazen k úkolu
start:
date_format: Čas začátku není datum
stop:
date_format: Čas ukončení není datum
stop_before_start: Ukončení je před začátkem
translations_import:
attributes:
file:
invalid_mime_type: 'Neplatný typ souboru. Přijímané formáty jsou: %{valid_mime_types}'
activerecord:
attributes:
decidim/ldap_configuration:
authentication_query: Authentifikační query
dn: Základní doménové jméno
email_field: E-mail
host: Host
name_field: Jméno
organization: Organizace
password_field: Heslo
port: Port
username_field: Uživatelské jméno
models:
decidim:
ldap_configuration: LDAP konfigurace
decidim/calendar:
one: Kalendář
other: Kalendáře
decidim:
admin:
actions:
add: Přidat
confirm_destroy: Potvrdit smazání
destroy: Smazat
edit: Upravit
filters:
activity_id_eq:
label: Aktivita
activity_task_id_eq:
label: Úloha
search_placeholder:
user_name_or_user_nickname_or_user_email_cont: Vyhledejte uživatelské jméno,
přezdívku nebo e-mail
menu:
appearance: Vzhled
area_types: Typy oblastí
areas: Oblasti
configuration: Konfigurace
help_sections: Sekce nápovědy
homepage: Domovská stránka
navbar_links: Odkazy navigační lišty
scope_types: Typy oblastí
scopes: Oblasti
models:
assembly:
fields:
assembly_role: Role ve shromáždění
department: Oddělení / oblast
department_role: Role oddělení
navbar_link:
fields:
link: Odkaz
title: Nadpis
weight: Důležitos
participatory_process:
fields:
department: Oddělení / oblast
department_role: Role oddělení
process_role: Role procesu
user:
fields:
administrated_spaces: Spravované prostory
assembly_type: Shromáždění
created_at: Vytvořeno v
department: Oddělení / oblast
private: Soukromí
process_type: Proces
published: Publikováno
roles:
assembly_admin: Správce shromáždění
department_admin: Správce oddělení
participant: Účastník
process_admin: Správce procesu
space_admin: Správce prostoru
search_field_admins: Správci
search_field_processes: Procesy
search_question: Co hledáte?
spaces: Proces / Pravidlo / Shromáždění
title: Název
type: Typ
navbar_links:
create:
error: Chyba
success: Úspěch
destroy:
success: Úspěch
no_links: Žádné odkazy
update:
error: Chyba
success: Úspěch
titles:
navbar_links: Odkazy navigační lišty
users:
form:
area: Oblast
index:
filter:
all: Vše
filter_by: filtrovat podle
search: Hledat
authorization_handlers:
admin:
direct_verifications:
help:
- 'Umožňuje masivní zavedení uživatelů:'
- Přímá registrace v organizaci a odeslání pozvánek
- Ověřit je pomocí jakékoliv metody aktivního ověření
- Zrušit jejich ověření pomocí jakékoli metody aktivního ověření
direct_verifications:
explanation: Ruční ověření správcem organizace
name: Přímé ověření
calendar:
admin:
actions:
new_external_event: Nová externí událost
external_events:
create:
invalid: Neplatná externí událost
success: Externí událost byla úspěšně vytvořena
destroy:
success: Externí událost byla úspěšně odstraněna
edit:
save: Uložit externí událost
form:
title: Externí událost
index:
no_records_html: <p>Nebyly vytvořeny žádné externí události.</p> <p>Začněte
přidáním externí události tlačítkem "<a href="%{new_set_link}">%{button_name}</a>.</p>
title: Externí události
new:
create: Vytvořit externí událost
title: Nová externí událost
update:
invalid: Chyba při aktualizaci externí události
success: Externí událost byla úspěšně aktualizována
models:
external_events:
fields:
end_at: Konec v
start_at: Začátek v
title: Název
url: URL
index:
filters:
consultation: Konzultace
debate: Debaty
external_event: Externí události
meeting: Schůzky
participatory_step: Účastnický proces
title: Globální kalendář
menu:
calendar: Kalendář
gantt: Ganttův graf
ical: Stáhnout iCAL
components:
cookies:
accept: Přijmout vše
analytics:
description: Umožňuje sledování za účelem zlepšení uživatelské zkušenosti
consent_modal:
description: Tento způsob umožňuje filtrovat soubory cookie, které chcete.
decidim:
description: Umožňuje zkontrolovat, zda uživatel soubory cookie přijal
decidim_session:
description: Umožňuje udržovat relaci uživatele aktivní po omezenou dobu.
Je nutný ke zlepšení uživatelského komfortu v Decidim
matomo:
description: Umožňuje sledování za účelem zlepšení uživatelské zkušenosti
name: Cookies
purposes:
ads: Reklamy
analytics: Analytika
checking: Zkontrolujte souhlas uživatele
security: Zabezpečení
session: Seance
tracking: Trasování
department_admin:
name: Správce oddělení
navbar_links:
name: Odkazy navigační lišty
navigation_maps:
name: Navigační Mapy
time_tracker:
name: Časový záznam
settings:
global:
activities_label: Název pro "Aktivity"
announcement: Oznámení
assignations_label: Jméno pro "Přiřazení"
milestones_label: Název pro "Milníky"
tasks_label: Název pro "Úkoly"
time_events_label: Název pro "Čas události"
step:
announcement: Oznámení
views:
activity:
info: Klikněte na tlačítko pro zaznamenání času.
time_elapsed: 'Uplynulý čas:'
index:
account_message: <a href="%{sign_in_url}">Přihlaste se pomocí svého účtu</a>
nebo se <a href="%{sign_up_url}">zaregistrujte</a> pro účast na této
aktivitě.
data:
fill: Vyplňte údaje
submit: Odeslat
request: Žádost o připojení k aktivitě
direct_verifications:
verification:
admin:
direct_verifications:
create:
authorized: '%{authorized} uživatelů bylo úspěšně ověřeno pomocí [%{handler}]
(%{count} detekováno, %{errors} chyb)'
info: Zjištěno %{count} uživatelů, z nichž %{registered} jsou registrováni,
%{authorized} autorizováni pomocí [%{handler}] (%{unconfirmed} nepotvrzeno)
registered: '%{registered} uživatelů bylo úspěšně zaregistrováno (%{count}
detekováno, %{errors} chyb) '
revoked: Ověření od %{revoked} uživatelů bylo zrušeno pomocí [%{handler}]
(%{count} detekováno, %{errors} chyb)
gdpr_disclaimer: Udělejte to v rámci vaší odpovědnosti. Nezapomeňte, že
potřebujete mít výslovný souhlas svých uživatelů, abyste je mohli zaregistrovat.
V opačném případě můžete porušovat nařízení o GDPR v zemích EU.
index:
stats: Statistiky uživatelů
title: Registrovat a autorizovat uživatele
new:
authorization_handler: Ověřovací metoda
authorize: Autorizovat uživatele
check: Zkontrolovat stav uživatelů
info: Zadejte e-maily zde, jeden na řádek. Pokud e-mailům předchází text,
bude interpretován jako jméno uživatele
register: Registrovat uživatele na platformě (pokud existují, budou ignorováni)
revoke: Zrušit autorizaci od uživatelů
submit: Odeslat a zpracovat seznam
textarea: Seznam e-mailů
stats:
index:
authorized: Autorizováno
authorized_unconfirmed: Autorizováno, ale nepotvrzeno
global: '- Jakákoli metoda ověřování -'
registered: Registrován
unconfirmed: Nepotvrzeno
authorizations:
new:
no_action: Tato metoda vyžaduje administrátora, který vás ověřuje
favorites:
favorite_button:
add_to_favorites: Přidat k oblíbeným
remove_from_favorites: Odstranit z oblíbených
sign_in_before_favorite: Přihlaste se a přidejte jako oblíbené
favorites:
index:
description_html: <p> Osobní oblíbené položky můžete přidat pomocí tlačítka
Přidat do oblíbených. Objeví se na této stránce. </p>
icon_description: 'Pomocí této ikony můžete přidat oblíbené položky:'
title: Oblíbené
show:
description_html: <p> Zde vidíte všechny oblíbené položky, které jste přidali
v různých fázích procesu. V postranní navigaci můžete vybrat, které oblíbené
položky chcete zobrazit. </p>
title: Oblíbené
side_panel:
show_navigation: Zobrazit navigaci
favoriting_count:
times_added_to_favorites:
one: Jedna osoba přidala toto do svých oblíbených
other: '%{count} lidí si toto přidalo ke svým oblíbeným'
zero: Toto zatím nikdo nepřidal mezi své oblíbené
ldap:
ldap_configurations:
create:
error: Při vytváření nové konfigurace LDAP došlo k chybě.
success: Konfigurace LDAP byla úspěšně vytvořena.
destroy:
success: Konfigurace LDAP byla úspěšně zničena.
edit:
title: Upravit LDAP
update: Aktualizovat
form:
authentication_query: Authentifikační query
dn: Základní doménové jméno
email_field: E-mail
host: Hostitel
name_field: Jméno
organization: Organizace
password_field: Heslo
port: Port
username_field: Uživatelské jméno
index:
title: LDAP
new:
create: Vytvořit
title: Nový LDAP
update:
error: Při aktualizaci této konfigurace LDAP došlo k chybě.
success: Konfigurace LDAP byla úspěšně aktualizována.
menu:
ldap: LDAP
models:
ldap_configuration:
fields:
created_at: Vytvořeno v
name: Organizace / název domény
name: LDAP konfigurace
log:
value_types:
activity_presenter:
not_found: 'Aktivita nebyla v databázi nalezena (ID: %{id})'
time_tracker_presenter:
not_found: 'Komponenta Time Tracker nebyla v databázi nalezena (ID: %{id})'
navbar_links:
admin:
navbar_links:
edit:
title: Název
update: Aktualizace
form:
link: Odkaz
new_tab: Nová záložka
same_tab: Stejná záložka
title: Nadpis
weight: Důležitost
new:
create: Vytvořit
title: Nadpis
navigation_maps:
admin:
areas:
create:
error: Došlo k chybě při vytváření oblasti
success: Oblast byla úspěšně vytvořena
form:
no_popup: Nepoužívejte vyskakovací okno, odkazujte přímo na oblast.
new:
area: Detaily nové oblasti
cancel: Zrušit
save: Uložit
show:
area: Detaily oblasti
cancel: Zrušit
link_suggestions: 'Tip: použijte %{map} pro propojení dalších karet'
save: Uložit
update:
error: Došlo k chybě při ukládání oblasti
success: Oblast úspěšně uložena
content_blocks:
name: Navigační Mapy
navigation_map:
view: Zapojte se
navigation_map_settings_form:
add: Přidat
blueprint_image: Obrázek plánu
description: Popis
editor: Editor mapy
height: Height (px)
id: Id
image_missing: Pro začátek přidejte obrázek plánu
info: Obecné informace
link: Odkaz
remove_blueprint: Smazat tento plán
title: Název
type: Typ
upload_image: Nahrát obrázek
create:
error: Chyba při vytváření plánu
success: Plán byl úspěšně vytvořen
pages:
home:
statistics:
activities_count: Aktivit
assignees_count: Dobrovolníků
tasks_count: Úloh
participatory_processes:
statistics:
activities_count: Aktivit
assignees_count: Dobrovolníků
tasks_count: Úloh
process_groups_content_block:
content_blocks:
highlighted_process_groups:
name: Zvýrazněné skupiny procesů
pages:
home:
highlighted_process_groups:
active_processes: Aktivní procesy
see_all_processes: Zobrazit všechny procesy
term_customizer:
admin:
actions:
add_multiple_translations: Přidat více
back: Zpět
cancel: Zrušit
clear_cache: Vymazat mezipaměť
confirm_duplicate: Opravdu chcete duplikovat tuto sadu?
duplicate: Duplikovat
help: Nápověda
import: Import
new_translation: Nový překlad
new_translation_set: Nová sada překladu
view: Zobrazit
add_translations:
index:
add: Přidat
help_html: <p> Začněte zadáním několika písmen, která se objeví na výrazu,
který chcete změnit, na vyhledávacím panelu. Počkejte několik sekund
a pod vyhledávacím polem se zobrazí seznam všech překladů odpovídajících
vašemu vyhledávání. Klikněte na překlady v seznamu, který chcete změnit.
Zobrazí se pod vyhledávacím polem v seznamu překladů, které mají být
přidány. </p> <p> Jakmile přidáte všechny překlady, které chcete změnit,
klikněte na tlačítko „%{button_name}“ ve spodní části obrazovky.</p>
help_title: Jak hledat překlady?
search: Hledat
caches:
clear:
success: Cache cleared successfully
models:
translation_sets:
fields:
name: Název
translations:
fields:
key: Překladový klíč
original_term: Původní termín
term: Upravený termín
titles:
add_multiple_translations: Přidat více
translation_sets: Překladové sady
translations: Překlady
translation_sets:
constraint_fields:
constraint: Omezení
remove: Odstranit
create:
error: Při vytváření sady překladu došlo k chybě.
success: Sada překladu byla úspěšně vytvořena.
destroy:
success: Sada překladu byla úspěšně smazána.
duplicate:
copied_set_name: Kopie %{name}
error: Chyba při duplikování sady překladu.
success: Sada překladu byla úspěšně duplikována.
edit:
save: Uložit
title: Sada překladu
form:
add_constraint: Přidat omezení
constraint_help_html: <p> Omezení jsou konkrétní pravidla, která vám umožňují
aplikovat přizpůsobení v sadě na konkrétní kontext. </p> <p> Pokud nedefinujete
žádná omezení, použijí se přizpůsobení v této sadě na celou aplikaci
. Na druhou stranu, pokud chcete, aby se přizpůsobení v této sadě vztahovalo
pouze na konkrétní proces, vyberte jako typ participativního prostoru
možnost „Participativní procesy“ a jako participativní prostor cílový
proces. Kromě toho můžete také použít přizpůsobení na konkrétní komponentu
definováním komponenty pro omezení. </p> <p> Pokud definujete více omezení,
přizpůsobení se použijí ve všech z nich. </p>
constraint_help_title: Co jsou omezení?
help_html: <p> Sada překladu je „kontejner“, který obsahuje překlady pro
konkrétní kontext, který chcete upravit. </p> <p> Sada překladu vám
pomůže uspořádat přizpůsobení a použít je v různých kontextech. To vám
umožní přizpůsobit stejný překlad odlišně v různých kontextech. </p>
<p> Pokud například chcete přizpůsobit tlačítko s výrazem „Přidat“ odlišně
pro různé participativní procesy, můžete vytvořit samostatné překladové
sady pro oba procesy a použít sadu na tyto procesy pomocí omezení.</p>
help_title: Co je překladová sada?
title: Překladová sada
index:
no_records_html: <p> Nejsou k dispozici žádné překladové sady. </p> <p>
Začněte přidáním překladové sady pomocí tlačítka „<a href="%{new_set_link}">%{button_name}</a>“.</p>
new:
create: Vytvořit
title: Překladové sady
update:
error: Při aktualizaci překladové sady došlo k chybě.
success: Překladová sada byla úspěšně aktualizována.
translations:
create:
error: Chyba při vytváření překladu.
success: Překlad byl úspěšně vytvořen.
destroy:
success: Překlad byl úspěšně smazán.
edit:
save: Uložit
title: Překlad
form:
help_html: <p> Překladový klíč je technický odkaz na překlad, který má
být přeložen. Toto není termín, který chcete změnit, ale technický klíč,
který odkazuje na tento překlad. </p> <p> Například pokud chcete změnit
výraz <em> „Procesy“ </em> v horní nabídce, použili byste klíč <em>
"decidim.menu.processes" </em>. </p> <p> <a href="https://guides.rubyonrails.org/i18n.html"
target = "_blank"> Další informace o internacionalizaci Rails </a>.
</p>
help_title: Co je překladový klíč?
term_help_html: <p> Přizpůsobený výraz je konečné slovo, které se má v
uživatelském rozhraní zobrazit místo původního výrazu. Je zřejmé, že
přizpůsobený výraz se může u každého povoleného jazyka lišit. </p>
term_help_title: Co je přizpůsobený termín?
title: Překlad
import:
error: Chyba při importu překladů
success: Překlady byly úspěšně importovány.
index:
actions: Akce
no_records_html: <p> V této sadě nejsou k dispozici žádné překlady. </p>
<p> Začněte přidáním překladů do této sady. Nejjednodušší je použít
tlačítko „<a href="%{add_multiple_link}">%{button_name}</a>“, kde můžete
vyhledávat překlady se stejnými výrazy, jaké vidíte v uživatelském rozhraní.
</p>
selected: vybrané
new:
create: Vytvořit
title: Překlady
new_import:
accepted_mime_types:
csv: CSV
json: JSON
xls: XLS
file_legend: 'Přidejte soubor pro import, který bude analyzován pro překlady.
Podporované formáty jsou: %{valid_mime_types}'
start_import: Start importu
title: Import překladů
zip_hint: Soubor ZIP můžete také nahrát z exportu překladů.
update:
error: Chyba při aktualizaci překladu.
success: Překlad byl úspěšně aktualizován.
translations_destroys:
destroy:
error: Chyba při mazání překladů.
success: Překlady byly úspěšně smazány.
new:
destroy: Smazat
title: Překlady smazat
menu:
term_customizer: Přizpůsobovač termínů
time_tracker:
admin:
actions:
title: Akce
activities:
actions:
assignations: Správa přiřazení
confirm_destroy: Opravdu chcete odstranit tuto aktivitu?
destroy: Odstranit aktivitu
edit: Upravit aktivitu
new: Nová aktivita
create:
error: Chyba vytváření aktivity
success: Aktivita byla úspěšně vytvořena
destroy:
success: Aktivita úspěšně smazána
edit:
submit: Změnit aktivitu
title: Upravit aktivitu
index:
title: Úkolové aktivity
new:
submit: Vytvořit aktivitu
title: Nová aktivita
update:
error: Chyba při aktualizaci aktivity
success: Akce byla úspěšně aktualizována
assignations:
actions:
accept: Přijmout
accept_all: Přijmout všechny čekající přiřazení
assignations: Správa přiřazení
confirm_destroy: Opravdu chcete odstranit toto přiřazení?
destroy: Odstranit přiřazení
new: Nové přiřazení
reject: Odmítnout
create:
error: Chyba při vytváření přiřazení
success: Přiřazení bylo úspěšně vytvořeno
destroy:
error: Chyba při odstraňování přiřazení
succcess: Přiřazení bylo úspěšně odstraněno
form:
existing_user: Existující účastník
non_user: Není účastníkem
select_user: Vybrat účastníka
user_type: Typ účastníka
index:
title: Přiřazení
new:
create: Vytvořit přiřazení
title: Nové přiřazení k této aktivitě
update:
error: Chyba při aktualizaci přiřazení
success: Přiřazená osoba úspěšně aktualizována
breadcrumbs:
assignations: Přiřazení
global: Všechny úkoly
stats: Statistiky
exports:
time_tracker_activity_questionnaire_answers: Odpovědi na dotazník o činnosti
time_tracker_assignee_questionnaire_answers: Odpovědi na dotazník přiřazeného
models:
activity:
name: Aktivita
assignation:
name: Přiřazení
task:
name: Úloha
questionnaires:
index:
title: Dotazník
questionnaire:
edit: Upravit dotazník
stats:
index:
title: Statistiky
tasks:
actions:
confirm_destroy: Jste si jisti, že chcete odstranit tento úkol?
destroy: Smazat úkol
edit: Upravit úkol
new: Nová úloha
activity_questionnaire:
title: Dotazník o činnosti
assignations:
bulk_invalid: Chyba, %{count} účastníků nelze přiřadit
bulk_ok: Úspěšně přiřazeno %{count} účastníků
pending: Čekající přiřazení
assignee_questionnaire:
title: Podmínky a zásady Dotazníku
create:
error: Chyba při vytváření úlohy
success: Úloha úspěšně vytvořena
destroy:
success: Úloha úspěšně smazána
edit:
submit: Aktualizovat
title: Aktualizovat úkol
index:
title: Úlohy
new:
submit: Vytvořit
title: Vytvořit úkol
update:
error: Chyba při aktualizaci úlohy
success: Úloha úspěšně aktualizována
time_tracker_exports:
create:
error: Chyba při importu dat o sledování času do odpovědnosti
success: Data sledování času byla úspěšně exportována do odpovědnosti
admin_log:
activity:
create: '%{user_name} vytvořil aktivitu %{resource_name}'
delete: '%{user_name} odstranil aktivitu %{resource_name}'
update: '%{user_name} aktualizoval aktivitu %{resource_name}'
assignation:
create: '%{user_name} vytvořil přiřazení'
delete: '%{user_name} odstranil přiřazení'
update: '%{user_name} aktualizoval přiřazení'
task:
create: '%{user_name} vytvořil úkol %{resource_name}'
delete: '%{user_name} odstranil úkol %{resource_name}'
update: '%{user_name} aktualizoval úkol %{resource_name}'
assignations:
request:
error: Při přiřazování k této aktivitě došlo k chybě.
success: Úspěšně jste požádali o připojení k této aktivitě!
show:
assignations_activity: Aktivita %{user_name}
milestones_list: Seznam milníků
clock:
hours: '%{n}h'
minutes: '%{n}m'
seconds: '%{n}s'
default_activity_questionnaire:
description: Děkujeme, že jste vyplnili tento dotazník! Ptáme se na vás tento
soubor otázek, který vám pomůže pochopit, zda je váš projekt (a jeho akce
prováděné na dobrovolném základě) vyvážený, pokud jde o rozdělení úkolů
kvůli pohlaví. Zohlednění těchto otázek může být také užitečnou příležitostí
k analýze toho, co je považováno za důležité a kdo tyto úkoly obvykle plní.
question_1:
body: Jak je podle vás tento úkol důležitý?
description: Od 1 do 5 považujete tento úkol za nejdůležitější (5), vůbec
není důležitý (1) nebo něco mezi tím?
option_1: 1 (vůbec není důležitý)
option_2: 2 (nepříliš důležité)
option_3: 3 (Spíše důležité)
option_4: 4 (Velmi důležité)
option_5: 5 (Nejdůležitější)
question_2:
body: Kdo si myslíte, že tento úkol obvykle plní?
description: Myslíte si, že tento úkol plní většinou lidé, kteří se ztotožňují
s určitým pohlavím?
option_1: Většinou ženy
option_2: Většinou muži
option_3: Nevidím rozdíly podle pohlaví
option_4: Ostatní
title: Jak vnímáte tento úkol?
tos: Údaje, které zde byly zodpovězeny, se považují za důvěrné a používají
se pouze pro statistické účely. Také platí všeobecné <a href="/pages/terms-and-conditions">Podmínky</a>.
Odesláním tohoto dotazníku s nimi souhlasíte.
default_assignee_questionnaire:
description: Děkujeme za vyplnění tohoto dotazníku! Ptáme se vás na tento
soubor otázek, abychom vám pomohli pochopit, zda je váš projekt (a jeho
akce prováděné na základě dobrovolnosti) vyvážený z hlediska rozdělení úkolů
z důvodu pohlaví.
question_1:
body: S jakým pohlavím se ztotožňujete?
description: Vyberte možnost, která nejlépe odpovídá vaší genderové identitě.
option_1: Žena
option_2: muž
option_3: Ne-binární
option_4: Ostatní
question_2:
body: Jaký je váš věk?
description: Vyberte si svůj věkový rozsah
option_1: Pod 15
option_10: 55 až 60
option_11: 65 až 70
option_12: 70 až 75
option_13: 75 až 80
option_14: 80 až 85
option_15: 85 až 90
option_16: Přes 90
option_2: 15 až 20
option_3: 20 až 25
option_4: 25 až 30
option_5: 30 až 35
option_6: 35 až 40
option_7: 40 až 45
option_8: 45 až 50
option_9: 50 až 55
title: Podmínky použití a demografické údaje
tos: Údaje, které zde byly zodpovězeny, se považují za důvěrné a používají
se pouze pro statistické účely. Také platí všeobecné <a href="/pages/terms-and-conditions">Podmínky</a>.
Odesláním tohoto dotazníku s nimi souhlasíte.
milestone:
dedicated_time: '%{hours}h %{minutes}m %{seconds}s'
time_dedicated: Vyhrazený čas
title: Aktivita %{user_name}
milestone_form:
button_no: Ne, děkuji
button_submit: Uložit
description: Podělte se o důkaz své práce nahráním obrázku a krátkého popisu
toho, čeho jste dosáhli.
input_file: Soubor
input_title: Název
title: Zanechte svou značku!
milestones:
create:
error: Chyba při vytváření milníku
success: Milník byl úspěšně vytvořen
index:
assignations_activity: Aktivita %{user_name}
back_to_list: Zpět k aktivitám
joined_on: Přidal/a se dne
last_worked_on: Naposledy pracoval
total_time: Celkový vyhrazený čas
milestone:
time_dedicated: Vyhrazený čas
models:
activity:
fields:
assignations_accepted: Přijaté přiřazení
assignations_pending: Čekající přiřazení
description: Popis
end_date: Datum ukončení
max_minutes_per_day: Max. minut denně
requests_start_at: Požadavky začínají v
start_date: Datum zahájení
status: Stav
statuses:
finished: Dokončeno
inactive: Neaktivní
not_started: Nezahájeno
open: Otevřeno
name: Aktivita
assignation:
fields:
activity: Aktivita
email: E-mail
invited_at: Pozván na
invited_by: Pozván od
name: Jméno
requested_at: Požadováno v %{time}
status: Stav
statuses:
accepted: Přijato
pending: Čekající
rejected: Odmítnuto
task: Úloha
time_dedicated: Vyhrazený čas
tos_accepted_at: Členem od
name: Přiřazení
questionnaire:
fields:
name: Jméno
title: Název
task:
fields:
activities_count: Počet aktivit
activities_end_at: Poslední aktivita končí v
activities_start_at: První aktivita začíná v
assignations_accepted: Přijaté přiřazení
assignations_pending: Čekající přiřazení
name: Jméno
name: Úloha
reports:
user:
index:
accepted: Přijato
dedicated_time: 'Dosud vyhrazený čas: %{time}'
empty: Nemáte žádné přiřazení aktivit
pending: Čekající
time_events:
start:
already_started: Počítadlo je již spuštěno
error: Chyba při spuštění počítadla
success: Počítadlo bylo úspěšně spuštěno
stop:
already_stopped: Počítadlo již zastaveno
error: Chyba při zastavování počítadla
success: Počítadlo se úspěšně zastavilo
time_tracker:
activity:
counter_stopped: Počítadlo bylo automaticky zastaveno
questionnaire:
answered: Děkujeme za zodpovězení dotazníku!
respond: Co si myslíte o tomto úkolu?
assignee_data:
answer: Začněme!
description: Abychom lépe porozuměli našim účastníkům a jejich vztahu k
těmto úkolům, žádáme vás, abyste vyplnili několik otázek týkajících se
vašeho demografického profilu. Před registrací k jakémukoli úkolu se také
chceme ujistit, že souhlasíte s podmínkami použití. Děkujeme!
title: Podmínky použití a demografické údaje
callout_status:
finished: Ukončeno %{end_date}
inactive: Neaktivní
not_started: Začíná %{start_date}
open: Otevřít, začalo %{start_date}
idle_activity:
assignation_pending: Již aplikováno! Brzy správce zkontroluje vaši žádost.
assignation_rejected: Omlouváme se, Vaše žádost byla zamítnuta.
index:
empty: Zatím nejsou žádné aktivity.
milestones_list: Lidé pracující v této aktivitě
questionnaire_in_preview_mode: Na tento dotazník nelze v režimu náhledu odpovědět!
request_activity:
assignation_pending: Již aplikováno! Brzy správce zkontroluje vaši žádost.
assignation_rejected: Omlouváme se, Vaše žádost byla zamítnuta.
assignee_questionnaire: Přijměte prosím <a href="%{path}" target="_blank">Podmínky
užití</a> abyste se mohli připojit se k aktivitě.
time_tracker_activity_questionnaire_answers_serializer:
activity_description: Aktivita
activity_id: ID aktivity
created_at: Zodpovězeno
id: ID odpovědi
ip_hash: Ip Hash
registered: Registrován
task_id: ID úkolu
task_name: Úloha
unregistered: Neregistrovaný
user_status: Stav uživatele
url_aliases:
admin:
decidim:
url_aliases:
admin:
redirect_rules:
index:
'no': ne
'yes': ano
menu:
url_aliases: Přesměrování
models:
redirect_rule:
fields:
active: Aktivní
destination: Cíl
id: Id
source: Zdroj
source_is_case_sensitive: Rozlišuje velká a malá písmena
redirect_rules:
create:
error: Při vytváření přesměrování došlo k chybě.
success: Přesměrování bylo úspěšně vytvořeno.
destroy:
error: Při odstraňování přesměrování došlo k chybě.
success: Přesměrování bylo úspěšně odstraněno.
edit:
title: Upravit přesměrování
update: Aktualizace
form:
active: Aktivní
destination_example: /processes/process-slug
destination_help: Cesta, na kterou budou vaši návštěvníci přesměrováni.
Přijaty jsou pouze cíle rozpoznané aplikací.
source_example: /my-custom-url
source_help: Cesta, ze které budou vaši návštěvníci přesměrováni. Musí
začínat znakem „/“ a může obsahovat pouze písmena, číslice, pomlčky
a podtržítka.
source_is_case_sensitive: Zdroj rozlišuje velká a malá písmena
new:
create: Vytvořit
title: Nové přesměrování
no_redirect_rules: Nejsou k dispozici žádná přesměrování
update:
error: Při aktualizaci přesměrování došlo k chybě.
success: Přesměrování bylo aktualizováno
titles:
redirect_rules: Přesměrování
admin_log:
create: '%{user_name} vytvořil %{resource_name} s ID %{resource_id}'
delete: '%{user_name} smazal %{resource_name} s ID %{resource_id}'
update: '%{user_name} aktualizoval %{resource_name} s ID %{resource_id}'
format_error: musí začínat „/“ a obsahovat pouze písmena, číslice, pomlčky a
podtržítka.
verifications:
authorizations:
first_login:
actions:
direct_verifications: Přímé ověření
decidim_navbar_links:
admin:
menu:
navbar_links: Odkazy navigační lišty
devise:
failure:
user:
ldap_invalid: Neplatné jméno nebo heslo
mailer:
direct_invite:
subject: Pokyny pro pozvání
layouts:
decidim:
admin:
settings:
title: Nadpis
footer:
revoke_cookies: Odmítnutí přijetí cookies
user_profile:
time_tracker: Moje dobrovolnická práce

View File

@ -0,0 +1,81 @@
# Be sure to restart your server when you modify this file.
# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rails secret` to generate a secure secret key.
# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.
default: &default
omniauth:
facebook:
# It must be a boolean. Remember ENV variables doesn't support booleans.
enabled: false
app_id: <%= ENV["OMNIAUTH_FACEBOOK_APP_ID"] %>
app_secret: <%= ENV["OMNIAUTH_FACEBOOK_APP_SECRET"] %>
twitter:
enabled: false
api_key: <%= ENV["OMNIAUTH_TWITTER_API_KEY"] %>
api_secret: <%= ENV["OMNIAUTH_TWITTER_API_SECRET"] %>
google_oauth2:
enabled: false
icon_path: decidim/brands/google.svg
client_id: <%= ENV["OMNIAUTH_GOOGLE_CLIENT_ID"] %>
client_secret: <%= ENV["OMNIAUTH_GOOGLE_CLIENT_SECRET"] %>
maps:
api_key: <%= ENV["MAPS_API_KEY"] %>
etherpad:
server: <%= ENV["ETHERPAD_SERVER"] %>
api_key: <%= ENV["ETHERPAD_API_KEY"] %>
api_version: "1.2.1"
bulletin_board:
identification_private_key: |
server:
api_key:
twilio:
account_sid: <%= ENV["TWILIO_ACCOUNT_SID"] %>
auth_token: <%= ENV["TWILIO_AUTH_TOKEN"] %>
sender_number: <%= ENV["TWILIO_SENDER_NUMBER"] %>
development:
<<: *default
secret_key_base: 8c1ae960e908eeb50b0a0d95ad2318277a5a8ffb3202c242ab5e8642946c8c4cffba1a8afa54e9fbe4386ab2af880ad4fd2a467d3e2e37c9b279e2badb9bfbb9
omniauth:
developer:
enabled: true
icon: phone
test:
<<: *default
secret_key_base: e6f5a697254308dcb178c4945e55e6846d4770ef2ec2d07b9926313aebc7928bcc2d7331c273a2f02b730943adb304d8dc9cd54ea55be90e31a07f2690f20636
omniauth:
facebook:
enabled: true
app_id: fake-facebook-app-id
app_secret: fake-facebook-app-secret
twitter:
enabled: true
api_key: fake-twitter-api-key
api_secret: fake-twitter-api-secret
google_oauth2:
enabled: true
client_id:
client_secret:
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
<<: *default
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
smtp_username: <%= ENV["SMTP_USERNAME"] %>
smtp_password: <%= ENV["SMTP_PASSWORD"] %>
smtp_address: <%= ENV["SMTP_ADDRESS"] %>
smtp_domain: <%= ENV["SMTP_DOMAIN"] %>
smtp_port: "587"
smtp_starttls_auto: true
smtp_authentication: "plain"

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.2 MiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.1 MiB

36
docker-compose.yml Normal file
View File

@ -0,0 +1,36 @@
---
version: '3'
services:
decidim:
build: decidim
image: decidim:0.23.6-210515
restart: unless-stopped
depends_on:
- decidim-postgres
env_file:
- .env
expose:
- 8080
ports:
- 8080:8080
volumes:
- decidim_migrate:/srv/decidim-app/db/migrate
- decidim_storage:/srv/decidim-app/storage
- decidim_uploads:/srv/decidim-app/public/uploads
decidim-postgres:
image: postgres:12-alpine
restart: unless-stopped
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
decidim_migrate:
decidim_storage:
decidim_uploads:
postgres_data: