]> git.openstreetmap.org Git - rails.git/commitdiff
Avoid using the zero key for pluralisation in English
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 5 Jul 2023 13:42:07 +0000 (14:42 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 5 Jul 2023 13:47:39 +0000 (14:47 +0100)
This makes it impossible to translate to other languages that use the
`zero:` key, e.g. for other numbers that end in zero.

An alternative approach would be possible in future, when ruby-i18n
and rails and translatewiki all have full support for `0:` and `1:` keys.

Fixes #3997

app/views/diary_entries/_diary_entry.html.erb
app/views/issues/show.html.erb
config/locales/en.yml
test/lib/i18n_test.rb

index 68b0a265a2d970cca5d9fafb6003b05858bcc0e0..37420cdf1dfa41bc58abbb37fdca786057d1c1a8 100644 (file)
       <% if params[:action] == 'index' %>
         <li><%= link_to t(".comment_link"), diary_entry_path(diary_entry.user, diary_entry, :anchor => "newcomment") %></li>
         <li><%= link_to t(".reply_link"), new_message_path(diary_entry.user, :message => { :title => "Re: #{diary_entry.title}" }) %></li>
-        <li><%= link_to t(".comment_count", :count => diary_entry.visible_comments.count), diary_entry_path(diary_entry.user, diary_entry, :anchor => "comments") %></li>
+        <li>
+          <% if diary_entry.visible_comments.count > 0 %>
+            <%= link_to t(".comment_count", :count => diary_entry.visible_comments.count), diary_entry_path(diary_entry.user, diary_entry, :anchor => "comments") %>
+          <% else %>
+            <%= link_to t(".no_comments"), diary_entry_path(diary_entry.user, diary_entry, :anchor => "comments") %>
+          <% end %>
+        </li>
       <% end %>
 
       <% if current_user && current_user == diary_entry.user %>
index eba4448aa1e686d0203ce6140340855981cbfc60..62bd501b74afb2bba2a5aeb59331b9eb43f383e2 100644 (file)
@@ -4,7 +4,11 @@
 <p class="text-muted">
   <small>
     <%= @issue.assigned_role %>
-    | <%= t ".reports", :count => @issue.reports.count %>
+    <% if @issue.reports.count > 0 %>
+      | <%= t ".reports", :count => @issue.reports.count %>
+    <% else %>
+      | <%= t ".no_reports" %>
+    <% end %>
     | <%= t ".report_created_at", :datetime => l(@issue.created_at.to_datetime, :format => :friendly) %>
     <%= " | #{t('.last_resolved_at', :datetime => l(@issue.resolved_at.to_datetime, :format => :friendly))}" if @issue.resolved_at? %>
     <%= " | #{t('.last_updated_at', :datetime => l(@issue.updated_at.to_datetime, :format => :friendly), :displayname => @issue.user_updated.display_name)}" if @issue.user_updated %>
index 8025b617f097a89bcefd0926173f25b6e4ec12eb..11d03c15eb2b9f524894863cd1c1b17ff70db6c2 100644 (file)
@@ -515,9 +515,9 @@ en:
       comment_link: Comment on this entry
       reply_link: Send a message to the author
       comment_count:
-        zero: No comments
         one: "%{count} comment"
         other: "%{count} comments"
+      no_comments: No comments
       edit_link: Edit this entry
       hide_link: Hide this entry
       unhide_link: Unhide this entry
@@ -1403,9 +1403,9 @@ en:
     show:
       title: "%{status} Issue #%{issue_id}"
       reports:
-        zero: No reports
         one: "%{count} report"
         other: "%{count} reports"
+      no_reports: No reports
       report_created_at: "First reported at %{datetime}"
       last_resolved_at: "Last resolved at %{datetime}"
       last_updated_at: "Last updated at %{datetime} by %{displayname}"
index 3f46955b3bab54ce0a21d8ce82f68dc820365b4e..def2442bf3120023fcba78ccefe9000147f7e6cf 100644 (file)
@@ -69,6 +69,15 @@ class I18nTest < ActiveSupport::TestCase
     end
   end
 
+  # We should avoid using the key `zero:` in English, since that key
+  # is used for "numbers ending in zero" in other languages.
+  def test_en_for_zero_key
+    en = YAML.load_file(Rails.root.join("config/locales/en.yml"))
+    assert_nothing_raised do
+      check_keys_for_zero(en)
+    end
+  end
+
   private
 
   def translation_keys(scope = nil)
@@ -116,4 +125,14 @@ class I18nTest < ActiveSupport::TestCase
       end
     end
   end
+
+  def check_keys_for_zero(hash)
+    hash.each_pair do |k, v|
+      if v.is_a? Hash
+        check_keys_for_zero(v)
+      else
+        raise "Avoid using 'zero' key in '#{k}: #{v}'" if k.to_s == "zero"
+      end
+    end
+  end
 end