aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/public_body.rb28
-rw-r--r--spec/fixtures/files/multiple-locales-same-name.csv2
-rw-r--r--spec/models/public_body_spec.rb16
3 files changed, 44 insertions, 2 deletions
diff --git a/app/models/public_body.rb b/app/models/public_body.rb
index a9cdfeab2..ec4e8bb32 100644
--- a/app/models/public_body.rb
+++ b/app/models/public_body.rb
@@ -422,6 +422,17 @@ class PublicBody < ActiveRecord::Base
has_tag?('site_administration')
end
+
+ # Read an attribute value (without using locale fallbacks if the attribute is translated)
+ def read_attribute_value(name, locale)
+ if PublicBody.translates.include?(name.to_sym)
+ globalize.stash.contains?(locale, name) ? globalize.stash.read(locale, name) : translation_for(locale).send(name)
+ else
+ self.send(name)
+ end
+ end
+
+
class ImportCSVDryRun < StandardError
end
@@ -521,8 +532,8 @@ class PublicBody < ActiveRecord::Base
end
end
end
+ if !localized_value.nil? and public_body.read_attribute_value(field_name, locale) != localized_value
- if !localized_value.nil? and public_body.send(field_name) != localized_value
changed[field_name] = "#{public_body.send(field_name)}: #{localized_value}"
public_body.send("#{field_name}=", localized_value)
end
@@ -549,7 +560,7 @@ class PublicBody < ActiveRecord::Base
localized_value = "#{localized_value} #{tag}" unless tag.empty?
end
- if !localized_value.nil? and public_body.send(field_name) != localized_value
+ if !localized_value.nil? and public_body.read_attribute_value(field_name, locale) != localized_value
changed[field_name] = localized_value
public_body.send("#{field_name}=", localized_value)
end
@@ -793,6 +804,19 @@ class PublicBody < ActiveRecord::Base
private
+ # Read an attribute value (without using locale fallbacks if the attribute is translated)
+ def read_attribute_value(name, locale)
+ if self.class.translates.include?(name.to_sym)
+ if globalize.stash.contains?(locale, name)
+ globalize.stash.read(locale, name)
+ else
+ translation_for(locale).send(name)
+ end
+ else
+ send(name)
+ end
+ end
+
def request_email_if_requestable
# Request_email can be blank, meaning we don't have details
if self.is_requestable?
diff --git a/spec/fixtures/files/multiple-locales-same-name.csv b/spec/fixtures/files/multiple-locales-same-name.csv
new file mode 100644
index 000000000..43505f6a6
--- /dev/null
+++ b/spec/fixtures/files/multiple-locales-same-name.csv
@@ -0,0 +1,2 @@
+"#id","request_email","name","name.es","tag_string","home_page"
+23842,"test@test.es","Test","Test",37,"http://www.test.es/"
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index 225958cac..23f3aa5d6 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -598,6 +598,22 @@ CSV
PublicBody.csv_import_fields = old_csv_import_fields
end
+ it "should import translations for fields whose values are the same as the default locale's" do
+ original_count = PublicBody.count
+
+ csv_contents = load_file_fixture("multiple-locales-same-name.csv")
+
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', true, 'someadmin', ['en', 'es']) # true means dry run
+ errors.should == []
+ notes.size.should == 3
+ notes[0..1].should == [
+ "line 2: creating new authority 'Test' (locale: en):\n\t{\"name\":\"Test\",\"request_email\":\"test@test.es\",\"home_page\":\"http://www.test.es/\",\"tag_string\":\"37\"}",
+ "line 2: creating new authority 'Test' (locale: es):\n\t{\"name\":\"Test\"}",
+ ]
+ notes[2].should =~ /Notes: Some bodies are in database, but not in CSV file:\n( .+\n)*You may want to delete them manually.\n/
+
+ PublicBody.count.should == original_count
+ end
end
describe PublicBody do