1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-20 14:54:15 +01:00

Merge branch 'dev' for release 6.3.11

This commit is contained in:
Du Peng 2024-02-02 18:49:32 +01:00
commit 5da7f827d4
39 changed files with 1538 additions and 967 deletions

View File

@ -2,6 +2,11 @@
## Next release
- Fix a bug: if there is a reservation with a deleted user, it is not possible to delete the event
- Fix a bug: postgres client isnt added docker image
- Support for SAML in Single-Sign-On authentication providers
- updates translations
## v6.3.10 2024 January 19
- Fix a bug: unable to update event recurrence

View File

@ -4,6 +4,7 @@ MAINTAINER contact@sleede.com
# First we need to be able to fetch from https repositories
RUN apt-get update && \
apt-get install -y apt-transport-https \
postgresql-client \
ca-certificates apt-utils supervisor locales
RUN locale-gen C.UTF-8

View File

@ -72,6 +72,7 @@ gem 'devise', '>= 4.9'
gem 'omniauth', '~> 2.1'
gem 'omniauth-oauth2'
gem 'omniauth_openid_connect'
gem 'omniauth-saml'
gem 'omniauth-rails_csrf_protection', '~> 1.0'
gem 'rolify'
@ -153,4 +154,4 @@ gem 'sentry-ruby'
gem "reverse_markdown"
gem "ancestry"
gem 'silencer', require: false
gem 'silencer', require: false

View File

@ -292,6 +292,9 @@ GEM
omniauth-rails_csrf_protection (1.0.1)
actionpack (>= 4.2)
omniauth (~> 2.0)
omniauth-saml (2.1.0)
omniauth (~> 2.0)
ruby-saml (~> 1.12)
omniauth_openid_connect (0.6.1)
omniauth (>= 1.9, < 3)
openid_connect (~> 1.1)
@ -422,6 +425,9 @@ GEM
rubocop (>= 1.7.0, < 2.0)
ruby-progressbar (1.10.1)
ruby-rc4 (0.1.5)
ruby-saml (1.16.0)
nokogiri (>= 1.13.10)
rexml
ruby-vips (2.1.4)
ffi (~> 1.12)
rubyXL (3.4.25)
@ -579,6 +585,7 @@ DEPENDENCIES
omniauth (~> 2.1)
omniauth-oauth2
omniauth-rails_csrf_protection (~> 1.0)
omniauth-saml
omniauth_openid_connect
openlab_ruby
overcommit

View File

@ -105,6 +105,13 @@ class API::AuthProvidersController < API::APIController
auth_provider_mappings_attributes: [:id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type,
:_destroy, { transformation: [:type, :format, :true_value, :false_value,
{ mapping: %i[from to] }] }])
elsif params['auth_provider']['providable_type'] == SamlProvider.name
params.require(:auth_provider)
.permit(:id, :name, :providable_type,
providable_attributes: [:id, :sp_entity_id, :idp_sso_service_url, :profile_url, :idp_cert_fingerprint, :idp_cert],
auth_provider_mappings_attributes: [:id, :local_model, :local_field, :api_field, :api_endpoint, :api_data_type,
:_destroy, { transformation: [:type, :format, :true_value, :false_value,
{ mapping: %i[from to] }] }])
end
end
end

View File

@ -2,6 +2,7 @@
# Handle authentication actions via OmniAuth (used by SSO providers)
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
skip_before_action :verify_authenticity_token
require 'sso_logger'
logger = SsoLogger.new

View File

@ -12,6 +12,7 @@ import { TypeMappingModal } from './type-mapping-modal';
import { useImmer } from 'use-immer';
import { Oauth2DataMappingForm } from './oauth2-data-mapping-form';
import { OpenidConnectDataMappingForm } from './openid-connect-data-mapping-form';
import { SamlDataMappingForm } from './saml-data-mapping-form';
export interface DataMappingFormProps<TFieldValues, TContext extends object> {
register: UseFormRegister<TFieldValues>,
@ -164,6 +165,11 @@ export const DataMappingForm = <TFieldValues extends FieldValues, TContext exten
setValue={setValue}
formState={formState}
currentFormValues={currentFormValues} />}
{providerType === 'SamlProvider' && <SamlDataMappingForm register={register}
index={index}
setValue={setValue}
formState={formState}
currentFormValues={currentFormValues} />}
</div>
</div>
<div className="actions">

View File

