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
|
def self.add_to_i18n
|
||||||
# Filter the communities here to avoid loading excessive numbers of translations
|
# Filter the communities here to avoid loading excessive numbers of translations
|
||||||
communities = Community.where(:type => "osm-lc").where.not(:id => "OSMF")
|
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 = Rails.root.glob("node_modules/osm-community-index/i18n/*.yaml")
|
||||||
files.each do |file|
|
files.each do |file|
|
||||||
|
@ -14,7 +15,7 @@ module OsmCommunityIndex
|
||||||
id = community.id
|
id = community.id
|
||||||
|
|
||||||
strings = community_locale_yaml[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 } })
|
obj.deep_merge!("osm_community_index" => { "communities" => { id => strings } })
|
||||||
end
|
end
|
||||||
|
@ -23,13 +24,14 @@ module OsmCommunityIndex
|
||||||
end
|
end
|
||||||
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
|
# If theres an explicitly translated name then use that
|
||||||
translated_name = community_locale_yaml.dig(community.id, "name")
|
translated_name = community_locale_yaml.dig(community.id, "name")
|
||||||
return translated_name if translated_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
|
# 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"])
|
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.
|
# 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
|
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
|
# 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 = Community.new({ "id" => "foo-chapter", "type" => "osm-lc", "strings" => { "community" => "Community Name" } })
|
||||||
community_locale_yaml = {}
|
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)
|
assert_equal("Community Name", name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -14,8 +15,9 @@ class CountryTest < ActiveSupport::TestCase
|
||||||
# If there is a name for the chapter, prefer that to the community name
|
# 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 = Community.new({ "id" => "foo-chapter", "type" => "osm-lc", "strings" => { "community" => "Community Name", "name" => "Chapter Name" } })
|
||||||
community_locale_yaml = {}
|
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)
|
assert_equal("Chapter Name", name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -23,8 +25,9 @@ class CountryTest < ActiveSupport::TestCase
|
||||||
# If there is an explicitly translated name for the chapter, use that
|
# 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 = 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_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)
|
assert_equal("Translated Chapter Name", name)
|
||||||
end
|
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.
|
# 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 = 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_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)
|
assert_equal("Translated Community Chapter", name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue