From 0700521ef36e5404f764523f387dafa331fa2b52 Mon Sep 17 00:00:00 2001 From: axolotl Date: Mon, 3 Apr 2017 20:22:50 +0200 Subject: added Esperanto (eo) --- config/application.rb | 2 +- config/locales/devise.eo.yml | 61 ++++++++++++++ config/locales/doorkeeper.eo.yml | 113 ++++++++++++++++++++++++++ config/locales/eo.yml | 164 ++++++++++++++++++++++++++++++++++++++ config/locales/simple_form.eo.yml | 46 +++++++++++ 5 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 config/locales/devise.eo.yml create mode 100644 config/locales/doorkeeper.eo.yml create mode 100644 config/locales/eo.yml create mode 100644 config/locales/simple_form.eo.yml (limited to 'config') diff --git a/config/application.rb b/config/application.rb index 9d32f30cb..77cd254af 100644 --- a/config/application.rb +++ b/config/application.rb @@ -24,7 +24,7 @@ module Mastodon # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] - config.i18n.available_locales = [:en, :de, :es, :pt, :fr, :hu, :uk, 'zh-CN'] + config.i18n.available_locales = [:en, :de, :es, :pt, :fr, :hu, :uk, 'zh-CN', :eo] config.i18n.default_locale = :en # config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml new file mode 100644 index 000000000..b786647dd --- /dev/null +++ b/config/locales/devise.eo.yml @@ -0,0 +1,61 @@ +--- +eo: + devise: + confirmations: + confirmed: Via konto estas konfirmita. + send_instructions: Vi ricevos instrukciojn por konfirmi vian konton post kelkaj minutoj. + send_paranoid_instructions: Se via retpoŝt-adreso ekzistas en nia datumbazo, vi baldaŭ ricevos retpoŝt-mesaĝon, kiu enhavas la instrukciojn por konfirmi vian konton. + failure: + already_authenticated: Vi jam estas ensalutita. + inactive: Via konto ankoraŭ ne estas konfirmita. + invalid: Malĝusta retpoŝt-adreso aŭ pasvorto. + last_attempt: Vi ankoraŭ povas provi unufoje antaŭ ol via konto estos ŝlosita. + locked: Via konto estas ŝlosita. + not_found_in_database: Malĝusta retpoŝt-adreso aŭ pasvorto. + timeout: Via sesio eksiĝis. Bonvolu reensaluti por daŭrigi. + unauthenticated: Vi devas ensaluti aŭ membriĝi por daŭrigi. + unconfirmed: Vi devas konfirmi vian konton por daŭrigi. + mailer: + confirmation_instructions: + subject: Instrukcioj por konfirmi + password_change: + subject: Via pasvorto estis ŝanĝita senprobleme. + reset_password_instructions: + subject: Instrukcioj por ŝanĝi la pasvorton + unlock_instructions: + subject: Instrukcioj por malŝlosi la konton + omniauth_callbacks: + failure: 'Ni ne povis aŭtentigi vin per %{kind}: ''%{reason}''.' + success: Aŭtentigita senprobleme per %{kind}. + passwords: + no_token: Vi ne povas iri al tiu paĝo per alia vojo ol retpoŝt-mesaĝo por ŝanĝi pasvorton. Se vi venas de tia retpoŝt-mesaĝo, kontrolu ke vi uzis la tutan URL. + send_instructions: Vi ricevos retpoŝt-mesaĝon kun instrukcioj por ŝanĝi vian pasvorton post kelkaj minutoj. + send_paranoid_instructions: Se via retpoŝt-adreso ekzistas en nia datumbazo, vi ricevos ligilon por ŝanĝi vian pasvorton per retpoŝt-mesaĝo. + updated: Via pasvorto estis redaktita senprobleme, vi nun estas ensalutita. + updated_not_active: Via pasvorto estis redaktita senprobleme. + registrations: + destroyed: Ĝis! Via konto estis forigita senprobleme. Ni esperas revidi vin baldaŭ. + signed_up: Bonvenon! Vi membriĝis senprobleme. + signed_up_but_inactive: Vi bone membriĝis, sed vi ankoraŭ ne povas ensaluti ĉar via konto ne estis konfirmita. + signed_up_but_locked: Vi bone membriĝis, sed vi ne povas ensaluti ĉar via konto estas ŝlosita. + signed_up_but_unconfirmed: Retpoŝt-mesaĝo kun via ligilo por konfirmi vian konton estis sendita al via retpoŝt-adreso. Bonvolu uzi tiun ligilon por konfirmi vian konton. + update_needs_confirmation: Vi bone aktualigis vian konton, sed ni bezonas kontroli vian novan retpoŝt-adreson. Bonvolu kontroli viajn retpoŝt-mesaĝojn kaj uzi la ligilon por konfirmi vian novan retpoŝt-adreson. + updated: Via konto estis aktualigita senprobleme. + sessions: + already_signed_out: Elsalutita. + signed_in: Ensalutita. + signed_out: Elsalutita. + unlocks: + send_instructions: Vi ricevos retpoŝt-mesaĝon kun instrukcioj por malŝlosi vian konton post kelkaj minutoj. + send_paranoid_instructions: Se via retpoŝt-adreso ekzistas en nia datumbazo, vi ricevos ligilon por malŝlosi vian konton per retpoŝt-mesaĝo. + unlocked: Via konto estis malŝlosita senprobleme, vi nun estas ensalutita. + errors: + messages: + already_confirmed: jam estis konfirmita, bonvolu provi ensaluti + confirmation_period_expired: devas esti konfirmita en %{period}, bonvolu repeti + expired: eksiĝis, bonvolu repeti + not_found: ne estis trovita + not_locked: ne estis ŝlosita + not_saved: + one: '1 eraro malpermesis al tiu %{resource} esti konservita:' + other: '%{count} eraroj malpermesis al tiu %{resource} esti konservita:' diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml new file mode 100644 index 000000000..33cc7cc19 --- /dev/null +++ b/config/locales/doorkeeper.eo.yml @@ -0,0 +1,113 @@ +--- +eo: + activerecord: + attributes: + doorkeeper/application: + name: Nomo + redirect_uri: URI de plusendo + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: ne povas enhavi eron. + invalid_uri: devas esti valida URI. + relative_uri: devas esti absoluta URI. + secured_uri: devas esti HTTPS/SSL-a URI. + doorkeeper: + applications: + buttons: + authorize: Rajtigi + cancel: Rezigni + destroy: Detrui + edit: Redakti + submit: Sendi + confirmations: + destroy: Ĉu vi certas? + edit: + title: Redakti aplikaĵon + form: + error: Ups! Kontrolu vian formularon ĉu estas eraroj + help: + native_redirect_uri: Uzu %{native_redirect_uri} por lokaj provoj + redirect_uri: Uzu unu linion por ĉiu URI + scopes: Apartigu ampleksojn per spacetoj. Lasu malplena por uzi la senŝanĝajn ampleksojn. + index: + callback_url: URL vokita per referenco + name: Nomo + new: Nova Aplikaĵo + title: Viaj aplikaĵoj + new: + title: Nova aplikaĵo + show: + actions: Agoj + application_id: Identigo de la aplikaĵo + callback_urls: URL-j vokitaj per referenco + scopes: Ampleksoj + secret: Sekreto + title: 'Aplikaĵo: %{name}' + authorizations: + buttons: + authorize: Rajtigi + deny: Rifuzi + error: + title: Eraro okazis + new: + able_to: Povos + prompt: La aplikaĵo %{client_name} petas aliron al via konto + title: Rajtigo bezonata + show: + title: Rajtiga kodo + authorized_applications: + buttons: + revoke: Malrajtigi + confirmations: + revoke: Ĉu vi certas? + index: + application: Aplikaĵo + created_at: Rajtigita + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Ampleksoj + title: Viaj rajtigitaj aplikaĵoj + errors: + messages: + access_denied: La posedanto de la rimedo aŭ la rajtiga servilo rifuzis vian peton. + credential_flow_not_configured: La sendado de la identigiloj de la posedanto de la rimedo malsukcesis ĉar Doorkeeper.configure.resource_owner_from_credentials ne estis agordita. + invalid_client: La aŭtentigo de la kliento malsukcesis ĉar la kliento estas nekonata, aŭ mankis peto aŭtentigi, aŭ la aŭtentig-metodo ne estas subtenata. + invalid_grant: La rajtiga konsento ne estas valida, ne plu estas valida, estis forigita, ne kongruas kun la plusenda URI uzita en la aŭtentiga peto, aŭ estis sendita al alia kliento. + invalid_redirect_uri: La plusenda URI uzita en estas valida. + invalid_request: Mankis al la peto nepra parametro, enhavas nesubtenatan parametran valoron, aŭ la peto simple estas misformita. + invalid_resource_owner: La donitaj identigiloj pri la posedanto de la rimedo ne estas validaj, aŭ tiu ne povas esti trovita. + invalid_scope: La petita amplekso ne estas valida, estas nekonata, aŭ estas misformita. + invalid_token: + expired: La atingoĵetono eskiĝis. + revoked: La atingoĵetono estis rifuzita. + unknown: La atingoĵetono ne estas valida. + resource_owner_authenticator_not_configured: La posedanto de la rimedo ne povis esti trovita ĉar Doorkeeper.configure.resource_owner_authenticator ne estas agordita. + server_error: La rajtiga servilo rimarkis neatenditan kondiĉon, kiu malpermesis al ĝi plenumi la peton. + temporarily_unavailable: La rajtiga servilo ne povas nun plenumi la peton pro dumtempa superŝarĝo aŭ prizorgado de la servilo. + unauthorized_client: La kliento ne rajtas fari tian peton uzante tiun metodon. + unsupported_grant_type: La tipo de la rajtiga konsento ne estas subtenata de la rajtiga servilo. + unsupported_response_type: La rajtiga servilo ne subtenas tian respondon. + flash: + applications: + create: + notice: Aplikaĵo kreita. + destroy: + notice: Aplikaĵo forigita. + update: + notice: Aplikaĵo aktualigita. + authorized_applications: + destroy: + notice: Aplikaĵo malrajtigita. + layouts: + admin: + nav: + applications: Aplikaĵoj + oauth2_provider: OAuth2-provizanto + application: + title: OAuth-a rajtigo bezonata + scopes: + follow: sekvi, bloki, malbloki kaj malsekvi kontojn + read: legi la datumojn de via konto + write: mesaĝi kiel vi diff --git a/config/locales/eo.yml b/config/locales/eo.yml new file mode 100644 index 000000000..3644b37bb --- /dev/null +++ b/config/locales/eo.yml @@ -0,0 +1,164 @@ +--- +eo: + about: + about_mastodon: Mastodon estas senpaga, malfermitkoda socia reto. Ĝi estas sencentra alia eblo al komercaj servoj. Ĝi evitigas, ke unusola firmao regu vian tutan komunikadon. Elektu servilon, kiun vi fidas. Kiu ajn estas via elekto, vi povas interagi kun ĉiuj aliaj uzantoj. Iu ajn povas krei sian propran aperaĵon de Mastodon en sia servilo, kaj partopreni en la socia reto tute glate. + about_this: Pri tiu aperaĵo + apps: Aplikaĵoj + business_email: 'Profesia retpoŝt-adreso:' + contact: Kontakti + description_headline: Kio estas %{domain}? + domain_count_after: aliaj aperaĵoj + domain_count_before: Konektita al + features: + api: Malfermita API por aplikaĵoj kaj servoj + blocks: Kompletaj iloj por bloki kaj kaŝi + characters: Po 500 signoj por ĉiu mesaĝo + chronology: Tempolinioj laŭtempaj + ethics: 'Etike kreita: neniu reklamo, neniu ŝpurado' + gifv: Eblo diskonigi etajn videojn kaj GIFV + privacy: Videbleco agordita laŭ la mesaĝo + public: Publikaj tempolinioj + features_headline: Kiel Mastodon estas malsimila + get_started: Komenci + links: Ligiloj + other_instances: Aliaj aperaĵoj + source_code: Fontkodo + status_count_after: mesaĝoj + status_count_before: Kiu publikigis + terms: Terms + user_count_after: uzantoj + user_count_before: Hejmo de + accounts: + follow: Sekvi + followers: Sekvantoj + following: Sekvatoj + nothing_here: Estas nenio ĉi tie! + people_followed_by: Sekvatoj de %{name} + people_who_follow: Sekvantoj de %{name} + posts: Mesaĝoj + remote_follow: Fore sekvi + unfollow: Malsekvi + application_mailer: + settings: 'Ŝanĝi la retpoŝt-mesaĝajn preferojn: %{link}' + signature: Sciigoj de Mastodon el %{instance} + view: 'Vidi:' + applications: + invalid_url: La URL donita ne estas valida + auth: + change_password: Ŝanĝi pasvorton + didnt_get_confirmation: Ĉu vi ne ricevis la instrukciojn por konfirmi? + forgot_password: Pasvorto forgesita? + login: Ensaluti + logout: Elsaluti + register: Membriĝi + resend_confirmation: Resendi la instrukciojn por konfirmi + reset_password: Ŝanĝi la pasvorton + set_new_password: Elekti novan pasvorton + authorize_follow: + error: Bedaŭrinde, okazis eraro provante konsulti la foran konton + follow: Sekvi + prompt_html: 'Vi (%{self}) petis sekvi:' + title: Sekvi %{acct} + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_months: "%{count}mo" + about_x_years: "%{count}j" + almost_x_years: "%{count}j" + half_a_minute: Ĵus + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Ĵus + over_x_years: "%{count}j" + x_days: "%{count}t" + x_minutes: "%{count}m" + x_months: "%{count}mo" + x_seconds: "%{count}s" + exports: + blocks: Vi blokas + csv: CSV + follows: Vi sekvas + storage: Mediaĵa konservado + generic: + changes_saved_msg: Ŝanĝoj senprobleme konservitaj! + powered_by: povigita de %{link} + save_changes: Konservi la ŝanĝojn + validation_errors: + one: Io ne okazis senprobleme! Bonvolu konsulti la suban erar-raporton. + other: Io ne okazis senprobleme! Bonvolu konsulti la subajn %{count} erar-raportojn. + imports: + preface: Vi povas alporti kelkajn datumojn, kiel listojn de ĉiuj homoj kiujn vi sekvas aŭ blokas, al via konto de ĉi tiu aperaĵo, per dosiero elportita de alia aperaĵo. + success: Viaj datumoj estis senprobleme alportitaj kaj estos traktitaj kiel planite. + types: + blocking: Listo de blokitoj + following: Listo de sekvatoj + upload: Alporti + landing_strip_html: %{name} estas uzanto en %{domain}. Vi povas sekvi tiun aŭ interagi kun tiu, se vi havas konton ie ajn en la Fediverse. Se vi ne havas, vi povas membriĝi ĉi tie.. + notification_mailer: + digest: + body: 'Jen eta resumo de tio, kio okazis en %{instance}, ekde kiam vi laste vizitis en %{since}:' + mention: "%{name} menciis vin en:" + new_followers_summary: + one: Vi ekhavis novan sekvanton! Jej! + other: Vi ekhavis %{count} novajn sekvantojn! Mirinde! + subject: + one: "1 nova sciigo ekde via lasta vizito \U0001F418" + other: "%{count} novaj sciigoj ekde via lasta vizito \U0001F418" + favourite: + body: '%{name} favoris vian mesaĝon:' + subject: "%{name} favoris vian mesaĝon" + follow: + body: "%{name} eksekvis vin:" + subject: "%{name} eksekvis vin" + follow_request: + body: "%{name} petis sekvi vin:" + subject: '%{name} petis sekvi vin' + mention: + body: '%{name} menciis vin en:' + subject: '%{name} menciis vin' + reblog: + body: '%{name} diskonigis vian mesaĝon:' + subject: "%{name} diskonigis vian mesaĝon" + pagination: + next: Sekva + prev: Malsekva + remote_follow: + acct: Enmetu vian uzantnomo@aperaĵo de kie vi volas sekvi tiun uzanton + missing_resource: La URL de plusendado ne povis esti trovita + proceed: Daŭrigi por plusendi + prompt: 'Vi eksekvos:' + settings: + authorized_apps: Rajtigitaj aplikaĵoj + back: Reveni al Mastodon + edit_profile: Redakti la profilon + export: Elporti datumojn + import: Alporti + preferences: Preferoj + settings: Agordoj + two_factor_auth: Dufaktora aŭtentigo + statuses: + open_in_web: Malfermi retumile + over_character_limit: limo de %{max} signoj trapasita + show_more: Montri pli + visibilities: + private: Montri nur al sekvantoj + public: Publika + unlisted: Publika, sed ne aperos en publikaj tempolinioj + stream_entries: + click_to_show: Alklaki por montri + reblogged: diskonigita + sensitive_content: Tikla enhavo + time: + formats: + default: "%b %d, %Y, %H:%M" + two_factor_auth: + description_html: Se vi ebligas dufaktoran aŭtentigon, vi bezonos vian poŝtelefonon por ensaluti, ĉar ĝi kreos nombrojn, kiujn vi devos entajpi. + disable: Malebligi + enable: Ebligi + instructions_html: "Skanu tiun QR-kodon per Google Authenticator aŭ per simila aplikaĵo de via poŝtelefono. De tiam, la aplikaĵo kreos nombrojn, kiujn vi devos entajpi." + plaintext_secret_html: 'Rekte legebla sekreta kodo: %{secret}' + warning: Se vi ne povas agordi aŭtentigan aplikaĵon nun, elektu "malebligi" aŭ vi ne plu povos ensaluti. + users: + invalid_email: La retpoŝt-adreso ne estas valida + invalid_otp_token: La dufaktora aŭtentigila kodo ne estas valida + will_paginate: + page_gap: "…" diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml new file mode 100644 index 000000000..8c89a56e7 --- /dev/null +++ b/config/locales/simple_form.eo.yml @@ -0,0 +1,46 @@ +--- +eo: + simple_form: + hints: + defaults: + avatar: En la formato PNG, GIF aŭ JPG. Ĝis 2Mo. Estos malgrandigita al 120x120px + display_name: 30 signoj pleje + header: En la formato PNG, GIF aŭ JPG. Ĝis 2Mo. Estos malgrandigita al 700x335px + locked: Vi devos aprobi ĉiun peton de sekvado, kaj viaj mesaĝoj estos senŝanĝe nur por viaj sekvantoj. + note: 160 signoj pleje + imports: + data: Dosiero CSV el alia aperaĵo de Mastodon + labels: + defaults: + avatar: Profilbildo + confirm_new_password: Konfirmi novan pasvorton + confirm_password: Konfirmi la pasvorton + current_password: Nuna pasvorto + data: Datumoj + display_name: Publika nomo + email: Retpoŝt-adreso + header: Kapbildo + locale: Lingvo + locked: Privatigi la konton + new_password: Nova pasvorto + note: Sinprezento + otp_attempt: Dufaktora identigilo + password: Pasvorto + setting_default_privacy: Videbleco de la mesaĝoj + type: Tipo de alportado + username: Uzantnomo + interactions: + must_be_follower: Kaŝi la sciigojn de homoj, kiuj ne sekvas vin + must_be_following: Kaŝi la sciigojn de homoj, kiujn vi ne sekas + notification_emails: + digest: Sendi resumajn retpoŝt-mesaĝojn + favourite: Sendi retpoŝt-mesaĝon, kiam iu favoras mesaĝon de vi + follow: Sendi retpoŝt-mesaĝon, kiam iu eksekvas vin + follow_request: Sendi retpoŝt-mesaĝon, kiam iu petas sekvi vin + mention: Sendi retpoŝt-mesaĝon, kiam iu mencias vin + reblog: Sendi retpoŝt-mesaĝon, kiam iu diskonigas mesaĝon de vi + 'no': 'Ne' + required: + mark: "*" + text: bezonata + 'yes': 'Jes' -- cgit From 1c351709bc45611c2ed48fb8539c2b27ab51b6fe Mon Sep 17 00:00:00 2001 From: Eugen Date: Fri, 7 Apr 2017 11:09:14 +0200 Subject: Force UTF8 encoding on generated XML (#1140) --- Procfile | 2 +- app/lib/atom_serializer.rb | 2 +- app/views/layouts/application.html.haml | 6 ++++-- config/puma.rb | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) (limited to 'config') diff --git a/Procfile b/Procfile index 6cdd89518..646e26059 100644 --- a/Procfile +++ b/Procfile @@ -1,2 +1,2 @@ web: bundle exec puma -C config/puma.rb -worker: bundle exec sidekiq -q default -q mailers -q push +worker: bundle exec sidekiq -q default -q push -q pull -q mailers diff --git a/app/lib/atom_serializer.rb b/app/lib/atom_serializer.rb index 21f485c2d..4e01c3d43 100644 --- a/app/lib/atom_serializer.rb +++ b/app/lib/atom_serializer.rb @@ -7,7 +7,7 @@ class AtomSerializer def render(element) document = Ox::Document.new(version: '1.0') document << element - "#{Ox.dump(element)}" + ('' + Ox.dump(element)).force_encoding('UTF-8') end end diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 7eae6982b..abab14a28 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -11,8 +11,10 @@ %meta{:name => "theme-color", :content => "#282c37"}/ %meta{:name => "apple-mobile-web-app-capable", :content => "yes"}/ - %title - = "#{yield(:page_title)} - " if content_for?(:page_title) + %title< + - if content_for?(:page_title) + = yield(:page_title) + = ' - ' = Setting.site_title = stylesheet_link_tag 'application', media: 'all' diff --git a/config/puma.rb b/config/puma.rb index 550129bdc..191f00cca 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -9,7 +9,7 @@ preload_app! on_worker_boot do if ENV['HEROKU'] # Spawn the workers from Puma, to only use one dyno - @sidekiq_pid ||= spawn('bundle exec sidekiq -q default -q mailers -q push') + @sidekiq_pid ||= spawn('bundle exec sidekiq -q default -q push -q pull -q mailers ') end ActiveRecord::Base.establish_connection if defined?(ActiveRecord) -- cgit From e3a3422a65901c71ec3ff4a2729309c441660d63 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 7 Apr 2017 12:40:26 +0200 Subject: Allow setting of default language through config Setting of locale in controller extracted to Localized concern, the doorkeeper authorized applications controller moved under custom namespace with inclusion of Localized, which resolves the "it sometimes appears in a different random language" bug --- .env.production.sample | 3 +++ app/controllers/application_controller.rb | 9 ++------- app/controllers/concerns/localized.rb | 19 ++++++++++++++++++ app/controllers/oauth/authorizations_controller.rb | 9 ++------- .../oauth/authorized_applications_controller.rb | 16 +++++++++++++++ .../authorized_applications/index.html.haml | 23 ---------------------- .../oauth/authorized_applications/index.html.haml | 23 ++++++++++++++++++++++ config/routes.rb | 2 +- 8 files changed, 66 insertions(+), 38 deletions(-) create mode 100644 app/controllers/concerns/localized.rb create mode 100644 app/controllers/oauth/authorized_applications_controller.rb delete mode 100644 app/views/doorkeeper/authorized_applications/index.html.haml create mode 100644 app/views/oauth/authorized_applications/index.html.haml (limited to 'config') diff --git a/.env.production.sample b/.env.production.sample index a7f9eb4bf..a0e963ca6 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -25,6 +25,9 @@ OTP_SECRET= # Only allow registrations with the following e-mail domains # EMAIL_DOMAIN_WHITELIST=example1.com|example2.de|etc +# Optionally change default language +# DEFAULT_LOCALE=de + # E-mail configuration SMTP_SERVER=smtp.mailgun.org SMTP_PORT=587 diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c06142fd4..f00f9c1e3 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class ApplicationController < ActionController::Base + include Localized + # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception @@ -14,7 +16,6 @@ class ApplicationController < ActionController::Base rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? - before_action :set_locale before_action :set_user_activity before_action :check_suspension, if: :user_signed_in? @@ -28,12 +29,6 @@ class ApplicationController < ActionController::Base store_location_for(:user, request.url) end - def set_locale - I18n.locale = current_user.try(:locale) || I18n.default_locale - rescue I18n::InvalidLocale - I18n.locale = I18n.default_locale - end - def require_admin! redirect_to root_path unless current_user&.admin? end diff --git a/app/controllers/concerns/localized.rb b/app/controllers/concerns/localized.rb new file mode 100644 index 000000000..b6f868090 --- /dev/null +++ b/app/controllers/concerns/localized.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Localized + extend ActiveSupport::Concern + + included do + before_action :set_locale + end + + def set_locale + I18n.locale = current_user.try(:locale) || default_locale + rescue I18n::InvalidLocale + I18n.locale = default_locale + end + + def default_locale + ENV.fetch('DEFAULT_LOCALE') { I18n.default_locale } + end +end diff --git a/app/controllers/oauth/authorizations_controller.rb b/app/controllers/oauth/authorizations_controller.rb index 7c25266d8..cdbfde0fb 100644 --- a/app/controllers/oauth/authorizations_controller.rb +++ b/app/controllers/oauth/authorizations_controller.rb @@ -1,9 +1,10 @@ # frozen_string_literal: true class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController + include Localized + skip_before_action :authenticate_resource_owner! - before_action :set_locale before_action :store_current_location before_action :authenticate_resource_owner! @@ -12,10 +13,4 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController def store_current_location store_location_for(:user, request.url) end - - def set_locale - I18n.locale = current_user.try(:locale) || I18n.default_locale - rescue I18n::InvalidLocale - I18n.locale = I18n.default_locale - end end diff --git a/app/controllers/oauth/authorized_applications_controller.rb b/app/controllers/oauth/authorized_applications_controller.rb new file mode 100644 index 000000000..09dd5d3c4 --- /dev/null +++ b/app/controllers/oauth/authorized_applications_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicationsController + include Localized + + skip_before_action :authenticate_resource_owner! + + before_action :store_current_location + before_action :authenticate_resource_owner! + + private + + def store_current_location + store_location_for(:user, request.url) + end +end diff --git a/app/views/doorkeeper/authorized_applications/index.html.haml b/app/views/doorkeeper/authorized_applications/index.html.haml deleted file mode 100644 index d4719881c..000000000 --- a/app/views/doorkeeper/authorized_applications/index.html.haml +++ /dev/null @@ -1,23 +0,0 @@ -- content_for :page_title do - = t('doorkeeper.authorized_applications.index.title') - -%table.table - %thead - %tr - %th= t('doorkeeper.authorized_applications.index.application') - %th= t('doorkeeper.authorized_applications.index.scopes') - %th= t('doorkeeper.authorized_applications.index.created_at') - %th - %tbody - - @applications.each do |application| - %tr - %td - - if application.website.blank? - = application.name - - else - = link_to application.name, application.website - %th= application.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.join('
').html_safe - %td= l application.created_at - %td - - unless application.superapp? - = table_link_to 'times', t('doorkeeper.authorized_applications.buttons.revoke'), oauth_authorized_application_path(application), method: :delete, data: { confirm: t('doorkeeper.authorized_applications.confirmations.revoke') } diff --git a/app/views/oauth/authorized_applications/index.html.haml b/app/views/oauth/authorized_applications/index.html.haml new file mode 100644 index 000000000..d4719881c --- /dev/null +++ b/app/views/oauth/authorized_applications/index.html.haml @@ -0,0 +1,23 @@ +- content_for :page_title do + = t('doorkeeper.authorized_applications.index.title') + +%table.table + %thead + %tr + %th= t('doorkeeper.authorized_applications.index.application') + %th= t('doorkeeper.authorized_applications.index.scopes') + %th= t('doorkeeper.authorized_applications.index.created_at') + %th + %tbody + - @applications.each do |application| + %tr + %td + - if application.website.blank? + = application.name + - else + = link_to application.name, application.website + %th= application.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.join('
').html_safe + %td= l application.created_at + %td + - unless application.superapp? + = table_link_to 'times', t('doorkeeper.authorized_applications.buttons.revoke'), oauth_authorized_application_path(application), method: :delete, data: { confirm: t('doorkeeper.authorized_applications.confirmations.revoke') } diff --git a/config/routes.rb b/config/routes.rb index ca77191f7..315ad5da5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,7 +11,7 @@ Rails.application.routes.draw do end use_doorkeeper do - controllers authorizations: 'oauth/authorizations' + controllers authorizations: 'oauth/authorizations', authorized_applications: 'oauth/authorized_applications' end get '.well-known/host-meta', to: 'xrd#host_meta', as: :host_meta -- cgit From 786e6f94b986dbf98eae9d79bc75e147fcefc8ec Mon Sep 17 00:00:00 2001 From: Jantso Porali Date: Fri, 7 Apr 2017 12:58:12 +0200 Subject: Update Finnish translations, add sample Minio config (#954) --- .env.production.sample | 10 ++++++++++ app/views/user_mailer/confirmation_instructions.fi.html.erb | 5 +++++ app/views/user_mailer/confirmation_instructions.fi.text.erb | 5 +++++ app/views/user_mailer/password_change.fi.html.erb | 3 +++ app/views/user_mailer/password_change.fi.text.erb | 3 +++ .../user_mailer/reset_password_instructions.fi.html.erb | 8 ++++++++ .../user_mailer/reset_password_instructions.fi.text.erb | 8 ++++++++ config/locales/fi.yml | 12 ++++++------ docs/Using-Mastodon/FAQ.md | 3 ++- 9 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 app/views/user_mailer/confirmation_instructions.fi.html.erb create mode 100644 app/views/user_mailer/confirmation_instructions.fi.text.erb create mode 100644 app/views/user_mailer/password_change.fi.html.erb create mode 100644 app/views/user_mailer/password_change.fi.text.erb create mode 100644 app/views/user_mailer/reset_password_instructions.fi.html.erb create mode 100644 app/views/user_mailer/reset_password_instructions.fi.text.erb (limited to 'config') diff --git a/.env.production.sample b/.env.production.sample index a7f9eb4bf..a4eabc384 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -44,6 +44,16 @@ SMTP_FROM_ADDRESS=notifications@example.com # S3_PROTOCOL=http # S3_HOSTNAME=192.168.1.123:9000 +# S3 (Minio Config (optional) Please check Minio instance for details) +# S3_ENABLED=true +# S3_BUCKET= +# AWS_ACCESS_KEY_ID= +# AWS_SECRET_ACCESS_KEY= +# S3_REGION= +# S3_PROTOCOL=https +# S3_HOSTNAME= +# S3_ENDPOINT= + # Optional alias for S3 if you want to use Cloudfront or Cloudflare in front # S3_CLOUDFRONT_HOST= diff --git a/app/views/user_mailer/confirmation_instructions.fi.html.erb b/app/views/user_mailer/confirmation_instructions.fi.html.erb new file mode 100644 index 000000000..8b72722da --- /dev/null +++ b/app/views/user_mailer/confirmation_instructions.fi.html.erb @@ -0,0 +1,5 @@ +

