Fallback to english locale when looking for community index templates

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.
This commit is contained in:
Tom Hughes 2024-07-18 18:00:19 +01:00
parent 2f66877696
commit f9ea6aa718
2 changed files with 13 additions and 7 deletions

View 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