Class: RailsI18nOnair::LocaleFilesController

Inherits:
ApplicationController show all
Defined in:
app/controllers/rails_i18n_onair/locale_files_controller.rb

Instance Method Summary collapse

Instance Method Details

#editObject



20
21
22
23
24
25
26
27
28
# File 'app/controllers/rails_i18n_onair/locale_files_controller.rb', line 20

def edit
  unless @file_info
    redirect_to locale_files_path, alert: "File not found"
    return
  end

  @content = @file_info[:content]
  @parsed_yaml = YAML.safe_load(@content, permitted_classes: [Symbol], aliases: true) rescue {}
end

#indexObject



6
7
8
# File 'app/controllers/rails_i18n_onair/locale_files_controller.rb', line 6

def index
  @locale_files = @file_manager.list_files
end

#reloadObject



84
85
86
87
88
89
# File 'app/controllers/rails_i18n_onair/locale_files_controller.rb', line 84

def reload
  # Reload I18n backend
  I18n.backend.reload!

  redirect_to locale_files_path, notice: "I18n backend reloaded successfully"
end

#showObject



10
11
12
13
14
15
16
17
18
# File 'app/controllers/rails_i18n_onair/locale_files_controller.rb', line 10

def show
  unless @file_info
    redirect_to locale_files_path, alert: "File not found"
    return
  end

  @content = @file_info[:content]
  @parsed_yaml = YAML.safe_load(@content, permitted_classes: [Symbol], aliases: true) rescue {}
end

#syncObject



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'app/controllers/rails_i18n_onair/locale_files_controller.rb', line 70

def sync
  require "rails_i18n_onair/importer"

  importer = RailsI18nOnair::Importer.new
  result = importer.import_all

  if result[:errors].empty?
    redirect_to locale_files_path, notice: "Successfully imported #{result[:imported]} file(s) to database"
  else
    messages = result[:errors].map { |e| "#{e[:language]}: #{e[:error]}" }.join(", ")
    redirect_to locale_files_path, alert: "Import completed with errors: #{messages}"
  end
end

#updateObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'app/controllers/rails_i18n_onair/locale_files_controller.rb', line 30

def update
  unless @file_info
    redirect_to locale_files_path, alert: "File not found"
    return
  end

  filename = "#{params[:locale]}.yml"

  # Convert nested form params back to a hash, restoring the scalar types
  # (integers, booleans, floats) the original YAML used — form fields
  # arrive as strings.
  original = @file_info[:content] ? (YAML.safe_load(@file_info[:content], permitted_classes: [Symbol], aliases: true) rescue nil) : nil
  translations_hash = reconstruct_hash_from_params(params[:translations] || {}, original)

  # Validate that we have data
  if translations_hash.empty?
    flash.now[:alert] = "No translation data received. Please ensure all fields are filled."
    @parsed_yaml = @file_info[:content] ? YAML.safe_load(@file_info[:content], permitted_classes: [Symbol], aliases: true) : {}
    render :edit, status: :unprocessable_entity
    return
  end

  # Convert to YAML with proper formatting
  new_content = translations_hash.to_yaml

  if @file_manager.write_file(filename, new_content)
    redirect_to locale_file_path(locale: params[:locale]), notice: "File updated successfully"
  else
    flash.now[:alert] = "Failed to update file: #{@file_manager.errors.join(', ')}"
    @parsed_yaml = translations_hash
    @content = new_content
    render :edit, status: :unprocessable_entity
  end
rescue StandardError => e
  flash.now[:alert] = "Error processing translations: #{e.message}"
  @parsed_yaml = @file_info[:content] ? YAML.safe_load(@file_info[:content], permitted_classes: [Symbol], aliases: true) : {}
  @content = @file_info[:content]
  render :edit, status: :unprocessable_entity
end