]> git.openstreetmap.org Git - rails.git/commitdiff
Fallback to english locale when looking for community index templates
authorTom Hughes <tom@compton.nu>
Thu, 18 Jul 2024 17:00:19 +0000 (18:00 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 18 Jul 2024 17:00:19 +0000 (18:00 +0100)
Starting with the v5.8.0 release osm-community-index has removed
strings from translations which are identical to the engish version
which mostly causes no problem except for some of the template values
that don't involve any localised text.

lib/osm_community_index.rb
test/lib/osm_community_index_test.rb

index a5c2fba72d2b93c9f1e6a566e0cf2ba95f6a1d94..9afb33a7ed569d9224fd4cf21b4f8ca4e69ff0ea 100644 (file)
@@ -2,6 +2,7 @@ module OsmCommunityIndex
   def self.add_to_i18n
     # Filter the communities here to avoid loading excessive numbers of translations
     communities = Community.where(:type => "osm-lc").where.not(:id => "OSMF")
+    community_en_yaml = YAML.safe_load_file("node_modules/osm-community-index/i18n/en.yaml")["en"]
 
     files = Rails.root.glob("node_modules/osm-community-index/i18n/*.yaml")
     files.each do |file|
@@ -14,7 +15,7 @@ module OsmCommunityIndex
         id = community.id
 
         strings = community_locale_yaml[id] || {}
-        strings["name"] = resolve_name(community, community_locale_yaml)
+        strings["name"] = resolve_name(community, community_locale_yaml, community_en_yaml)
 
         obj.deep_merge!("osm_community_index" => { "communities" => { id => strings } })
       end
@@ -23,13 +24,14 @@ module OsmCommunityIndex
     end
   end
 
-  def self.resolve_name(community, community_locale_yaml)
+  def self.resolve_name(community, community_locale_yaml, community_en_yaml)
     # If theres an explicitly translated name then use that
     translated_name = community_locale_yaml.dig(community.id, "name")
     return translated_name if translated_name
 
     # If not, then look up the default translated name for this type of community, and interpolate the template
-    template = community_locale_yaml.dig("_defaults", community.type, "name")
+    template = community_locale_yaml.dig("_defaults", community.type, "name") ||
+               community_en_yaml.dig("_defaults", community.type, "name")
     community_name = community_locale_yaml.dig("_communities", community.strings["communityID"])
     # Change the `{community}` placeholder to `%{community}` and use Ruby's Kernel.format to fill it in.
     translated_name = format(template.gsub("{", "%{"), { :community => community_name }) if template && community_name
index 9abb61c3773cddb99510b907fe517b40bf8d6178..a922d7fd9965613b306fe7931999cf28ddd55933 100644 (file)
@@ -5,8 +5,9 @@ class CountryTest < ActiveSupport::TestCase
     # If there is no translations and no name for the chapter, use the community name
     community = Community.new({ "id" => "foo-chapter", "type" => "osm-lc", "strings" => { "community" => "Community Name" } })
     community_locale_yaml = {}
+    community_en_yaml = {}
 
-    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml)
+    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
     assert_equal("Community Name", name)
   end
 
@@ -14,8 +15,9 @@ class CountryTest < ActiveSupport::TestCase
     # If there is a name for the chapter, prefer that to the community name
     community = Community.new({ "id" => "foo-chapter", "type" => "osm-lc", "strings" => { "community" => "Community Name", "name" => "Chapter Name" } })
     community_locale_yaml = {}
+    community_en_yaml = {}
 
-    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml)
+    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
     assert_equal("Chapter Name", name)
   end
 
@@ -23,8 +25,9 @@ class CountryTest < ActiveSupport::TestCase
     # If there is an explicitly translated name for the chapter, use that
     community = Community.new({ "id" => "foo-chapter", "type" => "osm-lc", "strings" => { "community" => "Community Name", "name" => "Chapter Name" } })
     community_locale_yaml = { "foo-chapter" => { "name" => "Translated Chapter Name" } }
+    community_en_yaml = {}
 
-    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml)
+    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
     assert_equal("Translated Chapter Name", name)
   end
 
@@ -32,8 +35,9 @@ class CountryTest < ActiveSupport::TestCase
     # If there's no explicitly translated name for the chapter, use the default name and interpolate the community name if required.
     community = Community.new({ "id" => "foo-chapter", "type" => "osm-lc", "strings" => { "community" => "Community Name", "communityID" => "communityname" } })
     community_locale_yaml = { "_communities" => { "communityname" => "Translated Community" }, "_defaults" => { "osm-lc" => { "name" => "{community} Chapter" } } }
+    community_en_yaml = {}
 
-    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml)
+    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
     assert_equal("Translated Community Chapter", name)
   end
 end