@ -20,6 +20,7 @@ import { FabButton } from '../base/fab-button';
import AuthProviderAPI from '../../api/auth-provider';
import { OpenidConnectForm } from './openid-connect-form';
import { DatabaseForm } from './database-form';
import { SamlForm } from './saml-form';
declare const Application: IApplication;
@ -27,7 +28,8 @@ declare const Application: IApplication;
const METHODS = {
DatabaseProvider: 'local_database',
OAuth2Provider: 'oauth2',
OpenIdConnectProvider: 'openid_connect'
OpenIdConnectProvider: 'openid_connect',
SamlProvider: 'saml'
};
interface ProviderFormProps {
@ -116,6 +118,7 @@ export const ProviderForm: React.FC<ProviderFormProps> = ({ action, provider, on
currentFormValues={output.providable_attributes as OpenIdConnectProvider}
formState={formState}
setValue={setValue} />}
{providableType === 'SamlProvider' && <SamlForm register={register} strategyName={strategyName} formState={formState} />}
{providableType && providableType !== 'DatabaseProvider' && <DataMappingForm register={register}
control={control}
formState={formState}

View File

@ -0,0 +1,87 @@
import { Path, UseFormRegister } from 'react-hook-form';
import { FieldValues } from 'react-hook-form/dist/types/fields';
import { FormInput } from '../form/form-input';
import { HtmlTranslate } from '../base/html-translate';
import { useTranslation } from 'react-i18next';
import { UnpackNestedValue, UseFormSetValue, FormState } from 'react-hook-form/dist/types/form';
import { FabButton } from '../base/fab-button';
import { FieldPathValue } from 'react-hook-form/dist/types/path';
import { AuthenticationProviderMapping } from '../../models/authentication-provider';
interface SamlDataMappingFormProps<TFieldValues> {
register: UseFormRegister<TFieldValues>,
setValue: UseFormSetValue<TFieldValues>,
currentFormValues: Array<AuthenticationProviderMapping>,
index: number,
formState: FormState<TFieldValues>
}
/**
* Partial form to set the data mapping for an SAML provider.
* The data mapping is the way to bind data from the SAML to the Fab-manager's database
*/
export const SamlDataMappingForm = <TFieldValues extends FieldValues>({ register, setValue, currentFormValues, index, formState }: SamlDataMappingFormProps<TFieldValues>) => {
const { t } = useTranslation('admin');
const standardConfiguration = {
'user.uid': { api_field: 'email' },
'user.email': { api_field: 'email' },
'user.username': { api_field: 'login' },
'profile.first_name': { api_field: 'firstName' },
'profile.last_name': { api_field: 'lastName' },
'profile.phone': { api_field: 'primaryPhone' },
'profile.address': { api_field: 'postalAddress' }
};
/**
* Set the data mapping according to the standard OpenID Connect specification
*/
const openIdStandardConfiguration = (): void => {
const model = currentFormValues[index]?.local_model;
const field = currentFormValues[index]?.local_field;
const configuration = standardConfiguration[`${model}.${field}`];
if (configuration) {
setValue(
`auth_provider_mappings_attributes.${index}.api_field` as Path<TFieldValues>,
configuration.api_field as UnpackNestedValue<FieldPathValue<TFieldValues, Path<TFieldValues>>>
);
if (configuration.transformation) {
Object.keys(configuration.transformation).forEach((key) => {
setValue(
`auth_provider_mappings_attributes.${index}.transformation.${key}` as Path<TFieldValues>,
configuration.transformation[key] as UnpackNestedValue<FieldPathValue<TFieldValues, Path<TFieldValues>>>
);
});
}
}
};
return (
<div className="saml-data-mapping-form">
<FormInput id={`auth_provider_mappings_attributes.${index}.api_endpoint`}
type="hidden"
register={register}
rules={{ required: true }}
formState={formState}
defaultValue="user_info" />
<FormInput id={`auth_provider_mappings_attributes.${index}.api_data_type`}
type="hidden"
register={register}
rules={{ required: true }}
formState={formState}
defaultValue="json" />
<FormInput id={`auth_provider_mappings_attributes.${index}.api_field`}
register={register}
rules={{ required: true }}
formState={formState}
placeholder="claim..."
tooltip={<HtmlTranslate trKey="app.admin.authentication.saml_data_mapping_form.api_field_help_html" />}
label={t('app.admin.authentication.saml_data_mapping_form.api_field')} />
<FabButton
icon={<i className="fa fa-magic" />}
className="auto-configure-button"
onClick={openIdStandardConfiguration}
tooltip={t('app.admin.authentication.saml_data_mapping_form.openid_standard_configuration')} />
</div>
);
};

View File

@ -0,0 +1,63 @@
import { FormInput } from '../form/form-input';
import { UseFormRegister, FormState } from 'react-hook-form';
import { FieldValues } from 'react-hook-form/dist/types/fields';
import { useTranslation } from 'react-i18next';
import { FabOutputCopy } from '../base/fab-output-copy';
import ValidationLib from '../../lib/validation';
interface SamlFormProps<TFieldValues> {
register: UseFormRegister<TFieldValues>,
formState: FormState<TFieldValues>,
strategyName?: string,
}
/**
* Partial form to fill the OAuth2 settings for a new/existing authentication provider.
*/
export const SamlForm = <TFieldValues extends FieldValues>({ register, strategyName, formState }: SamlFormProps<TFieldValues>) => {
const { t } = useTranslation('admin');
/**
* Build the callback URL, based on the strategy name.
*/
const buildCallbackUrl = (): string => {
return `${window.location.origin}/users/auth/${strategyName}/callback`;
};
return (
<div className="saml-form">
<hr/>
<FabOutputCopy text={buildCallbackUrl()} label={t('app.admin.authentication.saml_form.authorization_callback_url')} />
<FormInput id="providable_attributes.sp_entity_id"
register={register}
label={t('app.admin.authentication.saml_form.sp_entity_id')}
tooltip={t('app.admin.authentication.saml_form.sp_entity_id_help')}
rules={{ required: true }}
formState={formState} />
<FormInput id="providable_attributes.idp_sso_service_url"
register={register}
placeholder="https://sso.example.net..."
label={t('app.admin.authentication.saml_form.idp_sso_service_url')}
tooltip={t('app.admin.authentication.saml_form.idp_sso_service_url_help')}
rules={{ required: true, pattern: ValidationLib.urlRegex }}
formState={formState} />
<FormInput id="providable_attributes.idp_cert_fingerprint"
register={register}
placeholder="E7:91:B2:E1:..."
label={t('app.admin.authentication.saml_form.idp_cert_fingerprint')}
formState={formState} />
<FormInput id="providable_attributes.idp_cert"
register={register}
placeholder="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----"
label={t('app.admin.authentication.saml_form.idp_cert')}
formState={formState} />
<FormInput id="providable_attributes.profile_url"
register={register}
placeholder="https://exemple.net/user..."
label={t('app.admin.authentication.saml_form.profile_edition_url')}
tooltip={t('app.admin.authentication.saml_form.profile_edition_url_help')}
rules={{ required: true, pattern: ValidationLib.urlRegex }}
formState={formState} />
</div>
);
};

View File

@ -19,7 +19,8 @@
const METHODS = {
DatabaseProvider: 'local_database',
OAuth2Provider: 'o_auth2',
OpenIdConnectProvider: 'openid_connect'
OpenIdConnectProvider: 'openid_connect',
SamlProvider: 'saml'
};
/**

View File

@ -1,4 +1,4 @@
export type ProvidableType = 'DatabaseProvider' | 'OAuth2Provider' | 'OpenIdConnectProvider';
export type ProvidableType = 'DatabaseProvider' | 'OAuth2Provider' | 'OpenIdConnectProvider' | 'SamlProvider';
export interface AuthenticationProvider {
id?: number,
@ -7,7 +7,7 @@ export interface AuthenticationProvider {
providable_type: ProvidableType,
strategy_name: string
auth_provider_mappings_attributes: Array<AuthenticationProviderMapping>,
providable_attributes?: OAuth2Provider | OpenIdConnectProvider
providable_attributes?: OAuth2Provider | OpenIdConnectProvider | SamlProvider
}
export type mappingType = 'string' | 'text' | 'date' | 'integer' | 'boolean';
@ -65,6 +65,15 @@ export interface OpenIdConnectProvider {
extra_authorize_parameters?: string,
}
export interface SamlProvider {
id?: string,
sp_entity_id: string,
idp_sso_service_url: string
idp_cert_fingerprint: string,
idp_cert: string,
profile_url: string,
}
export interface MappingFields {
user: Array<[string, mappingType]>,
profile: Array<[string, mappingType]>

View File

@ -22,6 +22,7 @@
@import "modules/authentication-provider/array-mapping-form";
@import "modules/authentication-provider/data-mapping-form";
@import "modules/authentication-provider/openid-connect-data-mapping-form";
@import "modules/authentication-provider/saml-data-mapping-form";
@import "modules/authentication-provider/provider-form";
@import "modules/authentication-provider/type-mapping-modal";
@import "modules/base/edit-destroy-buttons";

View File

@ -0,0 +1,7 @@
.saml-data-mapping-form {
.auto-configure-button {
align-self: center;
margin-top: 0.8rem;
margin-left: 20px;
}
}

View File

@ -17,7 +17,7 @@ class AuthProvider < ApplicationRecord
end
end
PROVIDABLE_TYPES = %w[DatabaseProvider OAuth2Provider OpenIdConnectProvider].freeze
PROVIDABLE_TYPES = %w[DatabaseProvider OAuth2Provider OpenIdConnectProvider SamlProvider].freeze
belongs_to :providable, polymorphic: true, dependent: :destroy
accepts_nested_attributes_for :providable
@ -27,7 +27,7 @@ class AuthProvider < ApplicationRecord
validates :providable_type, inclusion: { in: PROVIDABLE_TYPES }
validates :name, presence: true, uniqueness: true
validates_with UserUidMappedValidator, if: -> { %w[OAuth2Provider OpenIdConnectProvider].include?(providable_type) }
validates_with UserUidMappedValidator, if: -> { %w[OAuth2Provider OpenIdConnectProvider SamlProvider].include?(providable_type) }
before_create :set_initial_state
after_update :write_reload_config

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
# SAML Provider is a special type of AuthProvider which provides authentication through an external SSO server using
# the SAML protocol.
class SamlProvider < ApplicationRecord
has_one :auth_provider, as: :providable, dependent: :destroy
validates :sp_entity_id, presence: true
validates :idp_sso_service_url, presence: true
end

View File

@ -78,7 +78,7 @@ class Slots::PlacesCacheService
# @param reservable_id [Number]
# @param user_ids [Array<Number>]
def remove_users(slot, reservable_type, reservable_id, user_ids)
return if slot.nil?
return if slot.nil? || user_ids.compact.empty?
ActiveRecord::Base.connection.execute <<-SQL.squish
with users as (

View File

@ -19,3 +19,9 @@ if @provider.providable_type == OpenIdConnectProvider.name
json.extra_authorize_params @provider.providable[:extra_authorize_params].to_json
end
end
if @provider.providable_type == SamlProvider.name
json.providable_attributes do
json.extract! @provider.providable, :id, :sp_entity_id, :idp_sso_service_url, :profile_url, :idp_cert_fingerprint, :idp_cert
end
end

View File

@ -20,3 +20,9 @@ if provider.providable_type == 'OpenIdConnectProvider'
:extra_authorize_params
end
end
if provider.providable_type == 'SamlProvider'
json.providable_attributes do
json.extract! provider.providable, :id, :sp_entity_id, :idp_sso_service_url, :profile_url, :idp_cert_fingerprint, :idp_cert
end
end

View File

@ -244,6 +244,15 @@ Devise.setup do |config|
active_provider.oidc_config.merge(
strategy_class: OmniAuth::Strategies::SsoOpenidConnectProvider
)
when 'SamlProvider'
require_relative '../../lib/omni_auth/saml'
config.omniauth active_provider.strategy_name.to_sym,
sp_entity_id: active_provider.providable.sp_entity_id,
idp_sso_service_url: active_provider.providable.idp_sso_service_url,
idp_cert: active_provider.providable.idp_cert,
idp_cert_fingerprint: active_provider.providable.idp_cert_fingerprint,
strategy_class: OmniAuth::Strategies::SsoSamlProvider
end
end

View File

@ -1230,6 +1230,7 @@ de:
local_database: "Lokale Datenbank"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Gruppe hinzufügen"
group_name: "Gruppenname"
@ -1496,6 +1497,10 @@ de:
api_field: "Userinfo claim"
api_field_help_html: 'Set the field providing the corresponding data through <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">the userinfo endpoint</a>.<br> <a href="https://jsonpath.com/" target="_blank">JsonPath</a> syntax is supported. If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name'
openid_standard_configuration: "Use the OpenID standard configuration"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Datenzuordnung"
TYPE_expected: "{TYPE} erwartet"
@ -1552,6 +1557,16 @@ de:
client__end_session_endpoint_help: "The url to call to log the user out at the authorization server."
extra_authorize_params: "Extra authorize parameters"
extra_authorize_params_help: "A hash of extra fixed parameters that will be merged to the authorization request"
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Name"
authentication_type: "Authentifizierungsart"
@ -1562,6 +1577,7 @@ de:
local_database: "Lokale Datenbank"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Neuen Authentifizierungsanbieter hinzufügen"

View File

@ -1230,6 +1230,7 @@ en:
local_database: "Local database"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Add a group"
group_name: "Group name"
@ -1496,6 +1497,10 @@ en:
api_field: "Userinfo claim"
api_field_help_html: 'Set the field providing the corresponding data through <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">the userinfo endpoint</a>.<br> <a href="https://jsonpath.com/" target="_blank">JsonPath</a> syntax is supported. If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name'
openid_standard_configuration: "Use the OpenID standard configuration"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Data mapping"
TYPE_expected: "{TYPE} expected"
@ -1552,6 +1557,16 @@ en:
client__end_session_endpoint_help: "The url to call to log the user out at the authorization server."
extra_authorize_params: "Extra authorize parameters"
extra_authorize_params_help: "A hash of extra fixed parameters that will be merged to the authorization request"
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Name"
authentication_type: "Authentication type"
@ -1562,6 +1577,7 @@ en:
local_database: "Local database"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Add a new authentication provider"

View File

@ -1230,6 +1230,7 @@ es-MX:
local_database: "Base de datos local"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Añadir un grupo"
group_name: "Nombre del grupo"
@ -1496,6 +1497,10 @@ es-MX:
api_field: "Reclamo de Userinfo"
api_field_help_html: 'Establece el campo que proporciona los datos correspondientes a través del <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">userinfo endpoint</a>.<br> Se admite la sintaxis <a href="https://jsonpath.com/" target="_blank">JsonPath</a>. Si se seleccionan muchos campos, se utilizará el primero.<br> <b>Ejemplo</b>: $.data[*].name'
openid_standard_configuration: "Usar la configuración estándar de OpenID"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Mapeo de datos"
TYPE_expected: "{TYPE} esperado"
@ -1552,6 +1557,16 @@ es-MX:
client__end_session_endpoint_help: "La URL a llamar para cerrar la sesión del usuario en el servidor de autorización."
extra_authorize_params: "Parámetros de autorización extra"
extra_authorize_params_help: "Un hash de parámetros extra que se fusionarán con la \"authorization request\""
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Nombre"
authentication_type: "Tipo de autenticación"
@ -1562,6 +1577,7 @@ es-MX:
local_database: "Base de datos local"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Agregar un nuevo proveedor de autenticación"

View File

@ -1230,6 +1230,7 @@ es:
local_database: "Base de datos local"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Añadir un grupo"
group_name: "Nombre del grupo"
@ -1496,6 +1497,10 @@ es:
api_field: "Reclamo de Userinfo"
api_field_help_html: 'Establece el campo que proporciona los datos correspondientes a través del <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">userinfo endpoint</a>.<br> Se admite la sintaxis <a href="https://jsonpath.com/" target="_blank">JsonPath</a>. Si se seleccionan muchos campos, se utilizará el primero.<br> <b>Ejemplo</b>: $.data[*].name'
openid_standard_configuration: "Usar la configuración estándar de OpenID"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Mapeo de datos"
TYPE_expected: "{TYPE} esperado"
@ -1552,6 +1557,16 @@ es:
client__end_session_endpoint_help: "La URL a llamar para cerrar la sesión del usuario en el servidor de autorización."
extra_authorize_params: "Parámetros de autorización extra"
extra_authorize_params_help: "Un hash de parámetros extra que se fusionarán con la \"authorization request\""
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Nombre"
authentication_type: "Tipo de autenticación"
@ -1562,6 +1577,7 @@ es:
local_database: "Base de datos local"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Agregar un nuevo proveedor de autenticación"

View File

@ -1230,6 +1230,7 @@ fr:
local_database: "Base de données locale"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Ajouter un groupe"
group_name: "Nom du groupe"
@ -1496,6 +1497,10 @@ fr:
api_field: "Demandes d'information utilisateur"
api_field_help_html: 'Définit le champ fournissant les données correspondantes via <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">le point d''accès aux informations utilisateur</a>.<br> <a href="https://jsonpath.com/" target="_blank">La syntaxe JsonPath</a> est prise en charge. Si plusieurs champs sont sélectionnés, le premier sera utilisé.<br> <b>Exemple</b>: $.data[*].name'
openid_standard_configuration: "Utiliser la configuration standard OpenID"
saml_data_mapping_form:
api_field: "Champ Userinfo"
api_field_help_html: "Définissez le champ qui fournit les données correspondantes via l'assertion SAML.<br> Si plusieurs champs sont sélectionnés, seul le premier sera utilisé.<br> <b>Exemple</b>: $.data[*].name"
openid_standard_configuration: "Utiliser la configuration standard SAML"
type_mapping_modal:
data_mapping: "Correspondance des données"
TYPE_expected: "{TYPE} attendu"
@ -1552,6 +1557,16 @@ fr:
client__end_session_endpoint_help: "L'url à appeler pour déconnecter l'utilisateur sur le serveur d'autorisation."
extra_authorize_params: "Paramètres d'autorisation supplémentaires"
extra_authorize_params_help: "Un hachage de paramètres supplémentaires fixes qui seront fusionnés à la demande d'autorisation"
saml_form:
authorization_callback_url: "URL de retour d'autorisation"
sp_entity_id: "ID de l'entité du fournisseur de service"
sp_entity_id_help: "Le nom de votre application. Certains fournisseurs d'identité pourraient avoir besoin de cela pour établir l'identité du fournisseur de services demandant la connexion."
idp_sso_service_url: "URL du service SSO du fournisseur d'identité"
idp_sso_service_url_help: "L'URL à laquelle la requête d'authentification doit être envoyée. Cela serait sur le fournisseur d'identité."
idp_cert_fingerprint: "Empreinte du certificat du fournisseur d'identité"
idp_cert: "Certificat de fournisseur d'identité"
profile_edition_url: "URL d'édition du profil"
profile_edition_url_help: "L'URL de la page où l'utilisateur peut modifier son profil."
provider_form:
name: "Nom"
authentication_type: "Type d'authentification"
@ -1562,6 +1577,7 @@ fr:
local_database: "Base de données locale"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Ajouter un fournisseur d'authentification"

View File

@ -1230,6 +1230,7 @@ it:
local_database: "Database locale"
o_auth2: "OAuth 2.0"
openid_connect: "OpenId Connect"
saml: "SAML"
group_form:
add_a_group: "Aggiungi un gruppo"
group_name: "Nome del gruppo"
@ -1496,6 +1497,10 @@ it:
api_field: "Reclamo userinfo"
api_field_help_html: 'Imposta il campo che fornisce i dati corrispondenti attraverso <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">l''endpoint userinfo</a>.<br> <a href="https://jsonpath.com/" target="_blank">La sintassi JsonPath</a> è supportata. Se sono selezionati molti campi, verrà utilizzato il primo.<br> <b>Esempio</b>: $.data[*].name'
openid_standard_configuration: "Usa la configurazione standard OpenID"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Mappatura dati"
TYPE_expected: "{TYPE} atteso"
@ -1552,6 +1557,16 @@ it:
client__end_session_endpoint_help: "L'url da chiamare per effettuare il log out dell'utente al server di autorizzazione."
extra_authorize_params: "Extra authorize parameters"
extra_authorize_params_help: "A hash of extra fixed parameters that will be merged to the authorization request"
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Nome"
authentication_type: "Tipo di autenticazione"
@ -1562,6 +1577,7 @@ it:
local_database: "Database locale"
oauth2: "OAuth 2.0"
openid_connect: "OpenId Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Aggiungi un nuovo provider di autenticazione"

View File

@ -1230,6 +1230,7 @@
local_database: "Lokal database"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Legg til en gruppe"
group_name: "Gruppenavn"
@ -1496,6 +1497,10 @@
api_field: "Userinfo claim"
api_field_help_html: 'Set the field providing the corresponding data through <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">the userinfo endpoint</a>.<br> <a href="https://jsonpath.com/" target="_blank">JsonPath</a> syntax is supported. If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name'
openid_standard_configuration: "Use the OpenID standard configuration"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Data mapping"
TYPE_expected: "{TYPE} expected"
@ -1552,6 +1557,16 @@
client__end_session_endpoint_help: "The url to call to log the user out at the authorization server."
extra_authorize_params: "Extra authorize parameters"
extra_authorize_params_help: "A hash of extra fixed parameters that will be merged to the authorization request"
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Name"
authentication_type: "Authentication type"
@ -1562,6 +1577,7 @@
local_database: "Local database"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Legg til en ny autentiseringsleverandør"

View File

@ -1230,6 +1230,7 @@ pt:
local_database: "Database local"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Adicionar grupo"
group_name: "Nome do grupo"
@ -1496,6 +1497,10 @@ pt:
api_field: "Userinfo"
api_field_help_html: 'Defina o campo fornecendo os dados correspondentes através de <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">o ponto de extremidade de userinfo</a>.<br> <a href="https://jsonpath.com/" target="_blank">JsonPath</a> sintaxe é suportada. Se muitos campos forem selecionados, o primeiro será usado.<br> <b>Exemplo</b>: $.data[*].name'
openid_standard_configuration: "Usar a configuração padrão OpenID"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Mapeamento de dados"
TYPE_expected: "{TYPE} esperado"
@ -1552,6 +1557,16 @@ pt:
client__end_session_endpoint_help: "O Url para efetuar uma chamada para desconectar o usuário no servidor de autorização."
extra_authorize_params: "Extra authorize parameters"
extra_authorize_params_help: "A hash of extra fixed parameters that will be merged to the authorization request"
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Nome"
authentication_type: "Tipo de autenticação"
@ -1562,6 +1577,7 @@ pt:
local_database: "Database local"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Adicionar novo provedor de autenticação"

View File

@ -2,523 +2,523 @@ sv:
app:
admin:
edit_destroy_buttons:
deleted: "Successfully deleted."
unable_to_delete: "Unable to delete: "
delete_item: "Delete the {TYPE}"
confirm_delete: "Delete"
delete_confirmation: "Are you sure you want to delete this {TYPE}?"
deleted: "Raderad."
unable_to_delete: "Kunde inte ta bort: "
delete_item: "Ta bort {TYPE}"
confirm_delete: "Ta bort"
delete_confirmation: "Är du säker på att du vill ta bort denna {TYPE}?"
machines:
the_fablab_s_machines: "The FabLab's machines"
all_machines: "All machines"
add_a_machine: "Add a new machine"
manage_machines_categories: "Manage machines categories"
machines_settings: "Settings"
the_fablab_s_machines: "FabLabs utrustning"
all_machines: "All utrustning"
add_a_machine: "Lägg till utrustning"
manage_machines_categories: "Hantera utrustningskategorier"
machines_settings: "Inställningar"
machines_settings:
title: "Settings"
generic_text_block: "Editorial text block"
generic_text_block_info: "Displays an editorial block above the list of machines visible to members."
generic_text_block_switch: "Display editorial block"
cta_switch: "Display a button"
cta_label: "Button label"
title: "Inställningar"
generic_text_block: "Textblock"
generic_text_block_info: "Visar ett textblock ovanför listan över utrustning som är synlig för medlemmar."
generic_text_block_switch: "Visa textblock"
cta_switch: "Visa en knapp"
cta_label: "Knappetikett"
cta_url: "url"
save: "Save"
successfully_saved: "Your banner was successfully saved."
save: "Spara"
successfully_saved: "Din banderoll har sparats."
machine_categories_list:
machine_categories: "Machines categories"
add_a_machine_category: "Add a machine category"
name: "Name"
machines_number: "Number of machines"
machine_category: "Machine category"
machine_categories: "Utrustningskategorier"
add_a_machine_category: "Lägg till en utrustningskategori"
name: "Namn"
machines_number: "Antal av utrustning"
machine_category: "Utrustningskategorier"
machine_category_modal:
new_machine_category: "New category"
edit_machine_category: "Edit category"
successfully_created: "The new machine category has been successfully created."
unable_to_create: "Unable to delete the machine category: "
successfully_updated: "The machine category has been successfully updated."
unable_to_update: "Unable to modify the machine category: "
new_machine_category: "Ny kategori"
edit_machine_category: "Redigera kategori"
successfully_created: "Den nya utrustningskategorin har skapats."
unable_to_create: "Det går inte att radera utrustningskategorin: "
successfully_updated: "Utrustningskategorin har uppdaterats."
unable_to_update: "Det går inte att ändra utrustningskategorin: "
machine_category_form:
name: "Name of category"
assigning_machines: "Assign machines to this category"
save: "Save"
name: "Kategorinamn"
assigning_machines: "Koppla utrustning till denna kategori"
save: "Spara"
machine_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} machine"
watch_out_when_creating_a_new_machine_its_prices_are_initialized_at_0_for_all_subscriptions: "Watch out! When creating a new machine, its prices are initialized at 0 for all subscriptions."
consider_changing_them_before_creating_any_reservation_slot: "Consider changing them before creating any reservation slot."
description: "Description"
name: "Name"
illustration: "Visual"
illustration_recommendation: "Maximum display size: 932 * 700 px (unconstrained ratio). The image may be cropped in list view. Only the description page displays the full image."
technical_specifications: "Technical specifications"
category: "Category"
attachments: "Attachments"
attached_files_pdf: "Attached files (pdf)"
add_an_attachment: "Add an attachment"
settings: "Settings"
disable_machine: "Disable machine"
disabled_help: "When disabled, the machine won't be reservable and won't appear by default in the machines list."
reservable: "Can this machine be reserved?"
reservable_help: "When disabled, the machine will be shown in the default list of machines, but without the reservation button. If you already have created some availability slots for this machine, you may want to remove them: do it from the admin agenda."
save: "Save"
create_success: "The machine was created successfully"
update_success: "The machine was updated successfully"
ACTION_title: "{ACTION, select, create{Ny} other{uppdatera}} utrustningen"
watch_out_when_creating_a_new_machine_its_prices_are_initialized_at_0_for_all_subscriptions: "Observera! När du skapar ny utrustning sätts dess pris till 0 i samtliga prenumerationer."
consider_changing_them_before_creating_any_reservation_slot: "Överväg att ändra dem innan en plats skapas."
description: "Beskrivning"
name: "Namn"
illustration: "Visuell"
illustration_recommendation: "Maximal storlek: 932 * 700 px (obegränsat förhållande). Bilden kan beskäras i listvyn. Endast beskrivningssidan visar hela bilden."
technical_specifications: "Tekniska specifikationer"
category: "Kategori"
attachments: "Bilagor"
attached_files_pdf: "Bifogade filer (pdf)"
add_an_attachment: "Lägg till bilaga"
settings: "Inställningar"
disable_machine: "Inaktivera utrustning"
disabled_help: "När den är inaktiverad kommer utrustningen inte att vara bokningsbar och kommer inte att visas som standard i utrustningslistan."
reservable: "Kan denna utrustning reserveras?"
reservable_help: "När den är inaktiverad, kommer utrustningen att visas i standardlistan över utrustning, men utan bokningsknappen. Om du redan har skapat vissa lediga platser för denna utrustning, kanske du vill ta bort dem: gör det från admingränssnittet."
save: "Spara"
create_success: "Utrustningen skapades framgångsrikt"
update_success: "Utrustningen uppdaterades framgångsrikt"
training_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} training"
beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero: "Beware, when creating a training, its reservation prices are initialized at zero."
dont_forget_to_change_them_before_creating_slots_for_this_training: "Don't forget to change them before creating slots for this training."
description: "Description"
name: "Name"
illustration: "Visual"
illustration_recommendation: "Maximum display size: 932 * 700 px (unconstrained ratio). The image may be cropped in list view. Only the description page displays the full image."
add_a_new_training: "Add a new training"
validate_your_training: "Validate your training"
settings: "Settings"
associated_machines: "Associated machines"
associated_machines_help: "If you associate a machine to this training, the members will need to successfully pass this training before being able to reserve the machine."
default_seats: "Default number of seats"
public_page: "Show in training lists"
public_help: "When unchecked, this option will prevent the training from appearing in the trainings list."
disable_training: "Disable the training"
disabled_help: "When disabled, the training won't be reservable and won't appear by default in the trainings list."
automatic_cancellation: "Automatic cancellation"
automatic_cancellation_info: "If you edit specific conditions here, the general cancellation conditions will no longer be taken into account. You will be notified if a session is cancelled. Credit notes and refunds will be automatic if the wallet is enabled. Otherwise you will have to do it manually."
automatic_cancellation_switch: "Activate automatic cancellation for this training"
automatic_cancellation_threshold: "Minimum number of registrations to maintain a session"
automatic_cancellation_deadline: "Deadline, in hours, before automatic cancellation"
authorization_validity: "Authorisations validity period"
authorization_validity_info: "You can define a specific validity period in months for this training. The general conditions will no longer be taken into account."
authorization_validity_switch: "Activate an authorization validity period"
authorization_validity_period: "Validity period in months"
validation_rule: "Authorisations cancellation rule"
validation_rule_info: "Define a rule that cancel an authorisation if the machines associated with the training are not reserved for a specific period of time. This rule prevails over the authorisations validity period."
validation_rule_switch: "Activate the validation rule"
validation_rule_period: "Time limit in months"
save: "Save"
create_success: "The training was created successfully"
update_success: "The training was updated successfully"
ACTION_title: "{ACTION, select, create{Ny} other{uppdatera}} utbildningen"
beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero: "Varning, när du skapar en utbildning, sätts dess bokningspriser till noll."
dont_forget_to_change_them_before_creating_slots_for_this_training: "Glöm inte att ändra dem innan du skapar platser för denna utbildning."
description: "Beskrivning"
name: "Namn"
illustration: "Visuell"
illustration_recommendation: "Maximal storlek: 932 * 700 px (obegränsat förhållande). Bilden kan beskäras i listvyn. Endast beskrivningssidan visar hela bilden."
add_a_new_training: "Lägg till en ny utbildning"
validate_your_training: "Validera din utbildning"
settings: "Inställningar"
associated_machines: "Kopplad utrustning"
associated_machines_help: "Om du associerar utrustning till denna utbildning, kommer medlemmarna att behöva klara denna utbildning innan de kan reservera utrustningen."
default_seats: "Förvalt antal platser"
public_page: "Visa i utbildningslistor"
public_help: "När detta alternativ är avmarkerat kommer det att förhindra att utbildningen visas i utbildningslistan."
disable_training: "Inaktivera utbildningen"
disabled_help: "När den är inaktiverad kommer utbildningen inte att vara bokningsbar och kommer inte att visas som standard i utbildningslistan."
automatic_cancellation: "Automatisk avbokning"
automatic_cancellation_info: "Om du redigerar specifika villkor här kommer de allmänna avbokningsvillkoren inte längre att beaktas. Du kommer att meddelas om en session avbryts. Kreditnotor och återbetalningar kommer att skapas automatiskt om plånboken är aktiverad. Annars måste du göra det manuellt."
automatic_cancellation_switch: "Aktivera automatisk avbokning för denna utbildning"
automatic_cancellation_threshold: "Minsta antal bokningar för att upprätthålla ett tillfälle"
automatic_cancellation_deadline: "Deadline, i timmar, före automatisk annullering"
authorization_validity: "Giltighetstid för tillstånd"
authorization_validity_info: "Du kan definiera en specifik giltighetstid i månader för denna utbildning. De allmänna villkoren kommer inte längre att beaktas."
authorization_validity_switch: "Aktivera en giltighetsperiod för auktorisering"
authorization_validity_period: "Giltighetstid i månader"
validation_rule: "Auktorisering annuleras enligt"
validation_rule_info: "Definiera en regel som upphäver ett tillstånd om utrustningen i samband med utbildningen inte är reserverad för en viss tidsperiod. Denna regel råder över giltighetstiden för tillstånd."
validation_rule_switch: "Aktivera valideringsregeln"
validation_rule_period: "Tidsgräns i månader"
save: "Spara"
create_success: "Utbildningen har skapats"
update_success: "Utbildningen har uppdaterats"
space_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} space"
watch_out_when_creating_a_new_space_its_prices_are_initialized_at_0_for_all_subscriptions: "Watch out! When creating a new space, its prices are initialized at 0 for all subscriptions."
consider_changing_its_prices_before_creating_any_reservation_slot: "Consider changing its prices before creating any reservation slot."
name: "Name"
illustration: "Visual"
illustration_recommendation: "Maximum display size: 932 * 700 px (unconstrained ratio). The image may be cropped in list view. Only the description page displays the full image."
description: "Description"
characteristics: "Characteristics"
attachments: "Attachments"
attached_files_pdf: "Attached files (pdf)"
add_an_attachment: "Add an attachment"
settings: "Settings"
default_seats: "Default number of seats"
disable_space: "Disable the space"
disabled_help: "When disabled, the space won't be reservable and won't appear by default in the spaces list."
save: "Save"
create_success: "The space was created successfully"
update_success: "The space was updated successfully"
associated_machines: "Included machines"
children_spaces: "Included spaces"
associated_objects: "Associated objects"
associated_objects_warning: "Only use these fields if you want interblocking reservation between spaces, child spaces and machines. If you want machine and space reservations to remain independent, please leave the following fields blank."
ACTION_title: "{ACTION, select, create{Ny} other{Uppdatera }} lokal"
watch_out_when_creating_a_new_space_its_prices_are_initialized_at_0_for_all_subscriptions: "Observera! När du skapar ny lokal sätts dess pris till 0 i samtliga prenumerationer."
consider_changing_its_prices_before_creating_any_reservation_slot: "Överväg att ändra priset innan du skapar en reservationsplats."
name: "Namn"
illustration: "Visuell"
illustration_recommendation: "Maximal storlek: 932 * 700 px (obegränsat förhållande). Bilden kan beskäras i listvyn. Endast beskrivningssidan visar hela bilden."
description: "Beskrivning"
characteristics: "Egenskaper"
attachments: "Bilagor"
attached_files_pdf: "Bifogade filer (pdf)"
add_an_attachment: "Lägg till bilaga"
settings: "Inställningar"
default_seats: "Förvalt antal platser"
disable_space: "Inaktivera lokalen"
disabled_help: "När den är inaktiverad kommer lokalen inte att vara bokningsbar och kommer inte att visas som standard i listan med lokaler."
save: "Spara"
create_success: "Lokalen skapades framgångsrikt"
update_success: "Lokalen uppdaterades"
associated_machines: "Inkluderad utrustning"
children_spaces: "Inkluderade lokaler"
associated_objects: "Kopplade objekt"
associated_objects_warning: "Använd endast dessa fält om du vill ha blockerande bokningar mellan lokaler, biytor och utrustning. Om du vill att bokningar av utrustning och lokaler ska vara oberoende av varandra, lämna följande fält tomt."
event_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} event"
title: "Title"
illustration: "Visual"
illustration_recommendation: "Maximum display size: 932 * 700 px (unconstrained ratio). The image may be cropped in list view. Only the description page displays the full image."
description: "Description"
attachments: "Attachments"
attached_files_pdf: "Attached files (pdf)"
add_a_new_file: "Add a new file"
event_category: "Event category"
dates_and_opening_hours: "Dates and opening hours"
all_day: "All day"
all_day_help: "Will the event last all day or do you want to set times?"
start_date: "Start date"
end_date: "End date"
start_time: "Start time"
end_time: "End time"
recurrence: "Recurrence"
_and_ends_on: "and ends on"
prices_and_availabilities: "Prices and availabilities"
standard_rate: "Standard rate"
0_equal_free: "0 = free"
fare_class: "Fare class"
price: "Price"
seats_available: "Seats available"
seats_help: "If you leave this field empty, this event will be available without reservations."
event_themes: "Event themes"
age_range: "Age range"
add_price: "Add a price"
save: "Save"
create_success: "The event was created successfully"
events_updated: "{COUNT, plural, =1{One event was} other{{COUNT} Events were}} successfully updated"
events_not_updated: "{TOTAL, plural, =1{The event was} other{On {TOTAL} events {COUNT, plural, =1{one was} other{{COUNT} were}}}} not updated."
error_deleting_reserved_price: "Unable to remove the requested price because it is associated with some existing reservations"
other_error: "An unexpected error occurred while updating the event"
ACTION_title: "{ACTION, select, create{Nytt} other{Uppdatera}} evenemanget"
title: "Rubrik"
illustration: "Visuell"
illustration_recommendation: "Maximal storlek: 932 * 700 px (obegränsat förhållande). Bilden kan beskäras i listvyn. Endast beskrivningssidan visar hela bilden."
description: "Beskrivning"
attachments: "Bilagor"
attached_files_pdf: "Bifogade filer (pdf)"
add_a_new_file: "Lägg till ny fil"
event_category: "Kategori för evenemang"
dates_and_opening_hours: "Datum och öppettider"
all_day: "Hela dagen"
all_day_help: "Kommer evenemanget att pågå hela dagen eller vill du ställa in tider?"
start_date: "Startdatum"
end_date: "Slutdatum"
start_time: "Starttid"
end_time: "Sluttid"
recurrence: "Återkommande"
_and_ends_on: "och slutar på"
prices_and_availabilities: "Priser och tillgängligheter"
standard_rate: "Standardavgift"
0_equal_free: "0 = kostnadsfritt"
fare_class: "Biljettklass"
price: "Pris"
seats_available: "Tillgängliga platser"
seats_help: "Om du lämnar detta fält tomt, kommer detta evenemang att vara tillgängligt utan bokning."
event_themes: "Evenemangsteman"
age_range: "Åldersspann"
add_price: "Lägg till ett pris"
save: "Spara"
create_success: "Evenemanget skapades"
events_updated: "{COUNT, plural, one {}=1{Ett evenemang} other{{COUNT} Evenemang}} uppdaterades"
events_not_updated: "{TOTAL, plural, =1{Evenemanget } other{On {TOTAL} evenemang {COUNT, plural, =1{ett} other{{COUNT} }}}} uppdaterades inte."
error_deleting_reserved_price: "Det går inte att ta bort det begärda priset eftersom det är associerat med vissa befintliga bokningar"
other_error: "Ett oväntat fel inträffade när evenemanget uppdaterades"
recurring:
none: "None"
every_days: "Every days"
every_week: "Every week"
every_month: "Every month"
every_year: "Every year"
event_type: "Event type"
none: "Inget"
every_days: "Varje dag"
every_week: "Varje vecka"
every_month: "Varje månad"
every_year: "Varje år"
event_type: "Typ av evenemang"
event_types:
standard: "Event standard"
nominative: "Event nominative"
family: "Event reserved for members"
pre_registration: "Pre-registration"
pre_registration_help: "If this option is checked, administrators and managers must validate registrations before they become final."
pre_registration_end_date: "Deadline for pre-registration"
standard: "Evenemangsstandard"
nominative: "Evenemangbeskrivning"
family: "Evenemang reserverat för medlemmar"
pre_registration: "Föranmälan"
pre_registration_help: "Om detta alternativ markeras måste administratörer och chefer validera bokningar innan de blir slutgiltiga."
pre_registration_end_date: "Deadline för förbokning"
plan_form:
ACTION_title: "{ACTION, select, create{New} other{Update the}} plan"
tab_settings: "Settings"
tab_usage_limits: "Usage limits"
description: "Description"
general_settings: "General settings"
general_settings_info: "Determine to which group this subscription is dedicated. Also set its price and duration in periods."
activation_and_payment: "Subscription activation and payment"
name: "Name"
name_max_length: "Name length must be less than 24 characters."
group: "Group"
ACTION_title: "{ACTION, select, create{Ny} other{Uppdatera}} plan"
tab_settings: "Inställningar"
tab_usage_limits: "Användningsbegränsning"
description: "Beskrivning"
general_settings: "Allmänna inställningar"
general_settings_info: "Bestäm vilken grupp denna prenumeration är tillägnad. Ange också sitt pris och varaktighet i perioder."
activation_and_payment: "Aktivering och betalning av prenumeration"
name: "Namn"
name_max_length: "Namnlängd måste vara mindre än 24 tecken."
group: "Grupp"
transversal: "Transversal plan"
transversal_help: "If this option is checked, a copy of this plan will be created for each currently enabled groups."
display: "Display"
category: "Category"
category_help: "Categories allow you to group the subscription plans, on the public view of the subscriptions."
number_of_periods: "Number of periods"
transversal_help: "Om detta alternativ är markerat kommer en kopia av denna plan att skapas för varje nuvarande aktiverade grupper."
display: "Visa"
category: "Kategori"
category_help: "Kategorier tillåter dig att gruppera prenumerationsplanerna på den publika prenumerationsvyn."
number_of_periods: "Antal perioder"
period: "Period"
year: "Year"
month: "Month"
week: "Week"
subscription_price: "Subscription price"
edit_amount_info: "Please note that if you change the price of this plan, the new price will only apply to new subscribers. Current subscriptions will stay unchanged, even those with a running payment schedule."
visual_prominence: "Visual prominence of the subscription"
visual_prominence_help: "On the subscriptions page, the most prominent subscriptions will be placed at the top of the list. An elevated number means a higher prominence."
rolling_subscription: "Rolling subscription?"
rolling_subscription_help: "A rolling subscription will begin the day of the first trainings. Otherwise, it will begin as soon as it is bought."
monthly_payment: "Monthly payment?"
monthly_payment_help: "If monthly payment is enabled, the members will be able to choose between a one-time payment or a payment schedule staged each months."
information_sheet: "Information sheet"
notified_partner: "Notified partner"
new_user: "New user"
alert_partner_notification: "As part of a partner subscription, some notifications may be sent to this user."
disabled: "Disable subscription"
disabled_help: "Beware: disabling this plan won't unsubscribe users having active subscriptions with it."
duration: "Duration"
partnership: "Partnership"
partner_plan: "Partner plan"
partner_plan_help: "You can sell subscriptions in partnership with another organization. By doing so, the other organization will be notified when a member subscribes to this subscription plan."
partner_created: "The partner was successfully created"
slots_visibility: "Slots visibility"
slots_visibility_help: "You can determine how far in advance subscribers can view and reserve machine slots. When this setting is set, it takes precedence over the general settings."
machines_visibility: "Visibility time limit, in hours (machines)"
visibility_minimum: "Visibility cannot be less than 7 hours"
save: "Save"
create_success: "Plan(s) successfully created. Don't forget to redefine prices."
update_success: "The plan was updated successfully"
year: "År"
month: "Månad"
week: "Vecka"
subscription_price: "Prenumerationspris"
edit_amount_info: "Observera att om du ändrar priset på denna plan, kommer det nya priset endast gälla för nya prenumeranter. Aktuella prenumerationer kommer att förbli oförändrade, även de med ett löpande betalningsschema."
visual_prominence: "Visualisering av prenumerationen"
visual_prominence_help: "På prenumerationssidan kommer de mest framträdande abonnemangen att placeras högst upp på listan. Ett högt nummer betyder en högre placering."
rolling_subscription: "Rullande prenumeration?"
rolling_subscription_help: "En rullande prenumeration kommer att börja på dagen för de första utbildningarna, annars kommer den att börja så snart den köps."
monthly_payment: "Månadsbetalning?"
monthly_payment_help: "Om månatlig betalning är aktiverad, kommer medlemmarna att kunna välja mellan en engångsbetalning eller ett betalningsschema iscensatt varje månad."
information_sheet: "Informationsblad"
notified_partner: "Meddelad samarbetspartner"
new_user: "Ny användare"
alert_partner_notification: "Som en del av en partnerprenumeration, kan vissa meddelanden skickas till den här användaren."
disabled: "Inaktivera prenumeration"
disabled_help: "Obs: inaktivering av denna plan kommer inte att avregistrera användare som har aktiva prenumerationer med den."
duration: "Varaktighet"
partnership: "Samarbete"
partner_plan: "Partnerprenumeration"
partner_plan_help: "Du kan sälja abonnemang i samarbete med en annan organisation. Genom att göra det kommer den andra organisationen att meddelas när en medlem prenumererar på denna prenumerationsplan."
partner_created: "Samarbetspartnern har skapats"
slots_visibility: "Platsers synlighet"
slots_visibility_help: "Du kan avgöra hur långt i förväg prenumeranter kan visa och reservera platser. När den här inställningen är inställd, har den företräde framför de allmänna inställningarna."
machines_visibility: "Tidsgräns för synlighet, i timmar (utrustning)"
visibility_minimum: "Synligheten kan inte vara mindre än 7 timmar"
save: "Spara"
create_success: "Plan(er) har skapats. Glöm inte att omdefiniera priser."
update_success: "Planen har uppdaterats"
plan_limit_form:
usage_limitation: "Limitation of use"
usage_limitation_info: "Define a maximum number of reservation hours per day and per machine category. Machine categories that have no parameters configured will not be subject to any limitation."
usage_limitation_switch: "Restrict machine reservations to a number of hours per day."
new_usage_limitation: "Add a limitation of use"
all_limitations: "All limitations"
by_category: "By machines category"
by_machine: "By machine"
category: "Machines category"
machine: "Machine name"
max_hours_per_day: "Max. hours/day"
ongoing_limitations: "Ongoing limitations"
saved_limitations: "Saved limitations"
cancel: "Cancel this limitation"
cancel_deletion: "Cancel"
ongoing_deletion: "Ongoing deletion"
usage_limitation: "Begränsningar och tillåten användning"
usage_limitation_info: "Definiera ett maximalt antal bokningstider per dag och per utrustningskategori. Utrustningskategorier som inte har några konfigurerade parametrar kommer inte att omfattas av någon begränsning."
usage_limitation_switch: "Begränsa utrustningsbokningar till ett antal timmar per dag."
new_usage_limitation: "Lägg till en begränsning av användningen"
all_limitations: "Alla begränsningar"
by_category: "Enligt utrustningskategori"
by_machine: "Efter utrustning"
category: "Utrustningskategori"
machine: "Utrustningens namn"
max_hours_per_day: "Max. timmar/dag"
ongoing_limitations: "Pågående begränsningar"
saved_limitations: "Sparade begränsningar"
cancel: "Avbryt denna begränsning"
cancel_deletion: "Avbryt"
ongoing_deletion: "Pågående radering"
plan_limit_modal:
title: "Manage limitation of use"
limit_reservations: "Limit reservations"
by_category: "By machines category"
by_machine: "By machine"
category: "Machines category"
machine: "Machine name"
categories_info: "If you select all machine categories, the limits will apply across the board."
machine_info: "Please note that if you have already created a limitation for the machines category including the selected machine, it will be permanently overwritten."
max_hours_per_day: "Maximum number of reservation hours per day"
confirm: "Confirm"
title: "Hantera begränsning av användning"
limit_reservations: "Begränsa bokningar"
by_category: "Enligt utrustningskategori"
by_machine: "Efter maskin"
category: "Utrustningskategori"
machine: "Utrustningens namn"
categories_info: "Om du väljer alla utrustningskategorier, kommer gränserna att gälla över hela linjen."
machine_info: "Observera att om du redan har skapat en begränsning för kategorin utrustning inklusive den valda utrustningen, kommer den att skrivas över permanent."
max_hours_per_day: "Maximalt antal bokningstimmar per dag"
confirm: "Bekräfta"
partner_modal:
title: "Create a new partner"
create_partner: "Create the partner"
first_name: "First name"
surname: "Last name"
email: "Email address"
field_is_required: "This field is required"
title: "Skapa en ny samarbetspartner"
create_partner: "Skapa samarbetspartner"
first_name: "Förnamn"
surname: "Efternamn"
email: "E-postadress"
field_is_required: "Detta fält är obligatoriskt"
plan_pricing_form:
prices: "Prices"
about_prices: "The prices defined here will apply to members subscribing to this plan, for machines and spaces. All prices are per hour."
copy_prices_from: "Copy prices from"
copy_prices_from_help: "This will replace all the prices of this plan with the prices of the selected plan"
machines: "Machines"
spaces: "Spaces"
prices: "Priser"
about_prices: "De priser som anges här gäller för medlemmar som prenumererar på denna plan, för utrustning och lokaler. Alla priser är per timme."
copy_prices_from: "Kopiera priser från"
copy_prices_from_help: "Detta kommer att ersätta alla priser i denna plan med priserna på den valda planen"
machines: "Utrustning"
spaces: "Lokaler"
update_recurrent_modal:
title: "Periodic event update"
edit_recurring_event: "You're about to update a periodic event. What do you want to update?"
edit_this_event: "Only this event"
edit_this_and_next: "This event and the followings"
edit_all: "All events"
date_wont_change: "Warning: you have changed the event date. This modification won't be propagated to other occurrences of the periodic event."
confirm: "Update the {MODE, select, single{event} other{events}}"
title: "Periodisk evenemangsuppdatering"
edit_recurring_event: "Du håller på att uppdatera ett återkommande evenemang. Vad vill du uppdatera?"
edit_this_event: "Bara detta evenemang"
edit_this_and_next: "Detta evenemang samt framtida"
edit_all: "Alla evenemang"
date_wont_change: "Varning: du har ändrat evenemangsdatumet. Denna ändring kommer inte att spridas till andra tillfällen av det återkommande evenemanget."
confirm: "Uppdatera {MODE, select, single{evenemanget} other{evenemangen}}"
advanced_accounting_form:
title: "Advanced accounting parameters"
code: "Accounting code"
analytical_section: "Analytical section"
title: "Avancerade redovisningsparametrar"
code: "Redovisningskoder"
analytical_section: "Analyssektion"
accounting_codes_settings:
code: "Accounting code"
label: "Account label"
journal_code: "Journal code"
sales_journal: "Sales journal"
financial: "Financial"
card: "Card payments"
wallet_debit: "Virtual wallet payments"
other: "Other payment means"
wallet_credit: "Virtual wallet credit"
VAT: "VAT"
sales: "Sales"
subscriptions: "Subscriptions"
machine: "Machine reservation"
training: "Training reservation"
event: "Event reservation"
space: "Space reservation"
prepaid_pack: "Pack of prepaid-hours"
product: "Product of the store"
error: "Erroneous invoices"
error_help: "As part of a maintenance operation, it may exceptionally happen that invoices, that have been generated by mistake due to a bug in the software, are discovered. As these invoices cannot be deleted, they will be exported to the account defined here. Please manually cancel these invoices."
advanced_accounting: "Advanced accounting"
enable_advanced: "Enable the advanced accounting"
enable_advanced_help: "This will enable the ability to have custom accounting codes per resources (machines, spaces, training ...). These codes can be modified on each resource edition form."
save: "Save"
update_success: "The accounting settings were successfully updated"
code: "Redovisningskoder"
label: "Kontonamn"
journal_code: "Journalkod"
sales_journal: "Försäljningjournalkod"
financial: "Finansiell"
card: "Kortbetalningar"
wallet_debit: "Virtuella plånboksbetalningar"
other: "Andra betalningsmetoder"
wallet_credit: "Virtuell plånbokskredit"
VAT: "Moms"
sales: "Försäljning"
subscriptions: "Prenumerationer"
machine: "Utrustningsbokning"
training: "Bokning av utbildning"
event: "Evenmangsbokning"
space: "Lokalbokning"
prepaid_pack: "Paket med förbetalda timmar"
product: "Produkt i butiken"
error: "Felaktiga fakturor"
error_help: "Till följd av underhåll, kan det ibland hända att fakturor, som har genererats av misstag på grund av en bugg i programvaran, upptäcks. Eftersom dessa fakturor inte kan tas bort, kommer de att exporteras till det konto som definieras här. Vänligen avbryt dessa fakturor manuellt."
advanced_accounting: "Avancerad redovisning"
enable_advanced: "Aktivera avancerad redovisning"
enable_advanced_help: "Detta kommer att göra det möjligt att ha anpassade bokföringskoder per resurs (utrustning, lokaler, utbildning) . Dessa koder kan ändras på varje form av resursutgåva."
save: "Spara"
update_success: "Redovisningsinställningarna har uppdaterats"
#add a new machine
machines_new:
declare_a_new_machine: "Declare a new machine"
declare_a_new_machine: "Definiera ny utrustning"
#machine edition
machines_edit:
machine_edit: "Edit a machine"
machine_edit: "Redigera utrustning"
#manage the trainings & machines slots
calendar:
calendar_management: "Calendar management"
trainings: "Trainings"
machines: "Machines"
spaces: "Spaces"
events: "Events"
availabilities: "Availabilities"
availabilities_notice: "Export to an Excel workbook every slots available for reservation, and their occupancy rate."
select_a_slot: "Please select a slot"
calendar_management: "Kalenderhantering"
trainings: "Utbildningar"
machines: "Utrustning"
spaces: "Lokaler"
events: "Evenemang"
availabilities: "Tillgänglighet"
availabilities_notice: "Exportera tillgängliga platser till Excel."
select_a_slot: "Välj en plats"
info: "Info"
tags: "Tags"
slot_duration: "Slot duration: {DURATION} minutes"
ongoing_reservations: "Ongoing reservations"
without_reservation: "Without reservation"
confirmation_required: "Confirmation required"
do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Do you really want to cancel {USER}'s reservation, the {DATE} at {TIME}, concerning {RESERVATION}?"
reservation_was_successfully_cancelled: "Reservation was successfully cancelled."
reservation_cancellation_failed: "Reservation cancellation failed."
unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Unable to remove the last machine of the slot. Delete the slot rather."
do_you_really_want_to_remove_MACHINE_from_this_slot: "Do you really want to remove \"{MACHINE}\" from this slot?"
this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing: "This will prevent any new reservation on this slot but won't cancel those existing."
beware_this_cannot_be_reverted: "Beware: this cannot be reverted."
the_machine_was_successfully_removed_from_the_slot: "The machine was successfully removed from the slot."
deletion_failed: "Deletion failed."
do_you_really_want_to_remove_PLAN_from_this_slot: "Do you really want to remove \"{PLAN}\" from this slot?"
the_plan_was_successfully_removed_from_the_slot: "The plan was successfully removed from the slot."
DATE_slot: "{DATE} slot:"
what_kind_of_slot_do_you_want_to_create: "What kind of slot do you want to create?"
training: "Training"
machine: "Machine"
space: "Space"
next: "Next >"
previous: "< Previous"
select_some_machines: "Select some machines"
select_all: "All"
select_none: "None"
manage_machines: "Click here to add or remove machines."
manage_spaces: "Click here to add or remove spaces."
manage_trainings: "Click here to add or remove trainings."
number_of_tickets: "Number of tickets: "
adjust_the_opening_hours: "Adjust the opening hours"
to_time: "to" #e.g. from 18:00 to 21:00
restrict_options: "Restriction options"
restrict_with_labels: "Restrict this slot with labels"
restrict_for_subscriptions: "Restrict this slot for subscription users"
select_some_plans: "Select some plans"
plans: "Plan(s):"
recurrence: "Recurrence"
enabled: "Enabled"
tags: "Taggar"
slot_duration: "Platsens längd: {DURATION} minuter"
ongoing_reservations: "Pågående bokningar"
without_reservation: "Utan bokning"
confirmation_required: "Bekräftelse krävs"
do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Vill du verkligen avbryta {USER}s bokning, den {DATE} kl{TIME}, angående {RESERVATION}?"
reservation_was_successfully_cancelled: "Bokningen har avbrutits."
reservation_cancellation_failed: "Bokningen kunde inte avbrytas."
unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Det går inte att ta bort den sista utrustningen på plats. Ta bort platsen snarare."
do_you_really_want_to_remove_MACHINE_from_this_slot: "Vill du verkligen ta bort \"{MACHINE}\" från denna plats?"
this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing: "Detta kommer att förhindra alla nya bokningar på denna plats men kommer inte att avbryta de befintliga."
beware_this_cannot_be_reverted: "OBS! Detta går inte att ångra."
the_machine_was_successfully_removed_from_the_slot: "Utrustningen togs bort från platsen."
deletion_failed: "Radering misslyckades."
do_you_really_want_to_remove_PLAN_from_this_slot: "Vill du verkligen ta bort \"{PLAN}\" från denna plats?"
the_plan_was_successfully_removed_from_the_slot: "Utrustningen togs bort från platsen."
DATE_slot: "{DATE} plats:"
what_kind_of_slot_do_you_want_to_create: "Vilken typ av plats vill du skapa?"
training: "Utbildning"
machine: "Utrustning"
space: "Lokal"
next: "Nästa >"
previous: "< Föregående"
select_some_machines: "Välj utrustning"
select_all: "Alla"
select_none: "Inget"
manage_machines: "Klicka här för att lägga till eller ta bort utrustning."
manage_spaces: "Klicka här för att lägga till eller ta bort lokaler."
manage_trainings: "Klicka här för att lägga till eller ta bort utbildningar."
number_of_tickets: "Antal biljetter: "
adjust_the_opening_hours: "Justera öppettiderna"
to_time: "till" #e.g. from 18:00 to 21:00
restrict_options: "Begränsningar"
restrict_with_labels: "Begränsa denna plats med etiketter"
restrict_for_subscriptions: "Begränsa denna plats för prenumerationsanvändare"
select_some_plans: "Välj planer"
plans: "Plan(er):"
recurrence: "Återkommande"
enabled: "Aktiverad"
period: "Period"
week: "Week"
month: "Month"
number_of_periods: "Number of periods"
end_date: "End date"
summary: "Summary"
select_period: "Please select a period for the recurrence"
select_nb_period: "Please select a number of periods for the recurrence"
select_end_date: "Please select the date of the last occurrence"
about_to_create: "You are about to create the following {TYPE, select, machines{machine} training{training} space{space} other{other}} {NUMBER, plural, one{slot} other{slots}}:"
divided_in_slots: "{COUNT, plural, =1{This slot} other{These slots}} will be open for booking in {DURATION}-minutes increments."
reservable: "Reservable(s):"
labels: "Label(s):"
none: "None"
slot_successfully_deleted: "The slot {START} - {END} has been successfully deleted"
slots_deleted: "The slot of {START}, and {COUNT, plural, =1{one other} other{{COUNT} others}}, have been deleted"
unable_to_delete_the_slot: "Unable to delete the slot {START} - {END}, probably because it's already reserved by a member"
slots_not_deleted: "On {TOTAL} slots, {COUNT, plural, =1{one was not deleted} other{{COUNT} were not deleted}}. Some reservations may exist on {COUNT, plural, =1{it} other{them}}."
you_should_select_at_least_a_machine: "You should select at least one machine on this slot."
inconsistent_times: "Error: the end of the availability is before its beginning."
min_one_slot: "The availability must be split in one slot at least."
min_slot_duration: "You must specify a valid duration for the slots."
export_is_running_you_ll_be_notified_when_its_ready: "Export is running. You'll be notified when it's ready."
actions: "Actions"
block_reservations: "Block reservations"
do_you_really_want_to_block_this_slot: "Do you really want to block new reservations on this slot? It will become invisible to users."
locking_success: "Slot successfully locked, it won't appear any longer in the user calendar"
locking_failed: "An error occurred. Slot locking has failed"
allow_reservations: "Allow reservations"
do_you_really_want_to_allow_reservations: "Do you really want to allow booking again on this slot? It will become visible for the users."
unlocking_success: "Slot successfully unlocked, it will appear again in the user calendar"
unlocking_failed: "An error occurred. Slot unlocking has failed"
reservations_locked: "Booking is blocked"
unlockable_because_reservations: "Unable to block booking on this slot because some uncancelled reservations exist on it."
delete_slot: "Delete this slot"
do_you_really_want_to_delete_this_slot: "Do you really want to delete this slot?"
delete_recurring_slot: "You're about to delete a recurring slot. What do you want to do?"
delete_this_slot: "Only this slot"
delete_this_and_next: "This slot and the following"
delete_all: "All slots"
event_in_the_past: "Create a slot in the past"
confirm_create_event_in_the_past: "You are about to create a slot in the past. Are you sure you want to do this? Members will not be able to book this slot."
edit_event: "Edit the event"
view_reservations: "View reservations"
legend: "Legend"
and: "and"
external_sync: "Calendar synchronization"
divide_this_availability: "Divide this availability in"
slots: "slots"
slots_of: "of"
minutes: "minutes"
deleted_user: "Deleted user"
select_type: "Please select a type to continue"
no_modules_available: "No reservable module available. Please enable at least one module (machines, spaces or trainings) in the Customization section."
week: "Vecka"
month: "Månad"
number_of_periods: "Antal perioder"
end_date: "Slutdatum"
summary: "Sammanfattning"
select_period: "Välj en period för återkommande"
select_nb_period: "Välj ett antal perioder för återkommande"
select_end_date: "Välj datumet för den senaste förekomsten"
about_to_create: "Du håller på att skapa följande {TYPE, select, machines{utrustning} training{utbildning} space{lokal} other{annat}} {NUMBER, plural, one{plats} other{platser}}:"
divided_in_slots: "{COUNT, plural, one {}=1{Denna plats} other{Dessa platser}} kommer att vara öppna för bokning i perioder om {DURATION}-minuter."
reservable: "Reserverbara:"
labels: "Etikett(er):"
none: "Inget"
slot_successfully_deleted: "Platsen {START} - {END} har tagits bort"
slots_deleted: "Platsen för {START}och {COUNT, plural, one {}=1{en annan} other{{COUNT} andra}}har tagits bort"
unable_to_delete_the_slot: "Det går inte att ta bort platsen {START} - {END}, förmodligen för att det redan är reserverad av en medlem"
slots_not_deleted: "Av {TOTAL} platser {COUNT, plural, one {}=1{togs en inte bort} other{togs {COUNT} inte bort}}. Vissa reservationer kan finnas på {COUNT, plural, one {}=1{det} other{dem}}."
you_should_select_at_least_a_machine: "Du bör välja minst en utrustning på denna plats."
inconsistent_times: "Fel: slutet av tillgängligheten är före dess början."
min_one_slot: "Tillgången måste delas i minst en plats."
min_slot_duration: "Du måste ange en giltig varaktighet för platserna."
export_is_running_you_ll_be_notified_when_its_ready: "Exporten körs. Du kommer att meddelas när den är klar."
actions: "Aktiviteter"
block_reservations: "Begränsa bokningar"
do_you_really_want_to_block_this_slot: "Vill du verkligen blockera nya bokningar på denna plats? Det kommer att bli osynligt för användare."
locking_success: "Plats blockerad, den kommer inte att visas längre i användarkalendern"
locking_failed: "Ett fel uppstod. Blockering av plats har misslyckats"
allow_reservations: "Tillåt bokningar"
do_you_really_want_to_allow_reservations: "Vill du verkligen tillåta bokning igen på denna plats? Den kommer att bli synlig för användarna."
unlocking_success: "Platsen har låsts upp, den kommer att visas igen i användarkalendern"
unlocking_failed: "Ett fel uppstod. Låsning av plats har misslyckats"
reservations_locked: "Bokningen är blockerad"
unlockable_because_reservations: "Det går inte att blockera bokning på den här platsen eftersom vissa oavslutade bokningar finns på den."
delete_slot: "Ta bort denna plats"
do_you_really_want_to_delete_this_slot: "Vill du verkligen ta bort denna plats?"
delete_recurring_slot: "Du håller på att ta bort en återkommande plats. Vad vill du göra?"
delete_this_slot: "Endast denna plats"
delete_this_and_next: "Denna plats och följande"
delete_all: "Alla platser"
event_in_the_past: "Skapa en plats i det förflutna"
confirm_create_event_in_the_past: "Du är på väg att skapa en plats i det förflutna. Är du säker på att du vill göra detta? Medlemmar kommer inte att kunna boka denna plats."
edit_event: "Redigera evenemanget"
view_reservations: "Visa bokningar"
legend: "Förklaring"
and: "och"
external_sync: "Kalendersynkronisering"
divide_this_availability: "Dela upp denna tillgänglighet i"
slots: "platser"
slots_of: "av"
minutes: "minuter"
deleted_user: "Raderad användare"
select_type: "Välj en typ att fortsätta"
no_modules_available: "Ingen bokningsbar modul tillgänglig. Aktivera minst en modul (utrustning, lokaler eller utbildningar) i avsnittet Anpassning."
#import external iCal calendar
icalendar:
icalendar_import: "iCalendar import"
intro: "Fab-manager allows to automatically import calendar events, at RFC 5545 iCalendar format, from external URL. These URL are synchronized every hours and the events are shown in the public calendar. You can trigger a synchronisation too, by clicking on the corresponding button, in front of each import."
new_import: "New ICS import"
color: "Colour"
text_color: "Text colour"
icalendar_import: "importera iCalendar"
intro: "Fab-manager gör det möjligt att automatiskt importera kalenderhändelser, på RFC 5545 iCalendar-format, från extern URL. Denna URL synkroniseras varje timme och händelserna visas i den offentliga kalendern. Du kan utlösa en synkronisering också, genom att klicka på motsvarande knapp framför varje import."
new_import: "Ny ICS import"
color: "Färg"
text_color: "Textfärg"
url: "URL"
name: "Name"
example: "Example"
display: "Display"
hide_text: "Hide the text"
hidden: "Hidden"
shown: "Shown"
create_error: "Unable to create iCalendar import. Please try again later"
delete_failed: "Unable to delete the iCalendar import. Please try again later"
refresh: "Updating..."
sync_failed: "Unable to synchronize the URL. Please try again later"
confirmation_required: "Confirmation required"
confirm_delete_import: "Do you really want to delete this iCalendar import?"
delete_success: "iCalendar import successfully deleted"
name: "Namn"
example: "Exempel"
display: "Visa"
hide_text: "Dölj texten"
hidden: "Dolt"
shown: "Visas"
create_error: "Det går inte att skapa iCalendar-import. Försök igen senare"
delete_failed: "Det går inte att ta bort iCalendar-importen. Försök igen senare"
refresh: "Uppdaterar..."
sync_failed: "Det gick inte att synkronisera webbadressen. Försök igen senare"
confirmation_required: "Verifiering krävs"
confirm_delete_import: "Vill du verkligen ta bort denna iCalendar-import?"
delete_success: "iCalendar-import har tagits bort"
#management of the projects' components & settings
projects:
name: "Name"
projects_settings: "Projects settings"
materials: "Materials"
add_a_material: "Add a material"
themes: "Themes"
add_a_new_theme: "Add a new theme"
project_categories: "Categories"
add_a_new_project_category: "Add a new category"
licences: "Licences"
statuses: "Statuses"
description: "Description"
add_a_new_licence: "Add a new licence"
manage_abuses: "Manage the reports"
name: "Namn"
projects_settings: "Projektinställningar"
materials: "Material"
add_a_material: "Lägg till material"
themes: "Teman"
add_a_new_theme: "Lägg till ett nytt tema"
project_categories: "Kategorier"
add_a_new_project_category: "Lägg till en ny kategori"
licences: "Licenser"
statuses: "Status"
description: "Beskrivning"
add_a_new_licence: "Lägg till en ny licens"
manage_abuses: "Hantera rapporter"
settings:
title: "Settings"
comments: "Comments"
title: "Inställningar"
comments: "Kommentarer"
disqus: "Disqus"
disqus_info: "If you want to enable your members and visitors to comment on projects, you can enable the Disqus forums by setting the following parameter. Visit <a href='https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-' target='_blank'>the Disqus website</a> for more information."
shortname: "Shortname"
cad_files: "CAD files"
validation: "Validation"
validation_info: "Users can upload CAD (Computer Aided Design) files with the documentation of their projects. You can specify which files types are allowed. Use the test input below to determine the MIME type of a file."
extensions: "Allowed extensions"
new_extension: "New extension"
new_ext_info_html: "<p>Specify a new file extension to allow these files to be uploaded.</p><p>Please consider that allowing file archives (eg. ZIP) or binary executable (eg. EXE) may result in a <strong>dangerous security issue</strong> and must be avoided in any cases.</p>"
mime_types: "Allowed MIME types"
new_mime_type: "New MIME type"
new_type_info_html: "<p>Specify a new MIME type to allow these files to be uploaded.</p><p>Please use the test input to determine the MIME type of a file. Please consider that allowing file archives (eg. application/zip) or binary executable (eg. application/exe) may result in a <strong>dangerous security issue</strong> and must be avoided in any cases.</p>"
test_file: "Test a file"
set_a_file: "Select a file"
file_is_TYPE: "MIME type of this file is {TYPE}"
projects_sharing: "Projects sharing"
open_lab_projects: "OpenLab Projects"
open_lab_info_html: "Enable OpenLab to share your projects with other Fab Labs and display a gallery of shared projects. Please send an email to <a href='mailto:contact@fab-manager.com'>contact@fab-manager.com</a> to get your access credentials for free."
disqus_info: "Om du vill aktivera dina medlemmar och besökare att kommentera projekt, kan du aktivera Disqus forum genom att ställa in följande parameter. Besök <a href='https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-' target='_blank'>Disqus hemsida</a> för mer information."
shortname: "Kort namn"
cad_files: "CAD-filer"
validation: "Godkännande"
validation_info: "Användare kan ladda upp CAD-filer (Computer Aided Design) med dokumentationen av sina projekt. Du kan ange vilka filtyper som är tillåtna. Använd testinmatningen nedan för att bestämma MIME-typen av en fil."
extensions: "Tillåtna filändelser"
new_extension: "Nytt tillägg"
new_ext_info_html: "<p>Ange ett nytt filtillägg för att tillåta att dessa filer laddas upp.</p><p>Tänk på att tillåta filarkiv (t. ex. ZIP) eller binär exekverbar (t. ex. EXE) kan resultera i ett <strong>farligt säkerhetsproblem</strong> och måste undvikas i alla fall.</p>"
mime_types: "Tillåtna MIME-typer"
new_mime_type: "Ny MIME-typ"
new_type_info_html: "<p>Ange en ny MIME-typ för att tillåta att dessa filer laddas upp.</p><p>Använd testinmatningen för att bestämma MIME-typen av en fil. Tänk på att tillåta filarkiv (t. ex. applikation / zip) eller binär körbar (t. ex. applikation/exe) kan resultera i ett <strong>farligt säkerhetsproblem</strong> och måste undvikas i alla fall.</p>"
test_file: "Testa en fil"
set_a_file: "Välj en fil"
file_is_TYPE: "MIME-typ av denna fil är {TYPE}"
projects_sharing: "Projektdelning"
open_lab_projects: "OpenLab projekt"
open_lab_info_html: "Aktivera OpenLab för att dela dina projekt med andra Fab Labs och visa ett galleri av delade projekt. Vänligen skicka ett mail till <a href='mailto:contact@fab-manager.com'>contact@fab-manager.com</a> för att få dina åtkomstuppgifter gratis."
open_lab_app_id: "ID"
open_lab_app_secret: "Secret"
openlab_default_info_html: "In the projects gallery, visitors can switch between two views: all shared projects from the whole OpenLab network, or only the projects documented in your Fab Lab.<br/>Here, you can choose which view is shown by default."
default_to_openlab: "Display OpenLab by default"
filters: Projects list filters
project_categories: Categories
open_lab_app_secret: "Hemlighet"
openlab_default_info_html: "I projektgalleriet kan besökarna växla mellan två vyer: alla delade projekt från hela OpenLab-nätverket, eller bara de projekt som dokumenterats i ditt Fab Lab.<br/>Här kan du välja vilken vy som visas som standard."
default_to_openlab: "Visa OpenLab som standard"
filters: Projektlista filter
project_categories: Kategorier
project_categories:
name: "Name"
delete_dialog_title: "Confirmation required"
delete_dialog_info: "The associations between this category and the projects will me deleted."
name: "Namn"
delete_dialog_title: "Verifiering krävs"
delete_dialog_info: "Kopplingarna mellan denna kategori och projekten kommer jag att ta bort."
projects_setting:
add: "Add"
actions_controls: "Actions"
name: "Name"
add: "Lägg till"
actions_controls: "Aktiviteter"
name: "Namn"
projects_setting_option:
edit: "Edit"
delete_option: "Delete Option"
edit: "Redigera"
delete_option: "Radera alternativ"
projects_setting_option_form:
name: "Name"
description: "Description"
name_cannot_be_blank: "Name cannot be blank."
save: "Save"
cancel: "Cancel"
name: "Namn"
description: "Beskrivning"
name_cannot_be_blank: "Namn får inte vara tomt."
save: "Spara"
cancel: "Avbryt"
status_settings:
option_create_success: "Status was successfully created."
option_delete_success: "Status was successfully deleted."
option_update_success: "Status was successfully updated."
option_create_success: "Statusen har skapats."
option_delete_success: "Statusen har raderats."
option_update_success: "Statusen har uppdaterats."
#track and monitor the trainings
trainings:
trainings_monitoring: "Trainings monitoring"
all_trainings: "All trainings"
add_a_new_training: "Add a new training"
name: "Training name"
associated_machines: "Associated machines"
cancellation: "Cancellation (attendees | deadline)"
trainings_monitoring: "Övervakning av utbildningar"
all_trainings: "Alla utbildningar"
add_a_new_training: "Lägg till en ny utbildning"
name: "Utbildningsnamn"
associated_machines: "Kopplad utrustning"
cancellation: "Avbokning (deltagare | deadline)"
cancellation_minimum: "{ATTENDEES} minimum"
cancellation_deadline: "{DEADLINE} h"
capacity: "Capacity (max. attendees)"
authorisation: "Time-limited authorisation"
period_MONTH: "{MONTH} {MONTH, plural, one{month} other{months}}"
active_true: "Yes"
active_false: "No"
validation_rule: "Lapsed without reservation"
select_a_training: "Select a training"
training: "Training"
date: "Date"
year_NUMBER: "Year {NUMBER}"
month_of_NAME: "Month of {NAME}"
NUMBER_reservation: "{NUMBER} {NUMBER, plural, one{reservation} other{reservations}}"
none: "None"
training_validation: "Training validation"
training_of_the_DATE_TIME_html: "Training of the <strong>{DATE} - {TIME}</strong>"
you_can_validate_the_training_of_the_following_members: "You can validate the training of the following members:"
deleted_user: "Deleted user"
no_reservation: "No reservation"
validate_the_trainings: "Validate the trainings"
edition_of_the_description_tooltip: "Edition of the description tooltip"
describe_the_training_in_a_few_words: "Describe the training in a few words."
description_is_limited_to_255_characters: "Description is limited to 255 characters."
cancellation_deadline: "{DEADLINE} t"
capacity: "Kapacitet (max. deltagare)"
authorisation: "Tidsbegränsad behörighet"
period_MONTH: "{MONTH} {MONTH, plural, one{månad} other{månader}}"
active_true: "Ja"
active_false: "Nej"
validation_rule: "Bortfallet utan bokning"
select_a_training: "Välj en utbildning"
training: "Utbildning"
date: "Datum"
year_NUMBER: "År {NUMBER}"
month_of_NAME: "Månaden {NAME}"
NUMBER_reservation: "{NUMBER} {NUMBER, plural, one{bokning} other{bokningar}}"
none: "Inget"
training_validation: "Validering av träning"
training_of_the_DATE_TIME_html: "Utbildning den <strong>{DATE} - {TIME}</strong>"
you_can_validate_the_training_of_the_following_members: "Du kan validera träningen av följande medlemmar:"
deleted_user: "Raderad användare"
no_reservation: "Ingen bokning"
validate_the_trainings: "Validera utbildningarna"
edition_of_the_description_tooltip: "Upplagan av beskrivningens verktygstips"
describe_the_training_in_a_few_words: "Beskriv utbildningen med några ord."
description_is_limited_to_255_characters: "Beskrivningen är begränsad till 255 tecken."
description_was_successfully_saved: "Description was successfully saved."
training_successfully_deleted: "Training successfully deleted."
unable_to_delete_the_training_because_some_users_already_booked_it: "Unable to delete the training because some users already booked it."
@ -546,63 +546,63 @@ sv:
authorization_validity_switch: "Activate an authorization validity period"
authorization_validity_period: "Validity period in months"
validation_rule: "Authorisations cancellation rule"
validation_rule_info: "Define a rule that cancel an authorisation if the machines associated with the training are not reserved for a specific period of time. This rule prevails over the authorisations validity period."
validation_rule_switch: "Activate the validation rule"
validation_rule_period: "Time limit in months"
generic_text_block: "Editorial text block"
generic_text_block_info: "Displays an editorial block above the list of trainings visible to members."
generic_text_block_switch: "Display editorial block"
cta_switch: "Display a button"
cta_label: "Button label"
validation_rule_info: "Definiera en regel som upphäver ett tillstånd om utrustningen i samband med utbildningen inte är bokade för en viss tidsperiod. Denna regel råder över giltighetstiden för tillstånd."
validation_rule_switch: "Aktivera valideringsregeln"
validation_rule_period: "Tidsgräns i månader"
generic_text_block: "Textblock"
generic_text_block_info: "Visar ett textblock ovanför listan över utbildningar som är synlig för medlemmar."
generic_text_block_switch: "Visa textblock"
cta_switch: "Visa en knapp"
cta_label: "Knappetikett"
cta_url: "url"
save: "Save"
update_success: "The trainings settings were successfully updated"
save: "Spara"
update_success: "Utbildningsinställningarna har uppdaterats"
#events tracking and management
events:
settings: "Settings"
events_monitoring: "Events monitoring"
manage_filters: "Manage filters"
fablab_events: "Fablab events"
add_an_event: "Add an event"
all_events: "All events"
passed_events: "Passed events"
events_to_come: "Events to come"
events_to_come_asc: "Events to come | chronological order"
on_DATE: "on {DATE}"
from_DATE: "from {DATE}"
from_TIME: "from {TIME}"
to_date: "to" #e.g.: from 01/01 to 01/05
to_time: "to" #e.g. from 18:00 to 21:00
title: "Title"
dates: "Dates"
booking: "Booking"
sold_out: "Sold out"
cancelled: "Cancelled"
without_reservation: "Without reservation"
free_admission: "Free admission"
view_reservations: "View reservations"
load_the_next_events: "Load the next events..."
categories: "Categories"
add_a_category: "Add a category"
name: "Name"
themes: "Theme"
add_a_theme: "Add a theme"
age_ranges: "Age ranges"
add_a_range: "Add a range"
do_you_really_want_to_delete_this_ELEMENT: "Do you really want to delete this {ELEMENT, select, category{category} theme{theme} age_range{age range} other{element}}?"
unable_to_delete_ELEMENT_already_in_use_NUMBER_times: "Unable to delete this {ELEMENT, select, category{category} theme{theme} age_range{age range} other{element}} because it is already associated with {NUMBER, plural, =0{no events} one{one event} other{{NUMBER} events}}."
at_least_one_category_is_required: "At least one category is required."
unable_to_delete_the_last_one: "Unable to delete the last one."
unable_to_delete_an_error_occured: "Unable to delete: an error occurred."
manage_prices_categories: "Manage prices' categories"
prices_categories: "Prices' categories"
add_a_price_category: "Add a price's category"
usages_count: "Usages count"
price_category: "Price category"
settings: "Inställningar"
events_monitoring: "Övervakning av evenemang"
manage_filters: "Hantera filter"
fablab_events: "Fablab-evenemang"
add_an_event: "Lägg till ett evenemang"
all_events: "Alla evenemang"
passed_events: "Tidigare evenemang"
events_to_come: "Kommande evenemang"
events_to_come_asc: "Kommande evenemang | kronologisk ordning"
on_DATE: "den {DATE}"
from_DATE: "från {DATE}"
from_TIME: "från {TIME}"
to_date: "till" #e.g.: from 01/01 to 01/05
to_time: "till" #e.g. from 18:00 to 21:00
title: "Rubrik"
dates: "Datum"
booking: "Bokning"
sold_out: "Slutsåld"
cancelled: "Inställt"
without_reservation: "Utan bokning"
free_admission: "Fri entré"
view_reservations: "Visa bokningar"
load_the_next_events: "Ladda nästa evenemang..."
categories: "Kategorier"
add_a_category: "Lägg till kategori"
name: "Namn"
themes: "Tema"
add_a_theme: "Lägg till tema"
age_ranges: "Åldersspann"
add_a_range: "Lägg till ett intervall"
do_you_really_want_to_delete_this_ELEMENT: "Vill du verkligen ta bort detta {ELEMENT, select, category{kategori} theme{tema} age_range{åldersintervall} other{elementet}}?"
unable_to_delete_ELEMENT_already_in_use_NUMBER_times: "Kunde inte ta bort denna {ELEMENT, select, category{kategori} theme{tema} age_range{åldersintervall} other{elementet}} eftersom den redan är associerad med {NUMBER, plural, =0{inga händelser} one{en händelse} other{{NUMBER} händelser}}."
at_least_one_category_is_required: "Minst en kategori krävs."
unable_to_delete_the_last_one: "Det går inte att ta bort den sista."
unable_to_delete_an_error_occured: "Det gick inte att ta bort: ett fel inträffade."
manage_prices_categories: "Hantera priskategorier"
prices_categories: "Priskategorier"
add_a_price_category: "Lägg till priskategori"
usages_count: "Användningar"
price_category: "Priskategori"
category_name: "Category's name"
category_name_is_required: "Category's name is required."
enter_here_the_conditions_under_which_this_price_is_applicable: "Enter here the conditions under which this price is applicable"
conditions_are_required: "Conditions are required."
category_name_is_required: "Kategorins namn är obligatoriskt."
enter_here_the_conditions_under_which_this_price_is_applicable: "Ange här de villkor under vilka detta pris är tillämpligt"
conditions_are_required: "Förutsättningar krävs."
price_category_successfully_created: "Price category successfully created."
unable_to_add_the_price_category_check_name_already_used: "Unable to add the price category, check that the name is not already used."
unexpected_error_occurred_please_refresh: "An unexpected error occurred, please refresh the page."
@ -633,12 +633,12 @@ sv:
confirmation_required: "Confirmation required"
edit_recurring_event: "You're about to update a periodic event. What do you want to update?"
edit_this_event: "Only this event"
edit_this_and_next: "This event and the following"
edit_all: "All events"
date_wont_change: "Warning: you have changed the event date. This modification won't be propagated to other occurrences of the periodic event."
event_successfully_updated: "Event successfully updated."
events_updated: "The event, and {COUNT, plural, =1{one other} other{{COUNT} others}}, have been updated"
unable_to_update_the_event: "Unable to update the event"
edit_this_and_next: "Detta evenemang samt framtida"
edit_all: "Alla evenemang"
date_wont_change: "Varning: du har ändrat evenemangsdatumet. Denna ändring kommer inte att spridas till andra tillfällen av det återkommande evenemanget."
event_successfully_updated: "Evenemanget är uppdaterat."
events_updated: "Evenemanget och {COUNT, plural, one {}=1{en annan} other{{COUNT} andra}}har uppdaterats"
unable_to_update_the_event: "Det gick inte att uppdatera evenemanget"
events_not_updated: "On {TOTAL} events, {COUNT, plural, =1{one was not updated} other{{COUNT} were not deleted}}."
error_deleting_reserved_price: "Unable to delete the requested price because it is associated with some reservations"
other_error: "An unexpected error occurred while updating the event"
@ -657,59 +657,59 @@ sv:
booked_by: "Booked by"
reservations: "Reservations"
status: "Status"
gestion: "Gestion"
validation: "Validation"
gestion: "Förvaltning"
validation: "Godkännande"
event_status:
pre_registered: "Pre-registered"
to_pay: "To pay"
paid: "Paid"
canceled: "Canceled"
present: "Present"
registered: "Registered"
not_validated: "Not validated"
affirmative: "yes"
negative: "no"
validate: "Validate"
pay: "Pay"
validate_the_reservation: "Validate the reservation"
do_you_really_want_to_validate_this_reservation_this_apply_to_all_booked_tickets: "Do you really want to validate this reservation? This apply to ALL booked tickets."
reservation_was_successfully_validated: "Reservation was successfully validated."
validation_failed: "Validation failed."
reservation_was_successfully_invalidated: "Reservation was successfully invalidated."
invalidation_failed: "Invalidation failed."
confirm_payment: "Confirm payment"
confirm_payment_of_html: "{ROLE, select, admin{Cash} other{Pay}}: {AMOUNT}" #(contexte : validate a payment of $20,00)
offer_this_reservation: "I offer this reservation"
i_have_received_the_payment: "I have received the payment"
reservation_was_successfully_paid: "Reservation was successfully paid."
present: "Present"
confirm_present: "Confirm presence"
confirm_present_info: "Confirm the presence of the user for this event"
reservation_was_successfully_present: "The presence of the user was successfully confirmed."
age: "{NUMBER} years old"
pre_registered: "Förregistrerad"
to_pay: "Att betala"
paid: "Betald"
canceled: "Avbruten"
present: "Närvarande"
registered: "Registrerad"
not_validated: "Ej validerad"
affirmative: "ja"
negative: "nej"
validate: "Bekräfta"
pay: "Betala"
validate_the_reservation: "Bekräfta bokningen"
do_you_really_want_to_validate_this_reservation_this_apply_to_all_booked_tickets: "Vill du verkligen bekräfta denna bokning? Detta gäller för ALLA bokade biljetter."
reservation_was_successfully_validated: "Bokningen har bekräftats."
validation_failed: "Validering misslyckades."
reservation_was_successfully_invalidated: "Bokningen har avslagits."
invalidation_failed: "Avslag misslyckades."
confirm_payment: "Bekräfta betalning"
confirm_payment_of_html: "{ROLE, select, admin{Kontant} other{Betala}}: {AMOUNT}" #(contexte : validate a payment of $20,00)
offer_this_reservation: "Jag erbjuder bokningen"
i_have_received_the_payment: "Jag har mottagit betalningen"
reservation_was_successfully_paid: "Bokningen har betalats."
present: "Närvarande"
confirm_present: "Bekräfta närvaro"
confirm_present_info: "Bekräfta närvaron för detta evenemang"
reservation_was_successfully_present: "Användarens närvaro bekräftades."
age: "{NUMBER} år gammal"
events_settings:
title: "Settings"
generic_text_block: "Editorial text block"
generic_text_block_info: "Displays an editorial block above the list of events visible to members."
generic_text_block_switch: "Display editorial block"
cta_switch: "Display a button"
cta_label: "Button label"
title: "Inställningar"
generic_text_block: "Textblock"
generic_text_block_info: "Visar ett textblock ovanför listan över utrustning som är synlig för medlemmar."
generic_text_block_switch: "Visa textblock"
cta_switch: "Visa en knapp"
cta_label: "Knappetikett"
cta_url: "url"
save: "Save"
update_success: "The events settings were successfully updated"
save: "Spara"
update_success: "Evenemangsinställningarna har uppdaterats"
#subscriptions, prices, credits and coupons management
pricing:
pricing_management: "Pricing management"
subscriptions: "Subscriptions"
trainings: "Trainings"
list_of_the_subscription_plans: "List of the subscription plans"
disabled_plans_info_html: "<p><strong>Warning:</strong> the subscriptions are disabled on this application.</p><p>You can still create some, but they won't be available until the activation of the plans module, from the « Customization » section.</p>"
add_a_new_subscription_plan: "Add a new subscription plan"
name: "Name"
duration: "Duration"
group: "Group"
category: "Category"
prominence: "Prominence"
pricing_management: "Prishantering"
subscriptions: "Prenumerationer"
trainings: "Utbildningar"
list_of_the_subscription_plans: "Lista över prenumerationsplaner"
disabled_plans_info_html: "<p><strong>Varning:</strong> prenumerationerna är inaktiverade för denna applikation.</p><p>Du kan fortfarande skapa några, men de kommer inte att vara tillgängliga förrän aktiveringen av planeringsmodulen, från avsnittet « Anpassning ».</p>"
add_a_new_subscription_plan: "Lägg till en ny prenumerationsplan"
name: "Namn"
duration: "Varaktighet"
group: "Grupp"
category: "Kategori"
prominence: "Prominens"
price: "Price"
machine_hours: "Machine slots"
prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.<br/><em>For example</em>, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged <strong>{PRICE}</strong>."
@ -760,64 +760,64 @@ sv:
coupon_successfully_sent_to_USER: "Coupon successfully sent to {USER}"
an_error_occurred_unable_to_send_the_coupon: "An unexpected error prevent from sending the coupon."
code: "Code"
enabled: "Enabled"
validity_per_user: "Validity per user"
once: "Just once"
forever: "Each use"
valid_until: "Valid until (included)"
spaces: "Spaces"
these_prices_match_space_hours_rates_html: "The prices below match one hour of space usage, <strong>without subscription</strong>."
add_a_space_credit: "Add a Space credit"
space: "Space"
error_a_credit_linking_this_space_with_that_subscription_already_exists: "Error: a credit linking this space with that subscription already exists."
status_enabled: "Enabled"
status_disabled: "Disabled"
status_all: "All"
enabled: "Aktiverad"
validity_per_user: "Giltighet per användare"
once: "Bara en gång"
forever: "Varje användning"
valid_until: "Giltig till (ingår)"
spaces: "Lokaler"
these_prices_match_space_hours_rates_html: "Priserna nedan avser en timmes lokalanvändning, <strong>utan abonnemang</strong>."
add_a_space_credit: "Lägg till en lokalkredit"
space: "Lokal"
error_a_credit_linking_this_space_with_that_subscription_already_exists: "Fel: en kredit som länkar detta utrymme med den prenumerationen finns redan."
status_enabled: "Aktiverad"
status_disabled: "Inaktiverad"
status_all: "Alla"
spaces_pricing:
prices_match_space_hours_rates_html: "The prices below match one hour of space reservation, <strong>without subscription</strong>."
prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.<br/><em>For example</em>, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged <strong>{PRICE}</strong>."
you_can_override: "You can override this duration for each availability you create in the agenda. The price will then be adjusted accordingly."
extended_prices: "Moreover, you can define extended prices which will apply in priority over the hourly rate below. Extended prices allow you, for example, to set a favorable price for a booking of several hours."
spaces: "Spaces"
price_updated: "Price successfully updated"
prices_match_space_hours_rates_html: "Priserna nedan avser en timmes lokalanvändning, <strong>utan abonnemang</strong>."
prices_calculated_on_hourly_rate_html: "Alla priser beräknas automatiskt baserat på den timtaxa som anges här.<br/><em>Till exempel</em>, om du definierar en timtaxa på {RATE}: en plats på {DURATION} minuter, kommer debiteras <strong>{PRICE}</strong>."
you_can_override: "Du kan åsidosätta denna varaktighet för varje tillgänglighet du skapar på agendan. Priset kommer då att justeras därefter."
extended_prices: "Dessutom kan du definiera utökade priser som kommer att gälla i prioritet över timpriset nedan. Utökade priser gör att du, till exempel, kan sätta ett förmånligt pris för en bokning av flera timmar."
spaces: "Lokaler"
price_updated: "Priset har uppdaterats"
machines_pricing:
prices_match_machine_hours_rates_html: "The prices below match one hour of machine usage, <strong>without subscription</strong>."
prices_calculated_on_hourly_rate_html: "All the prices will be automatically calculated based on the hourly rate defined here.<br/><em>For example</em>, if you define an hourly rate at {RATE}: a slot of {DURATION} minutes, will be charged <strong>{PRICE}</strong>."
you_can_override: "You can override this duration for each availability you create in the agenda. The price will then be adjusted accordingly."
machines: "Machines"
price_updated: "Price successfully updated"
prices_match_machine_hours_rates_html: "Priserna nedan avser en timmes lokalanvändning, <strong>utan abonnemang</strong>."
prices_calculated_on_hourly_rate_html: "Alla priser beräknas automatiskt baserat på den timtaxa som anges här.<br/><em>Till exempel</em>, om du definierar en timtaxa på {RATE}: en plats på {DURATION} minuter, kommer <strong>{PRICE}</strong> debiteras."
you_can_override: "Du kan åsidosätta denna varaktighet för varje tillgänglighet du skapar på agendan. Priset kommer då att justeras därefter."
machines: "Utrustning"
price_updated: "Priset har uppdaterats"
configure_packs_button:
pack: "prepaid pack"
packs: "Prepaid packs"
no_packs: "No packs for now"
pack_DURATION: "{DURATION} hours"
delete_confirmation: "Are you sure you want to delete this prepaid pack? This won't be possible if the pack was already bought by users."
edit_pack: "Edit the pack"
confirm_changes: "Confirm changes"
pack_successfully_updated: "The prepaid pack was successfully updated."
pack: "förbetalda paket"
packs: "Förbetalda paket"
no_packs: "Inga paket just nu"
pack_DURATION: "{DURATION} timmar"
delete_confirmation: "Är du säker på att du vill ta bort detta förbetalda paket? Detta kommer inte att vara möjligt om paketet redan köpts av användare."
edit_pack: "Redigera paketet"
confirm_changes: "Bekräfta ändringar"
pack_successfully_updated: "Det förbetalda paketet har uppdaterats."
configure_extended_prices_button:
extended_prices: "Extended prices"
no_extended_prices: "No extended price for now"
extended_price_DURATION: "{DURATION} hours"
extended_prices: "Utökade priser"
no_extended_prices: "Inget utökat pris för tillfället"
extended_price_DURATION: "{DURATION} timmar"
extended_price_form:
duration: "Duration (hours)"
amount: "Price"
duration: "Varaktighet (timmar)"
amount: "Pris"
pack_form:
hours: "Hours"
amount: "Price"
disabled: "Disabled"
validity_count: "Maximum validity"
select_interval: "Interval..."
hours: "Timmar"
amount: "Pris"
disabled: "Inaktiverad"
validity_count: "Maximal giltighet"
select_interval: "Intervall..."
intervals:
day: "{COUNT, plural, one{Day} other{Days}}"
week: "{COUNT, plural, one{Week} other{Weeks}}"
month: "{COUNT, plural, one{Month} other{Months}}"
year: "{COUNT, plural, one{Year} other{Years}}"
day: "{COUNT, plural, one{dag} other{dagar}}"
week: "{COUNT, plural, one{vecka} other{veckor}}"
month: "{COUNT, plural, one{månad} other{månader}}"
year: "{COUNT, plural, one{år} other{år}}"
create_pack:
new_pack: "New prepaid pack"
new_pack_info: "A prepaid pack allows users to buy {TYPE, select, Machine{machine} Space{space} other{}} hours before booking any slots. These packs can provide discounts on volumes purchases."
create_pack: "Create this pack"
pack_successfully_created: "The new prepaid pack was successfully created."
new_pack: "Nytt förbetalt paket"
new_pack_info: "Ett förbetalt paket låter användare köpa {TYPE, select, Machine{utrustning} Space{lokal} other{}} timmar innan du bokar några platser. Dessa paket kan ge rabatter på volyminköp."
create_pack: "Skapa detta paket"
pack_successfully_created: "Det nya förbetalda paketet har skapats."
create_extended_price:
new_extended_price: "New extended price"
new_extended_price_info: "Extended prices allows you to define prices based on custom durations, instead of the default hourly rates."
@ -889,56 +889,56 @@ sv:
operator_: "Operator:"
invoice_num_: "Invoice #:"
customer_: "Customer:"
date_: "Date:"
invoice_num: "Invoice #"
date: "Date"
price: "Price"
customer: "Customer"
download_the_invoice: "Download the invoice"
download_the_credit_note: "Download the credit note"
credit_note: "Credit note"
display_more_invoices: "Display more invoices..."
no_invoices_for_now: "No invoices for now."
payment_schedules: "Payment schedules"
invoicing_settings: "Invoicing settings"
edit_setting_info_html: "<strong>Information</strong><p>Hover over the invoice elements below, all items that light up in yellow are editable.</p>"
warning_invoices_disabled: "Warning: invoices are not enabled. No invoices will be generated by Fab-manager. Nevertheless, you must correctly fill the information below, especially VAT."
change_logo: "Change logo"
john_smith: "John Smith"
john_smith_at_example_com: "jean.smith@example.com"
invoice_reference_: "Invoice reference:"
code_: "Code:"
code_disabled: "Code disabled"
date_: "Datum:"
invoice_num: "Fakturanr"
date: "Datum"
price: "Pris"
customer: "Kund"
download_the_invoice: "Hämta faktura"
download_the_credit_note: "Ladda ner kreditnotan"
credit_note: "Kreditfaktura"
display_more_invoices: "Visa fler fakturor..."
no_invoices_for_now: "Inga fakturor för tillfället."
payment_schedules: "Betalningsschema"
invoicing_settings: "Faktureringsinställningar"
edit_setting_info_html: "<strong>Information</strong><p>Håll muspekaren över fakturaelementen nedan, alla objekt som lyser i gult är redigerbara.</p>"
warning_invoices_disabled: "Varning: fakturor är inte aktiverade. Inga fakturor kommer att genereras av Fab-manager. Trots detta måste du fylla i uppgifterna nedan, även moms."
change_logo: "Ändra logotyp"
john_smith: "Lars Larsson"
john_smith_at_example_com: "rolf@example.com"
invoice_reference_: "Fakturareferens:"
code_: "Kod:"
code_disabled: "Koden inaktiverad"
order_num: "Order #:"
invoice_issued_on_DATE_at_TIME: "Invoice issued on {DATE} at {TIME}"
object_reservation_of_john_smith_on_DATE_at_TIME: "Object: Reservation of John Smith on {DATE} at {TIME}"
order_summary: "Order summary:"
details: "Details"
amount: "Amount"
machine_booking-3D_printer: "Machine booking - 3D printer"
training_booking-3D_print: "Training booking - initiation to 3d printing"
total_amount: "Total amount"
total_including_all_taxes: "Total incl. all taxes"
VAT_disabled: "VAT disabled"
VAT_enabled: "VAT enabled"
including_VAT: "Including {NAME} {RATE}% of {AMOUNT}"
including_total_excluding_taxes: "Including Total excl. taxes"
including_amount_payed_on_ordering: "Including amount payed on ordering"
settlement_by_debit_card_on_DATE_at_TIME_for_an_amount_of_AMOUNT: "Settlement by debit card on {DATE} at {TIME}, for an amount of {AMOUNT}"
important_notes: "Important notes"
address_and_legal_information: "Address and legal information"
invoice_reference: "Invoice reference"
invoice_reference_is_required: "Invoice reference is required."
invoice_issued_on_DATE_at_TIME: "Faktura utfärdad den {DATE} kl {TIME}"
object_reservation_of_john_smith_on_DATE_at_TIME: "Objekt: Bokning av Gustav Wasa den {DATE} kl {TIME}"
order_summary: "Beställningsöversikt:"
details: "Detaljer"
amount: "Belopp"
machine_booking-3D_printer: "Utrustningsbokning - 3D-skrivare"
training_booking-3D_print: "Utbildningsbokning - introduktion till 3D-utskrift"
total_amount: "Totalt belopp"
total_including_all_taxes: "Totalt inkl. moms"
VAT_disabled: "Moms inaktiverad"
VAT_enabled: "Moms aktiverad"
including_VAT: "Inklusive {NAME} {RATE}% av {AMOUNT}"
including_total_excluding_taxes: "Inklusive Totalt exkl. moms"
including_amount_payed_on_ordering: "Inklusive belopp som betalades vid beställning"
settlement_by_debit_card_on_DATE_at_TIME_for_an_amount_of_AMOUNT: "Betalning med betalkort den {DATE} kl {TIME}, för ett belopp på {AMOUNT}"
important_notes: "Viktig information"
address_and_legal_information: "Adress och juridisk information"
invoice_reference: "Fakturareferens"
invoice_reference_is_required: "Faktura referens krävs."
text: "text"
year: "Year"
month: "Month"
day: "Day"
num_of_invoice: "Num. of invoice"
online_sales: "Online sales"
wallet: "Wallet"
refund: "Refund"
payment_schedule: "Payment schedule"
model: "Model"
year: "År"
month: "Månad"
day: "Dag"
num_of_invoice: "Antal fakturor"
online_sales: "Försäljning online"
wallet: "Plånbok"
refund: "Återbetala"
payment_schedule: "Betalningsschema"
model: "Modell"
documentation: "Documentation"
2_digits_year: "2 digits year (eg. 70)"
4_digits_year: "4 digits year (eg. 1970)"
@ -989,56 +989,56 @@ sv:
deleted_user: "Deleted user"
refund_invoice_successfully_created: "Refund invoice successfully created."
create_a_refund_on_this_invoice: "Create a refund on this invoice"
refund_mode: "Refund mode:"
do_you_want_to_disable_the_user_s_subscription: "Do you want to disabled the user's subscription:"
elements_to_refund: "Elements to refund"
description: "Description"
description_optional: "Description (optional):"
will_appear_on_the_refund_invoice: "Will appear on the refund invoice."
none: "None" #grammar concordance with payment mean
by_cash: "By cash"
by_cheque: "By cheque"
by_transfer: "By transfer"
by_wallet: "By wallet"
you_must_select_at_least_one_element_to_create_a_refund: "You must select at least one element, to create a refund."
unable_to_create_the_refund: "Unable to create the refund"
invoice_reference_successfully_saved: "Invoice reference successfully saved."
an_error_occurred_while_saving_invoice_reference: "An error occurred while saving invoice reference."
invoicing_code_succesfully_saved: "Invoicing code successfully saved."
an_error_occurred_while_saving_the_invoicing_code: "An error occurred while saving the invoicing code."
code_successfully_activated: "Code successfully activated."
code_successfully_disabled: "Code successfully disabled."
an_error_occurred_while_activating_the_invoicing_code: "An error occurred while activating the invoicing code."
order_number_successfully_saved: "Order number successfully saved."
an_error_occurred_while_saving_the_order_number: "An error occurred while saving the order number."
VAT_rate_successfully_saved: "VAT rate successfully saved."
an_error_occurred_while_saving_the_VAT_rate: "An error occurred while saving the VAT rate."
VAT_successfully_activated: "VAT successfully activated."
VAT_successfully_disabled: "VAT successfully disabled."
an_error_occurred_while_activating_the_VAT: "An error occurred while activating the VAT."
text_successfully_saved: "Text successfully saved."
an_error_occurred_while_saving_the_text: "An error occurred while saving the text."
address_and_legal_information_successfully_saved: "Address and legal information successfully saved."
an_error_occurred_while_saving_the_address_and_the_legal_information: "An error occurred while saving the address and the legal information."
logo_successfully_saved: "Logo successfully saved."
an_error_occurred_while_saving_the_logo: "An error occurred while saving the logo."
filename: "File name"
schedule_filename: "Schedule file name"
prefix_info: "The invoices will be generated as PDF files, named with the following prefix."
schedule_prefix_info: "The payment schedules will be generated as PDF files, named with the following prefix."
refund_mode: "Återbetalningsläge:"
do_you_want_to_disable_the_user_s_subscription: "Vill du avaktivera användarens prenumeration:"
elements_to_refund: "Element att återbetala"
description: "Beskrivning"
description_optional: "Beskrivning (frivillig):"
will_appear_on_the_refund_invoice: "Kommer att visas på kreditnota."
none: "Inget" #grammar concordance with payment mean
by_cash: "Med kontanter"
by_cheque: "Med check"
by_transfer: "Med överföring"
by_wallet: "Med plånbok"
you_must_select_at_least_one_element_to_create_a_refund: "Du måste välja minst ett element för att skapa en återbetalning."
unable_to_create_the_refund: "Det går inte att skapa återbetalning"
invoice_reference_successfully_saved: "Fakturareferens sparades."
an_error_occurred_while_saving_invoice_reference: "Ett fel inträffade när fakturareferensen skulle sparas."
invoicing_code_succesfully_saved: "Fakturareferens sparades."
an_error_occurred_while_saving_the_invoicing_code: "Ett fel inträffade när faktureringskoden skulle sparas."
code_successfully_activated: "Koden har aktiverats."
code_successfully_disabled: "Koden har inaktiverats."
an_error_occurred_while_activating_the_invoicing_code: "Ett fel inträffade när faktureringskoden skulle aktiveras."
order_number_successfully_saved: "Ordernumret har sparats."
an_error_occurred_while_saving_the_order_number: "Ett fel inträffade när ordernumret skulle sparas."
VAT_rate_successfully_saved: "Momssatsen har sparats."
an_error_occurred_while_saving_the_VAT_rate: "Ett fel inträffade när momssatsen skulle sparas."
VAT_successfully_activated: "Moms har aktiverats."
VAT_successfully_disabled: "Moms har inaktiverats."
an_error_occurred_while_activating_the_VAT: "Ett fel inträffade vid aktivering av moms."
text_successfully_saved: "Texten har sparats."
an_error_occurred_while_saving_the_text: "Ett fel inträffade när texten skulle sparas."
address_and_legal_information_successfully_saved: "Adress och juridisk information har sparats."
an_error_occurred_while_saving_the_address_and_the_legal_information: "Ett fel inträffade när adressen och den juridiska informationen skulle sparas."
logo_successfully_saved: "Logotypen har sparats."
an_error_occurred_while_saving_the_logo: "Ett fel inträffade när logotypen skulle sparas."
filename: "Filnamn"
schedule_filename: "Schemafilnamn"
prefix_info: "Fakturorna kommer att genereras som PDF-filer, namngivna med följande prefix."
schedule_prefix_info: "Betalningsplanerna kommer att genereras som PDF-filer, namngivna med följande prefix."
prefix: "Prefix"
prefix_successfully_saved: "File prefix successfully saved"
an_error_occurred_while_saving_the_prefix: "An error occurred while saving the file prefix"
online_payment: "Online payment"
close_accounting_period: "Close an accounting period"
close_from_date: "Close from"
start_date_is_required: "Start date is required"
close_until_date: "Close until"
end_date_is_required: "End date is required"
previous_closings: "Previous closings"
start_date: "From"
end_date: "To"
closed_at: "Closed at"
prefix_successfully_saved: "Filprefix har sparats"
an_error_occurred_while_saving_the_prefix: "Ett fel inträffade när filprefixet skulle sparas"
online_payment: "Onlinebetalning"
close_accounting_period: "Stäng en redovisningsperiod"
close_from_date: "Stäng från"
start_date_is_required: "Startdatum krävs"
close_until_date: "Stäng till"
end_date_is_required: "Slutdatum krävs"
previous_closings: "Tidigare stängningar"
start_date: "Från"
end_date: "Till"
closed_at: "Stängd vid"
closed_by: "By"
period_total: "Period total"
perpetual_total: "Perpetual total"
@ -1230,6 +1230,7 @@ sv:
local_database: "Local database"
o_auth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
group_form:
add_a_group: "Add a group"
group_name: "Group name"
@ -1496,6 +1497,10 @@ sv:
api_field: "Userinfo claim"
api_field_help_html: 'Set the field providing the corresponding data through <a href="https://openid.net/specs/openid-connect-core-1_0.html#Claims" target="_blank">the userinfo endpoint</a>.<br> <a href="https://jsonpath.com/" target="_blank">JsonPath</a> syntax is supported. If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name'
openid_standard_configuration: "Use the OpenID standard configuration"
saml_data_mapping_form:
api_field: "Userinfo field"
api_field_help_html: "Set the field providing the corresponding data through the SAML assertion.<br> If many fields are selected, the first one will be used.<br> <b>Example</b>: $.data[*].name"
openid_standard_configuration: "Use the SAML standard configuration"
type_mapping_modal:
data_mapping: "Data mapping"
TYPE_expected: "{TYPE} expected"
@ -1552,6 +1557,16 @@ sv:
client__end_session_endpoint_help: "The url to call to log the user out at the authorization server."
extra_authorize_params: "Extra authorize parameters"
extra_authorize_params_help: "A hash of extra fixed parameters that will be merged to the authorization request"
saml_form:
authorization_callback_url: "Authorization callback URL"
sp_entity_id: "Service provider entity ID"
sp_entity_id_help: "The name of your application. Some identity providers might need this to establish the identity of the service provider requesting the login."
idp_sso_service_url: "Identity provider SSO service URL"
idp_sso_service_url_help: "The URL to which the authentication request should be sent. This would be on the identity provider."
idp_cert_fingerprint: "Identity provider certificate fingerprint"
idp_cert: "Identity provider certificate"
profile_edition_url: "Profil edition URL"
profile_edition_url_help: "The URL of the page where the user can edit his profile."
provider_form:
name: "Name"
authentication_type: "Authentication type"
@ -1562,6 +1577,7 @@ sv:
local_database: "Local database"
oauth2: "OAuth 2.0"
openid_connect: "OpenID Connect"
saml: "SAML"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "Add a new authentication provider"

View File

@ -1230,6 +1230,7 @@ zu:
local_database: "crwdns25688:0crwdne25688:0"
o_auth2: "crwdns25690:0crwdne25690:0"
openid_connect: "crwdns25692:0crwdne25692:0"
saml: "crwdns38138:0crwdne38138:0"
group_form:
add_a_group: "crwdns25694:0crwdne25694:0"
group_name: "crwdns25696:0crwdne25696:0"
@ -1496,6 +1497,10 @@ zu:
api_field: "crwdns26098:0crwdne26098:0"
api_field_help_html: 'crwdns26100:0crwdne26100:0'
openid_standard_configuration: "crwdns26102:0crwdne26102:0"
saml_data_mapping_form:
api_field: "crwdns38140:0crwdne38140:0"
api_field_help_html: "crwdns38142:0crwdne38142:0"
openid_standard_configuration: "crwdns38144:0crwdne38144:0"
type_mapping_modal:
data_mapping: "crwdns26104:0crwdne26104:0"
TYPE_expected: "crwdns26106:0{TYPE}crwdne26106:0"
@ -1552,6 +1557,16 @@ zu:
client__end_session_endpoint_help: "crwdns26202:0crwdne26202:0"
extra_authorize_params: "crwdns37725:0crwdne37725:0"
extra_authorize_params_help: "crwdns37727:0crwdne37727:0"
saml_form:
authorization_callback_url: "crwdns38146:0crwdne38146:0"
sp_entity_id: "crwdns38148:0crwdne38148:0"
sp_entity_id_help: "crwdns38150:0crwdne38150:0"
idp_sso_service_url: "crwdns38152:0crwdne38152:0"
idp_sso_service_url_help: "crwdns38154:0crwdne38154:0"
idp_cert_fingerprint: "crwdns38156:0crwdne38156:0"
idp_cert: "crwdns38158:0crwdne38158:0"
profile_edition_url: "crwdns38160:0crwdne38160:0"
profile_edition_url_help: "crwdns38162:0crwdne38162:0"
provider_form:
name: "crwdns26204:0crwdne26204:0"
authentication_type: "crwdns26206:0crwdne26206:0"
@ -1562,6 +1577,7 @@ zu:
local_database: "crwdns26214:0crwdne26214:0"
oauth2: "crwdns26216:0crwdne26216:0"
openid_connect: "crwdns26218:0crwdne26218:0"
saml: "crwdns38164:0crwdne38164:0"
#create a new authentication provider (SSO)
authentication_new:
add_a_new_authentication_provider: "crwdns26220:0crwdne26220:0"

View File

@ -289,9 +289,9 @@ es-MX:
notify_member_about_coupon:
subject: "Cupón"
body:
enjoy_a_discount_of_PERCENT_with_code_CODE: "Disfruta de un descuento del %{PERCENT}% en toda la web con el código %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} en toda la web con el código %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Este cupón es válido {USAGE, plural, =1{just once} other{many times}}: para todas tus compras {TYPE, select, amount_off{at least equal to the amount of the coupon} other{}}, desde ahora {DATE, select, NO-DATE{and without time limit} other{and until {DATE}}}."
enjoy_a_discount_of_PERCENT_with_code_CODE: "Disfruta de un descuento del %{PERCENT}% en todo el sitio con el código %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} en todo el sitio con el código %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Este cupón es válido {USAGE, plural, =1{une vez} other{varias veces}}: para todas tus compras {TYPE, select, amount_off{al menos igual al valor del cupón} other{}}, desde ahora {DATE, select, NO-DATE{y sin limite de tiempo} other{y hasta {DATE}}}."
notify_admin_free_disk_space:
subject: "Poco espacio libre en disco"
body: "Advertencia: el espacio disponible en el servidor que aloja Fab-manager es inferior a %{THRESHOLD} MiB. Esto puede afectar a su funcionamiento y evitar que se guarden algunos datos. Actualmente, hay %{AVAILABLE} MiB de espacio libre en el disco del punto de montaje."

View File

@ -289,9 +289,9 @@ es:
notify_member_about_coupon:
subject: "Cupón"
body:
enjoy_a_discount_of_PERCENT_with_code_CODE: "Disfruta de un descuento del %{PERCENT}% en toda la web con el código %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} en toda la web con el código %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Este cupón es válido {USAGE, plural, =1{just once} other{many times}}: para todas tus compras {TYPE, select, amount_off{at least equal to the amount of the coupon} other{}}, desde ahora {DATE, select, NO-DATE{and without time limit} other{and until {DATE}}}."
enjoy_a_discount_of_PERCENT_with_code_CODE: "Disfruta de un descuento del %{PERCENT}% en todo el sitio con el código %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Disfruta de un descuento de %{AMOUNT} en todo el sitio con el código %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Este cupón es válido {USAGE, plural, =1{une vez} other{varias veces}}: para todas tus compras {TYPE, select, amount_off{al menos igual al valor del cupón} other{}}, desde ahora {DATE, select, NO-DATE{y sin limite de tiempo} other{y hasta {DATE}}}."
notify_admin_free_disk_space:
subject: "Poco espacio libre en disco"
body: "Advertencia: el espacio disponible en el servidor que aloja Fab-manager es inferior a %{THRESHOLD} MiB. Esto puede afectar a su funcionamiento y evitar que se guarden algunos datos. Actualmente, hay %{AVAILABLE} MiB de espacio libre en el disco del punto de montaje."

View File

@ -138,353 +138,353 @@ sv:
subject: "Din FabLabkreditnota"
body:
please_find_attached_html: "Som bifogad fil hittar du din faktura från {DATE}med ett belopp på {AMOUNT} för din {TYPE, select, Reservation{reservation} WalletTransaction{wallet credit} other{subscription}}." #messageFormat interpolation
invoice_in_your_dashboard_html: "You can access your refund invoice in %{DASHBOARD} on the Fab Lab website."
your_dashboard: "your dashboard"
invoice_in_your_dashboard_html: "Du får tillgång till din kreditnota i %{DASHBOARD} på webbplatsen."
your_dashboard: "din kontrollpanel"
notify_member_subscription_will_expire_in_7_days:
subject: "Your subscription expires in 7 days"
subject: "Din prenumeration upphör om 7 dagar"
body:
your_plan: "you plan"
expires_in_7_days: "will expire in 7 days."
to_renew_your_plan_follow_the_link: "Please, follow this link to renew your plan"
your_plan: "din plan"
expires_in_7_days: "kommer att löpa ut om 7 dagar."
to_renew_your_plan_follow_the_link: "Följ denna länk för att förnya din plan"
notify_member_training_authorization_expired:
subject: "Your authorization was revoked"
subject: "Din auktorisation har återkallats"
body:
training_expired_html: "<p>You took the %{TRAINING} training, on %{DATE}.</p><p>Your authorization for this training, valid for %{PERIOD} months, has expired.</p><p>Please validate it again in order to be able to reserve the %{MACHINES}</p>."
training_expired_html: "<p>Du gick %{TRAINING} utbildning, på %{DATE}.</p><p>Din auktorisering för denna utbildning, giltig för %{PERIOD} månader, har löpt ut.</p><p>Vänligen validera den igen för att kunna reservera %{MACHINES}</p>."
notify_member_training_auto_cancelled:
subject: "Your training session was cancelled"
subject: "Din utbildning avbröts"
body:
cancelled_training: "The %{TRAINING} training session scheduled for %{DATE}, from %{START} to %{END} has been canceled due to an insufficient number of participants."
auto_refund: "You were refunded on your wallet and a credit note should be available."
cancelled_training: "Utbildningen %{TRAINING} är planerad den %{DATE}, från %{START} till %{END} har avbrutits på grund av otillräckligt antal deltagare."
auto_refund: "Du har återbetalats till din plånbok och en kreditfaktura är tillgänglig."
notify_member_training_invalidated:
subject: "Your authorization was invalidated"
subject: "Din auktorisation har återkallats"
body:
training_invalidated_html: "<p>You took the %{TRAINING} training, on %{DATE} giving you access to the %{MACHINES}.</p><p>Due to the lack of reservations for one of these machines during the last %{PERIOD} months, your authorization has been invalidated.</p><p>Please validate the training again in order to continue reserving these machines.</p>."
training_invalidated_html: "<p>Du gick %{TRAINING} -utbildningen, på %{DATE} vilket ger dig tillgång till %{MACHINES}.</p><p>På grund av bristen på reservationer för utrustningen under de senaste %{PERIOD} månaderna, din auktorisering har ogiltigförklarats.</p><p>Vänligen bekräfta utbildningen igen för att fortsätta reservera denna utrustning.</p>."
notify_member_subscription_is_expired:
subject: "Your subscription has expired"
subject: "Din prenumeration har löpt ut"
body:
your_plan: "You plan"
has_expired: "has expired."
you_can_go_to: "Please go to"
to_renew_your_plan: "to renew you plan"
your_plan: "Din plan"
has_expired: "har gått ut."
you_can_go_to: "Gå till"
to_renew_your_plan: "för att förnya din plan"
notify_admin_subscription_will_expire_in_7_days:
subject: "A member subscription expires in 7 days"
subject: "Ett medlemsabonnemang löper ut om 7 dagar"
body:
subscription_will_expire_html: "Subscription plan for user %{NAME} <strong><em>%{PLAN}</em></strong> will expire in 7 days."
subscription_will_expire_html: "Prenumerationsplan för användaren %{NAME} <strong><em>%{PLAN}</em></strong> löper ut om 7 dagar."
notify_admin_training_auto_cancelled:
subject: "A training was automatically cancelled"
subject: "En utbildning avbröts automatiskt"
body:
cancelled_training: "The %{TRAINING} training session scheduled for %{DATE}, from %{START} to %{END} has been automatically canceled due to an insufficient number of participants."
auto_refund: "The members who have booked this training session were automatically refunded on their wallet and credit notes was generated."
manual_refund: "Please manually refund all members who have booked this training session and generate the credit notes."
cancelled_training: "Utbildningen %{TRAINING} är planerad den %{DATE}, från %{START} till %{END} har avbrutits på grund av otillräckligt antal deltagare."
auto_refund: "Medlemmarna som har bokat detta träningspass återbetalades automatiskt till sin plånbok och kreditnotor genererades."
manual_refund: "Vänligen återbetala alla medlemmar som har bokat denna utbildning manuellt och generera kreditfakturor."
notify_admin_subscription_is_expired:
subject: "A member subscription has expired"
subject: "En medlemsprenumeration har avbrutits"
body:
subscription_expired_html: "Subscription plan for user %{NAME} <strong><em>%{PLAN}</em></strong> is now expired."
subscription_expired_html: "Prenumerationsplan för användaren %{NAME} <strong><em>%{PLAN}</em></strong> har nu löpt ut."
notify_admin_subscription_canceled:
subject: "A member subscription has been cancelled"
subject: "En medlemsprenumeration har avbrutits"
body:
subscription_canceled_html: "Subscription <strong><em>%{PLAN}</em></strong> for user %{NAME} has been cancelled."
subscription_canceled_html: "Prenumeration <strong><em>%{PLAN}</em></strong> för användaren %{NAME} har avbrutits."
notify_member_subscription_canceled:
subject: "Your subscription has been cancelled"
subject: "Din prenumeration har avbrutits"
body:
your_plan_was_canceled: "Your subscription plan has been cancelled."
your_plan: "your subscription plan"
end_at: "ends on"
your_plan_was_canceled: "Din prenumeration har avbrutits."
your_plan: "din prenumerationsplan"
end_at: "slutar den"
notify_member_slot_is_canceled:
subject: "Your reservation has been canceled"
subject: "Din bokning har avbrutits"
body:
reservation_canceled: "Your reservation for %{RESERVABLE} has been canceled"
reservation_canceled: "Din bokning av %{RESERVABLE} har avbrutits"
notify_admin_slot_is_canceled:
subject: "A reservation has been cancelled"
subject: "En bokning har avbokats"
body:
member_cancelled: "User %{NAME} has cancelled his reservation"
item_details: "%{START} - %{END}, concerning %{RESERVABLE}"
generate_refund: "Do not forget to generate a credit note or a refund for this cancellation."
member_cancelled: "Användare %{NAME} har avbokat sin bokning"
item_details: "%{START} - %{END}, om %{RESERVABLE}"
generate_refund: "Glöm inte att generera en kreditfaktura eller en återbetalning för denna avbokning."
notify_admin_when_user_is_imported:
subject: "A user account has been imported from the SSO"
subject: "Ett användarkonto har importerats via SSO"
body:
new_account_imported: "A new user account (ID: %{ID}) has been imported to the website via %{PROVIDER}."
provider_uid: "its provider ID is: "
known_information: "Here is what we know about this provider:"
address_already_used: "This address is already associated with another user"
no_more_info_available: "No other info about this user can be provided before he completes his profile."
new_account_imported: "Ett nytt användarkonto (ID: %{ID}) har importerats till webbplatsen via %{PROVIDER}."
provider_uid: "dess leverantörs-ID är: "
known_information: "Här är vad vi vet om denna leverantör:"
address_already_used: "E-posten är redan kopplad till en annan användare"
no_more_info_available: "Ingen annan information om denna användare kan lämnas innan den slutför sin profil."
notify_user_profile_complete:
subject: "You now have access to the whole website"
subject: "Du har nu tillgång till hela webbplatsen"
body:
message: "Your account informations has been correctly updated, you now have access to the whole website."
message: "Dina kontoinformation har uppdaterats korrekt, du har nu tillgång till hela webbplatsen."
notify_user_auth_migration:
subject: "Important change to your FabLab account"
subject: "Viktiga ändringar i ditt konto"
body:
the_platform: "the website"
is_changing_its_auth_system_and_will_now_use: "is actually changing its user identification system and will use"
instead_of: "instead of"
consequence_of_the_modification: "Because of this change you won't be able to login to the website with your actual usernames"
to_use_the_platform_thanks_for: "To keep on using the website, please"
create_an_account_on: "create an account on"
or_use_an_existing_account_clicking_here: "or use an existing account by clicking here"
in_case_of_problem_enter_the_following_code: "In case of problem with this link, you can enter the following code at your first connection attempt in order to migrate your actual account into the new authentification system:"
the_platform: "webbplatsen"
is_changing_its_auth_system_and_will_now_use: "faktiskt ändra sitt användar-identifieringssystem och kommer att använda"
instead_of: "istället för"
consequence_of_the_modification: "På grund av denna förändring kommer du inte att kunna logga in på webbplatsen med dina faktiska användarnamn"
to_use_the_platform_thanks_for: "För att fortsätta använda webbplatsen, vänligen"
create_an_account_on: "skapa ett konto"
or_use_an_existing_account_clicking_here: "eller använd ett befintligt konto genom att klicka här"
in_case_of_problem_enter_the_following_code: "Vid problem med denna länk, kan du ange följande kod vid ditt första anslutningsförsök för att migrera ditt faktiska konto till det nya autentiseringssystemet:"
notify_admin_user_merged:
subject: "An imported account has been merged with an existing account"
subject: "Ett importerat konto har slagits samman med ett befintligt konto"
body:
imported_account_merged: "A previously imported user account via %{PROVIDER) has been merged with the existing account %{NAME}"
provider_uid: "its provider ID is:"
imported_account_merged: "Ett tidigare importerat användarkonto via %{PROVIDER) har slagits samman med det befintliga kontot %{NAME}"
provider_uid: "dess leverantörs-ID är:"
notify_admin_profile_complete:
subject: "An imported account has completed its profile"
subject: "Ett importerat konto har gjort klar sin profil"
body:
account_completed: "An user account has completed its profile:"
imported_account_completed: "An user account, previously imported through %{PROVIDER}, has completed its profile:"
provider_id: "its provider ID is:"
account_completed: "Ett användarkonto har gjort klart sin profil:"
imported_account_completed: "Ett användarkonto, som tidigare importerats via %{PROVIDER}, har gjort klart sin profil:"
provider_id: "dess leverantörs-ID är:"
notify_admin_abuse_reported:
subject: "An abusive content has been reported"
subject: "Kränkande innehåll har rapporterats"
body:
intro: "A user has flagged a content as abusive"
signaled_content: "flagged content:"
signaled_by: "flagged by:"
signaled_on: "flagged on:"
message: "Message:"
visit_management_interface: "Refer to the Reporting Management Interface for more information."
intro: "En användare har flaggat ett innehåll som kränkande"
signaled_content: "flaggat innehåll:"
signaled_by: "flaggad av:"
signaled_on: "flaggad den:"
message: "Meddelande:"
visit_management_interface: "Se rapporteringsgränssnittet för mer information."
notify_user_wallet_is_credited:
subject: "Your wallet has been credited"
subject: "Din plånbok har krediterats"
body:
wallet_credit_html: "Your wallet has been credited %{AMOUNT} by administrator."
wallet_credit_html: "Din plånbok har krediterats %{AMOUNT} av administratör."
notify_admin_user_wallet_is_credited:
subject: "The wallet of an user has been credited"
subject: "En användares plånbok har krediterats"
body:
wallet_credit_html: "The wallet of member %{USER} has been credited %{AMOUNT} by administrator %{ADMIN}."
wallet_credit_html: "Plånboken för medlemmen %{USER} har krediterats %{AMOUNT} av administratören %{ADMIN}."
notify_admin_export_complete:
subject: "Export completed"
subject: "Exporten är klar"
body:
you_asked_for_an_export: "You asked for an export"
statistics_global: "of all the statistics"
statistics_account: "of the registration statistics"
statistics_event: "of statistics about events"
statistics_machine: "of statistics about machine slots"
statistics_project: "of statistics about projects"
statistics_subscription: "of subscription statistics"
statistics_training: "of statistics about trainings"
statistics_space: "of statistics about spaces"
users_members: "of the members' list"
users_subscriptions: "of the subscriptions' list"
users_reservations: "of the reservations' list"
availabilities_index: "of the reservations availabilities"
accounting_acd: "of the accounting data to ACD"
accounting_vat: "of the collected VAT data"
click_to_download: "Excel file generated successfully. To download it, click"
here: "here"
you_asked_for_an_export: "Du bad om en export"
statistics_global: "av all statistik"
statistics_account: "av bokningsstatistiken"
statistics_event: "av statistik om evenemang"
statistics_machine: "av statistik om utrustningsbokningar"
statistics_project: "av statistik om projekt"
statistics_subscription: "av prenumerationsstatistik"
statistics_training: "av statistik om utbildningar"
statistics_space: "statistik om lokaler"
users_members: "av medlemslistan"
users_subscriptions: "av listan över prenumerationer"
users_reservations: "av bokningslistan"
availabilities_index: "av bokningens tillgänglighet"
accounting_acd: "av bokföringsdata till ACD"
accounting_vat: "av den ingående momsen"
click_to_download: "Excel-fil genererades framgångsrikt. För att ladda ner den, klicka"
here: "här"
file_type:
xlsx: "Excel"
csv: "CSV"
notify_admin_import_complete:
subject: "Import completed"
subject: "Import slutförd"
body:
you_made_an_import: "You have initiated an import %{CATEGORY}"
category_members: "of the members"
click_to_view_results: "Click here to view results"
you_made_an_import: "Du har initierat en import %{CATEGORY}"
category_members: "av medlemmarna"
click_to_view_results: "Klicka här för att se resultat"
notify_admin_low_stock_threshold:
subject: "Low stock alert"
subject: "Varning vid lågt lagersaldo"
body:
low_stock: "A new stock movement of %{PRODUCT} has exceeded the low stock threshold."
stocks_state_html: "Current stock status: <ul><li>internal: %{INTERNAL}</li><li>external: %{EXTERNAL}</li></ul>"
manage_stock: "Manage stocks for this product"
low_stock: "En ny lagerförflyttning av %{PRODUCT} har överskridit gränsen för lågt lager."
stocks_state_html: "Nuvarande lagerstatus: <ul><li>internt: %{INTERNAL}</li><li>externt: %{EXTERNAL}</li></ul>"
manage_stock: "Hantera lager för denna produkt"
notify_member_about_coupon:
subject: "Coupon"
subject: "Rabattkupong"
body:
enjoy_a_discount_of_PERCENT_with_code_CODE: "Enjoy a discount of %{PERCENT}% on the whole site with the code %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Enjoy a discount of %{AMOUNT} on the whole site with the code %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "This coupon is valid {USAGE, plural, =1{just once} other{many times}}: for all your purchases {TYPE, select, amount_off{at least equal to the amount of the coupon} other{}}, from now {DATE, select, NO-DATE{and without time limit} other{and until {DATE}}}."
enjoy_a_discount_of_PERCENT_with_code_CODE: "Erhåll %{PERCENT}% rabatt på webbplatsen med koden %{CODE}."
enjoy_a_discount_of_AMOUNT_with_code_CODE: "Erhåll %{AMOUNT}% rabatt på webbplatsen med koden %{CODE}."
this_coupon_is_valid_USAGE_times_until_DATE_for_all_your_purchases: "Denna kupong är giltig {USAGE, plural, =1{en gång} other{flera gånger}}: vid samtliga köp {TYPE, select, amount_off{som minst uppgår till kupongens värde} other{}}, fr. o. m. nu {DATE, select, NO-DATE{och utan bortre tidsgräns} other{t. o. m. {DATE}}}."
notify_admin_free_disk_space:
subject: "Low disk space"
body: "Warning: available disk space on the server hosting Fab-manager is less than %{THRESHOLD} MiB. This can affect its operation and prevent saving some data. Currently, %{AVAILABLE} MiB of free disk space remains available on the mount point."
subject: "Lågt diskutrymme"
body: "Varning: tillgängligt diskutrymme på serverns webbhotell är mindre än %{THRESHOLD} MiB. Detta kan påverka dess funktion och förhindra att vissa data sparas. För närvarande finns %{AVAILABLE} MiB ledigt diskutrymme kvar på monteringspunkten."
notify_admin_close_period_reminder:
subject: "Remind to close your accounting periods"
subject: "Påminnelse om att stänga dina bokföringsperioder"
body:
warning_last_closed_period_over_1_year: "Please remind to periodically close your accounting periods. Last closed period ended at %{LAST_END}."
warning_no_closed_periods: "Please remind to periodically close your accounting periods. You have to close periods from %{FIRST_DATE}."
warning_last_closed_period_over_1_year: "Vänligen kom ihåg att regelbundet stänga dina redovisningsperioder. Senast stängd period avslutades på %{LAST_END}."
warning_no_closed_periods: "Vänligen påminn om att regelbundet stänga dina bokföringsperioder. Du måste stänga perioder från %{FIRST_DATE}."
notify_admin_archive_complete:
subject: "Archiving completed"
subject: "Arkivering slutförd"
body:
archive_complete: "You have closed the accounting period from %{START} to %{END}. Archiving of data is now complete."
click_to_download: "To download the ZIP archive, click"
here: "here."
save_on_secured: "Remember that you must save this archive on a secured external support, which may be requested by the tax authorities during a check."
archive_complete: "Du har stängt redovisningsperioden från %{START} till %{END}. Arkivering av data är nu klar."
click_to_download: "För att ladda ner ZIP-arkivet, klicka"
here: "här."
save_on_secured: "Kom ihåg att du måste spara detta arkiv på en säker extern plats som skattemyndigheterna kan begära ut dem från vid en kontroll."
notify_privacy_policy_changed:
subject: "Privacy policy updated"
subject: "Integritetspolicy uppdaterad"
body:
content_html: "<p>We wish to inform you that we have just updated our privacy policy.</p><p>We may change our privacy policy regularly. In accordance with the regulations, you will receive a notification for each update.</p><p>By accessing or using our services after the privacy policy update, we will consider that you agree its terms, updates included.</p>"
link_to_policy: "Click here to view the privacy policy."
content_html: "<p>Vi vill informera dig om att vi just har uppdaterat vår sekretesspolicy.</p><p>Vi kan komma att ändra vår sekretesspolicy regelbundet. I enlighet med reglerna får du en avisering för varje uppdatering.</p><p>Genom att få tillgång till eller använda våra tjänster efter integritetspolicyuppdateringen, kommer vi att överväga att du godkänner dess villkor, inklusive uppdateringar.</p>"
link_to_policy: "Klicka här för att se sekretesspolicyn."
notify_admin_refund_created:
subject: "A refund has been generated"
subject: "En återbetalning har skapats"
body:
refund_created: "A refund of %{AMOUNT} has been generated on invoice %{INVOICE} of user %{USER}"
wallet_refund_created: "A refund of %{AMOUNT} has been generated for the credit of the wallet of user %{USER}"
download: "Click here to download this refund invoice"
refund_created: "Återbetalning av %{AMOUNT} har genererats på faktura %{INVOICE} för användaren %{USER}"
wallet_refund_created: "En återbetalning av %{AMOUNT} har skapats för användarens plånbok %{USER}"
download: "Klicka här för att ladda ner denna kreditnota"
notify_admins_role_update:
subject: "The role of a user has changed"
subject: "Rollen för en användare har ändrats"
body:
user_role_changed_html: "The role of the user <em><strong>%{NAME}</strong></em> has changed."
previous_role: "Previous role:"
new_role: "New role:"
user_role_changed_html: "Rollen för användaren <em><strong>%{NAME}</strong></em> har ändrats."
previous_role: "Föregående roll:"
new_role: "Ny roll:"
notify_user_role_update:
subject: "Your role has changed"
subject: "Din roll har ändrats"
body:
role_changed_html: "Your role at {GENDER, select, male{the} female{the} neutral{} other{the}} {NAME} has changed. You are now <strong>{ROLE}</strong>.<br/>With great power comes great responsibility, use your new privileges fairly and respectfully."
role_changed_html: "Din roll på {GENDER, select, male{} female{} neutral{} other{}} {NAME} har ändrats. Du är nu <strong>{ROLE}</strong>.<br/>Med stor kraft kommer stort ansvar, använd dina nya privilegier rättvist och respektfullt."
notify_admin_objects_stripe_sync:
subject: "Stripe synchronization"
subject: "Stripe-synkronisering"
body:
objects_sync: "All members, coupons, machines, trainings, spaces and plans were successfully synchronized on Stripe."
objects_sync: "Alla medlemmar, kuponger, utrustning, utbildningar, lokaler och planer synkroniserades framgångsrikt på Stripe."
notify_admin_order_is_paid:
subject: "New order"
subject: "Ny beställning"
body:
order_placed: "A new order (%{REFERENCE}) has been placed and paid by %{USER}."
order_placed: "En ny beställning (%{REFERENCE}) har lagts och betalats av %{USER}."
view_details: ""
notify_member_payment_schedule_ready:
subject: "Your payment schedule"
subject: "Ditt betalningsschema"
body:
please_find_attached_html: "Please find attached your payment schedule, issued on {DATE}, with an amount of {AMOUNT} concerning your {TYPE, select, Reservation{reservation} other{subscription}}." #messageFormat interpolation
schedule_in_your_dashboard_html: "You can find this payment schedule at any time from %{DASHBOARD} on the Fab Lab's website."
your_dashboard: "your dashboard"
please_find_attached_html: "är ser du ditt bifogade betalningsschema, utfärdat på {DATE}, med ett belopp av {AMOUNT} om din {TYPE, select, Reservation{bokning} other{prenumeration}}." #messageFormat interpolation
schedule_in_your_dashboard_html: "Du hittar detta betalningsschema när som helst i %{DASHBOARD} på webbplatsen."
your_dashboard: "din kontrollpanel"
notify_admin_payment_schedule_error:
subject: "[URGENT] Card debit error"
subject: "[URGENT] Kortdebitering misslyckades"
body:
remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, an error occurred and this card debit was unable to complete successfully."
action: "Please then consult the %{GATEWAY} dashboard and contact the member as soon as possible to resolve the problem."
remember: "I enlighet med ditt %{REFERENCE} betalningsschema planerades ett kortköp på %{AMOUNT} den %{DATE}."
error: "Tyvärr inträffade ett fel och denna kortdebitering kunde inte slutföras."
action: "Vänligen konsultera sedan %{GATEWAY} kontrollpanelen och kontakta medlemmen så snart som möjligt för att lösa problemet."
notify_member_payment_schedule_error:
subject: "[URGENT] Card debit error"
subject: "[URGENT] Kortdebitering misslyckades"
body:
remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, an error occurred and this card debit was unable to complete successfully."
action: "Please contact a manager as soon as possible to resolve the problem."
remember: "I enlighet med ditt %{REFERENCE} betalningsschema planerades ett kortköp på %{AMOUNT} den %{DATE}."
error: "Tyvärr inträffade ett fel och denna kortdebitering kunde inte slutföras."
action: "Kontakta en ansvarig så snart som möjligt för att lösa problemet."
notify_admin_payment_schedule_failed:
subject: "[URGENT] Card debit failure"
subject: "[URGENT] Kortdebitering misslyckades"
body:
remember: "In accordance with the %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, this card debit was unable to complete successfully."
action: "Please contact the member as soon as possible, then go to the payment schedule management interface to resolve the problem. After a certain period of time, the card subscription could be cancelled."
remember: "I enlighet med ditt %{REFERENCE} betalningsschema planerades ett kortköp på %{AMOUNT} den %{DATE}."
error: "Tyvärr inträffade ett fel och denna kortdebitering kunde inte slutföras."
action: "Vänligen kontakta medlemmen så snart som möjligt, gå sedan till betalningsschemats hanteringsgränssnitt för att lösa problemet. Efter en viss tidsperiod kan kortprenumerationen avbrytas."
notify_member_payment_schedule_failed:
subject: "[URGENT] Card debit failure"
subject: "[URGENT] Kortdebitering misslyckades"
body:
remember: "In accordance with your %{REFERENCE} payment schedule, a debit by card of %{AMOUNT} was scheduled on %{DATE}."
error: "Unfortunately, this card debit was unable to complete successfully."
action_html: "Please check %{DASHBOARD} or contact a manager quickly, otherwise your subscription may be interrupted."
your_dashboard: "your dashboard"
remember: "I enlighet med ditt %{REFERENCE} betalningsschema planerades ett kortköp på %{AMOUNT} den %{DATE}."
error: "Tyvärr kunde inte kortdebiteringen slutföras."
action_html: "Vänligen kontrollera %{DASHBOARD} eller kontakta en ansvarig snabbt, annars kan ditt abonnemang avbrytas."
your_dashboard: "din kontrollpanel"
notify_admin_payment_schedule_gateway_canceled:
subject: "[URGENT] Payment schedule canceled by the payment gateway"
subject: "[URGENT] Betalningsschema avbruten av betalningsleverantör"
body:
error: "The payment schedule %{REFERENCE} was canceled by the payment gateway (%{GATEWAY}). No further debits will be made on this payment mean."
action: "Please consult the payment schedule management interface and contact the member as soon as possible to resolve the problem."
error: "Betalningsschemat %{REFERENCE} avbröts av betalningsleverantören (%{GATEWAY}). Inga ytterligare debiteringar kommer att göras på denna betalning."
action: "Vänligen konsultera betalningsschemats administrationsgränssnitt och kontakta medlemmen så snart som möjligt för att lösa problemet."
notify_member_payment_schedule_gateway_canceled:
subject: "[URGENT] Payment schedule canceled by the payment gateway"
subject: "[URGENT] Betalningsschema avbruten av betalningsleverantör"
body:
error: "Your payment schedule %{REFERENCE} was canceled by the payment gateway. No further debits will be made on this payment mean."
action: "Please contact a manager as soon as possible to resolve the problem."
error: "Ditt betalningsschema %{REFERENCE} avbröts av betalningsleverantören. Inga ytterligare debiteringar kommer att göras på denna betalning."
action: "Kontakta en ansvarig så snart som möjligt för att lösa problemet."
notify_admin_payment_schedule_check_deadline:
subject: "Payment deadline"
subject: "Betalningsfrist"
body:
remember: "In accordance with the %{REFERENCE} payment schedule, %{AMOUNT} was due to be debited on %{DATE}."
date: "This is a reminder to cash the scheduled check as soon as possible."
confirm: "Do not forget to confirm the receipt in your payment schedule management interface, so that the corresponding invoice will be generated."
remember: "I enlighet med %{REFERENCE} betalningsschemat skulle %{AMOUNT} debiteras den %{DATE}."
date: "Detta är en påminnelse om att betala så snart som möjligt."
confirm: "Glöm inte att bekräfta kvittot i ditt schemas hanteringsgränssnitt, så att motsvarande faktura kommer att genereras."
notify_member_payment_schedule_transfer_deadline:
subject: "Payment deadline"
subject: "Betalningsfrist"
body:
remember: "In accordance with your %{REFERENCE} payment schedule, %{AMOUNT} was due to be debited on %{DATE}."
date: "This is a reminder to verify that the direct bank debit was successfull."
confirm: "Please confirm the receipt of funds in your payment schedule management interface, so that the corresponding invoice will be generated."
remember: "I enlighet med ditt %{REFERENCE} betalningsschema skulle %{AMOUNT} debiteras på %{DATE}."
date: "Detta är en påminnelse om att kontrollera att banköverföringen var framgångsrik."
confirm: "Vänligen bekräfta mottagandet av pengar i ditt schemahanteringsgränssnitt, så att motsvarande faktura kommer att genereras."
notify_member_reservation_limit_reached:
subject: "Daily reservation limit reached"
subject: "Den dagliga bokningsgränsen har uppnåtts"
body:
limit_reached: "For %{DATE}, you have reached your daily limit of %{HOURS} hours of %{ITEM} reservation."
limit_reached: "För %{DATE} har du nått din dagliga gräns för %{HOURS} timmar av %{ITEM} bokningar."
notify_admin_user_supporting_document_files_created:
subject: "Supporting documents uploaded by a member"
subject: "Underlag uppladdat av medlemmen"
body:
supporting_document_files_uploaded_below: "Member %{NAME} has uploaded the following supporting documents:"
validate_user: "Please validate this account"
supporting_document_files_uploaded_below: "Medlem %{NAME} har laddat upp följande underlag:"
validate_user: "Vänligen bekräfta detta konto"
notify_admin_user_supporting_document_files_updated:
subject: "Member's supporting documents have changed"
subject: "Medlemmens underlag har ändrats"
body:
user_update_supporting_document_file: "Member %{NAME} has modified the supporting documents below:"
validate_user: "Please validate this account"
user_update_supporting_document_file: "Medlem %{NAME} har ändrat dokumenten nedan:"
validate_user: "Vänligen bekräfta detta konto"
notify_admin_user_child_supporting_document_files_created:
subject: "Supporting documents of child uploaded by a member"
subject: "Underlag för barn uppladdat av medlemmen"
body:
supporting_document_files_uploaded_below: "Child %{NAME} has uploaded the following supporting documents:"
validate_child: "Please validate this child account"
supporting_document_files_uploaded_below: "Child %{NAME} har laddat upp följande underlag:"
validate_child: "Vänligen bekräfta detta barnkonto"
notify_admin_user_child_supporting_document_files_updated:
subject: "Child's supporting documents have changed"
subject: "Barnets underlag har ändrats"
body:
child_update_supporting_document_file: "Child %{NAME} has modified the supporting documents below:"
validate_child: "Please validate this child account"
child_update_supporting_document_file: "Child %{NAME} har ändrat underlagen nedan:"
validate_child: "Vänligen bekräfta detta barnkonto"
notify_user_is_validated:
subject: "Account validated"
subject: "Konto bekräftat"
body:
account_validated: "Your account was validated. Now, you have access to booking features."
account_validated: "Ditt konto har bekräftats. Nu har du tillgång till bokningsfunktioner."
notify_user_is_invalidated:
subject: "Account invalidated"
subject: "Kontot ogiltigförklarat"
body:
account_invalidated: "Your account was invalidated. You won't be able to book anymore, until your account is validated again."
account_invalidated: "Ditt konto har ogiltigförklarats. Du kommer inte att kunna boka igen förrän ditt konto har validerats."
notify_user_child_is_validated:
subject: "Child account validated"
subject: "Barnkonto validerat"
body:
child_validated: "Your child account was validated. Now, you have access to event booking features."
child_validated: "Ditt barnkonto har validerats. Nu har du tillgång till bokningsfunktioner för evenemang."
notify_user_child_is_invalidated:
subject: "Child account invalidated"
subject: "Barnkonto ogiltigförklarat"
body:
child_invalidated: "Your child account was invalidated. You won't be able to book event, until your child account is validated again."
child_invalidated: "Ditt barnkonto har ogiltigförklarats. Du kommer inte att kunna boka evenemang, förrän ditt barnkonto har validerats igen."
notify_user_supporting_document_refusal:
subject: "Your supporting documents were refused"
subject: "Dina underlag avvisades"
body:
user_supporting_document_files_refusal: "Your supporting documents were refused:"
action: "Please re-upload some new supporting documents."
user_supporting_document_files_refusal: "Dina underlag avvisades:"
action: "Vänligen ladda upp några nya underlag."
notify_user_supporting_document_reminder:
subject: "Reminder to upload your supporting documents"
subject: "Påminnelse om att ladda upp dina underlag"
body:
user_supporting_document_reminder: "This is a reminder for you to upload your supporting documents."
user_supporting_document_reminder: "Detta är en påminnelse för dig att ladda upp dina underlag."
notify_admin_user_supporting_document_refusal:
subject: "A member's supporting documents were refused"
subject: "Medlemmens underlag avvisades"
body:
user_supporting_document_files_refusal: "Member %{NAME}'s supporting documents were rejected by %{OPERATOR}:"
user_supporting_document_files_refusal: "Medlem %{NAME} s underlag avvisades av %{OPERATOR}:"
notify_user_child_supporting_document_refusal:
subject: "Your child's supporting documents were refused"
subject: "Ditt barns underlag avvisades"
body:
user_child_supporting_document_files_refusal: "Your supporting documents were refused:"
action: "Please re-upload some new supporting documents."
user_child_supporting_document_files_refusal: "Dina underlag avvisades:"
action: "Vänligen ladda upp några nya underlag."
notify_admin_user_child_supporting_document_refusal:
subject: "A child's supporting documents were refused"
subject: "Ditt barns underlag avvisades"
body:
user_child_supporting_document_files_refusal: "Child %{NAME}'s supporting documents were rejected by %{OPERATOR}:"
user_child_supporting_document_files_refusal: "Barnet %{NAME} s underlag avvisades av %{OPERATOR}:"
shared:
hello: "Hello %{user_name}"
hello: "Hej %{user_name}"
notify_user_order_is_ready:
subject: "Your command is ready"
subject: "Din beställning är redo"
body:
notify_user_order_is_ready: "Your command %{REFERENCE} is ready:"
notify_user_order_is_ready: "Din beställning %{REFERENCE} är redo:"
notify_user_order_is_canceled:
subject: "Your command was canceled"
subject: "Din beställning är avbruten"
body:
notify_user_order_is_canceled: "Your command %{REFERENCE} was canceled."
notify_user_order_is_canceled: "Din beställning %{REFERENCE} är avbruten."
notify_user_order_is_refunded:
subject: "Your command was refunded"
subject: "Din beställning har återbetalats"
body:
notify_user_order_is_refunded: "Your command %{REFERENCE} was refunded."
notify_user_order_is_refunded: "Din beställning %{REFERENCE} har återbetalats."
notify_member_reservation_validated:
subject: "Your reservation was validated"
subject: "Din bokning har godkänts"
body:
reservation_validated_html: "<strong><em>%{RESERVABLE}</em></strong> was validated."
your_reserved_slots: "Your reserved slots are:"
reservation_validated_html: "<strong><em>%{RESERVABLE}</em></strong> godkändes."
your_reserved_slots: "Dina bokade platser är:"
notify_admin_reservation_validated:
subject: "Pre-registration was validated"
subject: "Din förbokning har godkänts"
body:
reservation_validated_html: "<strong><em>%{RESERVABLE}</em></strong> of %{NAME} was validated."
reserved_slots: "Reserved slots are:"
reservation_validated_html: "<strong><em>%{RESERVABLE}</em></strong> godkändes."
reserved_slots: "Bokade platser är:"
notify_member_reservation_invalidated:
subject: "Your pre-registration wasn't validated"
subject: "Din förbokning har avslagits"
body:
reservation_invalidated_html: "<strong><em>%{RESERVABLE}</em></strong> wasn't validated."
reservation_invalidated_html: "<strong><em>%{RESERVABLE}</em></strong> avslogs."
notify_admin_reservation_invalidated:
subject: "Pre-registration wasn't validated"
subject: "Din förbokning har avslagits"
body:
reservation_invalidated_html: "<strong><em>%{RESERVABLE}</em></strong> of %{NAME} wasn't validated."
reservation_invalidated_html: "<strong><em>%{RESERVABLE}</em></strong> i %{NAME} avslogs."
notify_user_when_child_age_will_be_18:
subject: "Your child will be 18 years old"
subject: "Ditt barn kommer att vara 18 år"
body:
child_age_will_be_18_years_ago: "Your child %{NAME} will turn 18 on %{DATE}, at which point they will be automatically detached from your Family account. They will need to create their own account in order to make reservations."
child_age_will_be_18_years_ago: "Ditt barn %{NAME} kommer att fylla 18 den %{DATE}, och det kommer automatiskt att kopplas bort från ditt familjekonto. Det måste skapa ett eget konto för att kunna göra reservationer."

View File

@ -0,0 +1,10 @@
class CreateSamlProviders < ActiveRecord::Migration[7.0]
def change
create_table :saml_providers do |t|
t.string :sp_entity_id
t.string :idp_sso_service_url
t.timestamps
end
end
end

View File

@ -0,0 +1,7 @@
# frozen_string_literal:true
class AddProfileUrlToSamlProviders < ActiveRecord::Migration[7.0]
def change
add_column :saml_providers, :profile_url, :string
end
end

View File

@ -0,0 +1,6 @@
class AddIdpCertToSamlProvider < ActiveRecord::Migration[7.0]
def change
add_column :saml_providers, :idp_cert, :string
add_column :saml_providers, :idp_cert_fingerprint, :string
end
end

View File

@ -9,6 +9,13 @@ SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: public; Type: SCHEMA; Schema: -; Owner: -
--
-- *not* creating schema, since initdb creates it
--
-- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: -
--
@ -2235,6 +2242,41 @@ CREATE SEQUENCE public.payment_gateway_objects_id_seq
ALTER SEQUENCE public.payment_gateway_objects_id_seq OWNED BY public.payment_gateway_objects.id;
--
-- Name: payment_infos; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.payment_infos (
id bigint NOT NULL,
data jsonb,
state character varying,
payment_for character varying,
service character varying,
statistic_profile_id bigint,
created_at timestamp(6) without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL
);
--
-- Name: payment_infos_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.payment_infos_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: payment_infos_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.payment_infos_id_seq OWNED BY public.payment_infos.id;
--
-- Name: payment_schedule_items; Type: TABLE; Schema: public; Owner: -
--
@ -3224,6 +3266,41 @@ CREATE SEQUENCE public.roles_id_seq
ALTER SEQUENCE public.roles_id_seq OWNED BY public.roles.id;
--
-- Name: saml_providers; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.saml_providers (
id bigint NOT NULL,
sp_entity_id character varying,
idp_sso_service_url character varying,
created_at timestamp(6) without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL,
profile_url character varying,
idp_cert character varying,
idp_cert_fingerprint character varying
);
--
-- Name: saml_providers_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.saml_providers_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: saml_providers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.saml_providers_id_seq OWNED BY public.saml_providers.id;
--
-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -
--
@ -4316,8 +4393,8 @@ CREATE TABLE public.users (
is_allow_newsletter boolean,
current_sign_in_ip inet,
last_sign_in_ip inet,
mapped_from_sso character varying,
validated_at timestamp without time zone,
mapped_from_sso character varying,
supporting_documents_reminder_sent_at timestamp(6) without time zone
);
@ -4870,6 +4947,13 @@ ALTER TABLE ONLY public.organizations ALTER COLUMN id SET DEFAULT nextval('publi
ALTER TABLE ONLY public.payment_gateway_objects ALTER COLUMN id SET DEFAULT nextval('public.payment_gateway_objects_id_seq'::regclass);
--
-- Name: payment_infos id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.payment_infos ALTER COLUMN id SET DEFAULT nextval('public.payment_infos_id_seq'::regclass);
--
-- Name: payment_schedule_items id; Type: DEFAULT; Schema: public; Owner: -
--
@ -5066,6 +5150,13 @@ ALTER TABLE ONLY public.reservations ALTER COLUMN id SET DEFAULT nextval('public
ALTER TABLE ONLY public.roles ALTER COLUMN id SET DEFAULT nextval('public.roles_id_seq'::regclass);
--
-- Name: saml_providers id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.saml_providers ALTER COLUMN id SET DEFAULT nextval('public.saml_providers_id_seq'::regclass);
--
-- Name: settings id; Type: DEFAULT; Schema: public; Owner: -
--
@ -5799,6 +5890,14 @@ ALTER TABLE ONLY public.payment_gateway_objects
ADD CONSTRAINT payment_gateway_objects_pkey PRIMARY KEY (id);
--
-- Name: payment_infos payment_infos_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.payment_infos
ADD CONSTRAINT payment_infos_pkey PRIMARY KEY (id);
--
-- Name: payment_schedule_items payment_schedule_items_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
@ -6023,6 +6122,14 @@ ALTER TABLE ONLY public.roles
ADD CONSTRAINT roles_pkey PRIMARY KEY (id);
--
-- Name: saml_providers saml_providers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.saml_providers
ADD CONSTRAINT saml_providers_pkey PRIMARY KEY (id);
--
-- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
@ -7004,6 +7111,13 @@ CREATE INDEX index_payment_gateway_objects_on_item_type_and_item_id ON public.pa
CREATE INDEX index_payment_gateway_objects_on_payment_gateway_object_id ON public.payment_gateway_objects USING btree (payment_gateway_object_id);
--
-- Name: index_payment_infos_on_statistic_profile_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_payment_infos_on_statistic_profile_id ON public.payment_infos USING btree (statistic_profile_id);
--
-- Name: index_payment_schedule_items_on_invoice_id; Type: INDEX; Schema: public; Owner: -
--
@ -7795,14 +7909,6 @@ CREATE INDEX proof_of_identity_type_id_and_proof_of_identity_refusal_id ON publi
CREATE UNIQUE INDEX unique_not_null_external_id ON public.invoicing_profiles USING btree (external_id) WHERE (external_id IS NOT NULL);
--
-- Name: accounting_periods accounting_periods_del_protect; Type: RULE; Schema: public; Owner: -
--
CREATE RULE accounting_periods_del_protect AS
ON DELETE TO public.accounting_periods DO INSTEAD NOTHING;
--
-- Name: accounting_periods accounting_periods_upd_protect; Type: RULE; Schema: public; Owner: -
--
@ -7836,6 +7942,14 @@ ALTER TABLE ONLY public.payment_schedules
ADD CONSTRAINT fk_rails_00308dc223 FOREIGN KEY (wallet_transaction_id) REFERENCES public.wallet_transactions(id);
--
-- Name: payment_infos fk_rails_0308366a58; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.payment_infos
ADD CONSTRAINT fk_rails_0308366a58 FOREIGN KEY (statistic_profile_id) REFERENCES public.statistic_profiles(id);
--
-- Name: cart_item_event_reservation_booking_users fk_rails_0964335a37; Type: FK CONSTRAINT; Schema: public; Owner: -
--
@ -9182,8 +9296,10 @@ INSERT INTO "schema_migrations" (version) VALUES
('20230328094808'),
('20230328094809'),
('20230331132506'),
('20230509121907'),
('20230509161557'),
('20230510141305'),
('20230511080650'),
('20230511081018'),
('20230524080448'),
('20230524083558'),
@ -9199,11 +9315,15 @@ INSERT INTO "schema_migrations" (version) VALUES
('20230720085857'),
('20230728072726'),
('20230728090257'),
('20230825101952'),
('20230828073428'),
('20230831103208'),
('20230901090637'),
('20230907124230'),
('20231103093436'),
('20231108094433');
('20231108094433'),
('20240116163703'),
('20240126145351'),
('20240126192110');

3
lib/omni_auth/saml.rb Normal file
View File

@ -0,0 +1,3 @@
# frozen_string_literal: true
require_relative 'strategies/sso_saml_provider'

View File

@ -0,0 +1,34 @@
# frozen_string_literal: true
require 'omniauth-saml'
require_relative '../data_mapping/mapper'
# Authentication strategy provided trough SAML
class OmniAuth::Strategies::SsoSamlProvider < OmniAuth::Strategies::SAML
include OmniAuth::DataMapping::Mapper
def self.active_provider
active_provider = Rails.configuration.auth_provider
if active_provider.providable_type != 'SamlProvider'
raise "Trying to instantiate the wrong provider: Expected SamlProvider, received #{active_provider.providable_type}"
end
active_provider
end
# Strategy name.
option :name, active_provider.strategy_name
info do
{
mapping: parsed_info
}
end
def parsed_info
mapped_info(
OmniAuth::Strategies::SsoSamlProvider.active_provider.auth_provider_mappings,
user_info: @attributes.attributes.transform_values {|v| v.is_a?(Array) ? v.first : v }
)
end
end