diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index bc375dcf..acd0134d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -40,11 +40,21 @@ class ApplicationController < ActionController::Base site 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 # corresponde con el idioma de los artículos, porque puede querer # traducirlos. def set_locale(&action) - I18n.with_locale(current_usuarie&.lang || I18n.default_locale, &action) + I18n.with_locale(current_locale(include_params: false), &action) end # Muestra una página 404 diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index e8ceeebf..c578e944 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -14,7 +14,7 @@ class PostsController < ApplicationController # Las URLs siempre llevan el idioma actual o el de le usuarie def default_url_options - { locale: params[:locale] || current_usuarie&.lang || I18n.locale } + { locale: current_locale } end def index @@ -27,7 +27,7 @@ class PostsController < ApplicationController # XXX: Cada vez que cambiamos un Post tocamos el sitio con lo que es # 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 = @posts.where(categories: @category) if @category @posts = @posts.where(layout: @layout) if @layout @@ -120,7 +120,7 @@ class PostsController < ApplicationController # TODO: Notificar si se pudo o no service.destroy site.touch - redirect_to site_posts_path(site) + redirect_to site_posts_path(site, locale: post.locale.value) end # Reordenar los artículos @@ -133,7 +133,7 @@ class PostsController < ApplicationController service.reorder site.touch - redirect_to site_posts_path(site) + redirect_to site_posts_path(site, locale: site.default_locale) end # 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 # _config.yml del sitio en lugar de mezclar idiomas. def locale - @locale ||= site&.locales&.find(-> { I18n.locale }) do |l| + @locale ||= site&.locales&.find(-> { site&.default_locale }) do |l| l.to_s == params[:locale] end end diff --git a/app/controllers/sites_controller.rb b/app/controllers/sites_controller.rb index f3114d9a..d221628e 100644 --- a/app/controllers/sites_controller.rb +++ b/app/controllers/sites_controller.rb @@ -23,7 +23,7 @@ class SitesController < ApplicationController def show authorize site - redirect_to site_posts_path(site) + redirect_to site_posts_path(site, locale: site.default_locale) end def new @@ -40,7 +40,7 @@ class SitesController < ApplicationController params: site_params) if (@site = service.create).persisted? - redirect_to site_posts_path(@site) + redirect_to site_posts_path(@site, locale: @site.default_locale) else render 'new' end @@ -49,7 +49,7 @@ class SitesController < ApplicationController def edit 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) SiteService.new(site: site).build_deploys @@ -62,7 +62,7 @@ class SitesController < ApplicationController usuarie: current_usuarie) if service.update.valid? - redirect_to site_posts_path(site) + redirect_to site_posts_path(site, locale: site.default_locale) else render 'edit' end @@ -74,7 +74,7 @@ class SitesController < ApplicationController # XXX: Convertir en una máquina de estados? 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 def reorder_posts @@ -94,7 +94,7 @@ class SitesController < ApplicationController flash[:danger] = I18n.t('errors.posts.reorder') end - redirect_to site_posts_path(site) + redirect_to site_posts_path(site, locale: site.default_locale) end def fetch diff --git a/app/views/posts/_form.haml b/app/views/posts/_form.haml index a9819a1b..e46b2eda 100644 --- a/app/views/posts/_form.haml +++ b/app/views/posts/_form.haml @@ -43,7 +43,7 @@ - metadata = post[attribute] - type = metadata.type - - cache metadata do + - cache [metadata, I18n.locale] do = render("posts/attributes/#{type}", base: 'post', post: post, attribute: attribute, metadata: metadata, site: site, diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml index 35356349..67f909f0 100644 --- a/app/views/posts/index.haml +++ b/app/views/posts/index.haml @@ -73,10 +73,7 @@ -# TODO: Solo les usuaries cachean porque tenemos que separar les botones por permisos. - - TODO: Verificar qué pasa cuando se gestiona el sitio en - distintos idiomas a la vez - - cache_if @usuarie, post do + - cache_if @usuarie, [post, I18n.locale] do - checkbox_id = "checkbox-#{post.uuid.value}" %tr{ id: post.uuid.value, data: { target: 'reorder.row' } } %td diff --git a/app/views/posts/show.haml b/app/views/posts/show.haml index 9d6f37cd..da6ac9db 100644 --- a/app/views/posts/show.haml +++ b/app/views/posts/show.haml @@ -22,7 +22,7 @@ - metadata = @post[attr] - next unless metadata.front_matter? - - cache metadata do + - cache [metadata, I18n.locale] do = render("posts/attribute_ro/#{metadata.type}", post: @post, attribute: attr, metadata: metadata, @@ -36,6 +36,6 @@ - metadata = @post[attr] - next if metadata.front_matter? - - cache metadata do + - cache [metadata, I18n.locale] do %section.editor{ id: attr, dir: dir } = @post.public_send(attr).to_s.html_safe diff --git a/app/views/sites/index.haml b/app/views/sites/index.haml index dfcc2203..d7eefb95 100644 --- a/app/views/sites/index.haml +++ b/app/views/sites/index.haml @@ -18,12 +18,12 @@ -# TODO: Solo les usuaries cachean porque tenemos que separar les botones por permisos. - - cache_if (rol.usuarie? && !rol.temporal), site do + - cache_if (rol.usuarie? && !rol.temporal), [site, I18n.locale] do %tr %td %h2 - if policy(site).show? - = link_to site.title, site_path(site) + = link_to site.title, site_posts_path(site, locale: site.default_locale) - else = site.title %p.lead= site.description diff --git a/config/locales/en.yml b/config/locales/en.yml index 1ad6cbd3..f1f9b7cb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -84,10 +84,6 @@ en: title: Link to www success: Success! error: Error - deploy_private: - title: Private version - success: Success! - error: Error deploy_zip: title: Build ZIP file success: Available for download @@ -96,6 +92,10 @@ en: title: Host as Tor Hidden Service success: Success! error: Error + deploy_private: + title: Private version + success: Success! + error: Error deploy_alternative_domain: title: Alternative domain name success: Success! @@ -123,6 +123,7 @@ en: models: usuarie: User licencia: License + design: Design attributes: usuarie: email: 'E-mail address' @@ -130,27 +131,22 @@ en: password_confirmation: 'Password confirmation' current_password: 'Current password' lang: 'Main language' + remember_me: Remember me site: name: 'Name' title: 'Title' description: 'Description' - colaboracion_anonima: Enable anonymous collaboration acepta_invitades: Enable collaboration + colaboracion_anonima: Enable anonymous collaboration contact: Enable contact forms + tienda_url: Store URL + tienda_api_key: Store access key errors: models: site: attributes: deploys: 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: layout_incompatible: error: "Design can't be changed because there are posts with incompatible layouts" @@ -182,30 +178,6 @@ en: usuarie: edit: Edit my profile 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: index: 'This is the list of sites you can edit.' enqueued: "The site is on queue to be generated. Once this @@ -217,6 +189,7 @@ en: invitations: 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." + pull: 'You have pending upgrades!' close: 'Close help' deploys: deploy_local: @@ -321,15 +294,19 @@ en: new: title: 'Create site' submit: 'Create site' + help: 'You can edit any of these options after site creation.' edit: title: 'Edit %{site}' submit: 'Save changes' + btn: 'Configuration' form: errors: title: There were errors and we couldn't save your changes :( help: Please, look for the invalid fields to fix them help: 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!' licencia: 'Everything we publish has automatic copyright. This means nobody can use our works without explicit permission. By @@ -399,6 +376,7 @@ en: en: 'English' ar: 'Arabic' posts: + caption: Post list attribute_ro: file: download: Download file @@ -480,6 +458,10 @@ en: blank: Nothing destroy: Delete confirm_destroy: Are you sure? + form: + errors: + title: There are some errors on the form + help: Please, verify that all values are correct. usuaries: invite_as: usuaries: users diff --git a/config/locales/es.yml b/config/locales/es.yml index c9c42c60..1ce50b09 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -178,45 +178,8 @@ es: usuarie: edit: Editar mi perfil 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: 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. 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 @@ -224,9 +187,6 @@ es: enqueue: 'Cuando termines de hacer cambios en tu sitio, puedes publicarlos con esta acción. Al finalizar recibirás un correo 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: 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.'