]> git.openstreetmap.org Git - rails.git/commitdiff
OCI: ignore invalid replacement token
authormmd-osm <mmd.osm@gmail.com>
Sat, 21 Sep 2024 07:17:03 +0000 (09:17 +0200)
committermmd-osm <mmd.osm@gmail.com>
Sat, 21 Sep 2024 07:17:03 +0000 (09:17 +0200)
lib/osm_community_index.rb
test/lib/osm_community_index_test.rb

index 11383dd16beb855fb8f14ae2faf7b72515978379..c395a376881541abdc8c0b7d364584b39be0aac9 100644 (file)
@@ -38,7 +38,11 @@ module OsmCommunityIndex
                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.
                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
+    begin
+      translated_name = format(template.gsub("{", "%{"), { :community => community_name }) if template && community_name
+    rescue KeyError => e
+      Rails.logger.warn e.full_message
+    end
     return translated_name if translated_name
 
     # Otherwise fall back to the (English-language) resource name
     return translated_name if translated_name
 
     # Otherwise fall back to the (English-language) resource name
index a922d7fd9965613b306fe7931999cf28ddd55933..9b10d81d98d5ac038ae718f9e41b4a8e887073ad 100644 (file)
@@ -40,4 +40,14 @@ class CountryTest < ActiveSupport::TestCase
     name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
     assert_equal("Translated Community Chapter", name)
   end
     name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
     assert_equal("Translated Community Chapter", name)
   end
+
+  def test_i18n_invalid_replacement_token
+    # Ignore invalid replacement tokens in OCI data provided. This might happen if translators were mistakenly translating the predefined token ids.
+    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" => "{comminauté} Chapter" } } }
+    community_en_yaml = {}
+
+    name = OsmCommunityIndex.resolve_name(community, community_locale_yaml, community_en_yaml)
+    assert_equal("Community Name", name)
+  end
 end
 end