From 764f808d5a5faebc835ed0f588bae4a306ad687d Mon Sep 17 00:00:00 2001 From: Adam Hoyle Date: Wed, 24 Nov 2021 22:47:19 +0000 Subject: [PATCH] Remove hand rolled i18n support --- app/controllers/site_controller.rb | 4 +- app/views/site/communities.html.erb | 2 +- lib/osm_community_index/local_chapter.rb | 85 +++++++++---------- .../osm_community_index.rb | 29 ------- 4 files changed, 41 insertions(+), 79 deletions(-) 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_chapter_localisation + def self.load_local_chapters community_index = OsmCommunityIndex.community_index - localisation_files = Dir.children(Rails.root.join("node_modules/osm-community-index/i18n/")) - localisation_files.each do |file| - locale = File.basename(file,".yaml") - # 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"] - - 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)) + # name comes via I18n + url = resource["strings"]["url"] + local_chapters.push(LocalChapter.new(id, url)) end end local_chapters end + + def self.add_to_i18n + community_index = OsmCommunityIndex.community_index + 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("-") + + community_index["resources"].each do |id, resource| + resource.each do |key, value| + next unless key == "type" && value == "osm-lc" && id != "OSMF" + + 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 + I18n.backend.store_translations locale_rails, data + + end + end + end + 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