5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-25 23:56:22 +00:00

Merge branch 'locale-fixes' into rails

This commit is contained in:
f 2021-05-10 15:28:26 -03:00
commit e935fb5433
9 changed files with 47 additions and 98 deletions

View file

@ -40,11 +40,21 @@ class ApplicationController < ActionController::Base
site site
end end
# Devuelve el idioma actual y si no lo encuentra obtiene uno por
# defecto.
#
# Esto se refiere al idioma de la interfaz, no de los artículos.
def current_locale(include_params: true, site: nil)
return params[:locale] if include_params && params[:locale].present?
current_usuarie&.lang || I18n.locale
end
# El idioma es el preferido por le usuarie, pero no necesariamente se # El idioma es el preferido por le usuarie, pero no necesariamente se
# corresponde con el idioma de los artículos, porque puede querer # corresponde con el idioma de los artículos, porque puede querer
# traducirlos. # traducirlos.
def set_locale(&action) def set_locale(&action)
I18n.with_locale(current_usuarie&.lang || I18n.default_locale, &action) I18n.with_locale(current_locale(include_params: false), &action)
end end
# Muestra una página 404 # Muestra una página 404

View file

@ -14,7 +14,7 @@ class PostsController < ApplicationController
# Las URLs siempre llevan el idioma actual o el de le usuarie # Las URLs siempre llevan el idioma actual o el de le usuarie
def default_url_options def default_url_options
{ locale: params[:locale] || current_usuarie&.lang || I18n.locale } { locale: current_locale }
end end
def index def index
@ -27,7 +27,7 @@ class PostsController < ApplicationController
# XXX: Cada vez que cambiamos un Post tocamos el sitio con lo que es # XXX: Cada vez que cambiamos un Post tocamos el sitio con lo que es
# más simple saber si hubo cambios. # más simple saber si hubo cambios.
if @category || @layout || stale?(@site) if @category || @layout || stale?([current_usuarie, @site])
@posts = @site.posts(lang: locale) @posts = @site.posts(lang: locale)
@posts = @posts.where(categories: @category) if @category @posts = @posts.where(categories: @category) if @category
@posts = @posts.where(layout: @layout) if @layout @posts = @posts.where(layout: @layout) if @layout
@ -120,7 +120,7 @@ class PostsController < ApplicationController
# TODO: Notificar si se pudo o no # TODO: Notificar si se pudo o no
service.destroy service.destroy
site.touch site.touch
redirect_to site_posts_path(site) redirect_to site_posts_path(site, locale: post.locale.value)
end end
# Reordenar los artículos # Reordenar los artículos
@ -133,7 +133,7 @@ class PostsController < ApplicationController
service.reorder service.reorder
site.touch site.touch
redirect_to site_posts_path(site) redirect_to site_posts_path(site, locale: site.default_locale)
end end
# Devuelve el idioma solicitado a través de un parámetro, validando # Devuelve el idioma solicitado a través de un parámetro, validando
@ -144,7 +144,7 @@ class PostsController < ApplicationController
# solicite a le usuarie crear el nuevo idioma y que esto lo agregue al # solicite a le usuarie crear el nuevo idioma y que esto lo agregue al
# _config.yml del sitio en lugar de mezclar idiomas. # _config.yml del sitio en lugar de mezclar idiomas.
def locale def locale
@locale ||= site&.locales&.find(-> { I18n.locale }) do |l| @locale ||= site&.locales&.find(-> { site&.default_locale }) do |l|
l.to_s == params[:locale] l.to_s == params[:locale]
end end
end end

View file

