Skip to content
Snippets Groups Projects
Select Git revision
  • 5fd69af69058f7997ec45aa59073b2f0b8874def
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

locales_controller.rb

Blame
  • user avatar
    Ahmad Farhat authored and GitHub committed
    5fd69af6
    History
    locales_controller.rb 1.37 KiB
    # frozen_string_literal: true
    
    module Api
      module V1
        class LocalesController < ApiController
          skip_before_action :ensure_authenticated, only: :show
          skip_before_action :ensure_valid_request, only: :show
    
          # GET /api/v1/locales
          def index
            language_with_name = Rails.cache.fetch('locales/list', expires_in: 24.hours) do
              language_hash = {}
    
              languages = Dir.entries(Rails.root.join('app/assets/locales')).select { |file_name| file_name.ends_with?('.json') }
              language_list = I18n::Language::Mapping.language_mapping_list
    
              languages.each do |lang|
                language = lang.split('.').first
                native_name = language_list.dig(language.tr('_', '-'), 'nativeName')
    
                language_hash[language] = native_name if native_name.present?
              end
    
              language_hash
            end
    
            render_data data: language_with_name, status: :ok
          end
    
          # GET /api/v1/locales/:name
          def show
            language = params[:name].tr('-', '_')
    
            # Serve locales files directly in development (not through asset pipeline)
            return render file: Rails.root.join('app', 'assets', 'locales', "#{language}.json") if Rails.env.development?
    
            redirect_to ActionController::Base.helpers.asset_path("#{language}.json")
          rescue StandardError
            head :not_acceptable
          end
        end
      end
    end