Tervetuloa <%= @resource.email %>!

+ +

Voit vahvistaa Mastodon tilisi klikkaamalla alla olevaa linkkiä:

+ +

<%= link_to 'Varmista tilini', confirmation_url(@resource, confirmation_token: @token) %>

diff --git a/app/views/user_mailer/confirmation_instructions.fi.text.erb b/app/views/user_mailer/confirmation_instructions.fi.text.erb new file mode 100644 index 000000000..796913abb --- /dev/null +++ b/app/views/user_mailer/confirmation_instructions.fi.text.erb @@ -0,0 +1,5 @@ +Tervetuloa <%= @resource.email %>! + +Voit vahvistaa Mastodon tilisi klikkaamalla alla olevaa linkkiä: + +<%= confirmation_url(@resource, confirmation_token: @token) %> diff --git a/app/views/user_mailer/password_change.fi.html.erb b/app/views/user_mailer/password_change.fi.html.erb new file mode 100644 index 000000000..c56b96593 --- /dev/null +++ b/app/views/user_mailer/password_change.fi.html.erb @@ -0,0 +1,3 @@ +

Hei <%= @resource.email %>!

+ +

Lähetämme tämän viestin ilmoittaaksemme että salasanasi on vaihdettu.

diff --git a/app/views/user_mailer/password_change.fi.text.erb b/app/views/user_mailer/password_change.fi.text.erb new file mode 100644 index 000000000..d90c3fdeb --- /dev/null +++ b/app/views/user_mailer/password_change.fi.text.erb @@ -0,0 +1,3 @@ +Hei <%= @resource.email %>! + +Lähetämme tämän viestin ilmoittaaksemme että salasanasi on vaihdettu. diff --git a/app/views/user_mailer/reset_password_instructions.fi.html.erb b/app/views/user_mailer/reset_password_instructions.fi.html.erb new file mode 100644 index 000000000..53be0b62b --- /dev/null +++ b/app/views/user_mailer/reset_password_instructions.fi.html.erb @@ -0,0 +1,8 @@ +