@ -23,7 +23,7 @@ class SitesController < ApplicationController
def show def show
authorize site authorize site
redirect_to site_posts_path(site) redirect_to site_posts_path(site, locale: site.default_locale)
end end
def new def new
@ -40,7 +40,7 @@ class SitesController < ApplicationController
params: site_params) params: site_params)
if (@site = service.create).persisted? if (@site = service.create).persisted?
redirect_to site_posts_path(@site) redirect_to site_posts_path(@site, locale: @site.default_locale)
else else
render 'new' render 'new'
end end
@ -49,7 +49,7 @@ class SitesController < ApplicationController
def edit def edit
authorize site authorize site
breadcrumb site.title, site_posts_path(site), match: :exact breadcrumb site.title, site_posts_path(site, locale: site.default_locale), match: :exact
breadcrumb 'sites.edit', site_path(site) breadcrumb 'sites.edit', site_path(site)
SiteService.new(site: site).build_deploys SiteService.new(site: site).build_deploys
@ -62,7 +62,7 @@ class SitesController < ApplicationController
usuarie: current_usuarie) usuarie: current_usuarie)
if service.update.valid? if service.update.valid?
redirect_to site_posts_path(site) redirect_to site_posts_path(site, locale: site.default_locale)
else else
render 'edit' render 'edit'
end end
@ -74,7 +74,7 @@ class SitesController < ApplicationController
# XXX: Convertir en una máquina de estados? # XXX: Convertir en una máquina de estados?
DeployJob.perform_async site.id if site.enqueue! DeployJob.perform_async site.id if site.enqueue!
redirect_to site_posts_path(site) redirect_to site_posts_path(site, locale: site.default_locale)
end end
def reorder_posts def reorder_posts
@ -94,7 +94,7 @@ class SitesController < ApplicationController
flash[:danger] = I18n.t('errors.posts.reorder') flash[:danger] = I18n.t('errors.posts.reorder')
end end
redirect_to site_posts_path(site) redirect_to site_posts_path(site, locale: site.default_locale)
end end
def fetch def fetch

View file

