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.
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")
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|
files = Rails.root.glob("node_modules/osm-community-index/i18n/*.yaml")
files.each do |file|
id = community.id
strings = community_locale_yaml[id] || {}
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
obj.deep_merge!("osm_community_index" => { "communities" => { id => strings } })
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
# 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
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
# 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 = {}
# 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 = {}
- 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
assert_equal("Community Name", name)
end
# 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 = {}
# 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 = {}
- 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
assert_equal("Chapter Name", name)
end
# 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" } }
# 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" } }
- 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
assert_equal("Translated Chapter Name", name)
end
# 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" } } }
# 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" } } }
- 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
assert_equal("Translated Community Chapter", name)
end
end