garantizar que todos los locales son simbolos
This commit is contained in:
parent
3bcdc5a00f
commit
c006ed7f29
11 changed files with 27 additions and 34 deletions
|
@ -159,8 +159,8 @@ 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
|
||||
@site&.locales&.find(-> { I18n.locale.to_s }) do |l|
|
||||
l == params[:locale]
|
||||
@site&.locales&.find(-> { I18n.locale }) do |l|
|
||||
l.to_s == params[:locale]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -117,16 +117,11 @@ module ApplicationHelper
|
|||
"#{attribute.join('-')}-datalist"
|
||||
end
|
||||
|
||||
def local_channel
|
||||
"sutty-#{I18n.locale}"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def post_t(*attribute, post:, type:)
|
||||
post.layout.metadata.dig(*attribute, type.to_s, I18n.locale.to_s) ||
|
||||
post.layout.metadata.dig(*attribute,
|
||||
type.to_s, I18n.default_locale.to_s) ||
|
||||
post.layout.metadata.dig(*attribute, type.to_s, I18n.default_locale.to_s) ||
|
||||
I18n.t("posts.attributes.#{attribute.join('.')}.#{type}")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ class MetadataLang < MetadataTemplate
|
|||
end
|
||||
|
||||
def value_from_document
|
||||
document.collection.label
|
||||
document.collection.label.to_sym
|
||||
end
|
||||
|
||||
def value
|
||||
|
|
|
@ -14,9 +14,9 @@ class MetadataLocales < MetadataTemplate
|
|||
# @return { lang: { title: uuid } }
|
||||
def values
|
||||
@values ||= site.locales.map do |locale|
|
||||
[locale.to_sym, site.posts(lang: locale).map do |post|
|
||||
[post.title.value, post.uuid.value]
|
||||
end.to_h]
|
||||
[locale, site.posts(lang: locale).map do |post|
|
||||
[post.title.value, post.uuid.value]
|
||||
end.to_h]
|
||||
end.to_h
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
# Una lista de valores predefinidos
|
||||
class MetadataPredefinedArray < MetadataArray
|
||||
def values
|
||||
@values ||= layout[:metadata][name]['values'].map do |k, v|
|
||||
@values ||= layout.dig(:metadata, name, 'values')&.map do |k, v|
|
||||
[v[I18n.locale.to_s], k]
|
||||
end.to_h
|
||||
end&.to_h
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,12 +57,12 @@ MetadataTemplate = Struct.new(:site, :document, :name, :label, :type,
|
|||
# Trae el idioma actual del sitio o del panel
|
||||
# @return [String]
|
||||
def lang
|
||||
@lang ||= post&.lang&.value || I18n.locale.to_s
|
||||
@lang ||= post&.lang&.value || I18n.locale
|
||||
end
|
||||
|
||||
# El valor por defecto
|
||||
def default_value
|
||||
layout.metadata.dig(name, 'default', lang)
|
||||
layout.metadata.dig(name, 'default', lang.to_s)
|
||||
end
|
||||
|
||||
# Valores posibles, busca todos los valores actuales en otros
|
||||
|
|
|
@ -69,16 +69,16 @@ class Post
|
|||
# date_local
|
||||
#
|
||||
# TODO: Cambiar el locale en otro lado
|
||||
site.jekyll.config['lang'] = lang.value
|
||||
site.jekyll.config['locale'] = lang.value
|
||||
l = lang.value.to_s
|
||||
site.jekyll.config['locale'] = site.jekyll.config['lang'] = l
|
||||
|
||||
# Payload básico con traducciones.
|
||||
document.renderer.payload = {
|
||||
'site' => {
|
||||
'data' => site.data,
|
||||
'i18n' => site.data[lang.value],
|
||||
'lang' => lang.value,
|
||||
'locale' => lang.value
|
||||
'i18n' => site.data[l],
|
||||
'lang' => l,
|
||||
'locale' => l
|
||||
},
|
||||
'page' => document.to_liquid
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ class Site < ApplicationRecord
|
|||
# incorporadas a los sitios de Sutty, aunque les usuaries no traduzcan
|
||||
# sus sitios.
|
||||
def locales
|
||||
config.fetch('locales', I18n.available_locales.map(&:to_s))
|
||||
@locales ||= config.fetch('locales', I18n.available_locales).map(&:to_sym)
|
||||
end
|
||||
|
||||
# Similar a site.i18n en jekyll-locales
|
||||
|
@ -230,7 +230,7 @@ class Site < ApplicationRecord
|
|||
# Crea un Struct dinámico con los valores de los locales, si
|
||||
# llegamos a pasar un idioma que no existe vamos a tener una
|
||||
# excepción NoMethodError
|
||||
@posts ||= Struct.new(*locales.map(&:to_sym)).new
|
||||
@posts ||= Struct.new(*locales).new
|
||||
|
||||
return @posts[lang] unless @posts[lang].blank?
|
||||
|
||||
|
@ -372,7 +372,7 @@ class Site < ApplicationRecord
|
|||
|
||||
# Si estamos usando nuestro propio plugin de i18n, los posts están
|
||||
# en "colecciones"
|
||||
locales.each do |i|
|
||||
locales.map(&:to_s).each do |i|
|
||||
@configuration['collections'][i] = {}
|
||||
end
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
|
|||
end
|
||||
|
||||
def locale
|
||||
params.dig(:post, :lang) || I18n.locale
|
||||
params.dig(:post, :lang)&.to_sym || I18n.locale
|
||||
end
|
||||
|
||||
def layout
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
# Se encargar de guardar cambios en sitios
|
||||
# TODO: Implementar rollback en la configuración
|
||||
# rubocop:disable Metrics/BlockLength
|
||||
SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
||||
# Crea un sitio, agrega un rol nuevo y guarda los cambios a la
|
||||
# configuración en el repositorio git
|
||||
|
@ -11,7 +10,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
|
||||
add_role temporal: false, rol: 'usuarie'
|
||||
|
||||
I18n.with_locale(usuarie&.lang || I18n.default_locale) do
|
||||
I18n.with_locale(usuarie&.lang&.to_sym || I18n.default_locale) do
|
||||
site.save &&
|
||||
site.config.write &&
|
||||
commit_config(action: :create)
|
||||
|
@ -24,7 +23,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
|
||||
# Actualiza el sitio y guarda los cambios en la configuración
|
||||
def update
|
||||
I18n.with_locale(usuarie&.lang || I18n.default_locale) do
|
||||
I18n.with_locale(usuarie&.lang&.to_sym || I18n.default_locale) do
|
||||
site.update(params) &&
|
||||
site.config.write &&
|
||||
commit_config(action: :update)
|
||||
|
@ -80,7 +79,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
|
||||
# Crea la licencia del sitio para cada locale disponible en el sitio
|
||||
def add_licencias
|
||||
site.locales.map(&:to_sym).each do |locale|
|
||||
site.locales.each do |locale|
|
||||
next unless I18n.available_locales.include? locale
|
||||
|
||||
Mobility.with_locale(locale) do
|
||||
|
@ -110,7 +109,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
# TODO: Crear un layout específico para licencias así es más certera
|
||||
# la búsqueda.
|
||||
def change_licencias
|
||||
site.locales.map(&:to_sym).each do |locale|
|
||||
site.locales.each do |locale|
|
||||
Mobility.with_locale(locale) do
|
||||
permalink = "#{I18n.t('activerecord.models.licencia').downcase}/"
|
||||
post = site.posts(lang: locale).find_by(permalink: permalink)
|
||||
|
@ -132,4 +131,3 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
params: params).update
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/BlockLength
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
- next if post.lang.value == locale
|
||||
- locale_t = t("locales.#{locale}.name")
|
||||
- values = metadata.value.select do |x|
|
||||
- metadata.values[locale.to_sym].values.include? x
|
||||
- metadata.values[locale].values.include? x
|
||||
|
||||
.form-group
|
||||
= label_tag "#{base}_#{attribute}_#{locale}", locale_t
|
||||
|
||||
.mapable{ dir: t("locales.#{locale}.dir"), lang: locale,
|
||||
data: { values: values.to_json,
|
||||
'default-values': metadata.values[locale.to_sym].to_json,
|
||||
'default-values': metadata.values[locale].to_json,
|
||||
name: "#{base}[#{attribute}][]",
|
||||
list: id_for_datalist(attribute, locale),
|
||||
button: t('posts.attributes.add'),
|
||||
|
@ -35,5 +35,5 @@
|
|||
metadata: metadata
|
||||
|
||||
%datalist{ id: id_for_datalist(attribute, locale) }
|
||||
- metadata.values[locale.to_sym].keys.each do |value|
|
||||
- metadata.values[locale].keys.each do |value|
|
||||
%option{ value: value }
|
||||
|
|
Loading…
Reference in a new issue