@ -43,7 +43,7 @@
- metadata = post[attribute] - metadata = post[attribute]
- type = metadata.type - type = metadata.type
- cache metadata do - cache [metadata, I18n.locale] do
= render("posts/attributes/#{type}", = render("posts/attributes/#{type}",
base: 'post', post: post, attribute: attribute, base: 'post', post: post, attribute: attribute,
metadata: metadata, site: site, metadata: metadata, site: site,

View file

@ -73,10 +73,7 @@
-# -#
TODO: Solo les usuaries cachean porque tenemos que separar TODO: Solo les usuaries cachean porque tenemos que separar
les botones por permisos. les botones por permisos.
- cache_if @usuarie, [post, I18n.locale] do
TODO: Verificar qué pasa cuando se gestiona el sitio en
distintos idiomas a la vez
- cache_if @usuarie, post do
- checkbox_id = "checkbox-#{post.uuid.value}" - checkbox_id = "checkbox-#{post.uuid.value}"
%tr{ id: post.uuid.value, data: { target: 'reorder.row' } } %tr{ id: post.uuid.value, data: { target: 'reorder.row' } }
%td %td

View file

@ -22,7 +22,7 @@
- metadata = @post[attr] - metadata = @post[attr]
- next unless metadata.front_matter? - next unless metadata.front_matter?
- cache metadata do - cache [metadata, I18n.locale] do
= render("posts/attribute_ro/#{metadata.type}", = render("posts/attribute_ro/#{metadata.type}",
post: @post, attribute: attr, post: @post, attribute: attr,
metadata: metadata, metadata: metadata,
@ -36,6 +36,6 @@
- metadata = @post[attr] - metadata = @post[attr]
- next if metadata.front_matter? - next if metadata.front_matter?
- cache metadata do - cache [metadata, I18n.locale] do
%section.editor{ id: attr, dir: dir } %section.editor{ id: attr, dir: dir }
= @post.public_send(attr).to_s.html_safe = @post.public_send(attr).to_s.html_safe

View file

@ -18,12 +18,12 @@
-# -#
TODO: Solo les usuaries cachean porque tenemos que separar TODO: Solo les usuaries cachean porque tenemos que separar
les botones por permisos. les botones por permisos.
- cache_if (rol.usuarie? && !rol.temporal), site do - cache_if (rol.usuarie? && !rol.temporal), [site, I18n.locale] do
%tr %tr
%td %td
%h2 %h2
- if policy(site).show? - if policy(site).show?
= link_to site.title, site_path(site) = link_to site.title, site_posts_path(site, locale: site.default_locale)
- else - else
= site.title = site.title
%p.lead= site.description %p.lead= site.description

View file

@ -84,10 +84,6 @@ en:
title: Link to www title: Link to www
success: Success! success: Success!
error: Error error: Error
deploy_private:
title: Private version
success: Success!
error: Error
deploy_zip: deploy_zip:
title: Build ZIP file title: Build ZIP file
success: Available for download success: Available for download
@ -96,6 +92,10 @@ en:
title: Host as Tor Hidden Service title: Host as Tor Hidden Service
success: Success! success: Success!
error: Error error: Error
deploy_private:
title: Private version
success: Success!
error: Error
deploy_alternative_domain: deploy_alternative_domain:
title: Alternative domain name title: Alternative domain name
success: Success! success: Success!
@ -123,6 +123,7 @@ en:
models: models:
usuarie: User usuarie: User
licencia: License licencia: License
design: Design
attributes: attributes:
usuarie: usuarie:
email: 'E-mail address' email: 'E-mail address'
@ -130,27 +131,22 @@ en:
password_confirmation: 'Password confirmation' password_confirmation: 'Password confirmation'
current_password: 'Current password' current_password: 'Current password'
lang: 'Main language' lang: 'Main language'
remember_me: Remember me
site: site:
name: 'Name' name: 'Name'
title: 'Title' title: 'Title'
description: 'Description' description: 'Description'
colaboracion_anonima: Enable anonymous collaboration
acepta_invitades: Enable collaboration acepta_invitades: Enable collaboration
colaboracion_anonima: Enable anonymous collaboration
contact: Enable contact forms contact: Enable contact forms
tienda_url: Store URL
tienda_api_key: Store access key
errors: errors:
models: models:
site: site:
attributes: attributes:
deploys: deploys:
deploy_local_presence: 'We need to be build the site!' deploy_local_presence: 'We need to be build the site!'
invitadx:
attributes:
email:
taken: 'This e-mail address is already taken, please choose a different one'
password_confirmation:
confirmation: "The passwords don't match"
acepta_politicas_de_privacidad:
no_acepta_politicas_de_privacidad: "Please read and accept the privacy policy"
design_id: design_id:
layout_incompatible: layout_incompatible:
error: "Design can't be changed because there are posts with incompatible layouts" error: "Design can't be changed because there are posts with incompatible layouts"
@ -182,30 +178,6 @@ en:
usuarie: usuarie:
edit: Edit my profile edit: Edit my profile
category: 'Category' category: 'Category'
i18n:
top: 'Back to top'
index: "Here is where you edit the text on your site that doesn't belong to a post, such as its description, sections, buttons... If you change languages up there in the title to be the same, you can edit them. If they're different, you can translate from one into the other."
count: 'This is the amount of texts.'
toc: 'Jump to this section'
meta: 'Metadata'
navegacion: 'Navigation'
inicio: 'Home'
volver: 'Back'
entrar: 'Enter'
cerrar: 'Close'
anchor: 'Internal links'
nav: 'Menu'
nav-lang: 'Language menu'
modulos: 'Modules'
header: 'Header'
sobre: 'About'
metodologia: 'Methodology'
planeando_recursos: 'Planning resources'
rutas: 'Agendas'
complementarios: 'Materials'
recursos: 'Resources'
contacta: 'Contact us'
agradecimientos: 'Acknowledgments'
sites: sites:
index: 'This is the list of sites you can edit.' index: 'This is the list of sites you can edit.'
enqueued: "The site is on queue to be generated. Once this enqueued: "The site is on queue to be generated. Once this
@ -217,6 +189,7 @@ en:
invitations: invitations:
accept: "Someone invited you to collaborate on their site. If you accept the invitation, you can access the site's edit mode." accept: "Someone invited you to collaborate on their site. If you accept the invitation, you can access the site's edit mode."
reject: "If you decline, you won't have access." reject: "If you decline, you won't have access."
pull: 'You have pending upgrades!'
close: 'Close help' close: 'Close help'
deploys: deploys:
deploy_local: deploy_local:
@ -321,15 +294,19 @@ en:
new: new:
title: 'Create site' title: 'Create site'
submit: 'Create site' submit: 'Create site'
help: 'You can edit any of these options after site creation.'
edit: edit:
title: 'Edit %{site}' title: 'Edit %{site}'
submit: 'Save changes' submit: 'Save changes'
btn: 'Configuration'
form: form:
errors: errors:
title: There were errors and we couldn't save your changes :( title: There were errors and we couldn't save your changes :(
help: Please, look for the invalid fields to fix them help: Please, look for the invalid fields to fix them
help: help:
name: "The name of your site. It can only include numbers and letters." name: "The name of your site. It can only include numbers and letters."
title: 'The title can be anything you want'
description: 'You site description that appears in search engines. Between 50 and 160 characters.'
design: 'Select the design for your site. You can change it later. We add more designs from time to time!' design: 'Select the design for your site. You can change it later. We add more designs from time to time!'
licencia: 'Everything we publish has automatic copyright. This licencia: 'Everything we publish has automatic copyright. This
means nobody can use our works without explicit permission. By means nobody can use our works without explicit permission. By
@ -399,6 +376,7 @@ en:
en: 'English' en: 'English'
ar: 'Arabic' ar: 'Arabic'
posts: posts:
caption: Post list
attribute_ro: attribute_ro:
file: file:
download: Download file download: Download file
@ -480,6 +458,10 @@ en:
blank: Nothing blank: Nothing
destroy: Delete destroy: Delete
confirm_destroy: Are you sure? confirm_destroy: Are you sure?
form:
errors:
title: There are some errors on the form
help: Please, verify that all values are correct.
usuaries: usuaries:
invite_as: invite_as:
usuaries: users usuaries: users

View file

@ -178,45 +178,8 @@ es:
usuarie: usuarie:
edit: Editar mi perfil edit: Editar mi perfil
category: 'Categoría' category: 'Categoría'
i18n:
top: 'Volver al principio'
index: 'Aquí puedes editar todos los textos del sitio que no se
corresponden con artículos, como la descripción, secciones, textos
de botones... Si cambias los idiomas arriba para que coincidan,
puedes editar los textos en el mismo idioma. Si los idiomas no
coinciden, puedes traducirlos de uno a otro.'
count: 'Esta es la cantidad de textos.'
toc: 'Saltar hasta esta sección'
meta: 'Metadata'
navegacion: 'Navegación'
inicio: 'Inicio'
volver: 'Volver'
entrar: 'Entrar'
cerrar: 'Cerrar'
anchor: 'Links internos'
nav: 'Menú'
nav-lang: 'Menú de idiomas'
modulos: 'Módulos'
header: 'Portada'
sobre: 'Acerca'
metodologia: 'Metodología'
planeando_recursos: 'Planeando recursos'
rutas: 'Rutas'
complementarios: 'Materiales complementarios'
recursos: 'Recursos'
contacta: 'Contacta'
agradecimientos: 'Agradecimientos'
sesion: 'Sesiones'
sesiones: 'Sesiones'
anexo: 'Anexo'
simple: 'Simple'
sites: sites:
index: 'Este es el listado de sitios que puedes editar.' index: 'Este es el listado de sitios que puedes editar.'
edit_translations: 'Puedes editar los textos que salen en tu sitio
que no corresponden a artículos aquí, además de traducirlos a
otros idiomas.'
edit_posts: 'Aquí verás el listado de todos los artículos y podrás
editarlos o crear nuevos'
enqueued: 'El sitio está en la cola de espera para ser generado. enqueued: 'El sitio está en la cola de espera para ser generado.
Una vez que este proceso termine, recibirás un correo indicando el Una vez que este proceso termine, recibirás un correo indicando el
estado y si todo fue bien, se publicarán los cambios en tu sitio estado y si todo fue bien, se publicarán los cambios en tu sitio
@ -224,9 +187,6 @@ es:
enqueue: 'Cuando termines de hacer cambios en tu sitio, puedes enqueue: 'Cuando termines de hacer cambios en tu sitio, puedes
publicarlos con esta acción. Al finalizar recibirás un correo publicarlos con esta acción. Al finalizar recibirás un correo
avisándote cómo fue todo.' avisándote cómo fue todo.'
build_log: 'Este es el registro de lo que sucedió mientras se
generaba el sitio. Si hubo algún problema, saldrá aquí.'
invitade: 'Les invitades a un sitio solo pueden crear y modificar entradas propias y no pueden publicar sin la revisión de une usuarie'
invitations: invitations:
accept: 'Alguien te invitó a colaborar en su sitio. Si aceptas la invitación, tendrás acceso a este sitio.' accept: 'Alguien te invitó a colaborar en su sitio. Si aceptas la invitación, tendrás acceso a este sitio.'
reject: 'Si rechazas la invitación, no tendrás acceso.' reject: 'Si rechazas la invitación, no tendrás acceso.'