From: Adam Hoyle Date: Wed, 24 Nov 2021 22:47:19 +0000 (+0000) Subject: Remove hand rolled i18n support X-Git-Tag: live~1451^2~27 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/764f808d5a5faebc835ed0f588bae4a306ad687d?ds=sidebyside Remove hand rolled i18n support --- diff --git a/app/controllers/site_controller.rb b/app/controllers/site_controller.rb index 17353fe96..a73d1e2e5 100644 --- a/app/controllers/site_controller.rb +++ b/app/controllers/site_controller.rb @@ -107,8 +107,8 @@ class SiteController < ApplicationController end def communities - @locale = I18n.locale - @local_chapters = OsmCommunityIndex::LocalChapter.local_chapters_with_locale(@locale) + OsmCommunityIndex::LocalChapter.add_to_i18n # this should be called on app init + @local_chapters = OsmCommunityIndex::LocalChapter.local_chapters end def export; end diff --git a/app/views/site/communities.html.erb b/app/views/site/communities.html.erb index e238d7377..adbd7ab3d 100644 --- a/app/views/site/communities.html.erb +++ b/app/views/site/communities.html.erb @@ -11,7 +11,7 @@

<%= t ".local_chapters.list_text" %>

<%= t ".other_groups.title" %>

diff --git a/lib/osm_community_index/local_chapter.rb b/lib/osm_community_index/local_chapter.rb index 3471d78b0..ca63d3782 100644 --- a/lib/osm_community_index/local_chapter.rb +++ b/lib/osm_community_index/local_chapter.rb @@ -1,68 +1,59 @@ module OsmCommunityIndex class LocalChapter - attr_reader :id, :name, :url + attr_reader :id, :url - @localised_chapters = {} - - def initialize(id, name, url) + def initialize(id, url) @id = id - @name = name @url = url end - def self.local_chapters_with_locale(locale) - load_local_chapter_localisation - @localised_chapters[locale] ||= load_local_chapters(locale) + def self.local_chapters + @chapters = load_local_chapters + end + + def self.load_local_chapters + community_index = OsmCommunityIndex.community_index + local_chapters = [] + community_index["resources"].each do |id, resource| + resource.each do |key, value| + next unless key == "type" && value == "osm-lc" && id != "OSMF" + + # name comes via I18n + url = resource["strings"]["url"] + local_chapters.push(LocalChapter.new(id, url)) + end + end + local_chapters end - def self.load_local_chapter_localisation + def self.add_to_i18n community_index = OsmCommunityIndex.community_index - localisation_files = Dir.children(Rails.root.join("node_modules/osm-community-index/i18n/")) - localisation_files.each do |file| + files = Dir.children(Rails.root.join("node_modules/osm-community-index/i18n/")) + files.each do |file| + path = Rails.root.join("node_modules/osm-community-index/i18n/#{file}") locale = File.basename(file,".yaml") + community_index_yaml = YAML.safe_load(File.read(path))[locale] # rails wants en-GB but osm-community-index has en_GB locale_rails = locale.split("_").join("-") - full_path = Rails.root.join("node_modules/osm-community-index/i18n/#{file}") - locale_data = YAML.safe_load(File.read(full_path))[locale] community_index["resources"].each do |id, resource| resource.each do |key, value| next unless key == "type" && value == "osm-lc" && id != "OSMF" - strings = locale_data[id] || {} - strings['name'] = locale_data['name'] || resource["strings"]["name"] || resource["strings"]["community"] + strings = community_index_yaml[id] || {} + # if the name isn't defined then fall back on community, + # as per discussion here: https://github.com/osmlab/osm-community-index/issues/483 + strings['name'] = strings['name'] || resource["strings"]["name"] || resource["strings"]["community"] data = {} data["osm_community_index"] = {} data["osm_community_index"]["local_chapter"] = {} data["osm_community_index"]["local_chapter"][id] = strings - # data["osm_community_index.local_chapter." + id] = localisation I18n.backend.store_translations locale_rails, data - if locale == "en" - puts locale_rails + " " + id + " " + data.to_s - end end end end - - end - - def self.load_local_chapters(locale) - community_index = OsmCommunityIndex.community_index - localised_strings = OsmCommunityIndex.localised_strings(locale) - local_chapters = [] - community_index["resources"].each do |id, resource| - resource.each do |key, value| - next unless key == "type" && value == "osm-lc" && id != "OSMF" - - strings = resource["strings"] - name = localised_strings.dig(id, "name") || strings["name"] || strings["community"] - url = strings["url"] - local_chapters.push(LocalChapter.new(id, name, url)) - end - end - local_chapters end end end diff --git a/lib/osm_community_index/osm_community_index.rb b/lib/osm_community_index/osm_community_index.rb index caa47304c..cceb1e05b 100644 --- a/lib/osm_community_index/osm_community_index.rb +++ b/lib/osm_community_index/osm_community_index.rb @@ -2,43 +2,14 @@ module OsmCommunityIndex class OsmCommunityIndex require "yaml" - @localised_strings = {} - def self.community_index @community_index ||= community_index_from_json end - def self.localised_strings(locale) - @localised_strings[locale] ||= locale_hash_from_json(locale) - end - def self.community_index_from_json json_file = Rails.root.join("node_modules/osm-community-index/dist/resources.json") JSON.parse(File.read(json_file)) end - def self.locale_hash_from_json(locale_in) - locale = locale_in.to_s.tr("-", "_") - # try the passed in locale - json = load_locale_json(locale) - return json unless json.nil? - - # now try it without it's country part (eg 'en' instead of 'en_GB') - shortened_locale = locale.split("_").first - unless shortened_locale == locale - json = load_locale_json(shortened_locale) - return json unless json.nil? - end - - # if nothing else works, then return "en" - load_locale_json("en") - end - - def self.load_locale_json(locale) - json_path = Rails.root.join("node_modules/osm-community-index/i18n/#{locale}.yaml") - return YAML.safe_load(File.read(json_path))[locale] if File.exist?(json_path) - - nil - end end end