]> git.openstreetmap.org Git - rails.git/commitdiff
Remove hand rolled i18n support
authorAdam Hoyle <atomoil@gmail.com>
Wed, 24 Nov 2021 22:47:19 +0000 (22:47 +0000)
committerAdam Hoyle <atomoil@gmail.com>
Wed, 24 Nov 2021 22:47:19 +0000 (22:47 +0000)
app/controllers/site_controller.rb
app/views/site/communities.html.erb
lib/osm_community_index/local_chapter.rb
lib/osm_community_index/osm_community_index.rb

index 17353fe96ddc398bc6c42730bd4f0882e3e47772..a73d1e2e50e74f9595605917440a60a5cf7ba4f5 100644 (file)
@@ -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
index e238d73779fd5e03c163eddce88e6b4898013feb..adbd7ab3d5650136dc900284cb3424fc621fdbe2 100644 (file)
@@ -11,7 +11,7 @@
   <p><%= t ".local_chapters.list_text" %></p>
   <ul>
     <% @local_chapters.each do |chapter| %>
-      <li><a href="<%= chapter.url %>"><%= chapter.name %> / <%= t "osm_community_index.local_chapter." + chapter.id + ".name" %></a></li>
+      <li><a href="<%= chapter.url %>"><%= t "osm_community_index.local_chapter." + chapter.id + ".name" %></a></li>
     <% end %>
   </ul>
   <h2><%= t ".other_groups.title" %></h2>
index 3471d78b0ba1f475a21cd4db2ff4fa9f76296f05..ca63d378223aa72f37f58a828c8aef954bd7cf8b 100644 (file)
@@ -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
index caa47304c1181272c13b705ffae0a87768987f05..cceb1e05be06e9b63aadfb4677cd88799073d568 100644 (file)
@@ -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