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:
parent
2f66877696
commit
f9ea6aa718
2 changed files with 13 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue