From da3b4c3f71f0197b50524e2a617b547087251c67 Mon Sep 17 00:00:00 2001 From: Larissa Reis Date: Thu, 13 Nov 2014 00:47:51 -0300 Subject: [PATCH] Adds support for domain specific custom locales --- app/controllers/application_controller.rb | 3 +++ app/models/domain.rb | 7 +++++++ lib/noosfero/i18n.rb | 13 +++++++++++++ 3 files changed, 23 insertions(+), 0 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0f630af..49c7f04 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -127,6 +127,9 @@ class ApplicationController < ActionController::Base # TODO: move this logic somewhere else (Domain class?) def detect_stuff_by_domain + # Sets text domain based on request host for custom internationalization + FastGettext.text_domain = Domain.custom_locale(request.host) + @domain = Domain.find_by_name(request.host) if @domain.nil? @environment = Environment.default diff --git a/app/models/domain.rb b/app/models/domain.rb index 982cf6a..a5fb478 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -92,4 +92,11 @@ class Domain < ActiveRecord::Base @hosting = {} end + # Detects a domain's custom text domain chain if available based on a domain + # served on multitenancy configuration or a registered domain. + def self.custom_locale(domainname) + domain = Noosfero::MultiTenancy.mapping[domainname] || domainname[/(.*?)\./,1] + FastGettext.translation_repositories.keys.include?(domain) ? domain : FastGettext.default_text_domain + end + end diff --git a/lib/noosfero/i18n.rb b/lib/noosfero/i18n.rb index 46ac9c2..48f2d63 100644 --- a/lib/noosfero/i18n.rb +++ b/lib/noosfero/i18n.rb @@ -7,6 +7,7 @@ class Object end +# Adds custom locales for a whole environment custom_locale_dir = Rails.root.join('custom_locales', Rails.env) repos = [] if File.exists?(custom_locale_dir) @@ -22,3 +23,15 @@ end FastGettext.add_text_domain 'noosfero', :type => :chain, :chain => repos FastGettext.default_text_domain = 'noosfero' + +# Adds custom locales for specific domains; Domains are identified by the +# sequence before the first dot, while tenants are identified by schema name +hosted_environments = Noosfero::MultiTenancy.mapping.values +hosted_environments += Domain.all.map { |domain| domain.name[/(.*?)\./,1] } if Domain.table_exists? + +hosted_environments.uniq.each do |env| + custom_locale_dir = Rails.root.join('custom_locales', env) + if File.exists?(custom_locale_dir) + FastGettext.add_text_domain(env, :type => :chain, :chain => [FastGettext::TranslationRepository.build('environment', :type => 'po', :path => custom_locale_dir)] + repos) + end +end -- libgit2 0.21.2