Hei <%= @resource.email %>!

+ +

Joku on pyytänyt salasanvaihto Mastodonissa. Voit tehdä sen allaolevassa linkissä.

+ +

<%= link_to 'Vaihda salasanani', edit_password_url(@resource, reset_password_token: @token) %>

+ +

Jos et pyytänyt vaihtoa, poista tämä viesti.

+

Salasanaasi ei vaihdeta ennen kuin menet ylläolevaan linkkiin ja luot uuden.

diff --git a/app/views/user_mailer/reset_password_instructions.fi.text.erb b/app/views/user_mailer/reset_password_instructions.fi.text.erb new file mode 100644 index 000000000..c826d5fc8 --- /dev/null +++ b/app/views/user_mailer/reset_password_instructions.fi.text.erb @@ -0,0 +1,8 @@ +Hei <%= @resource.email %>! + +Joku on pyytänyt salasanvaihto Mastodonissa. Voit tehdä sen allaolevassa linkissä. + +<%= edit_password_url(@resource, reset_password_token: @token) %> + +Jos et pyytänyt vaihtoa, poista tämä viesti. +Salasanaasi ei vaihdeta ennen kuin menet ylläolevaan linkkiin ja luot uuden. diff --git a/config/locales/fi.yml b/config/locales/fi.yml index cdb2b9886..947d3f646 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -16,18 +16,18 @@ fi: chronology: Aikajana on kronologisessa järjestyksessä ethics: 'Eettinen suunnittelu: ei mainoksia, no seurantaa' gifv: GIFV settejä ja lyhyitä videoita - privacy: Julkaisu kohtainen yksityisyys aseuts + privacy: Julkaisu kohtainen yksityisyys asetus public: Julkiset aikajanat features_headline: Mikä erottaa Mastodonin muista get_started: Aloita käyttö links: Linkit - other_instances: muuhun palvelimeen + other_instances: Muut palvelimet source_code: Lähdekoodi status_count_after: statusta status_count_before: Ovat luoneet terms: Ehdot - user_count_after: käyttäjää - user_count_before: Koti käyttäjälle + user_count_after: käyttäjälle + user_count_before: Koti accounts: follow: Seuraa followers: Seuraajat @@ -130,8 +130,8 @@ fi: authorized_apps: Valtuutetut ohjelmat back: Takaisin Mastodoniin edit_profile: Muokkaa profiilia - export: Datan vienti - import: Datan tuonti + export: Vie dataa + import: Tuo dataa preferences: Ominaisuudet settings: Asetukset two_factor_auth: Kaksivaiheinen tunnistus diff --git a/docs/Using-Mastodon/FAQ.md b/docs/Using-Mastodon/FAQ.md index daedcbdd8..3b03a8ee4 100644 --- a/docs/Using-Mastodon/FAQ.md +++ b/docs/Using-Mastodon/FAQ.md @@ -36,8 +36,9 @@ While Mastodon is compatible with GNU social in terms of server to server commun Because Mastodon has been created from a blank slate, it is much simpler to have the API mirror internal structures as closely as possible, rather than build an emulation layer. Secondly, the GNU social client API is actually a half-way implementation of the legacy Twitter API - that's the reason why it works with some older Twitter client apps. However, many of those apps are not maintained anymore, the GNU social API does not actually keep up with the real Twitter API and never fully implemented all its features; at the same time, the Twitter API was never meant for a federated service and so obscures some of the functionality. + #### How is Mastodon funded? Development of Mastodon and hosting of mastodon.social is funded through my [Patreon (also BTC/PayPal donations)](https://www.patreon.com/user?u=619786). Beyond that, I am not interested in VC funding, monetizing, advertising, or anything of that sort. I could offer setup/maintenance services on demand. -The software is free and open source and communities should host their own servers if they can, that way the costs are more or less distributed. Obviously it'd be hard for me to pay the bills if literally everyone decided to use the mastodon.social instance only. \ No newline at end of file +The software is free and open source and communities should host their own servers if they can, that way the costs are more or less distributed. Obviously it'd be hard for me to pay the bills if literally everyone decided to use the mastodon.social instance only. -- cgit From ad5ddd5e95062d0d5cd4bc56baff53698c598723 Mon Sep 17 00:00:00 2001 From: Chad Pytel Date: Fri, 7 Apr 2017 14:19:16 -0400 Subject: Use I18n for media attachment validation errors These are currently user facing errors, but are not localized. This adds the ability for these messages to be localized. --- app/services/post_status_service.rb | 4 ++-- config/locales/en.yml | 4 ++++ spec/services/post_status_service_spec.rb | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'config') diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index b8179f7dc..221aa42a3 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -37,11 +37,11 @@ class PostStatusService < BaseService def validate_media!(media_ids) return if media_ids.nil? || !media_ids.is_a?(Enumerable) - raise Mastodon::ValidationError, 'Cannot attach more than 4 files' if media_ids.size > 4 + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if media_ids.size > 4 media = MediaAttachment.where(status_id: nil).where(id: media_ids.take(4).map(&:to_i)) - raise Mastodon::ValidationError, 'Cannot attach a video to a toot that already contains images' if media.size > 1 && media.find(&:video?) + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if media.size > 1 && media.find(&:video?) media end diff --git a/config/locales/en.yml b/config/locales/en.yml index 742219df9..aa3a732f9 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -163,3 +163,7 @@ en: invalid_otp_token: Invalid two-factor code will_paginate: page_gap: "…" + media_attachments: + validations: + too_many: Cannot attach more than 4 files + images_and_video: Cannot attach a video to a status that already contains images diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 3fe878f63..0e39cd969 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -141,7 +141,7 @@ RSpec.describe PostStatusService do ) end.to raise_error( Mastodon::ValidationError, - 'Cannot attach more than 4 files', + I18n.t('media_attachments.validations.too_many'), ) end @@ -160,7 +160,7 @@ RSpec.describe PostStatusService do ) end.to raise_error( Mastodon::ValidationError, - 'Cannot attach a video to a toot that already contains images', + I18n.t('media_attachments.validations.images_and_video'), ) end -- cgit