end
if params.key?(:display_name)
- t "browse.#{action}_html",
- :time => time,
- :title => title
+ t "browse.#{action}_ago_html", :time_ago => tag.abbr(time, :title => title)
else
- t "browse.#{action}_by_html",
- :time => time,
- :title => title,
- :user => changeset_user_link(changeset)
+ t "browse.#{action}_ago_by_html", :time_ago => tag.abbr(time, :title => title),
+ :user => changeset_user_link(changeset)
end
end
<ul class="list-unstyled">
<li>
- <%= t "browse.#{common_details.visible? ? :edited : :deleted}_by_html",
- :time => time_ago_in_words(common_details.timestamp, :scope => :"datetime.distance_in_words_ago"),
- :user => changeset_user_link(common_details.changeset),
- :title => l(common_details.timestamp) %>
+ <%= t "browse.#{common_details.visible? ? :edited : :deleted}_ago_by_html",
+ :time_ago => tag.abbr(time_ago_in_words(common_details.timestamp, :scope => :"datetime.distance_in_words_ago"),
+ :title => l(common_details.timestamp)),
+ :user => changeset_user_link(common_details.changeset) %>
</li>
<li>
<%= t "browse.in_changeset" %>
<% if comment.visible %>
<li id="c<%= comment.id %>">
<small class='text-muted'>
- <%= t(".commented_by_html",
- :when => friendly_date_ago(comment.created_at),
- :exact_time => l(comment.created_at),
+ <%= t(".comment_by_html",
+ :time_ago => tag.abbr(friendly_date_ago(comment.created_at),
+ :title => l(comment.created_at)),
:user => link_to(comment.author.display_name, user_path(comment.author))) %>
<% if current_user and current_user.moderator? %>
— <span class="action-button" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_hide_url(comment.id) %>"><%= t("javascripts.changesets.show.hide_comment") %></span>
<% elsif current_user and current_user.moderator? %>
<li id="c<%= comment.id %>">
<small class='text-muted'>
- <%= t(".hidden_commented_by_html",
- :when => friendly_date_ago(comment.created_at),
- :exact_time => l(comment.created_at),
+ <%= t(".hidden_comment_by_html",
+ :time_ago => tag.abbr(friendly_date_ago(comment.created_at),
+ :title => l(comment.created_at)),
:user => link_to(comment.author.display_name, user_path(comment.author))) %>
— <span class="action-button text-muted" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_unhide_url(comment.id) %>"><%= t("javascripts.changesets.show.unhide_comment") %></span>
</small>
<td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
<td><%= link_to issue.reported_user.display_name, user_path(issue.reported_user) if issue.reported_user %></td>
<td>
+ <% time_ago_tag = tag.abbr(time_ago_in_words(issue.updated_at, :scope => :"datetime.distance_in_words_ago"),
+ :title => l(issue.updated_at)) %>
<% if issue.user_updated %>
- <%= t ".last_updated_time_user_html", :user => link_to(issue.user_updated.display_name, user_path(issue.user_updated)),
- :time => time_ago_in_words(issue.updated_at, :scope => :"datetime.distance_in_words_ago"),
- :title => l(issue.updated_at) %>
+ <%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, user_path(issue.user_updated)),
+ :time_ago => time_ago_tag %>
<% else %>
- <%= t ".last_updated_time_html", :time => time_ago_in_words(issue.updated_at, :scope => :"datetime.distance_in_words_ago"),
- :title => l(issue.updated_at) %>
+ <%= time_ago_tag %>
<% end %>
</td>
</tr>
<div class='row'>
<div class='col-sm-7 user-image'></div>
<div class='col-sm-5 px-5 py-3 byosm'>
- <p class='h5 text-white text-nowrap'><%= t ".copyright_html" %></p>
+ <p class='h5 text-white text-nowrap'>
+ <%= t ".heading_html", :copyright => tag.span(t(".copyright_symbol_html")),
+ :br => tag.br %>
+ </p>
</div>
</div>
<div class='row'>
<% end %>
<%= render :layout => "about_section", :locals => { :icon => "community", :title => "community_driven" } do %>
- <p><%= t "site.about.community_driven_html", :diary_path => diary_entries_path %></p>
+ <p>
+ <%= t "site.about.community_driven_1_html", :osm_blog_link => link_to(t("site.about.community_driven_osm_blog"),
+ t("site.about.community_driven_osm_blog_url")),
+ :user_diaries_link => link_to(t("site.about.community_driven_user_diaries"),
+ diary_entries_path),
+ :community_blogs_link => link_to(t("site.about.community_driven_community_blogs"),
+ t("site.about.community_driven_community_blogs_url")),
+ :osm_foundation_link => link_to(t("site.about.community_driven_osm_foundation"),
+ t("site.about.community_driven_osm_foundation_url")) %>
+ </p>
<% end %>
<%= render :layout => "about_section", :locals => { :id => "open-data", :icon => "open", :title => "open_data" } do %>
- <p><%= t "site.about.open_data_html", :copyright_path => copyright_path %></p>
+ <p>
+ <%= t "site.about.open_data_1_html", :open_data => tag.i(t("site.about.open_data_open_data")),
+ :copyright_license_link => link_to(t("site.about.open_data_copyright_license"),
+ copyright_path) %></p>
<% end %>
<%= render :layout => "about_section", :locals => { :id => "legal", :icon => "legal", :title => "legal" } do %>
- <p><%= t "site.about.legal_1_html" %></p>
- <p><%= t "site.about.legal_2_html" %></p>
+ <p>
+ <%= t "site.about.legal_1_1_html", :openstreetmap_foundation_link => link_to(t("site.about.legal_1_1_openstreetmap_foundation"),
+ t("site.about.legal_1_1_openstreetmap_foundation_url")),
+ :terms_of_use_link => link_to(t("site.about.legal_1_1_terms_of_use"),
+ t("site.about.legal_1_1_terms_of_use_url")),
+ :aup_link => link_to(t("site.about.legal_1_1_aup"),
+ t("site.about.legal_1_1_aup_url")),
+ :privacy_policy_link => link_to(t("site.about.legal_1_1_privacy_policy"),
+ t("site.about.legal_1_1_privacy_policy_url")) %>
+ </p>
+ <p>
+ <%= t "site.about.legal_2_1_html", :contact_the_osmf_link => link_to(t("site.about.legal_2_1_contact_the_osmf"),
+ t("site.about.legal_2_1_contact_the_osmf_url")) %>
+ </p>
+ <p>
+ <%= t "site.about.legal_2_2_html", :registered_trademarks_link => link_to(t("site.about.legal_2_2_registered_trademarks"),
+ t("site.about.legal_2_2_registered_trademarks_url")) %>
+ </p>
<% end %>
<%= render :layout => "about_section", :locals => { :id => "partners", :icon => "partners", :title => "partners" } do %>
browse:
created: "Created"
closed: "Closed"
- created_html: "Created <abbr title='%{title}'>%{time}</abbr>"
- closed_html: "Closed <abbr title='%{title}'>%{time}</abbr>"
- created_by_html: "Created <abbr title='%{title}'>%{time}</abbr> by %{user}"
- deleted_by_html: "Deleted <abbr title='%{title}'>%{time}</abbr> by %{user}"
- edited_by_html: "Edited <abbr title='%{title}'>%{time}</abbr> by %{user}"
- closed_by_html: "Closed <abbr title='%{title}'>%{time}</abbr> by %{user}"
+ created_ago_html: "Created %{time_ago}"
+ closed_ago_html: "Closed %{time_ago}"
+ created_ago_by_html: "Created %{time_ago} by %{user}"
+ closed_ago_by_html: "Closed %{time_ago} by %{user}"
+ deleted_ago_by_html: "Deleted %{time_ago} by %{user}"
+ edited_ago_by_html: "Edited %{time_ago} by %{user}"
version: "Version"
in_changeset: "Changeset"
anonymous: "anonymous"
relation: "Relations (%{count})"
relation_paginated: "Relations (%{x}-%{y} of %{count})"
comment: "Comments (%{count})"
- hidden_commented_by_html: "Hidden comment from %{user} <abbr title='%{exact_time}'>%{when}</abbr>"
- commented_by_html: "Comment from %{user} <abbr title='%{exact_time}'>%{when}</abbr>"
+ hidden_comment_by_html: "Hidden comment from %{user} %{time_ago}"
+ comment_by_html: "Comment from %{user} %{time_ago}"
changesetxml: "Changeset XML"
osmchangexml: "osmChange XML"
feed:
status: Status
reports: Reports
last_updated: Last Updated
- last_updated_time_html: "<abbr title='%{title}'>%{time}</abbr>"
- last_updated_time_user_html: "<abbr title='%{title}'>%{time}</abbr> by %{user}"
+ last_updated_time_ago_user_html: "%{time_ago} by %{user}"
link_to_reports: View Reports
reports_count:
one: "%{count} Report"
site:
about:
next: Next
- copyright_html: <span>©</span>OpenStreetMap<br>contributors
+ heading_html: "%{copyright}OpenStreetMap %{br} contributors"
+ copyright_symbol_html: "©"
used_by_html: "%{name} provides map data for thousands of websites, mobile apps, and hardware devices"
lede_text: |
OpenStreetMap is built by a community of mappers that contribute and maintain data
aerial imagery, GPS devices, and low-tech field maps to verify that OSM
is accurate and up to date.
community_driven_title: Community Driven
- community_driven_html: |
+ community_driven_1_html: |
OpenStreetMap's community is diverse, passionate, and growing every day.
Our contributors include enthusiast mappers, GIS professionals, engineers
running the OSM servers, humanitarians mapping disaster-affected areas,
and many more.
- To learn more about the community, see the
- <a href='https://blog.openstreetmap.org'>OpenStreetMap Blog</a>,
- <a href='%{diary_path}'>user diaries</a>,
- <a href='https://blogs.openstreetmap.org/'>community blogs</a>, and
- the <a href='https://www.osmfoundation.org/'>OSM Foundation</a> website.
+ To learn more about the community, see the %{osm_blog_link},
+ %{user_diaries_link}, %{community_blogs_link}, and the
+ %{osm_foundation_link} website.
+ community_driven_osm_blog: OpenStreetMap Blog
+ community_driven_osm_blog_url: https://blog.openstreetmap.org
+ community_driven_user_diaries: user diaries
+ community_driven_community_blogs: community blogs
+ community_driven_community_blogs_url: https://blogs.openstreetmap.org/
+ community_driven_osm_foundation: OSM Foundation
+ community_driven_osm_foundation_url: https://www.osmfoundation.org/
open_data_title: Open Data
- open_data_html: |
- OpenStreetMap is <i>open data</i>: you are free to use it for any purpose
+ open_data_1_html: |
+ OpenStreetMap is %{open_data}: you are free to use it for any purpose
as long as you credit OpenStreetMap and its contributors. If you alter or
build upon the data in certain ways, you may distribute the result only
- under the same licence. See the <a href='%{copyright_path}'>Copyright and
- License page</a> for details.
+ under the same licence. See the %{copyright_license_link} for details.
+ open_data_open_data: open data
+ open_data_copyright_license: Copyright and License page
legal_title: Legal
- legal_1_html: |
+ legal_1_1_html: |
This site and many other related services are formally operated by the
- <a href='https://osmfoundation.org/'>OpenStreetMap Foundation</a> (OSMF)
+ %{openstreetmap_foundation_link} (OSMF)
on behalf of the community. Use of all OSMF operated services is subject
- to our <a href="https://wiki.osmfoundation.org/wiki/Terms_of_Use">Terms of Use</a>, <a href="https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy">
- Acceptable Use Policies</a> and our <a href="https://wiki.osmfoundation.org/wiki/Privacy_Policy">Privacy Policy</a>.
- legal_2_html: |
- Please <a href='https://osmfoundation.org/Contact'>contact the OSMF</a>
+ to our %{terms_of_use_link}, %{aup_link} and our %{privacy_policy_link}.
+ legal_1_1_openstreetmap_foundation: OpenStreetMap Foundation
+ legal_1_1_openstreetmap_foundation_url: https://osmfoundation.org/
+ legal_1_1_terms_of_use: Terms of Use
+ legal_1_1_terms_of_use_url: https://wiki.osmfoundation.org/wiki/Terms_of_Use
+ legal_1_1_aup: Acceptable Use Policies
+ legal_1_1_aup_url: https://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy
+ legal_1_1_privacy_policy: Privacy Policy
+ legal_1_1_privacy_policy_url: https://wiki.osmfoundation.org/wiki/Privacy_Policy
+ legal_2_1_html: |
+ Please %{contact_the_osmf_link}
if you have licensing, copyright or other legal questions.
- <br>
- OpenStreetMap, the magnifying glass logo and State of the Map are <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">registered trademarks of the OSMF</a>.
+ legal_2_1_contact_the_osmf: contact the OSMF
+ legal_2_1_contact_the_osmf_url: https://osmfoundation.org/Contact
+ legal_2_2_html: |
+ OpenStreetMap, the magnifying glass logo and State of the Map are %{registered_trademarks_link}.
+ legal_2_2_registered_trademarks: registered trademarks of the OSMF
+ legal_2_2_registered_trademarks_url: https://wiki.osmfoundation.org/wiki/Trademark_Policy
partners_title: Partners
copyright:
foreign:
# We need to explicitly reset the closed_at to some point in the future, and avoid the before_save callback
changeset.update_column(:closed_at, Time.now.utc + 1.day) # rubocop:disable Rails/SkipsModelValidations
- assert_match %r{^Created <abbr title='Mon, 01 Jan 2007 00:00:00 \+0000'>.*</abbr> by anonymous$}, changeset_details(changeset)
+ assert_match %r{^Created <abbr title="Mon, 01 Jan 2007 00:00:00 \+0000">.*</abbr> by anonymous$}, changeset_details(changeset)
changeset = create(:changeset, :created_at => Time.utc(2007, 1, 1, 0, 0, 0), :closed_at => Time.utc(2007, 1, 2, 0, 0, 0))
user_link = %(<a href="/user/#{ERB::Util.u(changeset.user.display_name)}">#{changeset.user.display_name}</a>)
- assert_match %r{^Closed <abbr title='Created: Mon, 01 Jan 2007 00:00:00 \+0000 Closed: Tue, 02 Jan 2007 00:00:00 \+0000'>.*</abbr> by #{user_link}$}, changeset_details(changeset)
+ assert_match %r{^Closed <abbr title="Created: Mon, 01 Jan 2007 00:00:00 \+0000 Closed: Tue, 02 Jan 2007 00:00:00 \+0000">.*</abbr> by #{user_link}$}, changeset_details(changeset)
end
end