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